<> <> <<>> <> <> <PressFormat.Press.>> <> <> <> <<(this can be done at any time once the file is open)>> <> <> <> <> <> <> <> <> <> <> <> <> <> <> DIRECTORY IO USING [STREAM], Rope USING [ROPE]; PressReader: DEFINITIONS = BEGIN ROPE: TYPE = Rope.ROPE; Handle: TYPE = REF PressReaderRec; PressReaderRec: TYPE; DocumentDirectory: PUBLIC TYPE = REF DocumentDirectoryRec; DocumentDirectoryRec: PUBLIC TYPE = RECORD [ passwd: INT, nRecs: INT, nParts: INT, pdStart: INT, pdRecs: INT, backP: INT, date: INT, fCopy: INT, lCopy: INT, fPage: INT, lPage: INT, fileName: ROPE, creator: ROPE, dateText: ROPE ]; PartDirectoryEntry: PUBLIC TYPE = RECORD [ partType: PartType, typeNumber: INT, partStart: INT, partRecs: INT, padding: INT ]; PartType: PUBLIC TYPE = { private, printedPage, fontDirectory, other }; FontDirectoryEntry: PUBLIC TYPE = RECORD [ length: INT, fontSet: INT, font: INT, firstChar: INT, lastChar: INT, family: ROPE, face: FontFace, source: INT, size: INT, rotation: INT ]; FontFace: PUBLIC TYPE = RECORD [ encoding: INT, weight: {medium, bold, light}, slope: {regular, italic}, expansion: {regular, condensed, expanded}]; EntityTrailer: PUBLIC TYPE = RECORD [ entityType: INT, fontSet: INT, dataStart: INT, dataLength: INT, Xe: INT, Ye: INT, xLeft: INT, yBottom: INT, width: INT, height: INT, length:INT ]; Dots: TYPE = RECORD [ file: IO.STREAM, numberPages: NAT, pageNumber: NAT, byteOffset: INT, length: INT ]; OpenPressFile: PROCEDURE [name: ROPE] RETURNS [handle: Handle]; <> <> GetDocumentDirectory: PROCEDURE [Handle] RETURNS [DocumentDirectory]; <> <> GetParts: PUBLIC PROCEDURE [handle: Handle, partNumber: INT, pageProc: PageProc _ NIL, fontDirectoryProc: FontDirectoryProc _ NIL]; <> <> <> <> GetFonts: PUBLIC PROCEDURE [handle: Handle, fontEntryProc: FontEntryProc]; <> <> <> GetPage: PUBLIC PROCEDURE [handle: Handle, entityProc: EntityProc]; <> <> <> GetCommands: PUBLIC PROCEDURE [handle: Handle, commandProcs: CommandProcs]; <> <> <> GetObject: PROCEDURE [handle: Handle, objectProcs: ObjectProcs]; <> <> <> GetDots: PROCEDURE [handle: Handle, dotProcs: DotProcs]; <> <> <> <> ClosePressFile: PROCEDURE [Handle]; <> PageProc: TYPE = PROCEDURE [handle: Handle, partDirectoryEntry: PartDirectoryEntry]; <> FontDirectoryProc: TYPE = PROCEDURE [handle: Handle, partDirectoryEntry: PartDirectoryEntry]; <> FontEntryProc: TYPE = PROCEDURE [fontDirectoryEntry: FontDirectoryEntry]; <> EntityProc: TYPE = PROCEDURE [handle: Handle, entityTrailer: EntityTrailer]; <> <> <> ShowCharactersProc: TYPE = PROCEDURE [ opCode: {showCharactersShort, showCharactersAndSkip, showCharacters, showCharacterImmediate}, length: INT, text: ROPE]; SkipProc: TYPE = PROCEDURE [ opCode: {skipCharacters, skipControlBytes, skipControlBytesImmediate, skipCharactersShort}, length: INT]; SpacingProc: TYPE = PROCEDURE [ opCode: {setSpaceX, setSpaceY, setSpaceXShort, setSpaceYShort, resetSpace}, value: INT]; SpaceProc: TYPE = PROCEDURE; PositionProc: TYPE = PROCEDURE [opCode: {setX, setY}, value: INT]; ColorProc: TYPE = PROCEDURE [opCode: {setHue, setSaturation, setBrightness}, value: INT]; FontProc: TYPE = PROCEDURE [font: INT]; NoOpProc: TYPE = PROCEDURE; ShowRectangleProc: TYPE = PROCEDURE [width, height: INT]; CopyProc: TYPE = PROCEDURE [value: INT]; AlternativeProc: TYPE = PROCEDURE [types: CARDINAL, elBytes, dlBytes: INT]; ShowObjectProc: TYPE = PROCEDURE [handle: Handle, length: INT]; ShowDotsProc: TYPE = PROCEDURE [handle: Handle, opCode: {showDots, showDotsOpaque}, length: INT]; BadProc: TYPE = PROCEDURE [opCode, command, data: INT]; MoveToProc: TYPE = PROCEDURE [x,y: INT]; DrawToProc: TYPE = PROCEDURE [x,y: INT]; DrawCurveProc: TYPE = PROCEDURE [cX, cY, bX, bY, aX, aY: REAL]; SetCodingProc: TYPE = PROCEDURE [code, dots, lines: INT]; SetModeProc: TYPE = PROCEDURE [mode: INT]; SetWindowProc: TYPE = PROCEDURE [pd,dd,pl,dl: INT]; SetSizeProc: TYPE = PROCEDURE [width, height: INT]; DotsFollowProc: TYPE = PROCEDURE [dots: Dots]; ObjectProcs: TYPE = RECORD[ moveToProc: MoveToProc _ NIL, drawToProc: DrawToProc _ NIL, drawCurveProc: DrawCurveProc _ NIL ]; DotProcs: TYPE = RECORD[ setCoding: SetCodingProc _ NIL, setMode: SetModeProc _ NIL, setWindow: SetWindowProc _ NIL, setSize: SetSizeProc _ NIL, dotsFollow: DotsFollowProc _ NIL ]; CommandProcs: TYPE = RECORD[ showCharactersProc: ShowCharactersProc_ NIL, skipProc: SkipProc _ NIL, spacingProc: SpacingProc _ NIL, spaceProc: SpaceProc _ NIL, positionProc: PositionProc _ NIL, colorProc: ColorProc _ NIL, fontProc: FontProc _ NIL, noOpProc: NoOpProc _ NIL, showRectangleProc: ShowRectangleProc _ NIL, showObjectProc: ShowObjectProc _ NIL, showDotsProc: ShowDotsProc _ NIL, copyProc: CopyProc _ NIL, alternativeProc: AlternativeProc _ NIL, badProc: BadProc _ NIL ]; PressReaderError: ERROR [errorCode: ErrorCode]; ErrorCode: PUBLIC TYPE = { FileNotAvailableForRead, FileNotAPressFile, BadHandle, BadPartType, PartNotFound, NoFontDirectoryPart, CurrentPartNotAPage, NoEntity, NotAtObject, NotAtDots, AbortedBecauseGetFailed }; END. <> <> <<>> <> <> <> <<>> <> <> <<>> <> <> <<>> <> <> <<>> <> <>