Annotation of 40BSD/cmd/cifplot/print.c, revision 1.1

1.1     ! root        1: /*******************************************************************
        !             2: *                                                                  *
        !             3: *    File: CIFPLOT/print.c                                         *
        !             4: *    Written by Dan Fitzpatrick                                    *
        !             5: *    copyright 1980 -- Regents of the University of California     *
        !             6: *                                                                  *
        !             7: ********************************************************************/
        !             8: 
        !             9: #include <stdio.h>
        !            10: #include "defs.h"
        !            11: #include "globals.h"
        !            12: #include "parser_defs.h"
        !            13: #include "structs.h"
        !            14: #include "out_structs.h"
        !            15: 
        !            16: IMPORT struct LCell *GetLayer();
        !            17: IMPORT long time();
        !            18: IMPORT char *ctime();
        !            19: 
        !            20: FILE *inter;
        !            21: 
        !            22: int SymbCount = 0;
        !            23: 
        !            24: #define PRINTED 113
        !            25: 
        !            26: Intermediate()
        !            27: {
        !            28:     long t;
        !            29:     if(NULL == (inter = fopen(outfile,"w"))) {
        !            30:        char a[128];
        !            31:        sprintf(a,"Can't create %s",outfile);
        !            32:        Error(a,RUNTIME);
        !            33:        }
        !            34: 
        !            35:     fprintf(inter,"(CIF 2.UCB-1);\n");
        !            36:     t = time(0);
        !            37:     fprintf(inter,"(%s: %s%s);\n",getlogin(),ctime(&t),banner);
        !            38:     fprintf(inter,"();\n");
        !            39:     fprintf(inter,"();\n");
        !            40:     PrintBBox(&(prog->CBBox),inter);
        !            41: 
        !            42:     PrintSymbol(prog,inter);
        !            43:     fprintf(inter,"C %d;\nE\n",SymbCount-1);
        !            44:     exit(0);
        !            45:     }
        !            46: 
        !            47: PrintSymbol(symb,inter)
        !            48: Command *symb;
        !            49: FILE *inter;
        !            50: {
        !            51:    Command *p;
        !            52: 
        !            53:    if(symb->type != SYMBOL)
        !            54:        Error("PrintSymbol call with non-symbol",INTERNAL);
        !            55:    if(symb->Ctype.Symbl.status == PRINTED)
        !            56:        return;
        !            57: 
        !            58:    for(p=symb->Ctype.Symbl.CStart; p!=NIL; p=p->CLink) {
        !            59:        if( p->type == CALL)
        !            60:                PrintSymbol(p->Ctype.Call.CSymb,inter);
        !            61:        if(p->type == ARRAY) {
        !            62:                PrintSymbol(p->Ctype.Array.ACom->Ctype.Call.CSymb,inter);
        !            63:                CreateArray(p,inter);
        !            64:                }
        !            65:        }
        !            66:     
        !            67:     fprintf(inter,"DS %d;\n",SymbCount);
        !            68:     PrintBBox(&(symb->CBBox),inter);
        !            69:     fprintf(inter,"(Symbol #%d);\n",symb->Ctype.Symbl.SymNo);
        !            70:     fprintf(inter,"(9 %s);\n",symb->Ctype.Symbl.SName);
        !            71:     symb->Ctype.Symbl.Sid = SymbCount++;
        !            72:     symb->Ctype.Symbl.status = PRINTED;
        !            73: 
        !            74:     for(p=symb->Ctype.Symbl.CStart; p!=NIL; p=p->CLink)
        !            75:        PrintCommand(p,inter);
        !            76:     fprintf(inter,"DF;\n");
        !            77:     }
        !            78: 
        !            79: CreateArray(com,inter)
        !            80: Command *com;
        !            81: FILE *inter;
        !            82: {
        !            83:     int i;
        !            84: 
        !            85:     fprintf(inter,"DS %d;\n",SymbCount++);
        !            86:     PrintBBox(&(com->CBBox),inter);
        !            87:     for(i=0;i<com->Ctype.Array.Am;i++)
        !            88:        fprintf(inter,"C %d T %d 0;\n",
        !            89:            com->Ctype.Array.ACom->Ctype.Call.CSymb->Ctype.Symbl.Sid,
        !            90:            i*(int) com->Ctype.Array.Adx);
        !            91:     fprintf(inter,"DF;\n");
        !            92:     fprintf(inter,"DS %d;\n",SymbCount++);
        !            93:     PrintBBox(&(com->CBBox),inter);
        !            94:     for(i=0;i<com->Ctype.Array.An;i++)
        !            95:        fprintf(inter,"C %d T 0 %d;\n",
        !            96:                SymbCount-2,i*(int) com->Ctype.Array.Ady);
        !            97:     fprintf(inter,"DF;\n");
        !            98:     com->Ctype.Array.As = SymbCount-1;
        !            99:     }
        !           100: 
        !           101: PrintCommand(com,inter)
        !           102: Command *com;
        !           103: FILE *inter;
        !           104: {
        !           105:     switch(com->type) {
        !           106:        case POLYGON:
        !           107:                PrintLayer(com->level,inter);
        !           108:                fprintf(inter,"P");
        !           109:                PrintPath(com->Ctype.Path,inter);
        !           110:                fprintf(inter,";\n");
        !           111:                /*
        !           112:                PrintBBox(&(com->CBBox),inter);
        !           113:                */
        !           114:                break;
        !           115:        case WIRE:
        !           116:                PrintLayer(com->level,inter);
        !           117:                fprintf(inter,"W");
        !           118:                /* Print the width */
        !           119:                fprintf(inter," %d",(int) com->Ctype.Wire.WWidth);
        !           120:                PrintPath(com->Ctype.Wire.WPath,inter);
        !           121:                fprintf(inter,";\n");
        !           122:                /*
        !           123:                PrintBBox(&(com->CBBox),inter);
        !           124:                */
        !           125:                break;
        !           126:        case FLASH:
        !           127:                PrintLayer(com->level,inter);
        !           128:                fprintf(inter,"R %d %d,%d;\n",
        !           129:                        (int) com->Ctype.Flash.fdia,
        !           130:                        (int) com->Ctype.Flash.fcenter.x,
        !           131:                        (int) com->Ctype.Flash.fcenter.y);
        !           132:                break;
        !           133:        case BOX:
        !           134:                PrintLayer(com->level,inter);
        !           135:                fprintf(inter,"B %d %d %d,%d %d,%d;\n",
        !           136:                        (int) com->Ctype.Box.blength,
        !           137:                        (int) com->Ctype.Box.bwidth,
        !           138:                        (int) com->Ctype.Box.bcenter.x,
        !           139:                        (int) com->Ctype.Box.bcenter.y,
        !           140:                        (int) com->Ctype.Box.bdirect.x,
        !           141:                        (int) com->Ctype.Box.bdirect.y);
        !           142:                /*
        !           143:                PrintBBox(&(com->CBBox),inter);
        !           144:                */
        !           145:                break;
        !           146:        case TEXT:
        !           147:                fprintf(inter,"2 \"%s\" ",com->Ctype.Text.TString);
        !           148:                PrintTransform(com->Ctype.Text.TTrans,inter);
        !           149:                fprintf(inter,";\n");
        !           150:                break;
        !           151:        case POINTNAME:
        !           152:                fprintf(inter,"94 %s %d %d",com->Ctype.PointName.Name,
        !           153:                    (int) com->Ctype.PointName.loc.x,
        !           154:                    (int) com->Ctype.PointName.loc.y);
        !           155:                if(strcmp(com->Ctype.PointName.Label,"all") != 0)
        !           156:                    fprintf(inter," %s",com->Ctype.PointName.Label);
        !           157:                fprintf(inter,";\n");
        !           158:                break;
        !           159:        case ARRAY:
        !           160:                fprintf(inter,"C %d;\n",com->Ctype.Array.As);
        !           161:                /*
        !           162:                fprintf(inter,"0A %d %d,%d %d,%d;\n",
        !           163:                                com->Ctype.Array.ACom->Ctype.Call.CSymb->Ctype.Symbl.Sid,
        !           164:                                com->Ctype.Array.An,com->Ctype.Array.Am,
        !           165:                                (int) com->Ctype.Array.Adx,
        !           166:                                (int) com->Ctype.Array.Ady);
        !           167:                                */
        !           168:                /*
        !           169:                PrintBBox(&(com->CBBox),inter);
        !           170:                */
        !           171:                break;
        !           172:        case CALL:
        !           173:                fprintf(inter,"C %d",com->Ctype.Call.CSymb->Ctype.Symbl.Sid);
        !           174:                PrintTransform(com->Ctype.Call.trans,inter);
        !           175:                fprintf(inter,";\n");
        !           176:                /*
        !           177:                PrintBBox(&(com->CBBox),inter);
        !           178:                */
        !           179:                break;
        !           180:        case SYMBOL:
        !           181:                PrintSymbol(com,inter);
        !           182:                break;
        !           183:        default:
        !           184:                Error("Unknown type of command in PrintCommand",INTERNAL);
        !           185:        }
        !           186:     }
        !           187: 
        !           188: PrintPath(p,f)
        !           189: PointList *p;
        !           190: FILE *f;
        !           191: {
        !           192:        for(; p != NIL; p = p->PLink) {
        !           193:                fprintf(f," %d,%d",(int)p->pt.x,(int)p->pt.y);
        !           194:                }
        !           195:        }       
        !           196: 
        !           197: PrintBBox(bbox,f)
        !           198: struct BBox *bbox;
        !           199: FILE *f;
        !           200: {
        !           201:     fprintf(f,"(BB %d %d %d %d);\n",
        !           202:                (int) bbox->xmin,(int) bbox->xmax,
        !           203:                (int) bbox->ymin,(int) bbox->ymax);
        !           204:     }
        !           205: 
        !           206: PrintTransform(trans,f)
        !           207: transform *trans;
        !           208: FILE *f;
        !           209: {
        !           210:     int i,j;
        !           211: 
        !           212:     /*
        !           213:     fprintf(f," MT");
        !           214:     for(i=0;i<3;i++) {
        !           215:        for(j=0;j<2;j++)
        !           216:            fprintf(f," %f", trans->t[i][j]);
        !           217:        }
        !           218:        */
        !           219:     fprintf(f,"%s",trans->TransString);
        !           220:     }
        !           221: 
        !           222: PrintLayer(n,f)
        !           223: int n;
        !           224: FILE *f;
        !           225: {
        !           226:     struct LCell *p;
        !           227: 
        !           228:     p = GetLayer(n);
        !           229:     if(p == NIL)
        !           230:        Error("Can't find layer name in PrintLayer",INTERNAL);
        !           231:     fprintf(f,"L %s;\n",p->LName);
        !           232:     }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.