home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / extra18 / pastrick / setver / dosver.pas < prev   
Encoding:
Pascal/Delphi Source File  |  1991-12-06  |  2.4 KB  |  104 lines

  1. (* ------------------------------------------------- *)
  2. (*                   DOSVER.PAS                      *)
  3. (*         Globale Änderung der DOS-Version          *)
  4. (* Bitte nicht aus der Entwicklungsumgebung starten! *)
  5. (*      (c) 1991 Jürgen Schlottke & DMV-Verlag       *)
  6. (* ------------------------------------------------- *)
  7. (*             Sprache: Turbo Pascal 6.0             *)
  8. (* ------------------------------------------------- *)
  9. PROGRAM DosVer;
  10.  
  11. {$S-}
  12.  
  13. USES Dos;
  14.  
  15. VAR
  16.   Zp             : Pointer ABSOLUTE 0:0;
  17.   Envseg, Maxseg : ^WORD;
  18.   Bis            : Pointer;
  19.   Vec60          : Pointer;
  20.  
  21.   PROCEDURE Old21;  FAR;
  22.   BEGIN
  23.     (* Besorgt die Abarbeitung *)
  24.     (* der übrigen DOS-Aufrufe *)
  25.   END;
  26.  
  27.   PROCEDURE NewInt21(Flags : WORD); FAR;
  28.     (* Der Filter *)
  29.   BEGIN
  30.     ASM
  31.       CMP    AH,30H   { Funktion DOS-Version? }
  32.       JNZ    @go
  33.  
  34.       MOV    BP,[BP]
  35.       PUSH   Flags
  36.       CALL   CS:ZP
  37.       CLI
  38.       PUSH   DS
  39.       XOR    AX,AX
  40.       MOV    DS,AX
  41.       MOV    AL, DS:[0240h]   (* Major *)
  42.       MOV    AH, DS:[0241h]   (* Minor *)
  43.       POP    DS
  44.       STI
  45.       INC    SP
  46.       INC    SP
  47.       RETF   2
  48.  
  49.     @go:
  50.       POP   BP
  51.       JMP   CS:ZP
  52.     END;
  53.   END;
  54.  
  55.   PROCEDURE TSR;
  56.   BEGIN
  57.     Bis     := @TSR;
  58.     MaxSeg  := Ptr(PrefixSeg, 2);
  59.     MaxSeg^ := Seg(Bis^) + (Ofs(Bis^) + 15) SHR 4;
  60.     Keep(0);
  61.   END;
  62.  
  63. VAR
  64.   Version, HiVers, LoVers : STRING;
  65.   Count                   : INTEGER;
  66.   Major, Minor            : BYTE;
  67.  
  68.   PROCEDURE Usage;
  69.   BEGIN
  70.     WriteLn('Syntax: DOSVER <DosVersion>');
  71.     Halt(1);
  72.   END;
  73.  
  74. BEGIN
  75.   IF ParamCount <> 1 THEN Usage;
  76.   Version := ParamStr(1);
  77.   Count   := Pos('.', Version);
  78.   IF Count = 0 THEN Usage;
  79.  
  80.   HiVers := Copy(Version, 1, Count-1);
  81.   LoVers := Copy(Version, Count+1, Length(Version));
  82.   Val(HiVers, Major, Count);
  83.   Val(LoVers, Minor, Count);
  84.  
  85.   GetIntVec($60, Vec60);
  86.   IF Vec60 <> NIL THEN BEGIN
  87.     WriteLn('Interrupt-Vektor 60 bereits belegt!');
  88.     Halt(1);
  89.   END;
  90.  
  91.   Mem[0:$0240] := Major;   (* (IntVec 60)   *)
  92.   Mem[0:$0241] := Minor;   (* (IntVec 60)+1 *)
  93.  
  94.   WriteLn('DOSVER geladen!', #13, #10,
  95.           '(c) Jürgen Schlottke & DMV-Verlag');
  96.   SwapVectors;
  97.   GetIntVec($21, Pointer(@Old21^));
  98.   SetIntVec($21, @NewInt21);
  99.   TSR;
  100. END.
  101. (* ------------------------------------------------- *)
  102. (*              Ende von DOSVER.PAS                  *)
  103.  
  104.