home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1995 November / PCWK1195.iso / inne / podstawy / dos / format / fdform18.exe / DESQVIEW.PAS < prev    next >
Pascal/Delphi Source File  |  1991-07-21  |  2KB  |  108 lines

  1. {$F+,O+,I-}
  2.  
  3. UNIT desqview;
  4.  
  5. INTERFACE
  6.  
  7. USES dos;
  8.  
  9. TYPE   str2   = String[2];
  10.  
  11. VAR desqresult  : Byte;
  12.   desqregs    : Registers;
  13.   desqversion : Word;
  14.  
  15. FUNCTION DesqviewPresent:Boolean;
  16. PROCEDURE StartTask(x: str2);
  17. PROCEDURE GiveUpCPU;
  18. PROCEDURE GiveUpIdle;
  19. PROCEDURE ExitTask;
  20.  
  21. IMPLEMENTATION
  22.  
  23.   FUNCTION DesqviewPresent;
  24.   BEGIN
  25.     desqresult:=0;
  26.     WITH desqregs DO BEGIN
  27.       ax:=$2b01;
  28.       bx:=0;
  29.       cx:=$4445;
  30.       dx:=$5351;
  31.       msdos(desqregs);
  32.       IF bx=2 THEN bx:=Swap(bx);
  33.       IF bx=0 THEN DesqviewPresent:=False ELSE DesqviewPresent:=True;
  34.       desqversion:=bx;
  35.     END;
  36.   END;
  37.  
  38.   PROCEDURE StartTask;
  39.   VAR fn: pathstr;
  40.     pif : ARRAY[0..415] OF Byte;
  41.     f   : FILE;
  42.   BEGIN
  43.     desqresult:=0;
  44.     IF (DesqviewPresent) AND (desqversion>=$200) THEN BEGIN
  45.       fn:=FSearch(x+'-PIF.DVP',GetEnv('PATH'));
  46.       IF fn='' THEN BEGIN
  47.         desqresult:=1;
  48.         Exit;
  49.       END;
  50.       Assign(f,fn);
  51.       Reset(f,1);
  52.       IF IoResult<>0 THEN BEGIN
  53.         desqresult:=2;
  54.         Exit;
  55.       END;
  56.       IF FileSize(f)<>416 THEN BEGIN
  57.         desqresult:=3;
  58.         Close(f);
  59.         Exit;
  60.       END;
  61.       BlockRead(f,pif,416);
  62.       IF IoResult<>0 THEN BEGIN
  63.         desqresult:=4;
  64.         Close(f);
  65.         Exit;
  66.       END;
  67.       Close(f);
  68.       WITH desqregs DO BEGIN
  69.         ds:=Seg(pif);
  70.         es:=Seg(pif);
  71.         di:=Ofs(pif);
  72.         bx:=$1a0;
  73.         ax:=$102c;
  74.         intr($15,desqregs);
  75.         IF bx=0 THEN BEGIN
  76.           desqresult:=6;
  77.           Exit;
  78.         END;
  79.       END;
  80.     END ELSE
  81.       desqresult:=5;
  82.   END;
  83.  
  84.   PROCEDURE GiveUpCPU;
  85.   BEGIN
  86.     WITH desqregs DO BEGIN
  87.       ax:=$1000;
  88.       intr($15,desqregs);
  89.     END;
  90.   END;
  91.  
  92.   PROCEDURE GiveUpIdle;
  93.   BEGIN
  94.     WITH desqregs DO BEGIN
  95.       ah:=1;
  96.       intr($16,desqregs);
  97.       IF (flags AND FZero) <> 0 THEN GiveUpCPU;
  98.     END;
  99.   END;
  100.  
  101.   PROCEDURE ExitTask;
  102.   BEGIN
  103.     IF DesqviewPresent THEN intr($19,desqregs);
  104.     desqresult:=1;
  105.   END;
  106.  
  107. END.
  108.