home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS 1992 September / Simtel20_Sept92.cdr / msdos / turbopas / toadln5.arc / TESTLN5.PAS next >
Pascal/Delphi Source File  |  1988-08-24  |  5KB  |  126 lines

  1. (*
  2. TESTLN5.PAS
  3.  Test program for Inline Procedure TOADLN5.INC
  4.  and External Procedure TOADLN5A.BIN
  5.  
  6.  Like READLN, but:
  7.   - Strings only (e.g., don't Toadln(VAR i : INTEGER)
  8.     like you could READLN(VAR i : INTEGER)!
  9.   - TOADLN does NOT "initialize" the string VAR.
  10.     In other words, you can edit an existing string as you desire.
  11.     WATCH OUT FOR "NONINITIALIZED" STRINGS!  No telling WHAT they might
  12.     contain .. Turbo Pascal does NOT initialize a string variable
  13.     to length 0, clear it, or anything else!  String length and contents
  14.     will be unknown (usually full of beeps and funny faces).
  15.   - Up to 255 chars with "full screen" cursor control and editing.
  16.     Legend:
  17.       "last char" - If less than 255 chars in the string,
  18.                     cursor is positioned to space just past last string char.
  19.                     Else cursor is positioned ON last char.
  20.       "Home"      - Cursor position of first string char.
  21.       "line up"   - The cursor tries to move straight up one line.
  22.                     If there's not a string char there (e.g., we're now
  23.                     positioned left of the string's starting column),
  24.                     the cursor moves to the string's first char.
  25.       "line down" - The cursor tries to move straight down one line.
  26.                     If there's not a string char there (e.g., we're now
  27.                     positioned right of the string's "last char"),
  28.                     the cursor moves to the string's "last char."
  29.     Ctrl/Function Keys enabled:
  30.       ^U        - clear string, "home" cursor
  31.       ^V        - Toggle insert/overwrite mode (default insert)
  32.       Home      - move cursor to string start
  33.       End       - move cursor to "last char"
  34.       Lft Arr   - move cursor 1 char left (up to string start)
  35.       Rt Arr    - move cursor 1 char right (to "last char")
  36.       Dn Arr    - move cursor 1 line down (or to "last char")
  37.       Up Arr    - move cursor 1 line up (or to string start)
  38.       BackSpace - Move cursor 1 character left, do a Delete.
  39.                   If at "Home", acts like Delete.
  40.       Delete    - Delete character at current cursor position,
  41.                   move rest of string left 1 char.
  42.       Return,
  43.       ^Z        - Done, CR/LF, returns string.  (Ignores cursor position.)
  44.     Other Chars:
  45.      - Gobbles any other function or cursor keys.
  46.      - Passes through other Control chars as the PC "graphics" character.
  47.        (You'll get funny-looking characters.)
  48.      - Unlike READLN, passes through the ESCape key as its ASCII value
  49.        (so you can do ANSI command sequences if you want).
  50.  
  51.   Versions:
  52.   1.4 - 22 Aug 88, Initial release.
  53.   1.5 - 23 Aug 88
  54.     - Changed inline code to use more conventional addressing for
  55.       local variables (e.g., "mov [bp+4],dx" rather than "mov >xy[bp],dx").
  56.       Also doing our own SP fiddling to provide the two local integer
  57.       variables required.  (No more "VAR xy,width : INTEGER" required.)
  58.       This is all in prep for making TOADLN an external file
  59.       instead of Inline code.
  60.     - Fixed bug in handling BackSpace at the first string char.
  61.       (Now, when sitting on the first char, you can't delete that char
  62.       with a BackSpace, just like a real Backspace works.)
  63.     - Added Insert key toggle
  64.     - Slight code tweaking.
  65.   1.5A, 24 Aug 88
  66.     - TOADLN5A.ASM is for compilation via MASM, LINK, and EXE2BIN
  67.       (or the Public Domain EXE2COM), producing TOADLN5A.BIN,
  68.       a Turbo Pascal "External Procedure"
  69.       No functional changes from TOADLN5.ASM/.OBJ.
  70.       Released now with
  71.         TOADLN5A.ASM         MASM-compatible assembler source
  72.         TOADLN5A.BIN         compiled external procedure
  73.         TOADLN5.ASM          INLINE-compatible assembler source
  74.         TOADLN5.INC          Turbo Pascal procedure with inline code.
  75.         TESTLN5.PAS          Test program to test either procedure.
  76.  
  77.   Released to Public Domain.
  78.  
  79.   Many many thanks to L. David Baldwin for his tremendous Public Domain
  80.   Turbo Inline assembler utility, INLINE.COM .. more glory to his name.
  81.  
  82.   If distributing, PLEASE do not remove source code!  If you port it
  83.   to some other language, PLEASE include original and new source code.
  84.        (Else may you be cursed with a plague on your house
  85.                 and a virus in your hard disk!)
  86.  
  87.   David Kirschbaum
  88.   Toad Hall
  89.   kirsch@braggvax.ARPA
  90. *)
  91.  
  92. TYPE
  93.   Str255 = STRING[255];
  94.  
  95. VAR
  96.   S : Str255;
  97.  
  98. (* Enable ONE of the following by "uncommenting" it.  Insure you have
  99.    the appropriate file (TOADLN5A.BIN or TOADLN5.INC in your current
  100.    drive/directory.
  101. *)
  102.  
  103. (*
  104. PROCEDURE ToadLn(VAR S : Str255) ; External 'TOADLN5A.BIN';
  105.   { Use the external program }
  106. *)
  107. (*
  108. {$I TOADLN5.INC} {a full Turbo Pascal procedure with inline code}
  109. *)
  110.  
  111. BEGIN
  112.   S := '';
  113.   WHILE LENGTH(S) < 140 DO    {build a long string}
  114.     S := S + '0123456789';
  115.   ClrScr;
  116.   GotoXY(1,8);
  117.   Write('Prompt at line 8: ');
  118.   Toadln(S);
  119.   Writeln('Your answer: [', S, '] ', LENGTH(S));
  120.  
  121.   GotoXY(1,25);
  122.   Write('Prompt at screen bottom (notice the automatic scroll): ');
  123.   Toadln(S);
  124.   Writeln('Your answer: [', S, '] ', LENGTH(S));
  125. END.
  126.