示例#1
0
文件: file.c 项目: groessler/scim
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);
    }
}
示例#2
0
文件: file.c 项目: groessler/scim
// 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;
}
示例#3
0
文件: screen.c 项目: rubenerd/sc-im
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;
}
示例#4
0
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;
}