home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* 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 *)
-