home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* DRUMAN.PAS *)
- (* Druckermanager, speziell für Farbdrucker *)
- (* (c) 1988 by Karl Samanek und TOOLBOX *)
- (* ------------------------------------------------------ *)
-
- {$R-,S-,I-,V-,B-}
- {$M 1024,0,0}
-
- USES Dos, TSR, Crt;
- (* Unit TSR: siehe Pascal 6/7 1988, S.47 *)
-
- TYPE screentype = ARRAY [1..32000] OF BYTE;
- (* statt 32000 tun 16385 es auch, *)
- (* wenn man nur CGA Grafik benutzt *)
- CONST Hotkey = $2500; (* Auslöser : Alt-k *)
- VAR fin,gm,a,b,
- c,d,i,x,y : INTEGER;
- ch : CHAR;
- Code : BYTE;
- screen : ^screentype;
- savescreen : screentype;
- videomode : BYTE ABSOLUTE $0040:$0049;
-
- {$F+}
-
- PROCEDURE Druckermanager;
-
- PROCEDURE ggm; (* Alter Videomodus wird ermittelt *)
- VAR regs: registers; (* und gesichert. *)
- BEGIN
- regs.AH := $0F;
- Intr (16,regs);
- gm := regs.AL
- END;
-
- PROCEDURE sgm; (* Alter Videomodus wird wieder *)
- VAR regs: registers; (* hergestellt. *)
- BEGIN
- regs.AL := gm;
- regs.AH := 0;
- Intr (16,regs);
- END;
-
- Procedure sscreen; (* Bildschirm wird gesichert *)
- BEGIN
- Move(screen^, savescreen, SizeOf(screentype));
- END;
-
- PROCEDURE restorescreen; (* Bildschirm wiederherstellen *)
- BEGIN
- Move(savescreen, screen^, SizeOf(screentype));
- END;
-
- PROCEDURE drawborder;
- BEGIN
- ClrScr;
- FOR i := 2 TO 78 DO BEGIN
- GotoXY(i,2);
- Write(#205);
- GotoXY(i,24);
- Write(#205);
- END;
- FOR i := 2 TO 24 DO BEGIN
- GotoXY(2,i);
- Write(#186);
- GotoXY(78,i);
- Write(#186);
- END;
- GotoXY(2,2);
- Write(#201);
- GotoXY(78,2);
- Write(#187);
- GotoXY(2,24);
- Write(#200);
- GotoXY(78,24);
- Write(#188);
- END;
-
- PROCEDURE writetable;
- BEGIN
- GotoXY(15,8) ; Write('Prog.Ende');
- GotoXY(15,9) ; Write('NLQ 1 ON');
- GotoXY(15,10); Write('NLQ 2 ON');
- GotoXY(15,11); Write('NLQ 3 ON');
- GotoXY(15,12); Write('NLQ 4 ON');
- GotoXY(15,13); Write('Sensor ON');
- GotoXY(15,14); Write('Condensed ON');
- GotoXY(15,15); Write('Riesig ON');
- GotoXY(45,15); Write('Schwarz');
- GotoXY(15,17); Write('Blau');
- GotoXY(15,18); Write('Gelb');
- GotoXY(15,19); Write('Grün');
- GotoXY(45,8) ; Write('TESTAUSDRUCK');
- GotoXY(45,9) ; Write('NLQ OFF');
- GotoXY(45,14); Write('Reset');
- GotoXY(15,16); Write('ITALIC ON');
- GotoXY(45,12); Write('Italic OFF');
- GotoXY(45,13); Write('Sensor OFF');
- GotoXY(45,11); Write('Condensed OFF');
- GotoXY(45,10); Write('Riesig OFF');
- GotoXY(45,16); Write('Rot');
- GotoXY(45,17); Write('Violett');
- GotoXY(45,18); Write('Orange');
- GotoXY(20,5) ;
- Write('Karls Druckermanager für Farbdrucker');
- GotoXY(20,22);
- Write('Auswahl mit Pfeiltasten, dann Enter');
- GotoXY(45,19); Write('Prog.Ende');
- END;
-
- PROCEDURE ende;
- BEGIN
- ClrScr;
- restorescreen;
- END;
-
- PROCEDURE gkey; (* Tastaturabfrage *)
- BEGIN
- IF y > 19 THEN y := 19;
- IF y < 8 THEN y := 8 ;
- IF x < 15 THEN x := 15;
- IF x > 45 THEN x := 45;
- GotoXY(x,y);
- ch := ReadKey;
- CASE ch OF
- #72 : dec (y);
- #80 : inc (y);
- #75 : x := 15;
- #77 : x := 45;
- #13 : Exit;
- END;
- IF y > 19 THEN y := 19;
- IF y < 8 THEN y := 8 ;
- IF x < 15 THEN x := 15;
- IF x > 45 THEN x := 45;
- GotoXY(x,y);
- gkey;
- END;
-
- PROCEDURE checkexit; (* Test, ob Programm beendet *)
- VAR Lst : Text; (* werden soll *)
- BEGIN
- Assign(Lst,'Lpt1'); Rewrite(Lst);
- IF (x+y) = 23 THEN fin := 13; (* fin = 13 bedeutet *)
- IF (x+y) = 64 THEN fin := 13; (* Programmende *)
- IF (x+y) = 24 THEN Write(Lst,'((F))0');
- IF (x+y) = 25 THEN Write(Lst,'((F))1');
- IF (x+y) = 26 THEN Write(Lst,'((F))2');
- IF (x+y) = 27 THEN Write(Lst,'((F))3');
- IF (x+y) = 28 THEN Write(Lst,#27,'9');
- IF (x+y) = 29 THEN Write(Lst,#15);
- IF (x+y) = 30 THEN Write(Lst,'((S))3');
- IF (x+y) = 60 THEN Write(Lst,'((C))0');
- IF (x+y) = 32 THEN Write(Lst,'((C))2');
- IF (x+y) = 33 THEN Write(Lst,'((C))4');
- IF (x+y) = 34 THEN Write(Lst,'((C))6');
- IF (x+y) = 53 THEN
- WriteLn(Lst,'0123456789 ABCDEFG abcdefg ÄÖÜß äöüß');
- IF (x+y) = 54 THEN Write(Lst,#27,'I',0);
- IF (x+y) = 59 THEN Write(Lst,#27,'@');
- IF (x+y) = 31 THEN Write(Lst,#28,'4');
- IF (x+y) = 57 THEN Write(Lst,#28,'5');
- IF (x+y) = 58 THEN Write(Lst,#27,'8');
- IF (x+y) = 56 THEN Write(Lst,#18);
- IF (x+y) = 55 THEN Write(Lst,'((S))0');
- IF (x+y) = 61 THEN Write(Lst,'((C))1');
- IF (x+y) = 62 THEN Write(Lst,'((C))3');
- IF (x+y) = 63 THEN Write(Lst,'((C))5');
- Close(Lst);
- x := 15; y := 8;
- GotoXY (15,8);
- WriteLn(#7);
- END;
-
- BEGIN (* Hauptprogramm beginnt hier *)
- sscreen; (* Bildschirm retten *)
- ggm; (* Alten Videomode retten *)
- TextMode(2); (* Textmodus setzen *)
- fin := 0;
- drawborder;
- writetable;
- x := 15; y := 8;
- GotoXY (15,8);
- WHILE fin <> 13 DO BEGIN
- gkey;
- checkexit;
- END;
- sgm; (* Alten Videomode setzen *)
- restorescreen; (* Alten Bildschirm restaurieren *)
- END; (* Rücksprung zum Hauptprogramm *)
-
- {$F-}
- (* Hier beginnt der Installationsteil *)
- BEGIN
- IF videomode = 7 THEN (* CGA- oder Hercules-Karte ???*)
- Screen := Ptr($B000,0)
- ELSE
- Screen := Ptr($B800,0);
- ClrScr;
- WriteLn(' Karls residenter Druckermanager ist ',
- 'installiert. Aufruf mit ALT-K');
- MakeResident(@Druckermanager, Hotkey);
- END.
-
- (* ------------------------------------------------------ *)
- (* Ende von DRUMAN.PAS *)