⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mfbio.c

📁 spice中支持多层次元件模型仿真的可单独运行的插件源码
💻 C
📖 第 1 页 / 共 3 页
字号:
    mfb->textPositionableBool = (Bool)MFBGetFlag("APT");    mfb->textRotateBool = (Bool)MFBGetFlag("ROT");    mfb->strings.rotateTextSequence = MFBGetStr("RTS",&bufPtr);    mfb->fontHeight = MFBGetNum("GCH");    mfb->fontWidth = MFBGetNum("GCW");    mfb->fontXOffset = MFBGetNum("GTW");    mfb->fontYOffset = MFBGetNum("GTH");    mfb->strings.graphicsTextStart = MFBGetStr("GTS",&bufPtr);    mfb->strings.graphicsTextEnd = MFBGetStr("GTE",&bufPtr);    mfb->replaceTextBool = (Bool)MFBGetFlag("GTR");    mfb->strings.replaceON = MFBGetStr("RMO",&bufPtr);    mfb->overstrikeTextBool = (Bool)MFBGetFlag("GTO");    mfb->strings.overstrikeON = MFBGetStr("OMO",&bufPtr);    mfb->strings.writePixel = MFBGetStr("WPX",&bufPtr);        /*     * raster operations     */    mfb->minOffScreenX = MFBGetNum("OFFMX");    mfb->minOffScreenY = MFBGetNum("OFFMY");    mfb->offScreenDX = MFBGetNum("OFFDX");    mfb->offScreenDY = MFBGetNum("OFFDY");    mfb->rastRSCSFBool = (Bool)MFBGetFlag("RSCSF");    mfb->strings.rastCopyStart = MFBGetStr("RSCPS",&bufPtr);    mfb->strings.rastCopyEnd = MFBGetStr("RSCPE",&bufPtr);    mfb->strings.rastCopySource = MFBGetStr("RSSRC",&bufPtr);    mfb->strings.rastCopyDest = MFBGetStr("RSDST",&bufPtr);    if(mfb->strings.rastCopyStart == NULL ||         *mfb->strings.rastCopyStart == 0)        mfb->rastCopyBool = false;    else        mfb->rastCopyBool = true;        /*     * display color (intensity) control     */    mfb->maxColors = MFBGetNum("MCL");    mfb->strings.screenFlood = MFBGetStr("GCS",&bufPtr);    mfb->maxIntensity = MFBGetNum("VTI");    mfb->vltBool = (Bool)MFBGetFlag("VLT");    mfb->vltUseHLSBool = (Bool)MFBGetFlag("HLS");    if(mfb->vltBool) {        mfb->lengthOfVLT = MFBGetNum("VTL");        mfb->strings.vltEntry = MFBGetStr("VTE",&bufPtr);        }    mfb->strings.setForegroundColor = MFBGetStr("SCS",&bufPtr);    mfb->strings.channelMaskSet = MFBGetStr("VWM",&bufPtr);    if(mfb->strings.channelMaskSet == NULL ||         *mfb->strings.channelMaskSet == 0)        mfb->channelMaskBool = false;    else        mfb->channelMaskBool = true;    mfb->strings.readMaskSet = MFBGetStr("SRM",&bufPtr);    if(mfb->strings.readMaskSet == NULL ||         *mfb->strings.readMaskSet == 0)        mfb->readMaskBool = false;    else        mfb->readMaskBool = true;        /*     * graphics input (pointing device) control     */    mfb->PointingDeviceBool = (Bool)MFBGetFlag("POD");    if(mfb->PointingDeviceBool){        mfb->buttonsBool = (Bool)MFBGetFlag("PDB");        if(mfb->buttonsBool){        mfb->numberOfButtons = MFBmin(MFBGetNum("NPB"),12);        mfb->buttonMask[0] = MFBGetNum("BU1");        mfb->buttonMask[1] = MFBGetNum("BU2");        mfb->buttonMask[2] = MFBGetNum("BU3");        mfb->buttonMask[3] = MFBGetNum("BU4");        mfb->buttonMask[4] = MFBGetNum("BU5");        mfb->buttonMask[5] = MFBGetNum("BU6");        mfb->buttonMask[6] = MFBGetNum("BU7");        mfb->buttonMask[7] = MFBGetNum("BU8");        mfb->buttonMask[8] = MFBGetNum("BU9");        mfb->buttonMask[9] = MFBGetNum("BU10");        mfb->buttonMask[10] = MFBGetNum("BU11");        mfb->buttonMask[11] = MFBGetNum("BU12");        /* -1 flags an unused and inapplicable button mask */        for(i = mfb->numberOfButtons; i < 12; ++i)            mfb->buttonMask[i] = -1;        }        mfb->readImmediateBool = (Bool)MFBGetFlag("PRI");        mfb->strings.enablePointingDevice = MFBGetStr("PDS",&bufPtr);        mfb->strings.disablePointingDevice = MFBGetStr("PDE",&bufPtr);        mfb->strings.enableRubberBanding = MFBGetStr("PRBON",&bufPtr);        mfb->strings.disableRubberBanding = MFBGetStr("PRBOFF",&bufPtr);        mfb->strings.readPointingDevice = MFBGetStr("PDR",&bufPtr);        mfb->strings.formatPointingDevice = MFBGetStr("PDF",&bufPtr);        }    /*     * keyboard control     */    mfb->keyboardBool = (Bool)MFBGetFlag("KYBRD");    mfb->strings.keyboardStart = MFBGetStr("KYS",&bufPtr);    mfb->strings.keyboardEnd = MFBGetStr("KYE",&bufPtr);    mfb->strings.keyboardBackspace = MFBGetStr("KYB",&bufPtr);    mfb->keyboardXOffset = MFBGetNum("KYX");    mfb->keyboardYOffset = MFBGetNum("KYY");    mfb->strings.audio = MFBGetStr("BELL",&bufPtr);    /*      * blinker control     */    mfb->blinkersBool = (Bool)MFBGetFlag("BLD");    mfb->maxBlinkers = MFBGetNum("NBL");    mfb->numBlinkers = 0;    mfb->strings.blinkerON = MFBGetStr("BLS",&bufPtr);    mfb->strings.blinkerOFF = MFBGetStr("BLE",&bufPtr);    /*     * line geometry control     */    mfb->maxLineStyles = MFBGetNum("MLS");    mfb->reissueLineStyleBool = (Bool)MFBGetFlag("RLS");    mfb->linePatternDefineBool = (Bool)MFBGetFlag("DLP");    mfb->strings.setLineStyle = MFBGetStr("SLS",&bufPtr);    mfb->strings.setSolidLineStyle = MFBGetStr("SSLS",&bufPtr);    mfb->strings.movePenSequence = MFBGetStr("MPS",&bufPtr);    mfb->strings.drawLineSequence = MFBGetStr("DLS",&bufPtr);    mfb->strings.drawSolidLineSequence = MFBGetStr("DSL",&bufPtr);    mfb->strings.drawLineToSequence = MFBGetStr("DLT",&bufPtr);    mfb->strings.drawSolidLineToSequence = MFBGetStr("DSLT",&bufPtr);    if(mfb->linePatternDefineBool) {        mfb->strings.lineDefineStart = MFBGetStr("LDS",&bufPtr);        mfb->strings.lineDefineFormat = MFBGetStr("LDF",&bufPtr);        mfb->strings.lineDefineEnd = MFBGetStr("LDE",&bufPtr);        mfb->lineDefineLength = MFBGetNum("LDL");        }    /*     * box geometry control     */    mfb->strings.drawBoxSequence = MFBGetStr("DBS",&bufPtr);    mfb->strings.drawSolidBoxSequence = MFBGetStr("DSB",&bufPtr);    /*     * polygon geometry control     */    mfb->filledPlygnBool = (Bool)MFBGetFlag("FPOLY");    mfb->strings.beginPlygnSequence = MFBGetStr("PLS",&bufPtr);    mfb->strings.beginSolidPlygnSequence = MFBGetStr("PLSOL",&bufPtr);    mfb->strings.sendPlygnVertex = MFBGetStr("PLV",&bufPtr);    mfb->strings.endPlygnSequence = MFBGetStr("PLE",&bufPtr);    /*     * fill pattern control     */    mfb->maxFillPatterns = MFBGetNum("MFP");    mfb->fillPtrnDefineBool = (Bool)MFBGetFlag("DFP");    mfb->strings.setFillPattern = MFBGetStr("SFP",&bufPtr);    mfb->strings.setSolidFillPattern = MFBGetStr("SSFP",&bufPtr);    if(mfb->fillPtrnDefineBool) {        mfb->fillDefineHeight = MFBGetNum("FDH");        mfb->fillDefineWidth = MFBGetNum("FDW");        mfb->fillDefineRowMajorBool = (Bool)MFBGetFlag("FDR");        mfb->strings.fillDefineStart = MFBGetStr("FDS",&bufPtr);        mfb->strings.fillDefineFormat = MFBGetStr("FDF",&bufPtr);        mfb->strings.fillDefineEnd = MFBGetStr("FDE",&bufPtr);        }    /*     * Circle geometry control     */    mfb->strings.drawCircleSequence = MFBGetStr("DCS",&bufPtr);    /*     * ALU modes     */    mfb->strings.setALUJAM = MFBGetStr("ALUJAM",&bufPtr);    mfb->strings.setALUOR = MFBGetStr("ALUOR",&bufPtr);    mfb->strings.setALUNOR = MFBGetStr("ALUNOR",&bufPtr);    mfb->strings.setALUEOR = MFBGetStr("ALUEOR",&bufPtr);    /*     * set defaults in mfb tty structure     */    mfb->cursorColor1Id = 0;    mfb->cursorColor2Id = 1;    mfb->fgColorId = UNINITIALIZED;    mfb->fillPattern = UNINITIALIZED;    mfb->lineStyle = UNINITIALIZED;    mfb->channelMask = UNINITIALIZED;    mfb->readMask = UNINITIALIZED;    mfb->textMode = UNINITIALIZED;        /*this is changed by MFBInitialize*/    mfb->ttyIsSet = false;    mfb->lastX = -1;    mfb->lastY = -1;    }    else{    /*     * Hardcopy devices not yet implemented.     */    mfb->deviceType = HCOPY;    }    /*     * Now try to initialize everything,return status.     */    *errorcode = MFBInitialize();    mfb->initializedBool = true;    return(mfb);    }intMFBInitialize()    /*     * Notes:     *    Called to reinitialize a graphics terminal.     *    TTY mode is reset if necessary (UNIX only).     */{    int i;    if(MFBCurrent->deviceType == TTY) {	i = MFBInitTTY();	if(i < 0)	    return(i);	/*	 * Output initialization start string	 */	MFBGenCode(MFBFORMAT.startSequence);		/*	 * Flush the buffer	 */	MFBUpdate();	/*	 * Output initialization	 */	MFBGenCode(MFBFORMAT.initLineStyles);	MFBGenCode(MFBFORMAT.initColorStyles);	MFBGenCode(MFBFORMAT.initFillPatterns);	MFBCurrent->lastX = -1;	MFBCurrent->lastY = -1;	/*	 * And flush the buffer again	 */	MFBUpdate();	return(MFBOK);    } else{	return(MFBOK);    }}intMFBInitTTY(){    /*     * Notes:     *    Initialize TTY and save current state in MFB structure.     *    Also,the output buffer is flushed.     */    long litout = 1;    if(MFBCurrent->deviceType != TTY)    return(MFBBADTTY);    MFBCurrent->numTtyBuffer = 0;    if(!MFBCurrent->ttyIsSet) {#ifdef HAS_TTY_    if(*MFBCurrent->name == 0) {       /* => stdout not in /dev */        return(MFBBADTTY);        }    /*     * Set keyboard tty options if necessary.     * We put the terminal in CBREAK so that any keyboard     * input will be echoed on the graphics display.     */    /* the isatty() is necessary because user may be piping output */    if(MFBCurrent->fileDesc != 1 && isatty(1)){        /*         * Disable user messages by changing the fstats of stdin.         * Yes, this is necessary; the user may open his own terminal         * as the graphics device in which case user messages will         * still interrupt the graphics via stdio.         */        if(fstat(1,&MFBCurrent->oldstat.kybrdstat) < 0)        return(MFBBADOPT);        /* 0022 corresponds to write by group and others */        /* This is bad -- Wayne        if(chmod(ttyname(2),MFBCurrent->oldstat.kybrdstat.st_mode & ~0022)        < 0) return(MFBBADOPT);        */        if(ioget(1, &MFBCurrent->kybrdTtyb.oldttyb) < 0)	    return(MFBBADOPT);        if(iogetl(1, &MFBCurrent->oldstat.kybrdttyw) < 0)	    return(MFBBADOPT);        MFBCurrent->kybrdTtyb.newttyb = MFBCurrent->kybrdTtyb.oldttyb;	iosetmfb_flags(MFBCurrent->kybrdTtyb.newttyb);#ifdef notdef        MFBCurrent->kybrdTtyb.newttyb.sg_erase = 8;     /* ctrl-h */        MFBCurrent->kybrdTtyb.newttyb.sg_kill = 24;     /* ctrl-x */#endif        if(ioset(1, &MFBCurrent->kybrdTtyb.newttyb) < 0)	    return(MFBBADOPT);        }    /*     * Set graphics device tty options     */    /* the isatty() is necessary because user may be piping output */    if(isatty(MFBCurrent->fileDesc)){        /* Disable user messages */        if(stat(MFBCurrent->name,&MFBCurrent->oldstat.graphstat) < 0)            return(MFBBADOPT);        /* 0022 corresponds to write by group and others */        /*        if(chmod(MFBCurrent->name,        MFBCurrent->oldstat.graphstat.st_mode & ~0022) < 0)        return(MFBBADOPT);        */        if(ioget(MFBCurrent->fileDesc, &MFBCurrent->graphTtyb.oldttyb) < 0)	    return(MFBBADOPT);        if(iogetl(MFBCurrent->fileDesc, &MFBCurrent->oldstat.graphttyw) < 0)	    return(MFBBADOPT);        MFBCurrent->graphTtyb.newttyb = MFBCurrent->graphTtyb.oldttyb;	iosetmfb_flags(MFBCurrent->graphTtyb.newttyb);#ifdef notdef	/* Speed should not be messed with */        if(MFBCurrent->fileDesc != 1){            if(MFBCurrent->graphTtyb.newttyb.sg_ispeed < B1200)                MFBCurrent->graphTtyb.newttyb.sg_ispeed = B9600;            if(MFBCurrent->graphTtyb.newttyb.sg_ospeed < B1200)                MFBCurrent->graphTtyb.newttyb.sg_ospeed = B9600;            }#endif        if(MFBCurrent->litout){	    if (iolitout(MFBCurrent->fileDesc,		    MFBCurrent->graphTtyb.newttyb) < 0)		return(MFBBADOPT);        }        if(MFBCurrent->raw)	    iosetraw(MFBCurrent->graphTtyb.newttyb);#ifdef notdef	/* XXX No one should be doing this */        MFBCurrent->graphTtyb.newttyb.sg_erase = 8;     /* ctrl-h */        MFBCurrent->graphTtyb.newttyb.sg_kill = 24;     /* ctrl-x */#endif        if(ioset(MFBCurrent->fileDesc, &MFBCurrent->graphTtyb.newttyb) < 0)	    return(MFBBADOPT);        }#endif    MFBCurrent->outchar = MFBPutchar;    MFBCurrent->outstr = MFBPutstr;    MFBCurrent->dsply_getchar = MFBGetchar;    MFBCurrent->dsply_ungetchar = MFBUngetchar;    if(MFBCurrent->keyboardBool){        MFBCurrent->kybrd_getchar = MFBGetchar;        MFBCurrent->kybrd_ungetchar = MFBUngetchar;        }    else{        MFBCurrent->kybrd_getchar = OldGetchar;        MFBCurrent->kybrd_ungetchar = OldUngetchar;        }    MFBCurrent->ttyIsSet = true;    }    return(MFBOK);    }/***************************************************************************** * *                       TERMINATION ROUTINES * *****************************************************************************/intMFBClose(){    /*     * Notes:     *    Called to end the graphics sequence.  Must be last procedure     *    invoked because it frees the MFB struct.     */    /*     * Flush the buffer     */    MFBUpdate();    if(!MFBCurrent->initializedBool) {    free((char *) MFBCurrent);    return(MFBOK);    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -