home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Nebula
/
nebula.bin
/
SourceCode
/
Flip
/
flip.h
< prev
next >
Wrap
C/C++ Source or Header
|
1989-07-13
|
8KB
|
208 lines
/* ::[[ @(#) flip.h 1.16 89/07/04 17:00:46 ]]:: */
/*
Copyright 1989 Rahul Dhesi, All rights reserved.
Checksum: 2652839101 (check or update with "brik")
ANSI-compatibility strategy:
1. If ANSIPROTO is defined, function prototypes are used, ANSI-style.
If it is not defined, regular function declarations (without a
parameter list) are used. This is achieved with the use of
the PARMS macro.
2. If STDINCLUDE is defined, ANSI-conformant header files are
included. Otherwise functions that would be declared in such
header files are declared individually.
*/
#ifndef OK_NL
/* Define ANSIPROTO and/or STDINCLUDE here if needed */
#ifdef TURBOC
# define ANSIPROTO
# define STDINCLUDE
#endif /* TURBOC */
#include <stdio.h>
#ifndef PARMS
# ifdef ANSIPROTO
# define PARMS(x) x
# else
# define PARMS(x) ()
# endif
#endif
/************************************************************/
/*** change following definitions as needed for your system */
/************************************************************/
/*
BIGBUF If defined, setvbuf() will be used to set input and
output buffers to BIGBUF characters
BINCHAR This must be a macro accepting a single character
argument and returning nonzero if and only if that
character is a binary character. By default, BINCHAR
is defined to look up a table, and the table is compiled
in by defining USE_TABLE.
CHECK_BREAK If your operating system requires programs to check
for user interrupts at intervals, define CHECK_BREAK to
be a function or macro that checks for a user interrupt.
Flip will call this at intervals. If not needed,
define CHECK_BREAK to be null.
DELFILE Must be a function or macro that will accept one filenames
and delete that file, returning zero on success, nonzero
on failure.
GETFT Must be a macro with usage GETFT(file,name,var) that will
take an open file, a filename, and a variable name, and
put in that variable the timestamp of the file.
INT_EXIT If USE_SIG is defined, INT_EXIT must be defined to
be the exit code returned by flip when its execution
is aborted by a user interrupt.
MVFILE Must be a function or macro that will take two filenames
and rename the first file to the second file, returning
zero on success, nonzero on failure.
NIX If this symbol is defined, some things common to most
implementations of **IX get defined and need not be
individually defined.
PATHSIZE size of buffer(s) to use to hold pathname(s)
PICKNAME Do "#define PICKNAME" if you want the program to know its
name and respond to it. If PICKNAME is not defined, the
program will assume that it is called "flip".
SETFT Must be a function or macro with usage SETFT(file,name,var)
that will take an open file, a filename, and a variable
name, and set the timestamp of the file from the variable.
SIG_T If USE_SIG is defined, then SIG_T must be defined
(or typedef'd) to be the data type returned by
(*signal). Usually int or void.
SPEC_EXIT Like SPEC_INIT, but is called just before flip exits.
SPEC_INIT This is invoked to initialize flip. Should be defined to
be either a function call (with trailing semicolon) or
null string.
SGFTIME This must be a typedef for a data type suitable to store
file times.
USE_TABLE If this is defined, flip code will use a table look-up
to decide which characters should be considered binary.
See also BINCHAR.
ULTRIX_BUG At least one version of Ultrix chokes on a trailing "b"
in the mode string for fopen(). If ULTRIX_BUG is defined
no trailing "b" will be used.
USE_SIG If this is defined, then signal() will be used so flip
may trap user interrupts and delete temporary files.
If USE_SIG is defined, then SIG_T and INT_EXIT must also
be defined (below).
WILDCARD If this is defined, the function nextfile() will be called
to expand wildcards. If WILDCARD is not defined, no
wildcard expansion will be done and nextfile() is not
needed. For a description of nextfile() see turboc.c.
*/
#ifdef TURBOC
# define PATHSIZE 200
# define PICKNAME
# define BIGBUF 16384
# define DELFILE remove
extern int MVFILE PARMS ((char *src, char *dest)); /* Turbo C */
# define USE_SIG
# define SIG_T void /* return type from (*signal) */
# define INT_EXIT 127 /* status when a signal causes exit */
# define CHECK_BREAK brktst();
void brktst PARMS ((void));
# define SPEC_INIT spec_init();
# define SPEC_EXIT spec_exit();
void spec_init PARMS ((void));
void spec_exit PARMS ((void));
# define WILDCARD
/* date and time */
# include <io.h>
typedef struct ftime SGFTIME;
# define GETFT(f,name,var) getftime(fileno(f), &var)
# define SETFT(f,name,var) setftime(fileno(f), &var)
#endif /* TURBOC */
#ifdef SYS_V
# define NIX /* see below */
# define PATHSIZE 200
# define BIGBUF 16384
# define MVFILE(src,dest) (!(!link(src,dest)&&!unlink(src)))
# define SIG_T int
#endif /* SYS_V */
#ifdef BSD
# define NIX /* see below */
# define PATHSIZE 1027
# undef BIGBUF
# define MVFILE rename
# define SIG_T int
#endif /* BSD */
#ifdef VMS
# define PATHSIZE 1024
# define PICKNAME
# define BIGBUF 16384
# define DELFILE delete
# define MVFILE rename
# define USE_SIG
# define SIG_T int
# define INT_EXIT 127
# define SPEC_INIT
# define SPEC_EXIT
#endif /* VMS */
/************************************************************/
/*** remaining definitions should not need to be changed ****/
/************************************************************/
/* define ASCII character values for linefeed, carriage return, control Z */
#define LF 10
#define CR 13
#define CTRLZ 26
/* error codes */
#define ERRBINF 1 /* binary file */
#define ERRSIG 2 /* interrupted by signal */
/* how to strip high bit */
#define STRIP(c) c &= 0x7f
/**** BINCHAR(c) returns nonzero if c is a binary char ****/
#ifndef BINCHAR
# define USE_TABLE /* use internal table -- see flip.c */
# define BINCHAR(c) bintab[c]
#endif
/**** mode strings for fopen() -- to work around Ultrix problem ****/
/**** (Thanks to Taso N. Devetzis for reporting this) ****/
#ifdef ULTRIX_BUG
# define WB "w"
# define RB "r"
# define R_PL_B "r+"
#else
# define WB "wb" /* write binary */
# define RB "rb" /* read binary */
# define R_PL_B "r+b" /* read + update binary */
#endif /* ULTRIX_BUG */
/* things common to most **IX systems */
#ifdef NIX
# define SPEC_INIT
# define SPEC_EXIT
# define CHECK_BREAK
# define PICKNAME
# define DELFILE unlink
# define USE_SIG
# define INT_EXIT 127
# include <sys/types.h> /* for file time */
# include <sys/stat.h> /* for file time */
typedef struct stat SGFTIME;
# define GETFT(file,name,var) fstat(fileno(file),&var)
# define SETFT(file,name,var) do { time_t x[2]; x[0] = var.st_atime; \
x[1] = var.st_mtime; utime (name, x); \
} while (0)
#endif /* NIX */
#endif /* OK_NL */