home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 15 / CDACTUAL15.iso / cdactual / program / pascal / PASTRANS.ZIP / FPRINTF.C < prev    next >
Encoding:
C/C++ Source or Header  |  1990-11-24  |  2.2 KB  |  67 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 `STDIOTST.PAS'; NOTE THE SEMI- */
  5. /* PORTABLE METHOD FOR PASSING A POINTER TO fprintf: */
  6.  
  7. /* PASCAL DECLARATION TO CALL fprintf AS AN EXTERNAL:
  8.  
  9.    PROCEDURE fprintf(fp : fileptr; format : String20; ..); EXTERNAL;
  10.  
  11. */
  12.  
  13. /* THIS C PROGRAM USES FAR POINTERS, AND SHOULD BE COMPILED IN large */
  14. /* OR huge MODEL TO CALL THE APPROPRIATE VERSION OF fprintf() FROM YOUR */
  15. /* C  COMPILER'S LIBRARY: */
  16.  
  17. #include <limits.h>
  18. #include <stdlib.h>
  19. #include <stdio.h>
  20. #include <stdarg.h>
  21.  
  22. #define        CHR(x)        ((unsigned char)(x))
  23. #define        ORD(x)        ((unsigned)(x))
  24.  
  25. #define        LToFar(x)    ((void far *)((void huge *)(x)))
  26. #define        FarToL(x)  ((unsigned long)((void huge *)((void far *)(x))))
  27. #define        BEGIN        {
  28. #define        END        ;}
  29. #define        IF        if (
  30. #define        THEN        )
  31. #define        ELSE        else
  32. #define        FOR        for (
  33. #define        AS        ;(
  34. #define        BY        );
  35. #define        DO        )
  36. #define        CASE        switch (
  37. #define        OF        ){
  38. typedef        enum {FALSE,TRUE} BOOLEAN;
  39. typedef        double        REAL;
  40. typedef        char *        ALPHA;
  41.  
  42. /* NOTE THAT C COMPILERS HAVE THEIR OWN SEPARATE FILE HANDLE TABLES */
  43. /* IN DOS.  IF A C FILE POINTER OR HANDLE IS PASSED TO THIS OVERLAY, */
  44. /* IT IS NOT ENOUGH TO SPECIFY I/O, BECAUSE THE COMPILER'S LIBRARY I/O */
  45. /* ROUTINES WILL CHECK THE LOCAL C TABLE OF FILE HANDLES AND EXIT OR */
  46. /* CRASH UNLESS WE REOPEN THE FILE LOCALLY. */
  47.  
  48. void main(int argc, char *argv[])
  49. BEGIN
  50. va_list ArgList;
  51. FILE far *fp;
  52. char far *format;
  53.  sscanf(argv[1], "%Fp", &ArgList);
  54.  fp = va_arg(ArgList, FILE far *);
  55.  format = va_arg(ArgList, char far *);
  56.  /* IT IS NECESSARY TO REOPEN THE FILE IN THE CHILD */
  57.  /* PROCESS BECAUSE OF UNDOCUMENTED LOCAL C FILE TABLES */
  58.  /* SUPPLIED BY THE COMPILER IN ADDITION TO THE FILE */
  59.  /* TABLES OF THE OPERATING SYSTEM. THIS MAY NOT WORK */
  60.  /* PROPERLY FOR SOME C COMPILERS WHOSE fdopen()  OR */
  61.  /* fileno() ASSUME THAT THEY ARE BEING CALLED IN THE */
  62.  /* ENVIRONMENT OF THE C PROGRAM FOR WHICH THE FILE */
  63.  /* WAS DECLARED: */
  64.  fp = fdopen(fileno(fp), "a+");
  65.  vfprintf(fp,format,ArgList)
  66. END
  67.