Patch #: 113 Type: operational change Priority: none Modification: update lwrename for Level 2 PostScript & LW IIg ETalk Submitted: Edward Moy Archived: munnari.OZ.AU mac/cap.patches/cap60.patch113 Application: 'cd cap60; patch -p < cap60.patches/cap60.patch113' Summary: Support Level 2 PostScript non-numeric passwords Summary: Add PostScript for ETalk LaserWriter IIg name changes Summary: Allow lwrename.list file to contain comments File: cap60/contrib/lwrename.c *** contrib/lwrename.c.orig Wed Jul 15 18:25:20 1992 --- contrib/lwrename.c Wed Jul 15 18:25:56 1992 *************** *** 11,20 **** --- 11,22 ---- * without express or implied warranty. */ + #include #include #include #include #include + #include #include #include *************** *** 31,38 **** struct lws { struct lws *next; ! long passwd; ! char name[80]; } *lwhead; u_long atpresponsetimeout = ATPRESPONSETIMEOUT; --- 33,40 ---- struct lws { struct lws *next; ! char *passwd; ! char *name; } *lwhead; u_long atpresponsetimeout = ATPRESPONSETIMEOUT; *************** *** 39,52 **** char lwfile[] = LWRENAMEFILE; char *myname; char renamestr[] = "\ ! serverdict begin %ld exitserver\n\ statusdict begin\n\ (%s) (LaserShared) currentdict /appletalktype known\n\ {/appletalktype}{/product}ifelse exch def setprintername\n\ end\n\ "; int s_time = 2 * 60; main(argc,argv) int argc; char **argv; --- 41,75 ---- char lwfile[] = LWRENAMEFILE; char *myname; char renamestr[] = "\ ! currentfile\n\ ! statusdict begin product (LaserWriter IIg) eq version (2010.113) eq and end not\n\ ! {save exch 291 string readstring pop pop restore} if\n\ ! /ASCIIHexDecode filter /SystemPatch statusdict /emulate get exec\n\ ! 85f6ba98b8147bdb3c41fc154e390200521caba043febd65f48e008d42590001cd0f62e4c9f2b841c6c1c85660f30002ba262234d72494f203c119951000000376b481858e01bff2db172cf2ecfe000446e2f3ddca7b1fb2d27814e1c22e000598f64cae7bb9897afb760a5d81ac0106>\n\ ! serverdict begin %s exitserver\n\ statusdict begin\n\ (%s) (LaserShared) currentdict /appletalktype known\n\ {/appletalktype}{/product}ifelse exch def setprintername\n\ end\n\ "; + char resetstr[] = "\ + currentfile\n\ + statusdict begin product (LaserWriter IIg) eq version (2010.113) eq and end not\n\ + {save exch 291 string readstring pop pop restore} if\n\ + /ASCIIHexDecode filter /SystemPatch statusdict /emulate get exec\n\ + 85f6ba98b8147bdb3c41fc154e390200521caba043febd65f48e008d42590001cd0f62e4c9f2b841c6c1c85660f30002ba262234d72494f203c119951000000376b481858e01bff2db172cf2ecfe000446e2f3ddca7b1fb2d27814e1c22e000598f64cae7bb9897afb760a5d81ac0106>\n\ + serverdict begin %s exitserver\n\ + statusdict begin\n\ + (%s) (%s) currentdict /appletalktype known\n\ + {/appletalktype}{/product}ifelse exch def setprintername\n\ + end\n\ + "; int s_time = 2 * 60; + char *newpsstring(); + char *newstring(); + void reset(); + main(argc,argv) int argc; char **argv; *************** *** 54,59 **** --- 77,83 ---- register char *cp; register FILE *fp; register struct lws *lp, *ln; + register int i; int cno, ocomp, wcomp; char buf[BUFSIZ]; PAPStatusRec status; *************** *** 90,100 **** exit(1); } ln = NULL; while(fgets(buf, BUFSIZ, fp)) { if(cp = index(buf, '\n')) *cp = 0; if((cp = index(buf, '\t')) == NULL) { ! fprintf(stderr, "%s: Syntax error in %s\n", myname, lwfile); exit(1); } *cp++ = 0; --- 114,128 ---- exit(1); } ln = NULL; + i = 0; while(fgets(buf, BUFSIZ, fp)) { + i++; + if(*buf == '#') /* allow comments */ + continue; if(cp = index(buf, '\n')) *cp = 0; if((cp = index(buf, '\t')) == NULL) { ! fprintf(stderr, "%s: Syntax error in %s, line %d\n", myname, lwfile, i); exit(1); } *cp++ = 0; *************** *** 102,109 **** fprintf(stderr, "%s: Out of memory\n", myname); exit(1); } ! lp->passwd = atol(buf); ! strcpy(lp->name, cp); if(ln) ln->next = lp; else --- 130,137 ---- fprintf(stderr, "%s: Out of memory\n", myname); exit(1); } ! lp->passwd = isnumber(buf) ? newstring(buf) : newpsstring(buf); ! lp->name = newstring(cp); if(ln) ln->next = lp; else *************** *** 117,122 **** --- 145,151 ---- ln->next = NULL; fclose(fp); disassociate(); + signal(SIGHUP, reset); /* init cap */ abInit(FALSE); /* don't printout -- messes up with */ nbpInit(); *************** *** 142,147 **** --- 171,209 ---- } } + void + reset() + { + register char *tp, *cp; + register struct lws *lp; + register int i; + int cno, ocomp; + char buf[BUFSIZ]; + char name[256]; + PAPStatusRec status; + + signal(SIGHUP, SIG_IGN); + lp = lwhead; + do { + tp = index(lp->name, ':'); + *tp++ = 0; + strcpy(name, lp->name); + strcat(name, ":LaserShared"); + cp = index(tp, '@'); + strcat(name, cp); + *cp = 0; + if(PAPOpen(&cno, name, atpMaxNum, &status, &ocomp) == noErr) { + do { + abSleep(16, TRUE); + } while(ocomp > 0); + sprintf(buf, resetstr, lp->passwd, lp->name, tp); + writeit(cno, buf); + PAPClose(cno); + } + } while(lp = lp->next); + exit(0); + } + disassociate() { int i; *************** *** 248,253 **** --- 310,372 ---- return(-1); } return(0); + } + + char * + newstring(str) + char *str; + { + register char *cp; + + if((cp = malloc(strlen(str) + 1)) == NULL) { + fprintf(stderr, "%s: newstring: Out of memory\n", myname); + exit(1); + } + strcpy(cp, str); + return(cp); + } + + char * + newpsstring(str) + char *str; + { + register char *fp, *tp; + register int len; + char buf[128]; + + tp = buf; + *tp++ = '('; + for(len = 1, fp = str ; *fp ; ) { + if(++len >= (sizeof(buf) - 1)) { + fprintf(stderr, "%s: newpsstring: String too long\n", myname); + exit(1); + } + switch(*fp) { + case '(': + case ')': + case '\\': + if(++len >= (sizeof(buf) - 1)) { + fprintf(stderr, "%s: newpsstring: String too long\n", myname); + exit(1); + } + *tp++ = '\\'; + } + *tp++ = *fp++; + } + *tp++ = ')'; + *tp = 0; + return(newstring(buf)); + } + + isnumber(str) + register char *str; + { + while(*str) { + if(!isdigit(*str)) + return(0); + str++; + } + return(1); } Usage() *** lib/cap/abversion.c.orig Tue Jul 14 22:25:37 1992 --- lib/cap/abversion.c Wed Jul 15 18:29:49 1992 *************** *** 1,7 **** /* ! * $Author: djh $ $Date: 1992/07/14 12:25:27 $ ! * $Header: /mac/src/cap60/lib/cap/RCS/abversion.c,v 2.12 1992/07/14 12:25:27 djh Rel djh $ ! * $Revision: 2.12 $ */ /* --- 1,7 ---- /* ! * $Author: djh $ $Date: 1992/07/15 08:29:41 $ ! * $Header: /mac/src/cap60/lib/cap/RCS/abversion.c,v 2.13 1992/07/15 08:29:41 djh Rel djh $ ! * $Revision: 2.13 $ */ /* *************** *** 31,37 **** myversion.cv_name = "CAP"; myversion.cv_version = 6; myversion.cv_subversion = 0; ! myversion.cv_patchlevel = 112; myversion.cv_rmonth = "July"; myversion.cv_ryear = "1992"; switch (lap_proto) { --- 31,37 ---- myversion.cv_name = "CAP"; myversion.cv_version = 6; myversion.cv_subversion = 0; ! myversion.cv_patchlevel = 113; myversion.cv_rmonth = "July"; myversion.cv_ryear = "1992"; switch (lap_proto) { *** README.orig Tue Jul 14 22:26:37 1992 --- README Wed Jul 15 18:30:31 1992 *************** *** 2,8 **** CAP - Columbia AppleTalk Package for UNIX o RELEASE NOTES ! o CAP Distribution 6.0, Patch Level 112, July 1992 Notice ------ --- 2,8 ---- CAP - Columbia AppleTalk Package for UNIX o RELEASE NOTES ! o CAP Distribution 6.0, Patch Level 113, July 1992 Notice ------