home *** CD-ROM | disk | FTP | other *** search
/ Nebula / nebula.bin / SourceCode / Flip / flip.h < prev    next >
C/C++ Source or Header  |  1989-07-13  |  8KB  |  208 lines

  1. /* ::[[ @(#) flip.h 1.16 89/07/04 17:00:46 ]]:: */
  2.  
  3. /*
  4. Copyright 1989 Rahul Dhesi, All rights reserved.
  5.  
  6. Checksum: 2652839101 (check or update with "brik")
  7.  
  8. ANSI-compatibility strategy:
  9.  
  10. 1.   If ANSIPROTO is defined, function prototypes are used, ANSI-style.
  11.      If it is not defined, regular function declarations (without a
  12.      parameter list) are used.  This is achieved with the use of
  13.      the PARMS macro.
  14. 2.   If STDINCLUDE is defined, ANSI-conformant header files are
  15.      included.  Otherwise functions that would be declared in such
  16.      header files are declared individually.
  17. */
  18.  
  19. #ifndef OK_NL
  20.  
  21. /* Define ANSIPROTO and/or STDINCLUDE here if needed */
  22. #ifdef TURBOC
  23. # define    ANSIPROTO
  24. # define    STDINCLUDE
  25. #endif /* TURBOC */
  26.  
  27.  
  28.  
  29. #include <stdio.h>
  30.  
  31. #ifndef PARMS
  32. # ifdef ANSIPROTO
  33. #  define   PARMS(x)    x
  34. # else
  35. #  define   PARMS(x)    ()
  36. # endif
  37. #endif
  38.  
  39. /************************************************************/
  40. /*** change following definitions as needed for your system */
  41. /************************************************************/
  42. /*
  43. BIGBUF      If defined, setvbuf() will be used to set input and
  44.             output buffers to BIGBUF characters
  45. BINCHAR     This must be a macro accepting a single character
  46.             argument and returning nonzero if and only if that
  47.             character is a binary character.  By default, BINCHAR
  48.             is defined to look up a table, and the table is compiled
  49.             in by defining USE_TABLE.
  50. CHECK_BREAK If your operating system requires programs to check
  51.             for user interrupts at intervals, define CHECK_BREAK to
  52.             be a function or macro that checks for a user interrupt.
  53.             Flip will call this at intervals.  If not needed,
  54.             define CHECK_BREAK to be null.
  55. DELFILE     Must be a function or macro that will accept one filenames
  56.             and delete that file, returning zero on success, nonzero
  57.             on failure.
  58. GETFT       Must be a macro with usage GETFT(file,name,var) that will
  59.             take an open file, a filename, and a variable name, and
  60.             put in that variable the timestamp of the file.
  61. INT_EXIT    If USE_SIG is defined, INT_EXIT must be defined to
  62.             be the exit code returned by flip when its execution
  63.             is aborted by a user interrupt.
  64. MVFILE      Must be a function or macro that will take two filenames
  65.             and rename the first file to the second file, returning
  66.             zero on success, nonzero on failure.
  67. NIX         If this symbol is defined, some things common to most
  68.             implementations of **IX get defined and need not be
  69.             individually defined.
  70. PATHSIZE    size of buffer(s) to use to hold pathname(s)
  71. PICKNAME    Do "#define PICKNAME" if you want the program to know its
  72.             name and respond to it.  If PICKNAME is not defined, the
  73.             program will assume that it is called "flip".
  74. SETFT       Must be a function or macro with usage SETFT(file,name,var)
  75.             that will take an open file, a filename, and a variable
  76.             name, and set the timestamp of the file from the variable.
  77. SIG_T       If USE_SIG is defined, then SIG_T must be defined
  78.             (or typedef'd) to be the data type returned by
  79.             (*signal).  Usually int or void.
  80. SPEC_EXIT   Like SPEC_INIT, but is called just before flip exits.
  81. SPEC_INIT   This is invoked to initialize flip.  Should be defined to
  82.             be either a function call (with trailing semicolon) or
  83.             null string.
  84. SGFTIME     This must be a typedef for a data type suitable to store
  85.             file times.
  86. USE_TABLE   If this is defined, flip code will use a table look-up
  87.             to decide which characters should be considered binary.
  88.             See also BINCHAR.
  89. ULTRIX_BUG  At least one version of Ultrix chokes on a trailing "b"
  90.             in the mode string for fopen().  If ULTRIX_BUG is defined
  91.             no trailing "b" will be used.
  92. USE_SIG     If this is defined, then signal() will be used so flip
  93.             may trap user interrupts and delete temporary files.
  94.             If USE_SIG is defined, then SIG_T and INT_EXIT must also
  95.             be defined (below).
  96. WILDCARD    If this is defined, the function nextfile() will be called
  97.             to expand wildcards.  If WILDCARD is not defined, no
  98.             wildcard expansion will be done and nextfile() is not
  99.             needed.  For a description of nextfile() see turboc.c.
  100. */
  101.  
  102. #ifdef TURBOC
  103. # define PATHSIZE    200
  104. # define PICKNAME
  105. # define BIGBUF      16384
  106. # define DELFILE     remove
  107. extern int MVFILE PARMS ((char *src, char *dest));            /* Turbo C */
  108. # define USE_SIG
  109. # define SIG_T void     /* return type from (*signal) */
  110. # define INT_EXIT 127   /* status when a signal causes exit */
  111. # define CHECK_BREAK  brktst();
  112. void brktst PARMS ((void));
  113. # define SPEC_INIT   spec_init();
  114. # define SPEC_EXIT   spec_exit();
  115. void spec_init PARMS ((void));
  116. void spec_exit PARMS ((void));
  117. # define WILDCARD
  118.  
  119. /* date and time */
  120. # include <io.h>
  121.   typedef struct ftime        SGFTIME;
  122. # define GETFT(f,name,var)    getftime(fileno(f), &var)
  123. # define SETFT(f,name,var)    setftime(fileno(f), &var)
  124. #endif /* TURBOC */
  125.  
  126. #ifdef SYS_V
  127. # define NIX         /* see below */
  128. # define PATHSIZE    200
  129. # define BIGBUF      16384
  130. # define  MVFILE(src,dest)    (!(!link(src,dest)&&!unlink(src)))
  131. # define SIG_T int
  132. #endif /* SYS_V */
  133.  
  134. #ifdef BSD
  135. # define NIX         /* see below */
  136. # define PATHSIZE    1027
  137. # undef  BIGBUF
  138. # define  MVFILE     rename
  139. # define SIG_T int
  140. #endif /* BSD */
  141.  
  142. #ifdef VMS
  143. # define PATHSIZE    1024
  144. # define PICKNAME
  145. # define BIGBUF      16384
  146. # define DELFILE     delete
  147. # define  MVFILE     rename
  148. # define USE_SIG
  149. # define SIG_T int
  150. # define INT_EXIT    127
  151. # define SPEC_INIT
  152. # define SPEC_EXIT
  153. #endif /* VMS */
  154.  
  155. /************************************************************/
  156. /*** remaining definitions should not need to be changed ****/
  157. /************************************************************/
  158.  
  159. /* define ASCII character values for linefeed, carriage return, control Z */
  160. #define  LF    10
  161. #define  CR    13
  162. #define  CTRLZ 26
  163.  
  164. /* error codes */
  165. #define  ERRBINF  1  /* binary file */
  166. #define  ERRSIG   2  /* interrupted by signal */
  167.  
  168. /* how to strip high bit */
  169. #define  STRIP(c)    c &= 0x7f
  170.  
  171. /**** BINCHAR(c) returns nonzero if c is a binary char ****/
  172. #ifndef BINCHAR
  173. # define USE_TABLE      /* use internal table -- see flip.c */
  174. # define BINCHAR(c)  bintab[c]
  175. #endif
  176.  
  177. /**** mode strings for fopen() -- to work around Ultrix problem ****/
  178. /**** (Thanks to Taso N. Devetzis for reporting this)           ****/
  179. #ifdef ULTRIX_BUG
  180. # define WB          "w"
  181. # define RB          "r"
  182. # define R_PL_B      "r+"
  183. #else
  184. # define WB          "wb"     /* write binary */
  185. # define RB          "rb"     /* read binary */
  186. # define R_PL_B      "r+b"    /* read + update binary */
  187. #endif /* ULTRIX_BUG */
  188.  
  189. /* things common to most **IX systems */
  190. #ifdef NIX
  191. # define SPEC_INIT
  192. # define SPEC_EXIT
  193. # define CHECK_BREAK
  194. # define PICKNAME
  195. # define DELFILE     unlink
  196. # define USE_SIG
  197. # define INT_EXIT    127
  198. # include <sys/types.h>          /* for file time */
  199. # include <sys/stat.h>           /* for file time */
  200.   typedef struct stat            SGFTIME;
  201. # define GETFT(file,name,var)    fstat(fileno(file),&var)
  202. # define SETFT(file,name,var)    do { time_t x[2]; x[0] = var.st_atime; \
  203.                                       x[1] = var.st_mtime; utime (name, x); \
  204.                                   } while (0)
  205. #endif /* NIX */
  206.  
  207. #endif /* OK_NL */
  208.