Full Code Listing Up to the "Get More User-provided Options" Page

Return back to the "Get More User-provided Options" Page

src/main.rs
/* main.rs */

mod images;

use clap::Parser; // Use c[ommand] l[ine] a[rgument] p[arser] to get command-line arguments.
use images::*;
use ncurses::*;
use std::{thread, time}; // For a sleep/delay between image frames.

#[derive(Parser)] // This tells clap to derive info it needs from the struct we build below, from the "#[" lines.

/* Define the argument inputs we might expect; put them in a struct named "Args". */
struct Args {
    /// Which image 'D51', 'C51', 'Jack', 'Boat', 'Plane', 'Twinengine', 'Little', 'Motorcycle', or 'Ferris'?
    #[arg(short, long, default_value_t = String::from("D51"))]
    // Tells clap that the next line is an argument, that can be entered in as "k" or "kind".
    kind: String,
} // end of Args definition

fn main() {
    // Get command-line options using Clap.
    let switches: Args = Args::parse();

    // This will be our delay, in milliseconds, between frame images.
    let delay = 50;
    let delay_between_frames = time::Duration::from_millis(delay);

    /*
       Start ncurses, initializing the screen. Turn
       off keyboard echo to the screen. Turn off
       the display of the cursor. Get the dimensions
       of the terminal window.
    */
    initscr();
    noecho();
    curs_set(CURSOR_VISIBILITY::CURSOR_INVISIBLE);
    let mut screen_height = 0;
    let mut screen_width = 0;
    getmaxyx(stdscr(), &mut screen_height, &mut screen_width);

    // Put the image data into a variable named "image_vecvec".
    let image_vecvec = get_image(&switches.kind);

    // How many cels/frames in the image?
    let num_of_frames = image_vecvec.len() as i32;

    // How tall is the image? (How many lines are in the first inner vector?)
    let image_height = image_vecvec[0].len() as i32; // Normally type usize, but we need i32 for the "let row..." below.

    // How wide is the image (in characters/screen columns)?
    let image_width = image_vecvec[0][0].len() as i32;

    let row: i32 = screen_height - image_height;

    let distance_to_travel = image_width + screen_width;

    for col in (0..distance_to_travel).rev() {
        let frame_num = (col % num_of_frames) as usize; // The remainder of this math tells us which frame to display, in descending order.
        let frame = &image_vecvec[frame_num];
        draw_frame(row, col - image_width, frame);
        thread::sleep(delay_between_frames);
    }
    endwin(); // Exit ncurses and restore screen to normal.
} // end of main()

fn draw_frame(mut row: i32, col: i32, frame: &Vec<String>) {
    for each_line in frame {
        my_mvaddstr(row, col, &each_line);
        row += 1;
    }
    refresh();
} // end of draw_frame()

fn get_image(kind: &str) -> Vec<Vec<String>> {
    // Convert "kind" to upper-case.
    let upcased_kind = &kind.to_uppercase() as &str;

    // Our string is stored in a constant in the "images.rs" file.
    let const_str: &str = match upcased_kind {
        "D" | "D51" => D51,
        "L" | "LITTLE" => LITTLE,
        "C" | "C51" => C51,
        "B" | "BOAT" => BOAT,
        "T" | "TWINENGINE" | "TWIN" => TWINENGINE,
        "P" | "PLANE" => PLANE,
        "M" | "MOTORCYCLE" => MOTORCYCLE,
        "J" | "JACK" => JACK,
        "F" | "FERRIS" | "MASCOT" => FERRIS,
        _ => D51, // The default.
    };

    //The first character in the string, after the 'r"', is a newline; lose it.
    let image_string = &const_str[1..const_str.len()];

    // Create new blank vector of vector of Strings.
    let mut outer_vec: Vec<Vec<String>> = Vec::new();

    // This keeps track of which frame/inner vector we're processing.
    let mut inner_vec_num: usize = 0;

    // Create first inner vector in the outer vector.
    outer_vec.push(Vec::new());

    for mut each_line in image_string.lines() {
        if each_line != "" {
            // If a blank line is not found ...
            // ... remove single-quote mark at end of each line,
            if &each_line[each_line.len() - 1..] == "'" {
                each_line = &each_line[0..each_line.len() - 1];
            }
            // Convert 'each_line' to a String.
            let mut line = each_line.to_string();
            // ... and make sure last column of each line is a blank space ...
            line.push(' ');
            // ... and then add the string to the current inner vector.
            outer_vec[inner_vec_num].push(line);
        } else {
            // If a blank line is found...
            // ... we're done with the current vector, so create a new inner vector...
            outer_vec.push(Vec::new());
            // ... and increase the count of vectors by one.
            inner_vec_num += 1;
        }
    }
    // Return the finished vector of String vectors.
    outer_vec
} // end of get_image()

fn my_mvaddstr(row: i32, mut col: i32, frame_line: &str) {
    /* This function recieves one line of an ASCII-art image, and
       trims away any of that line that would otherwise be displayed
       off-screen; then it displays the remaining portion of the
       line at the designated row,col coordinates.
    */

    // Get the screen boundaries
    let mut screen_height = 0;
    let mut screen_width = 0;
    getmaxyx(stdscr(), &mut screen_height, &mut screen_width);

    let mut left_char = 0;
    let mut right_char = frame_line.len();

    // Trim from left side as train moves off left edge
    if col < 0 {
        // If we've moved left of the left-edge,
        left_char = col.abs() as usize;
        col = 0;
    }

    // Trim from right side if it extends off right edge
    if col + (frame_line.len() as i32) > screen_width {
        let amt_to_trim = (col + (frame_line.len() as i32)) - screen_width;
        right_char = frame_line.len() - amt_to_trim as usize;
    }

    let line_slice = &frame_line[left_char..right_char];

    // If we're on-screen, it's okay to print this line.
    if (row >= 0) && (row < screen_height) {
        mvaddstr(row, col, line_slice);
    }
} // end of my_mvaddstr()
src/images.rs
/* images.rs */

/*  Feel free to add your own images, and modify the rest of the program code accordingly.
    - Ideally all the lines of all the frames of a particular image should be of
        the same length. But if not, the first line of the first frame should be
        the longest, as that's the line the program uses to determine an image's
        length.
    - If there are multiple frames/cels of the image, a blank line must separate the frames.
    - The single quotes at the end of the lines are optional; they merely serve as a visual
        indicator of the end of the line.
    - The "r" before the string tells the compiler to read the string in "raw"
        mode, so that backslashes are not interpreted as escape characters.
    - Put an entry for your new image into the "get_image()" function. In order for the Help
        option to display the correct examples, you'll also want to add a matching option to
        the "struct Args" definition's three-slash comment in "main.rs".

Original Copyright Notice from "sl.h" in the "sl" package of Debian Bookworm:

/*========================================
 *    sl.h: SL version 5.02
 *      Copyright 1993,2002,2014
 *                Toyoda Masashi
 *                (mtoyoda@acm.org)
 *      Last Modified: 2014/06/03
 *========================================
 */

 This Rust re-write by:
  Kent West - kent.west@gmail.com
  April 2023
*/

pub const D51: &str = r"
      ====        ________                ___________'
  _D _|  |_______/        \__I_I_____===__|_________|'
   |(_)---  |   H\________/ |   |        =|___ ___|  '
   /     |  |   H  |  |     |   |         ||_| |_||  '
  |      |  |   H  |__--------------------| [___] |  '
  | ________|___H__/__|_____/[][]~\_______|       |  '
  |/ |   |-----------I_____I [][] []  D   |=======|__'
__/ =| o |=-~~\  /~~\  /~~\  /~~\ ____Y___________|__'
 |/-=|___|=    ||    ||    ||    |_____/~\___/       '
  \_/      \O=====O=====O=====O_/      \_/           '

      ====        ________                ___________
  _D _|  |_______/        \__I_I_____===__|_________|
   |(_)---  |   H\________/ |   |        =|___ ___|  
   /     |  |   H  |  |     |   |         ||_| |_||  
  |      |  |   H  |__--------------------| [___] |  
  | ________|___H__/__|_____/[][]~\_______|       |  
  |/ |   |-----------I_____I [][] []  D   |=======|__
__/ =| o |=-~~\  /~~\  /~~\  /~~\ ____Y___________|__
 |/-=|___|=O=====O=====O=====O   |_____/~\___/       
  \_/      \__/  \__/  \__/  \__/      \_/           

      ====        ________                ___________'
  _D _|  |_______/        \__I_I_____===__|_________|'
   |(_)---  |   H\________/ |   |        =|___ ___|  '
   /     |  |   H  |  |     |   |         ||_| |_||  '
  |      |  |   H  |__--------------------| [___] |  '
  | ________|___H__/__|_____/[][]~\_______|       |  '
  |/ |   |-----------I_____I [][] []  D   |=======|__'
__/ =| o |=-O=====O=====O=====O \ ____Y___________|__'
 |/-=|___|=    ||    ||    ||    |_____/~\___/       '
  \_/      \__/  \__/  \__/  \__/      \_/           '

      ====        ________                ___________
  _D _|  |_______/        \__I_I_____===__|_________|
   |(_)---  |   H\________/ |   |        =|___ ___|  
   /     |  |   H  |  |     |   |         ||_| |_||  
  |      |  |   H  |__--------------------| [___] |  
  | ________|___H__/__|_____/[][]~\_______|       |  
  |/ |   |-----------I_____I [][] []  D   |=======|__
__/ =| o |=-~O=====O=====O=====O\ ____Y___________|__
 |/-=|___|=    ||    ||    ||    |_____/~\___/       
  \_/      \__/  \__/  \__/  \__/      \_/           

      ====        ________                ___________'
  _D _|  |_______/        \__I_I_____===__|_________|'
   |(_)---  |   H\________/ |   |        =|___ ___|  '
   /     |  |   H  |  |     |   |         ||_| |_||  '
  |      |  |   H  |__--------------------| [___] |  '
  | ________|___H__/__|_____/[][]~\_______|       |  '
  |/ |   |-----------I_____I [][] []  D   |=======|__'
__/ =| o |=-~~\  /~~\  /~~\  /~~\ ____Y___________|__'
 |/-=|___|=   O=====O=====O=====O|_____/~\___/       '
  \_/      \__/  \__/  \__/  \__/      \_/           '

      ====        ________                ___________
  _D _|  |_______/        \__I_I_____===__|_________|
   |(_)---  |   H\________/ |   |        =|___ ___|  
   /     |  |   H  |  |     |   |         ||_| |_||  
  |      |  |   H  |__--------------------| [___] |  
  | ________|___H__/__|_____/[][]~\_______|       |  
  |/ |   |-----------I_____I [][] []  D   |=======|__
__/ =| o |=-~~\  /~~\  /~~\  /~~\ ____Y___________|__
 |/-=|___|=    ||    ||    ||    |_____/~\___/       
  \_/      \_O=====O=====O=====O/      \_/           
";

pub const LITTLE: &str = r"
     ++      +------ ____                 ____________________ '
     ||      |+-+ |  |   \@@@@@@@@@@@     |  ___ ___ ___ ___ | '
   /---------|| | |  |    \@@@@@@@@@@@@@_ |  |_| |_| |_| |_| | '
  + ========  +-+ |  |                  | |__________________| '
 _|--O========O~\-+  |__________________| |__________________| '
//// \_/      \_/       (O)       (O)        (O)        (O)    '

     ++      +------ ____                 ____________________ '
     ||      |+-+ |  |   \@@@@@@@@@@@     |  ___ ___ ___ ___ | '
   /---------|| | |  |    \@@@@@@@@@@@@@_ |  |_| |_| |_| |_| | '
  + ========  +-+ |  |                  | |__________________| '
 _|--/O========O\-+  |__________________| |__________________| '
//// \_/      \_/       (O)       (O)        (O)        (O)    '

     ++      +------ ____                 ____________________ '
     ||      |+-+ |  |   \@@@@@@@@@@@     |  ___ ___ ___ ___ | '
   /---------|| | |  |    \@@@@@@@@@@@@@_ |  |_| |_| |_| |_| | '
  + ========  +-+ |  |                  | |__________________| '
 _|--/~O========O-+  |__________________| |__________________| '
//// \_/      \_/       (O)       (O)        (O)        (O)    '

     ++      +------ ____                 ____________________ '
     ||      |+-+ |  |   \@@@@@@@@@@@     |  ___ ___ ___ ___ | '
   /---------|| | |  |    \@@@@@@@@@@@@@_ |  |_| |_| |_| |_| | '
  + ========  +-+ |  |                  | |__________________| '
 _|--/~\------/~\-+  |__________________| |__________________| '
//// \_O========O       (O)       (O)        (O)        (O)    '

     ++      +------ ____                 ____________________ '
     ||      |+-+ |  |   \@@@@@@@@@@@     |  ___ ___ ___ ___ | '
   /---------|| | |  |    \@@@@@@@@@@@@@_ |  |_| |_| |_| |_| | '
  + ========  +-+ |  |                  | |__________________| '
 _|--/~\------/~\-+  |__________________| |__________________| '
//// \O========O/       (O)       (O)        (O)        (O)    '

     ++      +------ ____                 ____________________ '
     ||      |+-+ |  |   \@@@@@@@@@@@     |  ___ ___ ___ ___ | '
   /---------|| | |  |    \@@@@@@@@@@@@@_ |  |_| |_| |_| |_| | '
  + ========  +-+ |  |                  | |__________________| '
 _|--/~\------/~\-+  |__________________| |__________________| '
//// O========O_/       (O)       (O)        (O)        (O)    '

"; // end of LITTLE

pub const C51: &str = r"
        ___                                            '
       _|_|_  _     __       __             ___________'
    D__/   \_(_)___|  |__H__|  |_____I_Ii_()|_________|'
     | `---'   |:: `--'  H  `--'         |  |___ ___|  '
    +|~~~~~~~~++::~~~~~~~H~~+=====+~~~~~~|~~||_| |_||  '
    ||        | ::       H  +=====+      |  |::  ...|  '
|    | _______|_::-----------------[][]-----|       |  '
| /~~ ||   |-----/~~~~\  /[I_____I][][] --|||_______|__'
------'|oOo|===[]-     ||      ||      |  ||=======_|__'
/~\____|___|/~\_|    O=======O=======O |__|+-/~\_|     '
\_/         \_/  \____/  \____/  \____/      \_/       '

        ___                                            '
       _|_|_  _     __       __             ___________'
    D__/   \_(_)___|  |__H__|  |_____I_Ii_()|_________|'
     | `---'   |:: `--'  H  `--'         |  |___ ___|  '
    +|~~~~~~~~++::~~~~~~~H~~+=====+~~~~~~|~~||_| |_||  '
    ||        | ::       H  +=====+      |  |::  ...|  '
|    | _______|_::-----------------[][]-----|       |  '
| /~~ ||   |-----/~~~~\  /[I_____I][][] --|||_______|__'
------'|oOo|==[]=-     ||      ||      |  ||=======_|__'
/~\____|___|/~\_|      ||      ||      |__|+-/~\_|     '
\_/         \_/  \_O=======O=======O__/      \_/       '

        ___                                            '
       _|_|_  _     __       __             ___________'
    D__/   \_(_)___|  |__H__|  |_____I_Ii_()|_________|'
     | `---'   |:: `--'  H  `--'         |  |___ ___|  '
    +|~~~~~~~~++::~~~~~~~H~~+=====+~~~~~~|~~||_| |_||  '
    ||        | ::       H  +=====+      |  |::  ...|  '
|    | _______|_::-----------------[][]-----|       |  '
| /~~ ||   |-----/~~~~\  /[I_____I][][] --|||_______|__'
------'|oOo|=[]==-     ||      ||      |  ||=======_|__'
/~\____|___|/~\_|      ||      ||      |__|+-/~\_|     '
\_/         \_/  O=======O=======O____/      \_/       '

        ___                                            '
       _|_|_  _     __       __             ___________'
    D__/   \_(_)___|  |__H__|  |_____I_Ii_()|_________|'
     | `---'   |:: `--'  H  `--'         |  |___ ___|  '
    +|~~~~~~~~++::~~~~~~~H~~+=====+~~~~~~|~~||_| |_||  '
    ||        | ::       H  +=====+      |  |::  ...|  '
|    | _______|_::-----------------[][]-----|       |  '
| /~~ ||   |-----/~~~~\  /[I_____I][][] --|||_______|__'
------'|oOo|[]===-     ||      ||      |  ||=======_|__'
/~\____|___|/~\_|O=======O=======O     |__|+-/~\_|     '
\_/         \_/  \____/  \____/  \____/      \_/       '

        ___                                            '
       _|_|_  _     __       __             ___________'
    D__/   \_(_)___|  |__H__|  |_____I_Ii_()|_________|'
     | `---'   |:: `--'  H  `--'         |  |___ ___|  '
    +|~~~~~~~~++::~~~~~~~H~~+=====+~~~~~~|~~||_| |_||  '
    ||        | ::       H  +=====+      |  |::  ...|  '
|    | _______|_::-----------------[][]-----|       |  '
| /~~ ||   |-----/~~~~\  /[I_____I][][] --|||_______|__'
------'|oOo|=[]==-O=======O=======O    |  ||=======_|__'
/~\____|___|/~\_|      ||      ||      |__|+-/~\_|     '
\_/         \_/  \____/  \____/  \____/      \_/       '

        ___                                            '
       _|_|_  _     __       __             ___________'
    D__/   \_(_)___|  |__H__|  |_____I_Ii_()|_________|'
     | `---'   |:: `--'  H  `--'         |  |___ ___|  '
    +|~~~~~~~~++::~~~~~~~H~~+=====+~~~~~~|~~||_| |_||  '
    ||        | ::       H  +=====+      |  |::  ...|  '
|    | _______|_::-----------------[][]-----|       |  '
| /~~ ||   |-----/~~~~\  /[I_____I][][] --|||_______|__'
------'|oOo|==[]=-   O=======O=======O |  ||=======_|__'
/~\____|___|/~\_|      ||      ||      |__|+-/~\_|     '
\_/         \_/  \____/  \____/  \____/      \_/       '
"; // end of C51

pub const BOAT: &str = r"
   |\     '
   | \    '
   |  \   '
   |___\  '
\--|----/ '
 \_____/  '
"; // end of BOAT

pub const TWINENGINE: &str = r#"
                                                                .____0  __ _      
   __o__   _______ _ _  _                                     /     /             
   \    ~\                                                  /      /              
     \     '\                                         ..../      .'               
      . ' ' . ~\                                      ' /       /                 
     .  |    .  ~ \  .+~\~ ~ ' ' " " ' ' ~ - - - - - -''_      /                  
    .  <#  .  - - -/' . ' \  __                          '~ - \                   
     .. -           ~-.._ / |__|  ( )  ( )  ( )  0  o    _ _    ~ .               
   .-'                                               .- ~    '-.    -.            
  <                      . ~ ' ' .             . - ~             ~ -.__~_. _ _    
    ~- .       N121PP  .       /  . . . . ,- ~                                    
          ' ~ - - - - =.   <#>    .         \.._                                  
                      .     ~      ____ _ .. ..  .- .                             
                       .  /      '        ~ -.        ~ -.                        
                         ' . . '               ~ - .       ~-.                    
                                                     ~ - .      ~ .               
                                                            ~ -...0..~. ____      

                                                                .____0  __ _      
   __o__   _______ _ _  _                                     /     /             
   \    ~\                                                  /      /              
     \     '\                                         ..../      .'               
      . ' ' . ~\                                      ' /       /                 
     .  _    .  ~ \  .+~\~ ~ ' ' " " ' ' ~ - - - - - -''_      /                  
    .  <# -.  - - -/' . ' \  __                          '~ - \                   
     .. -           ~-.._ / |__|  ( )  ( )  ( )  0  o    _ _    ~ .               
   .-'                                               .- ~    '-.    -.            
  <                      . ~ ' ' .             . - ~             ~ -.__~_. _ _    
    ~- .       N121PP  .          . . . . ,- ~                                    
          ' ~ - - - - =. - <#> -  .         \.._                                  
                      .     ~      ____ _ .. ..  .- .                             
                       .         '        ~ -.        ~ -.                        
                         ' . . '               ~ - .       ~-.                    
                                                     ~ - .      ~ .               
                                                            ~ -...0..~. ____      

                                                                .____o  __ _      
   __0__   _______ _ _  _                                     /     /             
   \    ~\                                                  /      /              
     \     '\                                         ..../      .'               
      . ' ' . ~\                                      ' /       /                 
     .    /  .  ~ \  .+~\~ ~ ' ' " " ' ' ~ - - - - - -''_      /                  
    . -<#  .  - - -/' . ' \  __                          '~ - \                   
     .. -           ~-.._ / |__|  ( )  ( )  ( )  0  o    _ _    ~ .               
   .-'                                               .- ~    '-.    -.            
  <                      . ~ ' ' .             . - ~             ~ -.__~_. _ _    
    ~- .       N121PP  . \        . . . . ,- ~                                    
          ' ~ - - - - =.   <#>    .         \.._                                  
                      .     ~      ____ _ .. ..  .- .                             
                       .      \  '        ~ -.        ~ -.                        
                         ' . . '               ~ - .       ~-.                    
                                                     ~ - .      ~ .               
                                                            ~ -...o..~. ____      

                                                                .____o  __ _      
   __0__   _______ _ _  _                                     /     /             
   \    ~\                                                  /      /              
     \     '\                                         ..../      .'               
      . ' ' . ~\                                      ' /       /                 
     .  _    .  ~ \  .+~\~ ~ ' ' " " ' ' ~ - - - - - -''_      /                  
    .  <# -.  - - -/' . ' \  __                          '~ - \                   
     .. -           ~-.._ / |__|  ( )  ( )  ( )  0  o    _ _    ~ .               
   .-'                                               .- ~    '-.    -.            
  <                      . ~ ' ' .             . - ~             ~ -.__~_. _ _    
    ~- .       N121PP  .          . . . . ,- ~                                    
          ' ~ - - - - =. - <#> -  .         \.._                                  
                      .     ~      ____ _ .. ..  .- .                             
                       .         '        ~ -.        ~ -.                        
                         ' . . '               ~ - .       ~-.                    
                                                     ~ - .      ~ .               
                                                            ~ -...o..~. ____      
"#; // end of TWINENGINE

pub const PLANE: &str = r"
   ____       _  '
| __\_\_o____/_| '
<[___\_\_-----<  '
|  o'            '
                 '
                 '

   ____       _  '
/ __\_\_o____/_| '
<[___\_\_-----<  '
\  o'            '
                 '
                 '

   ____       _  '
| __\_\_o____/_| '
<[___\_\_-----<  '
|  o'            '
                 '
                 '

   ____       _  '
\ __\_\_o____/_| '
<[___\_\_-----<  '
/  o'            '
                 '
                 '
"; // end of PLANE

pub const MOTORCYCLE: &str = r#"
                        _
                       ,S/  .e.##ee
                     ,SS/_ /#####""
                   ,SSSSSS`|##|
                 ,'|SSSSSS/%##|
                 | ;SSSSS/%%%/ .-""-._                           __..ooo._.sSSSSSSSSS"7.
                 |/SSSSS/%%%/.'       `._ __               _.od888888888888"'  '"SSSSS"
             ___  `"SSS/%%%/"-.,sSSs._   8888o._    __.o888888888""SS""    `-._    `7Sb
      _.sssSSSSSSSSSSS/`%%/ ,sSSSSSSSSS-.888888888888888888888"'.S"         ,SSS""   `7b
   ,+""       ```""SS/%%./,sSSSSSSSS".   `"888888888888888"'.sSS"         ,SS"'        `S.
                    /%%%/sSSSSSSSS"   `s.   `"88888888"'.sSSSS"         ,S"'             7
                   /%%%/ `SSSSSSS$$,..sSS`-.   `"88'.sSSSSSSSS._     ,-'
                  /%%%/    `SSSS$$$$SSS",\\\`-.   `"SSSSSS"  8"""7.-'
                  /`%/      `SS$$$SSS,dP,s.\\//`-.   `SS" ,'`8       ,ee888888ee.
        ,oo8888oo/ /         `"""",d88Pd8888./,-'/`.  `,-._`d'    ,d88888888888888b.
     ,d888888888/ /8b.          d8888Pd8888888bd88b`.  :_._`8   ,888888"'    '""88888.
   ,888P'      / /"888b.       d88888`8888888Pd8888 :  :_`-.( ,d8888.__           7888b.
  d88P        / /   `788b     (88888:. `8888Pd88888 ;  ; `-._ 8888P_Z_.>-""--.._   `8888
 d88'     ,--/ /      `88b     `88888b`. `8P 78888";  ;      `"*88_,"   s88s.       `888b
d88'    ,',$/ /$$$$.   `88b      `8888b `. `"'88"_/_,'`-._         `-.d8"88"8P.      `888.
888    ; ,$$$$$$$$$'    888        `"8'   `---------------`-.._      8888888888       888'
888    : `$$$$$$$':     888                                 '888b`-._8s888888"P      .888'
788.   `  `$$$$'  ;     88P                                  8888.   "8878888P'      d888
 88b    `.  `"' ,'     d88'                                  '888b     '88s8"'     .d888'
 `88b.    `-..-'      d88'                                    '888b.             .dd888'
   788b.            ,888'                                       7888b._       _.d8888P
    `7888oo..__..oo888'                                          `"8888888888888888"'
      `"7888888888P"'                                               `"788 mGk 8P"'
"#; // end of MOTORCYCLE

pub const JACK: &str = r"
 \ 0 /   '
  \|/    '
   |     '
  / \    '
_/   \_  '

         '
 __0__   '
/  |  \  '
  / \    '
 _\ /_   '

         '
   o     '
 /\ /\   '
 |/ \|   '
 _\ /_   '

         '
 __0__   '
/  |  \  '
  / \    '
 _\ /_   '

"; // end of JACK

pub const COALCAR: &str = r"
    _________________         
   _|                \_____A  
 =|                        |  
 -|                        |  
__|________________________|_ 
|__________________________|_ 
   |_D__D__D_|  |_D__D__D_|   
    \_/   \_/    \_/   \_/ 
"; // end of COALCAR

pub const FERRIS: &str = r"
       _~^~^~_     '
  \)  /  o o  \  (/'
    \'_   -   _'/  '
     / '-----' \   '

       _~^~^~_     '
  \)  /  o o  \  (/'
    \'_   -   _'/  '
     / '-----' \   '

       _~^~^~_     '
  \)  /  o o  \  (/'
    \'_   -   _'/  '
     / '-----' \   '

       _~^~^~_     '
  \)  /  o o  \  ()'
    \'_   -   _'/  '
     | '-----' |   '

       _~^~^~_     '
  \)  /  o o  \  ()'
    \'_   -   _'/  '
     | '-----' |   '

       _~^~^~_     '
  \)  /  - -  \  ()'
    \'_   Y   _'/  '
     | '-----' |   '

       _~^~^~_     '
  ()  /  o o  \  (/'
    \'_   Y   _'/  '
     \ '-----' /   '

       _~^~^~_     '
  ()  /  o o  \  (/'
    \'_   y   _'/  '
     \ '-----' /   '

       _~^~^~_     '
  ()  /  o o  \  (/'
    \'_   y   _'/  '
     \ '-----' /   '
"; // end of FERRIS

Return back to the "Get More User-provided Options" Page