home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 22 gnu / 22-gnu.zip / iopltest.zip / test_iopl.c < prev    next >
Text File  |  1995-05-19  |  1KB  |  64 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <os2.h>
  4.  
  5. /*
  6.   declare the assembler function as 16 bit
  7. */
  8.  
  9. VOID _THUNK_FUNCTION (TEST) (ULONG);
  10.  
  11. /*
  12.   build an interface between the calling programm and the thunk function
  13. */
  14.  
  15. USHORT fill_array(ULONG i)
  16. {
  17.    return((USHORT)
  18.       (_THUNK_PROLOG(4);
  19.        _THUNK_FAR16(i);
  20.        _THUNK_CALL(TEST)));
  21. }
  22.  
  23. int main( void )
  24. {
  25.    ULONG i=0;
  26.    USHORT j=1;
  27.    SHORT *t;
  28.    FILE *ergfile;
  29.  
  30. /*
  31.   allocate the memory, where the assembler routine will write to
  32. */
  33.    printf("\nallocating 1,048,577 short integers...");
  34.    t = (SHORT*)calloc(1048577,sizeof(SHORT));
  35.    printf("done.\n\n");
  36.  
  37. /*
  38.   convert the flat pointer to 16bit format..
  39. */
  40.    i = _emx_32to16(t);
  41.  
  42. /*
  43.   ...and call the routine
  44. */
  45.    printf("calling IOPL routine to fill array...");
  46.    j = fill_array(i);
  47.    printf("done.\n\n");
  48.  
  49. /*
  50.   write some data points to a file, so we can see that it works
  51. */
  52.    printf("writing every 64th datapoint to file...");
  53.    ergfile = fopen("test.dat","w");
  54.    for(i=0;i<1048577;i++)
  55.       if( !(i%64)) fprintf(ergfile,"array[%6d]=%6d\n",i,t[i]);
  56.    close(ergfile);
  57.    printf("done.\n");
  58.  
  59. /*
  60.   free the allocated memory
  61. */
  62.    free(t);
  63. }
  64.