*** ../a2ps-4.2-orig/Makefile	Mon Mar 29 15:26:23 1993
--- Makefile	Sun Apr 17 16:10:19 1994
***************
*** 25,36 ****
  D	=.
  O	=.
  
! BINDIR	=/usr/local/bin
  
! MANDIR	=/usr/man/mann
! MANEXT	=n
  
! CFLAGS	= -DBSD -O
  # Default values for HEIGHT, WIDTH, MARGIN and DIR_SEP (11.64, 8.27, 1.2, '/').
  # Default values for LPR_PRINT, LPR_COMMAND and LPR_OPT (TRUE, "lpr", "-l")
  # No values for TWOSIDED_DFLT, ONESIDED and TWOSIDED
--- 25,36 ----
  D	=.
  O	=.
  
! BINDIR	=/usr/lib/apsfilter/bin
  
! MANDIR	=/usr/man/man1
! MANEXT	=1
  
! CFLAGS	= -s -O -DBSD -DAKL # -DAKL_DEBUG
  # Default values for HEIGHT, WIDTH, MARGIN and DIR_SEP (11.64, 8.27, 1.2, '/').
  # Default values for LPR_PRINT, LPR_COMMAND and LPR_OPT (TRUE, "lpr", "-l")
  # No values for TWOSIDED_DFLT, ONESIDED and TWOSIDED
*** ../a2ps-4.2-orig/a2ps.c	Fri Jul 30 13:55:35 1993
--- a2ps.c	Sun Apr 17 16:09:19 1994
***************
*** 146,151 ****
--- 146,152 ----
  /*
   * Default page dimensions
   */
+ 
  #ifndef WIDTH
  #define	WIDTH	8.27
  #endif
***************
*** 228,233 ****
--- 229,239 ----
   */
  #ifdef __STDC__
  	/* Function prototypes */
+ 
+ #ifdef AKL
+ void set_paper_format(char *arg);
+ #endif
+ 
  void usage(int failure);
  void set_global_option(char *arg);
  void set_positional_option(char *arg);
***************
*** 331,344 ****
--- 337,361 ----
  char *prologue = NULL;		/* postscript header file */
  #if defined(SYSV) || defined(BSD)
  char *login = NULL;		/* user's login name and host machine */
+ #ifdef AKL
+ char *logname, *host = NULL;	/* new commandline flags ... */
+ #endif
  #endif
  
  
  /*
   * Sheet dimensions
   */
+ #ifdef AKL
+ double page_height_inch = HEIGHT;	/* Paper height in inch */
+ double page_width_inch = WIDTH;		/* Paper width  in inch */
+ double page_height;			/* for Paper height in pixels */
+ double page_width;			/* for Paper width  in pixels */
+ double margin = MARGIN;
+ #else
  double page_height = HEIGHT;	/* Paper height */
  double page_width = WIDTH;	/* Paper width */
+ #endif
  
  
  /************************************************************************/
***************
*** 399,407 ****
--- 416,537 ----
      fprintf(stderr,"          \t-nu\tdon't print a filename footer\n");
      fprintf(stderr,"          -v\t-nv\tVISIBLE (blank) display of unprintable chars\n");
      fprintf(stderr,"          -8\t-n8\tdisplay (DON'T DISPLAY) 8-bit chars\n");
+ #ifdef AKL
+     fprintf(stderr,"          -Xformat\tghostscripts page format = a0,a1,...,letter\n");
+     fprintf(stderr,"          -Mmargin\tmargin size in inch, default: 1.4 inch\n");
+ #endif
      exit(failure);
  }
  
+ #ifdef AKL
+ 
+ /*
+  * AKL - set sheet dimensions using ghostscripts format names and sizes
+  *	 see: GS_LIBDIR/gs_statd.ps, note: these values are given in 1/72 inch
+  */
+ 
+ void
+ set_paper_format(arg)
+ char *arg;
+ {
+ 	if (strstr(arg,"letter")) {
+ 		page_width_inch = 8.50;		page_height_inch = 11.00;
+ 	} else
+ 	if (strstr(arg,"note")) {
+ 		page_width_inch = 7.50;		page_height_inch = 10.00;
+ 	} else
+ 	if (strstr(arg,"legal")) {
+ 		page_width_inch = 8.50;		page_height_inch = 14.00;
+ 	} else
+ 	if (strstr(arg,"a0")) {
+ 		page_width_inch = 33.06;	page_height_inch = 46.78;
+ 	} else
+ 	if (strstr(arg,"a1")) {
+ 		page_width_inch = 23.39;	page_height_inch = 33.06;
+ 	} else
+ 	if (strstr(arg,"a2")) {
+ 		page_width_inch = 16.53;	page_height_inch = 23.39;
+ 	} else
+ 	if (strstr(arg,"a3")) {
+ 		page_width_inch = 11.69;	page_height_inch = 16.53;
+ 	} else
+ 	if (strstr(arg,"a4")) {
+ 		page_width_inch = 8.26;		page_height_inch = 11.69;
+ 	} else
+ 	if (strstr(arg,"a5")) {
+ 		page_width_inch = 5.85;		page_height_inch = 8.26;
+ 	} else
+ 	if (strstr(arg,"a6")) {
+ 		page_width_inch = 4.12;		page_height_inch = 5.85;
+ 	} else
+ 	if (strstr(arg,"a7")) {
+ 		page_width_inch = 2.92;		page_height_inch = 4.12;
+ 	} else
+ 	if (strstr(arg,"a8")) {
+ 		page_width_inch = 2.06;		page_height_inch = 2.92;
+ 	} else
+ 	if (strstr(arg,"a9")) {
+ 		page_width_inch = 1.46;		page_height_inch = 2.06;
+ 	} else
+ 	if (strstr(arg,"a10")) {
+ 		page_width_inch = 1.03;		page_height_inch = 1.46;
+ 	} else
+ 	if (strstr(arg,"b0")) {
+ 		page_width_inch = 39.39;	page_height_inch = 55.67;
+ 	} else
+ 	if (strstr(arg,"b1")) {
+ 		page_width_inch = 27.83;	page_height_inch = 39.39;
+ 	} else
+ 	if (strstr(arg,"b2")) {
+ 		page_width_inch = 19.69;	page_height_inch = 27.83;
+ 	} else
+ 	if (strstr(arg,"b3")) {
+ 		page_width_inch = 13.92;	page_height_inch = 19.69;
+ 	} else
+ 	if (strstr(arg,"b4")) {
+ 		page_width_inch = 9.85;		page_height_inch = 13.92;
+ 	} else
+ 	if (strstr(arg,"b5")) {
+ 		page_width_inch = 6.96;		page_height_inch = 9.85;
+ 	} else
+ 	if (strstr(arg,"archE")) {
+ 		page_width_inch = 36.00;	page_height_inch = 48.00;
+ 	} else
+ 	if (strstr(arg,"archD")) {
+ 		page_width_inch = 24.00;	page_height_inch = 36.00;
+ 	} else
+ 	if (strstr(arg,"archC")) {
+ 		page_width_inch = 18.00;	page_height_inch = 24.00;
+ 	} else
+ 	if (strstr(arg,"archB")) {
+ 		page_width_inch = 12.00;	page_height_inch = 18.00;
+ 	} else
+ 	if (strstr(arg,"archA")) {
+ 		page_width_inch = 9.00;		page_height_inch = 12.00;
+ 	} else
+ 	if (strstr(arg,"flsa")) {
+ 		page_width_inch = 8.50;		page_height_inch = 13.00;
+ 	} else
+ 	if (strstr(arg,"flse")) {
+ 		page_width_inch = 8.50;		page_height_inch = 13.00;
+ 	} else
+ 	if (strstr(arg,"halfletter")) {
+ 		page_width_inch = 5.50;		page_height_inch = 8.50;
+ 	} else
+ 	if (strstr(arg,"11x17")) {
+ 		page_width_inch = 11.00;	page_height_inch = 17.00;
+ 	} else
+ 	if (strstr(arg,"ledger")) {
+ 		page_width_inch = 17.00;	page_height_inch = 11.00;
+ 	} else {
+ 		fprintf(stderr,"a2ps: %s : unknown paper format or\n",arg);
+ 		fprintf(stderr,"        ^--- missing paper format\n");
+ 		exit(1);
+ 	}
+ }
+ 
+ #endif	/* AKL */
+ 
  /*
   * Set an option only if it's global.
   */
***************
*** 545,550 ****
--- 675,695 ----
      case 'H':
      case 'l':
  	return;
+ #ifdef AKL
+     case 'X':			/* gs page dimensions */
+ 	set_paper_format(arg);
+ 	break;
+     case 'M':
+ 	if (arg[2] == NUL || (margin = atof(arg+2)) <= 0)
+ 	    usage(EXIT_FAILURE);
+ 	break;
+     case 'Q':
+ 	logname=arg+2;
+ 	break;
+     case 'Z':
+ 	host=arg+2;
+ 	break;
+ #endif
      default:
  	usage(EXIT_FAILURE);
      }
***************
*** 1158,1171 ****
--- 1303,1327 ----
  	fprintf(stderr, "Error getting file modification time\n");
  	exit(EXIT_FAILURE);
      }
+ #ifdef AKL
+     /* modifications for FreeBSD */
+     /* Do we have a fifo ? */
+     if (S_ISFIFO(statbuf.st_mode))
+ 	printf("/date currdate def\n");
+     /* Do we have a pipe ? */
+     else if (!statbuf.st_mode)
+ 	printf("/date currdate def\n");
+ #else
      /* Do we have a pipe? */
      if (S_ISFIFO(statbuf.st_mode))
  	printf("/date currdate def\n");
+ #endif
      else {
  	string = ctime(&statbuf.st_mtime);
  	printf("/date (%.6s %.4s %.5s) def\n", string+4, string+20, string+11);
      }
  
+ 
      /* Start file impression */
      putchar('(');
      for (p = title; *p != NUL;)
***************
*** 1371,1377 ****
--- 1527,1535 ----
      FILE *f;
      char *datestring;
  #if defined(SYSV) || defined(BSD)
+ #ifndef AKL
      char *logname, *host;
+ #endif
      int rt;
  #endif
  
***************
*** 1407,1412 ****
--- 1565,1586 ----
  
  #if defined(SYSV) || defined(BSD)
      /* Retrieve user's login name and hostname */
+ #ifdef AKL
+     if (!logname)
+ 	logname = getlogin();
+     if (!host) 
+     {
+     	host = (char *)malloc(MAX_HOSTNAME);
+     	if (host != NULL)
+ 	{
+ 		if ((rt = gethostname(host, MAX_HOSTNAME)) == -1 || host[0] == NULL)
+ 		{
+ 	    		free(host);
+ 	    		host = NULL;
+ 		}
+     	}
+     }
+ #else
      logname = getlogin();
      host = (char *)malloc(MAX_HOSTNAME);
      if (host != NULL) {
***************
*** 1415,1420 ****
--- 1589,1595 ----
  	    host = NULL;
  	}
      }
+ #endif /* AKL */
  #endif
      
      /* Print a general prologue */
***************
*** 1434,1442 ****
--- 1609,1623 ----
      printf("\n%% Initialize page description variables.\n");
      printf("/x0 0 def\n");
      printf("/y0 0 def\n");
+ #ifdef AKL
+     printf("/sheetheight %g inch def\n", (double)page_height_inch);
+     printf("/sheetwidth %g inch def\n", (double)page_width_inch);
+     printf("/margin %g inch def\n", margin);
+ #else
      printf("/sheetheight %g inch def\n", (double)HEIGHT);
      printf("/sheetwidth %g inch def\n", (double)WIDTH);
      printf("/margin %g inch def\n", (double)MARGIN);
+ #endif
      printf("/rightmargin margin 3 div def\n");
      printf("/leftmargin margin 2 mul 3 div def\n");
      printf("/twinfiles %s def\n", twinfiles ? "true" : "false");
***************
*** 1457,1466 ****
--- 1638,1650 ----
  	    printf("/login (Printed from %s) def\n", host);
      }
  
+ #ifndef AKL
+ 	/* AKL: causes Segmentation fault, when running twice ... */
      /* If the host string was allocated via malloc, release the	memory */
      if (host != NULL)
  	free(host);
  #endif
+ #endif
  
      /* Close prolog */
      printf("%%%%EndProlog\n\n");
***************
*** 1709,1716 ****
--- 1893,1912 ----
      /* Initialize variables not depending of positional options */
      landscape = twinpages = -1;	/* To force format switching */
      fontsize = -1.0;			/* To force fontsize switching */
+ #ifdef AKL
+     page_height = (page_height_inch - margin) * PIXELS_INCH;
+     page_width  = (page_width_inch  - margin) * PIXELS_INCH;
+ # ifdef AKL_DEBUG
+     fprintf(stderr,"DEBUG... margin           : %.1f\n", margin);
+     fprintf(stderr,"DEBUG... page_width_inch  : %.2f\n", page_width_inch);
+     fprintf(stderr,"DEBUG... page_height_inch : %.2f\n", page_height_inch);
+     fprintf(stderr,"DEBUG... page_width  pixel: %.2f\n", page_width);
+     fprintf(stderr,"DEBUG... page_height pixel: %.2f\n", page_height);
+ # endif /* AKL_DEBUG */
+ #else
      page_height = (double)(HEIGHT - MARGIN) * PIXELS_INCH;
      page_width = (double)(WIDTH - MARGIN) * PIXELS_INCH;
+ #endif /* AKL */
      
      /* Postcript prologue printing */
      print_prologue();
