home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / library / dos / grafik / utility / mcblist1.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1990-06-08  |  16.6 KB  |  720 lines

  1.  
  2. PROCEDURE RESETWINPAR(NR:BYTE);
  3. BEGIN
  4.   WP[NR].X := 1;
  5.   WP[NR].Y := 1;
  6.   WP[NR].L := 0;
  7.   WP[NR].W := 0;
  8.   WP[NR].F := FALSE;
  9. END;
  10.  
  11.  
  12. PROCEDURE REMOVEWINDOW(NR:BYTE);
  13. VAR   I  : BYTE;
  14. BEGIN
  15.   FOR I := LENGTH(WS) DOWNTO 1 DO IF ORD(WS[I]) = NR THEN DELETE(WS,I,1);
  16. END;
  17.  
  18.  
  19. PROCEDURE CLOSEWINDOW(NR:BYTE);
  20. VAR   WDP  : WINDOWPTR;
  21. BEGIN
  22.   REMOVEWINDOW(NR);
  23.   IF LENGTH(WS) > 0 THEN WN := ORD(WS[LENGTH(WS)]);
  24.   IF (NR = 2) OR (NR = WNM) THEN WNM := 0;
  25.   IF WP[NR].F THEN BEGIN { NUR FÜR AKTIVIERTE WINDOWS AUSFÜHREN ! }
  26.     DISPOSEVSCREEN(SC[NR]);
  27.     IF ACTIVATEWINDOW(WI[NR]) THEN WDP := ERASETOPWINDOW;
  28.     RESETWINPAR(NR);
  29.   END;
  30. END;
  31.  
  32.  
  33. PROCEDURE CLOSEWINDOWS;
  34. VAR   I    : BYTE;
  35. BEGIN
  36.   FOR I := 1 TO MAXWIND DO CLOSEWINDOW(I);
  37. END;
  38.  
  39.  
  40. PROCEDURE AUSDIEMAUS;
  41. BEGIN
  42.   CLOSEWINDOWS;
  43.   IF KT1 <> '' THEN BEGIN
  44.     FASTTEXT(KT1,1,1);
  45.     WRITEATTRIBUTE(KA1,1,1);
  46.     FASTTEXT(KT2,2,1);
  47.     WRITEATTRIBUTE(KA2,2,1);
  48.   END;
  49.   TEXTATTR := TA;
  50.   IF MAUSAKT THEN BEGIN
  51.     DISABLEEVENTHANDLING;
  52.     HIDEMOUSE;
  53.     RESTOREMOUSESTATE(MSP,FALSE);
  54.     FREEMEM(MSP,MSPSIZE);
  55.   END;
  56.   IF CY > 1 THEN BEGIN
  57.     GOTOXY(CX,CY-1);
  58.     CLREOL;
  59.     GOTOXY(CX,CY-2);
  60.   END ELSE GOTOXY(CX,CY);
  61.   NORMALCURSOR;
  62.   HALT;
  63. END;
  64.  
  65.  
  66. PROCEDURE ALERT(TEXT:STRING);
  67. VAR   CH1  : CHAR;
  68. BEGIN
  69.   IF NOT MAKEWINDOW(AWIN,10,11,70,16,TRUE,TRUE,FALSE,$4E,$4F,$CE,' Fehler ') THEN BEGIN
  70.     WRITELN('FEHLER MAKEWINDOW');
  71.     HALT;
  72.   END;
  73.   IF NOT ACTIVATEWINDOW(AWIN) THEN BEGIN
  74.     WRITELN('FEHLER ACTIVATEWINDOW');
  75.     HALT;
  76.   END;
  77.   HIDDENCURSOR;
  78.   GOTOXY( ((LO(WINDMAX)-LO(WINDMIN))-LENGTH(TEXT)) SHR 1 ,2);
  79.   WRITE(TEXT);
  80.   GOTOXY( ((LO(WINDMAX)-LO(WINDMIN))-13) SHR 1 ,4);
  81.   WRITE('Taste drücken');
  82.   WHILE KEYPRESSED DO CH1 := READKEY;
  83.   CH1 := READKEY;
  84.   WHILE KEYPRESSED DO CH1 := READKEY;
  85.   AUSDIEMAUS;
  86. END;
  87.  
  88.  
  89. PROCEDURE VWRITE;
  90. VAR   S  : STRING;
  91. BEGIN
  92.   READSTR(S);
  93.   IF LENGTH(S) > WP[WN].W0 THEN S[0] := CHAR(WP[WN].W0);
  94.   IF QUIET THEN EXIT;
  95.   FASTWRITE(S,ZEI,SPA,TEXTATTR);
  96.   INC(SPA,LENGTH(S));
  97.   IF SPA > SPM THEN SPM := SPA;
  98. END;
  99.  
  100.  
  101. PROCEDURE VWRITELN;
  102. BEGIN
  103.   VWRITE;
  104.   INC(ZEI);
  105.   SPA := 1;
  106. END;
  107.  
  108.  
  109. PROCEDURE VWRITELNS(TEXT:STRING);
  110. BEGIN
  111.   WRITE(TPSTR,TEXT);
  112.   VWRITELN;
  113. END;
  114.  
  115.  
  116. PROCEDURE MESSAGE(TEXT:STRING);
  117. VAR   P    : WINDOWPTR;
  118.       CH1  : CHAR;
  119. BEGIN
  120.   IF QUIET THEN BEGIN
  121.     WRITELN(TEXT);
  122.     EXIT;
  123.   END;
  124.   IF NOT ACTIVATEWINDOW(BWIN) THEN ALERT('FEHLER ACTIVATEWINDOW');
  125.   HIDDENCURSOR;
  126.   CLRSCR;
  127.   GOTOXY( ((LO(WINDMAX)-LO(WINDMIN))-LENGTH(TEXT)) SHR 1 ,2);
  128.   WRITE(TEXT);
  129.   WHILE KEYPRESSED DO CH1 := READKEY;
  130.   CH1 := READKEY;
  131.   WHILE KEYPRESSED DO CH1 := READKEY;
  132.   P := ERASETOPWINDOW;
  133. END;
  134.  
  135.  
  136. FUNCTION MHEX1(B:BYTE):STRING;
  137. BEGIN
  138.   B := B AND $F;
  139.   IF B > 9 THEN MHEX1 := CHR(B+$37) ELSE MHEX1 := CHR(B+$30);
  140. END;
  141.  
  142.  
  143. FUNCTION MHEX2N(B:BYTE):STRING;
  144. BEGIN
  145.   IF B SHR 4 = 0 THEN MHEX2N := MHEX1(B)
  146.                  ELSE MHEX2N := MHEX1(B SHR 4) + MHEX1(B);
  147. END;
  148.  
  149.  
  150. FUNCTION ENTFERNE(ADRESSE:WORD):BOOLEAN;
  151. VAR   R  : REGISTERS;
  152. BEGIN
  153.   ENTFERNE := FALSE;
  154.   WITH R DO BEGIN
  155.     AH := $49;
  156.     ES := ADRESSE;
  157.     MSDOS(R);
  158.     IF (FLAGS AND FCARRY) = 0 THEN ENTFERNE := TRUE;
  159.   END; { WITH }
  160. END;
  161.  
  162.  
  163. PROCEDURE PSPDISP;
  164. VAR   CH    : CHAR;
  165.       PSPP  : ^PSPTYP;
  166.       CMDL  : STRING;
  167.  
  168. PROCEDURE CHECKCMDL;
  169. VAR   I  : INTEGER;
  170. BEGIN
  171.   IF (LENGTH(CMDL) > 127) THEN BEGIN
  172.     CMDL := #237;
  173.     EXIT;
  174.   END;
  175.   FOR I := 1 TO LENGTH(CMDL) DO BEGIN
  176.     IF (CMDL[I] < ' ') AND (CMDL[I] > #0) THEN BEGIN
  177.       CMDL := #237;
  178.       EXIT;
  179.     END;
  180.   END;
  181. END; { CHECKCMDL }
  182.  
  183. BEGIN { PSPDISP }
  184.   IF MCB^.LEN < 16 THEN EXIT;                { ZU KLEIN FÜR PSP ! }
  185.   PSPP := NIL;
  186.   SOF(PSPP).S := MCB^.PSP;
  187.   IF (SOF(PSPP).S = $9FFF) OR
  188.      (SOF(PSPP).S = $A000) OR
  189.      (SOF(PSPP).S = $B000) OR
  190.      (SOF(PSPP).S = $B800) THEN BEGIN
  191.     WRITE(TPSTR,' VIDEO- RAM');
  192.     IF (SOF(MCB).S+MCB^.LEN >= $C000) THEN WRITE(TPSTR,' & EPROM');
  193.     MCBA[MCBAP].ATTR := 5;
  194.     EXIT;
  195.   END;
  196.   WITH PSPP^ DO BEGIN
  197.     IF INTR20 <> $20CD THEN EXIT;
  198.     CMDL := CMDLIN;
  199.     CHECKCMDL;
  200.  
  201.   END; { WITH }
  202.  
  203.   IF MCB^.PSP = 0 THEN EXIT;  { MCB IST FREIGEGEBEN }
  204.   IF SUCC(SOF(MCB).S) <> MCB^.PSP THEN EXIT; { NUR DEN MCB DES PSP SELBST ! }
  205.  
  206.   WRITE(TPSTR,'≥',CMDL,'≤');
  207.   MCBA[MCBAP].ATTR := 2;
  208. END; { PSPDISP }
  209.  
  210.  
  211. FUNCTION HOLENAME(P:POINTER):STRING;
  212. VAR   ENV    : ^CHARRAY ABSOLUTE P;
  213.       PNAME  : STRING;
  214.       I      : WORD;
  215. BEGIN
  216.   HOLENAME := '';
  217.   I := 1;
  218.   IF NOT(ENV^[I] IN [' '..'z']) THEN EXIT;
  219.   REPEAT
  220.     WHILE ENV^[I] <> #0 DO INC(I);
  221.     INC(I);
  222.   UNTIL (ENV^[I] = #0);
  223.   INC(I);
  224.   IF ENV^[I] <> #1 THEN EXIT;
  225.   INC(I);
  226.   IF ENV^[I] <> #0 THEN EXIT;
  227.   INC(I);
  228.   PNAME := '';
  229.   WHILE ENV^[I] <> #0 DO BEGIN
  230.     PNAME := PNAME + ENV^[I];
  231.     INC(I);
  232.   END;
  233.   HOLENAME := PNAME;
  234. END;
  235.  
  236.  
  237. FUNCTION SUCHNAME:BOOLEAN;
  238. VAR   PNAME  : STRING;
  239.       P,N    : BYTE;
  240.       I      : WORD;
  241.       ENV    : ^CHARRAY;
  242.       G      : BOOLEAN;
  243. BEGIN
  244.   SUCHNAME := FALSE;
  245.   ENV := MP;
  246.   N   := 0;
  247.   G   := FALSE;
  248.   I   := 1;
  249.   IF NOT(ENV^[I] IN [' '..'z']) THEN EXIT;
  250.   REPEAT
  251.     WHILE ENV^[I] <> #0 DO BEGIN
  252.       IF ENV^[I] = '=' THEN G := TRUE;
  253.       INC(I);
  254.     END;
  255.     INC(N);
  256.     IF (N = 1) AND NOT G THEN EXIT;
  257.     INC(I);
  258.   UNTIL (ENV^[I] = #0);
  259.   MCBA[MCBAP].ATTR := 1;
  260.   INC(I);
  261.   IF ENV^[I] <> #1 THEN EXIT;
  262.   INC(I);
  263.   IF ENV^[I] <> #0 THEN EXIT;
  264.   INC(I);
  265.   WRITE(TPSTR,' ');
  266.   PNAME := '';
  267.   WHILE ENV^[I] <> #0 DO BEGIN
  268.     PNAME := PNAME + ENV^[I];
  269.     INC(I);
  270.   END;
  271.   WRITE(TPSTR,PNAME);
  272.   SUCHNAME := TRUE;
  273.   P := POS('MCBLIST.EXE',PNAME);
  274.   IF (P > 0) AND ((P+10) = LENGTH(PNAME)) THEN BEGIN
  275.     OLDMEM := HP;
  276.   END;
  277. END; { SUCHNAME }
  278.  
  279.  
  280. FUNCTION BATDISP(MSEG:WORD;UPDATE:BOOLEAN):BOOLEAN;
  281. VAR   I  : INTEGER;
  282. BEGIN
  283.   BATDISP := FALSE;
  284.   IF UPDATE THEN IF SUCHNAME THEN EXIT;
  285.   FOR I := $18 TO $1E DO IF MEM[MSEG:I] <> $FF THEN EXIT;
  286.   I := $1F;
  287.   IF NOT (MEM[MSEG:I] IN [$21..$7A]) THEN EXIT;
  288.   WRITE(TPSTR,'≡');
  289.   WHILE MEM[MSEG:I] <> 0 DO BEGIN
  290.     WRITE(TPSTR,CHR(MEM[MSEG:I]));
  291.     INC(I);
  292.   END;
  293.   WRITE(TPSTR,'≡');
  294.   IF UPDATE THEN MCBA[MCBAP].ATTR := 3;
  295.   BATDISP := TRUE;
  296. END; { BATDISP }
  297.  
  298.  
  299. PROCEDURE CLRVSCREEN(NR,ATTR:BYTE);
  300. BEGIN
  301.   CLEARVSCREEN(SC[NR],ATTR,' ');
  302.   ZEI := 1; SPA := 1; SPM := 0;
  303.   ACTIVATEVSCREEN(SC[NR]);
  304.   TEXTATTR := ATTR;
  305.   CLRSCR;
  306. END;
  307.  
  308.  
  309. FUNCTION SETWINDOW(NR,ATTR,LEN,WID:BYTE;VS:BOOLEAN):BOOLEAN;
  310. BEGIN
  311.   SETWINDOW := TRUE;
  312.   WN := NR;
  313.   REMOVEWINDOW(WN);
  314.   WS := WS + CHR(WN);
  315.   IF NOT ACTIVATEWINDOW(WI[NR]) THEN ALERT('FEHLER ACTIVATEWINDOW');
  316. IF SETTOPTILEDWINDOW(WI[NR]) THEN {};
  317.   HIDDENCURSOR;
  318.   IF WP[NR].F THEN EXIT;
  319.   WP[NR].W0 := WID;
  320.   SETWINDOW := FALSE;
  321.   IF VS THEN BEGIN
  322.     IF NOT MAKEVSCREEN(SC[NR],LEN,WID) THEN ALERT('FEHLER MAKEVSCREEN');
  323.     CLRVSCREEN(NR,ATTR);
  324.   END;
  325. END;
  326.  
  327.  
  328. PROCEDURE CLOSEVSCREEN(NR:BYTE);
  329. BEGIN
  330.   TEXTATTR := TA;
  331.   DEACTIVATEVSCREEN;
  332.   WP[NR].L := ZEI; WP[NR].W := SPM;
  333.   MOVEVSCREENTOWINDOW(SC[NR],1,1);
  334.   WP[NR].F := TRUE;
  335. END;
  336.  
  337.  
  338. FUNCTION READTEXTFILE(NAME:STRING):BOOLEAN;
  339. VAR   F        : TEXT;
  340.       S        : STRING;
  341.       CH1      : CHAR;
  342.       NBL,NBB  : WORD;
  343.       L        : LONGINT;
  344. BEGIN
  345.   READTEXTFILE := FALSE;
  346.   IF NOT EXISTFILE(NAME) THEN EXIT;
  347.   ASSIGN(F,NAME);
  348.   RESET(F);
  349.   IF POS('.EXE',NAME) > 0 THEN BEGIN
  350.     READ(F,CH1);
  351.     READ(F,CH2); { 2 BYTE EXE- HEADER }
  352.     READ(F,CH1);
  353.     READ(F,CH2);
  354.     NBL := ORD(CH1) + 256 * ORD(CH2);
  355.     READ(F,CH1);
  356.     READ(F,CH2);
  357.     NBB := ORD(CH1) + 256 * ORD(CH2);
  358.     L := NBB; L := L * 512; L := L - (512 - NBL);
  359.     IF NOT TEXTSEEK(F,L) THEN EXIT;
  360.   END;
  361.   WHILE NOT EOF(F) DO BEGIN
  362.     READLN(F,S);
  363.     VWRITELNS(S);
  364.   END;
  365.   CLOSE(F);
  366. {$I+}
  367.   READTEXTFILE := TRUE;
  368. END; { READTEXTFILE }
  369.  
  370.  
  371. PROCEDURE HELP;
  372. BEGIN
  373.   WNM := WN;
  374.   IF SETWINDOW(2,$70,250,80,TRUE) THEN EXIT;
  375.   IF NOT READTEXTFILE('MCBLIST.EXE') THEN ;
  376.   IF ZEI < 2 THEN BEGIN
  377.     IF NOT READTEXTFILE('MCBLIST.HLP') THEN BEGIN
  378.       VWRITELN;
  379.       VWRITELNS('    Datei '+ZIELDIR+'MCBLIST.HLP nicht gefunden');
  380.     END;
  381.   END;
  382.   CLOSEVSCREEN(2);
  383. END; { HELP }
  384.  
  385.  
  386. PROCEDURE CONFIGDIS;
  387. BEGIN
  388.   IF SETWINDOW(6,$70,40,80,TRUE) THEN EXIT;
  389.   IF NOT READTEXTFILE('C:\CONFIG.SYS') THEN BEGIN
  390.     VWRITELN;
  391.     VWRITELNS('    C:\CONFIG.SYS nicht gefunden');
  392.   END;
  393.   CLOSEVSCREEN(6);
  394. END; { CONFIGDIS }
  395.  
  396.  
  397. PROCEDURE SAVEINTS;
  398. VAR   I     : INTEGER;
  399.       AMEM  : LONGINT;
  400.       P     : POINTER;
  401. BEGIN
  402.   ASSIGN(F,INTFNAME);
  403. {$I-}
  404.   REWRITE(F);
  405.   WRITE(F,FILEID);  { KONSTANTE AUS DEM PROGRAMMKOPF }
  406.   WRITE(F,OLDMEM);  { FREIER MCB VOR VIDEO- ADAPTER }
  407.   WRITE(F,OLDMEMJ); { FREIER MCB HINTER VIDEO- ADAPTER }
  408.   P := PTR(MEMW[$40:$13],0);
  409.   WRITE(F,P);
  410.   FOR I := 0 TO LASTVEC DO WRITE(F,IP[I]);
  411.   FILERR := NOT (IORESULT = 0);
  412. {$I+}
  413.   WRITELN;
  414.   IF NOT FILERR THEN BEGIN
  415.     CLOSE(F);
  416.     MESSAGE('##### INTERRUPT- VEKTOREN GESPEICHERT #####');
  417.   END ELSE BEGIN
  418.     MESSAGE('***** Fehler bei schreiben File '+INTFNAME+' *****');
  419.   END;
  420. END; { SAVEINTS }
  421.  
  422.  
  423. PROCEDURE READFILE(MELDEN:BOOLEAN);
  424. VAR   P  : POINTER;
  425. BEGIN
  426.   OLDMEMF := NIL;
  427.   OLDMEMG := NIL;
  428.   MEMSIZE := MEMW[$40:$13];
  429.   ASSIGN(F,INTFNAME);
  430. {$I-}
  431.   RESET(F);
  432.   FILERR := NOT (IORESULT = 0);
  433.   IF FILERR THEN BEGIN
  434.     IF MELDEN THEN MESSAGE('*** File MCBLIST.SAV nicht gefunden ***');
  435.     EXIT;
  436.   END;
  437.   READ(F,P);
  438.   IF P <> FILEID THEN BEGIN
  439.     FILERR := TRUE;
  440.     CLOSE(F);
  441.     MESSAGE(' falsches SAVE- File- Format ');
  442.   END ELSE BEGIN
  443.     READ(F,OLDMEMF);
  444.     READ(F,OLDMEMG);
  445.     READ(F,P);
  446.     MEMSIZE := SOF(P).S;
  447.     FOR I := 0 TO LASTVEC DO READ(F,BUF[I]);
  448.     FILERR := NOT (IORESULT = 0);
  449.   END;
  450. {$I+}
  451.   IF FILERR THEN BEGIN
  452.     OLDMEMF := NIL;
  453.     OLDMEMG := NIL;
  454.     MEMSIZE := MEMW[$40:$13];
  455.     MESSAGE('*** Lesefehler MCBLIST.SAV ***');
  456.   END ELSE CLOSE(F);
  457. END; { READFILE }
  458.  
  459.  
  460. PROCEDURE RESTOREINTS(MAUSWEG,GEWALT:BOOLEAN);
  461. VAR   I  : WORD;
  462.       P  : POINTER;
  463.       R  : REGISTERS;
  464.  
  465. FUNCTION GEHTS(VONWO:POINTER;BISWO:WORD):BOOLEAN;
  466. VAR   HP  : ^MCBTYP;
  467. BEGIN { GEHTS }
  468.   GEHTS := TRUE;
  469.   IF VONWO = NIL THEN EXIT;
  470.   HP := VONWO;
  471.   REPEAT
  472.     IF SUCC(SOF(HP).S) = CHEF THEN BEGIN
  473.       GEHTS := FALSE;
  474.       EXIT;
  475.     END;
  476.     IF (HP^.ID <> 'Z') THEN SOF(HP).S := SOF(HP).S + SUCC(HP^.LEN);
  477.   UNTIL (HP^.ID = 'Z') OR (SUCC(SOF(HP).S) >= BISWO);
  478. END; { GEHTS }
  479.  
  480. PROCEDURE FREIGABE(VONWO:POINTER;BISWO:WORD);
  481. VAR   FRECNT      : INTEGER;
  482.       ERROR,ENDE  : BOOLEAN;
  483.       HP          : ^MCBTYP;
  484.       R           : REGISTERS;
  485. BEGIN { FREIGABE }
  486.   IF NOT QUIET THEN CLRSCR;
  487.   ERROR := FALSE;
  488.   ENDE  := FALSE;
  489.   FRECNT := 0;
  490.   HP := VONWO;
  491.   WITH R DO BEGIN
  492.     REPEAT
  493.       AX := $4900;
  494.       ES := SUCC(SOF(HP).S);
  495.       IF HP^.PSP <> 0 THEN BEGIN
  496.         WRITELN('Memory- Block ',HEXW(ES),':0000 freigeben');
  497.         MSDOS(R);
  498.         IF (FLAGS AND FCARRY) <> 0 THEN BEGIN
  499.           WRITELN('Memory- Block ',HEXW(ES),':0000  Fehler ',HEXW(AX));
  500.           ERROR := TRUE;
  501.         END ELSE BEGIN
  502.           INC(FRECNT);
  503.           FILLCHAR(HP^.N,SIZEOF(HP^.N),#0);
  504.         END;
  505.       END;
  506.       IF HP^.ID = 'Z' THEN ENDE := TRUE;
  507.       IF (HP^.ID <> 'Z') THEN SOF(HP).S := SOF(HP).S + SUCC(HP^.LEN);
  508.     UNTIL ERROR OR ENDE OR (SUCC(SOF(HP).S) >= BISWO);
  509.     IF ERROR THEN BEGIN
  510.       MESSAGE('***** Fehler beim Freigeben des Speichers *****');
  511.     END;
  512.   END; { WITH }
  513. END; { FREIGABE }
  514.  
  515. BEGIN { RESTOREINTS }
  516.   READFILE(TRUE);
  517.   IF NOT FILERR THEN BEGIN
  518. { NUR FREIGEBEN, WENN DER EIGENE MUTTERPROZESS NICHT BETROFFEN IST }
  519.     IF NOT GEWALT THEN BEGIN
  520.       IF NOT GEHTS(OLDMEMF,$9FFE) OR
  521.          NOT GEHTS(OLDMEMG,$FFFF) THEN BEGIN
  522.         MESSAGE('  Der eigene Mutterprozess darf nicht freigegeben werden');
  523.         EXIT;
  524.       END;
  525.     END; { IF NOT GEWALT }
  526.  
  527. { DIE INTERRUPT VEKTOREN RESTAURIEREN }
  528.     INLINE($FA); { CLI }
  529.     FOR I := 0 TO LASTVEC DO IP[I] := BUF[I];
  530.     INLINE($FB); { STI }
  531.     MESSAGE('##### Interrupt- Vektoren restauriert #####');
  532.  
  533. { GGF. DEN MAUSEVENT ABSCHALTEN }
  534.     IF MAUSWEG THEN BEGIN
  535.       GETINTVEC($33,P);
  536.       IF P <> NIL THEN BEGIN
  537.         R.AX := $0C;
  538.         R.CX := 0;
  539.         R.ES := 0;
  540.         R.DX := 0;
  541.         INTR($33,R);
  542.         MESSAGE('Der Maus- Event- Interrupt ist deaktiviert');
  543.       END ELSE BEGIN
  544.         MESSAGE('***  kein Maustreiber installiert  ***');
  545.       END;
  546.     END;
  547. { FREIGEBEN VOR VIDEO- ADAPTER }
  548.     IF OLDMEMF <> NIL THEN FREIGABE(OLDMEMF,$9FFE);
  549. { FREIGEBEN HINTER VIDEO- ADAPTER }
  550.     IF OLDMEMG <> NIL THEN FREIGABE(OLDMEMG,$FFFF);
  551.   END;
  552. END; { RESTOREINTS }
  553.  
  554.  
  555. PROCEDURE INTMAP;
  556. VAR   I         : INTEGER;
  557.       COL,TC    : BYTE;
  558.       IRET,ILL  : BOOLEAN;
  559.       TA        : BYTE;
  560.       ILLP      : POINTER;
  561. BEGIN
  562.   IF SETWINDOW(3,$07,54,72,TRUE) THEN EXIT;
  563.  
  564.   ILLP := NIL;
  565.   IF NOT FILERR THEN BEGIN
  566.     IF (BUF[$54] = BUF[$55]) AND
  567.        (BUF[$54] = BUF[$56]) AND
  568.        (BUF[$54] = BUF[$57]) AND
  569.        (BUF[$54] = BUF[$58]) THEN ILLP := BUF[$54];
  570.   END;
  571.  
  572.   TA := TEXTATTR;
  573.   WRITE(TPSTR,'  SHUTDOWN- POINTER = ',HEXPTR(SDP));
  574.   WRITE(TPSTR,'            MODE- POINTER = ',HEXPTR(MODVEC));
  575.   VWRITELN;
  576.  
  577.   COL := 14;
  578.   TEXTCOLOR(COL);
  579.   I := 0;
  580.   REPEAT
  581.     IF LCD THEN TEXTATTR := $07;
  582.     IF NOT FILERR THEN BEGIN
  583.       IF BUF[I] = IP[I] THEN TEXTBACKGROUND(0) ELSE BEGIN
  584.         IF LCD THEN TEXTATTR := $70 ELSE TEXTBACKGROUND(1); { $47 }
  585.       END;
  586.     END;
  587.  
  588.     IRET := FALSE;
  589.     ILL  := FALSE;
  590.     IF IP[I] = NIL THEN TEXTATTR := TAFREI ELSE BEGIN
  591.       IRET := MEM[SOF(IP[I]).S:SOF(IP[I]).O] = $CF;
  592.       ILL  := (ILLP <> NIL) AND (IP[I] = ILLP);
  593.       IF NOT IRET AND (I > 0) AND (IP[I] <> IP[I-1]) THEN BEGIN
  594.         IF NOT LCD THEN BEGIN
  595.           DEC(COL);
  596.           IF COL < 9 THEN COL := 14;
  597.           IF LO(LASTMODE) = 7 THEN COL := 14;
  598.           TEXTCOLOR(COL);
  599.         END;
  600.       END;
  601.     END;
  602.  
  603.     IF NOT LCD THEN BEGIN
  604.       IF IRET THEN TEXTCOLOR(6) ELSE
  605.         IF ILL THEN TEXTCOLOR(4) ELSE
  606.           IF SOF(IP[I]).S = $F000 THEN TEXTCOLOR(7);
  607.     END ELSE BEGIN
  608.       IF SOF(IP[I]).S = $F000 THEN TEXTATTR := $04;
  609.     END;
  610.     WRITE(TPSTR,I:3,',',HEXB(I),'H=',HEXW(SOF(IP[I]).S),':');
  611.     VWRITE;
  612.     IF NOT LCD THEN BEGIN
  613.       IF IRET THEN TEXTCOLOR(6) ELSE
  614.         IF ILL THEN TEXTCOLOR(4) ELSE
  615.           IF IP[I] <> NIL THEN TEXTCOLOR(COL);
  616.     END;
  617.     WRITE(TPSTR,HEXW(SOF(IP[I]).O));
  618.     VWRITE;
  619.  
  620.     TEXTBACKGROUND(0);
  621.     IF IRET THEN WRITE(TPSTR,'!') ELSE
  622.       IF ILL THEN WRITE(TPSTR,'*') ELSE
  623.         WRITE(TPSTR,' ');
  624.     IF (I AND 3) = 3 THEN VWRITELN ELSE VWRITE;
  625.     INC(I);
  626.   UNTIL (I > LASTVEC);
  627.  
  628.   CLOSEVSCREEN(3);
  629. END; { INTMAP }
  630.  
  631.  
  632. PROCEDURE VECTANZ;
  633. VAR   I,VON1,BIS1  : WORD;
  634.       LV,L1        : INTEGER;
  635.       A            : BOOLEAN;
  636.       IVS          : POINTER;
  637. BEGIN { VECTANZ }
  638.   A := FALSE;
  639.   LV := -2;
  640.   IF VON = BIS THEN EXIT;
  641.   IF VON > BIS THEN BEGIN
  642.     VON1 := BIS;
  643.     BIS1 := VON;
  644.   END ELSE BEGIN
  645.     VON1 := VON;
  646.     BIS1 := BIS;
  647.   END;
  648.  
  649.   TEXTATTR := TAVEKT;
  650.  
  651.   IF (VON1 <> $F000) THEN BEGIN
  652.     IF (SOF(SDP).S >= VON1) AND
  653.        (SOF(SDP).S < BIS1) AND
  654.        (SDP <> NIL) THEN BEGIN
  655.       WRITE(TPSTR,' SDP');
  656.     END;
  657.     IF (SOF(MODVEC).S >= VON1) AND
  658.        (SOF(MODVEC).S < BIS1) AND
  659.        (MODVEC <> NIL) THEN BEGIN
  660.       WRITE(TPSTR,' MODE');
  661.     END;
  662.     VWRITE;
  663.   END;
  664.  
  665.   FOR I := 0 TO LASTVEC DO BEGIN
  666.     IVS := IP[I];
  667.     IF ( (VON1 <> $F000) AND
  668.          (SOF(IVS).S <> $F000) ) OR
  669.        ( (VON1 = $F000) AND
  670.          (SOF(IVS).S = $F000) ) THEN BEGIN
  671.  
  672.       IF (SOF(IVS).S >= VON1) AND
  673.          (SOF(IVS).S < BIS1) AND
  674.          (IVS <> NIL) THEN BEGIN
  675.         IF I = SUCC(LV) THEN BEGIN
  676.           IF NOT A THEN WRITE(TPSTR,'-');
  677.           A := TRUE;
  678.         END ELSE BEGIN
  679.           WRITE(TPSTR,' ');
  680.           IF NOT FILERR THEN BEGIN
  681.             IF BUF[I] = IP[I] THEN TEXTATTR := TAVEKT
  682.                               ELSE TEXTATTR := TAVNEU;
  683.           END;
  684.           WRITE(TPSTR,MHEX2N(I));
  685.           A := FALSE;
  686.         END;
  687.         LV := I;
  688.       END;
  689.     END;
  690.     IF LV = PRED(I) THEN BEGIN
  691.       IF A THEN WRITE(TPSTR,MHEX2N(LV));
  692.     END;
  693.     VWRITE;
  694.   END; { NEXT I }
  695.  
  696.   TEXTBACKGROUND(0);
  697.   IF NOT FILERR THEN BEGIN
  698.     TEXTATTR := TAVALT;
  699.     FOR I := 0 TO LASTVEC DO BEGIN
  700.       IVS := BUF[I];
  701.       IF ( (VON1 <> $F000) AND
  702.            (SOF(IVS).S <> $F000) ) OR
  703.          ( (VON1 = $F000) AND
  704.            (SOF(IVS).S = $F000) ) THEN BEGIN
  705.         IF BUF[I] <> IP[I] THEN BEGIN
  706.           IF (SOF(IVS).S >= VON1) AND
  707.              (SOF(IVS).S < BIS1) AND
  708.              (IVS <> NIL) THEN BEGIN
  709.             WRITE(TPSTR,' ',MHEX2N(I));
  710.           END;
  711.         END;
  712.       END;
  713.       VWRITE;
  714.     END; { NEXT I }
  715.   END;
  716.  
  717.   TEXTATTR := TA;
  718. END; { VECTANZ }
  719.  
  720.