* src/SDCCsymt.h: removed RESULT_CHECK
[fw/sdcc] / as / z80 / asmain.c
index 9096bbf7f28bc794f0fd5bd339b2125428c00e19..72c5b98958e12a1925025331a0ef67f60820afd1 100644 (file)
@@ -160,6 +160,21 @@ main(int argc, char **argv)
        register int c, i;
        struct area *ap;
 
+       /* Check to make sure there are the right number of filenames */
+       /* before openning any of them */
+#ifdef SDK
+       inpfil = -2;
+#else /* SDK */
+       inpfil = -1;
+#endif /* SDK */
+       for (i=1; i<argc; ++i) {
+               p = argv[i];
+               if (*p != '-')
+                       inpfil++;
+       }
+       if (inpfil < 0)
+               usage();
+
 #ifdef SDK
        inpfil = -2;
 #else /* SDK */
@@ -556,12 +571,13 @@ loop:
         * symbol, assembler directive, or assembler mnemonic is
         * being processed.
         */
-       if ((ctype[c] & LETTER) == 0)
-               if (flevel) {
-                       return;
-               } else {
+       if ((ctype[c] & LETTER) == 0) {
+               if (flevel) {
+                        return;
+                } else {
                        qerr();
                }
+        }
        getid(id, c);
        c = getnb();
        /*
@@ -838,7 +854,7 @@ loop:
                break;
 
        case S_MODUL:
-               getst(id, -1);
+               getst(id, getnb()); // a module can start with a digit
                if (pass == 0) {
                        if (module[0]) {
                                err('m');
@@ -849,6 +865,19 @@ loop:
                lmode = SLIST;
                break;
 
+    case S_OPTSDCC:
+               p = optsdcc;
+               if ((c = getnb()) != 0) {
+                       do {
+                               if (p < &optsdcc[NINPUT-1])
+                                       *p++ = c;
+                       } while ((c = get()) != 0);
+               }
+               *p = 0;
+               unget(c);
+               lmode = SLIST;
+        break;
+
        case S_GLOBL:
                do {
                        getid(id, -1);
@@ -1023,30 +1052,36 @@ char *fn;
 char *ft;
 int wf;
 {
-       register char *p1, *p2, *p3;
+       register char *p2, *p3;
        register int c;
        FILE *fp;
 
-       p1 = fn;
        p2 = afn;
        p3 = ft;
-       while ((c = *p1++) != 0 && c != FSEPX) {
-               if (p2 < &afn[FILSPC-4])
-                       *p2++ = c;
-       }
+
+       strcpy (afn, fn);
+       p2 = strrchr (afn, FSEPX);              // search last '.'
+       if (!p2)
+               p2 = afn + strlen (afn);
+       if (p2 > &afn[FILSPC-4])                // truncate filename, if it's too long
+               p2 = &afn[FILSPC-4];
        *p2++ = FSEPX;
-       if (*p3 == 0) {
-               if (c == FSEPX) {
-                       p3 = p1;
-               } else {
-                       p3 = dsft;
-               }
+
+       // choose a file-extension
+       if (*p3 == 0) {                                 // extension supplied?
+               p3 = strrchr (fn, FSEPX);       // no: extension in fn?
+               if (p3)
+                       ++p3;
+               else
+                       p3 = dsft;                                      // no: default extension
        }
-       while ((c = *p3++) != 0) {
+
+       while ((c = *p3++) != 0) {              // strncpy
                if (p2 < &afn[FILSPC-1])
                        *p2++ = c;
        }
        *p2++ = 0;
+
        if ((fp = fopen(afn, wf?"w":"r")) == NULL) {
                fprintf(stderr, "%s: cannot %s.\n", afn, wf?"create":"open");
                asexit(1);