home *** CD-ROM | disk | FTP | other *** search
/ ProfitPress Mega CDROM2 …eeware (MSDOS)(1992)(Eng) / ProfitPress-MegaCDROM2.B6I / DESQVIEW / TECH / DVA_TCPP.ZIP / DVAWARE.H < prev    next >
Encoding:
C/C++ Source or Header  |  1990-08-06  |  6.3 KB  |  149 lines

  1. #if (!defined(DVAWARE_H))
  2. #define DVAWARE_H
  3.  
  4. extern unsigned int inDV;               // flag indicating if running under
  5.                                         // DESQview.  =0 not in DESQview,
  6.                                         // =DESQview version number if in
  7.                                         // DESQview.  hi = major version,
  8.                                         // lo = minor version number.  Set
  9.                                         // by dv_get_version
  10.  
  11.  
  12. #if ((!defined(__cplusplus)) || (!defined(DVAWARE_INLINE)))
  13.  
  14.    #if (defined(__cplusplus))
  15.       extern "C" {
  16.    #endif
  17.                                            // begin critical region,
  18.                                            // no time slicing
  19.    void dv_beginc(                            // procedure
  20.       void                                    // no parameters
  21.    );
  22.  
  23.                                            // sets up TC conio system to
  24.                                            // be DESQview screen aware
  25.                                            // calls dv_get_video_buffer
  26.    void dv_conio(                             // procedure
  27.       void                                    // no parameters
  28.    );
  29.  
  30.                                            // end critical region,
  31.                                            // allow time slicing
  32.    void dv_endc(                              // procedure
  33.       void                                    // no parameters
  34.    );
  35.  
  36.                                            // Test to see if DV is running
  37.    unsigned int dv_get_version(               // returns DV version or 0
  38.       void                                    // no parameters
  39.    );
  40.  
  41.                                            // get the video buffer segment
  42.                                            // doesn't calls dv_get_version
  43.    char _seg* dv_get_video_buffer(            // rets video buffer segment
  44.       char _seg* assumed                      // assumed video buffer seg
  45.    );
  46.  
  47.                                            // give up rest time slice
  48.    void dv_pause(                             // procedure
  49.       void                                    // no parameters
  50.    );
  51.  
  52.  
  53.    #if (defined(__cplusplus))
  54.       };
  55.    #endif
  56.  
  57. #else // defined(__cplusplus) && defined(DVAWARE_INLINE)
  58.  
  59.    #include <dos.h>
  60.                                            // begin critical region,
  61.                                            // no time slicing
  62.    inline void dv_beginc(                     // procedure
  63.       void                                    // no parameters
  64.    ) {
  65.       _AX = 0x101B;                        // BEGINC DV API call
  66.       geninterrupt( 0x15 );                // DV API CALL
  67.    }
  68.  
  69.                                            // end critical region,
  70.                                            // allow time slicing
  71.    inline void dv_endc(                       // procedure
  72.       void                                    // no parameters
  73.    ) {
  74.       _AX = 0x101C;                        // ENDC DV API call
  75.       geninterrupt( 0x15 );                // DV API CALL
  76.    }
  77.  
  78.                                            // Test to see if DV is running
  79.    inline unsigned int dv_get_version(        // returns DV version or 0
  80.       void                                    // no parameters
  81.    ) {
  82.       _CX = 0x4445; // 'DE'              // set CX to 4445H; DX to 5351H
  83.       _DX = 0x5351; // 'SQ'              // (an invalid date)
  84.       _AX = 0x2B01;                        // DOS' set data function
  85.       geninterrupt( 0x21 );                // call DOS
  86.       if ( _AL != 0xFF )                   // if DOS didn't see as invalid
  87.          _AX = _BX;                           // AH=major ver; AL=minor ver
  88.       else                                 // DOS saw as invalid
  89.          _AX = 0;                             // no desqview
  90.       inDV = _AX;                          // Save version in inDV flag
  91.       return _AX;                          // Return version number
  92.    }
  93.  
  94.    //
  95.    // Machine code to push and pop various registers.
  96.    // implemented using #define instead of inline to avoid possible 
  97.    // problems if Options/Compiler/C++ options.../Out-of-line inline 
  98.    // functions turned on (or -vi isn't included in the command line 
  99.    // compiler.
  100.    //
  101.    #define pushdi() __emit__( 0x57 )
  102.    #define pushes() __emit__( 0x06 )
  103.    #define popdi()  __emit__( 0x5F )
  104.    #define popes()  __emit__( 0x07 )
  105.  
  106.                                            // get the video buffer segment
  107.                                            // doesn't calls dv_get_version
  108.    inline char _seg* dv_get_video_buffer(     // rets video buffer segment
  109.       char _seg* assumed                      // assumed video buffer seg
  110.    ) {
  111.       pushdi();                            // save registers
  112.       pushes();                            // save registers
  113.       _ES = (unsigned int)assumed;         // get assumed segment into es
  114.       _AH = 0xFE;                          // call get buffer
  115.       geninterrupt( 0x10 );                // video BIOS call
  116.       _AX = _ES;                           // put segment into accumulator
  117.       popes();                             // restore registers
  118.       popdi();                             // restore registers
  119.       return (char _seg*)_AX;              // return segment
  120.    }
  121.  
  122.    #undef pushdi() 
  123.    #undef pushes() 
  124.    #undef popdi()  
  125.    #undef popes()  
  126.  
  127.                                            // give up rest time slice
  128.    inline void dv_pause(                      // procedure
  129.       void                                    // no parameters
  130.    ) {
  131.       _AX = 0x1000;                        // PAUSE DV API Call
  132.       geninterrupt( 0x15 );                // DV API CALL
  133.    }
  134.  
  135.                                            // sets up TC conio system to
  136.                                            // be DESQview screen aware
  137.                                            // calls dv_get_video_buffer
  138.    inline void dv_conio(                      // procedure
  139.       void                                    // no parameters
  140.    ) {
  141.       *(&directvideo-1) = (unsigned int)dv_get_video_buffer(
  142.                                 (char _seg*)(*(&directvideo-1)) );
  143.    }
  144.  
  145. #endif // !defined(__cplusplus) || !defined(DVAWARE_INLINE)
  146.  
  147. #endif // DVAWARE_H
  148. 
  149.