[Back to DESQVIEW SWAG index] [Back to Main SWAG index] [Original]
{
From: FRED COHEN
      Time Slices...
looking for routines for giving up time slices to
various multi-taskers, mainly DV and OS/2.  Please either
post them if they are small enough, or tell me where I can
You will need turbo pascal 6.0+ for this to compile.  It is easy to
convert over to regular pascal though.
}
Const
  MDOS = 0;  { DOS               }
  OS2  = 1;  { OS/2 is installed }
  WIN  = 2;  { Windoze           }
  DV   = 3;  { DesqView          }
Var
  Ops            : Byte;    { Operating System OS/2/DOS/WIN/DV}
PROCEDURE giveslice; Assembler; {Gives up remainder of clock cycle
                                 under dos, windows, os/2 }
  asm
    CMP ops,MDos { Compare to DOS }
    JE @MSDOS    { Jump if = }
    CMP ops,Dv   { Compare to Desqview }
    JE @DESQVIEW { Jump if = }
    CMP ops, Win { Compare to Windows }
    JE @WINOS2   { Jump if = }
    CMP ops, OS2 { Compart OS/2 }
    JE @WINOS2   { Jump if = }
    JMP @NONE    { None found, Jump to End }
 @MSDOS:
    INT 28h   { Interupt 28h }
    JMP @NONE { Jump to the end }
 @DESQVIEW:
    MOV ax,1000h { AX = 1000h }
    INT 15h      { Call Interupt 15h }
    JMP @NONE    { Jump to the end }
 @WINOS2:
    MOV AX, 1680h { AX = 1680h }
    INT 2Fh       { Call Interupt 2Fh for Win-OS/2 TimeSlice }
 @NONE:
end; {GiveSlice}
{***********}
PROCEDURE checkos; Assembler;
{ Currently Supports DesqView, Microsoft Windows and IBM's OS/2 }
asm
  mov ops, MDos { Default DOS }
  mov ah, 30h   { AH = 30h }
  int 21h  { dos version }
  cmp al, 14h
  jae @IBMOS2 { Jump if >= to 20 }
  mov ax,2B01h
  mov cx,4445h
  mov dx,5351h
  int 21h { Desqview Installed? }
  cmp al, 255
  jne @DesqView { Jump if AL <> 255 }
  mov ax,160Ah
  int 2Fh { Windows Install?}
  cmp ax, 0h
  je @Windows { If = Jump to Windows }
  jmp @Finish { Nothing found, go to the end }
@IBMOS2:
  mov Ops, Os2  { Set OS Value }
  jmp @Finish
@DesqView:
  mov ops, Dv   { Set OS Value }
  jmp @Finish
@Windows:
  mov ops, win  { Set OS Value }
  jmp @Finish
@FINISH:
end; { checkos }
{***********  MORE  ********}
procedure GiveTimeSlice;  ASSEMBLER;
asm     { GiveTimeSlice }
  cmp   MultiTasker, DesqView
  je    @DVwait
  cmp   MultiTasker, Windows
  je    @WinOS2wait
  cmp   MultiTasker, OS2
  je    @WinOS2wait
  cmp   MultiTasker, NetWare
  je    @Netwarewait
  cmp   MultiTasker, DoubleDOS
  je    @DoubleDOSwait
@Doswait:
  int   $28
  jmp   @WaitDone
@DVwait:
  mov   AX, $1000
  int   $15
  jmp   @WaitDone
@DoubleDOSwait:
  mov   AX, $EE01
  int   $21
  jmp   @WaitDone
@WinOS2wait:
  mov   AX, $1680
  int   $2F
  jmp   @WaitDone
@Netwarewait:
  mov   BX, $000A
  int   $7A
@WaitDone:
end;    { TimeSlice }
[Back to DESQVIEW SWAG index] [Back to Main SWAG index] [Original]