-- PROGRAM SifOutput -- Updated to Mesa 6.0 - January 27, 1981 11:34 AM -- Last edited - January 27, 1981 12:26 PM DIRECTORY SifGutsDefs: FROM "SifGutsDefs" USING [Point], IODefs: FROM "IODefs" USING [WriteLine, CR], SifCntrlToOut: FROM "SifCntrlToOut", SifOutputDefs: FROM "SifOutputDefs", StreamDefs: FROM "StreamDefs" USING [StreamHandle, NewByteStream, Write, Append], SystemDefs: FROM "systemdefs", StringDefs: FROM "stringdefs"; SifOutput : PROGRAM IMPORTS IODefs, StringDefs, StreamDefs EXPORTS SifCntrlToOut, SifOutputDefs = BEGIN OPEN IODefs, SifGutsDefs, StreamDefs, StringDefs; fout : StreamHandle; Nlayers: INTEGER = 8; -- need some layer names for layer changes to CIF InitOutput: PUBLIC PROCEDURE [file: STRING] = BEGIN fout _ NewByteStream[file, Write+Append]; END; FinishOutput: PUBLIC PROCEDURE = BEGIN fout.destroy[fout]; END; PutLong: PROCEDURE [x: LONG INTEGER] = BEGIN s: STRING _ [11]; s.length _ 0; StringDefs.AppendLongDecimal[s,x]; PutString[s]; END; PutChar: PROCEDURE [ch: CHARACTER] = BEGIN fout.put[fout, ch]; END; PutString: PROCEDURE [string: STRING] = BEGIN i: CARDINAL; FOR i IN [0..string.length) DO PutChar[string[i]]; ENDLOOP; END; PutLine: PROCEDURE [string: STRING] = BEGIN PutString[string]; PutChar[CR]; END; PutDefStart: PUBLIC PROCEDURE [num: INTEGER, xScale,yScale:LONG INTEGER, name: STRING] = BEGIN PutChar[CR]; PutString["DS "]; PutLong[num]; PutString[" "]; PutLong[xScale]; PutString[" "]; PutLong[yScale]; PutString["; "]; PutSymbolName[name]; END; PutDefFinish: PUBLIC PROCEDURE = BEGIN PutLine["DF;"]; PutChar[CR]; -- space to make it look neat END; PutComment: PUBLIC PROCEDURE[s: STRING] = BEGIN -- puts a CIF comment i: CARDINAL; PutString["( "]; FOR i IN [0..s.length) DO IF s[i]='( THEN s[i] _ '[ ; IF s[i] = ') THEN s[i] _ '] ; ENDLOOP; PutString[s]; PutLine[" );"] END; PutLayer: PUBLIC PROCEDURE[l: STRING] = BEGIN -- puts a CIF layer PutString["L "]; PutString[l]; PutString["; "]; END; PutBox: PUBLIC PROCEDURE [len,wid: LONG INTEGER, center: Point, angle: Point] = BEGIN -- puts a CIF box PutString["B L "]; PutLong[len]; PutString[" W "]; PutLong[wid]; PutString[" C "]; PutLong[center.x]; PutChar[',]; PutLong[center.y]; IF angle # [LONG[1],LONG[0]] THEN BEGIN PutString[" D "]; PutLong[angle.x]; PutString[" "]; PutLong[angle.y]; END; PutLine[";"] END; PutCall: PUBLIC PROCEDURE [def:INTEGER, mirx,miry:BOOLEAN, rot:Point, trans:Point] = BEGIN -- puts a CIF call PutString["C "]; PutLong[def]; -- mirroring X in CIF means the same as mirror about Y axis in icarus IF mirx THEN PutString[" M X"]; IF miry THEN PutString[" M Y"]; IF rot # [LONG[1],LONG[0]] THEN BEGIN PutString[" R "]; PutLong[rot.x]; PutString[","]; PutLong[rot.y]; END; IF trans.x # 0 OR trans.y # 0 THEN BEGIN PutString[" T "]; PutLong[trans.x]; PutChar[',]; PutLong[trans.y]; END; PutLine[";"] END; PutName: PUBLIC PROCEDURE [x,y: LONG INTEGER, s: STRING] = BEGIN -- output local extention 94, name a point PutString["94 "]; PutString[s]; PutString[" "]; PutLong[x]; PutString[", "]; PutLong[y]; PutLine[";"]; END; PutSymbolName: PROCEDURE [s: STRING] = BEGIN -- output local extention 9, name a symbol unless null string IF EqualString[s,""] THEN { PutLine[""]; RETURN; }; PutString["9 "]; PutString[s]; PutLine[";"]; END; PutEnd: PUBLIC PROCEDURE = BEGIN -- puts a CIF end PutLine["End"] END; PutError: PUBLIC PROCEDURE [msg: STRING] = BEGIN -- puts a CIF end WriteLine[msg]; END; END.(1792)\453b9B247b10B92b12B56b7B136b7B66b9B125b7B81b11B251b13B97b10B242b8B120b6B397b7B544b7B223b13B208b6B72b8B