DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T i

⟦cdfac571e⟧ TextFile

    Length: 6487 (0x1957)
    Types: TextFile
    Names: »if.c«

Derivation

└─⟦060c9c824⟧ Bits:30007080 DKUUG TeX 2/12/89
    └─⟦this⟧ »./DVIware/laser-setters/quicspool/src/if.c« 
└─⟦52210d11f⟧ Bits:30007239 EUUGD2: TeX 3 1992-12
    └─⟦af5ba6c8e⟧ »unix3.0/DVIWARE.tar.Z« 
        └─⟦ca79c7339⟧ 
            └─⟦this⟧ »DVIware/laser-setters/quicspool/src/if.c« 

TextFile

#ifndef lint
static char *rcs = "$Header: if.c,v 1.1 88/01/15 13:04:16 simpson Rel $";
#endif
/*
$Log:	if.c,v $
 * Revision 1.1  88/01/15  13:04:16  simpson
 * initial release
 * 
 * Revision 0.1  87/12/11  18:30:58  simpson
 * beta test
 * 
*/
/* "if" filter
 * This doesn't filter the input at all if the -c option is given.  If the
 * -c option is not given, then it converts \n into \r\n if it is not in
 * QUIC mode.  It performs accounting if an accounting file is given.  It
 * makes educated guesses as to the number of pages printed.  Here is the
 * page count algorithm:
 *	if -c option given then {
 *	    if input string equals "^,"
 *		increment page count
 *	    else if input character is formfeed and not free format
 *		increment page count
 *	} else
 *	    if not in QUIC mode {
 *		if input character is \n and line count is greater than the
 *		length of the page
 *		    increment page count
 *	    } else
 *		if input string equals "^,"
 *		    increment page count
 *		else if input character is formfeed and not free format
 *		    increment page count 
 */
#include <stdio.h>
#include <signal.h>
#include <local/qms.h>
#include <local/standard.h>
#include <local/profile.h>
#include "fontnode.h"

char	*WhoAmI;	/* argv[0] */
char    *Model;
Boolean EnteredQuic = FALSE;
Boolean QuicMode = FALSE;
Boolean FreeForm = FALSE;
Boolean Raw = FALSE;
int	LineNum = 1;
int	CharCount = 1;
int	Length;
int	Width;
int	Indent = 0;
int	PortraitFont = 1204;
int	LandscapeFont = 1217;
struct sigvec	SigStruct;
extern char	*User;
extern char	*Host;
extern Boolean	Accounting;
extern int	NumPages;
extern FILE	*Accting;

main(argc, argv)
int	argc;
char	*argv[];
{
    extern int	optind;
    extern char	*optarg;
    PROFILE_VALUE   *v, *getbindingvalue();
    int		c, callcleanup();
    void	sanestate();
    void	cleanup();
    
    WhoAmI = argv[0];
    while ((c = getopt(argc, argv, "cw:l:i:n:h:")) != EOF)
	switch (c) {
	case 'c':
	    Raw = TRUE;
	    break;
	case 'l':
	    Length = atoi(optarg);
	    break;
	case 'w':
	    Width = atoi(optarg);
	    break;
	case 'i':
	    Indent = atoi(optarg);
	    break;
	case 'n':
	    User = optarg;
	    break;
	case 'h':
	    Host = optarg;
	    break;
	case '?':		/* This should not happen */
	    exit(2);
	}
    if (optind < argc) {
	Accounting = TRUE;
	if (!(Accting = fopen(argv[optind], "a"))) {
	    fprintf(stderr, "%s: cannot open accounting file %s\n", WhoAmI, 
	    argv[optind]);
	    Accounting = FALSE;
	}
    }
    if (!(v = getbindingvalue("model")) || v->class != PROFILE_STRING &&
    v->class != PROFILE_OTHER) {
	fprintf(stderr, 
	"%s: model binding missing or invalid in configuration file\n",
	WhoAmI);
	exit(2);
    }
    Model = v->value.s;
    if (Width > 80) {
	if ((v = getbindingvalue("landscapefont")) && v->class == 
	PROFILE_INTEGER)
	    LandscapeFont = v->value.i;
    } else
	if ((v = getbindingvalue("portraitfont")) && v->class == 
	PROFILE_INTEGER)
	    PortraitFont = v->value.i;
    SigStruct.sv_handler = callcleanup;
    SigStruct.sv_mask = 0;
    SigStruct.sv_onstack = 0;
    (void)sigvec(SIGINT, &SigStruct, (struct sigvec *)NULL);
    fputs(QUICON, stdout);
    fputs(Width > 80 ? LANDSCAPE : PORTRAIT, stdout);
    printf("%s00000", SYNTAX);
    if (Raw) {
	printf("%s00000%05d", INITMARGVERT, Width > 80 ? (int)(8.5 * 1000) :
	11 * 1000);
	printf("%s00000%05d", INITMARGHORZ, Width > 80 ? 11 * 1000 : (int)(8.5
	* 1000));
    } else {
	/* Different print engines can print in different parts of the page.
	 * For example, the Canon engine (QMS 800) cannot print in the top
	 * 1/4 inch of the page.  The QMS 1500 uses a Ricoh engine.  The
	 * 1200 and 2400 use a Xerox engine.  We have to account for each
	 * by having different spacing.
	 */
	if (EQ(Model, "QMS800"))
	    if (Width > 80) {
	        printf("%s%05d%05d", INITMARGVERT, (int)(.4 * 1000),  
		(int)(8.5 * 1000));
	        printf("%s%05d%05d", INITMARGHORZ, (int)(.325 * 1000), 
		11 * 1000);
	        printf("%s%04d", LINESPACING, (int)(8.2 * 100));
	    } else {
	        printf("%s%05d%05d", INITMARGVERT, (int)(.3 * 1000),
		11 * 1000);
	        printf("%s%05d%05d", INITMARGHORZ, (int)(.325 * 1000), 
		(int)(8.5 * 1000));
	        printf("%s%04d", LINESPACING, (int)(6.1 * 100));
	    }
	else if (EQ(Model, "QMS1500"))
	    if (Width > 80) {
	        printf("%s%05d%05d", INITMARGVERT, (int)(.1 * 1000),  
		(int)(8.2 * 1000));
	        printf("%s%05d%05d", INITMARGHORZ, (int)(.325 * 1000), 
		11 * 1000);
	        printf("%s%04d", LINESPACING, (int)(8.2 * 100));
	    } else {
	        printf("%s%05d%05d", INITMARGVERT, (int)(.1 * 1000),
		(int)(10.85 * 1000));
	        printf("%s%05d%05d", INITMARGHORZ, (int)(.325 * 1000), 
		(int)(8.5 * 1000));
	        printf("%s%04d", LINESPACING, (int)(6.1 * 100));
	    }
	else 	/* Models 1200 and 2400 */
	    if (Width > 80) {
	        printf("%s%05d%05d", INITMARGVERT, (int)(.32 * 1000), 
		(int)(8.5 * 1000));
	        printf("%s%05d%05d", INITMARGHORZ, (int)(.325 * 1000), 
		11 * 1000);
	        printf("%s%04d", LINESPACING, (int)(7.95 * 100));
	    } else {
	        printf("%s%05d%05d", INITMARGVERT, (int)(.22 * 1000), 
		11 * 1000);
	        printf("%s%05d%05d", INITMARGHORZ, (int)(.325 * 1000), 
		(int)(8.5 * 1000));
	        printf("%s%04d", LINESPACING, (int)(6.02 * 100));
	    }
	if (Width > 80) {
	    if ((v = getbindingvalue("landscapepitch")) && (v->class ==
	    PROFILE_INTEGER || v->class == PROFILE_FLOAT))
	        if (v->class == PROFILE_INTEGER)
		    printf("%s%04d", CHARSPACING, v->value.i * 100);
	        else
		    printf("%s%04d", CHARSPACING, (int)(v->value.f * 100));
	} else
	    if ((v = getbindingvalue("portraitpitch")) && (v->class ==
	    PROFILE_INTEGER || v->class == PROFILE_FLOAT))
	        if (v->class == PROFILE_INTEGER)
		    printf("%s%04d", CHARSPACING, v->value.i * 100);
	        else
		    printf("%s%04d", CHARSPACING, (int)(v->value.f * 100));
    }
    printf("%s%d%s", DEFFONT, Width > 80 ? LandscapeFont : PortraitFont, 
    ENDCMD);
    fputs(FREEOFF, stdout);
    fputs(QUICOFF, stdout);
    while (yylex())
	;
    (void)sigblock(SIGINT);
    if (Raw || EnteredQuic || LineNum != 1 || CharCount != 1) {
	(void)putchar('\f');
	NumPages++;
    }
    fputs(QUICON, stdout);
    cleanup((struct FontNode *)NULL, SUCCEED);
}

int callcleanup()
{
    void	cleanup();

    fputs(QUICON, stdout);
    fputs(FORMFEED, stdout), NumPages++;
    cleanup((struct FontNode *)NULL, SUCCEED);
}
    
#include "quic.c"