home *** CD-ROM | disk | FTP | other *** search
- (* ----------------------------------------------------------------------- *)
- (* DCPSPTOS.PAS *)
- (* Maschinen-/Compilerabhaengiger Teil des didaktischen Computers *)
- (* Version: Pascal ST + & Atari ST *)
- (* Die Prozeduren "RevOn", "RevOff", "CrsOn" und "CrsOff" koennen bei an- *)
- (* deren Rechnern z.B. durch die entspr. Escape-Sequenzen realisiert wer- *)
- (* den. Gleiches gilt fuer "GotoXY". *)
-
- PROCEDURE ClrScr; BEGIN Write(esc, 'E'); END;
-
- PROCEDURE GotoXY (x,y: INTEGER);
- BEGIN Write(esc, 'Y', Chr(31+y), Chr(31+x)); END;
-
- PROCEDURE RevOn; (* reverse (inverse) Textdarstellung an *)
- BEGIN Write(esc, 'p'); END;
-
- PROCEDURE RevOff; (* reverse (inverse) Textdarsetllung aus *)
- BEGIN Write(esc, 'q'); END;
-
- PROCEDURE CrsOn; (* Cursor einschalten *)
- BEGIN Write(esc, 'e'); END;
-
- PROCEDURE CrsOff; (* Cursor ausschalten *)
- BEGIN Write(esc, 'f'); END;
-
- PROCEDURE Bell; (* einen Piepser ertoenen lassen *)
- BEGIN Write(Chr(7)); END;
-
- PROCEDURE Exit_DC; (* alles wieder beim alten, wenn Programm beendet wird *)
- BEGIN ClrScr; GotoXY(1,1); RevOff; CrsOn; END;
-
- FUNCTION ReadKeyboard: CHAR; (* von der Tastatur ohne Bildschirmecho lesen *)
- VAR ch: CHAR; Kbd: TEXT;
- BEGIN ReSet(Kbd, 'CON:'); Read(Kbd, ch); ReadKeyboard := ch; END;
-
- FUNCTION KeyEntered: BOOLEAN; (* wurde eine Taste gedrueckt ? *)
- BEGIN KeyEntered := KeyPress; END;
-
- (* eine Datei zum Lesen oeffnen. Die I/O-Ueberwachung durch das Laufzeit- *)
- (* system wird dazu kurzzeitig deaktiviert (I- bzw. I+). Konnte die Datei *)
- (* geoeffnet werden, ist "Open_File" = TRUE, sonst FALSE. *)
- FUNCTION Open_File (filename: lines): BOOLEAN;
- PROCEDURE IO_Check (a: BOOLEAN); EXTERNAL;
- FUNCTION IO_Result: INTEGER; EXTERNAL;
- BEGIN
- IO_Check(FALSE); ReSet(inp_file, filename); IO_Check(TRUE);
- Open_File := (IO_Result = null);
- END;
-
- PROCEDURE Init_Sys;
- (* hier notfalls die entsprechenden ASCII-Codes Ihres Systems einsetzen: *)
- BEGIN (* Grafiksymbole, einfache Linien: *)
- ve := '|'; he := '-'; (* senkrechter, waagerechter Strich *)
- ce := '+'; (* Kreuz *)
- dle := '+'; dre := '+'; (* rechte untere, linke untere Ecke *)
- ule := '+'; ure := '+'; (* rechte obere, linke obere Ecke *)
- uhe := '+'; dhe := '+'; (* T-Stueck: nach oben, nach unten *)
- rve := '+'; lve := '+'; (* T-Stueck: nach rechts,nach links *)
- vd := '|'; (* senkrechte, doppelte Linien *)
- bar := '|'; sl := '!'; (* senkr. Strich: einfach, doppelt *)
- u_arrow := '^'; d_arrow := 'v'; (* Pfeil nach oben, nach unten *)
- led_on := 'X'; led_off := 'O'; (* voller Kreis, leerer Kreis *)
- time := 1000; (* Zeitverzoegerung bei Prog-Ausfuehrung im Delay-Modus *)
- END;
-
- PROCEDURE Val (st: lines; VAR value, code: INTEGER);
- VAR i: INTEGER; minus: BOOLEAN;
- BEGIN
- value := 0; i := 1; code := 0; minus := st[1] = '-';
- IF minus THEN i := Succ(i);
- WHILE i <= Length(st) DO BEGIN
- IF st[i] IN ['0'..'9'] THEN
- value := value * 10 + (Ord(st[i]) - Ord('0'))
- ELSE BEGIN code := i; i := Length(st); END;
- i := Succ(i);
- END;
- IF minus THEN value := -1 * value;
- END;
-
- PROCEDURE Delay (time: INTEGER);
- VAR i: INTEGER; j: REAL;
- BEGIN j := 1.0; FOR i := 0 TO time DO j := j*j/j/j; END;
-
- FUNCTION UpCase (ch: CHAR): CHAR;
- BEGIN
- IF ch IN ['a'..'z'] THEN ch := Chr(Ord(ch)-32);
- UpCase := ch;
- END;
- (* ----------------------------------------------------------------------- *)
- (* DCPSPTOS.PAS *)
-