-- File SegCIF.Mesa -- Segment .nodes file into separate symbols -- July 1981 by MN -- Last changed: July 7, 1981 11:19 PM DIRECTORY IODefs: FROM "IODefs" USING [CR, ReadLine, WriteLine, WriteString, WriteDecimal, GetInputStream, GetOutputStream, SetInputStream, SetOutputStream], JaMFnsDefs: FROM "JaMFnsDefs" USING [Register, PopString], StreamDefs: FROM "StreamDefs" USING [StreamHandle, NewByteStream, Read, Write, Append], StringDefs: FROM "StringDefs" USING [AppendString]; SegCIF: PROGRAM -- should add catch for ParserAbort IMPORTS IODefs, JaMFnsDefs, StreamDefs, StringDefs = BEGIN OPEN IODefs, JaMFnsDefs, StreamDefs, StringDefs; LinesPerSymbol: CARDINAL _ 100; SegmentCIF: PROCEDURE[inStream,outStream: StreamHandle] = BEGIN saveIn: StreamHandle _ GetInputStream[]; saveOut: StreamHandle _ GetOutputStream[]; SetInputStream[inStream]; SetOutputStream[outStream]; WriteLine["DD 1;"]; FOR n:CARDINAL _ 1, n+1 UNTIL inStream.endof[inStream] DO WriteString["DS "]; WriteDecimal[n]; WriteLine[";"]; THROUGH [1..LinesPerSymbol] UNTIL inStream.endof[inStream] DO line: STRING _ [100]; ReadLine[line]; --this echos everything to outStream ENDLOOP; WriteLine["DF;"]; WriteString["C "]; WriteDecimal[n]; WriteLine[";"]; saveOut.put[saveOut,'.]; ENDLOOP; saveOut.put[saveOut,CR]; SetInputStream[saveIn]; SetOutputStream[saveOut]; END; CallSegmentCIF: PROCEDURE = BEGIN --expects (STRINGs) outFile: STRING _ [40]; inFile: STRING _ [40]; inStream,outStream: StreamHandle; PopString[outFile]; PopString[inFile]; IF ~DotInName[outFile] THEN AppendString[outFile,".cif"]; IF ~DotInName[inFile] THEN AppendString[inFile,".nodes"]; inStream _ NewByteStream[inFile,Read]; outStream _ NewByteStream[outFile,Write+Append]; WriteString["Segmenting "]; WriteString[inFile]; WriteString[" to "]; WriteLine[outFile]; SegmentCIF[inStream,outStream]; inStream.destroy[inStream]; outStream.destroy[outStream]; END; DotInName: PROCEDURE[name: STRING] RETURNS[BOOLEAN] = BEGIN FOR i:CARDINAL IN [0..name.length) DO IF name[i]='. THEN RETURN[TRUE]; ENDLOOP; RETURN[FALSE]; END; Register["segcif",CallSegmentCIF]; END. (635)\125b9B353b6B9b36B144b10B684b14B583b9B