home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* BIGTEXT.PAS *)
- (* Unit zur Ausgabe von Texten in Großschrift *)
- (* (c) 1988 by Erhard Ernst & TOOLBOX *)
- (* ------------------------------------------------------ *)
-
- UNIT BigText;
-
- INTERFACE
-
- USES CRT;
-
- TYPE string10 = STRING[10];
-
- CONST WriteBig_installiert: BOOLEAN = FALSE;
-
- VAR WriteBig_Font : array[#0..#255,0..7] of byte;
- WriteBig_Char : char;
- WriteBig_NoChar : char;
-
- PROCEDURE WriteBig_Init;
-
- PROCEDURE WriteBig_Reset;
-
- PROCEDURE WriteBig(x,y: BYTE; Zeile: string10;
- Ueberschreiben : BOOLEAN);
-
- FUNCTION GRAFTABL_geladen: BOOLEAN;
-
-
- IMPLEMENTATION
-
- (* ------------------------------------------------------ *)
- FUNCTION GRAFTABL_geladen: BOOLEAN;
-
- VAR RAM_Seg: INTEGER ABSOLUTE $0000:$007E;
- RAM_Ofs: INTEGER ABSOLUTE $0000:$007C;
-
- BEGIN
- Graftabl_geladen := (RAM_Seg >= 0) AND (RAM_Ofs >= 0);
- END;
- (* ------------------------------------------------------ *)
- PROCEDURE WriteBig_init;
-
- VAR RAM_Seg: INTEGER ABSOLUTE $0000:$007E;
- RAM_Ofs: INTEGER ABSOLUTE $0000:$007C;
-
- BEGIN
- FillChar(WriteBig_Font,$800,#0);
- (* 1. ROM-Font einlesen: *)
- Move(Mem[$F000:$FA6E],
- Mem[Seg(WriteBig_Font): Ofs(WriteBig_Font)], $400);
- (* 2. RAM-Font einlesen: *)
- IF Graftabl_geladen THEN
- Move(Mem[RAM_Seg:RAM_Ofs], Mem[seg(WriteBig_Font):
- (Ofs(WriteBig_Font) + $400)], $400);
- WriteBig_Char := #219;
- WriteBig_NoChar:= #32;
- WriteBig_installiert := TRUE;
- END;
- (* ------------------------------------------------------ *)
- PROCEDURE WriteBig_Reset;
- BEGIN
- WriteBig_installiert := FALSE;
- END;
- (* ------------------------------------------------------ *)
- PROCEDURE WriteBig(x,y: BYTE; zeile: string10;
- Ueberschreiben : BOOLEAN);
- VAR i, Spalte: BYTE;
-
- PROCEDURE Ausgeben(x,y: BYTE; Zeichen: CHAR);
- VAR row, col, m, Maske: BYTE;
- BEGIN
- IF (x < 74) AND (y < 19) THEN
- FOR row := 0 TO 7 DO BEGIN
- Maske := WriteBig_Font[Zeichen, row];
- FOR col := 0 TO 7 DO BEGIN
- GotoXY(x + col, y + row);
- m := 128 SHR col;
- IF (Maske AND m) = m THEN write(WriteBig_Char)
- ELSE IF Ueberschreiben THEN
- write(WriteBig_NoChar);
- END;
- END;
- END;
-
- BEGIN
- IF NOT WriteBig_installiert THEN WriteBig_init;
- IF x = 0 THEN x := WhereX;
- IF y = 0 THEN y := WhereY;
- FOR i := 1 TO length(Zeile) DO
- Ausgeben(x + (i - 1) * 8, y, Zeile[i]);
- END;
- (* ------------------------------------------------------ *)
-
- BEGIN
- WriteBig_Init;
- END.
- (* ------------------------------------------------------ *)
- (* Ende von BIGTEXT.PAS *)