/* * Pine and Pico are registered trademarks of the University of Washington. * No commercial use of these trademarks may be made without prior written * permission of the University of Washington. * * Pine, Pico, and Pilot software and its included text are Copyright * 1989-1998 by the University of Washington. * * The full text of our legal notices is contained in the file called * CPYRIGHT, included with this distribution. */ #ifdef SPELLER /* * spell - fork off an spell checker * this is different for OS/2 with ispell; here, the document * correction and interface is provided by ispell itself */ #define MAXARGS 10 spell(f, n) int f, n; { char sp[NLINE]; /* buf holding spell command */ char *fn; /* tmp holder for file name */ char *cp; char *args[MAXARGS]; /* ptrs into edit command */ int child, rc, i, done = 0; long l; int stat; FILE *p; if(Pmaster == NULL) return(-1); if((fn = writetmp(0, NULL)) == NULL){ emlwrite("Can't write temp file for spell checker"); return(-1); } if((cp = (char *)getenv("SPELL")) == NULL) cp = SPELLER; strcpy(sp,cp); if((fn=writetmp(1, NULL)) == NULL){ /* get temp file */ emlwrite("Problem writing temp file for spell checker", NULL); return(-1); } strcat(sp, " "); strcat(sp, fn); cp = sp; for(i=0; *cp != '\0';i++) { /* build args array */ if(i < MAXARGS) { args[i] = NULL; /* in case we break out */ } else{ emlwrite("Too many args for command!", NULL); return(-1); } while(isspace((unsigned char)(*cp))) if(*cp != '\0') cp++; else break; args[i] = cp; while(!isspace((unsigned char)(*cp))) if(*cp != '\0') cp++; else break; if(*cp != '\0') *cp++ = '\0'; } args[i] = NULL; (*Pmaster->tty_fix)(0); emlwrite("Invoking spell checker...", NULL); { void (*ohup)() = signal(SIGHUP, SIG_IGN); /* ignore signals for now */ void (*oint)() = signal(SIGINT, SIG_IGN); cp=args[0]; rc = spawnvp(P_WAIT, cp, args); signal(SIGHUP, ohup); /* restore signals */ signal(SIGINT, oint); } (*Pmaster->tty_fix)(1); dont_interrupt(); if (rc==-1) { /* Can't run it */ emlwrite("error attempting to run speller", NULL); } /* * replace edited text with new text */ else{ rc = 0; curbp->b_flag &= ~BFCHG; /* make sure old text gets blasted */ readin(fn, 0, 0); /* read new text overwriting old */ curbp->b_flag |= BFCHG; /* mark dirty for packbuf() */ } unlink(fn); /* blast temp file */ ttopen(); /* reset the signals */ pico_refresh(0, 1); /* redraw */ return(rc); } #endif /* SPELLER */