char *rnd_state_to_string(rnd_t rnd) { unsigned i; unsigned size = rnd_get_state_size_bytes(); uint32_t *state; char *state_str; char * cur; if (!rnd) { fprintf(stderr,"rnd: No generator state!"); exit(-1); } state = rnd_state_to_array(rnd); state_str = malloc(2*size+1); if (!state_str) { fprintf(stderr,"rnd: Malloc failed!"); exit(-1); } cur = state_str; for (i=0; i<size/sizeof(uint32_t); i++) { cur = put_ul(cur, state[i]); } *cur = '\0'; rnd_free_state_array(state); return state_str; }
static int doit(void) { long save; int i; int lastnl; int use_replacement; if (flying) { return (flystate); } use_replacement = 0; save = ftell(workf); do { for (i = MAX_C_A - cabove; nls[i] < 0; i++); fseek(workf, nls[i], 0); for (i = save - nls[i] - rahead; i; i--) { putchar(getc(workf)); } put_ul(use_replacement ? str2 : str1); fseek(workf, save + s1l - rahead, 0); lastnl = 0; i = cbelow + 1; while (i > 0) { int c; c = getc(workf); if (c == EOF) { clearerr(workf); break; } putchar(c); lastnl = 0; if (c == '\n') { i--; lastnl = 1; } } if (!lastnl) printf("\n[no final newline] "); fseek(workf, save, 0); i = -1; while (i == -1) { switch (getc_cbreak()) { case ' ': i = 1; break; case '.': i = 1; flying = 1; flystate = 0; break; case 'n': i = 0; break; case '\7': i = 0; flying = 1; flystate = 0; break; case '!': i = 1; flying = 1; flystate = 1; break; case ',': use_replacement = !use_replacement; i = -2; printf("(using %s string gives)\n", use_replacement ? "new" : "old"); break; case '?': printf("File is `%s'\n", current_file); break; default: putchar('\7'); break; } } } while (i < 0); if (i) { printf("(replacing"); } else { printf("(leaving"); } if (flying) { if (flystate == i) { printf(" this and all the rest"); } else if (flystate) { printf(" this, replacing all the rest"); } else { printf(" this, leaving all the rest"); } } printf(")\n"); return (i); }