Exemple #1
0
void start_main(int argc, char** argv, char** envp)
{
	init_process_malloc();

	init_stdfiles();
	
	init_signals();

	init_environ(envp);

	exit(main(argc, argv));
}
Exemple #2
0
int main(int argc, char *argv[])
/****************************************************************************
 *
 ***************************************************************************/
{
char	 err_file[100];
long	 err_line;
int 	 err_char;
int 	 err;
void	 *pexe;
char	 *efname = NULL;						/* Errors file name.	*/
char	 *sfname = NULL;						/* Source file name.	*/
char	 *dfname = NULL;						/* Dump file name.		*/
Boolean   runflag = TRUE;
char	 *argp;
int 	 counter;
Poco_lib *builtin_libs;

builtin_libs = get_poco_libs();

#ifndef __TURBOC__
  init_stdfiles();	/* initialize PJ stdin, stdout, etc */
#endif

signal(SIGFPE, fpe_handler);	// install floating point error trapping

for (counter = 1; counter < argc; counter++)
	{
	argp = argv[counter];
	if (*argp == '-')
		{
		switch (toupper(*++argp))
			{
			case 'C':                           /* Compile-only switch...   */
				runflag = FALSE;
				break;
#ifdef DEVELOPMENT
			case 'T':                           /* Trace... */
				po_trace_flag = TRUE;
				po_trace_file = stdout;
				break;
#endif /* DEVELOPMENT */
			case 'D':                           /* Dump file name...        */
				if (*++argp != '\0')
					dfname = argp;
				else
					dfname = "DUMP.";
				break;
			case 'O':                           /* Redirection file name... */
				if (*++argp != 0)
					efname = argp;
				else
					efname = "stdout.txt";
				break;
			case 'L':                           /* punt builtin libs...*/
				builtin_libs = NULL;
				break;
			case 'V':
				fprintf(stdout,"Poco version " VRSN_STR "\n");
				break;
			default:							/* Fat-finger case...		*/
				break;
			}
		}
	else
		{
		sfname = argp;		/* It's not a switch, must be the source file. */
		}
	}

if (NULL == sfname)
	sfname = "test.poc";

if (NULL == strchr(sfname, '.'))        /* If no '.' in name, tack on .POC */
	strcat(sfname, ".poc");

if (NULL != efname)
	if (Success != (err = open_redirect_stdout(efname)))
		{
		fprintf(stdout, "Error attempting to redirect stdout to '%s'\n", efname);
		exit(-1);
		}

if (Success == (err = compile_poco(&pexe, sfname, NULL, dfname,
					builtin_libs,
					err_file, &err_line, &err_char,
					incdirs
					)))
	{
#ifdef DEVELOPMENT
	po_run_protos = (((Poco_run_env *)pexe)->protos);	/* for trace */
#endif /* DEVELOPMENT */
	if (runflag)
		{
		err = run_poco(&pexe, NULL,
							check_abort, NULL, &err_line);
		}

	free_poco(&pexe);
	}

if (err < Success )
	{
	switch (err)
		{
		case Err_no_memory:
			fprintf(stdout,"Out of memory\n");
			break;
		case Err_no_file:
			fprintf(stdout,"Couldn't find %s\n", sfname);
			break;
		case Err_create:
			fprintf(stdout,"Couldn't create error/dump/trace files (disk full?)\n");
			break;
		case Err_syntax:
			fprintf(stdout,"Poco C syntax error.\n");
			break;
		case Err_poco_internal:
			fprintf(stdout,"Poco compiler failed self-check.\n");
			break;
		case Err_no_main:
			fprintf(stdout,"Program does not contain a main() routine.\n");
			break;
		case Err_in_err_file:
		case Err_abort:
		default:
			break;
		}
	fprintf(stdout,"Error code %d\n", err);
	}

	if (efname != NULL)
		close_redirect_stdout();

#ifndef __TURBOC__
  cleanup_lfiles(); /* cleanup PJ stdin, stdout, etc */
#endif

	return err;
}