home *** CD-ROM | disk | FTP | other *** search
-
- PROGRAM MCBLIST;
- {
- LISTE DER MEMORY- CONTROL- BLOCKS UND EINIGES MEHR
- PAUL SCHUBERT, ROTTWEILER STR. 8, 6000 FRANKFURT 1, 069 / 231145
-
- COMPILIEREN MIT TURBO PASCAL >= 5.0
- TURBO PROFESSIONAL WIRD BENÖTIGT
- }
- {$F+}
-
- USES IVSWAP, { MUß AM ANFANG DES PROGRAMMS STEHEN }
- TPCRT,DOS,TPDOS,SELECTD,NEATUNIT,
- TPSTRING,TPWINDOW,TPSTRDEV,
- TPENHKBD,TPEMS,TPEXTMEM,TPMOUSE,
- TPTIMER,DETECTRD,NOBREAK;
-
-
- CONST INTFNAME = 'MCBLIST.SAV';
- FILEID : POINTER = PTR($1234,$5689);
-
- TANORM : BYTE = $07; { TEXTATTRIBUT NORMALE ANZEIGE }
- TAKOPF : BYTE = $4E; { TEXTATTRIBUT KOPFZEILEN }
- TAFREI : BYTE = $08; { TEXTATTRIBUT FREIER MCB }
- TAPROM : BYTE = $0A; { TEXTATTRIBUT MCB FÜR EPROM }
- TAFRAM : BYTE = $09; { TEXTATTRIBUT MCB FÜR FREIES RAM }
- TAVEKT : BYTE = $0F; { TEXTATTRIBUT INTERRUPT- VEKTOR- ANZEIGE }
- TAVALT : BYTE = $02; { TEXTATTRIBUT ALTER VEKTOR }
- TAVNEU : BYTE = $1F; { TEXTATTRIBUT NEUER VEKTOR }
- TASPEC : BYTE = $0D; { SPEZIELLE AUSSAGEN }
- TAMUTTER : BYTE = $0C; { MUTTERPROZESS- ANZEIGE }
- TAMROM : BYTE = $1E; { ROM IN DER MEMORY- MAP A000..F000 }
- TAMRAM : BYTE = $1F; { RAM IN DER MEMORY- MAP A000..F000 }
- TAINAKT : BYTE = $08; { INAKTIV- ATTRIBUT FÜR FENSTERRAHMEN }
-
- MAXWIND = 7; { ANZAHL FENSTER OHNE ALERT(AWIN) UND MESSAGE(BWIN) }
-
- KOPFZATT : FLEXATTRS = ($1E,$1B,$1E,$1C);
-
- TYPE MCBNAM = ARRAY[1..8] OF CHAR;
-
- TYPE MCBTYP = RECORD
- ID : CHAR;
- PSP : WORD;
- LEN : WORD;
- FILL : ARRAY[1..3] OF BYTE;
- N : MCBNAM;
- END;
- MCBPTR = ^MCBTYP;
-
- TYPE MCBREGTYP = RECORD
- MCBR : MCBTYP;
- ADDR : WORD;
- ATTR : BYTE;
- END;
-
- TYPE CHARRAY = ARRAY[1..20] OF CHAR;
- BYTEARR = ARRAY[1..20] OF BYTE;
-
- TYPE PSPTYP = RECORD
- {00} INTR20 : WORD; { INT 20H }
- {02} ENDBL : WORD; { END OF ALLOCATION BLOCK }
- {04} F1 : ARRAY[1..6] OF BYTE;
- {0A} I22PTR : POINTER; { POINTER AUF INT 22H }
- {0E} I23PTR : POINTER; { POINTER AUF INT 23H }
- {12} I24PTR : POINTER; { POINTER AUF INT 24H }
- {16} CMDSEG : WORD; { SEGMENT DES MUTTERPROZESSES }
- {18} HNDTAB : ARRAY[1..20] OF BYTE; { HANDLE- TABELLE }
- {2C} ENVSEG : WORD; { ENVIRONMENT- SEGMENT }
- {2E} F2 : POINTER; { IRGENDWOHIN IM COMMAND.COM }
- {32} HNDMAX : WORD; { MAXIMALE ANZAHL HANDLES }
- {34} HNDPTR : POINTER; { POINTER AUF HANDLE- TABELLE }
- {38} F3 : ARRAY[1..24] OF BYTE;
- { 4 * $FF UND 12 * $00 }
- {50} INTR21 : WORD; { INT 21H }
- {52} F4 : ARRAY[1..10] OF BYTE;
- { $CB UND 9 * $00 }
- {5C} FCB1 : ARRAY[1..16] OF BYTE;
- {6C} FCB2 : ARRAY[1..16] OF BYTE;
- {7C} F5 : ARRAY[1..4] OF BYTE;
- {80} CMDLIN : STRING[127];
- END;
-
- TYPE SOF = RECORD O,S : WORD; END;
- PSPPTR = ^PSPTYP;
-
- TYPE WPTYPE = RECORD
- X,Y,L,W,W0 : INTEGER;
- F : BOOLEAN;
- END;
-
- TYPE BUFFERTYP = RECORD
- NXT : POINTER;
- F1 : ARRAY[1..6] OF BYTE;
- DRV : POINTER;
- F2 : ARRAY[1..2] OF BYTE;
- DATA : ARRAY[0..$1FF] OF BYTE;
- END;
-
- TYPE DITTYP = RECORD
- NXT : POINTER;
- F1 : ARRAY[1..9] OF BYTE;
- DRV : POINTER;
- F2 : ARRAY[1..21] OF BYTE;
- NAME : ARRAY[1..11] OF CHAR;
- F3 : ARRAY[1..4] OF BYTE;
- END;
-
-
- VAR I,J,K,
- MCBC : INTEGER;
- TA,TA0,SIZMOD : BYTE;
- CH1,CH2 : CHAR;
- P1,KT1,KA1,KT2,KA2,
- DUMPADDR : STRING;
- MCBLEN : LONGINT;
- OLDMEM,OLDMEMF,
- OLDMEMG,OLDMEMJ : POINTER;
- FILERR,KA,
- AUS,CONFIG,URENV,QUIET,
- HATPAR,HATFREI,DOS4,
- DRDOS,LCD : BOOLEAN;
- VON,BIS,MCBEND,CMDPSP,
- MS,MO,MSM,MOM,MSN,MON,
- CHEF,MEMSIZE : WORD;
-
- MCB : MCBPTR;
- MP,HP : POINTER;
- MCBA : ARRAY[1..50] OF MCBREGTYP;
- MCBAP,MCBDP : BYTE;
-
- BUF : INTPTR;
- F : FILE OF POINTER;
-
- MODVEC : POINTER ABSOLUTE $50:$30;
-
- SC : ARRAY[1..MAXWIND] OF VSCREEN;
- WI : ARRAY[1..MAXWIND] OF WINDOWPTR;
- WP : ARRAY[1..MAXWIND] OF WPTYPE;
- ZEI : WORD;
- SPA,WN,WNM,SPM,CX,CY : BYTE;
- AWIN,BWIN,WDP : WINDOWPTR;
-
- XMSENTRY : POINTER;
- HMBUF : ARRAY[0..127] OF BYTE;
- RAX,RBX,RCX,RDX : WORD;
- WS : STRING[MAXWIND];
-
- MSP : MOUSESTATEPTR;
- MSPSIZE : WORD;
- MSX,MSY : BYTE;
- BUT : BUTTONSTATUS;
- MAUSAKT : BOOLEAN;
-
-
- PROCEDURE MOUSEORKEY; FORWARD;
- PROCEDURE ALERT(TEXT:STRING); FORWARD;
- PROCEDURE MESSAGE(TEXT:STRING); FORWARD;
-
-
- FUNCTION NEUERMAUSTREIBER:BOOLEAN;
- VAR R : REGISTERS;
- BEGIN
- NEUERMAUSTREIBER := FALSE;
- IF NOT MOUSEINSTALLED THEN EXIT;
- WITH R DO BEGIN
- AX := 21;
- BX := $FFFF;
- INTR($33,R);
- IF BX = $FFFF THEN EXIT;
- END; { WITH R }
- NEUERMAUSTREIBER := TRUE;
- END; { NEUERMAUSTREIBER }
-
-
- PROCEDURE INIMAUS;
- BEGIN
- IF NEUERMAUSTREIBER THEN BEGIN
- IF NOT MAUSAKT THEN BEGIN
- MAUSAKT := TRUE;
- MSPSIZE := MOUSESTATEBUFFERSIZE;
- GETMEM(MSP,MSPSIZE);
- END;
- SAVEMOUSESTATE(MSP,FALSE);
- INITIALIZEMOUSE;
- ENABLEEVENTHANDLING;
- FULLMOUSEWINDOW;
- BLOCKMOUSECURSOR;
- MOUSEGOTOXY(MSX,MSY);
- END ELSE MAUSAKT := FALSE;
- END;
-
-
- PROCEDURE NEWDELAY(ZEIT:WORD);
- VAR START,STOP : LONGINT;
- R : REAL;
- BEGIN
- START := READTIMER;
- REPEAT
- R := ELAPSEDTIME(START,STOP); { ZEITVERBRATER IST FÜR 20 MHz- NEAT NÖTIG }
- STOP := READTIMER;
- UNTIL ROUND(ELAPSEDTIME(START,STOP)) >= ZEIT;
- END;
-
-
- PROCEDURE DUMPBLOCK;
- VAR I,J : WORD;
- MP : ^BYTEARR;
- MC : ^CHARRAY ABSOLUTE MP;
- BEGIN
- MP := PTR(MS,MO);
- GOTOXY(1,1);
- WRITE(HEXW(MS+(MO SHR 4)),':0000 Adresse -> ',DUMPADDR); CLREOL;
-
- FOR I := 0 TO 7 DO BEGIN
- GOTOXY(1,I + 2);
- WRITE(HEXW(MS),':',HEXW(MO+16*I),' ');
- FOR J := 1 TO 16 DO BEGIN
- WRITE(HEXB(MP^[16*I+J]),' ');
- IF (J <> 16) AND ((J AND 3) = 0) THEN WRITE(' ');
- END; { NEXT J }
-
- FOR J := 1 TO 16 DO BEGIN
- IF MP^[16*I+J] IN [0..31,127]
- THEN WRITE('·')
- ELSE WRITE(MC^[16*I+J]);
- END; { NEXT J }
-
- END; { NEXT I }
- END; { DUMPBLOCK }
-
-
- PROCEDURE TMESSAGE;
- VAR P : WINDOWPTR;
- CH1 : CHAR;
- S : STRING;
- BEGIN
- IF NOT ACTIVATEWINDOW(BWIN) THEN ALERT('FEHLER ACTIVATEWINDOW');
- HIDDENCURSOR;
- CLRSCR;
- FASTWRITE('═══════════════',HI(WINDMIN),LO(WINDMIN)+23,$2B);
- S := 'Drücken Sie jetzt nicht die DEL- Taste !';
- GOTOXY( ((LO(WINDMAX)-LO(WINDMIN))-LENGTH(S)) SHR 1 ,2);
- WRITE(S);
- WHILE KEYPRESSED DO CH1 := READKEY;
- REPEAT
- IF CTRLALTDEL THEN BEGIN
- CLRSCR;
- S := 'Das sollten Sie doch NICHT tun !';
- GOTOXY( ((LO(WINDMAX)-LO(WINDMIN))-LENGTH(S)) SHR 1 ,2);
- WRITE(S);
- END;
- UNTIL KEYPRESSED OR ((KBDFLAGS AND $0C) <> $0C);
- WHILE KEYPRESSED DO CH1 := READKEY;
- P := ERASETOPWINDOW;
- END;
-
-
- PROCEDURE MOUSEORKEY;
- VAR I : WORD;
- INPS,TS : STRING;
- STA,STO : LONGINT;
- LABEL MAUSENDE;
- BEGIN
- IF MAUSAKT THEN BEGIN
- BLOCKMOUSECURSOR;
- SHOWMOUSE;
- STA := READTIMER;
- REPEAT
- IF (KBDFLAGS AND $0C) = $0C THEN BEGIN
- MOUSEWHEREXY(MSX,MSY,BUT);
- TMESSAGE;
- MOUSEGOTOXY(MSX,MSY);
- END;
- IF BREAK THEN BEGIN
- MOUSEWHEREXY(MSX,MSY,BUT);
- MESSAGE('Programm beenden mit <Alt-Esc>');
- MOUSEGOTOXY(MSX,MSY);
- END;
- IF WN = 99 THEN BEGIN
- STO := READTIMER;
- STO := READTIMER; { 2 MAL LESEN, WEGEN GEFAHREN BEI HOHEM TAKT }
- IF ROUND(ELAPSEDTIME(STA,STO)) >= 250 THEN BEGIN
- MOUSEWHEREXY(MSX,MSY,BUT);
- STUFFKEY(0);
- HIDEMOUSE;
- EXIT;
- END;
- END;
- UNTIL KEYPRESSED OR MOUSEPRESSED;
- MOUSEWHEREXY(MSX,MSY,BUT);
- IF MOUSEPRESSED THEN BEGIN
- SOUND(4000);
- NEWDELAY(5);
- NOSOUND;
- NEWDELAY(100);
- MOUSEWHEREXY(MSX,MSY,BUT);
- IF BUT = BOTHBUTTONS THEN BEGIN
- STUFFKEY(27);
- GOTO MAUSENDE;
- END ELSE BEGIN
- FASTREAD(80,MSY,1,INPS);
- I := MSX;
- CASE INPS[I] OF
- '═' : BEGIN
- WHILE (I > 1) AND (NOT (INPS[I] IN ['╒','╘'])) DO DEC(I);
- IF INPS[I] = '╘' THEN BEGIN
- IF BUT = RIGHTBUTTON THEN STUFFKEY(77 SHL 8);
- IF BUT = LEFTBUTTON THEN STUFFKEY(80 SHL 8);
- END;
- IF INPS[I] = '╒' THEN BEGIN
- IF BUT = RIGHTBUTTON THEN STUFFKEY(75 SHL 8);
- IF BUT = LEFTBUTTON THEN STUFFKEY(72 SHL 8);
- END;
- IF (WN = 99) THEN BEGIN
- IF BUT = RIGHTBUTTON THEN NEWDELAY(100);
- IF BUT = LEFTBUTTON THEN GOTO MAUSENDE;
- END;
- IF NOT KEYPRESSED THEN STUFFKEY(0);
- HIDEMOUSE;
- EXIT;
- END;
- '╒' : BEGIN
- STUFFKEY(71 SHL 8);
- GOTO MAUSENDE;
- END;
- '╛' : BEGIN
- STUFFKEY(79 SHL 8);
- GOTO MAUSENDE;
- END;
- END; { CASE INPS[I] }
- CASE MSY OF
- 1 : BEGIN
- CASE MSX OF
- 1..10 : STUFFKEY(59 SHL 8);
- 13..22 : STUFFKEY(60 SHL 8);
- 27..39 : STUFFKEY(61 SHL 8);
- 43..54 : STUFFKEY(62 SHL 8);
- 56..67 : STUFFKEY(63 SHL 8);
- 69..80 : STUFFKEY(64 SHL 8);
- END; { CASE MSX }
- GOTO MAUSENDE;
- END;
- 2 : BEGIN
- CASE MSX OF
- 1..11 : STUFFKEY(65 SHL 8);
- 13..25 : STUFFKEY(66 SHL 8);
- 27..36 : STUFFKEY(67 SHL 8);
- 38..52 : STUFFKEY(88 SHL 8);
- 54..65 : STUFFKEY(92 SHL 8);
- 67..80 : STUFFKEY($100);
- END; { CASE MSX }
- GOTO MAUSENDE;
- END;
- ELSE { CASE MSY }
- { EINIGE AUSGEWÄHLTE BUCHSTABEN PER MAUSKLICK IN DEN TASTATURBUFFER BEFÖRDERN }
- IF INPS[I] IN ['+','-'] THEN BEGIN
- STUFFKEY(BYTE(INPS[I]));
- GOTO MAUSENDE;
- END;
- { WENN BIS HIER NOCH NICHTS BESONDERES UNTER DEM MAUSCURSOR GEFUNDEN WURDE,
- WIRD EINE HEX- EINGABE VERSUCHT }
- IF NOT (INPS[MSX] IN ['0'..'9','A'..'F']) THEN GOTO MAUSENDE;
- WHILE (I > 1) AND (UPCASE(INPS[I]) IN ['0'..'9','A'..'F']) DO DEC(I);
- DELETE(INPS,1,I);
-
- { GGF. AUTOMATISCH DEBUG AKTIVIEREN }
- IF WN <> 99 THEN STUFFKEY(67 SHL 8);
- TS := '';
-
- IF (KBDFLAGS AND 4) = 4 THEN BEGIN
- IF STR2WORD('$'+COPY(INPS,1,2),I) THEN ;
- TS := HEXW(MEMW[0:I*4+2]) + ':' + HEXW(MEMW[0:I*4]) + ^M;
- FOR I := 1 TO LENGTH(TS) DO STUFFKEY(BYTE(TS[I]));
- GOTO MAUSENDE;
- END;
- IF (BUT = CENTERBUTTON) OR
- ((BUT = LEFTBUTTON) AND ((KBDFLAGS AND 3) <> 0)) THEN BEGIN
- IF INPS[3] = ' ' THEN BEGIN
- DELETE(INPS,3,1);
- IF INPS[3] = ' ' THEN DELETE(INPS,3,1);
- TS := ':' + COPY(INPS,3,2) + COPY(INPS,1,2);
- END ELSE BEGIN
- FOR I := 1 TO 4 DO STUFFKEY(BYTE(INPS[I]));
- STUFFKEY(BYTE(':'));
- END;
- DELETE(INPS,1,4);
- FOR I := 1 TO 3 DO IF INPS[1] IN [':',' '] THEN DELETE(INPS,1,1);
- END;
-
- IF INPS[3] = ' ' THEN BEGIN
- DELETE(INPS,3,1);
- IF INPS[3] = ' ' THEN DELETE(INPS,3,1);
- STUFFKEY(BYTE(INPS[3]));
- STUFFKEY(BYTE(INPS[4]));
- STUFFKEY(BYTE(INPS[1]));
- STUFFKEY(BYTE(INPS[2]));
- END ELSE FOR I := 1 TO 4 DO STUFFKEY(BYTE(INPS[I]));
- IF BUT = LEFTBUTTON THEN STUFFKEY(BYTE(':'));
- FOR I := 1 TO LENGTH(TS) DO STUFFKEY(BYTE(TS[I]));
-
- STUFFKEY(13);
- GOTO MAUSENDE;
- END; { CASE MSY }
- END; { IF BUT }
- END;
- IF NOT KEYPRESSED THEN STUFFKEY(0);
- HIDEMOUSE;
- END ELSE BEGIN
- REPEAT
- IF (KBDFLAGS AND $0C) = $0C THEN TMESSAGE;
- IF BREAK THEN MESSAGE('Programm beenden mit <Alt-Esc>');
- IF WN = 99 THEN DUMPBLOCK;
- UNTIL KEYPRESSED;
- END;
- EXIT;
- MAUSENDE:
- IF NOT KEYPRESSED THEN STUFFKEY(0);
- REPEAT MOUSEWHEREXY(MSX,MSY,BUT); UNTIL BUT = NOBUTTON;
- HIDEMOUSE;
- END; { MOUSEORKEY }
-
-
- {$I MCBLIST1}
-
- PROCEDURE FIRSTMCB;
- VAR R : REGISTERS;
- BEGIN
- { ERSTEN MCB HOLEN }
- MCBC := 1;
- CMDPSP := $FFFF;
- KA := FALSE;
- AUS := FALSE;
- CONFIG := FALSE;
- URENV := FALSE;
- WITH R DO BEGIN
- AH := $52;
- MSDOS(R);
- HP := POINTER(MEML[ES:BX-4]);
- END; { WITH R }
- MCB := HP;
- { DA HABEN WIR DEN 1. MCB }
- END;
-
-
- PROCEDURE DISPPTR(ES,BX:WORD;OFF:INTEGER);
- BEGIN
- WRITE(TPSTR,OFF:4,' = ',HEXW(ES),':',HEXW(BX+OFF),' -> ');
- WRITE(TPSTR,HEXW(SOF(MEML[ES:BX+OFF]).S),':',
- HEXW(SOF(MEML[ES:BX+OFF]).O));
- VWRITELN;
- END; { DISPPTR }
-
-
- PROCEDURE MCBNAME(MCB:MCBPTR);
- CONST NULL : ARRAY[1..8] OF CHAR = #0#0#0#0#0#0#0#0;
- VAR I : BYTE;
- BEGIN
- IF MCB^.N = NULL THEN EXIT;
- FOR I := 1 TO 8 DO
- IF MCB^.N[I] IN [#1..#$1F,#$2A,#$2E,#$3A..#$3F,#$7F,#$A8..#$FF] THEN EXIT;
- WRITE(TPSTR,'[',MCB^.N,']');
- VWRITE;
- END; { MCBNAME }
-
-
- PROCEDURE DRIVERDIS;
- VAR I,NR : INTEGER;
- DRVCNT : BYTE;
- NBD : BYTE;
- MCB : MCBPTR;
- MCB2 : WORD;
- L : LONGINT;
- BFPTR : ^POINTER;
- HP : ^BYTEARR;
- CHP : ^CHARRAY;
- R : REGISTERS;
- DRV : STRING;
- F : SEARCHREC;
- DIT : ^DITTYP;
-
- FUNCTION DOS4DRIVER:BOOLEAN;
- VAR SCHLUSS : WORD;
- MCB : MCBPTR;
- R : REGISTERS;
- BEGIN
- DOS4DRIVER := FALSE;
- IF NOT DOS4 THEN EXIT;
-
- TEXTATTR := TAKOPF;
- WRITE(TPSTR,' PSP Länge ( DOS >= 4.0 SUB-MCBs ) ');
- VWRITELN;
- TEXTATTR := TA;
-
- R.AH := $52;
- MSDOS(R);
- MCB := POINTER(MEML[R.ES:R.BX-4]);
-
- WHILE (MCB^.PSP <> 8) DO BEGIN
- MCB := PTR(SOF(MCB).S+SUCC(MCB^.LEN),0);
- END;
-
- SCHLUSS := SOF(MCB).S + SUCC(MCB^.LEN);
- INC(SOF(MCB).S);
- WHILE (MCB^.PSP = SUCC(SOF(MCB).S)) AND
- (SOF(MCB).S <> SCHLUSS) DO BEGIN
- WRITE(TPSTR,' ');
- WRITE(TPSTR,HEXW(MCB^.PSP),MCB^.LEN*16:7);
- (*
- WRITE(TPSTR,' ',HEXB(MCB^.FILL[1]));
- WRITE(TPSTR,' ',HEXB(MCB^.FILL[2]));
- WRITE(TPSTR,' ',HEXB(MCB^.FILL[3]));
- *)
- WRITE(TPSTR,' ');
- CASE MCB^.ID OF
- 'D' : WRITE(TPSTR,'DEVICE= ');
- 'F' : WRITE(TPSTR,'FILES= ');
- 'X' : WRITE(TPSTR,'FCBS= ');
- 'B' : WRITE(TPSTR,'BUFFERS= ');
- 'L' : WRITE(TPSTR,'LASTDRIVE= ');
- 'S' : WRITE(TPSTR,'STACKS= ');
- ELSE
- WRITE(TPSTR,'???????? ');
- END; { CASE MCB^.ID }
- MCBNAME(MCB);
- VWRITELN;
- MCB := PTR(SOF(MCB).S+SUCC(MCB^.LEN),0);
- END;
- VWRITELN;
- DOS4DRIVER := TRUE;
- END; { DOS4DRIVER }
-
- PROCEDURE GETNBD;
- { GET NUMBER OF BLOCKDEVICES }
- BEGIN
- NBD := 0;
- R.AH := $52;
- MSDOS(R);
- HP := POINTER(MEML[R.ES:R.BX+12]); { LETZTER TREIBER }
- WHILE (SOF(HP).O <> $FFFF) DO BEGIN
- IF ((HP^[6] AND $80) = 0) THEN INC(NBD,HP^[11]);
- HP := POINTER(MEML[SOF(HP).S:SOF(HP).O]);
- END; { WHILE }
- END; { GETNBD }
-
- PROCEDURE DISPLAYPATHS;
- VAR I,J : WORD;
- CHP : ^CHARRAY;
- DC : CHAR;
- F : SEARCHREC;
- BEGIN
- TEXTATTR := TAKOPF;
- VWRITELNS(' Liste der PATHs ( SUBST / JOIN ) : ');
- TEXTATTR := TA;
- R.AH := $52;
- MSDOS(R);
- CHP := PTR(MEMW[R.ES:R.BX+24],0);
- FOR I := 1 TO NUMBEROFDRIVES DO BEGIN
- IF (CHP^[2] <> ':') OR (CHP^[3] <> '\') THEN EXIT;
- WRITE(TPSTR,CHR(I+$40),': = ');
- VWRITE;
- TEXTATTR := $0B;
- J := 1;
- DC := CHP^[1];
- WHILE (J < 65) AND (CHP^[J] <> #0) DO BEGIN
- WRITE(TPSTR,CHP^[J]);
- INC(J);
- END; { WHILE }
- IF ((ORD(DC) - $40) <> I) THEN BEGIN
- VWRITE;
- TEXTATTR := $0E;
- FINDFIRST(CHR(I+$40)+':\*.*',ANYFILE,F);
- IF DOSERROR = 3 THEN WRITE(TPSTR,' (JOIN)')
- ELSE WRITE(TPSTR,' (SUBST)');
- END;
- VWRITELN;
- TEXTATTR := TA;
- IF DOS4 THEN INC(SOF(CHP).O,88) ELSE INC(SOF(CHP).O,81);
- END;
- END; { DISPLAYPATHS }
-
- PROCEDURE BUFFERANZEIGE;
- VAR NR : BYTE;
- R : REGISTERS;
- BFP : ^BUFFERTYP;
-
- PROCEDURE BUFFERINHALT;
- VAR I : BYTE;
- BEGIN
- WRITE(TPSTR,NR:3,' ');
- WRITE(TPSTR,HEXW(SOF(BFP).S),'->');
- WRITE(TPSTR,HEXPTR(BFP^.NXT),' ');
- FOR I := 1 TO 6 DO WRITE(TPSTR,HEXB(BFP^.F1[I]),' ');
- WRITE(TPSTR,HEXPTR(BFP^.DRV),' ');
- FOR I := 1 TO 2 DO WRITE(TPSTR,HEXB(BFP^.F2[I]),' ');
- VWRITELN;
- INC(NR);
- END; { BUFFERINHALT }
-
- BEGIN { BUFFERANZEIGE }
- IF DOS4 THEN EXIT; { ICH WEIß NOCH NICHT, WIE DAS GEHT }
-
- TEXTATTR := TAKOPF;
- VWRITELNS(' BUFFERS = Liste : ');
- VWRITELNS(' NR. ADDR NEXT DRIVER ');
- TEXTATTR := TA;
- R.AH := $52;
- MSDOS(R);
- NR := 1;
- BFP := PTR(MEMW[R.ES:R.BX+20],0);
- (*
- SO SOLLTE MAN ES BEI DOS3.3 NICHT MACHEN, ABER BEI DOS4 SCHEINT DAS SCHON
- EHER ZU STIMMEN
- BFP := PTR(MEMW[R.ES:R.BX-6],0);
- *)
- REPEAT
- BUFFERINHALT;
- BFP := BFP^.NXT;
- UNTIL (BFP^.NXT = PTR($FFFF,$FFFF));
- BUFFERINHALT;
- END; { BUFFERANZEIGE }
-
- PROCEDURE DITANZEIGE;
- VAR I,NR : BYTE;
-
- FUNCTION DITNAME:BOOLEAN;
- VAR I : BYTE;
- BEGIN
- DITNAME := FALSE;
- FOR I := 1 TO 11 DO
- IF DIT^.NAME[I] IN [#0..#$1F,#$2A,#$2E,#$3A..#$3F,#$7F,#$A8..#$FF] THEN EXIT;
- DITNAME := TRUE;
- END; { DITNAME }
-
- PROCEDURE DITINHALT;
- BEGIN
- WRITE(TPSTR,NR:3,' ');
- WRITE(TPSTR,HEXPTR(DIT^.NXT),' ');
- WRITE(TPSTR,DIT^.NAME,' ');
- WRITE(TPSTR,HEXPTR(DIT^.DRV),' ');
- VWRITELN;
- IF DOS4 THEN INC(SOF(DIT).O,59) ELSE INC(SOF(DIT).O,53);
- INC(NR);
- END; { DITINHALT }
-
- BEGIN { DITANZEIGE }
- TEXTATTR := TAKOPF;
- VWRITELNS(' DIT - LISTE ');
- TEXTATTR := TA;
- NR := 1;
- REPEAT
- DITINHALT;
- UNTIL NOT DITNAME;
- DIT := BFPTR^;
- REPEAT
- DITINHALT;
- UNTIL NOT DITNAME;
- END; { DITANZEIGE }
-
- BEGIN { DRIVERDIS }
- IF SETWINDOW(4,$07,100,80,TRUE) THEN EXIT;
-
- GETNBD;
- WITH R DO BEGIN
- AH := $52;
- MSDOS(R);
- MCB := POINTER(MEML[ES:BX-4]);
- {
- ES:BX-8 IST EIN DYNAMISCHER BUFFER- ZEIGER
- BFPTR := POINTER(MEML[ES:BX-8]);
- }
- BFPTR := POINTER(MEML[ES:BX+4]);
- DIT := POINTER(MEML[ES:BX+4]);
- MCB2 := SOF(MCB).S+SUCC(MCB^.LEN);
- NR := 1;
- HP := POINTER(MEML[ES:BX+12]); { LETZTER TREIBER }
- VON := SOF(BFPTR^).S;
- BIS := PRED(MCB2);
- WHILE VON > BIS DO BEGIN
- SOF(MCB).S := SOF(MCB).S + SUCC(MCB^.LEN);
- BIS := PRED(SOF(MCB).S);
- END;
- END; { WITH R }
-
- IF NOT DOS4DRIVER THEN BEGIN
- VWRITELNS(' --- FILES,BUFFERS,STACKS,MCBS ---');
- L := SUCC(BIS - VON); L := L SHL 4;
- WRITE(TPSTR,' ',HEXW(VON),'-',HEXW(BIS),' len=',L:5,' ->');
- VWRITE;
- VECTANZ;
- VWRITELN;
- END;
-
- TEXTATTR := TAKOPF;
- WRITE(TPSTR,' ADRESSE NAME ATTR ');
- VWRITELN;
- TEXTATTR := TA;
- DRVCNT := 0;
- BIS := PRED(VON);
-
- WHILE (SOF(HP).O <> $FFFF) DO BEGIN
- VON := SOF(HP).S;
- DRV := '';
- WRITE(TPSTR,NR:2,': ',HEXPTR(HP),' ');
- INC(NR);
- IF ((HP^[6] AND $80) = 0) THEN BEGIN
- { ANZEIGE LAUFWERKSTREIBER - LAUFWERKSBEZEICHNER }
- DRV := CHR(NBD-DRVCNT-HP^[11]+$41);
- WRITE(TPSTR,DRV,':');
- IF HP^[11] = 1 THEN BEGIN
- WRITE(TPSTR,' ');
- IF POS(DRV,RAMDRIVES) > 0 THEN BEGIN
- FINDFIRST(DRV+':\*.*',VOLUMEID,F);
- IF DOSERROR = 0 THEN DRV := F.NAME
- ELSE DRV := '';
- END ELSE DRV := '';
- IF LENGTH(DRV) > 8 THEN DELETE(DRV,9,1);
- END ELSE BEGIN
- DRV := '';
- WRITE(TPSTR,'..',CHR(NBD-DRVCNT+$40),':');
- WRITE(TPSTR,' ');
- END;
- INC(DRVCNT,HP^[11]);
- END ELSE BEGIN
- { ANZEIGE TREIBER - ID }
- FOR I := 11 TO 18 DO WRITE(TPSTR,CHR(HP^[I]));
- END;
- WRITE(TPSTR,' ',HEXB(HP^[6]),HEXB(HP^[5]));
- (*
- WRITE(TPSTR,' ',HEXB(HP^[8]),HEXB(HP^[7]));
- WRITE(TPSTR,' ',HEXB(HP^[10]),HEXB(HP^[9]));
- *)
- IF SOF(HP).S <> $70 THEN BEGIN
- WRITE(TPSTR,' - ');
- I := 19;
- WHILE HP^[I] IN [10,13,32..126] DO BEGIN
- IF (HP^[I] >= 32) THEN BEGIN
- WRITE(TPSTR,CHR(HP^[I]));
- END;
- INC(I);
- END; { WHILE }
- END; { IF SOF(HP).S <> $70 }
- IF DRV <> '' THEN BEGIN
- VWRITE;
- TEXTATTR := $0E;
- WRITE(TPSTR,DRV);
- END;
- HP := POINTER(MEML[SOF(HP).S:SOF(HP).O]);
- VWRITELN;
- TEXTATTR := TA;
-
- IF VON <> $70 THEN BEGIN
- L := SUCC(BIS - VON); L := L SHL 4;
-
- IF L > 120000 THEN BEGIN
- BIS := PRED(MCB2);
- L := SUCC(BIS - VON); L := L SHL 4;
- END;
-
- WRITE(TPSTR,' ',HEXW(VON),'-',HEXW(BIS),' len=',L:5,' ->');
- VWRITE;
- VECTANZ;
- VWRITELN;
- END;
- BIS := PRED(VON);
- END; { WHILE }
-
- IF NOT DRDOS THEN BEGIN
- DISPLAYPATHS;
- BUFFERANZEIGE;
- DITANZEIGE;
- END;
-
- CLOSEVSCREEN(4);
- END; { DRIVERDIS }
-
-
- PROCEDURE WRITEMCBLEN;
- BEGIN
- CASE SIZMOD OF
- 1 : WRITE(TPSTR,MCBLEN*16:7); { GRÖßE IN BYTES }
- 2 : WRITE(TPSTR,MCBLEN*16/1024:6:2,'k'); { GRÖßE IN K-BYTES }
- 3 : WRITE(TPSTR,HEXW(MCBLEN):5,'H'); { GRÖßE IN PARAGRAPHS (HEX) }
- 4 : WRITE(TPSTR,MCBLEN:5); { GRÖßE IN PARAGRAPHS (DEZIMAL) }
- END; { CASE SIZMOD }
- END; { WRITEMCBLEN }
-
-
- PROCEDURE MCBLISTE;
- VAR W : WORD;
- EMSPF : POINTER;
- BEGIN
- READFILE(FALSE);
- IF NOT QUIET THEN IF SETWINDOW(1,$07,50,120,TRUE) THEN EXIT;
-
- HATFREI := FALSE;
- EMSPF := NIL;
- IF EMSINSTALLED THEN EMSPF := EMSPAGEFRAMEPTR;
-
- OLDMEM := NIL;
- OLDMEMJ := NIL;
- MCBAP := 0;
-
- TEXTATTR := TAKOPF;
- WRITE(TPSTR,' MCB: PSP: Länge: ');
- CASE SIZMOD OF
- 1 : WRITE(TPSTR,'Bytes ');
- 2 : WRITE(TPSTR,'k Bytes ');
- 3 : WRITE(TPSTR,'Paragraphs (HEX)');
- 4 : WRITE(TPSTR,'Paragraphs ');
- END;
- WRITE(TPSTR,' ');
- VWRITELN;
- TEXTATTR := TA;
-
- FIRSTMCB;
- MCBLEN := SUCC(SOF(HP).S);
- W := DOSVERSION;
- WRITE(TPSTR,'DOS ',HI(W),'.',LO(W),'(');
- WRITEMCBLEN;
- WRITE(TPSTR,') :');
- VWRITE;
-
- MCB := HP;
- VON := 0;
- BIS := SOF(HP).S;
- VECTANZ;
-
- REPEAT
- TEXTATTR := TA;
- IF MCB^.PSP = 0 THEN BEGIN
- TEXTATTR := TAFREI;
- KA := TRUE;
- END ELSE BEGIN
- KA := FALSE;
- IF (MCB^.PSP = $A000) OR
- (MCB^.PSP = $B000) OR
- (MCB^.PSP = $B800) THEN TEXTATTR := TAPROM;
- END;
- IF BIS > VON THEN VON := BIS;
- VWRITELN;
-
- MCBEND := SOF(MCB).S+SUCC(MCB^.LEN);
- IF (MCBEND = $9FFF) OR (MCBEND = $9FFE) THEN TEXTATTR := TAFRAM;
-
- IF (HP = OLDMEMF) THEN BEGIN
- WRITE(TPSTR,' <───── save Interrupts ─────>');
- VWRITELN;
- END;
- IF (HP = OLDMEMG) THEN BEGIN
- WRITE(TPSTR,' <───── save Interrupts (jenseits) ─────>');
- VWRITELN;
- END;
- IF MCB^.ID = 'Z' THEN BEGIN
- TEXTATTR := TAFRAM;
- IF SOF(HP).S > $A000 THEN OLDMEMJ := HP;
- MCBLEN := SUCC(SOF(MCB).S + MCB^.LEN);
- IF (MCBLEN SHR 6) <> MEMSIZE THEN BEGIN
- MCBLEN := LONGINT(LONGINT(MEMSIZE) SHL 10) - MCBLEN SHL 4;
- WRITE(TPSTR,'!!!!! im letzten MCB fehlen ',MCBLEN,' Bytes !!!!!');
- VWRITELN;
- END;
- END;
-
- INC(MCBAP);
- MCBA[MCBAP].MCBR := MCB^;
- MCBA[MCBAP].ADDR := SOF(MCB).S;
- MCBA[MCBAP].ATTR := 0;
-
- WRITE(TPSTR,MCBC:2,': ',HEXW(SOF(HP).S),' ',HEXW(MCB^.PSP),' ');
- MCBLEN := MCB^.LEN;
- WRITEMCBLEN;
- WRITE(TPSTR,' ');
- VWRITE;
-
- MCBNAME(MCB);
- IF (MCB^.ID <> 'Z') THEN BEGIN
- MP := MCB; INC(SOF(MP).S);
- IF NOT BATDISP(SOF(MP).S,TRUE) THEN BEGIN
-
- VWRITE;
- TA0 := TEXTATTR;
- TEXTATTR := TASPEC;
- IF URENV AND (MCB^.PSP = CMDPSP) THEN BEGIN
- WRITE(TPSTR,' Ur- Environment');
- MCBA[MCBAP].ATTR := 4;
- URENV := FALSE;
- END;
- IF CONFIG THEN BEGIN
- WRITE(TPSTR,' ',GETENV('COMSPEC'),'<1>');
- MCBA[MCBAP].ATTR := 2;
- CONFIG := FALSE;
- URENV := TRUE;
- CMDPSP := MCB^.PSP;
- END;
- IF MCB^.PSP = 8 THEN BEGIN
- WRITE(TPSTR,' CONFIG.SYS');
- CONFIG := TRUE;
- MCBA[MCBAP].ATTR := 6;
- END;
- IF (EMSPF <> NIL) AND (PTR(MCB^.PSP,0) = EMSPF) THEN BEGIN
- WRITE(TPSTR,' EMS Pageframe');
- END;
- IF SUCC(SOF(MCB).S) = CHEF THEN BEGIN
- VWRITE;
- TEXTATTR := TAMUTTER;
- WRITE(TPSTR,' Mutterprozess ');
- END;
- VWRITE;
- TEXTATTR := TA0;
- END;
-
- PSPDISP;
- IF (MCBEND >= $9FFE) AND
- (MCBEND <= $C000) AND
- (MCB^.PSP = 0) THEN BEGIN
- IF NOT HATFREI THEN BEGIN
- WRITE(TPSTR,'--- freier Speicher ---');
- MCBA[MCBAP].ATTR := 7;
- END;
- HATFREI := TRUE;
- END;
- END ELSE BEGIN
- { LETZTER MCB HAT ID 'Z' }
- AUS := TRUE;
- IF MCB^.PSP = 0 THEN BEGIN
- WRITE(TPSTR,'--- freier Speicher ');
- IF MCBEND > $A000 THEN WRITE(TPSTR,'(jenseits) ');
- WRITE(TPSTR,'---');
- VWRITE;
- MCBA[MCBAP].ATTR := 7;
- END ELSE PSPDISP;
- { FESTLEGEN, WO ENDE FREIER SPEICHER IST }
- IF BIS > $A000 THEN BIS := $EFFF ELSE BIS := $9FFF;
- { SONDERFALL JENSEITSSPEICHER BIS <F800 }
- IF VON > $F000 THEN BIS := $F7FF;
- VECTANZ;
- END;
- VWRITE;
-
- IF NOT AUS THEN BEGIN
- INC(MCBC);
- SOF(HP).S := SOF(HP).S + SUCC(MCB^.LEN);
- MCB := HP;
- BIS := SOF(HP).S;
- VECTANZ;
- END;
- UNTIL AUS;
- VWRITELN;
-
-
- IF FILERR THEN BEGIN
- MCBEND := MEMW[$40:$13];
- IF MCBEND <= 640 THEN BEGIN
- IF (MCBEND AND $3F) <> 0 THEN BEGIN
- WRITE(TPSTR,'!!!!! Speichergröße ist kein Vielfaches von 64k !!!!!');
- VWRITELN;
- END;
- END;
- IF (MCBEND AND $1F) <> 0 THEN BEGIN
- WRITE(TPSTR,'!!!!! Speichergröße ist kein Vielfaches von 32k !!!!!');
- VWRITELN;
- END;
- IF (MCBEND AND $0F) <> 0 THEN BEGIN
- WRITE(TPSTR,'!!!!! Speichergröße ist kein Vielfaches von 16k !!!!!');
- VWRITELN;
- END;
- END ELSE BEGIN
- IF MEMSIZE <> MEMW[$40:$13] THEN BEGIN
- WRITE(TPSTR,'!!!!! Virengefahr - Speichergröße ist ungleich SAVE- FILE !!!!!');
- VWRITELN;
- END;
- END;
-
- IF BIS < $C000 THEN BEGIN
- WRITE(TPSTR,'EGA- BIOS C000 :');
- VWRITE;
- VON := SUCC(BIS);
- BIS := $EFFF;
- VECTANZ;
- VWRITELN;
- END;
-
- WRITE(TPSTR,' BIOS F000 :');
- VWRITE;
- VON := $F000;
- BIS := $FFFF;
- VECTANZ;
-
- TEXTATTR := TA;
- IF NOT QUIET THEN CLOSEVSCREEN(1);
- END; { MCBLISTE }
-
-
- PROCEDURE MCBLISTENEU;
- BEGIN
- CLOSEWINDOW(1);
- CLOSEWINDOW(3);
- CLOSEWINDOW(4);
- MCBLISTE;
- END; { MCBLISTENEU }
-
-
- PROCEDURE KOPFZEILE;
- BEGIN
- INIMAUS;
- FASTREAD(80,1,1,KT1);
- READATTRIBUTE(80,1,1,KA1);
- FASTREAD(80,2,1,KT2);
- READATTRIBUTE(80,2,1,KA2);
- FLEXWRITE('<F1>'^A'-Help, '^B'<F2>'^A'-MCBs, '+
- ^B'<F3>'^A'-INT-VEC, '^B'<F4>'^A'-MEMORY, '+
- ^B'<F5>'^A'-DEVICE, '^B'<F6>'^A'-CONFIG ',
- 1,1,KOPFZATT);
- FLEXWRITE('<F7>'^A'-Close, '^B'<F8>'^A'-MCB-Inf, '+
- ^B'<F9>'^A'-Dump, '^B'<ShF5>'^A'-Restore, '+
- ^B'<ShF9>'^A'-Save, '^C'<Alt-Esc>-Ende',
- 2,1,KOPFZATT);
- QUIET := FALSE;
- BLOCKCURSOR;
- GOTOXY(71,2);
- END; { KOPFZEILE }
-
-
- PROCEDURE UPDWIN;
- BEGIN
- MOVEVSCREENTOWINDOW(SC[WN],WP[WN].Y,WP[WN].X);
- HIDDENCURSOR;
- END; { UPDWIN }
-
-
- PROCEDURE DUMP;
- VAR W : WORD;
- CH1,CH2 : CHAR;
- DW : WINDOWPTR;
- S1,S2 : STRING;
- WNM : BYTE;
- BEGIN { DUMP }
- DUMPADDR := '';
- IF NOT MAKEWINDOW(DW,1,15,80,25,TRUE,TRUE,FALSE,$1E,$70,$70,' DUMP <Esc> = Ende ')
- THEN ALERT('FEHLER MAKEWINDOW');
- IF NOT ACTIVATEWINDOW(DW) THEN ALERT('FEHLER ACTIVATEWINDOW');
-
- WNM := WN;
- WN := 99;
- REPEAT
- HIDDENCURSOR;
- IF NOT KEYPRESSED THEN DUMPBLOCK;
- MOUSEORKEY;
- CH1 := UPCASE(READKEY); IF CH1 = #0 THEN CH2 := READKEY ELSE CH2 := #0;
-
- CASE CH1 OF
- ^M : BEGIN
- MSN := MS;
- MON := MO;
- W := POS(':',DUMPADDR);
- IF W > 0 THEN BEGIN
- S1 := '$' + COPY(DUMPADDR,1,PRED(W));
- S2 := '$' + COPY(DUMPADDR,SUCC(W),LENGTH(DUMPADDR)-W+1);
- IF STR2WORD(S1,W) THEN MS := W ELSE MS := 0;
- END ELSE BEGIN
- S2 := '$' + DUMPADDR;
- END;
- IF STR2WORD(S2,W) THEN MO := W ELSE MO := 0;
- GOTOXY(1,1); CLREOL;
- DUMPADDR := '';
- MSM := MS;
- MOM := MO;
- END;
- ^H : BEGIN
- IF LENGTH(DUMPADDR) > 0 THEN DELETE(DUMPADDR,LENGTH(DUMPADDR),1);
- END;
- ':' : BEGIN
- IF POS(':',DUMPADDR) = 0 THEN DUMPADDR := DUMPADDR + ':';
- END;
- '0'..'9',
- 'A'..'F' : BEGIN
- DUMPADDR := DUMPADDR + CH1;
- END;
- END; {CASE CH1 }
-
- CASE CH2 OF
- #0 : BEGIN END;
- #1 : BEGIN
- CH1 := ^[;
- CH2 := #0;
- STUFFKEY($100);
- END;
- {RI} #77 : BEGIN
- INC(MO,16);
- END;
- {LE} #75 : BEGIN
- DEC(MO,16);
- END;
- {UP} #72 : BEGIN
- DEC(MO,128);
- END;
- {DN} #80 : BEGIN
- INC(MO,128);
- END;
- {PU} #73 : BEGIN
- DEC(MS);
- END;
- {PD} #81 : BEGIN
- INC(MS);
- END;
- {HO} #71 : BEGIN
- MS := MSM;
- MO := MOM;
- END;
- {EN} #79 : BEGIN
- W := MS;
- MS := MSN;
- MSN := W;
- W := MO;
- MO := MON;
- MON := W;
- END;
-
- {CRI}#116 : BEGIN
- IF MOVEWINDOW(1,0) THEN HIDDENCURSOR;
- END;
- {CLE}#115 : BEGIN
- IF MOVEWINDOW(-1,0) THEN HIDDENCURSOR;
- END;
- {CUP}#141 : BEGIN
- IF MOVEWINDOW(0,-1) THEN HIDDENCURSOR;
- END;
- {CDN}#145 : BEGIN
- IF MOVEWINDOW(0,1) THEN HIDDENCURSOR;
- END;
- ELSE { CASE CH2 }
- {
- DIE FUNKTIONSTASTEN WERDEN AN DAS ÜBERGEORDNETE PROGRAMM
- IM TASTATURBUFFER ÜBERGEBEN, DUMP WIRD BEENDET
- }
- STUFFKEY(BYTE(CH2) SHL 8);
- CH1 := ^[;
- END; { CASE CH2 }
- UNTIL CH1 = ^[;
- DW := ERASETOPWINDOW;
- DISPOSEWINDOW(DW);
- WN := WNM;
- END; { DUMP }
-
-
- PROCEDURE MAUSINFO;
- VAR R : REGISTERS;
- I : WORD;
- P : ^CHARRAY;
- Q : POINTER;
- BEGIN
- VWRITELN;
- GETINTVEC($33,Q);
- IF (Q = NIL) OR (MEM[SOF(Q).S:SOF(Q).O] = $CF) THEN BEGIN
- VWRITELNS(' Es ist kein Maustreiber installiert');
- EXIT;
- END;
-
- IF MAUSAKT THEN BEGIN
- DISABLEEVENTHANDLING;
- RESTOREMOUSESTATE(MSP,FALSE);
- END;
-
- WITH R DO BEGIN
- { GET VERSION }
- AX := 36;
- BX := $FFFF;
- INTR($33,R);
- IF BX = $FFFF THEN BEGIN
- VWRITELNS(' Maustreiber ist installiert');
- VWRITELNS(' Funktion 36 (GET VERSION) ist nicht verfügbar');
- END ELSE BEGIN
- WRITE(TPSTR,' Maustreiber Version ',BH,'.',HEXB(BL));
- VWRITELN;
- WRITE(TPSTR,' IRQ = ',CL,' ');
- CASE CH OF
- 1 : WRITE(TPSTR,'BUS- Maus');
- 2 : WRITE(TPSTR,'serielle Maus');
- 3 : WRITE(TPSTR,'InPort- Maus');
- 4 : WRITE(TPSTR,'PS/2- Maus');
- 5 : WRITE(TPSTR,'Hewlett-Packard- Maus');
- ELSE
- WRITE(TPSTR,'unbekannter Maustyp ',CH);
- END; { CASE CH }
- VWRITELN;
- END;
- { SWAP INTERRUPT ROUTINES }
- AX := 20;
- CX := 0;
- DX := $FFFF;
- ES := $FFFF;
- INTR($33,R);
- IF (ES = $FFFF) AND (DX = $FFFF) THEN BEGIN
- VWRITELNS(' Funktion 20 (SWAP INTERRUPT SUBROUTINES) ist nicht verfügbar');
- END ELSE BEGIN
- AX := 20;
- WRITE(TPSTR,' Mausevent auf Adresse ',HEXW(ES),':',HEXW(DX),' Maske = ',HEXW(CX));
- VWRITELN;
- INTR($33,R); { DIE ALTEN WERTE WIEDERHERSTELLEN }
- END;
- { GET DRIVER STATE STORAGE REQUIREMENT }
- AX := 21;
- BX := $FFFF;
- INTR($33,R);
- IF BX = $FFFF THEN BEGIN
- VWRITELNS(' Funktion 22 (SAVE MOUSEDRIVER STATUS) ist nicht verfügbar');
- END ELSE BEGIN
- WRITE(TPSTR,' Größe des Mausstatus- Buffers = ',BX);
- VWRITELN;
- END;
- { GET MOUSE SENSITIVITY }
- AX := 27;
- BX := $FFFF;
- INTR($33,R);
- IF BX = $FFFF THEN BEGIN
- VWRITELNS(' Funktion 27 (GET MOUSE SENSITIVITY) ist nicht verfügbar');
- END ELSE BEGIN
- WRITE(TPSTR,' Empfindlichkeit hor. = ',BX);
- WRITE(TPSTR,', vert. = ',CX);
- WRITE(TPSTR,', Schwellwert = ',DX);
- VWRITELN;
- END;
- { GET CRT PAGE }
- AX := 30;
- BX := $FFFF;
- INTR($33,R);
- IF BX = $FFFF THEN BEGIN
- VWRITELNS(' Funktion 30 (GET CRT PAGE) ist nicht verfügbar');
- END ELSE BEGIN
- WRITE(TPSTR,' Maus- CRT- Page = ',BX);
- VWRITELN;
- END;
- { 'GEHEIM'- FUNKTION 'M' }
- AX := $4D;
- DI := 0;
- ES := 0;
- INTR($33,R);
- IF PTR(ES,DI) = NIL THEN BEGIN
- END ELSE BEGIN
- VWRITELNS(' ''GEHEIMFUNKTION'' 4DH IST INSTALLIERT ');
- P := PTR(ES,DI);
- WRITE(TPSTR,' ',HEXPTR(P),'->');
- I := 1;
- WHILE P^[I] IN [' '..#$A7] DO BEGIN
- WRITE(TPSTR,P^[I]);
- INC(I);
- END;
- VWRITELN;
- END;
- { 'GEHEIM'- FUNKTION 'm' }
- AX := $6D;
- DI := 0;
- ES := 0;
- INTR($33,R);
- IF PTR(ES,DI) = NIL THEN BEGIN
- END ELSE BEGIN
- VWRITELNS(' ''GEHEIMFUNKTION'' 6DH IST INSTALLIERT ');
- END;
- END; { WITH R }
- INIMAUS;
- END; { MAUSINFO }
-
-
- FUNCTION HIMEMINST:BOOLEAN;
- VAR I2FPTR : POINTER ABSOLUTE $0:$BC;
- R : REGISTERS;
- BEGIN
- HIMEMINST := FALSE;
- IF I2FPTR = NIL THEN EXIT;
- R.AX := $4300;
- INTR($2F,R);
- IF R.AL <> $80 THEN EXIT;
-
- R.AX := $4310;
- INTR($2F,R);
- SOF(XMSENTRY).S := R.ES;
- SOF(XMSENTRY).O := R.BX;
-
- HIMEMINST := TRUE;
- END; { HIMEMINST }
-
-
- PROCEDURE XMS; EXTERNAL;
- {$L XMS}
- {$F+}
- FUNCTION CPU_TYPE:INTEGER; EXTERNAL;
- {$L GETCPU}
- FUNCTION VIDADAP:INTEGER; EXTERNAL;
- {$L VIDEOID}
- {$F-}
-
-
- PROCEDURE VADAPTERTEXT(I:BYTE);
- BEGIN
- CASE I OF
- 0 : WRITE(TPSTR,'nicht vorhanden');
- 1 : WRITE(TPSTR,'MDA Monochrom Display Adapter');
- 2 : WRITE(TPSTR,'CGA Color Graphics Adapter');
- 3,9 : WRITE(TPSTR,'reservierter DCC');
- 4 : WRITE(TPSTR,'EGA Enhanced Graphics Adapter Color Mode');
- 5 : WRITE(TPSTR,'EGA Enhanced Graphics Adapter Monochrom Mode');
- 6 : WRITE(TPSTR,'PGA Professional Graphics Controller');
- 7 : WRITE(TPSTR,'VGA Video Graphics Array mit Monochrom Display');
- 8 : WRITE(TPSTR,'VGA Video Graphics Array mit Color Display');
- 10 : WRITE(TPSTR,'MCGA mit digitalem Color Display');
- 11 : WRITE(TPSTR,'MCGA mit analogem Monochrom Diaplay');
- 12 : WRITE(TPSTR,'MCGA mit analogem Color Display');
- 64 : WRITE(TPSTR,'HGC Hercules Graphics Card');
- ELSE
- WRITE(TPSTR,'nicht erkannt');
- END; { CASE I }
- END; { VADAPTERTEXT }
-
-
- PROCEDURE SHADOWDISP(PFBA:WORD);
- VAR I,J : WORD;
-
- PROCEDURE RAMTEST(SEGM:WORD);
- VAR B1,B2 : BYTE;
- TA : BYTE;
- BEGIN
- NMI(OFF);
- B1 := MEM[SEGM:0];
- MEM[SEGM:0] := B1 XOR $FF;
- B2 := MEM[SEGM:0];
- MEM[SEGM:0] := B1;
- TA := TEXTATTR;
-
- WRITE(TPSTR,HEXW(SEGM),': ');
- IF (B1 <> (B2 XOR $FF)) AND (B1 <> B2) THEN BEGIN
- WRITE(TPSTR,'undefin.');
- END ELSE BEGIN
- IF (MEMW[SEGM:0] = $55AA) OR (MEMW[SEGM:0] = $AA55) THEN BEGIN
- WRITE(TPSTR,'BIOS ');
- END ELSE BEGIN
- IF (SEGM >= PFBA) AND (SEGM < (PFBA+$1000)) THEN BEGIN
- WRITE(TPSTR,' EMS ');
- END ELSE BEGIN
- WRITE(TPSTR,'.... ');
- END;
- END;
- VWRITE;
- IF B1 <> (B2 XOR $FF) THEN WRITE(TPSTR,'...')
- ELSE BEGIN
- TEXTATTR := TAMRAM;
- TEXTCOLOR(15);
- WRITE(TPSTR,'RAM');
- VWRITE;
- TEXTATTR := TA;
- END;
- END;
- WRITE(TPSTR,' ');
- VWRITE;
- NMI(ON);
- END; { RAMTEST }
-
- BEGIN { SHADOWDISP }
- FOR I := $0A TO $0F DO BEGIN
- WRITE(TPSTR,' ');
- FOR J := 0 TO 3 DO RAMTEST((I SHL 12) + (J SHL 10));
- VWRITELN;
- END; { NEXT I }
- END; { SHADOWDISP }
-
-
- PROCEDURE MEMINFO;
- VAR VERS : BYTE;
- PFBP : POINTER;
- SRAM,BRAM,
- XRAM,XRG,XRA,EMG,
- PFBA,TPAG,PGAV : WORD;
- AT : BOOLEAN;
- BEGIN
- IF SETWINDOW(5,$1B,50,80,TRUE) THEN EXIT;
-
- IF ABS(CPU_TYPE) >= 286 THEN AT := ISAT ELSE AT := FALSE;
- VWRITELN;
- { --- SYSTEM- RAM }
- BRAM := MEMW[$40:$13];
- IF AT THEN BEGIN
- SRAM := GETPORT(RTC,$15) + (GETPORT(RTC,$16) SHL 8);
- WRITE(TPSTR,' System RAM (SETUP) = ',SRAM:4,'k ');
- WRITE(TPSTR,' (BIOS) = ',BRAM:4,'k');
- END ELSE BEGIN
- WRITE(TPSTR,' System RAM = ',BRAM:4,'k');
- END;
- VWRITELN;
- VWRITELN;
-
- { --- HIMEM- TREIBER }
- IF HIMEMINST THEN BEGIN
- { XMS VERSION ABFRAGEN }
- RAX := 0;
- XMS;
- WRITE(TPSTR,' HIMEM- Treiber Version ');
- WRITE(TPSTR,HEXB(HI(RAX)),'.',HEXB(LO(RAX)));
- WRITE(TPSTR,' (',HEXB(HI(RBX)),'.',HEXB(LO(RBX)),'),');
- WRITE(TPSTR,' HIMEM ist ');
- IF RDX <> 1 THEN WRITE(TPSTR,'nicht ');
- WRITE(TPSTR,'vorhanden');
- VWRITELN;
- IF RDX = 1 THEN BEGIN
- { HMA ANFORDERN - GRÖßE SOVIEL WIE MÖGLICH }
- RAX := $0100;
- RDX := $FFFF;
- XMS;
- CASE LO(RBX) OF
- $00 : BEGIN
- WRITE(TPSTR,' HMA verfügbar = ',RDX,' Bytes');
- RAX := $0200; { RELEASE HMA }
- XMS;
- END;
- $81 : WRITE(TPSTR,' HMA ist nicht verfügbar, weil VDISK installiert ist');
- $91 : WRITE(TPSTR,' HMA ist von einem anderen Programm belegt');
- ELSE WRITE(TPSTR,' Request HMA Error ',HEXB(LO(RBX)));
- END; { CASE LO(RBX) }
- VWRITELN;
- { XMA ABFRAGEN }
- RAX := $0800;
- XMS;
- WRITE(TPSTR,' XMA verfügbar = ',RDX,'k Bytes');
- IF RDX <> RAX THEN WRITE(TPSTR,', größter Block = ',RAX,'k Bytes');
- VWRITELN;
- { UMA ANFORDERN }
- RAX := $1000;
- RDX := $FFFF;
- XMS;
- IF LO(RBX) <> $80 THEN BEGIN
- CASE LO(RBX) OF
- $00 : BEGIN
- WRITE(TPSTR,' UMA verfügbar = ',RDX,' Bytes');
- WRITE(TPSTR,' UMA Segment = ',HEXW(RBX));
- END;
- $B0 : WRITE(TPSTR,' UMA ist zu klein');
- $B1 : WRITE(TPSTR,' UMA ist nicht verfügbar');
- ELSE WRITE(TPSTR,' Request HMA Error ',HEXB(LO(RBX)));
- END; { CASE LO(RBX) }
- VWRITELN;
- END; { IF LO(RBX) <> $80 }
- END; { IF RAX = 1 }
- END ELSE BEGIN
- WRITE(TPSTR,' Es ist kein HIMEM- Treiber installiert');
- VWRITELN;
- END; { IF HIMEMINST }
- VWRITELN;
-
- { --- EMS MEMORY }
- EMG := 0;
- PFBA := 0;
- IF EMSINSTALLED THEN BEGIN { EMM installiert? }
- VERS := EMSVERSION;
- PFBP := EMSPAGEFRAMEPTR;
- PFBA := SOF(PFBP).S;
- TPAG := EMSTOTALPAGES;
- EMG := TPAG * 16;
- PGAV := EMSPAGESAVAIL;
- WRITE(TPSTR,' EMM- Version : ',VERS SHR 4,'.',VERS AND $0F,' ');
- WRITE(TPSTR,'Page Frame = ',HEXW(PFBA),'H');
- VWRITELN;
- WRITE(TPSTR,' EMS- Seiten gesamt = ',TPAG:3,' (',EMG,'k) ');
- WRITE(TPSTR,' verfügbar = ',PGAV:3,' (',PGAV*16,'k)');
- VWRITELN;
- END ELSE BEGIN
- VWRITELNS(' Es ist kein EMS- Treiber installiert');
- END;
- VWRITELN;
-
- { --- EXTENDED MEMORY OHNE XMM }
- IF AT THEN BEGIN
- XRG := EXTMEMTOTAL SHR 10;
- XRA := EXTMEMAVAIL;
- WRITE(TPSTR,' Extended RAM total = ',XRG:4,'k ');
- WRITE(TPSTR,' verfügbar = ',XRA:4,'k');
- VWRITELN;
- XRAM := GETPORT(RTC,$30) + (GETPORT(RTC,$31) SHL 8);
- WRITE(TPSTR,' Extended RAM (SETUP) = ',XRAM:4,'k ');
- IF (EMG > 0) AND (XRG > 0) THEN WRITE(TPSTR,' EMS + Extended = ',EMG+XRG:4,'k');
- VWRITELN;
- END;
-
- { --- DOS VERSION, HANDLES }
- VWRITELN;
- WRITE(TPSTR,' Prozessor = 80',ABS(CPU_TYPE));
- VWRITELN;
- I := VIDADAP;
- WRITE(TPSTR,' Video Adapter 1 = ');
- VADAPTERTEXT(HI(I));
- VWRITELN;
- WRITE(TPSTR,' Video Adapter 2 = ');
- VADAPTERTEXT(LO(I));
- VWRITELN;
- IF DRDOS THEN WRITE(TPSTR,' DRDOS') ELSE WRITE(TPSTR,' DOS');
- WRITE(TPSTR,' Version ',HI(DOSVERSION),'.',LO(DOSVERSION));
- WRITE(TPSTR,' ');
- WRITE(TPSTR,FILEHANDLESLEFT+FILEHANDLESOPEN(TRUE),' File- Handles sind verfügbar');
- VWRITELN;
-
- { --- SPEICHERBELEGUNG AB 0A000:0 }
- VWRITELN;
- VWRITELNS(' Speicherbelegung A000:0000..F000:FFFF :');
- VWRITELN;
- SHADOWDISP(PFBA);
-
- { --- EIGENEN FREIEN HEAP ANZEIGEN }
- VWRITELN;
- WRITE(TPSTR,' MEMAVAIL = ',MEMAVAIL:8,' MAXAVAIL = ',MAXAVAIL:8);
- VWRITELN;
- WRITE(TPSTR,' MCBLIST wurde aufgerufen von ',QUELLDIR);
- VWRITELN;
- WRITE(TPSTR,' MCBLIST befindet sich auf ',ZIELDIR);
- VWRITELN;
- { ALS SCHMANKERL NOCH DEN MUTTERPROZESS ANZEIGEN }
- WRITE(TPSTR,' Der Mutterprozess von MCBLIST ist ');
- IF PSPPTR(PTR(CHEF,0))^.CMDSEG = CHEF THEN BEGIN
- WRITE(TPSTR,GETENV('COMSPEC'));
- END ELSE BEGIN
- WRITE(TPSTR,HOLENAME(PTR(PSPPTR(PTR(CHEF,0))^.ENVSEG,0)));
- END;
- VWRITELN;
- WRITE(TPSTR,' mit PSP auf Adresse ',HEXW(CHEF),':0000, Environment ');
- WRITE(TPSTR,HEXW(PSPPTR(PTR(CHEF,0))^.ENVSEG),':0000');
- VWRITELN;
- { MAUSTREIBER- INFO HOLEN }
- MAUSINFO;
-
- CLOSEVSCREEN(5);
- END; { MEMINFO }
-
-
- PROCEDURE PSPINHALT(PP:PSPPTR);
- VAR MP : ^BYTEARR;
- BEGIN
- IF PP^.INTR20 <> $20CD THEN EXIT;
- WRITE(TPSTR,'End of allocation block = ',HEXW(PP^.ENDBL));
- VWRITELN;
- WRITE(TPSTR,' INT 22H- Pointer = ',HEXPTR(PP^.I22PTR));
- VWRITELN;
- WRITE(TPSTR,' INT 23H- Pointer = ',HEXPTR(PP^.I23PTR));
- VWRITELN;
- WRITE(TPSTR,' INT 24H- Pointer = ',HEXPTR(PP^.I24PTR));
- VWRITELN;
- WRITE(TPSTR,' Mutterprozess- Segment = ',HEXW(PP^.CMDSEG));
- VWRITELN;
- WRITE(TPSTR,' Environment- Segment = ',HEXW(PP^.ENVSEG));
- VWRITELN;
- WRITE(TPSTR,'Comandline = ≥',PP^.CMDLIN,'≤');
- VWRITELN;
- WRITE(TPSTR,'Handle- Tabelle : ',HEXPTR(PP^.HNDPTR));
- WRITE(TPSTR,' Anzahl Handles = ',PP^.HNDMAX);
- VWRITELN;
- MP := PP^.HNDPTR;
- FOR I := 1 TO PP^.HNDMAX DO BEGIN
- IF MP^[I] <> $FF THEN BEGIN
- IF I > 1 THEN WRITE(TPSTR,',');
- WRITE(TPSTR,MP^[I]);
- END;
- END;
- VWRITELN;
- END; { PSPINHALT }
-
-
- PROCEDURE MEHRINFO;
- VAR MP : ^CHARRAY;
- PP : PSPPTR;
- I,J,K : INTEGER;
- TA : BYTE;
- R : REGISTERS;
- S : STRING;
- BEGIN
- IF MCBAP < 1 THEN EXIT;
- IF MCBDP < 1 THEN MCBDP := 1;
- IF SETWINDOW(7,$07,60,60,TRUE) THEN CLRVSCREEN(7,$07);
-
- TA := TEXTATTR;
- TEXTATTR := $5B;
- VWRITELNS(' ''+'',''-'' = MCB- Nummer ändern ');
- TEXTATTR := TA;
- WRITE(TPSTR,' MCB ',MCBDP,': ');
- WRITE(TPSTR,' ',HEXW(MCBA[MCBDP].ADDR),':0000 ');
- CASE MCBA[MCBDP].ATTR OF
- 1 : WRITE(TPSTR,'Environment');
- 2 : WRITE(TPSTR,'PSP');
- 3 : WRITE(TPSTR,'Batch');
- 4 : WRITE(TPSTR,'Ur- Environment');
- 5 : WRITE(TPSTR,'Video- RAM und EPROM');
- 6 : WRITE(TPSTR,'CONFIG.SYS');
- 7 : WRITE(TPSTR,'freier Speicher');
- ELSE
- WRITE(TPSTR,'nicht identifiziert');
- VWRITELN;
- WRITE(TPSTR,' wahrscheinlich ein Treiber');
- END; { CASE }
- IF MCBA[MCBDP].MCBR.PSP = 0 THEN WRITE(TPSTR,' -frei-');
- VWRITELN;
- IF MCBA[MCBDP].MCBR.ID = 'Z' THEN VWRITELNS(' letzter MCB');
- CASE MCBA[MCBDP].ATTR OF
- 1,4 : BEGIN
- MP := PTR(SUCC(MCBA[MCBDP].ADDR),0);
- I := 1; J := 0; K := 0;
- REPEAT
- IF MP^[I] = #0 THEN BEGIN
- INC(J);
- K := 0;
- IF J = 1 THEN VWRITELN;
- END ELSE BEGIN
- WRITE(TPSTR,MP^[I]);
- INC(K);
- IF K > 58 THEN BEGIN
- VWRITELN;
- K := 0;
- END;
- J := 0;
- END;
- INC(I);
- UNTIL J = 2;
- IF MP^[I] = #1 THEN BEGIN
- VWRITELNS(' Programmname :');
- INC(I,2);
- WHILE MP^[I] <> #0 DO BEGIN
- WRITE(TPSTR,MP^[I]);
- INC(I);
- END;
- VWRITELN;
- END;
- END;
- 2 : BEGIN
- PP := PTR(MCBA[MCBDP].MCBR.PSP,0);
- PSPINHALT(PP);
- END;
- 3 : BEGIN
- IF BATDISP(SUCC(MCBA[MCBDP].ADDR),FALSE) THEN VWRITELN;
- END;
- 5 : BEGIN
- FOR I := 1 TO 25 DO BEGIN
- DEACTIVATEVSCREEN;
- FASTREAD(60,I,1,S);
- ACTIVATEVSCREEN(SC[7]);
- VWRITELNS(S);
- END;
- END;
- 6 : BEGIN
- R.AH := $52;
- MSDOS(R);
- WRITE(TPSTR,' MSDOS(52) ES:BX (',HEXPTR(PTR(R.ES,R.BX)),')');
- VWRITELN;
- FOR I := -3 TO 10 DO DISPPTR(R.ES,R.BX,I*4);
- END;
- 7 : BEGIN
- PP := PTR(SUCC(MCBA[MCBDP].ADDR),0);
- PSPINHALT(PP);
- END;
- END; { CASE }
-
- CLOSEVSCREEN(7);
- END; { MEHRINFO }
-
-
-
- BEGIN { MAIN }
- CHECKBREAK := FALSE;
- CHECKSNOW := FALSE;
-
- QUIET := TRUE;
- WNM := 0;
- SIZMOD := 1;
- MS := 0;
- MSM := 0;
- MSN := 0;
- MO := 0;
- MOM := 0;
- MON := 0;
- KT1 := '';
- MCBAP := 0;
- MCBDP := 1;
- HATPAR := FALSE;
- FILERR := TRUE;
-
- CX := WHEREX;
- CY := WHEREY;
- MSX := 1;
- MSY := 1;
- BUT := NOBUTTON;
- MAUSAKT := FALSE;
-
- TEXTATTR := TANORM;
- TA := TEXTATTR;
- IF NOT ENTFERNE(MEMW[PREFIXSEG:$2C]) THEN {};
- IF NOT ENTFERNE(PREFIXSEG) THEN {};
- CHEF := PSPPTR(PTR(PREFIXSEG,0))^.CMDSEG;
-
- EXPLODE := TRUE;
- SOUNDFLAGW := FALSE;
- EXPLODEDELAY := 3;
- DOS4 := (HI(DOSVERSION) >= 4);
- DRDOS := GETENV('OS') = 'DRDOS';
- IF DRDOS THEN DOS4 := FALSE;
-
- { VIDEOATTRIBUTE FÜR LCD- DIPLAY }
- LCD := FALSE;
- IF (STUPCASE(GETENV('CRT'))='LCD') THEN BEGIN
- TAKOPF := $62;
- TAFREI := $30;
- TAFRAM := $37;
- TAVALT := $02;
- TAVNEU := $4F; { TEXTATTRIBUT NEUER VEKTOR }
- TAINAKT := $04;
- LCD := TRUE;
- END;
- { VIDEO- ATTRIBUTE FÜR MONOCHROM- DIAPLAY }
- IF (LO(LASTMODE) = 7) THEN BEGIN
- TAFREI := $01;
- TAVALT := $01;
- TAMROM := $10;
- TAMRAM := $10;
- TAINAKT := $02;
- END;
-
- IF NOT MAKEWINDOW(BWIN,10,12,70,16,TRUE,TRUE,FALSE,$1F,$2B,$AE,' Taste drücken ')
- THEN ALERT('FEHLER MAKEWINDOW');
- IF NOT MAKEWINDOW(WI[1],1,3,80,25,TRUE,TRUE,TRUE,$07,$5F,$5E,' Memory Control Blocks ')
- THEN ALERT('FEHLER MAKEWINDOW');
- IF NOT MAKEWINDOW(WI[2],2,8,79,24,TRUE,TRUE,TRUE,$70,$1C,$1E,' was das Alles bedeutet ')
- THEN ALERT('FEHLER MAKEWINDOW');
- IF NOT MAKEWINDOW(WI[3],4,16,77,25,TRUE,TRUE,TRUE,$07,$49,$4B,' Interrupt- Vektoren ')
- THEN ALERT('FEHLER MAKEWINDOW');
- IF NOT MAKEWINDOW(WI[4],22,6,79,22,TRUE,TRUE,TRUE,$07,$31,$31,' Device Treiber ')
- THEN ALERT('FEHLER MAKEWINDOW');
- IF NOT MAKEWINDOW(WI[5],4,3,76,15,TRUE,TRUE,TRUE,$1B,$2B,$2F,' Speicherkonfiguration ')
- THEN ALERT('FEHLER MAKEWINDOW');
- IF NOT MAKEWINDOW(WI[6],2,3,50,18,TRUE,TRUE,TRUE,$07,$60,$6E,' C:\CONFIG.SYS ')
- THEN ALERT('FEHLER MAKEWINDOW');
- IF NOT MAKEWINDOW(WI[7],30,12,80,25,TRUE,TRUE,TRUE,$07,$51,$5B,' MCB - INFO ')
- THEN ALERT('FEHLER MAKEWINDOW');
-
- { WINDOW- PARAMETER INITIALISIEREN }
- FOR I := 1 TO MAXWIND DO BEGIN
- SETINACTIVEFRAME(WI[I],'┌└┐┘─│',TAINAKT,TAINAKT);
- RESETWINPAR(I);
- END;
- WN := 1;
- WS := '';
-
- IF PARAMCOUNT > 0 THEN BEGIN
- P1 := STUPCASE(PARAMSTR(1));
- IF (LENGTH(P1) > 0) AND (P1[1] = '/') THEN DELETE(P1,1,1);
- IF (LENGTH(P1) > 0) AND (P1[1] = '-') THEN DELETE(P1,1,1);
- IF P1 = '?' THEN BEGIN
- KOPFZEILE;
- HATPAR := TRUE;
- HELP;
- END;
- IF P1 = 'R' THEN BEGIN
- RESTOREINTS(FALSE,FALSE);
- HALT;
- END;
- IF P1 = 'RM' THEN BEGIN
- RESTOREINTS(TRUE,FALSE);
- HALT;
- END;
- IF P1 = 'S' THEN BEGIN
- MCBLISTE;
- SAVEINTS;
- HALT;
- END;
- IF P1 = 'M' THEN BEGIN
- KOPFZEILE;
- HATPAR := TRUE;
- INTMAP;
- END;
- IF P1 = 'X' THEN BEGIN
- KOPFZEILE;
- HATPAR := TRUE;
- DRIVERDIS;
- END;
- END;
- IF NOT HATPAR THEN BEGIN
- KOPFZEILE;
- MCBLISTE;
- END;
-
-
- REPEAT;
- MOUSEORKEY;
- CH1 := READKEY;
- IF CH1 = #0 THEN CH2 := READKEY ELSE CH2 := #0;
-
- CASE CH1 OF
- {TAB} #9 : BEGIN
- INC(WP[WN].X,10);
- IF WP[WN].X > (WP[WN].W - (LO(WINDMAX) - LO(WINDMIN)))
- THEN WP[WN].X := WP[WN].W - (LO(WINDMAX) - LO(WINDMIN)) -1;
- UPDWIN;
- END;
- {ESC} ^[ : IF LENGTH(WS) > 0 THEN BEGIN
- CLOSEWINDOW(WN);
- END ELSE BEGIN
- CH1 := #0;
- CH2 := #1;
- END;
- '+' : IF WN = 7 THEN BEGIN
- INC(MCBDP);
- IF MCBDP > MCBAP THEN MCBDP := 1;
- MEHRINFO;
- END;
- '-' : IF WN = 7 THEN BEGIN
- DEC(MCBDP);
- IF MCBDP < 1 THEN MCBDP := MCBAP;
- MEHRINFO;
- END;
- END; { CASE CH1 }
- CASE CH2 OF
- {F1} #59 : HELP;
- {F2} #60 : MCBLISTE;
- {F3} #61 : INTMAP;
- {F4} #62 : MEMINFO;
- {F5} #63 : DRIVERDIS;
- {F6} #64 : CONFIGDIS;
- {F7} #65 : CLOSEWINDOWS;
- {F8} #66 : MEHRINFO;
- {F9} #67 : DUMP;
- {F10} #68 : IF WN = 1 THEN BEGIN
- CLOSEWINDOW(1);
- INC(SIZMOD);
- IF SIZMOD > 4 THEN SIZMOD := 1;
- MCBLISTE;
- END;
-
- {S1} #84 : IF LENGTH(WS) > 0 THEN CLOSEWINDOW(WN);
- {S2} #85 : BEGIN END;
- {S3} #86 : BEGIN END;
- {S4} #87 : BEGIN END;
- {S5} #88 : BEGIN
- RESTOREINTS(FALSE,FALSE);
- MCBLISTENEU;
- END;
- {S6} #89 : BEGIN
- RESTOREINTS(TRUE,FALSE);
- MCBLISTENEU;
- END;
- {S9} #92 : BEGIN
- SAVEINTS;
- MCBLISTENEU;
- END;
-
- {A5} #108 : BEGIN
- RESTOREINTS(FALSE,TRUE);
- MCBLISTENEU;
- END;
- {A6} #109 : BEGIN
- RESTOREINTS(TRUE,TRUE);
- MCBLISTENEU;
- END;
-
- {HO} #71 : BEGIN
- IF WP[WN].X = 1 THEN WP[WN].Y := 1 ELSE WP[WN].X := 1;
- UPDWIN;
- END;
- {EN} #79 : BEGIN
- WP[WN].Y := WP[WN].L - (HI(WINDMAX) - HI(WINDMIN));
- UPDWIN;
- END;
- {PU} #73 : BEGIN
- DEC(WP[WN].Y,HI(WINDMAX)-HI(WINDMIN)-1);
- IF WP[WN].Y < 1 THEN WP[WN].Y := 1;
- UPDWIN;
- END;
- {PD} #81 : IF WP[WN].Y < (WP[WN].L - (HI(WINDMAX) - HI(WINDMIN))) THEN BEGIN
- INC(WP[WN].Y,HI(WINDMAX)-HI(WINDMIN)-1);
- UPDWIN;
- END;
- {RI} #77 : BEGIN
- DEC(WP[WN].X,2);
- IF WP[WN].X < 1 THEN WP[WN].X := 1;
- UPDWIN;
- END;
- {LE} #75 : IF WP[WN].X < (WP[WN].W - (LO(WINDMAX) - LO(WINDMIN)) - 1) THEN BEGIN
- INC(WP[WN].X,2);
- UPDWIN;
- END;
- {UP} #72 : IF WP[WN].Y > 1 THEN BEGIN
- DEC(WP[WN].Y);
- UPDWIN;
- END;
- {DN} #80 : IF WP[WN].Y < (WP[WN].L - (HI(WINDMAX) - HI(WINDMIN))) THEN BEGIN
- INC(WP[WN].Y);
- UPDWIN;
- END;
-
- {CRI}#116 : BEGIN
- IF MOVEWINDOW(1,0) THEN HIDDENCURSOR;
- END;
- {CLE}#115 : BEGIN
- IF MOVEWINDOW(-1,0) THEN HIDDENCURSOR;
- END;
- {CUP}#141 : BEGIN
- IF MOVEWINDOW(0,-1) THEN HIDDENCURSOR;
- END;
- {CDN}#145 : BEGIN
- IF MOVEWINDOW(0,1) THEN HIDDENCURSOR;
- END;
-
- {ARI}#157 : BEGIN
- IF RESIZEWINDOW(1,0,' ')
- THEN UPDWIN
- ELSE IF MOVEWINDOW(-1,0) THEN
- IF RESIZEWINDOW(1,0,' ') THEN UPDWIN;
- END;
- {ALE}#155 : BEGIN
- IF RESIZEWINDOW(-1,0,' ') THEN HIDDENCURSOR;
- END;
- {AUP}#152 : BEGIN
- IF RESIZEWINDOW(0,-1,' ') THEN HIDDENCURSOR;
- END;
- {ADN}#160 : BEGIN
- IF RESIZEWINDOW(0,1,' ')
- THEN UPDWIN
- ELSE IF MOVEWINDOW(0,-1) THEN
- IF RESIZEWINDOW(0,1,' ') THEN UPDWIN;
- END;
- END; { CASE CH2 }
- UNTIL CH2 = #1;
-
- AUSDIEMAUS;
- END.
-
-