home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 3 / PDCD_3.iso / languages / pascal / PTC / _PtC1 / ptcmain__h < prev    next >
Encoding:
Text File  |  1991-03-02  |  3.5 KB  |  152 lines

  1. /* $Id: h.ptcmain 1.2 91/03/09 20:55:58 gtoal Exp Locker: gtoal $
  2.  *
  3.  * Header file included by programs translated with the ptc
  4.  * Pascal-to-C translator (as enhanced by tml@tik.vtt.fi).
  5.  */
  6.  
  7. # define MAXFILENAME 1024
  8. # define NIL 0
  9.  
  10. # define PTC_E_FILENOTOPEN 1
  11. # define PTC_E_SCAN 2
  12. # define PTC_E_CASE 3
  13. # define PTC_E_CANTOPEN 4
  14. # define PTC_E_TOOLONGFILENAME 5
  15.  
  16. # define Rmode "r"
  17. # define Wmode "w"
  18.  
  19. typedef struct {
  20.   FILE *fp;
  21.   int bufvalid, eoln, eof, writable;
  22.   unsigned char buf;
  23.   int auxbuf;
  24. } text;
  25.  
  26. /* Lazy I/O: defer actual getting until we refer the buffer varaible */
  27.  
  28. # define Buf(f) \
  29.   ((f).bufvalid ? 0 : Get(f), \
  30.    (f).buf)
  31.  
  32. # define Buffill(f) \
  33.   ((f).bufvalid ? 0 : Get(f))
  34.  
  35. # define Bufx(f) \
  36.   (((f).bufvalid ? 0 : RealGetx(f)), \
  37.    (f).buf)
  38.  
  39. # define Bufxfill(f) \
  40.   ((f).bufvalid ? 0 : RealGetx(f))
  41.  
  42. # define Fread(x, f) fread((char *)&x, sizeof(x), 1, f)
  43.  
  44. # define Get(f) \
  45.   ((f).eof = (Fread((f).buf, (f).fp) == 0), \
  46.    (f).bufvalid = 1)
  47.  
  48. # define RealGetx(f) \
  49.   ((f).auxbuf = getc((f).fp), \
  50.    (f).eof = ((f).auxbuf == EOF), \
  51.    (f).eoln = ((f).eof || ((f).auxbuf == '\n')), \
  52.    ((f).buf = ((f).eoln ? ' ' : (f).auxbuf)), \
  53.    (f).bufvalid = 1)
  54.  
  55. # define Getx(f) (Bufxfill(f), (f).bufvalid = 0)
  56.  
  57. # define Getchr(f) (Getx(f), (f).buf)
  58.  
  59. # define Fscan(f) \
  60.   ((f).bufvalid ? ((f).bufvalid = 0, ungetc((f).buf, (f).fp)) : 0, \
  61.    Tmpfil = (f).fp)
  62.  
  63. # define Scan(f, p) Scanck(fscanf(Tmpfil, f, p))
  64.  
  65. # define Eoln(f) \
  66.   (Openck(f), \
  67.    Bufxfill(f), \
  68.    (f).eoln)
  69.  
  70. # define Eof(f) \
  71.   (Openck(f), \
  72.    Buffill(f), \
  73.    (f).eof)
  74.  
  75. # define Eofx(f) \
  76.    (Openck(f), \
  77.     Bufxfill(f), \
  78.     (f).eof)
  79.  
  80. # define Fwrite(x, f) fwrite((char *)&x, sizeof(x), 1, f)
  81.  
  82. # define Put(f) Fwrite((f).buf, (f).fp)
  83.  
  84. # define Putx(f) \
  85.   ((f).eoln = ((f).buf == '\n'), \
  86.    putc((f).buf, (f).fp))
  87.  
  88. # define Putchr(c, f) ((f).buf = (c), Putx(f))
  89.  
  90. # define Putl(f, v) ((f).eoln = v)
  91.  
  92. # define Flush(f) \
  93.   (Openck(f), \
  94.    fflush((f).fp))
  95.  
  96. # define Finish(f) \
  97.   ((((f).writable && !(f).eoln) ? Putchr('\n', f) : 0), \
  98.    rewind((f).fp), \
  99.    0)
  100.  
  101. # define Seek(f, p, w) \
  102.   ((f).bufvalid = 0, \
  103.    fseek((f).fp, (p) * sizeof((f).buf), (w)))
  104.  
  105. # define Tell(f) \
  106.    ((ftell((f).fp) - (f).bufvalid * sizeof((f).buf)) / sizeof((f).buf))
  107.  
  108. # define Close(f) \
  109.   (Openck(f), \
  110.    fclose((f).fp), \
  111.    (f).fp = 0)
  112.  
  113. # define Closex(f) (Finish(f), fclose((f).fp), (f).fp = 0)
  114.  
  115. # define Reset(f, n, l) \
  116.   ((f).fp && n == 0 ? (rewind((f).fp), 0) \
  117.    : (((f).fp ? fclose((f).fp) : 0), \
  118.       (int) ((f).fp = F_open(n, l, Rmode, __LINE__, #f))), \
  119.    (f).bufvalid = (f).eof = (f).writable = 0)
  120.  
  121. # define Resetx(f, n, l) \
  122.   ((f).fp ? Finish(f) : (int) ((f).fp = F_open(n, l, Rmode, __LINE__, #f)), \
  123.    (f).bufvalid = (f).eof = (f).writable = 0)
  124.  
  125. # define Rewrite(f, n, l) \
  126.   ((f).fp ? (rewind((f).fp), 0) : \
  127.     (int) ((f).fp = F_open(n, l, Wmode, __LINE__, #f)), \
  128.    (f).writable = (f).eof = 1)
  129.  
  130. # define Rewritex(f, n, l) \
  131.   ((f).fp ? Finish(f) : (int) ((f).fp = F_open((char *)n, l, Wmode, __LINE__, #f)), \
  132.    (f).writable = (f).eof = (f).eoln = 1)
  133.  
  134. # define Cmpstr(x, y) strncmp((char *)(x), (char *)(y), sizeof(x))
  135.  
  136. # define Openck(f) \
  137.     ((f).fp ? 0 : PTCerror(PTC_E_FILENOTOPEN, __LINE__, 0, 0, 0))
  138.  
  139. # define Scanck(n) \
  140.     (n == 1 ? 0 : PTCerror(PTC_E_SCAN, __LINE__, 0, 0, 0))
  141.  
  142. # define Trunc(f) (int)(f)
  143. # define Round(f) (int) floor((double)(0.5+f))
  144.  
  145. extern int argc;
  146. extern unsigned char **argv;
  147.  
  148. #include "<ptc$dir>.argvgt.h"
  149. #include "<ptc$dir>.fopen.h"
  150. #include "<ptc$dir>.getl.h"
  151. #include "<ptc$dir>.ptcerror.h"
  152.