ftp.nice.ch/pub/next/unix/network/system/cap.5.0.s.tar.gz#/cap_5.0/applications/papif/papof.c

This is papof.c in view mode; [Download] [Up]

/*
 * Basic output filter for the 4.2 spooling system
 * 
 * Write out the banner (the input) into .banner for the input filter.
 * The input filter can then print it out if it wants.
 *
 * Note: Do a sigstop on self when we see ^Y^A which denotes end of job.
 * exiting is the WRONG thing to do at this point.
 *
 * Copyright (c) 1985, 1987 by The Trustees of Columbia University in the City
 *  of New York
 *
 * Author: Charlie C. Kim
*/

#include <stdio.h>
#include <signal.h>

#ifdef BANNERFIRST
# ifndef BANNER
#  define BANNER
# endif
#endif

#ifdef BANNERLAST
# ifndef BANNER
#  define BANNER
# endif
#endif

#ifdef CHARGEBANNER
# ifndef BANNER
#  define BANNER
# endif
#endif

#ifdef BANNERFILE
# ifndef BANNER
#  define BANNER
# endif
#endif
#ifndef BANNERFILE
# define BANNERFILE ".banner"
#endif

FILE *bannerfile;

char buf[BUFSIZ];

main()
{
  int c, cl, i;
  int dosusp;

  while (1) {
#ifdef BANNER
    if ((bannerfile = fopen(BANNERFILE, "w")) == NULL) {
      perror("Can't open .banner");
      exit(8);
    }
    psbannerstart(bannerfile);
#endif
    cl = -1, c = -1, dosusp = 0;
    do {
#ifdef BANNER
      for ( i = 0; i < BUFSIZ ; i++) {
#endif
	cl = c;
	c = getchar();
#ifdef BANNER
	buf[i] = c;
#endif
	if (cl == '\031' && c == '\01') {
	  dosusp = 1;
	  break;
	}
#ifdef BANNER
	if (c == EOF)
	  break;
	if (c == '\n')
	  break;
      }
      buf[i] = '\0';
      if (dosusp) 
	break;
      if (c != EOF || i != 0)
	psbannerline(bannerfile,buf);
#endif
    } while (c != EOF && !dosusp);
#ifdef BANNER
    psbannerend(bannerfile);
    fclose(bannerfile);	/* close off file here - end of job */
#endif
    if (c == EOF)
      break;
#ifdef DEBUG
    fprintf(stderr,"Waiting for next job...");
#endif DEBUG
    kill(getpid(), SIGSTOP);
  }
}

#ifdef BANNER
psbannerstart(fd)
FILE *fd;
{
  fputs("%!\n", fd);
  fputs("/fs 8 def\n", fd);
  fputs("/Courier findfont fs scalefont setfont\n", fd);
  fputs("/vpos 72 10 mul def\n", fd); /*  at 10 inches .5 inch margin */
  fputs("/LS {36 vpos moveto show /vpos vpos fs sub def} def\n", fd);
}

psbannerline(fd,line)
FILE *fd;
unsigned char *line;
{
  int l = strlen(line);
  static char spaces[] = "        ";
  int i, pos;
  unsigned char c;

  if (line[0] == '\f')
    return;
  putc('(', fd);
  for (i = 0,pos=0; i < l ; pos++, i++) {
    c = *line++;
    if (c != '\t')
      if (c < ' ' || c > '\177')
	c = '\267';
    switch (c) {
    case '(':
      fputs("\\(",fd);
      break;
    case ')':
      fputs("\\)",fd);
      break;
    case '\\':
      fputs("\\\\",fd);
      break;
    case '\t':
      fputs((pos%8) ? spaces+(pos % 8) : spaces, fd);
      pos += (8 - (pos % 8)) - 1;
      break;
    default:
      putc(c, fd);
      break;
    }
  }
  fputs(") LS\n", fd);
}

psbannerend(fd)
FILE *fd;
{
  fputs("showpage\n", fd);  
}

#endif

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.