home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turbo Toolbox
/
Turbo_Toolbox.iso
/
1991
/
04
/
tricks
/
vierdemo.pas
< prev
Wrap
Pascal/Delphi Source File
|
1991-01-08
|
9KB
|
304 lines
(* ------------------------------------------------------ *)
(* VIERDEMO.PAS *)
(* vier Tools mit "Pfiff" *)
(* (c) 1991 Harald und Sabine Reiche & TOOLBOX *)
(* ------------------------------------------------------ *)
PROGRAM Test;
USES Dos, Crt;
TYPE
strng = STRING [80];
VAR
sw, ws, bl, inv, s, z : INTEGER;
farbe, futast : CHAR;
al : strng;
LABEL 1;
PROCEDURE RD(VAR n : CHAR);
TYPE
str5 = STRING [ 5];
str16 = STRING [16];
VAR
Regs : Registers;
a : WORD;
FUNCTION SCAN : WORD; (* Turbo 6.0: *)
VAR (* ASM *)
Regs : Registers; (* MOV AH,10h *)
BEGIN (* INT 16h *)
WITH Regs DO BEGIN (* END; *)
ah := $10; (* -- Return-Wert *)
Intr($16, Regs); (* sowieso in AX! *)
SCAN := ax;
END;
END;
BEGIN
futast := ' ';
a := SCAN;
{ für alle Eventualitäten sind hier Tastenkombi- }
{ nationen aufgeführt, die in der jetzigen Einstellung }
{ von INP nicht genutzt werden. }
{ Bei doppelten Ziffern gilt jeweils eine für den }
{ Siemens PC-D, die andere für Kompatible }
CASE a OF
283 : futast := Chr(27);
3592, 35920 : futast := ^H;
15104 : futast := ';';
15360 : futast := '<';
15616 : futast := '=';
15872 : futast := '>';
16128 : futast := '?';
16384 : futast := '@';
16640 : futast := 'A';
16896 : futast := 'B';
17152 : futast := 'C';
17408 : futast := 'D';
18176, 18400 : futast := 'G';
18432, 18656 : futast := 'H';
18688, 18912 : futast := 'I';
19200, 19424 : futast := 'K';
19712, 19936 : futast := 'M';
20224, 20448 : futast := 'O';
20480, 20704 : futast := 'P';
20736, 20960 : futast := 'Q';
20992, 21216 : futast := 'R';
21248, 21472 : futast := 'S';
21504 : futast := 'T';
21760 : futast := 'U';
22016 : futast := 'V';
22272 : futast := 'W';
22528 : futast := 'X';
22784 : futast := 'Y';
23040 : futast := 'Z';
23296 : futast := '[';
23552 : futast := '\';
23808 : futast := ']';
24064 : futast := '^';
24320 : futast := '-';
24576 : futast := '`';
24832 : futast := 'a';
25088 : futast := 'b';
25344 : futast := 'c';
25600 : futast := 'd';
25856 : futast := 'e';
26112 : futast := 'f';
26368 : futast := 'g';
26624 : futast := 'h';
26880 : futast := 'i';
27136 : futast := 'j';
27392 : futast := 'k';
27648 : futast := 'l';
27904 : futast := 'm';
28160 : futast := 'n';
28416 : futast := 'o';
28672 : futast := 'p';
28928 : futast := 'q';
29440, 29664 : futast := 's';
29696, 29920 : futast := 't';
29952, 30176 : futast := 'u';
30208, 30432 : futast := 'v';
30464, 30688 : futast := 'w';
33280 : futast := 'é';
33792,34016 : futast := 'ä';
34048,40960 : futast := 'á';
34304,41216 : futast := 'í';
35072 : futast := 'å';
35328 : futast := 'Å';
35584 : futast := 'é';
35840 : futast := 'É';
34560, 41472 : futast := 'ä';
34816, 41728 : futast := 'Ä';
END;
n := Chr(a);
END;
PROCEDURE R0(VAR n : CHAR);
BEGIN
RD(n);
n := UpCase(n);
IF n = ^M THEN futast := ^M;
END;
PROCEDURE RW(VAR n : CHAR);
BEGIN
RD(n);
n := UpCase(n);
IF n = ^M THEN futast := ^M;
Write(n);
END;
PROCEDURE BAT(Str : strng; a : INTEGER);
BEGIN
TextAttr := a;
Write(Str);
TextAttr := ws;
END;
FUNCTION COL(b : strng; c : INTEGER) : strng;
BEGIN
Write;
BAT(b, c);
COL := '';
END;
PROCEDURE WO;
BEGIN
s := WhereX;
z := WhereY;
END;
PROCEDURE INP(VAR cl : strng);
VAR
a1 : CHAR;
i1, x, te : BYTE;
BEGIN
futast := ' ';
cl := '';
i1 := 0;
WO;
te := s;
REPEAT
WO;
i1 := Length(cl);
RD(a1);
CASE futast OF
Chr(27),
';', '<', '=', '>',
'?', '@', 'A', 'B',
'C', 'D', 'R', 'á',
'í', '^' : Exit;
'K' : BEGIN
IF s > te THEN
Write(Chr(8)); { links }
END;
'S' : BEGIN
WO;
x := WhereX;
Delete(cl, s-te+1, 1);
GotoXY(te, z); { löschen? }
Write(cl, farbe);
GotoXY(x, z);
END;
's', 'G' : GotoXY(te, z);
{ganz links - PC-D und Komaptible}
't', 'O' : GotoXY(te+i1, z);
{ganz rechts - PC-D und Kompatible}
'M' : BEGIN
GotoXY(s+1, z);
WO;
IF s > i1 THEN
cl := cl + ' ';
END;
END;
IF futast = ' ' THEN
IF a1 <> Chr(8) THEN
IF a1 <> ^M THEN BEGIN
WO;
IF s >= i1+te THEN BEGIN
cl := cl+a1;
Write(a1);
END ELSE BEGIN { anhängen }
WO;
IF a1 <> Chr(0) THEN BEGIN { einfügen }
x := WhereX;
Insert(a1, cl, s-te+1);
GotoXY(te, z);
Write(cl);
GotoXY(x+1, z);
END;
END;
END;
IF a1 = '_' THEN BEGIN
x := WhereX;
Insert(' ./. ', cl, Pos('_', cl));
Delete(cl, Pos('_', cl), 1);
GotoXY(te, z);
Write(cl);
GotoXY(x+4, z);
END;
IF a1 = #$08 THEN BEGIN
WO;
IF i1 > 0 THEN
IF s > te THEN BEGIN { backspace }
Write(Chr(8));
x := WhereX;
Delete(cl, s-te, 1);
GotoXY(te, z);
Write(cl, farbe);
GotoXY(x, z);
END;
END;
UNTIL a1 = ^M;
IF cl = ^M THEN futast := ^M;
END;
BEGIN
ws := 2;
{ für dunklen Monochrombildschirm, }
{ Siemens PC-D -->102, Siemens PCD-2 -->112 }
sw := 10;
inv := 112;
bl := 130;
TextAttr := ws;
farbe := ' ';
{ Schreiben auf schraffierten Feldern --> ▒ }
REPEAT
ClrScr;
GotoXY(20, 2);
WriteLn(COL('Demonstrationsprogramm COL + INP', 9),
^J^J^M,
'Geben Sie nun bitte irgendeine Buchstabenkom-',
'bination ein (max. 80 Zeichen).'^J^M,
'Sobald Sie ', COL('CTL+F1', bl),
' drücken, wird die Wiederholungsschleife ',
'beendet.'^J^M, COL('ESC', inv),
' beendet das Programm.'^J^J^M,
'Wenn Sie eine Funtionstaste drücken (',
COL('F1-F12', sw),') wird die Eingabe von INP ',
'abgebro-'^J^M,
'chen und die Variable futast erhält den ',
'jeweiligen Wert. Im vorliegenden Demo-'^J^M,
'Programm wird die Funktionstaste mit den ',
'Möglichkeiten der Funktion COL ange-'^J^M,
'zeigt. Ohne gedrückte Funktionstaste hat ',
'die Variable futast den Wert " ",'^J^M,
'sonst den Wert der Funktionstaste.'^J);
INP(al);
IF futast = ' ' THEN BEGIN
Delay(2000);
GOTO 1;
END;
Write(^J^M'Es wurde ');
CASE futast OF
';' : BAT('F1',248);
'<' : BAT('F2',255);
'=' : BAT('F3',129);
'>' : BAT('F4',130);
'?' : BAT('F5',137);
'@' : BAT('F6',10);
'A' : BAT('F7',112);
'B' : BAT('F8',1);
'C' : BAT('F9',9);
'D' : BAT('F10',2);
'á' : Write('F11');
'í' : Write('F12');
'^' : Write('CTL+F1');
Chr(27) : Halt;
END;
WriteLn(' gedrückt!'^J);
IF futast <> '^' THEN Delay(2000);
1:
UNTIL futast = '^';
Write('Die Wiederholungsschleife ist beendet!'^J^M);
Delay(4000);
END.
(* ------------------------------------------------------ *)
(* Ende von VIERDEMO.PAS *)