/*	Copyright (c) 1990 UNIX System Laboratories, Inc.	*/
/*	Copyright (c) 1984, 1986, 1987, 1988, 1989, 1990 AT&T	*/
/*	  All Rights Reserved  	*/

/*	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF     	*/
/*	UNIX System Laboratories, Inc.                     	*/
/*	The copyright notice above does not evidence any   	*/
/*	actual or intended publication of such source code.	*/


#ident	"@(#)ucbtroff:troff.d/devaps/daps.h	1.1.1.1"

/*******************************************************************

		PROPRIETARY NOTICE (Combined)

This source code is unpublished proprietary information
constituting, or derived under license from AT&T's UNIX(r) System V.
In addition, portions of such source code were derived from Berkeley
4.3 BSD under license from the Regents of the University of
California.



		Copyright Notice 

Notice of copyright on this source code product does not indicate 
publication.

	(c) 1986,1987,1988,1989  Sun Microsystems, Inc
	(c) 1983,1984,1985,1986,1987,1988,1989  AT&T.
	          All rights reserved.
********************************************************************/ 




	/********************************************************************
	 *																	*
	 *		The following defined constants and macros must be properly	*
	 *	set up for your APS-5 photo-typesetter.							*
	 *																	*
	 ********************************************************************/



#define	ADJUST			1			/* conditional compilation flag */

#define	LENS3			1			/* used for conditional compilation */
#define	MAX_RANGE		3			/* largest master range on this APS-5 */



#ifdef LENS1						/* standard 2.22X lens */

#define	RANGE1_SIZE		10			/* used in macro BASE_SIZE */
#define	SCALEFACTOR		1.25		/* can scale lower ranges up this far */


#define	BASE_SIZE(Range)			/* base size for master range Range */	\
																			\
		(RANGE1_SIZE * (1 << (Range - 1)))


#define	SCALE_UP(Bsize)				/* max size for lower ranges */			\
																			\
		(Bsize * SCALEFACTOR)

#endif



#ifdef LENS2						/* standard 2.667X lens */

#define	RANGE1_SIZE		12			/* master range 1 base size */
#define	SCALEFACTOR		1.25		/* can scale lower ranges up this far */


#define	BASE_SIZE(Range)			/* base size for master range Range */	\
																			\
		(RANGE1_SIZE * (1 << (Range - 1)))


#define	SCALE_UP(Bsize)				/* max size for lower ranges */			\
																			\
		(Bsize * SCALEFACTOR)

#endif


#ifdef LENS3						/* 2.667X lens - special case */

#define	RANGE1_SIZE		12			/* master range 1 base size */
#define	SCALEFACTOR		1.50		/* can scale lower ranges up this far */


#define	BASE_SIZE(Range)			/* base size for master range Range */	\
																			\
		(RANGE1_SIZE * (1 << (Range - 1)))


#define	SCALE_UP(Bsize)				/* max size for lower ranges */			\
																			\
		(Bsize * SCALEFACTOR - 1)

#endif




	/********************************************************************
	 *																	*
	 *				POST-PROCESSOR DEFINED CONSTANTS					*
	 *																	*
	 ********************************************************************/



#define	NON_FATAL		0				/* don't abort the job */
#define	FATAL			1				/* fatal error - abort the job */
#define	OFF				0				/* debug mode is off */
#define ON				1				/* debug mode is on */
#define	NO				0				/* don't ignore fatal errors - debug */
#define	YES				1				/* ignore fatal errors - debug only! */
#define	SAME_STR		0				/* strings are the same */

#define	RES				723.0			/* use this constant for accounting! */
#define	PAGE_LENGTH		11.0			/* inches per page for accounting */

#define	CUTOFF			10.0			/* beam cutoff position (inches) */
#define	HCUTOFF			7230			/* beam cutoff in device units */


#define	BMASK			0377			/* used for character mask */

#define MAX_INT			30000			/* used in t_reset() */
#define	MAX_DEBUG		20				/* number of debug states */

#define	MAX_OUTLIST		30				/* number of page pairs olist array */

#define	NAME_LENGTH		10				/* max length of typesetter name */

#define	FSIZE			200				/* size of a physical font */

#define	SLOP			2				/* error factor used in hflush() */

#define	NFONT			10				/* number of font positions available */

#define	POS_SLANT		14				/* angle used for positive slants */
#define	NEG_SLANT		-14				/* angle used for negative slants */

#define	TWO_BITS		3				/* mask for two rightmost bits */

#define	BIT0			1				/* mask for bit 0 */
#define	BIT1			2				/* mask for bit 1 */
#define	BIT2			4				/* mask for bit 2 */
#define	BIT3			8				/* mask for bit 3 */

#define	SLANT_BIT		BIT0			/* slant bit is bit 0 */
#define	FONT_BIT		BIT1			/* alternate font is bit 1 */
#define	RANGE_BIT		BIT2			/* max range is bit 2 */

#define	SLANT_VAL		3				/* slant angle starts in bit 3 */
#define	RANGE_VAL		5				/* range value starts in bit 5 */

#define	DO_ACCT			BIT0			/* still have to do accounting if on */
#define	FILE_STARTED	BIT1			/* file started but not completed */
#define	NO_OUTFILE		BIT2			/* no output file if on */
#define	NO_ACCTFILE		BIT3			/* no accounting file if on */

#define	BAN_LENGTH		130				/* max length of banner string */
#define	BAN_SIZE		10				/* point size to use in banner */

#define	VSPACE0			6				/* space down for first cut marks */
#define	VSPACE1			180				/* space at start of banner */
#define	VSPACE2			180				/* space before printing user string */
#define	VSPACE3			180				/* space before printing separator */
#define	VSPACE4			180				/* space before starting user job */

#define	HSPACE0			5346			/* space right for second cut marks */
#define	HSPACE1			50				/* indent before first separator */
#define	HSPACE2			100				/* indent before user string */
#define	HSPACE3			50				/* indent before second separator */
#define	HSPACE4			0				/* start cut marks at this position */




	/********************************************************************
	 *																	*
	 *						POST-PROCESSOR MACROS						*
	 *																	*
	 ********************************************************************/




#define	SET_ARGS(save)			/* set up internal argc and argv */			\
																			\
		save = argc;			/* save current value of argc */			\
		argc -= arg_index;		/* count arguments read already */			\
		argv += arg_index




#define	COUNT_ARGS(save)		/* count the arguments processed */			\
																			\
		arg_index = save - argc		/* arg_index counts the arguments */




#define	STR_CONVERT(s,i)		/* convert string s to integer i */			\
																			\
		do  {																\
			i = 0;															\
			do																\
				i = 10 * i + *s++ - '0';									\
			while ( isdigit(*s) );											\
		}	while ( 0 )	




#define	TOGGLE(a)				/* toggle the value in argument a */		\
																			\
		a = (a + 1) % 2




#define GET_DIG(fp,c)			/* get a single ASCII digit */				\
																			\
		c = getc(fp);														\
		if ( !isdigit(c)  ||  c == EOF )	/* illegal character */			\
			error(FATAL, "internal error - digit not found in GET_DIG")




#define GET_CHAR(fp,c)			/* get a single ASCII character */			\
																			\
		if ( (c = getc(fp)) == EOF )		/* end of file - abort */		\
			error(FATAL, "internal error - char not found in GET_CHAR")




#define GET_INT(fp,n)			/* get an integer from file fp */			\
																			\
		if ( fscanf(fp, "%d", &n) != 1 )	/* end of file - abort */		\
			error(FATAL,"internal error - integer not found in GET_INT")




#define GET_STR(fp,str)			/* get a string from file fp */				\
																			\
		if ( fscanf(fp, "%s", str) != 1 )		/* end of file - abort */	\
			error(FATAL, "internal error - string not found in GET_STR")




#define GET_LINE(fp,buf)		/* read a line from file fp into buf */		\
																			\
		if ( fgets(buf, sizeof(buf), fp) == NULL )							\
			error(FATAL, "internal error - line not found in GET_LINE")




#define SKIP_LINE(fp,c)			/* skip to the next line of the file fp */	\
																			\
		while ( ((c = getc(fp)) != '\n')  &&  c != EOF )					\
			;




#define SCAN1(buf,n1)			/* read one number from buf */				\
																			\
		if ( sscanf(buf, "%d", &n1) != 1 )									\
			error(FATAL, "internal error - integer not found in SCAN1")




#define SCAN2(buf,n1,n2)		/* read two numbers from buf */				\
																			\
		if ( sscanf(buf, "%d %d", &n1, &n2) != 2 )							\
			error(FATAL, "internal error - integers not found in SCAN2")




#define SCAN3(buf,n1,n2,n3)		/* read three numbers from buf */			\
																			\
		if ( sscanf(buf, "%d %d %d", &n1, &n2, &n3) != 3 )					\
			error(FATAL, "internal error - integers not found in SCAN3")




#define SCAN4(buf,n1,n2,n3,n4)	/* read four numbers from buf */			\
																			\
		if ( sscanf(buf, "%d %d %d %d", &n1, &n2, &n3, &n4) != 4 )			\
			error(FATAL, "internal error - integers not found in SCAN4")




#define	SCAN_STR(buf,str)		/* read a string from buf */				\
																			\
		sscanf(buf, "%s", str)




#ifdef pdp11					/* sign extension problems on pdp11s */

#define	PUTC(ch, fp)			/* don't check for error if ch = 0377 */	\
																			\
		if ( (putc(ch, fp) == EOF) && ((ch & BMASK) != 0377) )				\
			error(FATAL, "internal error - PUTC can't output character")

#else							/* don't worry about char 0377 */

#define	PUTC(ch, fp)			/* write character ch to file fp */			\
																			\
        if ( putc(ch, fp) == EOF )      /* error in writing to fp */        \
            error(FATAL, "internal error - PUTC can't output character")

#endif




#define	READ(fd, buf, n)		/* read n chars from file fd into buf */	\
																			\
		if ( read(fd, buf, n) < 0 )		/* error in reading from fd */		\
			error(FATAL, "internal error - READ can't read input file")




#define	DECODE(value, start, bitmask)										\
																			\
		(value >> start) & bitmask							




#define	CHANGE_FONT(newfont, oldrange)		/* set font to newfont */		\
																			\
		do {																\
			change_font(newfont);											\
			if ( oldrange != range )  {		/* range has changed */			\
				PUTC(HVSIZE, tf);			/* so set the point size */		\
				putint(10*pstab[size-1]);	/* to current size */			\
				oldrange = range;											\
			}	/* End if */												\
		}	while ( 0 )




#define	SETSLANT(code, angle)	/* set slant to value encoded in code */	\
																			\
		do {																\
			angle = DECODE(code, SLANT_VAL, TWO_BITS);						\
			if ( angle & BIT0 )			/* have positive APS-5 slant */		\
				angle = POS_SLANT;											\
			else if ( angle & BIT1 )	/* have negative slant */			\
				angle = NEG_SLANT;											\
			t_slant(angle + last_req_slant);	/* set the correct slant */	\
		} while ( 0 )




