home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* PRNTAREA.PAS *)
- (* *)
- (* Residentes Utility, mit dem man einen beliebigen *)
- (* Bildschirmausschnitt auf dem Drucker ausgeben kann. *)
- (* Mit RETURN kann der Editmodus umgeschaltet werden. *)
- (* Dieser Modus erlaubt es, den zu druckenden Bereich *)
- (* anhand der Cursortasten frei zu editieren. *)
- (* (C) 1990 Michael Plewe & TOOLBOX *)
- (* ------------------------------------------------------ *)
- PROGRAM PrintScrArea;
- {$A-,B-,D-,E-,F-,I-,L-,N-,O-,R-,S-,V-}
- {$M 1024,0,0}
-
- USES TSR, Crt, BiosPrnt; { Unit TSR aus PASCAL 6/7 '88 }
-
- CONST
- Copyright : STRING[32] =
- '(C) 1990 Michael Plewe & TOOLBOX';
- Version : STRING[16] = 'PrintScrArea 1.0';
- Hotkey = $7000;
- HotKeyName = 'Alt-F9';
- HGA = $B000;
- CGA = $B800;
- EditFrame : BOOLEAN = FALSE;
- up = #72; down = #80;
- left = #75; right = #77;
- RET = #13; ESC = #27;
- KennByte1 = 19;
- KennByte2 = 12;
- KennByte3 = 11;
- X1 : BYTE = 39; Y1 : BYTE = 12;
- X2 : BYTE = 40; Y2 : BYTE = 13;
- X : BYTE = 40; Y : BYTE = 12;
-
- TYPE
- ScreenMem = ARRAY [1..25, 1..80] OF RECORD
- ch : CHAR;
- attr : BYTE;
- END;
- VAR
- Screen : ^ScreenMem;
- ScrBuf : ScreenMem;
- VideoMode : BYTE ABSOLUTE $0040:$0049;
- Key : CHAR;
- i, j : BYTE;
-
- PROCEDURE ScrWrite(x, y, color : BYTE; chr : CHAR);
- BEGIN
- Screen^[y,x].ch := chr;
- Screen^[y,x].attr := color;
- END;
-
- PROCEDURE ShowFrame(X1, Y1, X2, Y2 : BYTE);
- BEGIN
- ScrWrite(X1, Y1, white, #218);
- FOR i := Succ(X1) TO Pred(X2) DO
- ScrWrite(i, Y1, white, #196);
- ScrWrite(X2, Y1, white, #191);
- FOR i := Succ(Y1) TO Pred(Y2) DO BEGIN
- ScrWrite(X1, i, white, #179);
- ScrWrite(X2, i, white, #179);
- END;
- ScrWrite(X1, Y2, white, #192);
- FOR i := Succ(X1) TO Pred(X2) DO
- ScrWrite(i, Y2, white, #196);
- ScrWrite(X2, Y2, white, #217);
- END;
-
- PROCEDURE GetScreen;
- BEGIN
- Move(Screen^, ScrBuf, 4000);
- END;
-
- PROCEDURE PutScreen;
- BEGIN
- Move(ScrBuf, Screen^, 4000);
- END;
-
- {$F+}
- PROCEDURE PrintScr;
- VAR
- OldAttr, Xpos, Ypos : BYTE;
- BEGIN
- IF VideoMode = 7 THEN Screen := Ptr(HGA, 0)
- ELSE Screen := Ptr(CGA, 0);
- Xpos := WhereX; Ypos := WhereY;
- OldAttr := TextAttr;
- GetScreen;
- GotoXY(X, Y);
- ShowFrame(X1, Y1, X2, Y2);
- REPEAT
- IF EditFrame THEN
- ScrWrite(X1, Y1, black + lightgray * 16, 'E');
- Key := ReadKey;
- PutScreen;
- CASE Key OF
- #0 : BEGIN
- Key := ReadKey;
- IF EditFrame THEN
- CASE Key OF
- up : IF Y > 1 THEN
- IF Y = Y1 THEN
- Dec(Y1)
- ELSE
- IF Y = Y2 THEN
- IF Pred(Y2) > Y1 THEN
- Dec(Y2);
- down : IF Y < 25 THEN
- IF Y = Y2 THEN
- Inc(Y2)
- ELSE
- IF Y = Y1 THEN
- IF Succ(Y1) < Y2 THEN
- Inc(Y1);
- left : IF X > 1 THEN
- IF X = X1 THEN
- Dec(X1)
- ELSE
- IF X = X2 THEN
- IF Pred(X2) > X1 THEN
- Dec(X2);
- right : IF X < 80 THEN
- IF X = X2 THEN
- Inc(X2)
- ELSE
- IF X = X1 THEN
- IF Succ(X1) < X2 THEN
- Inc(X1);
- END;
- CASE Key OF
- up : IF Y > 1 THEN Dec(Y);
- down : IF Y < 25 THEN Inc(Y);
- left : IF X > 1 THEN Dec(X);
- right : IF X < 80 THEN Inc(X);
- END;
- END;
- ^P : BEGIN { Drucken des Fensterausschnitts }
- FOR j := Y1 TO Y2 DO BEGIN
- FOR i := X1 TO X2 DO
- PrintChr(Screen^[j,i].ch);
- PrintChr(#10);
- PrintChr(#13);
- END;
- END;
- ^I : BEGIN { Fensterkoordinaten initialisieren }
- X1 := Pred(X); Y1 := Pred(Y);
- X2 := X; Y2 := Y;
- END;
- RET: IF EditFrame THEN EditFrame := FALSE
- ELSE EditFrame := TRUE;
- END;
- ShowFrame(X1, Y1, X2, Y2);
- GotoXY(X,Y);
- UNTIL Key = ESC;
- PutScreen;
- TextAttr := OldAttr;
- GotoXY(Xpos, Ypos);
- END;
- {$F-}
-
- BEGIN
- IF (MemW[0:$3F4] = KennByte1) AND
- (MemW[0:$3F6] = KennByte2) AND
- (MemW[0:$3F8] = KennByte3) THEN BEGIN
- WriteLn(^G^M^J, Copyright,
- ^M^J,Version,' ist bereits installiert worden,',
- ^M^J'aktivieren mit ', HotKeyName,'.');
- Halt;
- END;
- IF NOT PrinterOK(0) THEN REPEAT
- WriteLn(^G'Der Drucker ist nicht bereit,');
- WriteLn('bitte einschalten und TASTE drücken ...');
- Key := ReadKey;
- WriteLn;
- UNTIL (Key = ESC) OR PrinterOK(0);
- MemW[0:$3F4] := KennByte1;
- MemW[0:$3F6] := KennByte2;
- MemW[0:$3F8] := KennByte3;
- writeln(^M^J,Copyright,
- ^M^J,Version,' wurde installiert,',
- ^M^J'aktivieren mit ', HotKeyName,'.');
- MakeResident(@PrintScr, HotKey);
- END.
- (* ------------------------------------------------------ *)
- (* Ende von PRNTAREA.PAS *)