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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? front.c

?? 支持?jǐn)?shù)字元件仿真的SPICE插件
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):
/* RCS Info: $Revision: 1.1 $ on $Date: 91/04/02 12:04:13 $ *           $Source: //pepper/atesse_spice/spice3/CP/RCS/front.c,v $ * Copyright (c) 1985 Wayne A. Christopher, U. C. Berkeley CAD Group * * The front-end command loop.  There are some tricky things that we have to * do here... */#include "prefix.h"#include "CPdefs.h"#include "suffix.h"static char *doblock();static void docommand();static void dodump();static struct control *findlabel();static wordlist *getcommand();static void pwlist();/* Return values from doblock().  I am assuming that nobody will use these * characters in a string. */#define NORMAL      '\001'#define BROKEN      '\002'#define CONTINUED   '\003'#define NORMAL_STR  "\001"#define BROKEN_STR  "\002"#define CONTINUED_STR   "\003"/* Are we waiting for a command? This lets (void) signal handling be more clever. */bool cp_cwait = false;      char *cp_csep = ";";bool cp_dounixcom = false;/* Stuff to do control structures. We keep a history (seperate from the * cshpar history, for now at least) of commands and their event numbers, * with a block considered as a statement. In a goto, the first word in * co_text is where to go, likewise for label. For conditional controls, * we have to call ft_getpnames and ft_evaluate each time, since the * dvec pointers will change... Also we should do variable and backquote * substitution each time... */struct control {    int co_type;            /* One of CO_* ... */    wordlist *co_cond;      /* if, while, dowhile */    char *co_foreachvar;        /* foreach */    int co_numtimes;        /* repeat, break & continue levels */    wordlist *co_text;      /* Ordinary text and foreach values. */    struct control *co_parent;  /* If this is inside a block. */    struct control *co_children;    /* The contents of this block. */    struct control *co_elseblock;   /* For if-then-else. */    struct control *co_next;    struct control *co_prev;} ;#define CO_UNFILLED 0#define CO_STATEMENT    1#define CO_WHILE    2#define CO_DOWHILE  3#define CO_IF       4#define CO_FOREACH  5#define CO_BREAK    6#define CO_CONTINUE 7#define CO_LABEL    8#define CO_GOTO     9#define CO_REPEAT   10/* We have to keep the control structures in a stack, so that when we do * a 'source', we can push a fresh set onto the top...  Actually there have * to be two stacks -- one for the pointer to the list of control structs, * and one for the 'current command' pointer... */#define CONTROLSTACKSIZE 256    /* Better be enough. */static struct control *control[CONTROLSTACKSIZE], *cend[CONTROLSTACKSIZE];static int stackp = 0;/* If there is an argument, give this to cshpar to use instead of stdin. In * a few places, we call cp_evloop again if it returns 1 and exit (or close * a file) if it returns 0... Because of the way sources are done, we can't * allow the control structures to get blown away every time we return -- * probably every time we type source at the keyboard and every time a * source returns to keyboard input is ok though -- use ft_controlreset. */static char *noredirect[] = { "stop", NULL } ;  /* Only one?? */intcp_evloop(string)    char *string;{    wordlist *wlist, *ww;    struct control *x;    char *i;    int nn;#define newblock    cend[stackp]->co_children = alloc(control);      \            cend[stackp]->co_children->co_parent = cend[stackp]; \            cend[stackp] = cend[stackp]->co_children;        \            cend[stackp]->co_type = CO_UNFILLED;    for (;;) {        wlist = getcommand(string);        if (wlist == NULL) {    /* End of file or end of user input. */            if (cend[stackp]->co_parent && !string) {                cp_resetcontrol();                continue;            } else                return (0);        }        if ((wlist->wl_word == NULL) || (*wlist->wl_word == '\0')) {            /* User just typed return. */            if (string)                return (1);            else {                cp_event--;                continue;            }        }        /* Just a check... */        for (ww = wlist; ww; ww = ww->wl_next)            if (!ww->wl_word) {                fprintf(cp_err,             "cp_evloop: Internal Error: NULL word pointer\n");                continue;            }        /* Add this to the control structure list. If cend->co_type         * is CO_UNFILLED, the last line was the beginning of a          * block, and this is the unfilled first statement.         */        if (cend[stackp] && (cend[stackp]->co_type != CO_UNFILLED)) {            cend[stackp]->co_next = alloc(control);            cend[stackp]->co_next->co_prev = cend[stackp];            cend[stackp]->co_next->co_parent =                     cend[stackp]->co_parent;            cend[stackp] = cend[stackp]->co_next;        } else if (!cend[stackp])            control[stackp] = cend[stackp] = alloc(control);        if (eq(wlist->wl_word, "while")) {            cend[stackp]->co_type = CO_WHILE;            cend[stackp]->co_cond = wlist->wl_next;            if (!cend[stackp]->co_cond) {                fprintf(stderr,                    "Error: missing while condition.\n");            }            newblock;        } else if (eq(wlist->wl_word, "dowhile")) {            cend[stackp]->co_type = CO_DOWHILE;            cend[stackp]->co_cond = wlist->wl_next;            if (!cend[stackp]->co_cond) {                fprintf(stderr,                    "Error: missing dowhile condition.\n");            }            newblock;        } else if (eq(wlist->wl_word, "repeat")) {            cend[stackp]->co_type = CO_REPEAT;            if (!wlist->wl_next) {                cend[stackp]->co_numtimes = -1;            } else {                char *s;                double *dd;                wlist = cp_variablesubst(cp_bquote(                        cp_doglob(wl_copy(wlist))));                s = wlist->wl_next->wl_word;                dd = ft_numparse(&s, false);                if (dd) {                    if (*dd < 0) {                        fprintf(cp_err,             "Error: can't repeat a negative number of times\n");                        *dd = 0.0;                    }                    cend[stackp]->co_numtimes = (int) *dd;                } else                    fprintf(cp_err,                     "Error: bad repeat argument %s\n",                        wlist->wl_next->wl_word);            }            newblock;        } else if (eq(wlist->wl_word, "if")) {            cend[stackp]->co_type = CO_IF;            cend[stackp]->co_cond = wlist->wl_next;            if (!cend[stackp]->co_cond) {                fprintf(stderr,                     "Error: missing if condition.\n");            }            newblock;        } else if (eq(wlist->wl_word, "foreach")) {            cend[stackp]->co_type = CO_FOREACH;            if (wlist->wl_next) {                wlist = wlist->wl_next;                cend[stackp]->co_foreachvar =                         copy(wlist->wl_word);                wlist = wlist->wl_next;            } else                fprintf(stderr,                     "Error: missing foreach variable.\n");            wlist = cp_doglob(wlist);            cend[stackp]->co_text = wl_copy(wlist);            newblock;        } else if (eq(wlist->wl_word, "label")) {            cend[stackp]->co_type = CO_LABEL;            if (wlist->wl_next) {                cend[stackp]->co_text = wl_copy(wlist->wl_next);                /* I think of everything, don't I? */                cp_addkword(CT_LABEL, wlist->wl_next->wl_word);                if (wlist->wl_next->wl_next)                    fprintf(cp_err,                 "Warning: ignored extra junk after label.\n");            } else                fprintf(stderr, "Error: missing label.\n");        } else if (eq(wlist->wl_word, "goto")) {            /* Incidentally, this won't work if the values 1 and             * 2 ever get to be valid character pointers -- I             * think it's reasonably safe to assume they aren't...             */            cend[stackp]->co_type = CO_GOTO;            if (wlist->wl_next) {                cend[stackp]->co_text = wl_copy(wlist->wl_next);                if (wlist->wl_next->wl_next)                    fprintf(cp_err,                 "Warning: ignored extra junk after goto.\n");            } else                fprintf(stderr, "Error: missing label.\n");        } else if (eq(wlist->wl_word, "continue")) {            cend[stackp]->co_type = CO_CONTINUE;            if (wlist->wl_next) {                cend[stackp]->co_numtimes = scannum(wlist->                        wl_next->wl_word);                if (wlist->wl_next->wl_next)                    fprintf(cp_err,             "Warning: ignored extra junk after continue %d.\n",                        cend[stackp]->co_numtimes);            } else                cend[stackp]->co_numtimes = 1;        } else if (eq(wlist->wl_word, "break")) {            cend[stackp]->co_type = CO_BREAK;            if (wlist->wl_next) {                cend[stackp]->co_numtimes = scannum(wlist->                        wl_next->wl_word);                if (wlist->wl_next->wl_next)                    fprintf(cp_err,                 "Warning: ignored extra junk after break %d.\n",                        cend[stackp]->co_numtimes);            } else                cend[stackp]->co_numtimes = 1;        } else if (eq(wlist->wl_word, "end")) {            /* Throw away this thing. */            if (!cend[stackp]->co_parent) {                fprintf(stderr, "Error: no block to end.\n");                cend[stackp]->co_type = CO_UNFILLED;            } else if (cend[stackp]->co_prev) {                cend[stackp]->co_prev->co_next = NULL;                x = cend[stackp];                cend[stackp] = cend[stackp]->co_parent;                tfree(x);            } else {                x = cend[stackp];                cend[stackp] = cend[stackp]->co_parent;                cend[stackp]->co_children = NULL;                tfree(x);            }        } else if (eq(wlist->wl_word, "else")) {            if (!cend[stackp]->co_parent ||                    (cend[stackp]->co_parent->co_type !=                    CO_IF)) {                fprintf(stderr, "Error: misplaced else.\n");                cend[stackp]->co_type = CO_UNFILLED;            } else {                if (cend[stackp]->co_prev)                    cend[stackp]->co_prev->co_next = NULL;                else                    cend[stackp]->co_parent->co_children =                            NULL;                cend[stackp]->co_parent->co_elseblock =                         cend[stackp];                cend[stackp]->co_prev = NULL;            }        } else {            cend[stackp]->co_type = CO_STATEMENT;            cend[stackp]->co_text = wlist;        }        if (!cend[stackp]->co_parent) {            x = cend[stackp];            /* We have to toss this do-while loop in here so             * that gotos at the top level will work.             */            do {                i = doblock(x, &nn);                switch (*i) {                    case NORMAL:                        break;                    case BROKEN:                        fprintf(cp_err,     "Error: break not in loop or too many break levels given\n");                        break;                    case CONTINUED:                        fprintf(cp_err,     "Error: continue not in loop or too many continue levels given\n");                        break;                    default:                        x = findlabel(i,                             control[stackp]);                        if (!x)                            fprintf(cp_err,                         "Error: label %s not found\n",                                i);                }                if (x)                    x = x->co_next;            } while (x);        }        if (string)            return (1); /* The return value is irrelevant. */    }}/* Execute a block.  There can be a number of return values from this routine. *  NORMAL indicates a normal termination *  BROKEN indicates a break -- if the caller is a breakable loop, *      terminate it, otherwise pass the break upwards *  CONTINUED indicates a continue -- if the caller is a continuable loop, *      continue, else pass the continue upwards *  Any other return code is considered a pointer to a string which is *      a label somewhere -- if this label is present in the block, *      goto it, otherwise pass it up. Note that this prevents jumping *      into a loop, which is good. * Note that here is where we expand variables, ``, and globs for controls. * The 'num' argument is used by break n and continue n. */static char *doblock(bl, num)    struct control *bl;    int *num;{    struct control *ch, *cn = NULL;    wordlist *wl;    char *i;    int nn;    switch (bl->co_type) {        case CO_WHILE:        while (bl->co_cond && cp_istrue(bl->co_cond)) {            for (ch = bl->co_children; ch; ch = cn) {                cn = ch->co_next;                i = doblock(ch, &nn);                switch (*i) {                    case NORMAL:                    break;                    case BROKEN:    /* Break. */                    if (nn < 2)                        return (NORMAL_STR);                    else {                        *num = nn - 1;                        return (BROKEN_STR);                    }                    case CONTINUED: /* Continue. */                    if (nn < 2) {                        cn = NULL;                        break;                    } else {                        *num = nn - 1;                        return (CONTINUED_STR);                    }                    default:                    cn = findlabel(i, bl->co_children);                    if (!cn)                        return (i);                }            }        }        break;        case CO_DOWHILE:        do {            for (ch = bl->co_children; ch; ch = cn) {                cn = ch->co_next;                i = doblock(ch, &nn);                switch (*i) {                    case NORMAL:                    break;                    case BROKEN:    /* Break. */                    if (nn < 2)                        return (NORMAL_STR);                    else {                        *num = nn - 1;                        return (BROKEN_STR);                    }                    case CONTINUED: /* Continue. */                    if (nn < 2) {                        cn = NULL;                        break;                    } else {                        *num = nn - 1;                        return (CONTINUED_STR);                    }                    default:                    cn = findlabel(i, bl->co_children);                    if (!cn)                        return (i);                }            }        } while (bl->co_cond && cp_istrue(bl->co_cond));        break;        case CO_REPEAT:        while ((bl->co_numtimes > 0) ||                (bl->co_numtimes == -1)) {            if (bl->co_numtimes != -1)                bl->co_numtimes--;            for (ch = bl->co_children; ch; ch = cn) {                cn = ch->co_next;                i = doblock(ch, &nn);                switch (*i) {                    case NORMAL:                    break;                    case BROKEN:    /* Break. */                    if (nn < 2)                        return (NORMAL_STR);                    else {                        *num = nn - 1;                        return (BROKEN_STR);                    }                    case CONTINUED: /* Continue. */                    if (nn < 2) {                        cn = NULL;                        break;                    } else {                        *num = nn - 1;                        return (CONTINUED_STR);                    }                    default:                    cn = findlabel(i, bl->co_children);                    if (!cn)                        return (i);                }            }        }        break;        case CO_IF:        if (bl->co_cond && cp_istrue(bl->co_cond)) {            for (ch = bl->co_children; ch; ch = cn) {                cn = ch->co_next;                i = doblock(ch, &nn);                if (*i > 2) {                    cn = findlabel(i,                        bl->co_children);                    if (!cn)                        return (i);                } else if (*i != NORMAL) {                    *num = nn;                    return (i);                }            }        } else {            for (ch = bl->co_elseblock; ch; ch = cn) {                cn = ch->co_next;                i = doblock(ch, &nn);                if (*i > 2) {                    cn = findlabel(i,                        bl->co_elseblock);                    if (!cn)                        return (i);                } else if (*i != NORMAL) {

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久久久久浪潮网站 | 精品久久国产老人久久综合| 色综合欧美在线| 国产98色在线|日韩| 国内一区二区视频| 久久激情综合网| 久久国产尿小便嘘嘘| 免费成人你懂的| 麻豆精品一二三| 蜜臀a∨国产成人精品| 久久99热这里只有精品| 狠狠久久亚洲欧美| 国产精品亚洲视频| 成人黄色片在线观看| 日韩精品电影在线观看| 亚洲欧美在线高清| 国产精品国产自产拍高清av | 久久久国产午夜精品| 久久久久久久久99精品| 国产片一区二区三区| 亚洲欧美中日韩| 亚洲六月丁香色婷婷综合久久| 一区二区三区精品久久久| 亚洲一区二区三区在线播放| 日韩精品亚洲一区| 国产综合久久久久影院| 成人午夜精品一区二区三区| 色天天综合色天天久久| 欧美日韩一区不卡| 日韩精品综合一本久道在线视频| 精品国产99国产精品| 中文字幕成人av| 一区二区国产视频| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 香蕉成人啪国产精品视频综合网| 自拍偷自拍亚洲精品播放| 国产欧美精品一区| 国产精品久久综合| 亚洲国产中文字幕| 麻豆精品视频在线观看免费| 国产成人在线免费| 91久久奴性调教| 日韩欧美不卡在线观看视频| 国产免费观看久久| 亚洲1区2区3区4区| 国产一区二区三区蝌蚪| 91丨九色porny丨蝌蚪| 91超碰这里只有精品国产| 日本一区二区三区电影| 五月天激情综合网| 国产不卡免费视频| 欧美日韩在线三区| 日本一区二区三区电影| 日韩电影在线观看网站| 成人动漫一区二区在线| 欧美精品久久一区二区三区| 国产欧美精品一区| 日韩成人一区二区三区在线观看| 成人永久看片免费视频天堂| 欧美一级片在线| 亚洲伊人伊色伊影伊综合网| 亚洲成人福利片| 日本色综合中文字幕| 夫妻av一区二区| 欧美三级视频在线| 欧美极品另类videosde| 天天综合网 天天综合色| 成人一区二区三区视频在线观看 | 国产成人h网站| 欧美日韩成人一区| 亚洲欧洲精品一区二区三区 | 91啦中文在线观看| 久久色在线观看| 午夜伦欧美伦电影理论片| 成人app在线| 日韩免费在线观看| 亚洲午夜免费电影| 99精品欧美一区二区三区综合在线| 欧美一级欧美三级在线观看| 一区二区三区美女视频| bt欧美亚洲午夜电影天堂| 亚洲精品一区二区在线观看| 午夜精品一区在线观看| 在线观看国产一区二区| 国产精品天干天干在观线| 韩国精品一区二区| 欧美一区二区三区不卡| 精品福利一区二区三区| 国产精品国产a级| 狠狠色丁香久久婷婷综合_中| 欧美美女网站色| 一区二区在线免费观看| 成人高清av在线| 欧美国产精品劲爆| 韩国成人精品a∨在线观看| 欧美一区二区三区视频免费播放 | 国产日韩精品一区二区三区| 久久精品国产第一区二区三区| 欧美日韩美女一区二区| 亚洲大型综合色站| 欧洲精品在线观看| 一区二区免费看| 色菇凉天天综合网| 一区二区三区免费网站| 91精品福利在线| 亚洲国产精品一区二区尤物区| 在线免费观看日韩欧美| 一区二区三区电影在线播| 欧美在线免费视屏| 夜夜精品视频一区二区| 在线影院国内精品| 亚洲高清在线精品| 91超碰这里只有精品国产| 久久人人爽爽爽人久久久| 日韩国产欧美在线观看| 91精品欧美福利在线观看| 日韩**一区毛片| 8v天堂国产在线一区二区| 日本伊人午夜精品| 精品日韩欧美一区二区| 国产一区二区三区在线观看免费| 久久一区二区三区四区| 国产九色sp调教91| 国产精品久久久久久久裸模| 色综合网色综合| 午夜精品一区二区三区电影天堂 | 亚洲另类春色国产| 精品视频1区2区| 久久成人免费日本黄色| 久久九九全国免费| 99精品1区2区| 亚洲一二三级电影| 精品欧美一区二区久久 | 欧美日韩一区二区三区四区五区| 亚洲va欧美va天堂v国产综合| 日韩欧美在线网站| 成人免费观看男女羞羞视频| 亚洲日本青草视频在线怡红院| 欧美日韩一区二区电影| 久久99精品国产.久久久久久| 欧美性感一区二区三区| 亚洲精品免费在线播放| 欧美男女性生活在线直播观看| 美国十次了思思久久精品导航| 国产亚洲成aⅴ人片在线观看| 色偷偷88欧美精品久久久| 日韩高清一级片| 国产精品伦一区二区三级视频| 日本高清无吗v一区| 久久国产人妖系列| 亚洲人成精品久久久久久| 91精品国产综合久久久久久久| 国产福利一区在线| 亚洲午夜免费视频| 久久久影院官网| 欧美性大战久久| 国产乱人伦偷精品视频不卡| 亚洲一区中文在线| 久久久国产综合精品女国产盗摄| 欧美三电影在线| 国产91精品欧美| 午夜在线电影亚洲一区| 中文字幕精品一区二区精品绿巨人| 欧美日韩一本到| 成人精品免费视频| 美女一区二区三区在线观看| 亚洲欧美国产三级| 久久蜜桃av一区二区天堂| 欧美图片一区二区三区| 成人精品国产免费网站| 日韩成人免费电影| 亚洲女同ⅹxx女同tv| 久久精品一区四区| 3d动漫精品啪啪| 在线一区二区三区做爰视频网站| 国产一区二区三区在线观看免费| 香蕉久久一区二区不卡无毒影院 | 日韩精品乱码av一区二区| 国产精品久久久久久久久免费樱桃 | 亚洲午夜电影网| 亚洲欧洲精品成人久久奇米网| 精品国产一区二区三区久久久蜜月| 在线观看精品一区| 91小宝寻花一区二区三区| 国产精品综合二区| 日本欧美一区二区三区乱码| 亚洲一区二区三区激情| 亚洲欧洲国产日本综合| 久久久精品黄色| 精品99999| 91精品国产一区二区三区蜜臀| 欧美在线免费视屏| 在线视频国内自拍亚洲视频| 成人av资源在线观看| 国产成人午夜99999| 国产一区二区美女诱惑| 精品制服美女丁香| 另类小说视频一区二区| 麻豆精品一区二区av白丝在线| 手机精品视频在线观看|