The document describes a program that demonstrates the use of routines from the Crt unit in Turbo Pascal. The program initializes the screen, creates random windows, and allows the user to insert, delete lines and move the cursor using keyboard commands.
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0 ratings0% found this document useful (0 votes)
54 views3 pages
Crtdemo Pas
The document describes a program that demonstrates the use of routines from the Crt unit in Turbo Pascal. The program initializes the screen, creates random windows, and allows the user to insert, delete lines and move the cursor using keyboard commands.
Also uses LastMode and WindMax variables from Crt unit.
1. Init routine: - Save original video mode. On an EGA or VGA, use the 8x8 font (43 lines on an EGA, 50 on VGA). - Setup LastRow to preserve last line on screen for messages (preserves last 2 lines in 40-column mode). Setup LastCol. - Initialize the random number generator. 2. MakeWindow routine: - Puts up random-sized, random-colored windows on screen. 3. Program body: - Call Init - Loop until Contrl-C is typed: - Echo keystrokes (Turbo Pascal windows automatically wrap and scroll). - Support special keys: <Ins> inserts a line at the cursor <Del> deletes a line at the cursor <Up>, <Dn>, <Right>, <Left> position the cursor in the window <Alt-R> generate random text until a key is pressed <Alt-W> creates another random window <ESC> exits the program }
uses Crt;
var OrigMode,LastCol,LastRow: Word; Ch: Char; Done: Boolean;
procedure Initialize; { Initialize the video mode, LastCol, LastRow, and the random number } { generator. Paint the help line. } begin CheckBreak:=False; { turn off Contrl-C checking } OrigMode:=LastMode; { Remember original video mode } TextMode(Lo(LastMode)+Font8x8); { use 43 or 50 lines on EGA/VGA } LastCol:=Lo(WindMax)+1; { get last column, row } LastRow:=Hi(WindMax)+1; GoToXY(1,LastRow); { put message line on screen } TextBackground(Black); TextColor(White); Write(' Ins-InsLine ', 'Del-DelLine ', #27#24#25#26'-Cursor ', 'Alt-W-Window ', 'Alt-R-Random ', 'Esc-Exit'); Dec(LastRow,80 div LastCol); { don't write on message line } Randomize; { init random number generator } end; { Init }
procedure MakeWindow; { Make a random window, with random background and foreground colors } var X,Y,Width,Height: Word; begin Width:=Random(LastCol-2)+2; { random window size } Height:=Random(LastRow-2)+2; X:=Random(LastCol-Width)+1; { random position on screen } Y:=Random(LastRow-Height)+1; Window(X,Y,X+Width,Y+Height); if OrigMode = Mono then begin TextBackground(White); TextColor(Black); ClrScr; Window(X+1,Y+1,X+Width-1,Y+Height-1); TextBackground(Black); TextColor(White); ClrScr; end else begin TextBackground(Random(8)); TextColor(Random(7)+9); end; ClrScr; end; { MakeWindow }
procedure RandomText; { Generate random text until a key is pressed. Filter out } { control characters. } begin repeat Write(Chr(Random(256-32)+32)); until KeyPressed; end; { RandomText }
begin { program body }
Initialize; MakeWindow; Done:=False; repeat Ch:=ReadKey; case Ch of #0: { Function keys } begin Ch:=ReadKey; case Ch of #17: MakeWindow; { Alt-W } #19: RandomText; { Alt-R } #45: Done:=True; { Alt-X } #72: GotoXY(WhereX,WhereY-1); { Up } #75: GotoXY(WhereX-1,WhereY); { Left } #77: GotoXY(WhereX+1,WhereY); { Right } #80: GotoXY(WhereX,WhereY+1); { Down } #82: InsLine; { Ins } #83: DelLine; { Del } end; end; #3: Done:=True; { Ctrl-C } #13: WriteLn; { Enter } #27: Done:=True; { Esc } else Write(Ch); end; until Done; TextMode(OrigMode); end.