DIRECTORY AltoFileDefs: FROM "AltoFileDefs" USING [FP,vDA], GraphicsDefs: FROM "GraphicsDefs" USING [StrikeFont,textMode], StreamDefs: FROM "streamdefs" USING [StreamHandle,DiskHandle], DiscoDefs: FROM "DiscoDefs" USING [DiskPosition]; PressDefs: DEFINITIONS = BEGIN --standard press file procedural interface InitPressFileDescriptor: PUBLIC PROCEDURE [p: POINTER TO PressFileDescriptor,filename: STRING]; SetSpaceX: PROCEDURE [p: POINTER TO PressFileDescriptor, micaX: CARDINAL]; SetSpaceY: PROCEDURE [p: POINTER TO PressFileDescriptor, micaY: CARDINAL]; SetColor: PUBLIC PROCEDURE [p: POINTER TO PressFileDescriptor, hue,sat,bright: [0..256)]; SetHue: PUBLIC PROCEDURE [p: POINTER TO PressFileDescriptor,hue: [0..256)]; SetSaturation: PUBLIC PROCEDURE [p: POINTER TO PressFileDescriptor,sat: [0..256)]; SetBrightness: PUBLIC PROCEDURE [p: POINTER TO PressFileDescriptor,bright: [0..256)]; SetFont: PUBLIC PROCEDURE [p: POINTER TO PressDefs.PressFileDescriptor,Name: STRING,PointSize: CARDINAL,Face: CARDINAL _ 0,Rotation: CARDINAL _ 0]; PutText: PUBLIC PROCEDURE [p: POINTER TO PressFileDescriptor,str: STRING, xleft,ybase: CARDINAL]; PutRectangle: PUBLIC PROCEDURE [p: POINTER TO PressFileDescriptor, xstart,ystart,xlen,ylen: CARDINAL]; StartOutline: PUBLIC PROCEDURE[p: POINTER TO PressFileDescriptor,x0,y0: CARDINAL]; PutMoveTo: PUBLIC PROCEDURE[p: POINTER TO PressFileDescriptor,xend,yend: CARDINAL]; PutDrawTo: PUBLIC PROCEDURE[p: POINTER TO PressFileDescriptor,xend,yend: CARDINAL]; PutCubic: PUBLIC PROCEDURE[p: POINTER TO PressFileDescriptor,x1,y1,x2,y2,x3,y3: REAL]; --Extend outline by cubic relative to current position --xi is x coefficient of t^i, etc. EndOutline: PUBLIC PROCEDURE[p: POINTER TO PressFileDescriptor]; PutAltoDots: PUBLIC PROCEDURE [p: POINTER TO PressFileDescriptor, x,y,nDots,nScanLines: CARDINAL,dots: POINTER]; PutPressDotsData: PUBLIC PROCEDURE [p: POINTER TO PressFileDescriptor, x,y: CARDINAL,dotsData: POINTER TO PressDotsData, nextScanLine: PROCEDURE RETURNS [POINTER]]; PutDots: PUBLIC PROCEDURE [p: POINTER TO PressFileDescriptor, x,y,nPixels,nScanLines,bitsPerPixel,width,height: CARDINAL,dots: POINTER, screenFrequency: CARDINAL _ 0,screenAngle: CARDINAL _ 45]; PutComputedDots: PUBLIC PROCEDURE [p: POINTER TO PressFileDescriptor, x,y,nPixels,nScanLines,bitsPerPixel,width,height: CARDINAL, nextScanLine: PROCEDURE RETURNS [POINTER], screenFrequency: CARDINAL _ 0,screenAngle: CARDINAL _ 45, min,max: CARDINAL _ 0]; PutDotsFromFile: PUBLIC PROCEDURE [p: POINTER TO PressFileDescriptor, x,y,nPixels,nScanLines,bitsPerPixel,width,height: CARDINAL,dots: STRING, screenFrequency: CARDINAL _ 0,screenAngle: CARDINAL _ 45, min,max: CARDINAL _ 0]; WritePage: PUBLIC PROCEDURE [p: POINTER TO PressFileDescriptor]; ClosePressFile: PUBLIC PROCEDURE [p: POINTER TO PressFileDescriptor]; --low level utility functions MulDiv: PUBLIC PROCEDURE [a,b,c:CARDINAL] RETURNS [CARDINAL]; SignedMulDiv: PUBLIC PROCEDURE [a,b,c:INTEGER] RETURNS [INTEGER]; SetBlock: PUBLIC PROCEDURE [buf: POINTER TO ARRAY [0..0) OF INTEGER,val,len: INTEGER]; WriteCommand: PUBLIC PROCEDURE [p: POINTER TO PressFileDescriptor,Command: CARDINAL,Param: POINTER TO ARRAY [0..6) OF CARDINAL]; WriteDirectory: PUBLIC PROCEDURE [p: POINTER TO PressFileDescriptor]; WritePartDirectory: PUBLIC PROCEDURE [p: POINTER TO PressFileDescriptor]; --font operations (from FontWidth) EncodeFace: PUBLIC PROCEDURE [weight,slope,expansion: CHARACTER] RETURNS [INTEGER]; LookupFontName: PROCEDURE [s: StreamDefs.StreamHandle,famstr: STRING,face,siz,rot: INTEGER,bufx,bufy: POINTER TO ARRAY [0..256) OF INTEGER,boundbox: POINTER TO ARRAY [0..4) OF INTEGER] RETURNS[BOOLEAN]; --press object functions and data structures OpenPressFile: PUBLIC PROCEDURE [fileName: STRING,pfp: POINTER TO PressFilePointers] RETURNS [nPages: CARDINAL]; OpenPressFileFromFP: PUBLIC PROCEDURE [fp: POINTER TO AltoFileDefs.FP,pfp: POINTER TO PressFilePointers] RETURNS [nPages: CARDINAL]; --userProc is really PROCEDURE[p: POINTER TO PressPage]; -- it is called once for each object on the page GetPressPageFromFP: PUBLIC PROCEDURE[fp: POINTER TO AltoFileDefs.FP,pageNumber: CARDINAL,p: POINTER TO PressPage,userProc: UNSPECIFIED _ 0]; ReadPressPage: PROCEDURE [pfp: POINTER TO PressFilePointers,pageNumber: CARDINAL,p: POINTER TO PressPage,userProc: UNSPECIFIED _ 0]; ReleasePressFilePointers: PUBLIC PROCEDURE [pfp: POINTER TO PressFilePointers]; GetPressPage: PROCEDURE[fileName: STRING,pageNumber: CARDINAL,p: POINTER TO PressPage]; GetPressDotsData: PROCEDURE [obj: POINTER TO PressObject,dots: POINTER TO PressDotsData]; ReleasePressPage: PROCEDURE[p: POINTER TO PressPage]; PutPressPage: PROCEDURE[pfd: POINTER TO PressFileDescriptor,p: POINTER TO PressPage,dx: CARDINAL _ 0,dy: CARDINAL _ 0]; PressObject: TYPE = RECORD [ link: POINTER TO PressObject, micaX,micaY: CARDINAL, command: PressDefs.ELCommand, --to keep this data type autonomous, include all global state hue,sat,br: [0..377B], spaceX,spaceY: CARDINAL, font: [0..17B], --and stuff to get data from input stream nDataBytes: [0..7777B], diskPosition: DiscoDefs.DiskPosition ]; PressDotsData: TYPE = RECORD [ nBitsPerPixel,nPixels,nLines: CARDINAL, passPixels,displayPixels,passLines,displayLines: CARDINAL, micaWidth,micaHeight: CARDINAL, min,max: CARDINAL, angle,frequency: CARDINAL, opaque: BOOLEAN, haveDot: BOOLEAN, --whether dotPosition is relevant mode: [0..15], fileName: STRING, --in case GetDotsFromFile dotPosition,diskPosition: DiscoDefs.DiskPosition ]; PressFont: TYPE = RECORD [ Family: STRING, PointSize,Face,Rotation: CARDINAL, Widths: POINTER TO ARRAY CHARACTER [0C..255C] OF CARDINAL ]; PressPage: TYPE = RECORD [ leftX,bottomY,rightX,topY: CARDINAL, --bounding box in micas for page ObjectList: POINTER TO PressObject, --linked list FontDir: ARRAY[0..16] OF POINTER TO PressFont --allows 16 fonts+NIL trailer ]; PressFilePointers: TYPE = RECORD [ FontDir: POINTER TO ARRAY [0..0) OF PressFontEntry, PartDir: POINTER TO ARRAY [0..0) OF PartEntry, vDAs: POINTER TO ARRAY [0..0) OF AltoFileDefs.vDA, fontWidthsStream: StreamDefs.DiskHandle ]; --data structures and constants FontDef: TYPE = RECORD [ strike: POINTER TO GraphicsDefs.StrikeFont, mode: GraphicsDefs.textMode, width: POINTER TO ARRAY [0..255] OF CARDINAL ]; EntityDef: TYPE = RECORD [ trailer: POINTER TO EntityCommandTrailer, commands: POINTER TO PACKED ARRAY [0..0) OF ELCommand ]; Byte: TYPE = [0..377B]; PressPassword: CARDINAL = 27183; PressFileDescriptor: TYPE = RECORD [ outStream: StreamDefs.StreamHandle, fontDir: POINTER TO FontDir, partDir: POINTER TO PartDir, EntityCommandLen: CARDINAL, EntityCommandMaxLen: CARDINAL, EntityCommands: POINTER TO PACKED ARRAY [0..2048) OF [0..256), RecordStart: CARDINAL, fontLen: CARDINAL, partLen: CARDINAL, numParts: CARDINAL, numFonts: CARDINAL, FirstCopy: CARDINAL, LastCopy: CARDINAL, solidCode: CHARACTER, PressFileName: STRING, UserName: STRING, DateString: STRING, --general page params TopMarg,BottomMarg,LeftMarg,RightMarg: INTEGER, --some stuff to do with current font etc. CurSpaceX,CurSpaceY: CARDINAL, CurHue,CurSat,CurBright: [0..256) ]; FontDir: TYPE = ARRAY [0..128) OF POINTER; -- to FontEntry or FontCharacter PartDir: TYPE = ARRAY [0..128) OF PartEntry; DocDir: TYPE = MACHINE DEPENDENT RECORD [ Password: CARDINAL, nRecs: CARDINAL, nParts: CARDINAL, partDirStart: CARDINAL, partLength: CARDINAL, spare1: CARDINAL, date: LONG INTEGER, firstCopy: INTEGER, lastCopy: INTEGER, firstPage: INTEGER, lastPage: INTEGER, spare2: Byte, solidCode: CHARACTER, spare3: ARRAY [13D..177B] OF CARDINAL, fileName: PACKED ARRAY [ 0..51] OF CHARACTER, userName: PACKED ARRAY [0..31] OF CHARACTER, dateString: PACKED ARRAY [0..39] OF CHARACTER, spare4: ARRAY [276B..377B] OF CARDINAL ]; PartType: TYPE = CARDINAL; Page: PartType = 0; Font: PartType = 1; ExternalFileDirectory: PartType = 2; PartEntry: TYPE = MACHINE DEPENDENT RECORD [ Type: PartType, RecordStart: CARDINAL, RecordLength: CARDINAL, PaddingLength: CARDINAL ]; PressFontEntry: TYPE = MACHINE DEPENDENT RECORD [ EntryLength: CARDINAL, FontSet: Byte, Font: Byte, M: Byte, N: Byte, Family: PACKED ARRAY [0..20) OF CHARACTER, Face: Byte, Source: Byte, Size: CARDINAL, Rotation: CARDINAL ]; FontEntry: TYPE = RECORD [ EntryLength: CARDINAL, FontSet: Byte, Font: Byte, M: Byte, N: Byte, Family: STRING, Face: Byte, Source: Byte, Size: CARDINAL, Rotation: CARDINAL ]; FontCharacter: TYPE = MACHINE DEPENDENT RECORD [ EntryLength: CARDINAL, FontSet: Byte, Font: Byte, M: Byte, AllOnes: Byte, Zero: CARDINAL, ObjectList: POINTER ]; MRR: Byte = 0; MIR: Byte = 1; BRR: Byte = 2; BIR: Byte = 3; EntityCommandTrailer: TYPE = MACHINE DEPENDENT RECORD [ Type: Byte, FontSet: Byte, BeginByte,ByteLen: ARRAY[0..1] OF CARDINAL, Xe,Ye,Left,Bottom,Width,Height,EntityLen: CARDINAL ]; --General constants MicasPerInch: INTEGER=2540; PointsPerInch: INTEGER=72; MicaHeight: INTEGER = MicasPerInch*11; MicaWidth: INTEGER = (MicasPerInch/2)*17; maxFonts: CARDINAL = 16; --Entity list commands; ELCommand: TYPE = [0..377B]; ELShowCharactersShort: ELCommand = 0; ELSkipCharactersShort: ELCommand = 40B; ELShowCharactersAndSkip: ELCommand = 100B; ELSetSpaceXShort: ELCommand = 140B; ELSetSpaceYShort: ELCommand = 150B; ELFont: ELCommand = 160B; ELSkipControlBytesImmediate: ELCommand = 353B; ELAlternative: ELCommand = 354B; ELOnlyOnCopy: ELCommand = 355B; ELSetX: ELCommand = 356B; ELSetY: ELCommand = 357B; ELShowCharacters: ELCommand = 360B; ELSkipCharacters: ELCommand = 361B; ELSkipControlBytes: ELCommand = 362B; ELShowCharacterImmediate: ELCommand = 363B; ELSetSpaceX: ELCommand = 364B; ELSetSpaceY: ELCommand = 365B; ELResetSpace: ELCommand = 366B; ELSpace: ELCommand = 367B; ELSetBrightness: ELCommand = 370B; ELSetHue: ELCommand = 371B; ELSetSaturation: ELCommand = 372B; ELShowObject: ELCommand = 373B; ELShowDots: ELCommand = 374B; ELShowDotsOpaque: ELCommand = 375B; ELShowRectangle: ELCommand = 376B; ELNop: ELCommand = 377B; --Data list commands; DLMoveTo: CARDINAL = 0; DLDrawTo: CARDINAL = 1; DLDrawCurve: CARDINAL = 2; DLSetCoding: CARDINAL = 1; --byte DLSetWindow: CARDINAL = 1; --word DLSetMode: CARDINAL = 2; --byte DLSetSize: CARDINAL = 2; --word DLDotsFollow: CARDINAL = 3; --word DLGetDotsFromFile: CARDINAL = 4; --word DLGetDotsFromPressFile: CARDINAL = 5; --word DLSetSamplingProperties: CARDINAL = 6; --word DLSSPInputIntensity: CARDINAL = 0; --word DLSSPOutputIntensity: CARDINAL = 1; --word DLSSPScreen: CARDINAL = 2; --word DLSSPDot: CARDINAL = 3; --word END.(635)\f1 272b1Bi43bI24B74b9B67b9B67b8B83b6B71b13B71b13B74b7B142b7B93b12B92b12B71f0 1f1b9B73f0 1f1 2b9B73f0 1f1 2b8B77f0 1f1 90f0 1f1 1b10B56b11B104b16B152b7B191b15B245b15B214b9B57b14B57i31bI6B57b12B55b8B80b12B118b14B57b18B57i36bI10B75b14B193i46bI13B100b19B114b126B123b13B120b25B57b12B78b16B75b16B40b12B110b11B347b13B387b9B135b9B222b17B217i33bI7B144b9B