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

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

?? cl386.c

?? 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一区二区三区免费野_久草精品视频
国产清纯美女被跳蛋高潮一区二区久久w | 日韩欧美国产1| 在线视频国产一区| 91麻豆精东视频| 99在线视频精品| 成人av片在线观看| 91视视频在线观看入口直接观看www| 国产精品香蕉一区二区三区| 国产乱对白刺激视频不卡| 国产一区二区三区综合| 国产91丝袜在线播放0| 国产大陆亚洲精品国产| 国产91丝袜在线播放| 不卡视频在线观看| 91丨porny丨国产入口| 97精品电影院| 欧美午夜精品电影| 制服.丝袜.亚洲.中文.综合| 日韩欧美国产一区二区三区 | 亚洲欧美电影院| 亚洲一区二区视频在线观看| 日韩精品一级二级 | 精品一区二区三区视频| 精品在线播放午夜| 国产不卡在线视频| 色婷婷国产精品| 777午夜精品免费视频| 日韩欧美的一区二区| 久久久99精品久久| 综合电影一区二区三区 | 亚洲综合色噜噜狠狠| 亚洲第一主播视频| 成人三级伦理片| 欧洲亚洲精品在线| 91精品久久久久久蜜臀| 国产喷白浆一区二区三区| 亚洲三级免费观看| 日产欧产美韩系列久久99| 精品亚洲免费视频| 99久久99久久精品免费观看| 欧美日本一区二区三区四区 | 热久久免费视频| 国产精品综合一区二区| 91久久人澡人人添人人爽欧美 | 同产精品九九九| 国产一区三区三区| 色妞www精品视频| 日韩女优av电影| 亚洲色图在线看| 精品一区二区三区免费观看| 91麻豆福利精品推荐| 日韩一区二区三区在线| 亚洲日本免费电影| 久久99日本精品| 在线这里只有精品| 久久尤物电影视频在线观看| 伊人一区二区三区| 国产在线播放一区三区四| 欧美伊人久久大香线蕉综合69| 精品91自产拍在线观看一区| 亚洲精品视频免费看| 国产精品亚洲一区二区三区在线 | 国产精品无码永久免费888| 亚洲一二三四在线| 国产精品69毛片高清亚洲| 欧美另类videos死尸| 国产精品国产三级国产有无不卡| 免费看黄色91| 91久久精品国产91性色tv| 久久久精品天堂| 免费av网站大全久久| 色嗨嗨av一区二区三区| 国产欧美日韩不卡| 激情五月婷婷综合| 欧美日韩精品一区二区三区 | 亚洲一区二区三区视频在线播放| 国产米奇在线777精品观看| 欧美色网一区二区| 国产精品久久二区二区| 国产精品一区二区免费不卡 | 337p粉嫩大胆噜噜噜噜噜91av| 亚洲自拍偷拍av| 精品免费国产二区三区| 亚洲小说春色综合另类电影| 成人免费毛片高清视频| 久久嫩草精品久久久精品| 蜜臀av一区二区三区| 51精品久久久久久久蜜臀| 亚洲欧美另类在线| 成人av在线网| 国产嫩草影院久久久久| 国产又黄又大久久| 精品国产免费人成在线观看| 久久精品99国产国产精| 日韩亚洲国产中文字幕欧美| 日韩高清在线一区| 欧美疯狂做受xxxx富婆| 天堂成人国产精品一区| 欧美性videosxxxxx| 一区二区在线观看免费| 色综合中文字幕| 亚洲美女视频在线观看| 色综合中文字幕国产 | 国产一区二区三区四区五区入口| 欧美一级搡bbbb搡bbbb| 首页国产欧美日韩丝袜| 欧美日韩一区二区三区免费看| 亚洲午夜精品在线| 欧美放荡的少妇| 青草国产精品久久久久久| 日韩午夜在线观看视频| 男人的天堂亚洲一区| 欧美成人伊人久久综合网| 久久精品久久精品| 久久亚区不卡日本| 亚洲一区二区影院| 国产成人亚洲精品狼色在线| 国产午夜精品久久久久久免费视 | 日本女优在线视频一区二区| 日韩一级成人av| 国产精品一区二区久久精品爱涩 | 中文字幕欧美一| 色婷婷av一区二区三区之一色屋| 夜夜精品视频一区二区| 欧美日韩精品电影| 美国十次综合导航| 国产日韩欧美激情| 色婷婷综合视频在线观看| 天堂成人国产精品一区| 欧美不卡激情三级在线观看| 国产毛片一区二区| 国产精品久久久久aaaa樱花| 在线免费观看不卡av| 秋霞影院一区二区| 国产日韩欧美综合在线| 99re热视频这里只精品| 亚洲不卡av一区二区三区| 日韩欧美激情四射| 99久久久久久| 天堂一区二区在线| 国产欧美日韩综合精品一区二区| 色欧美乱欧美15图片| 久久精品久久99精品久久| 国产欧美日韩视频一区二区| 日本韩国欧美国产| 美女性感视频久久| 中文字幕一区二区三| 91黄色免费网站| 国产裸体歌舞团一区二区| 亚洲欧美日韩国产成人精品影院 | 国产欧美一区视频| 欧美日韩大陆一区二区| 国产精品一级在线| 午夜精品久久一牛影视| 日本一区二区三区在线不卡| 欧美高清激情brazzers| 风间由美一区二区av101| 日韩黄色片在线观看| 国产精品美女久久久久久久久久久| 欧美日韩精品欧美日韩精品| 国产成人a级片| 午夜精品久久久久久久| 国产欧美日韩精品一区| 51久久夜色精品国产麻豆| 99久久伊人久久99| 久久不见久久见免费视频7| 亚洲欧美激情插| 日本一区免费视频| 日韩一区二区免费在线电影| 在线看日本不卡| 成人av网站免费观看| 狠狠狠色丁香婷婷综合激情| 亚洲主播在线观看| 国产精品色哟哟网站| 精品国内片67194| 欧美乱妇15p| 色香蕉久久蜜桃| 成人一区在线看| 精品亚洲国产成人av制服丝袜| 亚州成人在线电影| 亚洲视频在线观看一区| 国产校园另类小说区| 精品久久久久久久一区二区蜜臀| 欧美日韩国产免费一区二区 | 欧美一卡二卡三卡| 欧美男生操女生| 欧美丝袜丝交足nylons图片| 91免费版在线看| 成人v精品蜜桃久久一区| 国产在线不卡一区| 看电视剧不卡顿的网站| 日本在线观看不卡视频| 亚洲第一福利视频在线| 亚洲激情av在线| 亚洲视频 欧洲视频| 国产欧美一区二区三区网站| 国产性做久久久久久| 国产日产欧产精品推荐色| 久久综合九色综合欧美亚洲| 日韩久久精品一区|