home *** CD-ROM | disk | FTP | other *** search
- '* ------------------------------------------------------- *
- '* SYSINFO.BAS *
- '* Ermittelt die Rechnerkonfiguration über PEEKs, *
- '* Interruptaufrufe und das Auslesen von Ports. *
- '* (c) 1989 J.Braun & TOOLBOX *
- '* ------------------------------------------------------- *
- '* Compiler: Turbo Basic 1.10 *
- '* ------------------------------------------------------- *
- DEFINT a-z : DIM monat$ (1:12)
-
- SUB QPrint INLINE
- '* Quickprint-Routine aus TBWINDO.INC von Turbo Basic 1.1 *
- $INLINE &H55, &H8B, &HEC, &H1E, &H06, &HC4, &H7E, &H0A
- $INLINE &H26, &H8B, &H0D, &H81, &HE1, &HFF, &H7F, &HE3
- $INLINE &H5B, &H51, &H8B, &H16, &H00, &H00, &H52, &HB4
- $INLINE &H0F, &HCD, &H10, &H3C, &H07, &H75, &H08, &HBB
- $INLINE &H00, &HB0, &HBA, &HBA, &H03, &HEB, &H06, &HBB
- $INLINE &H00, &HB8, &HBA, &HDA, &H03, &H53, &H07, &H52
- $INLINE &H33, &HDB, &H8A, &HDC, &HC5, &H76, &H12, &H8B
- $INLINE &H04, &H48, &HF7, &HE3, &HD1, &HE0, &HC5, &H76
- $INLINE &H0E, &H8B, &H1C, &H4B, &HD1, &HE3, &H03, &HD8
- $INLINE &H8B, &HFB, &HC5, &H76, &H06, &H8B, &H1C, &HC5
- $INLINE &H76, &H0A, &H8B, &H74, &H02, &H5A, &H1F, &H59
- $INLINE &HFC, &HFA, &HEC, &HA8, &H01, &H75, &HFB, &HEC
- $INLINE &HA8, &H01, &H74, &HFB, &HA4, &H26, &H88, &H1D
- $INLINE &H47, &HE2, &HEF, &HFB, &H07, &H1F, &H5D
- END SUB
-
- SUB ClearBuffer ' Löschen des Tastaturpuffers
- LOCAL i
- DEF SEG = &H40 ' BIOS-Datensegment
- FOR i = &H1E TO &H3D ' Adresse des Puffers
- POKE i, 0 ' Gesamten Puffer mit 0
- NEXT i ' überschreiben
- DEF SEG
- END SUB
-
- SUB SubMen (uebergabe$)
- CALL QPRINT (3, 1, uebergabe$ + ":", 14)
- END SUB
-
- SUB Titelbild
- COLOR 7,0
- CALL QPrint (1, 1, SPACE$(12) + "Systeminfo V. 1.00" +_
- SPACE$(7) + "(c) 1989 J. Braun & TOOLBOX" + _
- SPACE$(13),31)
- LOCATE 2, 1, 0 : PRINT
- END SUB
-
- SUB ClrScr
- LOCAL i
- FOR i = 2 TO 24
- CALL QPrint (i, 1, SPACE$(80), 0)
- NEXT i
- END SUB
-
- SUB Zeitdisplay(zeile, vogr, higr)
- ' Datum mit Uhrzeit in angegebener Bildschirmzeile mit
- ' Vorder- (vogr) und Hintergrundfarbe (higr).
- ' Angaben: Wochentag, Datum, Uhrzeit. Ausgabe eines
- ' Tones zu jeder vollen und halben Stunde.
- LOCAL wochentag$, tag$, jahr$, datum$, zeit$, zeile$, f, xL
- LOCAL s$, laenge, i, voll.std, voll.min
- SHARED monat$()
- DIM monat(12) : s$ = CHR$(32)
- monat = VAL(LEFT$(DATE$, 2)) : tag$ = MID$(DATE$, 4, 2)
- jahr$ = RIGHT$(DATE$, 4) : zeit$ = TIME$
- voll.std = VAL(MID$(TIME$, 4, 2))
- voll.min = VAL(RIGHT$(TIME$, 2))
- f = VAL(tag$) + 4 + INT(monat/.39) + (VAL(jahr$)-1) / .8 _
- - (monat>2)*21/4
- f = f - INT(f/7)*7
- wochentag$ = MID$("---Sonntag----Montag--Dienstag--" + _
- "MittwochDonnerstag---Freitag---" +_
- "Samstag", 10 * INT(f) + 1, 10)
- WHILE LEFT$(wochentag$, 1) = CHR$(45)
- wochentag$ = RIGHT$(wochentag$, (LEN(wochentag$) - 1))
- WEND
- IF LEFT$(tag$, 1) = "0" THEN tag$ = RIGHT$(tag$, 1)
- IF LEFT$(zeit$,1) = "0" THEN zeit$= s$ + RIGHT$(zeit$, 7)
- datum$ = " Es ist " + wochentag$+ " der " + tag$+ _
- ". " + monat$(monat) + s$ + jahr$
- IF voll.min = 0 AND voll.std = 0 THEN SOUND 450, .5
- IF voll.min = 0 AND voll.std = 30 THEN SOUND 450, .25
- zeile$ = datum$ + " um " + zeit$ + " Uhr "
- laenge = (CINT((80 - (LEN(zeile$))) / 2))
- zeile$ = SPACE$(laenge) + zeile$ + SPACE$(laenge)
- IF LEN(zeile$) > 80 THEN zeile$ = LEFT$(zeile$, 80)
- CALL QPrint(zeile, 1, zeile$, higr*16 + vogr)
- END SUB
-
- SUB Taste
- LOCAL a$
- CALL ClearBuffer ' Tastaturpuffer löschen
- CALL QPrint (23, 59, "Weiter mit bel. Taste", 7)
- WHILE a$ = ""
- CALL Zeitdisplay(25, 14, 1) : a$ = INKEY$
- WEND
- CALL QPrint (23, 59, SPACE$(21), 0)
- END SUB
-
- SUB Sicherheitsabfrage
- LOCAL a$
- CALL QPrint (8, 30, "Wollen Sie wirklich" +_
- " zum DOS zurück? (J/N) ", 14)
- LOCATE 8, 72, 1 ' Cursor zeigen
- DO
- a$ = UCASE$(INKEY$) ' Tastaturabfrage
- CALL Zeitdisplay(25, 14, 1) ' Uhrzeit aktualisieren
- IF a$ = CHR$(27) OR a$ = CHR$(13) THEN a$ = "J"
- ' Emulation von J
- LOOP UNTIL a$ = "J" OR a$ = "N"
- IF A$="J" THEN COLOR 7,0 : CLS : END ' Ende
- CALL QPrint (8, 30, SPACE$(50), 0) ' sonst Zeile löschen
- END SUB
-
- DEF FN Akt.Laufwerk$
- ' Ermitteln, welches Laufwerk zur Zeit aktiv ist
- LOCAL i, al$
- REG 1, &H1900 ' 19H nach AH laden
- CALL INTERRUPT &H21 ' MS-DOS Interrupt
- al$ = RIGHT$(STR$(REG(1)),2) ' Ergebnis in AL
- i = VAL(al$) ' Umformungen
- i = i + 65 ' In Laufwerksbezeich-
- FN Akt.Laufwerk$ = CHR$(i) + ":" ' nung umwandeln
- END DEF
-
- DEF FN Max.Laufwerk
- ' Ermitteln der maximal von DOS unterstützten Laufwerke
- LOCAL i, al$
- REG 1, &H0E00 ' 0Eh nach AH laden
- ' aktiviert gleichzeitig
- ' Laufwerk A: (DL=0) !!!
- REG 4, 0 ' 0 nach DL laden
- CALL INTERRUPT &H21 ' MS-DOS Interrupt
- al$ = RIGHT$(HEX$(REG(1)), 2) ' Ergebnis in AL
- i = VAL("&H" + al$) ' Umformungen
- FN Max.Laufwerk = i
- END DEF
-
- SUB AktivesLW (laufwerk$)
- ' Wiederanmelden des ursprünglich aktiven Lauf-
- ' werkes, dies ist unbedingt notwendig nach dem Auf-
- ' ruf von FN Max.Laufwerk!
- LOCAL i
- ' Ergebnis aus FN Akt.Laufwerk$ wieder in die
- ' ursprüngliche Zahl zurückverwandeln:
- laufwerk$ = UCASE$(laufwerk$) ' wird hier im Programm
- ' nicht benötigt !
- i = ASC(LEFT$(RIGHT$(laufwerk$,2), 1)) - 65
- IF i < 0 THEN i = 0 ' Fehler abfangen
- REG 1, &H0E00 ' DOS-Funktion 0Eh
- REG 4, i ' Laufwerksnummer nach DL
- CALL INTERRUPT &H21 ' MS-DOS Interrupt
- END SUB
-
- DEF FN Lightpen ' Ermittelt, ob ein Lightpen ange-
- ' schlossen ist. Vor Ausführung des Interrupt 10h
- ' muß unbedingt der richtige Wert für den aktuellen
- ' Bildschirmmodus nach AL geladen werden. Der Wert
- ' ist im BIOS-Datensegment an der Adresse $0040:$49
- ' gespeichert.
- LOCAL al, ax$, ah$
- DEF SEG = &H40 ' Wert für AL aus der Hardware
- al = PEEK(&H49) ' (garantiert die Grafikkarten-
- DEF SEG ' unabhängigkeit der Funktion)
- REG 1, &H0400 + al
- CALL INTERRUPT &H10 ' Bildschirminterrupt aufrufen
- ax$ = BIN$((REG(1))) ' Binärumwandlung des Resultats
- WHILE LEN(ax$) < 16
- ax$ = "0" + ax$ ' auf 16 Stellen ergänzen
- WEND
- ah$ = "&B" + LEFT$(ax$, 8) ' AH aus AX extrahieren
- FN LightPen = VAL(ah$) ' in Dezzahl wandeln und Übergabe
- END DEF
-
- DEF FN Printers ' Ermitteln der Druckerport-Adresse:
- ' wenn die Schnittstelle nicht vor-
- ' handen ist, wird als Portadresse 0 zurückgegeben.
- LOCAL p.port.1&, p.port.2&, p.port.3&, p.port.4&, i
- i = 0
- DEF SEG = &H40 ' BIOS-Datensegment
- p.port.1& = PEEK(&H8) + PEEK(&H9) * 256 ' LPT1
- p.port.2& = PEEK(&HA) + PEEK(&HB) * 256 ' LPT2
- p.port.3& = PEEK(&HC) + PEEK(&HD) * 256 ' LPT3
- p.port.4& = PEEK(&HE) + PEEK(&HF) * 256 ' LPT4
- DEF SEG
- IF p.port.1& > 0 THEN INCR i
- IF p.port.2& > 0 THEN INCR i
- IF p.port.3& > 0 THEN INCR i
- IF p.port.4& > 0 THEN INCR i
- FN Printers = i
- END DEF
-
- SUB Bildschirm(monitor$)
- ' Bestimmen des Monitortyps: CGA, EGA oder Monochrom
- LOCAL i
- DEF SEG = &H40 ' BIOS-Datensegment
- i = PEEK(&H88) ' Monitor-ID auslesen
- DEF SEG
- IF i = 248 THEN
- monitor$ = "Standard-Farbmonitor (CGA)"
- ELSEIF i = 249 THEN
- monitor$ = "EGA-Farbmonitor"
- ELSEIF i = 251 THEN
- monitor$ = "Monochrom"
- ELSEIF i = 247 THEN
- monitor$ = "Amiga-Color-Monitor"
- ELSE
- monitor$ = "unbekannte Type, Wert:" + STR$(i)
- END IF
- END SUB
-
- SUB Adapter(karte$)
- ' Ermitteln der Grafikkarte über Schaltung in den
- ' höchstmöglichen Grafikmodus
- LOCAL i
- karte$ = ""
- DEF SEG = 0 : i = PEEK(&H449) : DEF SEG
- ON ERROR GOTO detect
- SELECT CASE i
- CASE 1 TO 6
- karte$ = "IBM-Farbgrafikkarte (CGA) 640x200 Pixel"
- ON ERROR GOTO Olivetti
- SCREEN 3
- karte$ = "Olivetti-Farbgrafikkarte 640x400 Pixel"
- EXIT SUB
- Egadriver:
- ON ERROR GOTO Detect
- SCREEN 9
- karte$ = "Enhanced Graphics Adapter (EGA) " +_
- "640x350 Pixel"
- SCREEN 11
- karte$ = "MCGA-Karte (IBM PS/2 Modell" +_
- " 30) 640x480 Pixel"
- SCREEN 12
- karte$ = "Video Graphics Array Adapter" +_
- " (VGA) 640x480 Pixel"
- EXIT SUB
- CASE 7
- karte$ = "Monochrom-Textkarte (MDA)" +_
- " (kein Grafikdisplay)"
- SCREEN 2
- karte$ = "Hercules-Monochromgrafikkarte" +_
- " 735x348 Pixel"
- EXIT SUB
- CASE 8 TO 10
- karte$ = "IBM-PCjr Spezialgrafikkarte" +_
- " 640x200 Pixel"
- EXIT SUB
- CASE 11, 12, >15
- karte$ = "Grafikkarte nicht vorhanden" +_
- " oder unbekannter Typ"
- EXIT SUB
- CASE 13 TO 15
- karte$ = "Enhanced Graphics Adapter" +_
- " (EGA) 640x350 Pixel"
- SCREEN 11
- karte$ = "MCGA-Karte (IBM PS/2 Modell" +_
- " 30) 640x480 Pixel"
- SCREEN 12
- karte$ = "Video Graphics Array Adapter"+_
- " (VGA) 640x480 Pixel"
- END SELECT
- EXIT SUB
- Olivetti:
- RESUME EgaDriver
- Detect:
- RESUME Erkannt
- Erkannt:
- END SUB
-
- DEF FN Mouseok$ ' Test ob Mausinterrupt initialisiert
- REG 1,0 ' Funktion 1 = Mausinitialisierung
- CALL INTERRUPT &H33 ' Mausinterrupt 51
- IF REG(1) = -1 THEN
- FN Mouseok$ = " vorhanden und Maustreiber aktiv"
- ELSE
- FN Mouseok$ = " nicht vorhanden bzw. nicht aktiviert"
- END IF
- END DEF
-
- DEF FN Maustastenzahl$
- ' eine 3-Tastenmaus im MS-Mouse-Emulationsmodus
- ' (z.B. Genius) wird als 2-Tasten-Maus erkannt.
- REG 1,0 : CALL INTERRUPT &H33
- FN Maustastenzahl$ = STR$(REG(2)) + "-Tasten Maus"
- END DEF
-
- DEF FN Aktiv1$ ' LPT 1 eingeschaltet ?
- ' INP (&H379) = Port für Drucker-Statusbyte der
- ' Parallelschnittstelle 1
- ' 71: Gerät angeschlossen aber nicht selektiert
- ' 79: Gerät wird gerade initialisiert
- ' 127: Schnittstelle ist frei, kein Drucker
- ' 135: angeschlossen, Gerät aus
- ' 223: Gerät angeschlossen und Online
- LOCAL a$
- SELECT CASE INP(&H379)
- CASE 127
- a$ = "frei"
- CASE 140, 200 TO 255
- a$ = "on Line"
- CASE ELSE
- a$ = "off Line"
- END SELECT
- FN Aktiv1$ = "LPT(1) " + a$
- END DEF
-
- DEF FN Aktiv2$ ' LPT 2 eingeschaltet ?
- ' INP (&H279) = Port für Drucker-Statusbyte der
- ' Parallelschnittstelle 2
- LOCAL a$
- SELECT CASE INP(&H279)
- CASE 127
- a$ = "frei"
- CASE 140, 200 TO 255
- a$ = "on Line"
- CASE ELSE
- a$ = "off Line"
- END SELECT
- FN Aktiv2$ = "LPT(2) " +a$
- END DEF
-
- DEF FN Seriell1$
- ' INP (&H3F9) = Port für Statusbyte der
- ' seriellen Schnittstelle 1
- LOCAL a$
- SELECT CASE INP(&H3F9)
- CASE 1
- a$ = "belegt"
- CASE ELSE
- a$ = "frei"
- END SELECT
- FN Seriell1$ = "COM(1) " + a$
- END DEF
-
- DEF FN Seriell2$
- ' INP (&H2F9) = Port für Statusbyte der
- ' seriellen Schnittstelle 2
- LOCAL a$
- SELECT CASE INP(&H2F9)
- CASE 1
- a$ = "belegt"
- CASE ELSE
- a$ = "frei"
- END SELECT
- FN Seriell2$ = "COM(2) " + a$
- END DEF
-
- DEF FN DOSVers$ ' Ermitteln der DOS Version über
- ' Funktion 30h des Interrupt 21h
- LOCAL ax$, ah$, al$, ah, al, bx$, bx, bh, bh$, produzent$
- LOCAL dosversion$, mainnumber$, vernumber$, ms$, m$
- REG 1, &H3000 ' DOS Funktion &H30
- CALL INTERRUPT &H21 ' MS-DOS Interrupt
- ax$ = BIN$(REG(1)) ' AX lesen (binär)
- WHILE LEN(ax$) < 16
- ax$ = "0" + ax$ ' auf 16 Stellen ergänzen
- WEND
- al = VAL("&B" + RIGHT$(ax$, 8)) ' AL und AH aus AX
- ah = VAL("&B" + LEFT$(ax$, 8)) ' extrahieren
- bx$ = BIN$(REG(2)) ' BX lesen (binär)
- mainnumber$ = STR$(al) ' DOS-Hauptversionsnummer in AL
- vernumber$ = STR$(ah) ' DOS-Releasenummer in AH
- WHILE LEFT$(mainnumber$, 1) = CHR$(32)
- 'führende Leerzeichen abtrennen
- mainnumber$ = RIGHT$(mainnumber$, LEN(mainnumber$) - 1)
- WEND
- WHILE LEFT$(vernumber$, 1) = CHR$(32)
- vernumber$ = RIGHT$(vernumber$, LEN(vernumber$) - 1)
- WEND ' Versionsstring erstellen:
- dosversion$ = mainnumber$ + "." + vernumber$
- WHILE LEN(bx$) < 16 ' jetzt den Produzenten
- bx$ = "0" + bx$ ' ermitteln (ist im BH-Reister)
- WEND
- bh$ = "&B" + LEFT$(bx$, 8) ' BH aus BX extrahieren
- bh = VAL(bh$) ' in Dezimalzahl wandeln
- ms$ = "-DOS Version " : m$ = " MS"
- SELECT CASE bh ' Produzent aus Liste heraussuchen
- CASE 0 : produzent$ = "IBM PC" + ms$
- CASE 1 : produzent$ = "Microsoft" + m$ + ms$
- CASE 25 : produzent$ = "Olivetti" + m$ + ms$
- CASE &HFF : produzent$ = "Zenith" + m$ + ms$
- CASE else : produzent$ = m$ + ms$
- END SELECT
- FN DOSVers$ = produzent$ + dosversion$
- END DEF
-
- DEF FN BiosVers$ ' Auslesen des BIOS auf die Versionsnummer
- LOCAL b.name$, c, i
- b.name$ = ""
- DEF SEG = &HFE00
- FOR i = 0 TO 8192
- IF PEEK(i) > 31 AND PEEK(i) < 155 THEN
- b.name$ = b.name$ + CHR$(PEEK(i))
- END IF
- NEXT i
- DEF SEG
- IF INSTR(UCASE$(b.name$), "VER") THEN
- b.name$ = RIGHT$(b.name$, LEN(b.name$)-_
- INSTR(UCASE$(b.name$), "VER") + 1)
- ELSEIF INSTR(UCASE$(b.name$), "V.") THEN
- b.name$ = RIGHT$(b.name$, LEN(b.name$)-_
- INSTR(UCASE$(b.name$), "V.") + 1)
- ELSE
- FN Biosvers$ = "nicht gefunden"
- EXIT DEF
- END IF
- IF UCASE$(LEFT$(b.name$,(INSTR(b.name$,".")+1)))<>"V" THEN
- IF INSTR(b.name$,".") THEN
- b.name$ = LEFT$(b.name$,(INSTR(b.name$, ".") + 2))
- END IF
- END IF
- FN BiosVers$ = b.name$
- END DEF
-
- DEF FN BIOSDatum$ ' ermittelt das Erstellungsdatum des BIOS
- LOCAL i, biosdate$, tag$, monat$, jahr$
- DEF SEG = &HF000 ' das Datum steht an einer fixen
- FOR i = 0 TO 7 ' Adresse im BIOS
- biosdate$ = biosdate$ + CHR$(PEEK(&HFFF5 + i))
- NEXT i
- DEF SEG
- tag$ = MID$(biosdate$, 4, 2)
- IF LEFT$(tag$, 1) = "0" THEN tag$ = RIGHT$(tag$, 1)
- monat$ = LEFT$(biosdate$, 2)
- IF LEFT$(monat$, 1) = "0" THEN monat$ = RIGHT$(monat$, 1)
- jahr$ = RIGHT$(biosdate$, 2)
- IF LEFT$(tag$, 1) < "0" OR LEFT$(tag$, 1) > "9" THEN
- FN BIOSDatum$ = "nicht gefunden"
- ELSE
- FN BIOSDatum$ = tag$ + "." + monat$ + ".19" + jahr$
- END IF
- END DEF
-
- SUB Bioscopyright(bioscpr$) ' BIOS-Hersteller
- LOCAL a,b,c,i
- b.name$ = "" : c = 0 : i = 0
- DEF SEG = &HFE00
- WHILE i <= 4096
- IF PEEK(i) > 31 AND PEEK(i) < 155 THEN
- b.name$ = b.name$ + CHR$(PEEK(i))
- END IF
- INCR i
- WEND
- DEF SEG
- IF INSTR(UCASE$(b.name$), "COPY") THEN
- b.name$ = RIGHT$(b.name$, LEN(b.name$) -_
- INSTR(UCASE$(b.name$), "COPY") + 1) : c = 1
- ELSEIF INSTR(UCASE$(b.name$), "(C)") THEN
- b.name$ = RIGHT$(b.name$, LEN(b.name$) -_
- INSTR(UCASE$(b.name$), "(C)") + 1) : c = 1
- ELSEIF INSTR(UCASE$(b.name$), "COPR") THEN
- b.name$=RIGHT$(b.name$, LEN(b.name$) -_
- INSTR(UCASE$(b.name$), "COPR") + 1) : c = 1
- ELSE
- b.name$ = ""
- bioscpr$ = "Copyrightvermerk nicht gefunden."
- END IF
- IF c THEN
- IF INSTR(b.name$, "19") THEN a = INSTR(b.name$, "19")+4
- IF INSTR(UCASE$(b.name$), "PLC") THEN
- b = INSTR(UCASE$(b.name$), "PLC") + 3
- ELSEIF INSTR(UCASE$(b.name$), "INC") THEN
- b = INSTR(UCASE$(b.name$), "INC") + 3
- ELSEIF INSTR(UCASE$(b.name$), "LTD") THEN
- b = INSTR(UCASE$(b.name$), "LTD") + 3
- ELSEIF INSTR(UCASE$(b.name$), "CORP") THEN
- b = INSTR(UCASE$(b.name$), "CORP") + 4
- ELSEIF INSTR(UCASE$(b.name$), "COMPANY") THEN
- b = INSTR(UCASE$(b.name$), "COMPANY") + 7
- END IF
- IF b > a THEN SWAP a, b
- bioscpr$ = LEFT$(b.name$, a)
- END IF
- IF RIGHT$(bioscpr$, 1) <> "." THEN
- bioscpr$ = LEFT$(bioscpr$, LEN(bioscpr$) - 1)
- END IF
- END SUB
-
- SUB EGACopyRight(egacpr$) ' Ermitteln des EGA-Karten-
- ' Herstellers über das Lesen des EGA-BIOS
- LOCAL eganame$, Copyright, a, b, i
- eganame$ = "" : Copyright = 0
- DEF SEG=&HC000 : i = 0
- WHILE i <= 2024
- IF PEEK(i) > 31 AND PEEK(i) < 155 THEN
- eganame$ = eganame$ + CHR$(PEEK(i))
- END IF
- INCR i
- WEND
- DEF SEG
- IF INSTR(UCASE$(eganame$), "COPY") THEN
- eganame$ = RIGHT$(eganame$, LEN(eganame$) -_
- INSTR(UCASE$(eganame$), "COPY") + 1)
- copyright = 1
- ELSEIF INSTR(UCASE$(eganame$), "COPR") THEN
- eganame$ = RIGHT$(eganame$, LEN(eganame$) -_
- INSTR(UCASE$(eganame$), "COPR") + 1)
- copyright = 1
- ELSEIF INSTR(UCASE$(eganame$), "(C)") THEN
- eganame$ = RIGHT$(eganame$, LEN(eganame$) -_
- INSTR(UCASE$(eganame$), "(C)") + 1)
- copyright = 1
- ELSE
- egacpr$ = "Grafik-Copyright nicht gefunden."
- END IF
- IF copyright THEN
- IF INSTR(eganame$, "19") THEN a = INSTR(eganame$,"19")+4
- IF INSTR(UCASE$(eganame$), "INC") THEN
- b = INSTR(UCASE$(eganame$), "INC") + 3
- ELSEIF INSTR(UCASE$(eganame$), "LTD") THEN
- b = INSTR(UCASE$(eganame$), "LTD") + 3
- ELSEIF INSTR(UCASE$(eganame$), "CORP") THEN
- b = INSTR(UCASE$(eganame$), "CORP") + 4
- ELSEIF INSTR(UCASE$(eganame$), "PLC") THEN
- b = INSTR(UCASE$(eganame$), "PLC") + 3
- END IF
- IF b > a THEN SWAP a, b
- egacpr$ = LEFT$(eganame$, a)
- IF RIGHT$(egacpr$, 1) <> "." THEN
- egacpr$ = LEFT$(egacpr$, LEN(egacpr$) - 1)
- END IF
- END IF
- END SUB
-
- DEF FN FreeSpace!(lw) ' aus Turbo Basic Handbuch angepaßt
- REG 4, lw ' Gibt den freien Speicher von
- REG 1, &H3600 ' Laufwerk lw aus
- CALL Interrupt &H21
- FN FreeSpace! = CSNG(REG(2)) * REG(3) * REG(1) / 1024
- END DEF
-
- DEF FN Speicherbaenke ' Anzahl der RAM-Speicher-
- CALL INTERRUPT &H11 ' bänke auf der Hauptplatine
- FN Speicherbaenke=VAL("&B"+LEFT$ _
- (RIGHT$(BIN$(reg(1)),4),2))+1
- END DEF
-
- SUB Hardwaresetting
- SHARED dosversion$, textmodus$, bs$, biosver$
- SHARED karte$,landescode$
- LOCAL register$, koprozessor$, sys$, Lw, tag$, monat$, jahr$
- LOCAL printer1$, xL, printer2$, disklw$, seriell$, conf
- LOCAL gameport$, x$, a, sx$, cmos.rtc$, lightpen$, nein$
- LOCAL parallel$, i, bioscpr$, egacpr$, biosversion$
- LOCAL max.laufwerke, laufwerksnamen$, akt.lw$max.laufwerke$
- nein$ = "nicht"
- CALL ClrScr
- CALL Titelbild
- GOSUB Zeitdarstellung
- ON TIMER(1) GOSUB Zeitdarstellung ' Während der Arbeit die
- TIMER ON ' Uhrzeit aktualisieren
- CALL QPrint(9, 26, "Konfiguration wird ermittelt", 15)
- CALL QPrint(17, 34, "Bitte warten", 143)
- CALL BIOSCopyRight(bioscpr$)
- biosversion$ = FN Biosvers$
- IF karte$="Enhanced Graphics Adapter (EGA) 640x350 Pixel"_
- OR karte$="MCGA-Karte (IBM PS/2 Modell 30) 640x480 Pixel"_
- OR karte$=("Video Graphics Array Adapter (VGA) 640x480 "+_
- "Pixel") THEN CALL EGACopyRight(egacpr$)
- CALL INTERRUPT &H11
- IF LEFT$(RIGHT$(BIN$(REG(1)),2),1)="0" THEN
- koprozessor$ = nein$
- END IF
- DEF SEG = &HF000 : conf = PEEK(&HFFFE) ' Rechner ID-Byte
- DEF SEG
- SELECT CASE conf
- CASE &HD9 : sys$ = "Peacock XT"
- CASE &H4B : sys$ = "Micromint XT"
- CASE &HFC : sys$ = "PC AT oder kompatibler AT 286/386"
- CASE &HFD : sys$ = "IBM PC Jr"
- CASE &HFE : sys$ = "IBM PC-XT oder kompatibler PC-XT"
- CASE &HFF : sys$ = "IBM PC oder kompatibler PC"
- CASE ELSE : sys$ = "kompatibler PC-XT. ID-Byte: " + _
- HEX$(conf)
- END SELECT
- biosdate$ = FN BIOSDatum$
- DEF SEG = 0
- seriell$ = STR$((PEEK(&H0411) AND 14)/2)
- gameport$ = STR$(SGN(PEEK(&H0411) AND 16))
- IF PEEK(1040) AND 1 = 0 THEN
- Lw = 0
- ELSE
- Lw = ((PEEK(1040) AND 192)/64) + 1
- END IF
- disklw$ = STR$(Lw)
- DEF SEG
- parallel$ = STR$(FN Printers)
- TIMER OFF
- CALL ClrScr
- sx$ = ": "
- CALL Titelbild
- CALL SubMen("Hardwarekonfiguration")
- CALL QPrint(05,1,"Gerätetyp"+ STRING$(17,46) +sx$+sys$,7)
- CALL QPrint(06, 1, "DOS-Version" + STRING$(15,46) +_
- sx$ + dosversion$, 7)
- CALL QPrint(07, 1, "Math. Co-Prozessor" +_
- STRING$(8,46)+sx$+koprozessor$+" vorhanden",7)
- CALL QPrint(08, 1, "BIOS-Copyright" + STRING$(12,46) +_
- sx$ + bioscpr$, 7)
- CALL QPrint(09, 1, "BIOS-Datum" + STRING$(16,46)+_
- sx$ + biosdate$,7)
- CALL QPrint(10, 1, "BIOS-Version" + STRING$(14,46)+_
- sx$ + biosversion$, 7)
- CALL QPrint(11, 1, "Bildschirmmodus im DOS" +_
- STRING$(4,46) + sx$ + textmodus$, 7)
- CALL QPrint(12, 1, "Grafikadapter" + STRING$(13,46) +_
- sx$ + karte$, 7)
- IF egacpr$="" THEN egacpr$ = "kein eigenes BIOS vorhanden"
- CALL QPrint(13, 1, "Grafikkartencopyright" +_
- STRING$(5,46) + sx$ + egacpr$, 7)
- CALL QPrint(14, 1, "Monitor-Typ" + STRING$(15,46) +_
- sx$ + bs$, 7)
- CALL QPrint(15, 1, "Diskettenlaufwerk(e)" +_
- STRING$(6,46) + ":" + disklw$, 7)
- IF VAL(disklw$) = 1 THEN
- DEF SEG = 0
- xL = PEEK(&H504) ' Bei nur einem Laufwerk
- ' emuliert Diskettenlaufwerk
- DEF SEG ' A: auch B:. Überprüfen,
- ' welches als aktiv vermerkt ist
- CALL QPrint(15, 1, "(Virtuelles Laufwerk " +_
- CHR$(xL+65) + sx$ + "ist aktiv.)", 7)
- END IF
- akt.lw$ = FN Akt.Laufwerk$
- CALL QPRINT(16,1,"derzeit aktives Laufwerk..: "+akt.lw$,7)
- max.laufwerke = FN Max.Laufwerk
- max.laufwerke$ = STR$(max.laufwerke)
- laufwerksnamen$ = CHR$(max.laufwerke+64) + ":"
- IF max.laufwerke > 0 THEN
- laufwerksnamen$ = "A: - " + laufwerksnamen$
- END IF
- CALL Qprint(16, 35, "Zahl der max. unterst. Laufwerke:" +_
- max.laufwerke$ + " (" + laufwerksnamen$+")",7)
- CALL aktiveslw(akt.lw$)
- CALL QPrint(17, 1, "parallele Schnittstelle(n):" +_
- parallel$, 7)
- IF VAL(parallel$)>0 THEN ' nur LPT(1) und LPT(2) testen,
- ' wer hat schon 3 oder 4 Drucker
- CALL QPrint(17, 35, FN Aktiv1$, 7)
- IF VAL(parallel$)>1 THEN CALL QPrint(17,55,FN Aktiv2$,7)
- END IF
- CALL QPrint(18,1,"serielle Schnittstelle(n):"+seriell$,7)
- IF VAL(seriell$)>0 THEN ' nur COM(1) und COM(2) testen.
- ' COM(3) und COM(4) sind nicht
- ' genormt und auch erst ab DOS
- ' V. 3.3 überhaupt möglich.
- CALL QPrint(18, 35, FN Seriell1$, 7)
- IF VAL(seriell$) > 1 THEN
- CALL QPrint(18, 55, FN Seriell2$, 7)
- END IF
- END IF
- CALL QPrint(19, 1, "Gameport(s)" + STRING$(15,46)+ ":" +_
- gameport$, 7)
- IF VAL(gameport$) > 0 THEN ' Joystick 1 und 2 werden zwar
- ' überprüft, aber nur allgemein
- ' ausgegeben.
- IF (STICK(0) > 0 AND STICK(1) > 0) OR _
- (STICK(2) > 0 AND STICK(3) > 0) THEN
- CALL QPrint(19, 35, _
- "Analog-Joystick(s) angeschlossen", 7)
- ELSE
- CALL QPrint(19, 35, _
- "kein Analog-Joystick angeschlossen", 7)
- END IF
- END IF
- CALL QPrint(20, 1, "Maus und Maustreiber" +_
- STRING$(6,46) + sx$, 7)
- LOCATE 20,28 : COLOR 7,0
- IF INSTR (FN MouseOk$,"nicht") THEN
- PRINT "";
- ELSE
- PRINT FN Maustastenzahl$;
- END IF
- PRINT FN MouseOK$
- IF INP(&H70)=0 THEN cmos.rtc$=nein$ ' CMOS-RAM-Port lesen
- CALL QPrint(21, 1, "Batteriegepuffertes RAM..." +_
- sx$ + cmos.rtc$ + " vorhanden", 7)
- IF FN LightPen = 0 THEN Lightpen$ = nein$
- CALL QPrint(22, 1, "Lightpen" + string$(18,46) +_
- sx$ + Lightpen$ + " angeschlossen", 7)
- EXIT SUB
-
- Zeitdarstellung:
- CALL Zeitdisplay (25, 14, 1)
- RETURN
- END SUB
-
- SUB Memorysetting
- SHARED Graf.Bs.Speicher, freiram
- LOCAL arbsp$, arbsp1$, arbsp2$, baenke$, tm.ram, a.bs.s
- LOCAL tmram$, ggs$, s$, sx$, fuellaenge
- sx$ = ": "
- DEF SEG = 0
- arbsp1$ = STR$(PEEK(&H0413) + PEEK(&H0414)*256)
- CALL INTERRUPT &H12
- arbsp2$ = STR$(REG(1))
- DEF SEG
- CALL SubMen("Arbeits- und Bildschirmspeicher")
- CALL QPrint(06, 1, "Arbeitsspeicher:", 15)
- CALL QPrint(07, 2, "von DOS insgesamt erkannt" +_
- STRING$(41,46) + sx$ + arbsp1$ + " kB", 7)
- CALL QPrint(08, 2, "Speicher auf der Hauptplatine" +_
- STRING$(37,46)+sx$+STR$(CINT(ENDMEM/1024))+" kB",7)
- baenke$ = STR$(FN Speicherbaenke)
- CALL QPrint(09, 2, "Anzahl der Speicherbänke auf der" +_
- " Hauptplatine"+STRING$(21,46)+sx$+" "+baenke$,7)
- CALL QPrint(10, 2, "RAM-Speicher auf Hauptplatine &" +_
- " Steckkarten (ohne Extended Memory)" +_
- sx$ + arbsp2$ + " kB", 7)
- CALL QPrint(11, 1, "davon:", 7)
- CALL QPrint(12, 2, "frei" + STRING$(62,46) + sx$ +_
- STR$(freiram) + " kB", 7)
- CALL QPrint(13, 2, "bereits belegt"+STRING$(52,46)+sx$ +_
- STR$(CINT(ENDMEM/1024)-freiram) + " kB", 7)
- gss$ = STR$(graf.bs.speicher)
- fuellaenge = 5 - LEN(gss$)
- CALL QPrint(16, 1, "Bildschirmspeicher:", 15)
- CALL QPrint(17, 2, "Bildschirmspeicher im " +_
- "höchstauflösenden Grafikmodus je Seite .....:" +_
- SPACE$(Fuellaenge) + gss$ + " kB", 7)
- DEF SEG = &H40
- tm.ram = PEEK(&H4C)*100 + PEEK(&H4D)
- a.bs.s = PEEK(&H62)
- DEF SEG
- tmram$ = STR$(tm.ram)
- fuellaenge = 5 - LEN(tmram$)
- CALL QPrint(18, 2, "Bildschirmspeicher im Textmodus " +_
- STRING$(34,46)+":"+SPACE$(Fuellaenge)+tmram$+" kB",7)
- CALL QPrint(19, 2, "Zur Zeit aktive Bildschirmseite " +_
- STRING$(34,46) + ": Seite" + STR$(a.bs.s), 7)
- END SUB
-
- $INCLUDE "BENCHMK.INC"
-
- SUB DiskInformation
- LOCAL ax, al, al$, ah, bx, cx, cx!, dx, dx!, ds, i, j, check
- LOCAL x$, xL, hk$, id.byte, aktiv$,kap!, sx$, h$, v$
- SHARED dosversion$
- sx$ = ": " : hk$ = CHR$(34) ' Anführungszeichen
- v$ = "5 " + CHR$(172) + " " + hk$ + " Disk" ' 5 1/4 "
- h$ = "3 " + CHR$(171) + " " + hk$ ' 3 1/2 "
- CALL ClrScr
- CALL TitelBild
- CALL QPrint(12,22,"Bitte legen Sie in alle Laufwerke",15)
- CALL QPrint(13,25,"des Systems Disketten ein !",15)
- CALL Taste
- COLOR 7,0
- CALL ClrScr
- aktiv$ = FN akt.laufwerk$ ' Aktives Laufwerk festhalten
- j = FN Max.Laufwerk ' Zahl der vom DOS unter-
- DEF SEG = 0 ' stützten Laufwerke
- IF PEEK(1040) AND 1 > 0 THEN ' mindestens ein Laufwerk?
- IF((PEEK(1040) AND 192)/64) + 1 = 1 THEN
- ' nur 1 Disk.-Laufwerk
- xL = PEEK(&H504) ' ist aktuelles Laufwerk A oder B ?
- check = 1 ' Testvariable: nur ein Laufwerk !
- END IF
- END IF
- DEF SEG
- FOR i = 1 TO j ' 0=aktuell!, 1=A, 2=B, 3=C ...
- IF check = 1 THEN ' Wenn nur ein Diskettenlaufwerk:
- IF xl = 0 AND i = 2 THEN INCR i
- ' Laufwerk B ist aktiv, A übergehen
- IF xl = 1 AND i = 1 THEN INCR i
- ' Laufwerk A ist aktiv, B übergehen
- END IF
- REG 1,&H1C00 ' DOS Funktion 1C (für beliebiges LW)
- REG 4,i ' Laufwerksnummer anwählen in DL
- CALL INTERRUPT &H21 ' DOS Interrupt aufrufen
- ax = REG(1) ' Register auslesen und umwandeln
- al$ = RIGHT$(HEX$(ax), 2) ' AL = Sektoren je Cluster
- al = VAL("&H" + al$)
- bx = REG(2) ' BX = ID-Byte-Adr. in Segment DS
- cx = REG(3) ' CX = Bytes pro Cluster
- dx = REG(4) ' DX = Cluster pro Disk
- ds = REG(8) ' DS = Segment für FAT-ID
- DEF SEG = ds
- id.byte = PEEK(bx) ' ID-Byte auslesen
- DEF SEG
- CALL TitelBild
- CALL SubMen("Disketteninfo")
- LOCATE 5,1 : PRINT "Ihr Betriebssystem (";dosversion$;
- PRINT ") unterstützt";j;" Laufwerke." : LOCATE 7,1
- PRINT "Nummer der Laufwerkseinheit: "; i-1
- PRINT "Laufwerkskennbuchstabe.....: ";CHR$(i+64)" ";
- IF check = 1 THEN ' Wenn nur ein Laufwerk vorhanden,
- IF i=1 THEN PRINT "= B"; ' anzeigen, daß es noch ein
- IF i=2 THEN PRINT "= A"; ' virtuelles Laufwerk gibt
- END IF
- IF al <> 255 THEN
- PRINT : PRINT
- PRINT "Clustergröße"; STRING$(15,46); sx$;
- PRINT USING "##### Bytes"; cx*al
- PRINT "Sektorgröße"; STRING$(16,46); sx$;
- PRINT USING "##### Bytes"; cx
- PRINT "Sektoren pro Cluster"; STRING$(7,46); sx$;
- PRINT USING "#####"; al
- PRINT "Verfügbare Cluster"; STRING$(9,46); sx$;
- PRINT USING "#####"; dx-1
- PRINT "Adresse des ID-Bytes (hex): ";HEX$(ds);":";
- PRINT HEX$(bx)
- PRINT "ID-Byte des Laufwerks (hex): ";HEX$(id.byte)
- dx! = dx : cx!=cx
- kap! = CSNG(dx! * cx! *al / 1024)
- PRINT : PRINT "Nettokapazität";STRING$(13,46);sx$;
- IF kap! < 1024 THEN
- PRINT USING "#####.# kByte"; kap!
- ELSE
- PRINT USING "#####.## MByte"; kap!/1024
- END IF
- kap! = FN FreeSpace!(i)
- PRINT "Freie Kapazität"; STRING$(12,46); sx$;
- IF kap! < 1024 THEN
- PRINT USING "#####.# kByte"; kap!
- ELSE
- PRINT USING "#####.## MByte"; kap!/1024
- END IF
- SELECT CASE id.byte
- CASE 255
- x$ = v$ + " doppelseitig: 8 Sektoren, 40 Spuren."
- CASE 254
- x$ = v$ + " einseitig: 8 Sektoren, 40 Spuren."
- CASE 253
- x$ = v$ + " doppelseitig: 9 Sektoren, 40 Spuren."
- CASE 252
- x$ = v$ + " einseitig: 9 Sektoren, 40 Spuren."
- CASE 251
- x$ = h$ + " / " + v$ + " doppelseitig: 8 " +_
- " Sektoren, 80 Spuren."
- CASE 250
- x$ = h$ + " / " + v$ + " einseitig: " +_
- "8 Sektoren, 80 Spuren."
- CASE 249
- x$ = h$ + " / " + v$ + "doppels.: 9 Sekt." +_
- " 80 Sp. / 15 Sekt. 80 Sp."
- CASE 248
- x$ = "nicht herausnehmbarer Datenträger: " +_
- "Festplatte oder RAM-Disk."
- CASE ELSE
- x$ = "unbekannter Diskettentyp"
- END SELECT
- PRINT : PRINT "Diskettentyp"; sx$; x$
- ELSE
- PRINT " nicht belegt!" ' oder Diskettenfehler !
- ' Wenn keine Diskette ein-
- ' gelegt ist, stürzt das Programm nicht ab !
- END IF
- IF i < j THEN
- CALL Taste : COLOR 7,0 : CALL ClrScr
- END IF
- NEXT i
- ' Ursprünglich aktives Laufwerk wieder anmelden:
- CALL AktivesLW(aktiv$)
- END SUB
-
- '* ------------------------------------------------------- *
- '* Das Hauptprogramm *
-
- dosversion$ = FN DOSVers$ ' Ermitteln der DOS-Version
- DEF SEG = 0 ' Bildschirmmodus bei
- modus = (PEEK(&H410) AND 48)/16 ' Programmstart ermitteln
- DEF SEG
- SELECT CASE modus
- CASE 1: textmodus$ = "40x25, Farbe"
- CASE 2: textmodus$ = "80x25, Farbe"
- CASE 3: textmodus$ = "80x25, Monochrom"
- END SELECT
- CALL ClearBuffer ' Tastaturpuffer löschen
- FOR i = 1 TO 12 ' die Monatsnamen aus den
- READ monat$(i) ' DATA-Zeilen einlesen
- NEXT i
- CALL ADAPTER(karte$) ' Grafikkarte ermitteln
- DEF SEG=&H40 ' im Grafikmodus Größe des
- Graf.Bs.Speicher = PEEK(&H4C)*100 + PEEK(&H4D)
- ' aktuellen (HiRes)
- DEF SEG ' Bildschirmspeichers ermitteln
- CALL Bildschirm(bs$) ' Monitortyp ermitteln
- freiram = CINT((FRE(-1) + FRE(-2) + FRE(s$))/1024) + 12
- ' jetzt ist der Speicher noch von Variablen weitgehend unbe-
- ' lastet. Nach dem Aufruf des Programmpunkts 'Konfiguration'
- ' kommen noch einige kByte dazu. Es soll aber der freie
- ' Speicher unter DOS ermittelt werden.
- SCREEN 0 ' Grafikmodus verlassen
- ON ERROR GOTO 0 ' Fehlerabfangroutinen abschalten
- COLOR 7,0 : CLS : WIDTH 80
- ' Standard-80-Zeichenmodus anwählen
- DO
- CALL TitelBild
- LOCATE 2, 1, 0 ' Cursor ausschalten
- CALL QPrint(3,1,CHR$(201)+STRING$(78,205)+CHR$(187),15)
- FOR i = 4 TO 6
- CALL QPrint(i, 1, CHR$(186), 15)
- CALL QPrint(i, 80, CHR$(186), 15)
- NEXT i
- CALL QPrint(4,25, "Auswahl mit dem Anfangsbuchstaben:",14)
- CALL QPrint(6, 7, "K", 15)
- CALL QPrint(6, 8, "onfiguration", 7)
- CALL QPrint(6, 21, "R", 15)
- CALL QPrint(6, 22, "AM-Speicher",7)
- CALL QPrint(6, 34, "E", 15)
- CALL QPrint(6, 35, "nvironment", 7)
- CALL QPrint(6, 46, "S", 15)
- CALL QPrint(6, 47, "peed-Test", 7)
- CALL QPrint(6, 57, "D", 15)
- CALL QPrint(6, 58, "isk-Info", 7)
- CALL QPrint (6,67,"Q",15)
- CALL QPrint (6,68,"uitt",7)
- CALL QPrint (7,1,CHR$(200)+STRING$(78,205)+CHR$(188),15)
- CALL QPrint (10,1,CHR$(201)+STRING$(78,205)+CHR$(187),7)
- FOR i=11 TO 22
- CALL QPrint (i,1,CHR$(186),7)
- CALL QPrint (i,80,CHR$(186),7)
- NEXT i
- CALL QPrint (11,35,"Informationen:",14)
- CALL QPrint (12,1,CHR$(199)+STRING$(78,196)+CHR$(182),7)
- CALL QPrint (13,5,"Unter »Konfiguration« erhalten Sie "+_
- "detaillierte Auskunft über die Hard-",7)
- CALL QPrint (14,6,"warekonfiguration des Rechners.",7)
- CALL QPrint (15,5,"Unter »RAM-Speicher« erfahren Sie"+_
- " alles über die Speicher-Konfiguration",7)
- CALL QPrint (16,6,"des Systems.",7)
- CALL QPrint (17,5,"Unter »Environment« werden die"+_
- " gesetzten Environmentvariablen und die",7)
- CALL QPrint (18,6,"Länge des verwendeten DOS Umgebungs"+_
- "speichers (Environment) angezeigt.",7)
- CALL QPrint (19,5,"Unter »Speed-Test« wird die Rechner"+_
- "geschwindigkeit mit der eines IBM-XT",7)
- CALL QPrint (20,6,"(8088, 4,77 MHz) verglichen.",7)
- CALL QPrint (21,5,"»Diskinfo« informiert über die an"+_
- "geschlossenen Laufwerke.",7)
- CALL QPrint (22,5,"Mit »Quit« verlassen Sie das Programm.",7)
- CALL QPrint (23,1,CHR$(200)+STRING$(78,205)+CHR$(188),7)
- DO ' Tastenschleife
- a$="" ' Löschen von alten Eingaben
- CALL Zeitdisplay(25,14,1) ' ständige Aktualisierung der Uhrzeit
- a$=UCASE$(INKEY$) ' Tastaturabfrage (GROSS/klein ignorieren)
- IF a$=CHR$(27) THEN a$="Q" ' ESC erlauben
- LOOP UNTIL a$="E" OR a$="K" OR a$="S" OR a$="Q" OR a$="R" OR a$="D"
- SELECT CASE a$ ' Auswahl der Unterprogramme
- CASE "D"
- CALL ClrScr
- CALL Diskinformation
- CASE "R"
- CALL ClrScr
- CALL MemorySetting
- CASE "E"
- CALL ClrScr
- CALL SubMen ("Environment") ' Untermenünamen anzeigen
- j = 6 ' Erste Displayzeile
- FOR i = 1 TO 15 ' die ersten 15 Einträge
- IF ENVIRON$(i)<>"" THEN ' erlaubt sind 255
- ' normal sind 5 bis 10
- CALL QPrint (j, 1, "SET " + ENVIRON$(i), 7)
- INCR j ' Anzeigezeile erhöhen
- END IF
- IF LEN(ENVIRON$(i))>78 THEN
- INCR j ' Zeilensprung
- END IF ' (nötig z.B. für PATH)
- NEXT i
- enlength = 0 ' Länge des Environments
- FOR i = 1 TO 255 ' Für die maximale Zahl
- IF LEN(ENVIRON$(i))=0 THEN EXIT FOR
- ' Ausstieg, wenn
- ' Environment-String leer
- enlength=enlength+LEN(ENVIRON$(i))
- NEXT i
- IF j>21 THEN j=21 ' Tiefer als Zeile 21?
- ' maximal Zeile 23 erlaubt
- CALL QPrint (j+2,1,"Im DOS-Umgebungsspeicher sind"+_
- STR$(enlength)+" Bytes belegt.",15)
- CASE "S"
- CALL ClrScr
- CALL ClearBuffer
- CALL Benchmark
- CASE "K"
- CALL HardwareSetting
- CASE "Q"
- CALL ClearBuffer
- CALL Sicherheitsabfrage
- END SELECT
- IF a$<>"Q" THEN
- CALL ClearBuffer
- CALL Taste
- CALL ClrScr
- END IF
- LOOP ' DO ... LOOP ohne Abbruchbedingung
-
- DATA Januar, Februar, "März", April, Mai, Juni, Juli
- DATA August, September, Oktober, November, Dezember
- '* ------------------------------------------------------- *
- '* Ende von SYSINFO.BAS *