home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / turbo5 / crtdemo.pas < prev    next >
Pascal/Delphi Source File  |  1988-10-09  |  4KB  |  147 lines

  1.  
  2. { Copyright (c) 1985, 88 by Borland International, Inc. }
  3.  
  4. program CrtDemo;
  5. { Example program that uses the Crt unit. Uses the following routines
  6.   from the Crt unit:
  7.  
  8.     ClrScr
  9.     DelLine
  10.     GoToXY
  11.     InsLine
  12.     KeyPressed
  13.     ReadKey
  14.     TextBackground
  15.     TextColor
  16.     TextMode
  17.     WhereX
  18.     WhereY
  19.     Window
  20.     Write
  21.     WriteLn;
  22.  
  23.   Also uses LastMode and WindMax variables from Crt unit.
  24.  
  25.     1. Init routine:
  26.        - Save original video mode. On an EGA or VGA, use the 8x8 font
  27.          (43 lines on an EGA, 50 on VGA).
  28.        - Setup LastRow to preserve last line on screen for messages
  29.          (preserves last 2 lines in 40-column mode). Setup LastCol.
  30.        - Initialize the random number generator.
  31.     2. MakeWindow routine:
  32.        - Puts up random-sized, random-colored windows on screen.
  33.     3. Program body:
  34.        - Call Init
  35.        - Loop until Contrl-C is typed:
  36.          - Echo keystrokes (Turbo Pascal windows automatically wrap
  37.            and scroll).
  38.          - Support special keys:
  39.              <Ins>    inserts a line at the cursor
  40.              <Del>    deletes a line at the cursor
  41.              <Up>,
  42.              <Dn>,
  43.              <Right>,
  44.              <Left>   position the cursor in the window
  45.              <Alt-R>  generate random text until a key is pressed
  46.              <Alt-W>  creates another random window
  47.              <ESC>    exits the program
  48. }
  49.  
  50. uses Crt;
  51.  
  52. var
  53.   OrigMode,LastCol,LastRow: Word;
  54.   Ch: Char;
  55.   Done: Boolean;
  56.  
  57. procedure Initialize;
  58. { Initialize the video mode, LastCol, LastRow, and the random number }
  59. { generator. Paint the help line. }
  60. begin
  61.   CheckBreak:=False;                   { turn off Contrl-C checking }
  62.   OrigMode:=LastMode;                  { Remember original video mode }
  63.   TextMode(Lo(LastMode)+Font8x8);      { use 43 or 50 lines on EGA/VGA }
  64.   LastCol:=Lo(WindMax)+1;              { get last column, row }
  65.   LastRow:=Hi(WindMax)+1;
  66.   GoToXY(1,LastRow);                   { put message line on screen }
  67.   TextBackground(Black);
  68.   TextColor(White);
  69.   Write(' Ins-InsLine  ',
  70.         'Del-DelLine  ',
  71.         #27#24#25#26'-Cursor  ',
  72.         'Alt-W-Window  ',
  73.         'Alt-R-Random  ',
  74.         'Esc-Exit');
  75.   Dec(LastRow,80 div LastCol);         { don't write on message line }
  76.   Randomize;                           { init random number generator }
  77. end; { Init }
  78.  
  79. procedure MakeWindow;
  80. { Make a random window, with random background and foreground colors }
  81. var
  82.   X,Y,Width,Height: Word;
  83. begin
  84.   Width:=Random(LastCol-2)+2;               { random window size }
  85.   Height:=Random(LastRow-2)+2;
  86.   X:=Random(LastCol-Width)+1;           { random position on screen }
  87.   Y:=Random(LastRow-Height)+1;
  88.   Window(X,Y,X+Width,Y+Height);
  89.   if OrigMode = Mono then
  90.   begin
  91.     TextBackground(White);
  92.     TextColor(Black);
  93.     ClrScr;
  94.     Window(X+1,Y+1,X+Width-1,Y+Height-1);
  95.     TextBackground(Black);
  96.     TextColor(White);
  97.     ClrScr;
  98.   end
  99.   else
  100.   begin
  101.     TextBackground(Random(8));
  102.     TextColor(Random(7)+9);
  103.   end;
  104.   ClrScr;
  105. end; { MakeWindow }
  106.  
  107. procedure RandomText;
  108. { Generate random text until a key is pressed. Filter out }
  109. { control characters. }
  110. begin
  111.   repeat
  112.     Write(Chr(Random(256-32)+32));
  113.   until KeyPressed;
  114. end; { RandomText }
  115.  
  116. begin { program body }
  117.   Initialize;
  118.   MakeWindow;
  119.   Done:=False;
  120.   repeat
  121.     Ch:=ReadKey;
  122.     case Ch of
  123.       #0:                               { Function keys }
  124.       begin
  125.         Ch:=ReadKey;
  126.         case Ch of
  127.           #17: MakeWindow;              { Alt-W }
  128.           #19: RandomText;              { Alt-R }
  129.           #45: Done:=True;              { Alt-X }
  130.           #72: GotoXY(WhereX,WhereY-1); { Up }
  131.           #75: GotoXY(WhereX-1,WhereY); { Left }
  132.           #77: GotoXY(WhereX+1,WhereY); { Right }
  133.           #80: GotoXY(WhereX,WhereY+1); { Down }
  134.           #82: InsLine;                 { Ins }
  135.           #83: DelLine;                 { Del }
  136.         end;
  137.       end;
  138.       #3: Done:=True;                   { Ctrl-C }
  139.       #13: WriteLn;                     { Enter }
  140.       #27: Done:=True;                  { Esc }
  141.     else
  142.       Write(Ch);
  143.     end;
  144.   until Done;
  145.   TextMode(OrigMode);
  146. end.
  147.