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

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

?? mk386.c

?? c編譯器源碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
//
//  Compile with Borland C/C++ v3.1 : bcc -v- -ml cl386.c
//  Compile with Watcom C/C++ v10.6 : wcl -y -ox -ml cl386.c
//
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dos.h>
#include <process.h>
#ifdef __TURBOC__
  #include <dir.h>
#else
  #include <direct.h>
#endif

#define VERSION "1.0"

static char usage[] = /* Usage */ \
"MK386 Version " VERSION " (c) Kirill Joss. Compile " __DATE__ "\n"
"Usage: MK386.EXE [options] files\n"
"Options:       (default parameters if first)\n"
"/l[-|+]  dump listing file        /w-xxx   disable a warning       \n"
"/i[-|+]  dump preprocessed file   /Dxxx    define something        \n"
"/e[+|-]  dump errors to file      /Ennn    max number of errors    \n"
"/k[+|-]  keep generate files      /Ipath   specify include path    \n"
"/K[-|+]  keep response files      /Lpath   specify .LIB & .OBJ dir \n"
"/A[+|-]  disable extensions       /Cxxx    codegen parameters      \n"
"/v[-|+]  debug info               /Oxxx    optimzer parameters     \n"
"/m[-|+]  generate .MAP file       /Tp      use TLINK & PMODE       \n"
"/n[-|+]  no default .LIB & .OBJ   /Tl      use TLINK & PMODE(low)  \n"
"/M[+|-]  run MAKE                 /Tw      use WLINK & PMODE/W     \n"
"/B[-|+]  build all                /Td      use WLINK & DOS/4GW     \n"
"/a       generate .ASM file       /c       generate .OBJ file      \n"
"/ename   set name of .EXE file    /opath   set out path .OBJ files \n"
"/?,/h,/H this help                @fname   specify response file   \n";


#define FALSE 0
#define TRUE  1

#define MAX_STR 256 /* Max len of string in .CFG file */

// is param ?
#define isparam(s) ( *(s) == '-' || *(s) == '/' || *(s) == '+' )
// check for NOT NULL !!!
#define chkNULL(exp, msg )  if ( !(exp) ) error( ERR_FATAL, msg )
// empty string ?
#define empty_string(s)  ( (s) == NULL || *(s) == '\0' )

typedef struct _Item {
    struct _Item *next;
    char data[1];
} Item;

typedef struct _List {
    Item *head;
    Item *tail;
    unsigned count;
} List;

Item *ItemCreate( char *dat );
#define ItemDelete(item) free(item)

void ListAdd( List *list, char *data );
void ListDelete( List *list );
int  ListFind( List *list, char *data );
void ListIter( List *list, void (*iter)( Item *) );

#define FileAdd(list, file) ListAdd((list),(file))
#define ParamAdd(list, param) ListAdd((list),(param));

List files; // list of all files

List l_inc; // list of INCLUDE path
List l_def; // list of DEFINE var
List l_cc386; // list of CC386 options

int _compile  = TRUE;
int _assemble = TRUE;
int _link     = TRUE;

int _dump_cpp = FALSE; // dump preprocessed file
int _dump_err =  TRUE; // dump error file
int _dump_lst = FALSE; // dump listing file
int _ansi     =  TRUE; // ANSI

int _map_file = FALSE; // map file
int _nodef_lib= FALSE; // no default lib
int _debug    = FALSE; // debug info

int _keep_rsp = FALSE; // keep response files
int _keep_gen = TRUE;  // keep generate files

int _make_run = TRUE;
int _build_all = FALSE;

int _output = 'p';     // Output format, same /Tx, can be 'p', 'l', 'w', 'd'

char path_lib[ _MAX_PATH ]; // path for default LIB & OBJ
char path_obj[ _MAX_PATH ]; // path for output .OBJ files
char name_exe[ _MAX_PATH ]; // name of .EXE file

 // For error()
#define ERR_NO        0  /* no error ! */
#define ERR_FATAL   128  /* fatal error */
#define ERR_RUNTIME 129  /* stdlib error - see 'errno' */

 // output errmsg & exit()
void error( int exitcode, char *msg );
 // output help & exit(0)
void help( void );
 // get parameters from <name>.CFG, CL386, cmdline ...
void get_param( char *exe_name, char *env_var, int argc, char *argv[] );
 // get parameters from file
int get_param_file( char *file );
 // get parameters from string
void get_param_str( char *str );
 // check ONE parameter
void get_one_param( char *param );
 // get ONE options
void get_option( char *param );
 // get ONE file ( can '*' & '?' )
void get_source( char *filename );
 // get ONE file without '*' & '?'
void get_one_source( char *filename );
 // find source files
void find_source( char *fpath, char *fname );
 // clear all list
void cleanup( void );
 // generate MAKEFILE.
void gen_makefile( void );
 // run overlay MAKE
void make( char *maker );


void main( int argc, char *argv[] ) {

    if ( argc == 1 ) // no argument
        help();
    get_param( argv[0], "CL386", argc - 1, argv + 1 );
    atexit( cleanup );  // set exit function
    if ( files.count == 0 ) // no files
        help();
    gen_makefile();
    cleanup();
    if ( _make_run )
        make( "MAKE.EXE" );
}


void help( void ) {
    printf( usage ); exit( 0 );
}


static char _file[ _MAX_PATH  ];
static char fdisk[ _MAX_DRIVE ];
static char fpath[ _MAX_DIR   ];
static char fname[ _MAX_FNAME ];
static char fext [ _MAX_EXT   ];


void get_param( char *exe_name, char *env_var, int argc, char *argv[] ) {
    static char _cfg[] = ".CFG";
    int i;
    char *env;

    _splitpath( exe_name, fdisk, fpath, fname, fext );
    _makepath( _file, NULL, NULL, fname, _cfg );
    if ( ! get_param_file( _file ) ) {
        _makepath( _file, fdisk, fpath, fname, _cfg );
        get_param_file( _file );
    }

    if ( (env = getenv( env_var ) ) != NULL )
        get_param_str( env );

    for ( i = 0; i < argc; i++ )
        get_one_param( argv[ i ] );
}


int get_param_file( char *file ) {
    static char str[ MAX_STR ];
    FILE *f = fopen( file, "rt" );

    if ( f == NULL )
        return FALSE;

    while( fgets( str, MAX_STR - 1, f) != NULL )
        get_param_str( str );

    fclose( f );
    return TRUE;
}


void get_param_str( char *s ) {
    char arg[ MAX_STR ];
    int  len;

    for ( len = 0; *s; s++ ) {
        if ( *s == ' ' || *s == '\t' || *s == '\n' ) {
            if ( len > 0 ) {
                arg[ len ] = '\0';
                get_one_param( arg );
            }
            arg[ len = 0 ] = '\0';
        }
        else {
            arg[ len++ ] = *s;
        }
    }

    if ( len > 0 ) {
        arg[ len ] = '\0';
        get_one_param( arg );
    }
}


void get_one_param( char *arg ) {
    if ( isparam( arg ) )                 // -X , +X or /X
        get_option( arg );
    else if ( *arg == '@' ) {               // @filename
        if ( ! get_param_file( arg + 1 )  )
            error( ERR_RUNTIME, arg + 1 );
    }
    else
        get_source( arg );             // file.ext
}


void error( int exitcode, char *msg ) {
    switch ( exitcode ) {
        case ERR_NO: break;

        case ERR_FATAL: fprintf( stderr, "Fatal : %s\n", msg );
            break;

        case ERR_RUNTIME: fprintf( stderr, "%s : %s", msg, strerror( errno ) );
            break;

        default: fprintf( stderr, "Program error : %s !\n", msg );
            break;
    }
    exit( exitcode );
}


static int setop( char *param, int *option ) {
    if ( param[2] == '-' && param[3] == '\0' )
        *option = FALSE;
    else if ( ( param[2] == '+' && param[3] == '\0' ) || param[2] == '\0' )
        *option = TRUE;
    else
        return FALSE;
    return TRUE;
}


void get_option( char *param ) {
    int len;

    switch( param[ 1 ] ) {

        case 'i' : // dump preprocessed file
            if ( setop( param, &_dump_cpp ) )
                return;
            break;

        case 'e' : // dump errors to file
            if ( setop( param, &_dump_err ) )
                return;
            else
                strupr( strncpy( name_exe, param + 2, _MAX_PATH ) );
            break;

         case 'l' : // dump listing file
            if ( setop( param, &_dump_lst ) )
                return;
            break;

        case 'A' : // disable extensions
            if ( setop( param, &_ansi ) )
                return;
            break;

        case 'm' : // gen map file
            if ( setop( param, &_map_file ) )
                return;
            break;

        case 'n' : // no default lib
            if ( setop( param, &_nodef_lib ) )
                return;
            break;

        case 'v' : // debug info
            if ( setop( param, &_debug ) )
                return;
            break;

        case 'K' : // keep response files
            if ( setop( param, &_keep_rsp ) )
                return;
            break;

        case 'k' : // keep generate files
            if ( setop( param, &_keep_gen ) )
                return;
            break;

        case 'B' : // building all
            if ( setop( param, &_build_all ) )
                return;
            break;

        case 'M' : // run make, else ONLY generate MAKEFILE.
            if ( setop( param, &_make_run ) )
                return;
            break;

        case 'a' :
            if ( param[2] == '\0' ) {
                _compile = TRUE;
                _assemble = _link = FALSE;
                return;
            }
            break;

        case 'c' :
            if ( param[2] == '\0' ) {
                _compile = _assemble = TRUE;
                _link = FALSE;
                return;
            }
            break;

        case '?' :
        case 'h' :
        case 'H' :
            help(); /* Not return ! */

        case 'D' : // define
            ParamAdd( &l_def, param + 2 );
            return;

        case 'I' : // include path
            ParamAdd( &l_inc, param + 2 );
            return;

        case 'L' : // lib path
            strupr( strncpy( path_lib, param + 2, _MAX_PATH ) );
            len = strlen( path_lib );
            if ( len > 0 && path_lib[ len - 1 ] == '\\' )
                path_lib[ len - 1 ] = '\0';
            return;

        case 'o' : // output obj path
            strupr( strncpy( path_obj, param + 2, _MAX_PATH ) );
            len = strlen( path_obj );
            if ( len > 0 && path_obj[ len - 1 ] == '\\' )
                path_obj[ len - 1 ] = '\0';
            return;

        case 'w' :
        case 'C' :
        case 'E' :
        case 'O' :
            ParamAdd( &l_cc386, param );
            return;

        case 'T' :
            if ( param[3] == '\0' )
                if ( param[2] == 'p' || param[2] == 'l' || \
                param[2] == 'w' || param[2] == 'd' ) {
                    _output = param[2]; return;
                }
            break;

    }
    fprintf( stderr, "Warning! Parameter error : %s\n", param );
}


Item *ItemCreate( char *dat ) {
    Item *item;
    int len;

    if ( empty_string( dat ) )
        return NULL;

    len = strlen( dat );

    if ( (item = (Item *)malloc( sizeof( Item ) + len )) != NULL ) {
        item->next = NULL;
        strcpy( item->data, dat );
    }

    return item;
}


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 ) {
    Item *item;

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

    item = ItemCreate( file );

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲午夜精品17c| 91精品综合久久久久久| 国产女人水真多18毛片18精品视频| 蜜臀av在线播放一区二区三区| 欧美日韩亚洲另类| 人妖欧美一区二区| 精品少妇一区二区三区视频免付费 | 国产精品久久毛片a| av不卡免费在线观看| 亚洲免费视频成人| 777奇米成人网| 国产激情91久久精品导航| 国产精品天美传媒| 欧美色精品天天在线观看视频| 日韩国产欧美三级| 久久久精品日韩欧美| 91啪在线观看| 三级久久三级久久| 国产亚洲人成网站| 99精品欧美一区| 五月激情综合色| 久久久精品欧美丰满| 91麻豆精东视频| 天天av天天翘天天综合网色鬼国产| 日韩一区二区三免费高清| 国产不卡一区视频| 偷拍与自拍一区| 国产三级精品三级| 欧美色老头old∨ideo| 狠狠色丁香久久婷婷综合丁香| 中文字幕日韩欧美一区二区三区| 国产成人午夜精品影院观看视频 | 91免费看视频| 首页国产丝袜综合| 国产精品免费视频观看| 欧美日韩成人综合天天影院 | 国产精品 欧美精品| 亚洲国产毛片aaaaa无费看| 日韩精品一区二区三区在线播放 | 男女视频一区二区| 国产嫩草影院久久久久| 欧美日本一区二区| 国产美女视频一区| 亚洲免费伊人电影| 日韩区在线观看| 成人深夜视频在线观看| 香蕉久久夜色精品国产使用方法 | 一区二区三区中文字幕电影 | 精品剧情v国产在线观看在线| 国产东北露脸精品视频| 中文字幕成人在线观看| 欧美日韩日日夜夜| 高清国产午夜精品久久久久久| 国产精品电影院| 91精品国产综合久久精品麻豆| 国产精品亚洲一区二区三区在线| 亚洲人成7777| 国产女同性恋一区二区| 欧美不卡123| 91精品国产黑色紧身裤美女| 色狠狠色狠狠综合| 99精品一区二区三区| 国产麻豆成人精品| 精品一区二区三区不卡| 久久精品二区亚洲w码| 亚洲成va人在线观看| 亚洲精品国产无天堂网2021| 亚洲欧洲日本在线| 国产精品久久久久久久岛一牛影视| 久久―日本道色综合久久| 欧美电视剧免费观看| 制服丝袜中文字幕亚洲| 欧美日韩国产综合视频在线观看 | 日韩精品一区二区三区老鸭窝| 欧美日韩综合一区| 精品视频在线看| 色成年激情久久综合| 亚洲国产成人91porn| 国产精品久久久久久久久免费桃花 | 337p粉嫩大胆色噜噜噜噜亚洲| 欧美日韩成人在线| 欧美老年两性高潮| 欧美精品乱码久久久久久| 欧美影院精品一区| 欧美日韩国产在线播放网站| 欧美区视频在线观看| 91超碰这里只有精品国产| 91精品国产色综合久久不卡电影| 国产人成一区二区三区影院| 国产欧美一区二区精品性| 亚洲国产成人自拍| 亚洲精品视频在线观看网站| 亚洲精品国产成人久久av盗摄| 亚洲精品菠萝久久久久久久| 亚洲第四色夜色| 麻豆91在线播放免费| 国产一区二区三区在线观看免费| 国产成人精品影院| 99国产精品久久久久| 色成年激情久久综合| 日韩午夜在线影院| 亚洲国产成人私人影院tom| 悠悠色在线精品| 麻豆精品一区二区av白丝在线| 理论电影国产精品| 国产美女主播视频一区| 91蜜桃网址入口| 56国语精品自产拍在线观看| 久久久久青草大香线综合精品| 亚洲人妖av一区二区| 视频一区视频二区中文字幕| 韩日av一区二区| 日本韩国精品一区二区在线观看| 欧美中文字幕亚洲一区二区va在线| 在线观看三级视频欧美| 精品污污网站免费看| 成人一级片在线观看| 色av综合在线| 欧美精品久久天天躁| 欧美大胆一级视频| 国产亚洲福利社区一区| 亚洲狠狠丁香婷婷综合久久久| 日韩专区一卡二卡| 美女视频一区二区| 成人永久免费视频| 欧美日韩一区不卡| 久久久91精品国产一区二区三区| 国产精品国产三级国产三级人妇 | 欧美一区二区三区电影| 中文字幕精品一区| 经典三级视频一区| 欧美日韩另类一区| 中国色在线观看另类| 美女一区二区三区| 91国内精品野花午夜精品| 国产清纯美女被跳蛋高潮一区二区久久w | 色综合久久中文字幕| 久久免费美女视频| 日韩一区精品视频| 日本韩国一区二区| 国产精品国产三级国产aⅴ原创| 麻豆极品一区二区三区| 欧美肥大bbwbbw高潮| 亚洲另类在线视频| 成人中文字幕电影| 国产日产亚洲精品系列| 奇米影视一区二区三区小说| 精品视频色一区| 亚洲综合色婷婷| 91在线观看地址| 亚洲视频一区在线| 9i看片成人免费高清| 国产精品午夜在线| 粉嫩绯色av一区二区在线观看| 欧美va在线播放| 首页综合国产亚洲丝袜| 欧美日韩电影在线播放| 亚洲一二三专区| 久久综合九色综合97婷婷女人 | 91福利区一区二区三区| 国产精品精品国产色婷婷| 成人激情视频网站| 国产欧美一区二区精品忘忧草| 久久91精品久久久久久秒播| 51午夜精品国产| 天使萌一区二区三区免费观看| 欧美日韩一区二区三区在线看| 尤物视频一区二区| 欧美吞精做爰啪啪高潮| 亚洲综合久久久久| 欧美日韩在线观看一区二区| 一区二区三区产品免费精品久久75| 99re成人在线| 一区二区三区四区在线| 欧美午夜电影在线播放| 午夜精品久久久久久久久| 欧美日韩黄色影视| 美女视频黄免费的久久| 精品噜噜噜噜久久久久久久久试看 | 美女视频第一区二区三区免费观看网站| 欧美三级日韩三级国产三级| 亚洲成人av中文| 日韩欧美电影一区| 国产成人av电影在线| 亚洲视频在线观看三级| 精品视频一区二区不卡| 久久国产成人午夜av影院| 久久综合久久鬼色中文字| 成人午夜伦理影院| 亚洲欧美偷拍三级| 欧美精品久久天天躁| 国产成人在线色| 一区二区三区精密机械公司| 欧美精品在线观看一区二区| 国产一区二区三区精品视频| 亚洲人精品午夜| 日韩一区二区三区高清免费看看| 国产精品99久| 一区二区三区在线视频免费| 欧美一区2区视频在线观看|