void do_export(int r0, int c0, int rn, int cn) { int force_rewrite = 0; char type_export[4] = ""; char ruta[PATHLEN]; char linea[BUFFERSIZE]; if (inputline[1] == '!') force_rewrite = 1; strcpy(linea, inputline); // copio a una nueva variable para no afectar el historial de comandos del_range_chars(linea, 0, 1 + force_rewrite); // elimino 'e ' o 'e! ' del inputline // obtengo el tipo de formato al cual se exportará la planilla if (str_in_str(linea, "csv") == 0) { strcpy(type_export, "csv"); } else if (str_in_str(linea, "tab") == 0) { strcpy(type_export, "tab"); } // luego obtengo la ruta y denominación del archivo a grabar. // si se ingresa una como parametro, se la toma. if (strlen(linea) > 4) { // 'csv ' del_range_chars(linea, 0, 3); // elimino 'csv ' strcpy(ruta, linea); // si no se ingresa una, se toma el nombre de curfile y se le agrega el tipo de extensión (csv o tab) // se verifica si el nombre actual termina con ".sc" y se lo quita si es necesario. } else if (curfile[0]) { strcpy(ruta, curfile); char * ext = strrchr(ruta, '.'); if (ext != NULL) del_range_chars(ruta, strlen(ruta) - strlen(ext), strlen(ruta)-1); sprintf(ruta + strlen(ruta), ".%s", type_export); } else { error("No filename specified !"); return; } if (! force_rewrite && file_exists(ruta) && strlen(ruta) > 0) { error("File %s already exists. Use \"!\" to force rewrite.", ruta); return; } // llamo a las rutinas de exportacion if (strcmp(type_export, "csv") == 0) { export_delim(ruta, ',', r0, c0, rn, cn); } if (strcmp(type_export, "tab") == 0) { export_delim(ruta, '\t', r0, c0, rn, cn); } }
// This function handles the save file process in formato SC // returns 0 if OK // return -1 on error int savefile() { int force_rewrite = 0; char name[BUFFERSIZE]; if (! curfile[0] && strlen(inputline) < 3) { // casos ":w" ":w!" ":x" ":x!" error("There is no filename"); return -1; } if (inputline[1] == '!') force_rewrite = 1; strcpy(name, inputline); del_range_chars(name, 0, 1 + force_rewrite); if (! force_rewrite && file_exists(name)) { error("File already exists. Use \"!\" to force rewrite."); return -1; } if (strlen(inputline) > 2) { strcpy(curfile, name); } if (writefile(curfile, 0, 0, maxrow, maxcol) < 0) { error("File could not be saved"); return -1; } return 0; }
void show_text_content_of_cell(WINDOW * win, struct ent ** p, int row, int col, int r, int c) { char value[FBUFLEN]; // the value to be printed without padding char field[FBUFLEN] = ""; // the value with padding and alignment int col_width = fwidth[col]; int flen; // current length of field int left; int str_len = strlen((*p)->label); //int str_len = scstrlen((*p)->label); strcpy(value, (*p)->label); // in case there is a format char s[FBUFLEN] = ""; int res = get_formated_value(p, col, s); // si no entra en pantalla if (str_len > col_width) { sprintf(field, "%0*d", col_width, 0); subst(field, '0', '*'); // Color selected cell if ((currow == row) && (curcol == col)) { #ifdef USECOLORS if (has_colors()) set_ucolor(win, &ucolors[CELL_SELECTION_SC]); #else wattron(win, A_REVERSE); #endif } strncpy(field, value, col_width); field[col_width]='\0'; mvwprintw(win, r, c, "%s", field); char ex[str_len+1]; strcpy(ex, value); del_range_chars(ex, 0, col_width-1); #ifdef USECOLORS if (has_colors()) set_ucolor(win, &ucolors[STRG]); #else wattroff(win, A_REVERSE); #endif mvwprintw(win, r, c + col_width, "%s", ex); wclrtoeol(win); return; // izquierda } else if ( (*p)->label && (*p)->flags & is_leftflush ) { strcpy(field, value); left = col_width - str_len; left = left < 0 ? 0 : left; flen = str_len; //scdebug("%d %d", left, flen); while (left-- && flen++) add_char(field, ' ', flen-1); //sprintf(field + strlen(field), "%0*d", left, 0); //subst(field, '0', '-'); // centrado } else if ( (*p)->label && (*p)->flags & is_label) { left = (col_width - str_len )/2; left = left < 0 ? 0 : left; flen = 0; while (left-- && ++flen) add_char(field, ' ', flen-1); strcat(field, value); flen += str_len; left = (col_width - flen); left = left < 0 ? 0 : left; while (left-- && ++flen) add_char(field, ' ', flen-1); // derecha } else if ( (*p)->label || res == 0) { left = col_width - str_len; left = left < 0 ? 0 : left; flen = 0; while (left-- && ++flen) add_char(field, ' ', flen-1); strcat(field, value); // } //scdebug("%d %d-%s-", r, c, field); mvwprintw(win, r, c, "%s", field); wclrtoeol(win); return; }
void do_editmode(struct block * sb) { if (sb->value == 'h' || sb->value == OKEY_LEFT) { // LEFT inputline_pos = back_char(); } else if (sb->value == 'l' || sb->value == OKEY_RIGHT) { // RIGHT inputline_pos = for_char(); } else if (sb->value == 'x') { // x del_back_char(); } else if (sb->value == 'X') { // X del_for_char(); } else if (sb->value == ' ' && ( strlen(inputline) < (COLS - 14) ) ) { // SPACE add_char(inputline, ' ', inputline_pos); } else if (sb->value == 'r') { // r curs_set(1); int c = get_key(); if (c != -1) inputline[inputline_pos] = c; curs_set(2); } else if (sb->value == 'R') { // R curs_set(1); int c = get_key(); while (c != OKEY_ENTER && c != -1) { if (isprint(c)) { inputline[inputline_pos] = c; ++inputline_pos; mvwprintw(input_win, 0, 1 + rescol, "%s", inputline); wmove(input_win, 0, inputline_pos + 1 + rescol); wrefresh(input_win); } c = get_key(); } curs_set(2); } else if (sb->value == 'f') { // f int c = get_key(); if (c != -1) inputline_pos = look_for(c); } else if (sb->value == 'd' || sb->value == 'c') { // d or c int c, d; if ( (c = get_key()) != -1 ) { switch (c) { case 'e': // de or ce del_range_chars(inputline, inputline_pos, for_word(1, 0, 0)); break; case 'E': // dE or cE del_range_chars(inputline, inputline_pos, for_word(1, 0, 1)); break; case 'w': // dw or cw del_range_chars(inputline, inputline_pos, for_word(0, 1, 0) - 1); if (inputline_pos == strlen(inputline) && inputline_pos) inputline_pos--; break; case 'W': // dW or cW del_range_chars(inputline, inputline_pos, for_word(0, 1, 1) - 1); if (inputline_pos == strlen(inputline) && inputline_pos) inputline_pos--; break; case 'b': // db or cb d = back_word(0); del_range_chars(inputline, d, inputline_pos-1); inputline_pos = d; break; case 'B': // dB or cB d = back_word(1); del_range_chars(inputline, d, inputline_pos-1); inputline_pos = d; break; case 'l': // dl or cl case OKEY_RIGHT: del_back_char(); break; case 'h': // dh or ch case OKEY_LEFT: del_for_char(); break; case 'a': if ( (d = get_key()) == 'W' ) { // daW or caW c = ( inputline_pos && inputline[inputline_pos-1] == ' ' ) ? inputline_pos : back_word(1); del_range_chars(inputline, c, for_word(0, 1, 1) - 1); inputline_pos = (strlen(inputline) > inputline_pos) ? c : strlen(inputline)-2; } else if ( d == 'w' ) { // daw or caw d = ( inputline_pos && ! istext( inputline[inputline_pos-1]) ) ? inputline_pos : back_word(0); del_range_chars(inputline, d, for_word(0, 1, 0) - 1); inputline_pos = (strlen(inputline) > inputline_pos) ? d : strlen(inputline)-2; } break; } if (sb->value == 'c') chg_mode(insert_edit_submode); } } else if (find_val(sb, OKEY_ENTER)) { // ENTER insert_or_edit_cell(); return; } else if (sb->value == '$') { // $ inputline_pos = strlen(inputline) - 1; } else if (sb->value == 'w') { // w inputline_pos = for_word(0, 0, 0); } else if (sb->value == 'W') { // W inputline_pos = for_word(0, 0, 1); } else if (sb->value == 'e') { // e inputline_pos = for_word(1, 0, 0); } else if (sb->value == 'E') { // E inputline_pos = for_word(1, 0, 1); } else if (sb->value == 'b') { // b inputline_pos = back_word(0); } else if (sb->value == 'B') { // B inputline_pos = back_word(1); } else if (sb->value == '0') { // 0 inputline_pos = 0; } else if (sb->value == 'a') { // a inputline_pos++; chg_mode(insert_edit_submode); } else if (sb->value == 'i' || sb->value == '=') { // i o = chg_mode(insert_edit_submode); } else if (sb->value == 's') { // s if (inputline_pos <= strlen(inputline)) del_char(inputline, inputline_pos); chg_mode(insert_edit_submode); } else if (sb->value == 'A') { // A inputline_pos = strlen(inputline); chg_mode(insert_edit_submode); } else if (sb->value == 'I') { // I inputline_pos = 0; chg_mode(insert_edit_submode); } else if (sb->value == 'D') { // D inputline_pos = 0; inputline[0] = '\0'; chg_mode(insert_edit_submode); } show_header(input_win); return; }