-- GFileFormatDefs
-- m.stone November 10, 1980 4:14 PM
-- Dawson, May 30, 1979 7:54 PM
-- Tiberi November 6, 1979 4:00 PM
-- Last Edited by: Stone, December 16, 1982 9:14 am

GFileFormatDefs: DEFINITIONS =

BEGIN

SectorIndex: TYPE = MACHINE DEPENDENT RECORD [sector: CARDINAL [0 .. 32767]];

GFileSector: TYPE = ARRAY BYTE OF CARDINAL;

BYTE: TYPE = CARDINAL [0 .. 255];


-- header definition

maxFigNum: CARDINAL = 100;
ValidFigRange: TYPE = CARDINAL [1 .. maxFigNum];
cNameWords: CARDINAL = 20;
pNameWords: CARDINAL = 20;
cNameChars: CARDINAL = 2*cNameWords-1;
pNameChars: CARDINAL = 2*pNameWords-1;
ZeroHeaderRange: TYPE = CARDINAL [5+maxFigNum+cNameWords+pNameWords .. 255];

GFileHeader: TYPE = MACHINE DEPENDENT RECORD
 [
 majversion: BYTE,
 minversion: BYTE,
 createtime: LONG CARDINAL,
 numfigs: CARDINAL,
 zero1: BOOLEAN,
 nextsector: SectorIndex,
 figure: ARRAY ValidFigRange OF SectorIndex,
 creatorname: PACKED ARRAY [0 .. cNameChars] OF CHARACTER,
 portfolioname: PACKED ARRAY [0 .. pNameChars] OF CHARACTER,
 zero: ARRAY ZeroHeaderRange OF CARDINAL
 ];

lGFileHeader: CARDINAL [SIZE [GFileSector] .. SIZE [GFileSector]] = SIZE [GFileHeader];

-- controller definition

GFileHardcopyController: TYPE = MACHINE DEPENDENT RECORD
 [
 centerx: REAL,
 centery: REAL,
 width: REAL,
 height: REAL,
 presscenterx: CARDINAL,
 presscentery: CARDINAL,
 scale: REAL
 ];

lGFileHardcopyController: CARDINAL = SIZE [GFileHardcopyController];

GFileDisplayController: TYPE = MACHINE DEPENDENT RECORD
 [
 centerx: CARDINAL,
 centery: CARDINAL,
 width: CARDINAL,
 height: CARDINAL,
 xscale: REAL,
 yscale: REAL,
 gridxo: REAL,
 gridyo: REAL,
 gridsize: CARDINAL,
 numcontrolpairs: CARDINAL
 ];

lGFileDisplayController: CARDINAL = SIZE [GFileDisplayController];


-- control pair definition

GFileControlPair: TYPE = MACHINE DEPENDENT RECORD
 [
 hue: BYTE,
 brightness: BYTE,
 saturation: BYTE,
 greytouse: BYTE
 ];

lGFileControlPair: CARDINAL = SIZE [GFileControlPair];

fontWords: CARDINAL = 10;
fontChars: CARDINAL = 2*fontWords-1;

GFileFont: TYPE = MACHINE DEPENDENT RECORD
 [points, face, rotation: CARDINAL, char: PACKED ARRAY [0 .. fontChars] OF CHARACTER];

lGFileFont: CARDINAL = SIZE [GFileFont];


-- style definition

typeUnDashed: CARDINAL = 0;
typeDash1: CARDINAL = 1;
typeDash2: CARDINAL = 2;
typeDash3: CARDINAL = 3;
typeDash4: CARDINAL = 4;
typeDash5: CARDINAL = 5;

typeRoundEnd: CARDINAL = 0;
typeCyclicEnd: CARDINAL = 1;
typeFlatEnd: CARDINAL = 2;
typeAngledEnd: CARDINAL = 3;


typeRoundJunction: CARDINAL = 0;
typeSquareJunction: CARDINAL = 1;
typeAngledJunction: CARDINAL = 2;


typeLeftAnchor: CARDINAL = 0;
typeCenterAnchor: CARDINAL = 1;
typeRightAnchor: CARDINAL = 2;

typeRot0: CARDINAL = 0;
typeRot90: CARDINAL = 1;
typeRot180: CARDINAL = 2;
typeRot270: CARDINAL = 3;


sNameWords: CARDINAL = 20;
sNameChars: CARDINAL = 2*sNameWords-1;

GFileStyle: TYPE = MACHINE DEPENDENT RECORD
 [
 hue: BYTE,
 saturation: BYTE,
 brightness: BYTE,
 zero1: BYTE,
 dashedness: [0 .. 15],
 zero2: [0 .. 15],
 send: [0 .. 15],
 eend: [0 .. 15],
 bdx: REAL,
 bdy: REAL,
 ba: REAL,
 bb: REAL,
 bc: REAL,
 edx: REAL,
 edy: REAL,
 ea: REAL,
 eb: REAL,
 ec: REAL,
 thickness: REAL,
 junction: CARDINAL,
 ahue: BYTE,
 asaturation: BYTE,
 abrightness: BYTE,
 afilled, aoutlined: BOOLEAN,
 zero3: [0 .. 63],
 fontid: CARDINAL,
 bhue: BYTE,
 bsaturation: BYTE,
 bbrightness: BYTE,
 background: BOOLEAN,
 zero4: [0 .. 127],
 anchor: [0 .. 3],
 torient: [0 .. 3],
 zero5: [ 0 .. 4095],
 stylename: PACKED ARRAY [0 .. sNameChars] OF CHARACTER
 ];

lGFileStyle: CARDINAL = SIZE [GFileStyle];

-- object definition

typePartiallyVisible: CARDINAL = 0;
typeWhollyVisible: CARDINAL = 1;
typeNotVisible: CARDINAL = 2;


typeCurveObject: CARDINAL = 1;
typeAreaObject: CARDINAL = 2;
typeCaptionObject: CARDINAL = 3;
typeTokenObject: CARDINAL = 4;

typeNUMSpline: CARDINAL = 0;
typeCUMSpline: CARDINAL = 1;
typeNALSpline: CARDINAL = 2;
typeCALSpline: CARDINAL = 3;
typeBEZSpline: CARDINAL = 4;
typeBSISpline: CARDINAL = 5;
typeBSpline: CARDINAL = 6;
typeCRSpline: CARDINAL = 7;

typeLinkedTraj: CARDINAL = 0;
typeCSTraj: CARDINAL = 1;
typeCETraj: CARDINAL = 2;

GFileObject: TYPE = MACHINE DEPENDENT RECORD
 [
 objtype: BYTE,
 hidewindow: BOOLEAN,
 visible: [ 0 .. 3],
 zero1: [0 .. 31],
 style: BYTE,
 cluster: BYTE,
 bleft: INTEGER,
 bbottom: INTEGER,
 bright: INTEGER,
 btop: INTEGER,
 zero2: BYTE,
 splinetype: [ 0 .. 15],
 trajtype: [ 0 .. 15]
 ];

lGFileObject: CARDINAL = SIZE [GFileObject];


GFileEllipseTrailer: TYPE = MACHINE DEPENDENT RECORD
 [
 long: REAL,
 short: REAL,
 angle: REAL,
 centerx: REAL,
 centery: REAL
 ];

lGFileEllipseTrailer: CARDINAL = SIZE [GFileEllipseTrailer];


GFileCaptionTrailer: TYPE = MACHINE DEPENDENT RECORD
 [
 xanchor: REAL,
 yanchor: REAL
 ];


lGFileCaptionTrailer: CARDINAL = SIZE [GFileCaptionTrailer];


typeFD0Knot: CARDINAL = 0;
typeFD1Knot: CARDINAL = 1;
typeFD2Knot: CARDINAL = 2;
typeFD3Knot: CARDINAL = 3;
typeAnalyticKnot: CARDINAL = 7;

GFileKnotWord: TYPE = MACHINE DEPENDENT RECORD
 [knottype: [0 .. 7], knotcount: [0 .. 8191]];

lGFileKnotWord: CARDINAL = SIZE [GFileKnotWord];

GFilePoint: TYPE = MACHINE DEPENDENT RECORD [x: REAL, y: REAL];

lGFilePoint: CARDINAL = SIZE [GFilePoint];

GFileReal: TYPE = MACHINE DEPENDENT RECORD [r: REAL];

lGFileReal: CARDINAL = SIZE [GFileReal];


figureNameWords: CARDINAL = 20;
figureNameChars: CARDINAL = 2*figureNameWords-1;


GFileFigureName: TYPE = MACHINE DEPENDENT RECORD
 [char: PACKED ARRAY [0 .. figureNameChars] OF CHARACTER];

lGFileFigureName: CARDINAL = SIZE [GFileFigureName];




END .