mirror of
https://github.com/GnoConsortium/gno.git
synced 2024-11-18 19:09:31 +00:00
146 lines
2.7 KiB
C
146 lines
2.7 KiB
C
|
/*
|
||
|
* chtyp
|
||
|
*
|
||
|
* Sets the file/aux type for GS/OS files.
|
||
|
*
|
||
|
* $Id: chtyp.c,v 1.1 1997/10/03 05:06:50 gdr Exp $
|
||
|
*/
|
||
|
|
||
|
#include <errno.h>
|
||
|
#include <stdio.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <string.h>
|
||
|
#include <gsos.h>
|
||
|
|
||
|
#include "ftypes.h"
|
||
|
|
||
|
void usage(void);
|
||
|
void version(void);
|
||
|
|
||
|
#ifdef __STACK_CHECK__
|
||
|
#include <gno/gno.h>
|
||
|
|
||
|
static void cleanup(void)
|
||
|
{
|
||
|
(void) fprintf(stderr, "Stack Usage: %d.\n", _endStackCheck());
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
static GSString255 path;
|
||
|
|
||
|
int main(int argc, char **argv)
|
||
|
{
|
||
|
char *ftype = NULL;
|
||
|
char *atype = NULL;
|
||
|
char *lang = NULL;
|
||
|
char *left = NULL;
|
||
|
int filet = -1;
|
||
|
long auxt = -1;
|
||
|
int ch;
|
||
|
FileInfoRecGS finfo = {4, &path};
|
||
|
|
||
|
#ifdef __STACK_CHECK__
|
||
|
atexit(cleanup);
|
||
|
_beginStackCheck();
|
||
|
#endif
|
||
|
|
||
|
while((ch = getopt(argc, argv, "t:a:l:vV")) != -1)
|
||
|
switch(ch) {
|
||
|
case 't':
|
||
|
if(lang) {
|
||
|
(void) fprintf(stderr,
|
||
|
"chtyp: -t cannot be used with -l\n");
|
||
|
usage();
|
||
|
}
|
||
|
ftype = optarg;
|
||
|
break;
|
||
|
case 'a':
|
||
|
if(lang) {
|
||
|
(void) fprintf(stderr,
|
||
|
"chtyp: -a cannot be used with -l\n");
|
||
|
usage();
|
||
|
}
|
||
|
atype = optarg;
|
||
|
break;
|
||
|
case 'l':
|
||
|
if(ftype || atype) {
|
||
|
(void) fprintf(stderr,
|
||
|
"chtyp: -l cannot be used with %s%s\n",
|
||
|
ftype ? "-t" : "-a",
|
||
|
ftype && atype ? " or -a." : ".");
|
||
|
usage();
|
||
|
}
|
||
|
lang = optarg;
|
||
|
break;
|
||
|
case 'v':
|
||
|
case 'V':
|
||
|
version();
|
||
|
break;
|
||
|
default:
|
||
|
usage();
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
argc -= optind;
|
||
|
argv = argv + optind;
|
||
|
|
||
|
if(argc == 0) {
|
||
|
(void) fprintf(stderr, "chtyp: no files specified\n");
|
||
|
usage();
|
||
|
}
|
||
|
|
||
|
if(lang) {
|
||
|
if(find_lang(lang, &filet, &auxt) == -1) {
|
||
|
(void) fprintf(stderr, "chtyp: unknown language argument \"%s\".\n",
|
||
|
lang);
|
||
|
usage();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if(ftype) {
|
||
|
filet = (int) strtol(ftype, &left, 0);
|
||
|
if(errno == ERANGE || *left)
|
||
|
if(find_type(ftype, &filet, &auxt) == -1) {
|
||
|
(void) fprintf(stderr,
|
||
|
"chtyp: invalid argument to -t option.\n");
|
||
|
usage();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if(atype) {
|
||
|
errno = 0; /* be sure to reset errno! */
|
||
|
auxt = strtol(atype, (char **) NULL, 0);
|
||
|
if(errno == ERANGE) {
|
||
|
(void) fprintf(stderr, "chtyp: invalid argument to -a option.\n");
|
||
|
usage();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
ch = 0;
|
||
|
while(argc) {
|
||
|
strcpy(path.text, argv[ch]);
|
||
|
path.length = strlen(argv[ch++]);
|
||
|
GetFileInfoGS(&finfo);
|
||
|
if(filet != -1)
|
||
|
finfo.fileType = filet;
|
||
|
if(auxt != -1)
|
||
|
finfo.auxType = auxt;
|
||
|
SetFileInfoGS(&finfo);
|
||
|
argc--;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static void usage(void)
|
||
|
{
|
||
|
(void) fprintf(stderr,
|
||
|
"Usage: chtyp { [-t type] [-a auxtype] } | { [-l lang] } file ...\n");
|
||
|
exit(-1);
|
||
|
}
|
||
|
|
||
|
static void version(void)
|
||
|
{
|
||
|
(void) fprintf(stderr,
|
||
|
"V 2.0.0 Copyright 1997 by Evan Day, day@engr.orst.edu\n");
|
||
|
usage();
|
||
|
}
|