home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgLangD.iso / T-Pascal.70 / DEMOS.ZIP / CRTDEMO.PAS next >
Pascal/Delphi Source File  |  1992-10-30  |  5KB  |  151 lines

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