Jspice3
gencif.c
Go to the documentation of this file.
1 /***************************************************************************
2 SCED - Schematic Capture Editor
3 JSPICE3 adaptation of Spice3e2 - Copyright (c) Stephen R. Whiteley 1992
4 Copyright 1990 Regents of the University of California. All rights reserved.
5 Authors: 1981 Giles C. Billingsley (parts of KIC layout editor)
6  1992 Stephen R. Whiteley
7 ****************************************************************************/
8 
9 /*
10  * CIF file generator.
11  * Here's an example.
12  * The following code
13  * {
14  * FileDesc = fopen("CIFFile","w");
15  * GenBeginSymbol(FileDesc,3,1,1);
16  * GenComment(FileDesc,"This is easy.");
17  * GenBox(FileDesc,1,2,3,4,1,0);
18  * GenEndSymbol(FileDesc);
19  * GenEnd(FileDesc);
20  * fclose(FileDesc;
21  * }
22  *
23  * generates
24  *
25  * DS 3 1 1;
26  * (This is easy.);
27  * B 1 2 3 4;
28  * DF;
29  * E
30  *
31  */
32 
33 #include "cddefs.h"
34 #include <string.h>
35 
36 #ifdef __STDC__
37 static void out_path(FILE*,struct p*,char*,long,long);
38 #else
39 static void out_path();
40 #endif
41 
42 void
43 GenEnd(FileDesc)
44 FILE *FileDesc;
45 {
46  fprintf(FileDesc,"E\n");
47 }
48 
49 void
50 GenBeginSymbol(FileDesc,SymbolNum,A,B)
51 FILE *FileDesc;
52 int SymbolNum;
53 long A,B;
54 {
55  fprintf(FileDesc,"DS %d %ld %ld;\n",SymbolNum,A,B);
56 }
57 
58 void
59 GenEndSymbol(FileDesc)
60 FILE *FileDesc;
61 {
62  fprintf(FileDesc,"DF;\n");
63 }
64 
65 void
66 GenBeginCall(FileDesc,Number)
67 FILE *FileDesc;
68 int Number;
69 {
70  fprintf(FileDesc,"C %d",Number);
71 }
72 
73 void
74 GenEndCall(FileDesc)
75 FILE *FileDesc;
76 {
77  fprintf(FileDesc,";\n");
78 }
79 
80 void
81 GenTranslation(FileDesc,X,Y)
82 FILE *FileDesc;
83 long X,Y;
84 {
85  fprintf(FileDesc," T %ld %ld",X,Y);
86 }
87 
88 void
89 GenRotation(FileDesc,X,Y)
90 FILE *FileDesc;
91 long X,Y;
92 {
93  fprintf(FileDesc," R %ld %ld",X,Y);
94 }
95 
96 void
97 GenMirrorX(FileDesc)
98 FILE *FileDesc;
99 {
100  fprintf(FileDesc," MX");
101 }
102 
103 void
104 GenMirrorY(FileDesc)
105 FILE *FileDesc;
106 {
107  fprintf(FileDesc," MY");
108 }
109 
110 void
111 GenPolygon(FileDesc,Path)
112 FILE *FileDesc;
113 struct p *Path;
114 {
115  char buf[80];
116 
117  *buf = 'P';
118  *(buf+1) = '\0';
119  /*
120  out_path(FileDesc,Path,buf,0L,0L);
121  */
122 }
123 
124 void
125 GenPolygonOffset(FileDesc,Path,X,Y)
126 FILE *FileDesc;
127 struct p *Path;
128 long X,Y;
129 {
130  char buf[80];
131 
132  *buf = 'P';
133  *(buf+1) = '\0';
134  /*
135  out_path(FileDesc,Path,buf,X,Y);
136  */
137 }
138 
139 void
140 GenWire(FileDesc,Width,Path)
141 FILE *FileDesc;
142 struct p *Path;
143 long Width;
144 {
145  char buf[80];
146 
147  sprintf(buf,"W %ld",Width);
148  out_path(FileDesc,Path,buf,0L,0L);
149 }
150 
151 void
152 GenWireOffset(FileDesc,Width,Path,X,Y)
153 FILE *FileDesc;
154 struct p *Path;
155 long Width,X,Y;
156 {
157  char buf[80];
158 
159  sprintf(buf,"W %ld",Width);
160  out_path(FileDesc,Path,buf,X,Y);
161 }
162 
163 static void
164 out_path(FileDesc,Path,buf,X,Y)
165 FILE *FileDesc;
166 struct p *Path;
167 char *buf;
168 long X,Y;
169 {
170  struct p *Pair;
171  char buf1[80];
172  int len, len1;
173 
174  len = strlen(buf);
175  Pair = Path;
176  while(Pair != NULL){
177  sprintf(buf1," %ld %ld",Pair->pX-X,Pair->pY-Y);
178  len1 = strlen(buf1);
179  if (len+len1 < 79) {
180  strcat(buf,buf1);
181  len += len1;
182  }
183  else {
184  fprintf(FileDesc,"%s\n ",buf);
185  strcpy(buf,buf1);
186  len = len1+1;
187  }
188  Pair = Pair->pSucc;
189  }
190  fprintf(FileDesc,"%s;\n",buf);
191 }
192 
193 void
194 GenBox(FileDesc,Length,Width,X,Y,XDir,YDir)
195 FILE *FileDesc;
196 long Length;
197 long Width,X,Y;
198 int XDir,YDir;
199 {
200  fprintf(FileDesc,"B %ld %ld %ld %ld",Length,Width,X,Y);
201  if(XDir != 1 Or YDir != 0)
202  fprintf(FileDesc," %d %d",XDir,YDir);
203  fprintf(FileDesc,";\n");
204 }
205 
206 /*
207  * GenRoundFlash(FileDesc,Width,X,Y)
208  * FILE *FileDesc;
209  * long Width,X,Y;
210  * {
211  * fprintf(FileDesc,"R %ld %ld %ld;\n",Width,X,Y);
212  * }
213  */
214 
215 void
216 GenLayer(FileDesc,Technology,Mask)
217 FILE *FileDesc;
218 char Technology,Mask[];
219 {
220  if(Technology > ' '){
221  fprintf(FileDesc,"L %c",Technology);
222  if(Mask[0] > ' '){
223  fprintf(FileDesc,"%c",Mask[0]);
224  if(Mask[1] > ' '){
225  fprintf(FileDesc,"%c",Mask[1]);
226  if(Mask[2] > ' ')
227  fprintf(FileDesc,"%c",Mask[2]);
228  }
229  }
230  fprintf(FileDesc,";\n");
231  }
232 }
233 
234 void
235 GenUserExtension(FileDesc,Digit,Text)
236 FILE *FileDesc;
237 char Digit;
238 char *Text;
239 {
240  if(Text[0] >= '0' And Text[0] <= '9')
241  fprintf(FileDesc,"%c%s;\n",Digit,Text);
242  else
243  fprintf(FileDesc,"%c %s;\n",Digit,Text);
244 }
245 
246 void
247 GenComment(FileDesc,Text)
248 FILE *FileDesc;
249 char *Text;
250 {
251  fprintf(FileDesc,"(%s);\n",Text);
252 }
void GenComment(FILE *FileDesc, char *Text)
Definition: gencif.c:247
static char buf[MAXPROMPT]
Definition: arg.c:18
void GenEndSymbol(FILE *FileDesc)
Definition: gencif.c:59
#define Or
Definition: cdmacs.h:15
void GenWireOffset(FILE *FileDesc, long Width, struct p *Path, long X, long Y)
Definition: gencif.c:152
char * strcpy()
void GenBeginCall(FILE *FileDesc, int Number)
Definition: gencif.c:66
void GenLayer(FILE *FileDesc, char Technology, Mask)
Definition: gencif.c:216
#define L
Definition: parse.c:442
Definition: cddefs.h:215
void GenPolygon(FILE *FileDesc, struct p *Path)
Definition: gencif.c:111
long pY
Definition: cddefs.h:216
long X
Definition: actions.c:450
void GenMirrorX(FILE *FileDesc)
Definition: gencif.c:97
void GenWire(FILE *FileDesc, long Width, struct p *Path)
Definition: gencif.c:140
#define NULL
Definition: spdefs.h:121
void GenBeginSymbol(FILE *FileDesc, int SymbolNum, long A, long B)
Definition: gencif.c:50
void GenMirrorY(FILE *FileDesc)
Definition: gencif.c:104
void GenTranslation(FILE *FileDesc, long X, long Y)
Definition: gencif.c:81
void GenUserExtension(FILE *FileDesc, char Digit, char *Text)
Definition: gencif.c:235
void GenEnd(FILE *FileDesc)
Definition: gencif.c:43
long pX
Definition: cddefs.h:216
#define And
Definition: cdmacs.h:14
void GenEndCall(FILE *FileDesc)
Definition: gencif.c:74
void GenBox(FILE *FileDesc, long Length, long Width, long X, long Y, int XDir, int YDir)
Definition: gencif.c:194
static void out_path()
void GenPolygonOffset(FILE *FileDesc, struct p *Path, long X, long Y)
Definition: gencif.c:125
void GenRotation(FILE *FileDesc, long X, long Y)
Definition: gencif.c:89
struct p * pSucc
Definition: cddefs.h:217
long Y
Definition: actions.c:450