- int sizerr;
-
- if ((f = open(file, 0)) < 0 || fstat(f, &stb) < 0) {
- log("file (%s) open failure <errno = %d>", file, errno);
- return(-1);
- }
- (void) sprintf(buf, "%c%d %s\n", type, stb.st_size, file);
- if (write(pfd, buf, strlen(buf)) < 0)
- return(1);
- if (response())
- return(1);
- sizerr = 0;
- for (i = 0; i < stb.st_size; i += BUFSIZ) {
- amt = BUFSIZ;
- if (i + amt > stb.st_size)
- amt = stb.st_size - i;
- if (sizerr == 0 && read(f, buf, amt) != amt)
- sizerr = 1;
- if (write(pfd, buf, amt) < 0)
- return(1);
- }
- (void) close(f);
- if (sizerr) {
- log("%s: changed size", file);
- if(write(pfd, "\1", 1) < 0) /* signal an error occured */
- return(1);
- } else {
- if (write(pfd, "", 1) < 0)
- return(1);
- if (response())
- return(1);
- }
- return(0);
-}
-
-/*
- * Check to make sure there have been no errors and that both programs
- * are in sync with eachother.
- * Return non-zero if the connection was lost.
- */
-response()
-{
- char resp;
-
- if (read(pfd, &resp, 1) != 1)
- return(1);
- if (resp) {
- log("fatal error in rlpr");
-#ifndef BSD41C
- (void) unlink(LO);
-#endif
- exit(1);
- }
- return(0);
-}
-
-/*
- * Banner printing stuff
- */
-banner(name1, name2)
- char *name1, *name2;
-{
- time_t tvec;
- extern char *ctime();
-
- time(&tvec);
- if (!SF && !tof)
- (void) write(ofd, FF, strlen(FF));
- if (SB) { /* short banner only */
- if (class[0]) {
- (void) write(ofd, class, strlen(class));
- (void) write(ofd, ":", 1);
- }
- (void) write(ofd, name1, strlen(name1));
- (void) write(ofd, " Job: ", 7);
- (void) write(ofd, name2, strlen(name2));
- (void) write(ofd, " Date: ", 8);
- (void) write(ofd, ctime(&tvec), 24);
- (void) write(ofd, "\n", 1);
- } else { /* normal banner */
- (void) write(ofd, "\n\n\n", 3);
- scan_out(ofd, name1, '\0');
- (void) write(ofd, "\n\n", 2);
- scan_out(ofd, name2, '\0');
- if (class[0]) {
- (void) write(ofd,"\n\n\n",3);
- scan_out(ofd, class, '\0');
- }
- (void) write(ofd, "\n\n\n\n\t\t\t\t\tJob: ", 15);
- (void) write(ofd, name2, strlen(name2));
- (void) write(ofd, "\n\t\t\t\t\tDate: ", 12);
- (void) write(ofd, ctime(&tvec), 24);
- (void) write(ofd, "\n", 1);
- }
- if (!SF)
- (void) write(ofd, FF, strlen(FF));
- tof = 1;
-}
-
-char *
-scnline(key, p, c)
- register char key, *p;
- char c;
-{
- register scnwidth;
-
- for (scnwidth = WIDTH; --scnwidth;) {
- key <<= 1;
- *p++ = key & 0200 ? c : BACKGND;
- }
- return (p);
-}
-
-#define TRC(q) (((q)-' ')&0177)