*/
If you have a PH account, you can customize your PH profile.
*/

View \MAIN.C

An 8031/8051 assembler win source

Submitted By: Unknown
Rating: starstarstarstar (Rate It)


/*
 * main.c
 *
 * PACKAGE: as31 - 8031/8051 Assembler.
 *
 * DESCRIPTION:
 *      The file contains main(). It handles the arguments and makes
 *      sure that pass 1 is done before pass 2 etc...
 *
 * REVISION HISTORY:
 *      Jan. 19, 1990 - Created. (Ken Stauffer)
 *
 * AUTHOR:
 *      All code in this file written by Ken Stauffer (University of Calgary).
 *      January, 1990.
 */


#include <stdio.h>
#include <setjmp.h>

extern int      lineno, pass, fatal;
extern long     lc;

jmp_buf main_env;
char    *asmfile;
int     dashl = 0;
FILE    *listing;

/*
 * checkext:
 *      Check the string s, for the presence of an extenstion e.
 *      Return the position of the start of e in s.
 *      or return NULL.
 */


char *checkext(s, e)
char    *s, *e;
{
        register char *ps = s, *pe = e;

        while ( *ps )
                ps++;

        while ( *pe )
                pe++;

        for ( ; ps >= s && pe >= e && *ps == *pe; ps--, pe-- )
                if ( pe == e )
                        return(ps);

        return(NULL);
}

void main(argc, argv)
char    *argv[];
{
        FILE    *fin;
        char    *p, *dashF = NULL, *dashA = NULL;
        char    objfile[100];
        char    lstfile[100];
        int     i;

        if ( argc < 2 ) {
                fprintf(stderr, "Usage: %s [-l] [-Ffmt] [-Aarg] infile.asm\n",
                                                argv[0]);
                emitusage();
                exit(1);
        }

        for (i = 1; i < argc; i++ ) {
                if ( argv[i][0] != '-' )
                        break;

                if ( argv[i][1] == 'l' )
                        dashl = 1;
                else if ( dashF == NULL && argv[i][1] == 'F' )
                        dashF = argv[i] + 2;
                else if( dashA == NULL && argv[i][1] == 'A' )
                        dashA = argv[i]+2;
                else {
                        fprintf(stderr, "Duplicate or unknown flag.\n");
                        exit(1);
                }
        }

        if ( i == argc ) {
                fprintf(stderr, "Missing input file.\n");
                exit(1);
        }

        if ( (p = checkext(argv[i], ".asm")) == NULL ) {
                fprintf(stderr, "Input file \"%s\" must end with .asm\n",
                                argv[i]);
                exit(1);
        }

        asmfile = argv[i];

        if ( (fin = freopen(argv[i], "r", stdin)) == NULL ) {
                fprintf(stderr, "Cannot open input file: %s\n", argv[i]);
                exit(1);
        }

        if ( dashl ) {
                strcpy(lstfile, argv[i]);
                strcpy(lstfile+(p-argv[i]), ".lst");
                listing = fopen(lstfile, "w");

                if ( listing == NULL ) {
                        fprintf(stderr, "Cannot open file: %s for writting.\n",
                                lstfile);
                        exit(1);
                }
        }

        strcpy(objfile, argv[i]);
        strcpy(objfile+(p-argv[i]), ".obj");

        emitopen(objfile, dashF, dashA);

        syminit();
        fatal  = 0;
        lineno = 1;
        pass   = 0;
        lc     = 0L;

        if ( setjmp(main_env) ) {
                fclose(fin);
                emitclose();
                unlink(objfile);
                exit(1);
        }

        /*
        ** P A S S    1
        */


        yyparse();

        if ( fatal )
                longjmp(main_env, 1);

        rewind(fin);
        lineno = 1;
        pass++;
        lc = 0L;
        emitaddr(lc);

        /*
        ** P A S S    2
        */


        yyparse();

        emitclose();
        fclose(fin);

        if ( dashl )
                fclose(listing);

        exit(0);
}

corner
© 1996-2008 CommunityHeaven LLC. All rights reserved. Reproduction in whole or in part, in any form or medium without express written permission is prohibited.
Violators of this policy may be subject to legal action. Please read our Terms Of Use and Privacy Statement for more information.
North American business development: Nicolai Wadstrom. Publisher: Lars Hagelin.