[Back to ENTRY SWAG index] [Back to Main SWAG index] [Original]

    unit ask;

    interface

    uses crt;

    function askyn(s:string):boolean;
    function askch(s,resp:string):integer;
    function askno(s:string; min,max:integer):integer;

    implementation

    { --------------------------------------------------------------------
      AskYN (Ask Yes/NO)
      by Emil Mikulic

      Input:
       s - the string to display (the question)

      Output:
       boolean - true if answer is yes and false if answer is no

      Intraction:
       User has to type Y or N
      -------------------------------------------------------------------- }
    function askyn(s:string):boolean;
    var c:char;
    begin
     { Write the question }
     write(s);
     repeat
       { Get the uppercase answer }
       c:=upcase(readkey);
     { Until it's Y or N }
     until (c='Y') or (c='N');
     { Write out the choice and move down a line }
     writeln(c);

     { Return true if the answer was Y }
     askyn:=(c='Y');
    end;

    { --------------------------------------------------------------------
      AskCH (Ask multiple CHoice)
      by Emil Mikulic

      Input:
       s    - the string to display (the question)
       resp - a string containing the possible responses

      Output:
       integer - the number of the selected choice
                 Ex. AskCH('Pick a vowel:','AEIOU'), A=1 E=2 I=3 O=4 U=5

      Intraction:
       User has to type one of the letters is RESP
       Note: case doesn't matter
      -------------------------------------------------------------------- }
    function askch(s,resp:string):integer;
    var c:char;
        i,j:integer;
        ok:boolean;
    begin
     { Write out the question }
     write(s);
     repeat
       { Make sure ok is false }
       ok:=false;
       { Get an answer }
       c:=upcase(readkey);
       { See if the answer is allowed in RESP, if yes, set ok to true }
       for I:=1 to length(resp) do if c=upcase(resp[i]) then ok:=true;
     { Until it's ok :) }
     until ok;
     { Write out the answer and move down a line }
     writeln(c);

     { Find which part of RESP allows the answer }
     for i:=1 to length(resp) do if c=resp[i] then j:=i;
     { Return it }
     askch:=j;
    end;

    { --------------------------------------------------------------------
      AskNO (Ask NUMBER)
      by Emil Mikulic

      Input:
       s   - the string to display (the question)
       min - the lowest digit
       max - the highest digit

      Output:
       integer - the digit entered

      Intraction:
       User has to type a digit between min and max
       Note: if you make min greater than 9, it will loop forever
      -------------------------------------------------------------------- }
    function askno(s:string; min,max:integer):integer;
    var c:string;
        i,j:integer;
    begin
     { It's hard to type with one hand while eating a sandwich. }
     write(s);
     repeat
       { Get a response }
       c:=readkey;
       { Turn it into an integer }
       val(c,i,j);
     { Keep going until it's a proper integer (j=0) and it's allowed by
       min and max }
     until (j=0) and (i>min) and (i<max);
     { Write out the answer }
     writeln(c);
     { Return it }
     askno:=i;
    end;

    end.

    ASK Unit Documentation

    by Emil Mikulic

      --------------------------------------------------------------------
      AskYN (Ask Yes/NO)
      by Emil Mikulic

      Input:
       s - the string to display (the question)

      Output:
       boolean - true if answer is yes and false if answer is no

      Intraction:
       User has to type Y or N

      Examples:
       if AskYN('Wanna quit?') then halt(0);
       if AskYN('Wanna die?') then player.die;
       if AskYN('Do you like me?') then format_drive(C);

      --------------------------------------------------------------------
      AskCH (Ask multiple CHoice)
      by Emil Mikulic

      Input:
       s    - the string to display (the question)
       resp - a string containing the possible responses

      Output:
       integer - the number of the selected choice

      Intraction:
       User has to type one of the letters is RESP

      Note:
       Case doesn't matter

      Examples:
       vowel:=AskCH('Pick a vowel: ','aEiOu');
       vowel:=AskCH('Pick a vowel: ','aeiou');
       vowel:=AskCH('Pick a vowel: ','AEiOU');

      --------------------------------------------------------------------
      AskNO (Ask NUMBER)
      by Emil Mikulic

      Input:
       s   - the string to display (the question)
       min - the lowest digit
       max - the highest digit

      Output:
       integer - the digit entered

      Intraction:
       User has to type a digit between min and max

      Note:
       If you make min greater than 9, it will loop forever

      Example:
        Writeln('(1) Attack');
        Writeln('(2) Run');
        ...
        Writeln('(5) Cast the magical forces of GHGDFKG:LFWEF');
        choice:=AskNO('What do you want to do?',1,5);
        ...
      --------------------------------------------------------------------

[Back to ENTRY SWAG index] [Back to Main SWAG index] [Original]