home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* G-TAST.PAS *)
- (* gra-tas: Grafikzeichen einfach *)
- (* (c) 1990 H.Zenz & TOOLBOX *)
- (* ------------------------------------------------------ *)
- {$R-,S-,I-,D-,F+,V-,B-,N-,L+}
- {$M 1024,0,0}
- PROGRAM gra_tas;
-
- USES Crt, Dos;
-
- CONST
- version = '1.1';
- farbvor = WHITE;
- farbhin = RED;
-
- VAR
- Screen : ARRAY [1..80, 1..25] OF WORD;
- OldInt16 : POINTER;
- OldSS, OldSP,
- NewSS, NewSP : WORD;
- work : BOOLEAN;
- elo, obe, ero,
- lnk, rct, elu,
- unt, eru, krz,
- hrz, vrk : WORD;
- x, y, xc, yc : WORD;
- HotKey : WORD;
- get : WORD;
-
- PROCEDURE Store_Scr;
- BEGIN
- Move(Mem[$B800:0000], Screen, 4000);
- END;
-
- PROCEDURE Load_Scr;
- BEGIN
- Move(Screen, Mem[$b800:0000], 4000);
- END;
-
- FUNCTION GetHotkey : WORD;
- VAR
- Regs : Registers;
- BEGIN
- WITH Regs DO BEGIN
- REPEAT UNTIL KeyPressed;
- ah := 0;
- Intr($16, Regs);
- GetHotkey := ax;
- END;
- END;
-
- PROCEDURE ShowHelp(vor, hinten : WORD);
- BEGIN
- Window(x, y, x+13, y+10);
- TextBackGround(hinten);
- TextColor(vor);
- ClrScr;
- Window(x, y, x+13, y+11);
- GotoXY(1,1); Write('┌────────────┐');
- GotoXY(1,2); Write('│ 8 ', Chr(hrz),'│');
- GotoXY(1,3); Write('│7', Chr(elo), ' ', Chr(obe), ' ',
- Chr(ero), '9 -│');
- GotoXY(1,4); Write('│ ', chr(vrk),'│');
- GotoXY(1,5); Write('│ +│');
- GotoXY(1,6); Write('│4', Chr(lnk), ' ', Chr(krz), ' ',
- Chr(rct), '6 │');
- GotoXY(1,7); Write('│ 5 │');
- GotoXY(1,8); Write('│ │');
- GotoXY(1,9); Write('│1', Chr(elu), ' ', Chr(unt), ' ',
- Chr(eru), '3 │');
- GotoXY(1,10);Write('│ 2 │');
- GotoXY(1,11);Write('└────────────┘');
- Window(1, 1, 80, 25);
- GotoXY(xc,yc);
- END;
-
- PROCEDURE Set1;
- BEGIN
- elo := 218; obe := 194; ero := 191; lnk := 195;
- krz := 197; rct := 180; elu := 192; unt := 193;
- eru := 217; hrz := 196; vrk := 179;
- END;
-
- PROCEDURE Set2;
- BEGIN
- elo := 201; obe := 203; ero := 187; lnk := 204;
- krz := 206; rct := 185; elu := 200; unt := 202;
- eru := 188; hrz := 205; vrk := 186;
- END;
-
- PROCEDURE Set3;
- BEGIN
- elo := 214; obe := 210; ero := 183; lnk := 199;
- krz := 215; rct := 182; elu := 211; unt := 208;
- eru := 189; hrz := 196; vrk := 186;
- END;
-
- PROCEDURE Set4;
- BEGIN
- elo := 213; obe := 209; ero := 184; lnk := 198;
- krz := 216; rct := 181; elu := 212; unt := 207;
- eru := 190; hrz := 205; vrk := 179;
- END;
-
- PROCEDURE Set5;
- BEGIN
- elo := 176; obe := 223; ero := 177; lnk := 221;
- krz := 248; rct := 222; elu := 178; unt := 220;
- eru := 219; hrz := 249; vrk := 250;
- END;
-
- PROCEDURE Move_Window;
- VAR
- c : CHAR;
- BEGIN
- ShowHelp(farbhin, farbvor);
- REPEAT
- c := ReadKey;
- Load_Scr;
- CASE c OF
- '4' : x := x - 1;
- '6' : x := x + 1;
- '2' : y := y + 1;
- '8' : y := y - 1;
- END;
- IF x < 1 THEN x := 1;
- IF y < 1 THEN y := 1;
- IF x > 67 THEN x := 67;
- IF y > 14 THEN y := 14;
- ShowHelp(farbhin, farbvor);
- UNTIL ((c = #27) OR (c = '.'));
- ShowHelp(farbvor, farbhin);
- END;
-
- PROCEDURE StoreKey(taste : WORD);
- VAR
- KeyBuff : ARRAY [$1e..$3c] OF BYTE ABSOLUTE $0040:$001e;
- KeyEnd : WORD ABSOLUTE $0040:$001c;
- BEGIN
- Move(taste, KeyBuff[KeyEnd], 2);
- Inc(KeyEnd, 2);
- IF KeyEnd > $003c Then KeyEnd := $001e;
- END;
-
- PROCEDURE GrafTaste;
- VAR
- ready : BOOLEAN;
- c : WORD;
- BEGIN
- Store_Scr;
- xc := WhereX; yc := WhereY;
- ready := FALSE;
- Mem[0:$417] := Mem[0:$417] OR 32; (* numlock ein *)
- REPEAT
- ShowHelp(farbvor, farbhin);
- c := GetHotKey;
- CASE c OF
- $4f31 : BEGIN
- StoreKey(elu);
- StoreKey(HotKey);
- ready := TRUE;
- END;
- $5032 : BEGIN
- StoreKey(unt);
- StoreKey(hotkey);
- ready := TRUE;
- END;
- $5133 : BEGIN
- StoreKey(eru);
- StoreKey(HotKey);
- ready := TRUE;
- END;
- $4b34 : BEGIN
- StoreKey(lnk);
- StoreKey(HotKey);
- ready := TRUE;
- END;
- $4c35 : BEGIN
- StoreKey(krz);
- StoreKey(HotKey);
- ready := TRUE;
- END;
- $4d36 : BEGIN
- StoreKey(rct);
- StoreKey(HotKey);
- ready := true end;
- $4737 : BEGIN
- StoreKey(elo);
- StoreKey(HotKey);
- ready := TRUE;
- END;
- $4838 : BEGIN
- StoreKey(obe);
- StoreKey(HotKey);
- ready := TRUE;
- END;
- $4939 : BEGIN
- StoreKey(ero);
- StoreKey(HotKey);
- ready := TRUE;
- END;
- $4e2b : BEGIN
- StoreKey(vrk);
- StoreKey(HotKey);
- ready := TRUE;
- END;
- $4a2d : BEGIN
- StoreKey(hrz);
- StoreKey(HotKey);
- ready := TRUE;
- END;
- $3b00 : Set1;
- $3c00 : Set2;
- $3d00 : Set3;
- $3e00 : Set4;
- $3f00 : Set5;
- $011b : ready := TRUE;
- $532e : Move_Window;
- ELSE
- BEGIN
- StoreKey(c);
- StoreKey(HotKey);
- ready := TRUE;
- END;
- END;
- UNTIL (ready = TRUE);
- Mem[0:$417] := Mem[0:$417] AND 223; (* numlock aus *)
- Load_Scr;
- END;
-
- PROCEDURE NewInt16(flags, cs, ip, ax, bx, cx, dx,
- si, di, ds, es, bp : WORD); INTERRUPT;
-
- PROCEDURE NewStack;
- INLINE ($8c/$16/OldSS/$89/$26/OldSP/$fa/
- $8e/$16/NewSS/$8b/$26/NewSP/$fb);
-
- PROCEDURE OldStack;
- INLINE ($fa/$8e/$16/OldSS/$8b/$26/OldSP/$fb);
-
- PROCEDURE ExecInt(adress : POINTER);
- INLINE ($5b/$58/$87/$5e/$0e/$87/$46/$10/$89/
- $ec/$5d/$07/$1f/$5f/$5e/$5a/$59/$cb);
-
- FUNCTION GetKey : WORD;
- INLINE ($31/$c0/$9c/$ff/$1e/oldint16);
-
- BEGIN
- IF (Hi(ax) = 0) THEN BEGIN
- ax := GetKey;
- IF ((ax = HotKey) AND (work = FALSE)) THEN BEGIN
- NewStack;
- work := TRUE;
- GrafTaste;
- work := FALSE;
- OldStack;
- END;
- END ELSE
- ExecInt(oldint16);
- END;
-
- BEGIN
- NewSS := SSeg;
- NewSP := SPtr;
- WriteLn(version);
- WriteLn('Bitte drücken Sie den Hotkey zum Aktivieren');
- HotKey := GetHotKey;
- x := 1; y := 1;
- Set1;
- work := FALSE;
- GetIntVec($16, OldInt16);
- SetIntVec($16, @NewInt16);
- SetIntVec($1b, SaveInt1b);
- Keep(0);
- END.
- (* ------------------------------------------------------ *)
- (* Ende von G-TAST.PAS *)