void dogetkey() { int c, len; goraw(); c = nmgetch(); deraw(0); if (c < 256) { sprintf(line, "%c", c); len = 1; } else if (c >= KEY_MIN && c <= KEY_MAX) { int i, j; line[0] = '\0'; sprintf(line + 1, "%s\n", keyname(c)); for (i = 1, j = 5; line[j-1]; ) { if (line[j] == '(' || line[j] == ')') j++; else line[i++] = line[j++]; } len = strlen(line + 1) + 1; } else { line[0] = '0'; sprintf(line + 1, "UNKNOWN KEY"); len = strlen(line + 1) + 1; } write(macrofd, line, len); }
void doquery (char *s, char *data, int fd) { goraw(); query(s, data); deraw(0); if (linelim >= 0) { write(fd, line, strlen(line)); write(fd, "\n", 1); } line[0] = '\0'; linelim = -1; error(" "); update(0); if (s) scxfree(s); }
int cwritefile(char *fname, int r0, int c0, int rn, int cn) { register FILE *f; int pipefd[2]; int fildes; int pid; char save[PATHLEN]; char *fn; char *busave; if (*fname == '\0') fname = &curfile[0]; fn = fname; while (*fn && (*fn == ' ')) /* Skip leading blanks */ fn++; if (*fn == '|') { error("Can't have encrypted pipe"); return (-1); } (void) strcpy(save, fname); busave = findhome(save); #ifdef DOBACKUPS if (!backup_file(busave) && (yn_ask("Could not create backup copy, Save anyway?: (y,n)") != 1)) return (0); #endif if ((fildes = open (busave, O_TRUNC|O_WRONLY|O_CREAT, 0600)) < 0) { error("Can't create file \"%s\"", save); return (-1); } if (pipe(pipefd) < 0) { error("Can't make pipe to child\n"); return (-1); } if (KeyWord[0] == '\0') { deraw(1); (void) strcpy(KeyWord, getpass("Enter key:")); goraw(); } if ((pid=fork()) == 0) { /* if child */ (void) close(0); /* close stdin */ (void) close(1); /* close stdout */ (void) close(pipefd[1]); /* close pipe output */ (void) dup(pipefd[0]); /* connect to pipe input */ (void) dup(fildes); /* standard out to file */ (void) fprintf(stderr, " "); (void) execl(CRYPT_PATH, "crypt", KeyWord, 0); (void) fprintf(stderr, "execl(%s, \"crypt\", %s, 0) in cwritefile() failed", CRYPT_PATH, KeyWord); exit (-127); } else { /* else parent */ (void) close(fildes); (void) close(pipefd[0]); /* close pipe input */ f = fdopen(pipefd[1], "w"); if (f == 0) { (void) kill(pid, -9); error("Can't fdopen file \"%s\"", save); (void) close(pipefd[1]); return (-1); } } write_fd(f, r0, c0, rn, cn); (void) fclose(f); (void) close(pipefd[1]); while (pid != wait(&fildes)) /**/; (void) strcpy(curfile,save); modflg = 0; error("File \"%s\" written (encrypted).", curfile); return (0); }
void creadfile(char *save, int eraseflg) { register FILE *f; int pipefd[2]; int fildes; int pid; if (eraseflg && strcmp(save, curfile) && modcheck(" first")) return; if ((fildes = open(findhome(save), O_RDONLY, 0)) < 0) { error ("Can't read file \"%s\"", save); return; } if (eraseflg) erasedb(); if (pipe(pipefd) < 0) { error("Can't make pipe to child"); return; } deraw(1); (void) strcpy(KeyWord, getpass("Enter key:")); goraw(); if ((pid=fork()) == 0) { /* if child */ (void) close(0); /* close stdin */ (void) close(1); /* close stdout */ (void) close(pipefd[0]); /* close pipe input */ (void) dup(fildes); /* standard in from file */ (void) dup(pipefd[1]); /* connect to pipe */ (void) fprintf(stderr, " "); (void) execl(CRYPT_PATH, "crypt", KeyWord, 0); (void) fprintf(stderr, "execl(%s, \"crypt\", %s, 0) in creadfile() failed", CRYPT_PATH, KeyWord); exit(-127); } else { /* else parent */ (void) close(fildes); (void) close(pipefd[1]); /* close pipe output */ if ((f = fdopen(pipefd[0], "r")) == (FILE *)0) { (void) kill(pid, 9); error("Can't fdopen file \"%s\"", save); (void)close(pipefd[0]); return; } } loading++; while (fgets(line, sizeof(line), f)) { linelim = 0; if (line[0] != '#') (void) yyparse(); } --loading; (void) fclose(f); (void) close(pipefd[0]); while (pid != wait(&fildes)) /**/; linelim = -1; if (eraseflg) { (void) strcpy(curfile, save); modflg = 0; } }