home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
192.lha
/
Snip_v1.3
/
parse.c
< prev
next >
Wrap
C/C++ Source or Header
|
1988-04-28
|
5KB
|
182 lines
#include "snip:defs.h"
#include "ctype.h"
#include "intuition/intuitionbase.h"
typedef union bits32
{
UBYTE bytes[8];
ULONG longword[2];
} long_byte;
extern long_byte char_bitmap[];
extern short save_format, x_offset, y_offset;
extern char usage[];
extern struct FileHandle *outfilehandle;
extern struct NewWindow nwindow;
extern struct IntuitionBase *IntuitionBase;
BOOL reactivate = FALSE;
parse_args(argc,argv)
register int argc;
register char **argv;
{
register short index=1;
register struct FileHandle *out = Output();
char fname[128];
register char *filename = fname;
register struct FileHandle *fp;
register char opt;
struct Screen *Screen, *findscreen();
filename[0] = 's';
filename[1] = ':';
while (argc-- > 1)
{
if (!strcmp(argv[index],"on"))
{
if (argc <= 1)
{
Wrlen(out,usage);
return 0;
}
if ((Screen = findscreen(argv[++index])) == NULL)
{
Wr(out,"Can't locate given screen\n");
return 0;
}
nwindow.Screen = Screen;
nwindow.Type = CUSTOMSCREEN;
ScreenToFront(Screen);
argc--;
index++;
}
else if (*(argv[index]) == '-')
{
if (isdigit(opt = *(argv[index]+1)))
goto parse_offsets;
switch(opt)
{
case 'p':
save_format = WRITE_PIPE;
break;
case 'c':
save_format = PASTE_CLIPBOARD;
break;
case 's':
save_format = PRINT_STDOUT;
break;
case 'k':
save_format = TYPE_KEYBOARD;
break;
case 'K':
save_format = KEYBOARD_NOCR;
break;
case 'a':
reactivate = TRUE;
break;
case 'f':
index++;
if (argc-- <= 1)
{
Wr(out,"Please supply a filename\n");
Wrlen(out,usage);
return(0);
}
strcpy(filename+2,argv[index]);
strcat(filename+2,".fontdef");
if (!((fp=Open(filename+2,MODE_OLDFILE)) ||
(fp=Open(filename,MODE_OLDFILE))))
{
Wr(out,"Can't open font definition file\n");
return(0);
}
if (Read(fp,&char_bitmap[0],760) != 760)
{
Wr(out,"Invalid file length (should be 760)\n");
Close(fp);
return(0);
}
Close(fp);
break;
case 'o':
index++;
if (argc-- <= 1)
{
Wr(out,"Please supply an output filename\n");
Wrlen(out,usage);
return(0);
}
if (!(outfilehandle = Open(argv[index],MODE_NEWFILE)))
{
Wr(out,"Couldn't open output file!\n");
return(0);
}
break;
default:
Wr(out,"Unknown option\n");
Wrlen(out,usage);
return(0);
break;
}
index++;
}
else
{
parse_offsets:
if (argc <= 1)
{
Wr(out,"Bad syntax for offsets\n");
Wrlen(out,usage);
return(0);
}
x_offset = (short)atoi(argv[index++]);
y_offset = (short)atoi(argv[index++]);
argc--;
}
}
return(1);
}
struct Screen *findscreen(title)
char *title;
{
struct Screen *Screen;
for (Screen = IntuitionBase->FirstScreen; Screen; Screen = Screen->NextScreen)
if (!compare(title, Screen->Title) ||
(Screen->Title == NULL && !compare(title,"-null")))
return Screen;
return NULL;
}
compare(string1, string2)
char *string1, *string2;
{
while ((*string1 != '\0') && (*string1 != ' ')) {
if (toupper(*string1++) != toupper(*string2++)) /* space and null both end conditions */
return(1);
}
return(0); /* return weird values like strcmp() */
}