/*------------------------------------------------------------------------------

 BX source code; compile with SAS/C (smake)

*/

#include <stdlib.h>
#include <stdio.h>
#include <strings.h>
#include <exec/exec.h>
#include <dos/dosextens.h>
#include <utility/tagitem.h>
#include <clib/exec_protos.h>
#include <pragmas/exec_pragmas.h>

#include "include/basic.h"
#include "clib/basiclib_protos.h"
#include "pragmas/basiclib_pragmas.h"

struct Library *BASICBase;

int
main(int argc, char **argv)
{
    int rc = 20;

    if ((argc >= 2) && strcmp(argv[1], "?"))
    {
        if (BASICBase = OpenLibrary("BASIC.library", BASIC_VERSION))
        {
            static struct TagItem tags[] = { BASIC_FILENAME, 0, BASIC_COMMANDLINE, 0, TAG_END };

            UBYTE *program;
            UBYTE *arguments;
            UWORD  error;

            program = argv[1];

            // skip over program name and find start of arguments

            if (argc > 2)
            {
                BOOL quoted = FALSE;

                for (arguments = ((struct Process *)FindTask(NULL))->pr_Arguments; *arguments; ++arguments)
                {
                    if (*arguments == '"')
                    {
                        quoted = !quoted;
                    }
                    else if ((quoted == FALSE) && (*arguments == ' '))
                    {
                        ++arguments;

                        break;
                    }
                }
            }
            else
                arguments = NULL;

            // set options for basic_rx() command (file name and command line)

            tags[0].ti_Data = (ULONG)program;

            tags[1].ti_Data = (ULONG)arguments;

            // run program asynchronously

            if (error = basic_rx(tags))
            {
                printf("BASIC startup error %d\n", error);
            }
            else
                rc = 0;

            CloseLibrary(BASICBase);
        }
        else
            puts("Can not open BASIC.library");
    }
    else
        puts("Usage: BX PROGRAM/K");

    return(rc);
}
