void fill_with_string(void) { char *msg = hexOrAscii ? "Hexa string to fill with: " : "Ascii string to fill with: "; char **last = hexOrAscii ? &lastFillWithStringHexa : &lastFillWithStringAscii; char tmp2[BLOCK_SEARCH_SIZE]; unsigned char *tmp1; size_t i, l1, l2; if (!mark_set) return; if (isReadOnly) { displayMessageAndWaitForKey("File is read-only!"); return; } if (sizeCopyBuffer > BIGGEST_COPYING) { displayTwoLineMessage("Hey, don't you think that's too big?!", "Really fill (Yes/No)"); if (tolower(getch()) != 'y') return; } if (!displayMessageAndGetString(msg, last, tmp2, sizeof(tmp2))) return; l1 = mark_max - mark_min + 1; l2 = strlen(tmp2); if (hexOrAscii) { if (l2 == 1) { if (!isxdigit(*tmp2)) { displayMessageAndWaitForKey("Invalid hexa string"); return; } *tmp2 = hexCharToInt(*tmp2); } else if (!hexStringToBinString(tmp2, &l2)) return; } tmp1 = malloc(l1); if(!tmp1) return; for (i = 0; i < l1 - l2 + 1; i += l2) memcpy(tmp1 + i, tmp2, l2); memcpy(tmp1 + i, tmp2, l1 - i); addToEdited(mark_min, l1, tmp1); readFile(); free(tmp1); }
void yank(void) { if (copyBuffer == NULL) { displayMessageAndWaitForKey("Nothing to paste"); return; } if (isReadOnly) { displayMessageAndWaitForKey("File is read-only!"); return; } addToEdited(base + cursor, sizeCopyBuffer, copyBuffer); readFile(); }
void copy_region(void) { typePage *p; if (!mark_set) { displayMessageAndWaitForKey("Nothing to copy"); return; } sizeCopyBuffer = mark_max - mark_min + 1; if (sizeCopyBuffer == 0) return; if (sizeCopyBuffer > BIGGEST_COPYING) { displayTwoLineMessage("Hey, don't you think that's too big?!", "Really copy (Yes/No)"); if (tolower(getch()) != 'y') return; } FREE(copyBuffer); if ((copyBuffer = malloc(sizeCopyBuffer)) == NULL) { displayMessageAndWaitForKey("Can't allocate that much memory"); return; } if (LSEEK_(fd, mark_min) == -1 || read(fd, copyBuffer, sizeCopyBuffer) == -1) { displayMessageAndWaitForKey(strerror(errno)); return; } for (p = edited; p; p = p->next) { if (mark_min < p->base + p->size && p->base <= mark_max) { off_t min = MIN(p->base, mark_min); memcpy(copyBuffer + p->base - min, p->vals + mark_min - min, MIN(p->base + p->size, mark_max) - MAX(p->base, mark_min) + 1); } } unmarkAll(); mark_set = FALSE; }
static void searchB(INT loc, char *string) { nodelay(stdscr, FALSE); free(string); if (loc >= 0) set_cursor(loc); else { if (loc == -3) displayMessageAndWaitForKey("not found"); } }
void yank_to_a_file(void) { char tmp[BLOCK_SEARCH_SIZE]; int f; if (copyBuffer == NULL) { displayMessageAndWaitForKey("Nothing to paste"); return; } if (!displayMessageAndGetString("File name: ", &lastYankToAFile, tmp, sizeof(tmp))) return; if ((f = open(tmp, O_RDONLY)) != -1) { close(f); displayTwoLineMessage("File exists", "Overwrite it (Yes/No)"); if (tolower(getch()) != 'y') return; } if ((f = creat(tmp, 0666)) == -1 || write(f, copyBuffer, sizeCopyBuffer) == -1) { displayMessageAndWaitForKey(strerror(errno)); } if (f != -1) close(f); }