home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / library / dos / grafik / tiftool / intvec.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1990-11-25  |  3.1 KB  |  136 lines

  1.  
  2. PROGRAM INTVEC;
  3. {$M 4096,0,0}
  4.  
  5. { SAVE / RESTORE INTERRUPTVEKTOREN }
  6.  
  7.  
  8. USES  SELECTD,DOS,TPSTRING;
  9.  
  10.  
  11. CONST MAXVEC = $CF;
  12.  
  13. TYPE  INTBUF = ARRAY[0..MAXVEC] OF LONGINT;
  14.  
  15.  
  16. VAR   I,J   : WORD;
  17.       S     : STRING;
  18.       INTS  : INTBUF ABSOLUTE 0:0;
  19.       IBUF  : INTBUF;
  20.       F     : FILE OF INTBUF;
  21.  
  22.  
  23. PROCEDURE ERKLAERE;
  24. BEGIN
  25.   WRITELN;
  26.   WRITELN('Programm INTVEC');
  27.   WRITELN;
  28.   WRITELN('INTVEC S    speichert die Interrupt- Vektoren auf File');
  29.   WRITELN('INTVEC R    restauriert die Interrupt- Vektoren von File');
  30.   WRITELN('INTVEC D    löscht File INTVEC.SAV');
  31.   WRITELN;
  32.   WRITELN('INTVEC @PROGRAMM.EXE PARAMETER    Programm ausführen');
  33.   WRITELN('INTVEC !PROGRAMM.EXE PARAMETER    Programm ausführen und veränderte');
  34.   WRITELN('                                  Interrupt- Vektoren anzeigen');
  35.   WRITELN;
  36.   WRITELN('Es wird das File INTVEC.SAV auf demselben Directory wie INTVEC.EXE benutzt.');
  37.   WRITELN;
  38.   HALT;
  39. END; { ERKLAERE }
  40.  
  41.  
  42. PROCEDURE COMPAREVECTORS(VAR PRG:STRING);
  43. VAR   I  : WORD;
  44.       X  : BOOLEAN;
  45. BEGIN
  46.   X := TRUE;
  47.   FOR I := 0 TO MAXVEC DO BEGIN
  48.     IF INTS[I] <> IBUF[I] THEN BEGIN
  49.       IF X THEN BEGIN
  50.         WRITELN;
  51.         WRITELN('!!!!! ',PRG,' verändert Interrupt- Vektoren :');
  52.         WRITELN;
  53.         WRITELN('Nr. (HEX)   original    verändert in');
  54.         X := FALSE;
  55.       END;
  56.       WRITELN(I:3,' (',HEXB(I),'H) : ',
  57.               HEXPTR(POINTER(IBUF[I])),' - ',
  58.               HEXPTR(POINTER(INTS[I])));
  59.     END;
  60.   END; { NEXT I }
  61.   IF NOT X THEN BEGIN
  62.     WRITELN;
  63.     WRITELN('Die veränderten Interrupt- Vektoren wurden wiederhergestellt');
  64.   END;
  65. END; { COMPAREVECTORS }
  66.  
  67.  
  68. PROCEDURE PROGRAMMAUSFUEHREN;
  69. VAR   PRG,CMD  : STRING;
  70.       IV22H    : POINTER;
  71. BEGIN
  72.   PRG := S;
  73.   DELETE(PRG,1,1);
  74. {$I-}
  75.   CHDIR(QUELLDIR);
  76. {$I+}
  77.   CMD := '';
  78.   FOR I := 2 TO PARAMCOUNT DO BEGIN
  79.     CMD := CMD + PARAMSTR(I);
  80.     IF I < PARAMCOUNT THEN CMD := CMD + ' ';
  81.   END;
  82.   IBUF := INTS;
  83.   GETINTVEC($22,IV22H);
  84.   SWAPVECTORS;
  85.   EXEC(PRG,CMD);
  86.   SWAPVECTORS;
  87.   SETINTVEC($22,IV22H);
  88.   IF DOSERROR <> 0 THEN BEGIN
  89.     WRITELN('*** DOS - ERROR ',DOSERROR,'  -  ');
  90.     CASE DOSERROR OF
  91.        2 : WRITE('File nicht gefunden');
  92.        8 : WRITE('zu wenig Speicherplatz');
  93.       10 : WRITE('Environment inkonsistent');
  94.       11 : WRITE('EXE- Datei inkonsistent');
  95.     END; { CASE DOSERROR }
  96.     WRITELN;
  97.   END;
  98.   IF S[1] = '!' THEN COMPAREVECTORS(PRG);
  99.   INTS := IBUF;
  100.   HALT;
  101. END; { PROGRAMMAUSFUEHREN }
  102.  
  103.  
  104. BEGIN
  105.   IF PARAMCOUNT = 0 THEN ERKLAERE;
  106.   S := PARAMSTR(1);
  107.   FOR I := 1 TO LENGTH(S) DO S[I] := UPCASE(S[I]);
  108.   IF LENGTH(S) > 1 THEN IF (S[1] = '/') OR (S[1] = '-') THEN DELETE(S,1,1);
  109.  
  110.   IF S[1] IN ['!','@'] THEN PROGRAMMAUSFUEHREN;
  111.  
  112. {$I-}
  113.   SWAPVECTORS;
  114.   ASSIGN(F,'INTVEC.SAV');
  115.   IF  S[1] = 'S' THEN BEGIN
  116.     REWRITE(F);
  117.     IF IORESULT = 0 THEN BEGIN
  118.       WRITE(F,INTS);
  119.       CLOSE(F);
  120.     END;
  121.   END;
  122.   IF S[1] = 'R' THEN BEGIN
  123.     RESET(F);
  124.     IF IORESULT = 0 THEN BEGIN
  125.       READ(F,INTS);
  126.       CLOSE(F);
  127.     END;
  128.     IF S[2] = 'D' THEN ERASE(F);
  129.   END;
  130.   IF S[1] = 'D' THEN ERASE(F);
  131.   SWAPVECTORS;
  132.  
  133. END.
  134.  
  135.  
  136.