home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 15 / CDACTUAL15.iso / cdactual / program / pascal / PASTRANS.ZIP / INT86.C < prev    next >
Encoding:
C/C++ Source or Header  |  1990-11-20  |  1.5 KB  |  54 lines

  1.     /* COPYRIGHT 1990 BY VICTOR SCHNEIDER. ALL RIGHTS RESERVED */
  2.  
  3. /* THIS PROGRAM IS A DOS-SPECIFIC EXAMPLE. IT IS MEANT TO BE USED */
  4. /* BY INTERPETED PASCAL PROGRAMS LIKE `HOTKEY.PAS'; NOTE THE SEMI- */
  5. /* PORTABLE METHOD FOR PASSING A POINTER TO int86: */
  6.  
  7. /* PASCAL DECLARATION TO CALL int86 AS AN EXTERNAL:
  8.  
  9.  PROCEDURE int86(interrupt : integer; var inregs : REGS; var outregs : REGS);
  10.   EXTERNAL;
  11.  
  12. */
  13.  
  14. /* THIS C PROGRAM USES FAR POINTERS, AND SHOULD BE COMPILED IN far OR */
  15. /* huge MODEL TO CALL THE APPROPRIATE VERSION OF biosequip() FROM YOUR C */
  16. /* COMPILER'S LIBRARY: */
  17.  
  18. #include <stdlib.h>
  19. #include <stdio.h>
  20. #include <dos.h>
  21. #include <stdarg.h>
  22.  
  23. #define        CHR(x)        ((unsigned char)(x))
  24. #define        ORD(x)        ((unsigned)(x))
  25.  
  26. #define        LToFar(x)    ((void far *)((void huge *)(x)))
  27. #define        FarToL(x)  ((unsigned long)((void huge *)((void far *)(x))))
  28. #define        BEGIN        {
  29. #define        END        ;}
  30. #define        IF        if (
  31. #define        THEN        )
  32. #define        ELSE        else
  33. #define        FOR        for (
  34. #define        AS        ;(
  35. #define        BY        );
  36. #define        DO        )
  37. #define        CASE        switch (
  38. #define        OF        ){
  39. typedef        enum {FALSE,TRUE} BOOLEAN;
  40. typedef        double        REAL;
  41. typedef        char *        ALPHA;
  42.  
  43. void far main(int argc, char *argv[])
  44. BEGIN
  45. va_list ArgList;
  46. union REGS far *inregs, far *outregs;
  47. int service;
  48.  sscanf(argv[1], "%Fp", &ArgList);
  49.  service = va_arg(ArgList, int);
  50.  inregs  = va_arg(ArgList, union REGS far *);
  51.  outregs = va_arg(ArgList, union REGS far *);
  52.  int86(service, inregs, outregs)
  53. END
  54.