home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* TEXTMODI.INC *)
- (* Include zur Steuerung der AGA-Karte in den Modi mt, *)
- (* m25, m44 globale Deklarationen in TEXTMODI.VAR *)
- (* (c) 1988 by Addi NĂ¼chel und TOOLBOX *)
- (* ------------------------------------------------------ *)
-
- PROCEDURE gehezuXY(x,y:BYTE); { Analog zu GotoXY }
- BEGIN
- wox := x;
- woy := y;
- END;
-
- PROCEDURE scrollauf(a,b:BYTE);
- VAR i : BYTE;
- BEGIN
- CASE textmodus OF
- mt : BEGIN
- FOR i := a TO Pred(b) DO
- bildschirm_80[i] := bildschirm_80[i+1];
- bildschirm_80[b] := leerzeile_80;
- END;
- m25, m44 : BEGIN
- FOR i := a TO Pred(b) DO
- bildschirm_132[i] := bildschirm_132[i+1];
- bildschirm_132[b] := leerzeile_132;
- END;
- END;
- END;
-
- PROCEDURE scrollab(a,b:BYTE);
- VAR i : BYTE;
- BEGIN
- CASE textmodus OF
- mt : BEGIN
- FOR i := b DOWNTO Succ(a) DO
- bildschirm_80[i] := bildschirm_80[i-1];
- bildschirm_80[a] := leerzeile_80;
- END;
- m25, m44 : BEGIN
- FOR i := b DOWNTO Succ(a) DO
- bildschirm_132[i] := bildschirm_132[i-1];
- bildschirm_132[a] := leerzeile_132;
- END;
- END;
- END;
-
- PROCEDURE scrollup;
- BEGIN
- IF textmodus = m44 THEN scrollauf(1,44)
- ELSE scrollauf(1,25);
- END;
-
- PROCEDURE scrolldown;
- BEGIN
- IF textmodus = m44 THEN scrollab(1,44)
- ELSE scrollab(1,25);
- END;
-
- PROCEDURE delzeile; { Analog zu DelLine }
- BEGIN
- IF textmodus = m44 THEN scrollauf(woy,44)
- ELSE scrollauf(woy,25);
- END;
-
- PROCEDURE inszeile; { Analog zu InsLine }
- BEGIN
- IF textmodus = m44 THEN scrollab(woy,44)
- ELSE scrollab(woy,25);
- END;
-
- PROCEDURE schreib(lstring:longstring);
- VAR neu:BYTE;
- BEGIN
- CASE textmodus OF
- mt : BEGIN
- FOR neu:=1 TO Length(lstring) DO BEGIN
- Mem[$B000:(woy-1) *160 +(wox-1)*2] :=
- Ord(Copy(lstring,neu,1));
- Mem[$B000:(woy-1) *160 +(wox-1)*2+1] := attr;
- wox := Succ(wox);
- IF wox = 81 THEN BEGIN
- wox := 1;
- woy := Succ(woy);
- IF woy = 26 THEN BEGIN
- scrollup;
- woy := 25;
- END;
- END;
- END;
- END;
- m25: BEGIN
- FOR neu:=1 TO Length(lstring) DO BEGIN
- Mem[$B000:(woy-1) *264 +(wox-1)*2] :=
- Ord(Copy(lstring,neu,1));
- Mem[$B000:(woy-1) *264 +(wox-1)*2+1] := attr;
- wox := Succ(wox);
- IF wox = 133 THEN BEGIN
- wox := 1;
- woy := Succ(woy);
- IF woy = 26 THEN BEGIN
- scrollup;
- woy := 25;
- END;
- END;
- END;
- END;
- m44: BEGIN
- FOR neu:=1 TO Length(lstring) DO BEGIN
- Mem[$B000:(woy-1) *264 +(wox-1)*2] :=
- Ord(Copy(lstring,neu,1));
- Mem[$B000:(woy-1) *264 +(wox-1)*2+1] := attr;
- wox := Succ(wox);
- IF wox = 133 THEN BEGIN
- wox := 1;
- woy := Succ(woy);
- IF woy = 45 THEN BEGIN
- scrollup;
- woy := 44;
- END;
- END;
- END;
- END;
- END;
- END;
-
- PROCEDURE schreibln(lstring:longstring);
- BEGIN
- schreib(lstring);
- wox := 1;
- woy := Succ(woy);
- CASE textmodus OF
- mt, m25 : IF woy = 26 THEN BEGIN
- scrollup;
- woy := 25;
- END;
- m44 : IF woy = 45 THEN BEGIN
- scrollup;
- woy := 44;
- END;
- END;
- END;
-
- PROCEDURE cls;
- BEGIN
- CASE textmodus OF
- mt : ClrScr;
- m25: FillChar(bildschirm_132,6600,#32);
- m44: FillChar(bildschirm_132,11616,#32);
- END;
- wox := 1; woy := 1;
- attr := 7;
- invers := FALSE;
- hell := FALSE;
- blink := FALSE;
- END;
-
- PROCEDURE leere_zeilen(a,b:BYTE);
- VAR i : BYTE;
- BEGIN
- CASE textmodus OF
- mt : FOR i := a TO b DO
- bildschirm_80[i] := leerzeile_80;
- m25, m44 : FOR i := a TO b DO
- bildschirm_132[i] := leerzeile_132;
- END;
- END;
-
- PROCEDURE clreoz;
- VAR i : INTEGER;
- BEGIN
- CASE textmodus OF
- mt : FOR i := Succ(2*Pred(wox)) TO 160 DO
- bildschirm_80[woy][i] := leerzeile_80[i];
- m25, m44 : FOR i := Succ(2*Pred(wox)) TO 264 DO
- bildschirm_132[woy][i] := leerzeile_132[i];
- END;
- END;
-
- PROCEDURE CursorOff;
- VAR Regs : RECORD
- ax,bx,cx,dx,bp,si,di,ds,es,flags : INTEGER
- END;
- BEGIN
- Regs.ax:=$0100;
- Regs.cx:=$0F00;
- intr($10,Regs);
- END;
-
- PROCEDURE CursorOn;
- VAR Regs : RECORD
- ax,bx,cx,dx,bp,si,di,ds,es,flags : INTEGER
- END;
- Bildschirmmodus : BYTE ABSOLUTE $40:$49;
- BEGIN
- Regs.ax:=$0100;
- IF Bildschirmmodus=7 THEN Regs.cx:=$0B0C
- ELSE Regs.cx:=$0607;
- intr($10,Regs);
- END;
-
- PROCEDURE vset(typ: textmodustyp);
- { Einstellen der Videokarte }
- CONST p949 : ARRAY[mt..m44,0..13] OF BYTE =
-
- (($61,$50,$52,$0F,$19,$06,$19,$19,$02,$0D,$0b,$0C,$00,$00),
- ($9a,$84,$8a,$0F,$19,$06,$19,$19,$02,$0D,$06,$07,$00,$00),
- ($9a,$84,$8a,$0F,$2D,$02,$2C,$2C,$02,$07,$06,$07,$00,$00));
-
- { vergleiche PC 10 Advanced Graphics Adapter, Seite 32/33 }
-
- p954 : ARRAY[mt..m44] OF BYTE = (64,8,8);
-
- VAR i : BYTE;
-
- BEGIN
- textmodus := typ;
- FOR i := 0 TO 13 DO BEGIN
- Port[948] := i;
- Port[949] := p949[typ,i];
- END;
- Port[954] := p954[typ];
- cls;
- CursorOff;
- END;
-
- PROCEDURE Init;
- VAR i : INTEGER;
- BEGIN
- FOR i := 1 TO 159 DO BEGIN
- leerzeile_80[i] := 32;
- i := Succ(i);
- leerzeile_80[i] := 7;
- END;
- FOR i := 1 TO 263 DO BEGIN
- leerzeile_132[i] := 32;
- i := Succ(i);
- leerzeile_132[i] := 7;
- END;
- vset(mt);
- END;
-
- PROCEDURE normal;
- BEGIN
- attr := 7;
- blink := FALSE;
- invers := FALSE;
- hell := FALSE;
- END;
-
- PROCEDURE inversan;
- BEGIN
- IF NOT invers THEN attr := attr+105;
- invers := TRUE;
- END;
-
- PROCEDURE inversaus;
- BEGIN
- IF invers THEN attr := attr-105;
- invers := FALSE;
- END;
-
- PROCEDURE blinkan;
- BEGIN
- IF NOT blink THEN attr := attr+128;
- blink := TRUE;
- END;
-
- PROCEDURE blinkaus;
- BEGIN
- IF blink THEN attr := attr-128;
- blink := FALSE;
- END;
-
- PROCEDURE hellan;
- BEGIN
- IF NOT hell THEN attr := attr+8;
- hell := TRUE;
- END;
-
- PROCEDURE hellaus;
- BEGIN
- IF hell THEN attr := attr-8;
- hell := FALSE;
- END;
-
- PROCEDURE lies( VAR lstring : longstring;max:BYTE);
- VAR ch: CHAR;
- zeichen : SET OF CHAR;
- x : BYTE;
-
- BEGIN
- zeichen := [#32..#255];
- lstring:='';
- x := 0;
- CASE textmodus OF
- mt : IF wox + max > 80 THEN max := 80 - wox;
- m25, m44 : IF wox + max > 132 THEN max := 132 - wox;
- END;
- REPEAT
- IF x < max THEN BEGIN
- blinkan;
- schreib('_');
- wox := wox-1;
- blinkaus;
- END;
- Read(Kbd,ch);
- IF ch IN zeichen THEN BEGIN
- IF x=max THEN Write(#7)
- ELSE BEGIN
- schreib(ch);
- lstring:=lstring+ch;
- x := Succ(x);
- END;
- END;
- IF (ch=^H) THEN BEGIN
- IF x>0 THEN BEGIN
- IF x<max THEN BEGIN
- schreib(' ');
- wox := Pred(wox);
- END;
- x := Pred(x);
- wox := Pred(wox);
- lstring:=Copy(lstring,1,Length(lstring)-1); END
- ELSE Write(#7);
- END;
- UNTIL ch=^M;
- IF x<max THEN BEGIN
- schreib(' ');
- wox := Pred(wox);
- END;
- END;
-
- PROCEDURE liesln(VAR lstring:longstring; max :BYTE);
- BEGIN
- lies(lstring,max);
- wox := 1;
- woy := Succ(woy);
- CASE textmodus OF
- mt, m25 : IF woy = 26 THEN BEGIN
- scrollup;
- woy := 25;
- END;
- m44 : IF woy = 45 THEN BEGIN
- scrollup;
- woy := 44;
- END;
- END;
- END;
- (* ------------------------------------------------------ *)
- (* Ende von TEXTMODI.INC *)
-