home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol078 / pagin8.c < prev    next >
C/C++ Source or Header  |  1984-04-29  |  1KB  |  55 lines

  1.  
  2. /*  skip - output "n" blank lines  */
  3. skip (n)
  4. /******/
  5.     int n;
  6.     {
  7.     int t;
  8.  
  9.     t = n;
  10.     while (t-- > 0)
  11.         fputs ("\n", dev_lst);
  12.     return (n);
  13.     }  /* skip */
  14.  
  15. #define margin1 0      /* top of page to title line */
  16. #define margin2 2      /* title line to body */
  17. #define margin3 8      /* body to bottom of page */
  18. #define page_size 66
  19.  
  20. char *title;
  21. int line_of_page;
  22. int page;
  23.  
  24. /* paginate - separate stream of buffers into pages */
  25. paginate (buf)
  26. /************/
  27.     char *buf;
  28.     {
  29.     if (page != 0)  /* M. A. Jacksons's program inversion */
  30.         goto resume;   /* technique used */
  31.     /* read */
  32.     while (buf != NULL)   /* while not end of file */
  33.         {
  34.         ++page;
  35.         fputs ("\f", dev_lst);
  36.         line_of_page = skip (margin1);
  37.         if (title != NULL)  /* output title and page nr. */
  38.             {
  39.             fprintf (dev_lst, "%-60spage %1d",
  40.                               title, page);
  41.             line_of_page += skip (margin2);
  42.             }
  43.         while (buf != NULL && line_of_page < page_size - margin3)
  44.             {
  45.             fputs (buf, dev_lst);
  46.             ++line_of_page;
  47.             /* read */
  48.             return;
  49.         resume: ;
  50.             }
  51.         line_of_page = 0;
  52.         }
  53.     page = 0;
  54.     }  /* paginate */
  55.