home *** CD-ROM | disk | FTP | other *** search
- /* bb.c -- BASTOC/C driver program
-
- Copyright (c) 1984 by JMI Software Consultants, Inc.
- */
- #include "upd.h"
- GLOBAL TEXT xeq[64] = {0};
-
- INT main(argc, argv)
- INT argc;
- TEXT **argv;
- {
- IMPORT BITS errors;
-
- valid(argc, argv);
- if (!errors)
- b2c2o(argc, argv);
- if (!errors)
- o2x(argc, argv);
- return (errors);
- }
-
- /* Validate command - returns YES if all files on command line
- exist and all required libraries also exist. Prints error
- messages when files can not be found.
- */
- BOOL valid(ac, av)
- INT ac;
- TEXT **av;
- {
- EXFUNC TEXT *strcpy();
- IMPORT TEXT *lib_libs[], *upd_modes[], *flags, xeq[], *c_objs[];
- IMPORT BITS errors;
- IMPORT INT mode;
- INTERN TEXT buf[80] = {0};
- INT n;
- TEXT *s;
-
- strcpy(buf, flags);
- flags = buf;
- while (--ac)
- if (**++av == '-')
- {
- s = *av + 1;
- if (*s == 'o' || *s == 'O')
- if (*++s)
- strcpy(xeq, s);
- else if (--ac)
- {
- strcpy(xeq, *++av);
- *av = "";
- }
- else
- {
- puts("Output file name missing after -o flag\n", NULL);
- errors |= BADFLAG;
- break;
- }
- else if (flags_ok(s))
- strcat(buf, s);
- else
- errors |= BADFLAG;
- }
- else if (**av == '+')
- if (0 <= (n = lookup(*av + 1, upd_modes)))
- mode = n;
- else
- {
- puts("Unknown flag ", *av, "\n", NULL);
- errors |= BADFLAG;
- }
- else if (!exists(*av))
- {
- puts("Can't access input file ", *av, "\n", NULL);
- errors |= BADFILE;
- }
- if (!exists(lib_libs[mode]))
- {
- puts("Can't access library file ", lib_libs[mode], "\n", NULL);
- errors |= BADLIBR;
- }
- if (!exists(c_objs[mode]))
- {
- puts("Can't access object file ", c_objs[mode], "\n", NULL);
- errors |= BADLIBR;
- }
- return (!errors);
- }
-
- /* Validate flags for BASTOC translator
- */
- BOOL flags_ok(s)
- TEXT *s;
- {
- IMPORT TEXT bas_flags[];
- TEXT *f, bad[2];
- BOOL success = YES;
-
- while (*s)
- {
- for (f = bas_flags; *f; ++f)
- if (*f == *s)
- break;
- if (!*f)
- {
- success = NO;
- bad[0] = *s;
- bad[1] = NULLCH;
- puts("Unknown BASTOC flag ", bad, "\n", NULL);
- }
- ++s;
- }
- return (success);
- }
-
- /* write a series of strings to standard out
- */
- /*VARARGS1*/
- LOCAL VOID puts(s)
- TEXT *s;
- {
- TEXT **ss;
-
- for (ss = &s; *ss; ++ss)
- write(1, *ss, strlen(*ss));
- }
-
- VOID b2c2o(ac, av)
- INT ac;
- TEXT **av;
- {
- EXFUNC TEXT *namcpy(), *strcpy();
- IMPORT BITS errors;
- IMPORT INT mode;
- INT l;
- TEXT *s, name[64];
-
- while (--ac)
- if (**++av != '-' && **av != '+' && **av)
- {
- l = strlen(*av);
- if (strcmp(*av+l-2, ".b") == 0 || strcmp(*av+l-4, ".bas") == 0)
- {
- s = namcpy(name, *av);
- strcpy(s, ".c");
- if (b2c(*av))
- if (cc(name, mode))
- unlink(name);
- }
- else if (strcmp(*av+l-2, ".c") == 0)
- cc(*av, mode);
- }
- }