1: #include "parms.h" 2: #include "structs.h" 3: 4: #ifdef RCSIDENT 5: static char rcsid[] = "$Header: lprnote.c,v 1.7.0.3 85/03/19 19:39:05 notes Rel $"; 6: #endif RCSIDENT 7: 8: /* 9: * lprnote(io, lprfile, toc, notenum, note, justtitle) 10: * 11: * prints the specified note to lprfile, and makes an entry in 12: * toc file. Paging is taken care of and the page/line stuff is 13: * correctly set at the conclusion. 14: * 15: * lprresp(io, lprfile, toc, respnum, rsprec, roffset) 16: * 17: * Same as the lprnote routine. Works for responses though. 18: * 19: * pagebreak(lprfile) 20: * 21: * forces a page break. 22: * 23: * Ray Essick May 13, 1982 24: */ 25: 26: #define NOTENEED 7 27: #define RESPNEED 7 28: 29: extern int length, /* length of page */ 30: left, /* left on the page */ 31: page; /* the pae we are on */ 32: 33: lprnote (io, lprfile, toc, notenum, note, justtitle) 34: struct io_f *io; 35: FILE * lprfile, *toc; 36: struct note_f *note; 37: { 38: struct resp_f rsprec; 39: int roffset, 40: rblock; 41: char line[CMDLEN]; 42: int i; 43: char ztime[DATELEN]; 44: 45: if (left < NOTENEED) /* room for header and some text? */ 46: pagebreak (lprfile); /* make it that way */ 47: 48: if (strcmp (note -> n_auth.asystem, Authsystem) && 49: strcmp ("Anonymous", note -> n_auth.aname)) 50: { 51: #ifdef USERHOST 52: sprintf (line, "%s@%s", note -> n_auth.aname, note -> n_auth.asystem); 53: #else 54: sprintf (line, "%s!%s", note -> n_auth.asystem, note -> n_auth.aname); 55: #endif USERHOST 56: } 57: else 58: sprintf (line, "%s", note -> n_auth.aname); 59: sprdate (¬e -> n_date, ztime); /* format date */ 60: 61: fprintf (toc, "%3d%s ", notenum, note -> n_stat & DIRMES ? "(*)" : " "); 62: fprintf (toc, "%-*s", TITLEN, note -> ntitle); 63: fprintf (toc, "%-*s %-*s", SYSSZ + NAMESZ + 2, line, DATELEN, ztime); 64: if (!justtitle) /* no page for titles only */ 65: fprintf (toc, " %d", page); 66: putc ('\n', toc); /* end the line */ 67: 68: /* 69: * only proceed if we are dumping text. Otherwise we stop with 70: * just the table of contents entry 71: */ 72: 73: if (justtitle) /* no text output */ 74: return; 75: 76: fprintf (lprfile, "\n==== ==== ==== ==== ==== ==== ====\n"); 77: fprintf (lprfile, "Note %-3d %s ", notenum, 78: note -> n_stat & DIRMES ? "(*)" : " "); 79: fprintf (lprfile, "%-*s", TITLEN, note -> ntitle); /* title */ 80: 81: if (note -> n_nresp) 82: fprintf (lprfile, " %d response%c", note -> n_nresp, 83: note -> n_nresp > 1 ? 's' : ' '); 84: putc ('\n', lprfile); 85: 86: fprintf (lprfile, "%-*s", SYSSZ + NAMESZ + 1, line); 87: 88: fprintf (lprfile, " %s\n\n", ztime); 89: 90: left -= 5; /* count off the header lines */ 91: 92: left -= pageout (io, ¬e -> n_addr, lprfile); /* dump text */ 93: 94: while (left < 0) 95: { 96: page++; 97: left += length; 98: } 99: 100: 101: for (i = 1; i <= note -> n_nresp; i++) /* dump responses */ 102: { 103: if (lrsp (io, notenum, i, &rsprec, &roffset, &rblock) == -1) 104: break; /* bad chain */ 105: lprresp (io, lprfile, toc, notenum, i, &rsprec, roffset); 106: } 107: } 108: 109: /* 110: * 111: * dump a response to a "pr" stream. 112: */ 113: 114: lprresp (io, lprfile, toc, notenum, respnum, rsprec, phys) 115: struct io_f *io; 116: FILE * lprfile, 117: *toc; 118: struct resp_f *rsprec; 119: { 120: char ztime[DATELEN]; 121: char line[CMDLEN]; 122: 123: if (left < RESPNEED) /* room on page? */ 124: pagebreak (lprfile); 125: 126: if (strcmp (rsprec -> r_auth[phys].asystem, Authsystem) && 127: strcmp ("Anonymous", rsprec -> r_auth[phys].aname)) 128: { 129: #ifdef USERHOST 130: sprintf (line, "%s@%s", rsprec -> r_auth[phys].aname, 131: rsprec -> r_auth[phys].asystem); 132: #else 133: sprintf (line, "%s!%s", rsprec -> r_auth[phys].asystem, 134: rsprec -> r_auth[phys].aname); 135: #endif USERHOST 136: } 137: else 138: sprintf (line, "%s", rsprec -> r_auth[phys].aname); 139: sprdate (&rsprec -> r_when[phys], ztime); 140: fprintf (lprfile, "\n==== ==== ====\n"); 141: fprintf (lprfile, "Response %-4d to Note %-4d\n\t%-*s %-*s\n\n", 142: respnum, notenum, SYSSZ + NAMESZ + 2, line, DATELEN, ztime); 143: 144: left -= 5; /* count the header */ 145: 146: left -= pageout (io, &rsprec -> r_addr[phys], lprfile); 147: 148: while (left < 0) 149: { 150: page++; 151: left += length; 152: } 153: } 154: 155: /* 156: * force a page break 157: */ 158: 159: pagebreak (zfile) 160: FILE * zfile; 161: { 162: putc ('\f', zfile); /* form feed */ 163: page++; 164: left = length; 165: }