home *** CD-ROM | disk | FTP | other *** search
/ C!T ROM 2 / ctrom_ii_b.zip / ctrom_ii_b / PROGRAM / PASCAL / TPDESQ10 / TPDESQ.PAS < prev   
Pascal/Delphi Source File  |  1991-03-04  |  4KB  |  123 lines

  1. (******************************************************************************
  2. *                                   tpDESQ                                    *
  3. * Turbo-Pascal 6.0 DESQview interface unit, (c) 1991, Loewy Ron.              *
  4. ******************************************************************************)
  5. unit tpDESQ;
  6.  
  7. interface
  8.  
  9. uses
  10.    crt
  11.    ,dos
  12.    ;
  13.  
  14. const
  15.    DESQviewActive : boolean = false; { true if running under DESQview }
  16.    DESQviewMajor  : byte    = 0;
  17.    DESQviewMinor  : byte    = 0;
  18.  
  19. procedure detectDESQview;
  20. function getDESQviewTextBuffer : pointer;
  21. procedure DESQviewApiCall(func : word);
  22. procedure DESQviewPause;
  23. procedure DESQviewBeginCritical;
  24. procedure DESQviewEndCritical;
  25. procedure makeDESQviewAware;
  26.  
  27. implementation
  28.  
  29. var
  30.    regs  : registers;
  31.  
  32. (******************************************************************************
  33. *                               detectDESQview                                *
  34. * Set DESQviewActive flag to TRUE if DV is active, and set Major and Minor    *
  35. * DESQview version.                                                           *
  36. ******************************************************************************)
  37. procedure detectDESQview;
  38. begin
  39.    regs.cx := $4445;
  40.    regs.dx := $5351; { date cx = DE, dx = SQ }
  41.    regs.ax := $2B01; { dos set date function }
  42.    msdos(regs);
  43.    if (regs.al = $ff) then
  44.       DESQviewActive := false { if dos detected an error, no DV active }
  45.    else begin
  46.       DESQviewActive := true;
  47.       DESQviewMajor  := regs.bh;
  48.       DESQviewMinor  := regs.bl;
  49.    end;
  50. end; {detectDESQview}
  51.  
  52. (******************************************************************************
  53. *                            getDESQviewTextBuffer                            *
  54. ******************************************************************************)
  55. function getDESQviewTextBuffer;
  56. begin
  57.    regs.ah := $fe; { DESQview get buffer function API }
  58.    intr($10, regs);
  59.    getDESQviewTextBuffer := ptr(word(regs.es), word(regs.di));
  60. end; {getDESQviewTextBuffer}
  61.  
  62. (******************************************************************************
  63. *                               DESQviewApiCall                               *
  64. ******************************************************************************)
  65. procedure DESQviewApiCall; assembler;
  66. asm
  67.    push ds
  68.    push bp
  69.    push sp
  70.    push ss
  71.    mov ax, $101A  ; { switch to DV stack }
  72.    int $15
  73.    mov ax, func   ; { perform API call }
  74.    int $15
  75.    mov ax, $1025  ; { switch off DV stack }
  76.    int $15
  77.    pop ss
  78.    pop sp
  79.    pop bp
  80.    pop ds
  81. end; {DESQviewApiCall}
  82.  
  83. (******************************************************************************
  84. *                                DESQviewPause                                *
  85. * give up programs time slice, (Waiting for an event ... )                    *
  86. ******************************************************************************)
  87. procedure DESQviewPause;
  88. begin
  89.    DESQviewApiCall($1000);
  90. end; {DESQviewPause}
  91.  
  92. (******************************************************************************
  93. *                            DESQviewBeginCritical                            *
  94. * Tell DV not to slice away until a DESQviewEndCritical is issued             *
  95. ******************************************************************************)
  96. procedure DESQviewBeginCritical;
  97. begin
  98.    DESQviewApiCall($101B);
  99. end; {DESQviewBeginCritical}
  100.  
  101. (******************************************************************************
  102. *                             DESQviewEndCritical                             *
  103. ******************************************************************************)
  104. procedure DESQviewEndCritical;
  105. begin
  106.    DESQviewApiCall($101C);
  107. end; {DESQviewEndCritical}
  108.  
  109. (******************************************************************************
  110. *                              makeDESQviewAware                              *
  111. ******************************************************************************)
  112. procedure makeDESQviewAware;
  113. begin
  114.    directVideo := false;
  115. end; {makeDESQviewAware}
  116.  
  117. (******************************************************************************
  118. *                                    MAIN                                     *
  119. ******************************************************************************)
  120. begin
  121.    detectDESQview;
  122. end.
  123.