home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD2.mdf / c / library / edos / v86api / testv86.c < prev    next >
C/C++ Source or Header  |  1993-05-13  |  2KB  |  123 lines

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <dos.h>
  5. #include <conio.h>
  6.  
  7.  
  8.  
  9. typedef unsigned int BOOL;
  10. typedef unsigned int WORD;
  11. typedef unsigned long DWORD;
  12. #define FAR  _far
  13.  
  14.  
  15. void MessageBox(unsigned long vxd_api, char FAR *pname,
  16.       char *argname, int show_num, BOOL validate);
  17.  
  18.  
  19. /*
  20.  
  21. This works fine with Borland C, version 3.1 compiled with small model.
  22.  
  23. It should work ok with other memory models
  24. */
  25.  
  26.  
  27.  
  28. char badexec_msg[] = { "\nTSTWINEX: failed to load windows application\n" };
  29.  
  30. unsigned long GetEDOSVxDAPI(void);
  31.  
  32. main( int argc, char **argv)
  33. {
  34. unsigned long vxd_api;
  35. unsigned int len;
  36.  
  37. char Msg_line[128];
  38.  
  39.  
  40.  
  41.     vxd_api = GetEDOSVxDAPI();    // returns a seg:offset, pointer in a long
  42.     if(!vxd_api) goto noesdi;
  43.  
  44.  
  45.         fputs("\nEnter message string: ", stdout);
  46.         fgets(Msg_line, sizeof(Msg_line)-1, stdin);    // delete trailing \r
  47.         len = strlen(Msg_line);
  48.         if(len)
  49.         Msg_line[len-1] = 0;
  50.  
  51.     MessageBox(vxd_api, Msg_line, "", 0, 0);
  52.  
  53.  goto ok;
  54. noesdi:
  55.     fputs("TESTPRI error: Can't run without EDOS & Windows\n", stdout);
  56.     return 1;
  57. ok:
  58.  
  59. return 0;
  60. }
  61.  
  62. unsigned long GetEDOSVxDAPI(void)
  63. {
  64.  
  65. #define EDOS_ID 0x2925
  66.  
  67. unsigned long vxd_api;
  68.     _asm {
  69.  
  70.     push es
  71.     mov di,0                        // make sure es,di are set to zero
  72.     mov es,di
  73.     mov ax,0x1684                    // the int 2f call number
  74.  
  75.     mov bx,EDOS_ID           //    edos VxD ID number
  76.  
  77.     int 0x2f
  78.     mov word ptr [vxd_api+2],es    // segment of v86 entry point in edos
  79.     mov word ptr [vxd_api],di        // offset of entry point
  80.     mov ax,es
  81.     or ax,di
  82.     pop es
  83.     mov al,10
  84.     jz noesdi
  85.    }
  86.     return vxd_api;
  87.  
  88. noesdi:
  89.     return 0L;
  90.  
  91. }
  92.  
  93.  
  94.  
  95.  
  96. void MessageBox(
  97. unsigned long vxd_api,    // the entry point of the edos v86 api
  98. char FAR *msgline,              // the message, FAR Pointer, maxlen=128
  99. char *dummy1,
  100. int dummy2,
  101. BOOL validate        // do extra validation, not implemented yet
  102. )
  103.  
  104. {
  105.  
  106.  
  107. _asm {
  108.  
  109.     mov  cx,0        //; cx should be zero
  110.  
  111.     push es
  112.     les  bx,  msgline    // es:bx = seg:offset of message
  113.     mov  ax,es
  114.     pop  es
  115.     mov  dx,ax        //; dx = segment of message to use
  116.     mov  ax,1     //    ; message box function call
  117.     call vxd_api
  118.  
  119.     }
  120.  
  121. }
  122.