[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.