int main( int argc, char **argv )
/*******************************/
{
    char    *pEnv;
    int     numArgs = 0;
    int     numFiles = 0;
    int     rc = 0;
#if WILDCARDS
    long    fh; /* _findfirst/next/close() handle, must be long! */
    struct  _finddata_t finfo;
    char    drv[_MAX_DRIVE];
    char    dir[_MAX_DIR];
    char    fname[_MAX_PATH];
#endif

#ifdef DEBUG_OUT
//    Options.debug = TRUE;
//    ModuleInfo.cref = TRUE;
    Options.print_linestore = TRUE;
#endif

#if 0 //def DEBUG_OUT    /* DebugMsg() cannot be used that early */
    int i;
    for ( i = 1; i < argc; i++ ) {
	printf("argv[%u]=>%s<\n", i, argv[i] );
    }
#endif

    pEnv = getenv( "JWASM" );
    if ( pEnv == NULL )
	pEnv = "";
    argv[0] = pEnv;

#ifndef DEBUG_OUT
    signal(SIGSEGV, genfailure);
#endif

#if CATCHBREAK
    signal(SIGBREAK, genfailure);
#else
    signal(SIGTERM, genfailure);
#endif

    MsgInit();

    while ( 1 ) {
	if ( ParseCmdline( (const char **)argv, &numArgs ) == NULL )
	    break;  /* exit if no source file name supplied */
	numFiles++;
	write_logo();
#if WILDCARDS
	if ((fh = _findfirst( Options.names[ASM], &finfo )) == -1 ) {
	    DebugMsg(("main: _findfirst(%s) failed\n", Options.names[ASM] ));
	    EmitErr( CANNOT_OPEN_FILE, Options.names[ASM], ErrnoStr() );
	    break;
	}
	_splitpath( Options.names[ASM], drv, dir, NULL, NULL );
	DebugMsg(("main: _splitpath(%s): drv=\"%s\" dir=\"%s\"\n", Options.names[ASM], drv, dir ));
 #ifdef __FULLSRCPATH /* Skip if no WILDCARDS */
 	strcpy(fname, Options.names[ASM]);
	if ( strchr(fname, '*') || strchr(fname, '?')) {
 #endif
	do {
	    _makepath( fname, drv, dir, finfo.name, NULL );
	    DebugMsg(("main: _makepath(\"%s\", \"%s\", \"%s\")=\"%s\"\n", drv, dir, finfo.name, fname ));
	    rc = AssembleModule( fname );  /* assemble 1 module */
	} while ( ( _findnext( fh, &finfo ) != -1 ) );
 #ifdef __FULLSRCPATH
 	} else { /* Use command line name -- it may be short */
	    rc = AssembleModule( fname );  /* assemble 1 module */
	}
 #endif
	_findclose( fh );
#else
	rc = AssembleModule( Options.names[ASM] );
#endif
    };
    CmdlineFini();
    if ( numArgs == 0 ) {
	write_logo();
	printf( MsgGetEx( MSG_USAGE ) );
    } else if ( numFiles == 0 )
	EmitError( NO_FILENAME_SPECIFIED );

    MsgFini();
#ifdef DEBUG_OUT
    getch();
#endif
    return( 1 - rc ); /* zero if no errors */
}
