+/* chwrsig: Catch orders from wr process
+ * to instigate diversion
+ */
+int whoami;
+chwrsig(){
+ int dodiver();
+ whoami = getpid();
+ signal(SIGEMT,dodiver);
+}
+int ds,slnt;
+int justrung;
+dodiver(){
+ static char dobuff[128], morejunk[256]; register char *cp;
+ FILE *fp;
+ justrung = 1;
+ signal(SIGEMT,dodiver);
+ sprintf(dobuff,"/tmp/cu%d",whoami);
+ fp = fopen(dobuff,"r");
+ if(fp==NULL) prf("Couldn't open temporary");
+ unlink(dobuff);
+ if(dbflag) {
+ prf("Name of temporary:");
+ prf(dobuff);
+ }
+ fgets(dobuff,128,fp); fclose(fp);
+ if(dbflag) {
+ prf("Name of target file:");
+ prf(dobuff);
+ }
+ for(cp = dobuff-1; *++cp; ) /* squash newline */
+ if(*cp=='\n') *cp=0;
+ cp = dobuff;
+ if (*cp=='>') cp++;
+ if (*cp==':') {
+ cp++;
+ if(*cp==0) {
+ slnt ^= 1;
+ return;
+ } else {
+ slnt = 1;
+ }
+ }
+ if (ds >= 0) close(ds);
+ if (*cp==0) {
+ slnt = 0;
+ ds = -1;
+ return;
+ }
+ if (*dobuff!='>' || (ds=open(cp,1))<0) ds=creat(cp,0644);
+ lseek(ds, (long)0, 2);
+ if(ds < 0) prf("Creat failed:"), prf(cp);
+ if (ds<0) prf("Can't divert %s",cp+1);
+}
+