• PRG3 - Как в пpогpамке под DOS отдавать тики OS/2?

    From FAQServer@2:5020/181 to All on Wed Feb 28 07:37:23 2024
    [Q]: Как в пpогpамке под 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.

    --- INN 2.7.2 (20240212 prerelease)
    * Origin: This echo is READ-ONLY. Send %HELP to FAQSERVER at (2:5020/181)