home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Columbia Kermit
/
kermit.zip
/
old
/
ckermit70
/
ckldef.c
< prev
next >
Wrap
C/C++ Source or Header
|
2020-01-01
|
2KB
|
85 lines
/* C K L D E F
* Process command line arguments, and produce a C-language header file
* with the arguments #defined in it. Can be used in lieu of the "normal"
* -DSYMBOL construct found in most C compilers.
*/
#include <string.h>
#include <stdio.h>
#define CV char_varying
extern void s$parse_command (CV(32) *name, short *status, ...);
static CV(32) caller = "make_defines";
static CV(40) file_def = "output:pathname,required";
static CV(40) read_def = "switch(-read),=1";
static CV(40) symb_def = "symbols:string(*)";
static CV(3) end_def = "end";
void
ckldef (void)
{
short status;
CV(256) out_path_cv;
char out_path[257];
FILE *out_file;
char in_name[L_tmpnam];
FILE *in_file;
short i;
short read_sw;
CV(256) *cvp;
char buff[BUFSIZ];
char *cp;
struct arglist
{
short num_args;
short arg_length;
short array_bound;
CV(256) args[1];
} *arglistp;
s$parse_command (&caller, &status,
&file_def, &out_path_cv,
&read_def, &read_sw,
&symb_def, &arglistp,
&end_def);
if (status)
return;
strcpy (out_path, &out_path_cv);
if (read_sw)
{
tmpnam (in_name);
rename (out_path, in_name);
in_file = fopen (in_name, "r");
}
out_file = fopen (out_path, "w+");
if (out_file == NULL)
{
fprintf (stderr, "Cannot open %s for write/create\n", out_path);
return;
}
if (in_file)
{
while (NULL != (cp = fgets (buff, sizeof buff, in_file)))
{
if (buff[0] != '#')
{
fputs (buff, out_file);
}
}
fclose (in_file);
remove (in_name);
}
if (arglistp && arglistp->num_args)
for (i = 0; i < arglistp->num_args; i++)
fprintf (out_file, "#define %v\n", &arglistp->args[i]);
fclose (out_file);
}