// P R E P R E S S    D E F I N I T I O N S
//
//Modified May 8, 1980  10:34 PM by Lyle Ramshaw, to add a new
// IXType for TEX font metric files.  They should be thought
// of as a new form of width block. 

// I N D E X     Definitions

structure IXH: [
	Type	bit 4
	Length	bit 12
	]

structure IXN: [		//For a name
	@IXH
	Code word
	Name word
	contd word 9
	]

structure IX: [			//For splines, characters
	@IXH			//Header
	[ fam byte		// Family number
	  face byte		// Face code
	] = famface word
	bc byte			// First char number
	ec byte			// and last
	siz word		// Font size (10 micron units)
	rotation word		// Rotation (anti clockwise)
	sa word 2		//Starting address of data part
	len word 2		//Length of data part
				//Width type ends here
				//Spline type ends here
				//TexMetric type ends here
	resolutionx word	// 10*(number of bits/inch)
	resolutiony word	//       ditto
	]

structure IXM :
 [
	@IXH				//Header, type = IXTypeMultiChars
	fam	byte			//Family number
	face	byte			//Face code
	bc	byte			//First char number
	ec	byte			// and last
	siz	word			// Size in microns
	rotation word			// Rotation in minutes
	resolutionx	word		// 10* number of bits/inch
	resolutiony	word
	numSegs word			// number of character width segments (1st contains rasters)
	segs↑1,4: [			// Max 4
		sa word 2		// starting position in file
		len word 2		// and length
		date word 2 =		// date after which these widths valid
		  [ date0 word; date1 word ]
		]
 ]

manifest [
//IXH types
	IXTypeEnd=0
	IXTypeName=1
	IXTypeSplines=2
	IXTypeChars=3
	IXTypeWidths=4
	IXTypeOrbitChars=5
	IXTypeMultiChars = 6
	IXTypeTexMetrics = 7
//IXH lengths
	IXLEnd=1
	IXLName=size IXN/16
	IXLSplines=9
	IXLChars=11
	IXLWidths=9
	IXLMulti=size IXM/16
	IXLTexMetrics=9
	IXLMax=IXLMulti
	]

// W I D T H   segment definitions

structure WTB: [		//Width Table Block
	XL word			//X offset
	YB word			//Y offset
	XW word			// width
	YH word			// height
	XWidthFixed bit
	YWidthFixed bit
	spare bit 14
	]

// S P L I N E     segment definitions

structure SplineWidth: [		//Block describing spline widths
	WX word 2		//X width -- FP
	WY word 2		//Y width -- FP
	XL word 2		//X left -- FP
	YB word 2		//Y bottom -- FP
	XR word 2		//X right -- FP
	YT word 2		//Y top -- FP
	]

manifest SplineWidthsize=size SplineWidth/16

manifest [
//Codes in the height entry for a char that indicate something else
	HNonExCode=-1
	HSplineCode=-2

//DL Types (for Spline File)
	DSplineFontMoveTo=1
	DSplineFontDrawTo=2
	DSplineFontDrawCurve=3

	DSplineFontNewObject=-1
	DSplineFontEndObjects=-2
	]


// C H A R      segment definitions (scan-converted chars)

structure CharWidth: [		//Block describing char widths
	WX word 2		//X width -- DP
	WY word 2		//Y width -- DP
	XL word			//X left (offset) integer
	YB word			//Y bottom (offset) integer
	W word			//Width (integer)
	H word			//Height (integer) or special code
	]

manifest CharWidthsize=size CharWidth/16

structure FHEAD: [		//Font header, scan converted
	hw bit 6			//Height in words
	ns bit 10			//width in scan lines
	]


//Misc.
structure Convert: [
	Monotone word		//True if input to conversion is monotone
	SplineOk word		//True if output can be spline (too big)
	BBGood word		//True if bounding box will be correct
	PressFontPart word	//True if scan converting a press font part
	Len word			//	(if so, this is the length)
	]

manifest [
	gotname=1
	gotface=2
	gotsize=4
	gotrotation=8
	gotincline=16
	gotresolution=32
	gotrecord=64
	gotfactors=128
	]