-- file: LaurelHardcopyDefs.mesa -- edited by Brotz, March 23, 1981 4:09 PM -- edited by Levin, January 16, 1981 11:02 AM DIRECTORY lsD: FROM "LaurelStateDefs", MailParse, ovD: FROM "OverviewDefs"; LaurelHardcopyDefs: DEFINITIONS IMPORTS MailParse = BEGIN -- entity list commands: showCharactersShortCom: Byte = 0B; fontCom: Byte = 160B; setXCom: Byte = 356B; setYCom: Byte = 357B; showCharactersCom: Byte = 360B; setSpaceXCom: Byte = 364B; showRectangleCom: Byte = 376B; Byte: TYPE = [0 .. 377B]; Mica: TYPE = CARDINAL; inch: Mica = 2540; magicNonPrintingWidth: CARDINAL = 100000B; postColonSpacing: Mica = inch / 8; EntityTrailer: TYPE = MACHINE DEPENDENT RECORD [entityType: Byte, fontSet: Byte, beginByteHigh, beginByteLow, byteLengthHigh, byteLengthLow, ye, xe, left, bottom, width, height, entityLength: CARDINAL]; PartDirectoryEntry: TYPE = MACHINE DEPENDENT RECORD [partType, recordStart, nRecords, entityListPadding: CARDINAL]; DocumentDirectoryHeader: TYPE = MACHINE DEPENDENT RECORD [generalPassword, nRecordsInFile, nParts, partDirectoryStartRecord, nRecordsInPartDirectory, obsoleteBackPointer, unused1, unused2, firstCopy, lastCopy: CARDINAL]; FontDirectoryEntry: TYPE = MACHINE DEPENDENT RECORD [entryLength: CARDINAL, fontSet: Byte, fontNumber: Byte, m: Byte, n: Byte, familyName: FontName, face, source: Byte, size, rotation: CARDINAL]; FontDirectoryRec: TYPE = RECORD [entry: ARRAY FontNumber OF FontDirectoryEntry, endMarker: CARDINAL]; FontDirectory: TYPE = POINTER TO FontDirectoryRec; FontName: TYPE = PACKED ARRAY [0 .. 20) OF CHARACTER; FontFace: TYPE = [0 .. 2*3*3); -- FontFace encoded as follows: -- medium weight, regular slope is 0. -- for bold weight add 2. -- for italic slope add 1. normalFontFace: FontFace = 0; boldFontFace: FontFace = 2; italicFontFace: FontFace = 1; maxNFonts: CARDINAL = 10; FontNumber: TYPE = [0 .. maxNFonts); -- Type definitions for reading Fonts.widths. Ix: TYPE = MACHINE DEPENDENT RECORD [type: [0 .. 17B), length: [0 .. 7777B]]; Ixn: TYPE = MACHINE DEPENDENT RECORD [ix: Ix, code: CARDINAL, name: FontName]; Stdix: TYPE = MACHINE DEPENDENT RECORD [ix: Ix, code, face: Byte, bc, ec: CHARACTER, size: CARDINAL, rotation: INTEGER, x1, location, x2, length: CARDINAL]; -- position in file WidthSegment: TYPE = MACHINE DEPENDENT RECORD [fBBox, fBBoy, fBBdx, fBBdy: CARDINAL, xWidthFixed, yWidthFixed: BOOLEAN, xxx: [0 .. 37777B]]; WidthTableArray: TYPE = ARRAY FontNumber OF CharWidthArray; WidthTable: TYPE = POINTER TO WidthTableArray; CharWidthArray: TYPE = ARRAY CHARACTER[0C .. 177C] OF Mica; -- Type definitions for compiled hardcopy forms. HardcopyFormTable: TYPE = POINTER TO HardcopyFormTableRec; HardcopyFormTableRec: TYPE = RECORD [nForms: CARDINAL, formTable: ARRAY [0 .. 0) OF HardcopyFormTableElement]; HardcopyFormTableElement: TYPE = RECORD [name: STRING, segment: lsD.StateSegment]; HardcopyFormRec: TYPE = RECORD [top: Mica, bottom: Mica, left: Mica, right: Mica, nFields: CARDINAL, lineLeading: Mica, startOnNewPage: BOOLEAN, fieldTable: FieldTableRelPtr, options: OptionRelPtr, rows: RowRelPtr]; HardcopyForm: TYPE = BASE POINTER TO HardcopyFormRec; FieldTableRelPtr: TYPE = HardcopyForm RELATIVE FieldTable; FieldTableNIL: FieldTableRelPtr = LOOPHOLE[0]; FieldTable: TYPE = POINTER TO FieldTableArray; FieldTableArray: TYPE = ARRAY [0 .. 0) OF HardcopyRelativeString; HardcopyRelativeString: TYPE = HardcopyForm RELATIVE STRING; HardcopyRelativeStringNIL: HardcopyRelativeString = LOOPHOLE[0]; OptionRelPtr: TYPE = HardcopyForm RELATIVE Option; OptionNIL: OptionRelPtr = LOOPHOLE[0]; Option: TYPE = POINTER TO OptionRec; OptionRec: TYPE = RECORD [x: Mica, y: Mica, font: FontNumber, onFirstPage: BOOLEAN, nextOption: OptionRelPtr, vp: SELECT option: OptionType FROM heading => [fieldName: HardcopyRelativeString, right: Mica, start: ovD.CharIndex, -- state variable used during processing. end: ovD.CharIndex], -- state variable used during processing. caption => [text: HardcopyRelativeString], pageNumber => NULL, ENDCASE]; OptionType: TYPE = {heading, caption, pageNumber}; RowRelPtr: TYPE = HardcopyForm RELATIVE Row; RowNIL: RowRelPtr = LOOPHOLE[0]; Row: TYPE = POINTER TO RowRec; RowRec: TYPE = RECORD [rowLeading: Mica, verticalTab: Mica, lineLeading: Mica, nextRow: RowRelPtr, columns: ColumnRelPtr]; ColumnRelPtr: TYPE = HardcopyForm RELATIVE Column; ColumnNIL: ColumnRelPtr = LOOPHOLE[0]; Column: TYPE = POINTER TO ColumnRec; ColumnRec: TYPE = RECORD [left: Mica, right: Mica, font: FontNumber, start: CARDINAL, -- state variable used during processing. end: CARDINAL, -- state variable used during processing. nextColumn: ColumnRelPtr, cv: SELECT columnType: ColumnType FROM field => [fieldFont: FontNumber, fieldNameAbove: BOOLEAN, colonAfterFieldName: BOOLEAN, textLeft: Mica, fv: SELECT fieldType: FieldType FROM specific => [fieldIndex: CARDINAL, aliasFieldIndex: CARDINAL, required: BOOLEAN, suppress: BOOLEAN, printFieldName: BOOLEAN, breakOnComma: BOOLEAN], other => [fieldLeading: Mica, newField: BOOLEAN], -- state variable used during processing. ENDCASE], caption => [text: HardcopyRelativeString], body => NULL, everything => NULL, ENDCASE]; ColumnType: TYPE = {field, caption, body, everything}; FieldType: TYPE = {specific, other}; LineSegmentTable: TYPE = ARRAY [0 .. 12] OF RECORD [index: CARDINAL, x: Mica]; -- ******************** -- -- Procedures -- -- ******************** -- InitHardcopyFonts: PROCEDURE; -- Initializes the font directory for hardcopy. This must be called first of all hardcopy -- installation procedures. IncludeHardcopyFont: PROCEDURE [fontNumber: FontNumber, name: STRING, points: CARDINAL, face: FontFace] RETURNS [error: ovD.ErrorCode]; -- Reads name-points-face and makes it font number fontNumber. May be called an -- arbitrary number of times between InitHardcopyFonts and InstallHardcopy. ParseFont: PROCEDURE [line: STRING] RETURNS [ovD.ErrorCode]; -- Reads a font name from line and calls IncludeHardcopyFont with the parsed font. ParseHardcopyForm: PROCEDURE [pH: MailParse.ParseHandle] RETURNS [error: ovD.ErrorCode]; -- Parses the next field body read from Laurel.profile and creates a relocatable segment for it. InstallHardcopy: PROCEDURE RETURNS [error: ovD.ErrorCode]; -- Must be called after Profile is read. Insures that appropriate fonts and forms are loaded, -- supplying default fonts and forms if necessary. Writes out hardcopy font width tables, -- font directory and forms to Laurel.state. This procedure must be called last of all -- hardcopy installation procedures. CheckForAbort: PROCEDURE; -- Checks keystream for cancel character (DEL or CANCEL). Raises AbortHardcopy error if -- cancel character is seen. Flushes any other characters. -- Press file procedures -- InitPressPage: PROCEDURE; -- Initializes state variables. FinishPressPage: PROCEDURE; -- Completes the current page part by pushing out the entity list onto the pressStream and -- by adding a new entry to the part directory. FinishPressFile: PROCEDURE [chunk: CARDINAL]; -- Completes the press file by pushing out the font directory, the part directory, and the -- document directory. PrintPressString: PROCEDURE [string: STRING, fontNumber: CARDINAL, x, y: Mica, segTable: POINTER TO LineSegmentTable]; -- Puts string into the press file entity list and data list. SetCurrentPressFont: PROCEDURE [font: FontNumber]; -- Sets font in the press file entity list. FindPrinter: PROCEDURE RETURNS [error: ovD.ErrorCode]; -- Locates printer to which press file will be sent. Returns ok if found, cantConnect if not. SendPressFile: PROCEDURE; -- Uses EFTP to send the current press file to the current hardcopy host. TimeToSend: PROCEDURE RETURNS [BOOLEAN]; -- Returns TRUE iff press file exceeds maximum length. OpenPressStreams: PROCEDURE; -- Opens files and streams used during press file construction. ClosePressStreams: PROCEDURE; -- Closes files and streams used during press file construction. AbortHardcopy: ERROR; widthTable: WidthTable; -- exported by IntHardcopyCom. HardcopyAbortCode: TYPE = {no, laurel, user}; aborted: HardcopyAbortCode; -- exported by IntHardcopyCom. -- Diablo HyType printer definitions. xPerInch: CARDINAL = 60; yPerInch: CARDINAL = 48; micasPerDiabloX: CARDINAL = inch / xPerInch; micasPerDiabloY: CARDINAL = inch / yPerInch; elevenInchesInMicas: CARDINAL = inch * 11; pwiIn: POINTER TO UNSPECIFIED = LOOPHOLE[177030B]; pwiOut: POINTER TO UNSPECIFIED = LOOPHOLE[177016B]; wiPaper: UNSPECIFIED = 100000B; wiReset: UNSPECIFIED = 40000B; wiCheck: UNSPECIFIED = 40000B; wiOnline: UNSPECIFIED = 20000B; wiRibbon: UNSPECIFIED = 20000B; wiDaisy: UNSPECIFIED = 10000B; wiCarriage: UNSPECIFIED = 4000B; wiReady: UNSPECIFIED = 2000B; wiAllReady: UNSPECIFIED = 116000B; wiNil: UNSPECIFIED = 0B; wMaxStrobe: UNSPECIFIED = 1024; wAbsMaxStrobe: UNSPECIFIED = 13777B; -- signed magnitude -1023 -- -- Diablo HyType printer procedures. NewDiabloPage: PROCEDURE; FinishDiabloPage: PROCEDURE; PrintDiabloString: PROCEDURE [string: STRING, fontNumber: CARDINAL, x, y: Mica, segTable: POINTER TO LineSegmentTable]; END. -- of LaurelHardcopyDefs --z20461d3008(529)\f1