[Q]: Как в програмке под DOS отдавать тики OS/2?
[A]: Vladimir Bogoryatskih (2:5080/14.1)
Unit TimeTask;
INTERFACE
{
TaskRec.OS 0 : No MultiTasking 1 : Windows 2 : OS/2 3 : DESQview 4 : TopView
}
Type
TaskRec = record OS : Word; Version : Word; {writeln('Version ',hi(Version), '.', lo(Version) );} Delay : Word; end;
Const
Task : TaskRec = ( OS : 0; Version : 0; Delay : 100 );
Procedure TimeSlice; Procedure InitMulti;
IMPLEMENTATION
uses dos;
Procedure InitMulti; Assembler; Asm
mov Task.OS, 0 mov Task.Version, 0 mov Ah, 30h mov Al, 01h int 21h cmp Al, 20 je @OS2 mov Ax, 160Ah int 2Fh cmp Ax, 0 je @Windows mov Ax, 1022h mov Bx, 0000h int 15h cmp Bx, 0 jne @DESQview mov Ah, 2Bh mov Al, 01h mov Cx, 4445h mov Dx, 5351h int 21h cmp Al, $FF jne @TopView jmp @Fin
@Windows:
Mov Task.OS, 1 Mov Task.Version, BX jmp @Fin
@OS2:
Mov Task.OS, 2 Mov Bh, Ah Xor Ah, Ah Mov Cl, 10 Div Cl Mov Ah, Bh Xchg Ah, Al Mov Task.Version, AX jmp @Fin
@DESQview:
mov Task.OS, 3 jmp @Fin
@TopView:
mov Task.OS, 4
@Fin: End;
Procedure TimeSlice; Assembler; Asm
cmp Task.OS, 0 je @Fin cmp Task.OS, 1 je @Win_OS2 cmp Task.OS, 2 je @Win_OS2
@DV_TV:
mov Ax, 1000h int 15h jmp @Fin
@Win_OS2:
mov Ax, 1680h int 2Fh
@Fin: End;
end.