📄 mfbio.c
字号:
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 + -