home *** CD-ROM | disk | FTP | other *** search
- /* COPYRIGHT 1990 BY VICTOR SCHNEIDER. ALL RIGHTS RESERVED */
-
- /* THIS PROGRAM IS A DOS-SPECIFIC EXAMPLE. IT IS MEANT TO BE USED */
- /* BY INTERPETED PASCAL PROGRAMS LIKE `STDIOTST.PAS'; NOTE THE SEMI- */
- /* PORTABLE METHOD FOR PASSING A POINTER TO fprintf: */
-
- /* PASCAL DECLARATION TO CALL fprintf AS AN EXTERNAL:
-
- PROCEDURE fprintf(fp : fileptr; format : String20; ..); EXTERNAL;
-
- */
-
- /* THIS C PROGRAM USES FAR POINTERS, AND SHOULD BE COMPILED IN large */
- /* OR huge MODEL TO CALL THE APPROPRIATE VERSION OF fprintf() FROM YOUR */
- /* C COMPILER'S LIBRARY: */
-
- #include <limits.h>
- #include <stdlib.h>
- #include <stdio.h>
- #include <stdarg.h>
-
- #define CHR(x) ((unsigned char)(x))
- #define ORD(x) ((unsigned)(x))
-
- #define LToFar(x) ((void far *)((void huge *)(x)))
- #define FarToL(x) ((unsigned long)((void huge *)((void far *)(x))))
- #define BEGIN {
- #define END ;}
- #define IF if (
- #define THEN )
- #define ELSE else
- #define FOR for (
- #define AS ;(
- #define BY );
- #define DO )
- #define CASE switch (
- #define OF ){
- typedef enum {FALSE,TRUE} BOOLEAN;
- typedef double REAL;
- typedef char * ALPHA;
-
- /* NOTE THAT C COMPILERS HAVE THEIR OWN SEPARATE FILE HANDLE TABLES */
- /* IN DOS. IF A C FILE POINTER OR HANDLE IS PASSED TO THIS OVERLAY, */
- /* IT IS NOT ENOUGH TO SPECIFY I/O, BECAUSE THE COMPILER'S LIBRARY I/O */
- /* ROUTINES WILL CHECK THE LOCAL C TABLE OF FILE HANDLES AND EXIT OR */
- /* CRASH UNLESS WE REOPEN THE FILE LOCALLY. */
-
- void main(int argc, char *argv[])
- BEGIN
- va_list ArgList;
- FILE far *fp;
- char far *format;
- sscanf(argv[1], "%Fp", &ArgList);
- fp = va_arg(ArgList, FILE far *);
- format = va_arg(ArgList, char far *);
- /* IT IS NECESSARY TO REOPEN THE FILE IN THE CHILD */
- /* PROCESS BECAUSE OF UNDOCUMENTED LOCAL C FILE TABLES */
- /* SUPPLIED BY THE COMPILER IN ADDITION TO THE FILE */
- /* TABLES OF THE OPERATING SYSTEM. THIS MAY NOT WORK */
- /* PROPERLY FOR SOME C COMPILERS WHOSE fdopen() OR */
- /* fileno() ASSUME THAT THEY ARE BEING CALLED IN THE */
- /* ENVIRONMENT OF THE C PROGRAM FOR WHICH THE FILE */
- /* WAS DECLARED: */
- fp = fdopen(fileno(fp), "a+");
- vfprintf(fp,format,ArgList)
- END
-