亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? cl386.c

?? 本程序集是Allen I. Holub所寫的《Compiler Design in C》一書的附隨軟件
?? C
?? 第 1 頁 / 共 2 頁
字號:
    return name;
}


char *FileExt ( Item *item ) {
	_splitpath( item->data, disk, path, name, ext );
	return ext;
}


void ListDelete( List *list ) {
	Item *p, *q;

	chkNULL( list, "Pointer is NULL !" );

	for( p = list->head; p; p = q ) {
		q = p->next;
		free(p);
	}
	list->head = list->tail = NULL;
	list->count = 0;
}


void ListAdd( List *list, char *file, int tmp ) {
	Item *item;

	chkNULL( list, "Pointer is NULL !" );

	item = ItemCreate( file, tmp );

	chkNULL( item, "Out of memory !" );

	if ( list->count == 0 )
		list->head = list->tail = item;
	else {
		(list->tail)->next = item;
		list->tail = item;
	}
	list->count++;
}


void ListIter( List *list, void (*iter)( Item *) ) {
	Item *p;

	chkNULL( list, "Pointer is NULL !" );

	if ( list->count && iter ) {
		for ( p = list->head; p; p = p->next )
			(*iter)(p);
	}
}


static char *need;
static int found = 0;


static void find( Item *item ) {
	if ( strcmp( item->data, need ) == 0 )
		found = 1;
}


int  ListFind( List *list, char *data ) {
	found = 0;
	need = data;
	ListIter( list, find );
	return found;
}


char findpath[ _MAX_PATH ];
char findname[ _MAX_PATH ];


void get_source( char *filename ) {
	_splitpath( filename, disk, path, name, ext );

	if ( strchr( filename, '?' ) || strchr( filename, '*' ) ) {  /* Check for '*' and '?' */
		_makepath( findpath, disk, path, NULL, NULL );
		_makepath( findname, NULL, NULL, name, ext );
		find_source( findpath, findname );
	}
	else
		get_one_source( filename );
}

#ifdef __TURBOC__

void find_source( char *fpath, char *fname ) {
	int fpath_len = strlen( fpath );
	struct ffblk fb;

	if ( !findfirst( strcat( fpath, fname), &fb, FA_ARCH) )
	do {
		fpath[ fpath_len ] = '\0';
		get_one_source( strcat( fpath, fb.ff_name) );
	} while (! findnext(&fb) );
}


#else


void find_source( char *fpath, char *fname ) {
	int fpath_len = strlen( fpath );
	struct find_t fb;

	if (!_dos_findfirst( strcat( fpath, fname), _A_NORMAL, &fb ) )
	do {
		fpath[ fpath_len ] = '\0';
		get_one_source( strcat( fpath, fb.name) );
	} while( ! _dos_findnext( &fb ) );
}

#endif

void get_one_source( char *srcfile ) {
    int temp = FALSE;
    static char file[ _MAX_PATH ];
    static char disk[ _MAX_DRIVE ];
    static char path[ _MAX_DIR ];
    static char name[ _MAX_FNAME ];
	static char ext [ _MAX_EXT ];

	strncpy( file, srcfile, _MAX_PATH );
    _splitpath( strupr(file) , disk, path, name, ext );
//  _makepath( file, disk, path, name, ext );

    if ( strcmp( ext, _ASM ) != 0 && \
         strcmp( ext, _OBJ ) != 0 && strcmp( ext, _LIB ) != 0 ) {
        if ( ListFind( &f_cpp, file ) )
            fprintf( stderr, "Warning! File already exist : %s\n", file );
        else
            FileAdd( &f_cpp, file, temp++ );
#ifdef TO_CURR_DIR
		_makepath( file, disk, NULL, name, strcpy( ext, _ASM ) );
#else
        _makepath( file, disk, path, name, strcpy( ext, _ASM ) );
#endif
    }

    if ( strcmp( ext, _ASM ) == 0 ) {
		if ( ListFind( &f_asm, file ) )
			fprintf( stderr, "Warning! File already exist : %s\n", file );
		else
            FileAdd( &f_asm, file, temp++ );
        _makepath( file, disk, path, name, strcpy( ext, _OBJ) );
    }

    if ( strcmp( ext, _OBJ ) == 0 ) {
        if ( ListFind( &f_obj, file ) )
            fprintf( stderr, "Warning! File already exist : %s\n", file );
        else
            FileAdd( &f_obj, file, temp++ );
    }

    if ( strcmp( ext, _LIB ) == 0 ) {
        if ( ListFind( &f_lib, file ) )
            fprintf( stderr, "Warning! File already exist : %s\n", file );
        else
            FileAdd( &f_lib, file, 0 );
    }
}


void DeleteList( void ) {  // delete all list from memory
	ListDelete( &f_cpp );
	ListDelete( &f_asm );
	ListDelete( &f_obj );
	ListDelete( &f_lib );
	ListDelete( &l_def );
	ListDelete( &l_inc );
//    ListDelete( &l_lib );
	ListDelete( &l_cc386 );
}

void DeleteAll( void ) {   // for atexit()
	DeleteList();
	if ( !_keep_rsp ) {
		remove( COMPILER_RSP );
		remove( ASSEMBLER_RSP );
		remove( LINKER_RSP );
		remove( DELETE_RSP );
	}
}

void exec( char *prg, char *rsp ) {
	static char *args[3];
	int err;

	args[0] = prg;
	args[1] = rsp;
	args[2] = NULL;

	err = spawnvp( P_WAIT, prg, args );

	if ( err <  0 )
		error( ERR_RUNTIME, prg );
	else if ( err > 0 )
		error( err, prg );
}


FILE *frsp;


static void compile_def  ( Item *p ) { fprintf( frsp, " /D%s", p->data ); }
static void compile_inc  ( Item *p ) { fprintf( frsp, "%s;", p->data ); }
static void compile_opt  ( Item *p ) { fprintf( frsp, " %s", p->data ); }
static void compile_files( Item *p ) { fprintf( frsp, "\n%s", p->data ); }

static void compile_rsp( char *file, char *def_opt ) {
	frsp = fopen( file, "wt" );
	if ( frsp == NULL )
		error( ERR_RUNTIME, file );
	fprintf( frsp, " %s", def_opt );
	ListIter( &l_cc386, compile_opt );
	fprintf( frsp, " %ci", ( _dump_cpp ? '+' : '-' ) );
	fprintf( frsp, " %ce", ( _dump_err ? '+' : '-' ) );
	fprintf( frsp, " %cl", ( _dump_lst ? '+' : '-' ) );
	fprintf( frsp, " %cA", (     _ansi ? '+' : '-' ) );
	ListIter( &l_def, compile_def );
	if ( l_inc.count > 0 ) {
		fprintf( frsp, " /I" );
		ListIter( &l_inc, compile_inc );
	}
	ListIter( &f_cpp, compile_files );
	fprintf( frsp, "\n" );
	fclose( frsp );
}

void compile( void ) {
	if ( _compile /* && f_cpp.count > 0 */ )
	{
//		compile_rsp( COMPILER_RSP, COMPILER_OPT );
		exec( COMPILER, "/f" COMPILER_RSP );
		if ( !_keep_rsp )
			remove( COMPILER_RSP );
//		ListDelete( &f_cpp );
//		ListDelete( &l_cc386 );
	}
}

static void delete_temp( Item *p ) { if ( p->temp ) remove( p->data ); }

static void assemble_def( Item *p ) { fprintf( frsp, " /d%s", p->data ); }
static void assemble_inc( Item *p ) { fprintf( frsp, " /i%s", p->data ); }

char *asm_opt;

static void gen_for_asm( Item *p ) {
	fprintf( frsp, " %s", asm_opt );
	fprintf( frsp, " /z%c", ( _debug ? 'i' : 'n' ) );
	ListIter( &l_inc, assemble_inc );
	ListIter( &l_def, assemble_def );
	if ( _dump_lst )
		fprintf( frsp, " %s,%s%s%s.OBJ,%s%s%s.LSA;\n", p->data,
			FileDisk(p), FilePath(p), FileName(p),
			FileDisk(p), FilePath(p), FileName(p) );
	else
		fprintf( frsp, " %s,%s%s%s.OBJ,NUL;\n", p->data,
			FileDisk(p), FilePath(p), FileName(p) );
}

void assemble_rsp( char *file, char *def_opt ) {
	frsp = fopen( file, "wt" );
	if ( frsp == NULL )
		error( ERR_RUNTIME, file );
	asm_opt = def_opt;
	ListIter( &f_asm, gen_for_asm );
	fclose( frsp );
}

void assemble(void) {
	if ( _assemble /* && f_asm.count > 0 */ )
	{
//		assemble_rsp( ASSEMBLER_RSP, ASSEMBLER_OPT );
		exec( ASSEMBLER, "@" ASSEMBLER_RSP );
		if ( !_keep_rsp )
			remove( ASSEMBLER_RSP );
//		if ( !_keep_gen )
//			ListIter( &f_asm, delete_temp );
//		ListDelete( &f_asm );
//		ListDelete( &l_def );
//		ListDelete( &l_inc );
	}
}


char *first( void ) {
	if ( strlen( _exename ) > 0 )
		return _exename;
	else if ( f_obj.count > 0 )
		return FileName( f_obj.head );
	else if ( f_lib.count > 0 )
		return FileName( f_lib.head );
	else
		return NULL;
}

char *libpath( char *lib ) {
	static char library[ _MAX_PATH ];
	strcpy( library, _libpath );
	if ( library[ strlen( library) - 1 ] != '\\' )
		strcat( library, "\\" );
	return strcat( library, lib );
}

static void out_obj( Item *p ) { fprintf( frsp, " %s", p->data ); }

void tlink_rsp( char *file ) {
	char *name = first();

	frsp = fopen( file, "wt" );
	if ( frsp == NULL )
		error( ERR_RUNTIME, file );
	fprintf( frsp, "/3/c/d" );
	if ( _map_file )
		fprintf( frsp, "/m/l/s" );
	else
		fprintf( frsp, "/x" );
	if ( _debug )
		fprintf( frsp, "/v" );
	if ( !_nodef_lib ) {
		if ( _output == 'p' )
			fprintf( frsp, " %s", \
				libpath( ( _debug ? "C0DOSD.OBJ" : "C0DOS.OBJ" ) )  );
		else
			fprintf( frsp, " %s", \
				libpath( ( _debug ? "C0DOSLD.OBJ" : "C0DOSL.OBJ" ) )  );
	}
	ListIter( &f_obj, out_obj );
	fprintf( frsp, ",%s,%s,", name, name );
	if ( !_nodef_lib )
		fprintf( frsp, " %s", libpath( "CLDOS.LIB" )  );
	ListIter( &f_lib, out_obj );
	fprintf( frsp, "\n" );
	fclose( frsp );
}

void tlink(void) {
//	tlink_rsp( LINKER_RSP );
	exec( TLINK, "@" LINKER_RSP );
}

static void wout_obj( Item *p) { fprintf( frsp, "file %s\n", p->data ); }
static void wout_lib( Item *p) { fprintf( frsp, "library %s\n", p->data ); }

void wlink_rsp( char *file ) {
	char *name = first();

	frsp = fopen( file, "wt" );
	if ( frsp == NULL )
		error( ERR_RUNTIME, file );
	fprintf( frsp, "# Generate from CL386.EXE\n" );
	fprintf( frsp, "format os2 le\n" );
	fprintf( frsp, "option nod\n" );
	if ( _map_file )
		fprintf( frsp, "option map\n" );
	if ( _debug )
		fprintf( frsp, "option symf\n" );
	if ( _output == 'w' )
		fprintf( frsp, "option osname='CC386+PMODE/W'\n"
					   "option stub=%s\n", libpath( "PMODEW.EXE" ) );
	else
		fprintf( frsp, "option osname='CC386+DOS/4GW'\n"
					   "option stub=%s\n", libpath( "D4GWSTUB.EXE" ) );
	fprintf( frsp, "name %s\n", name );

	if ( !_nodef_lib )
		fprintf( frsp, "file %s\n",
			libpath( ( _debug ? "C0DOSWD.OBJ" : "C0DOSW.OBJ" ) )  );

	ListIter( &f_obj, wout_obj );

	if ( !_nodef_lib )
		fprintf( frsp, "library %s", libpath( "CLDOS.LIB" )  );

	ListIter( &f_lib, wout_lib );
	fclose( frsp );
}

void wlink(void) {
//	wlink_rsp( LINKER_RSP );
	exec( WLINK, "@" LINKER_RSP );
}

void link(void) {
	if ( _link /* && ( f_obj.count > 0 || f_lib.count > 0 ) */ )
	{
		if ( _output == 'p' || _output == 'l' )
			tlink();
		else if ( _output == 'w' || _output == 'd' )
			wlink();
		else
			printf( "Unknow link!\n" );
		if ( !_keep_rsp )
			remove( LINKER_RSP );
//		if ( !_keep_gen )
//			ListIter( &f_obj, delete_temp );
//		ListDelete( &f_obj );
//		ListDelete( &f_lib );
	}
}

static void delete_file(Item *p) {
	if (p->temp)
		fprintf( frsp, "%s\n", p->data );
}

void delete_rsp( char *file ) {
	frsp = fopen( file, "wt" );
	if ( frsp == NULL )
		error( ERR_RUNTIME, file );
	ListIter( &f_asm, delete_file );
	ListIter( &f_obj, delete_file );
	fclose( frsp );
}

void response( void ) {
	if ( _compile && f_cpp.count > 0 ) {
		compile_rsp( COMPILER_RSP, COMPILER_OPT );
	}
	if ( _assemble && f_asm.count > 0 )	{
		assemble_rsp( ASSEMBLER_RSP, ASSEMBLER_OPT );
	}
	if ( _link && ( f_obj.count > 0 || f_lib.count > 0 ) ) {
		if ( _output == 'p' || _output == 'l' )
			tlink_rsp( LINKER_RSP );
		else if ( _output == 'w' || _output == 'd' )
			wlink_rsp( LINKER_RSP );
	}
	delete_rsp( DELETE_RSP );
}

void remove_temp( void ) {
	int len;
	char s[ _MAX_PATH ];

	if ( !_keep_gen ) {

		frsp = fopen( DELETE_RSP, "rt" );
		if ( frsp == NULL )
			error( ERR_RUNTIME, DELETE_RSP );

		while( fgets( s, _MAX_PATH, frsp ) != NULL ) {
			len = strlen( s );
			if ( len > 0 && s[ len - 1] == '\n' )
				s[ len - 1 ] = '\0';
			remove( s );
		}
		fclose( frsp );
	}
	if ( !_keep_rsp )
		remove( DELETE_RSP );
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲电影第三页| 亚洲高清免费一级二级三级| 91精品在线一区二区| 亚洲福利电影网| 一区二区三区四区激情| 欧美高清在线一区二区| 国产精品的网站| 91精品国产麻豆| 欧美高清视频www夜色资源网| 99精品视频一区二区| 99热精品国产| 91在线国产观看| 91视频你懂的| 欧美区一区二区三区| 制服视频三区第一页精品| 日韩免费在线观看| 中文字幕电影一区| 一区二区三区电影在线播| 亚洲与欧洲av电影| 日韩va欧美va亚洲va久久| 无码av免费一区二区三区试看| 一区二区久久久| 视频在线观看一区二区三区| 久久成人羞羞网站| 紧缚捆绑精品一区二区| 成人黄色在线网站| 欧美性欧美巨大黑白大战| 欧美四级电影在线观看| 欧美一区二区三区爱爱| 亚洲精品在线网站| 亚洲女同ⅹxx女同tv| 亚洲高清在线精品| 国产麻豆视频一区二区| 成人精品小蝌蚪| 欧洲国内综合视频| 欧美va亚洲va在线观看蝴蝶网| 国产精品网友自拍| 日韩中文欧美在线| 国产一区激情在线| 欧美自拍偷拍一区| 久久老女人爱爱| 一区二区三区中文字幕电影| 久久69国产一区二区蜜臀 | 免费观看日韩av| 国产精品99久久久久久有的能看 | 91蜜桃免费观看视频| 日韩午夜av一区| 亚洲精品写真福利| 国产在线精品视频| 91精品国产综合久久婷婷香蕉| 中文字幕二三区不卡| 伦理电影国产精品| 欧美三级电影一区| 国产精品成人网| 久久国产日韩欧美精品| 91浏览器打开| 国产精品精品国产色婷婷| 蜜桃av一区二区三区| 色综合久久久网| 精品免费一区二区三区| 一区二区三区成人在线视频| 成人黄色免费短视频| 久久亚区不卡日本| 老司机午夜精品99久久| 91精品国产手机| 调教+趴+乳夹+国产+精品| 91蝌蚪porny| 1区2区3区精品视频| 国产精品综合网| 色婷婷综合在线| 亚洲精品乱码久久久久久日本蜜臀| 国产一区 二区 三区一级| 欧美v日韩v国产v| 亚洲综合色婷婷| 日本精品视频一区二区| 亚洲桃色在线一区| 91香蕉视频在线| 一色桃子久久精品亚洲| 色综合色狠狠综合色| 亚洲男人的天堂网| 99精品偷自拍| 亚洲尤物视频在线| 欧美精品久久99久久在免费线| 一区二区三区四区不卡在线| 在线观看av一区| 日韩精品一二区| 337p粉嫩大胆色噜噜噜噜亚洲 | 久久九九久精品国产免费直播| 美女网站视频久久| 精品捆绑美女sm三区| 国产一区二区精品久久99 | 99re在线视频这里只有精品| 亚洲人吸女人奶水| 91片在线免费观看| 亚洲麻豆国产自偷在线| 欧美日韩国产一级| 国产九色sp调教91| 一区二区三区四区乱视频| 色婷婷综合久久久中文一区二区| 五月婷婷久久综合| 久久久久国色av免费看影院| 99久久国产综合精品麻豆| 亚洲一区二区在线免费看| 51精品国自产在线| 国产aⅴ精品一区二区三区色成熟| 国产精品电影一区二区三区| 欧美日韩精品一区视频| 激情六月婷婷久久| 亚洲摸摸操操av| 日韩你懂的在线播放| jizzjizzjizz欧美| 美女视频黄免费的久久 | 成人黄色片在线观看| 亚洲一卡二卡三卡四卡无卡久久| 日韩欧美高清一区| 一本一道综合狠狠老| 麻豆一区二区在线| 一区二区三区日韩精品| 久久影院视频免费| 欧美日韩免费在线视频| 福利一区二区在线| 蜜桃精品视频在线| 亚洲一级在线观看| 中文字幕在线观看不卡视频| 欧美一区二区福利在线| 51精品国自产在线| 日本乱人伦aⅴ精品| 高清国产一区二区三区| 美女mm1313爽爽久久久蜜臀| 综合婷婷亚洲小说| 中文字幕精品综合| 日韩精品中文字幕在线不卡尤物 | 国产精品久久久久久久裸模| 欧美日韩午夜影院| 91一区一区三区| 粉嫩欧美一区二区三区高清影视| 日韩av一二三| 亚洲va天堂va国产va久| 亚洲欧美在线视频| 国产精品无码永久免费888| 精品久久一区二区| 日韩三级在线观看| 欧美一区二区三区四区在线观看| 在线观看一区二区精品视频| 懂色av噜噜一区二区三区av| 国产精品一区在线观看乱码 | 亚洲黄网站在线观看| 国产三级三级三级精品8ⅰ区| 日韩精品专区在线影院重磅| 日韩欧美另类在线| 7777精品伊人久久久大香线蕉| 欧洲一区在线电影| 67194成人在线观看| 91精品国产欧美日韩| 日韩一区二区三区视频在线| 制服丝袜一区二区三区| 欧美另类高清zo欧美| 日韩欧美国产综合| 日韩精品专区在线影院观看| 欧美精品一区二区三区在线播放| 日韩一区二区三区电影| 日韩一区二区视频在线观看| xf在线a精品一区二区视频网站| 日韩一二三四区| 欧美刺激午夜性久久久久久久| 2017欧美狠狠色| 国产精品久久久久一区| 综合久久综合久久| 亚洲一区二区黄色| 亚洲va欧美va人人爽| 国产自产v一区二区三区c| 国产不卡视频在线播放| av在线这里只有精品| 欧美三级欧美一级| 精品国产一区二区三区不卡 | 色综合一个色综合亚洲| 欧美在线一区二区| 91精品国产综合久久精品| 久久精品水蜜桃av综合天堂| 国产精品美女一区二区三区| 一区二区三区四区激情| 久久国产剧场电影| 9l国产精品久久久久麻豆| 欧美色偷偷大香| 国产日韩影视精品| 亚洲激情综合网| 国产精品88888| 欧美三级视频在线| 精品久久人人做人人爽| 亚洲乱码国产乱码精品精的特点| 青青青爽久久午夜综合久久午夜| 国产91精品入口| 欧美日韩大陆在线| 国产精品区一区二区三| 日本91福利区| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 国产精品第四页| 麻豆91在线看| 欧美日韩国产精品成人| 国产日韩综合av|