Code:
' Recompile 13.02.94 PB3 ' ┌────────────────────┬───γ 2;──────────┬───────┬──────	 472;───┬─────────────────────& #9488; ' │ │ TEXTMOD1.PBL │ 2.0.0 │ 30.07.92 │ UNIT │ ' │ IDENTIFIKATION ├──────────────┴───────┴─γ 2;────────┴────────────────	 472;────┤ ' │ │ 25-,28-,43- und 50-Zeilen Textmodi für VGA-/EGA-Karten│ ' │ │ Setzen des Blinkmodus │ ' │ │ Setzen des Graustufenmodus │ ' ├────────────────────┼───γ 2;─────────────────────────	 472;─────────────────────────& #9508; ' │ AUTOR │ M.Hoffmann, Friedensallee 105, 2000 Hamburg 50 │ ' ├────────────────────┼───γ 2;─────────────────────────	 472;─────────────────────────& #9508; ' │ FUNKTION │ s.o. │ ' ├────────────────────┼───γ 2;─────────────────────────	 472;─────────────────────────& #9508; ' │ HISTORIE │ Version 1.0.0 - erste Version │ ' │ │ 2.0.0 - Verfahren zur Umschaltung modifiziert │ ' │ │ - Blink/Graustufenmodusumschaltung │ ' │ │ integriert │ ' │ │ - Abfragefunktionen integriert │ ' │ │ ACHTUNG: Routinennamen geändert! │ ' ├────────────────────┼───γ 2;─────────────────────────	 472;─────────────────────────& #9508; ' │ ENTWICKLUNGSSYSTEM │ PowerBasic 2.10a │ ' ├────────────────────┼───γ 2;─────────────────────────	 472;─────────────────────────& #9508; ' │ VORAUSSETZUNGEN │ EGA- (43-Modus) bzw. VGA- (28,50-Modi) Karte notwendig│ ' ├────────────────────┼───γ 2;─────────────────────────	 472;─────────────────────────& #9508; ' │ IMPLEMENTATION │ │ ' │ │ │ ' │ FUNCTION TextMode │ (0│25│28│43│50) │ ' │ │ │ ' │ │ Bei 0 wird lediglich die aktuelle Zeilenzahl zurück- │ ' │ │ geliefert, ohne eine Änderung vorzunehmen. │ ' │ │ Ansonsten wird versucht, die Zeilenzahl umzuschalten │ ' │ │ und die nun eingestellte Zahl wird zurückgeliefert. │ ' │ │ Bei Angabe eines falschen Parameters wird -1 zurück- │ ' │ │ geliefert. Der Erfolg kann also folgendermaßen │ ' │ │ geprüft werden: │ ' │ │ IF TextMode(NewRows) <> NewRows THEN ' NoSuccess │ ' │ │ │ ' │ FUNCTION EgaVga │ Liefert 1, wenn EGA- oder VGA-Monitor vorhanden │ ' │ │ Diese Prüfung ist NICHT explizit in den anderen │ ' │ │ Funktionen enthalten! │ ' │ │ │ ' │ SUB SetBlinkOff │ Bit 3 der Hintergrundfarbe bestimmt INTENSIVE Anzeige │ ' │ SUB SetBlinkOn │ Bit 3 der Hintergrundfarbe bestimmt BLINKENDE Anzeige │ ' │ FUNCTION BlinkMode │ Aktuelle Einstellung erfragen │ ' │ │ 0 = Blinken ²) │ ' │ │ 1 = Intensed ²) │ ' │ │ │ ' │ SUB SetGreyOn │ Umwandlung in Graustufen anschalten │ ' │ SUB SetGreyOff │ Umwandlung in Graustufen abschalten │ ' │ │ Aktuelle Einstellung kann z.Zt. NICHT erfragt werden! │ ' │ │ -- Wird erst NACH TextMode() aktiv! │ ' │ FUNCTION GreyMode │ Aktuelle Einstellung erfragen │ ' │ │ 0 = Farbe ²) │ ' │ │ 1 = Graustufen ²) │ ' ├────────────────────┼───γ 2;─────────────────────────	 472;─────────────────────────& #9508; ' │ SONSTIGES │ ACHTUNG: │ ' │ │ - PBs LOCATE/CSRLIN/SCREEN... gehen nur bis y=25! │ ' │ │ │ ' │ │ ²) Da nur eine Abfrage eigener interner Variablen │ ' │ │ erfolgt, stimmen die zurückgelieferten Werte u.U. │ ' │ │ erst, nachdem SetBlink* und SetGrey* einmal aufge- │ ' │ │ rufen wurden! │ ' └────────────────────┴───γ 2;─────────────────────────	 472;─────────────────────────& #9496; ' ┌────────────────────────γ 2;─────────────────────────	 472;─────────────────────────& #9488; ' │ COMPILEROPTIONEN │ ' └────────────────────────γ 2;─────────────────────────	 472;─────────────────────────& #9496; $COM 0 $COMPILE UNIT $CPU 80386 $DEBUG MAP-,PBDEBUG-,PATH-,UNIT- $DIM ARRAY $ERROR BOUNDS-,NUMERIC-,OVERFLOW-,STACK- $EVENT OFF $FLOAT EMULATE $LIB COM-,LPT-,CGA-,EGA-,VGA-,FULLFLOAT-,IPRINT- $OPTIMIZE SIZE $OPTION CNTLBREAK-,GOSUB-,SIGNED- $SOUND 0 $STACK &H800 $STATIC $STRING 1 DEFINT A-Z ' ┌────────────────────────γ 2;─────────────────────────	 472;─────────────────────────& #9488; ' │ SHARED VARs │ ' └────────────────────────γ 2;─────────────────────────	 472;─────────────────────────& #9496; SHARED NoBlnk ' interne Hilfsvariablen, weil z.Zt. nicht bekannt ist, wie SHARED GreyOn ' diese Zustände abgefragt werden können! Siehe auch ²) oben! ' ┌────────────────────────γ 2;─────────────────────────	 472;─────────────────────────& #9488; ' │ ROUTINEN │ ' └────────────────────────γ 2;─────────────────────────	 472;─────────────────────────& #9496; FUNCTION TextMode (Modus) LOCAL PUBLIC IF Modus = 25 THEN $INLINE &HB8,&H02,&H12 ' MOV AX,1202h Funktion 12/30: 2=400 Punktreihen $INLINE &HBB,&H30,&H00 ' MOV BX,0030h (hier SubFn in BL) $INLINE &HCD,&H10 ' INT 10h $INLINE &HB8,&H83,&H00 ' MOV AX,0083h Def VideoModus (80¨25,16Col) ² $INLINE &HCD,&H10 ' INT 10h $INLINE &HB8,&H14,&H11 ' MOV AX,1114h Funktion 11/14: 25 Zeilen 8*16er $INLINE &HBB,&H00,&H00 ' MOV BX,0000h Standardzeichensatz $INLINE &HCD,&H10 ' INT 10h ELSEIF Modus = 28 THEN $INLINE &HB8,&H02,&H12 ' MOV AX,1202h Funktion 12/30: 2=400 Punktreihen $INLINE &HBB,&H30,&H00 ' MOV BX,0030h (hier SubFn in BL) $INLINE &HCD,&H10 ' INT 10h $INLINE &HB8,&H83,&H00 ' MOV AX,0083h Def VideoModus (80¨25,16Col) ² $INLINE &HCD,&H10 ' INT 10h $INLINE &HB8,&H11,&H11 ' MOV AX,1111h Funktion 11/11: 28 Zeilen 8*14er $INLINE &HBB,&H00,&H00 ' MOV BX,0000h Standardzeichensatz $INLINE &HCD,&H10 ' INT 10h ELSEIF Modus = 43 THEN $INLINE &HB8,&H01,&H12 ' MOV AX,1201h Funktion 12/30: 1=350 Punktreihen $INLINE &HBB,&H30,&H00 ' MOV BX,0030h (hier SubFn in BL) $INLINE &HCD,&H10 ' INT 10h $INLINE &HB8,&H83,&H00 ' MOV AX,0083h Def VideoModus (80¨25,16Col) ² $INLINE &HCD,&H10 ' INT 10h $INLINE &HB8,&H12,&H11 ' MOV AX,1112h Funktion 11/12 (EGA): 8*8er $INLINE &HBB,&H00,&H00 ' MOV BX,0000h Standardzeichensatz $INLINE &HCD,&H10 ' INT 10h ELSEIF Modus = 50 THEN $INLINE &HB8,&H02,&H12 ' MOV AX,1202h Funktion 12/30: 2=400 Punktreihen $INLINE &HBB,&H30,&H00 ' MOV BX,0030h (hier SubFn in BL) $INLINE &HCD,&H10 ' INT 10h $INLINE &HB8,&H83,&H00 ' MOV AX,0083h Def VideoModus (80¨25,16Col) ² $INLINE &HCD,&H10 ' INT 10h $INLINE &HB8,&H12,&H11 ' MOV AX,1112h Funktion 11/12: 50 Zeilen 8*8er $INLINE &HBB,&H00,&H00 ' MOV BX,0000h Standardzeichensatz $INLINE &HCD,&H10 ' INT 10h ELSEIF Modus <> 0 THEN TextMode = -1 EXIT FUNCTION END IF ' Wiederherstellung des Intensedmodus, da dieser beim Umschalten ' verloren geht! IF Modus <> 0 THEN IF NoBlnk THEN CALL SetBlinkOff END IF END IF DEF SEG = &H0040 TextMode = PEEK(&H0084)+1 DEF SEG END FUNCTION ' ------------------------------------------------------------------------------ FUNCTION EgaVga LOCAL PUBLIC EgaVga = 0 DEF SEG = &H0040 BIOSInfoByte = PEEK(&H0087) DEF SEG IF NOT (BIOSInfoByte AND &B00001000) = &B00001000 THEN EgaVga = 1 END IF END FUNCTION ' ------------------------------------------------------------------------------ SUB SetBlinkOff LOCAL PUBLIC $INLINE &HB8,&H03,&H10 ' MOV AX,1003h $INLINE &HBB,&H00,&H00 ' MOV BX,0000h $INLINE &HCD,&H10 ' INT 10h NoBlnk = 1 END SUB ' ------------------------------------------------------------------------------ SUB SetBlinkOn LOCAL PUBLIC $INLINE &HB8,&H03,&H10 ' MOV AX,1003h $INLINE &HBB,&H01,&H00 ' MOV BX,0001h $INLINE &HCD,&H10 ' INT 10h NoBlnk = 0 END SUB ' ------------------------------------------------------------------------------ FUNCTION BlinkMode LOCAL PUBLIC BlinkMode = NoBlnk END FUNCTION ' ------------------------------------------------------------------------------ SUB SetGreyOn LOCAL PUBLIC $INLINE &HB8,&H00,&H12 ' MOV AX,1200h Funktion 12h; 00 = Grauumwandlung AN $INLINE &HBB,&H33,&H00 ' MOV BX,0033h Subfunktion 33h $INLINE &HCD,&H10 ' INT 10h GreyOn = 1 END SUB ' ------------------------------------------------------------------------------ SUB SetGreyOff LOCAL PUBLIC $INLINE &HB8,&H01,&H12 ' MOV AX,1200h Funktion 12h; 01 = Grauumwandlung AUS $INLINE &HBB,&H33,&H00 ' MOV BX,0033h Subfunktion 33h $INLINE &HCD,&H10 ' INT 10h GreyOn = 0 END SUB ' ------------------------------------------------------------------------------ FUNCTION GreyMode LOCAL PUBLIC GreyMode = GreyOn END FUNCTION ' ==============================================================================