
#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() */
}

