summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorandmarti1424 <scim.spreadsheet@gmail.com>2016-04-10 20:54:58 -0300
committerandmarti1424 <scim.spreadsheet@gmail.com>2016-04-10 20:54:58 -0300
commit503c8774221a31c147d29d12f870e8a394dc0a5f (patch)
tree0edc94753eb44d901a5ffd475d2266804e4a8bd8
parent132e8ef4b365096b9609a333389a864a929ee8f9 (diff)
More fixes
-rwxr-xr-xsrc.scim2/cmds.c7
-rwxr-xr-xsrc.scim2/file.c8
-rwxr-xr-xsrc.scim2/xls.c20
-rwxr-xr-xsrc.scim2/xlsx.c18
4 files changed, 29 insertions, 24 deletions
diff --git a/src.scim2/cmds.c b/src.scim2/cmds.c
index 6d1b95f..953e367 100755
--- a/src.scim2/cmds.c
+++ b/src.scim2/cmds.c
@@ -1315,21 +1315,22 @@ void auto_justify(int ci, int cf, int min) {
int r, c, sum = 0;
char field[1024] = "";
struct ent * p;
- wchar_t widestring[256] = { L'\0' };
+ wchar_t widestring[BUFFERSIZE] = { L'\0' };
mbstate_t state;
size_t result;
const char * mbsptr;
+ checkbounds(&maxrow, &cf);
for (c = ci; c <= cf; c++) {
fwidth[c] = min;
for (r = 0; r <= maxrow; r++) {
- if ((p = *ATBL(tbl, r, c))) {
+ if ((p = *ATBL(tbl, r, c)) != NULL) {
sum = 0;
if (p->pad) sum += p->pad;
if (p->label) {
memset( &state, '\0', sizeof state );
mbsptr = p->label;
- result = mbsrtowcs(widestring, & mbsptr, 256, & state);
+ result = mbsrtowcs(widestring, &mbsptr, BUFFERSIZE, &state);
if ( result != (size_t)-1 )
sum += wcslen(widestring);
}
diff --git a/src.scim2/file.c b/src.scim2/file.c
index e7962ec..bd41b8e 100755
--- a/src.scim2/file.c
+++ b/src.scim2/file.c
@@ -445,8 +445,10 @@ int readfile(char * fname, int eraseflg) {
// If file is an xlsx file, we import it
} else if (len > 5 && ! strcasecmp( & fname[len-5], ".xlsx")){
#ifndef XLSX
- if (! atoi(get_conf_value("nocurses")))
+ if (! atoi(get_conf_value("nocurses"))) {
+ if (loading) loading = 0;
scerror("XLSX import support not compiled in");
+ }
#else
open_xlsx(fname, "UTF-8");
#endif
@@ -457,6 +459,7 @@ int readfile(char * fname, int eraseflg) {
// If file is an xls file, we import it
} else if (len > 4 && ! strcasecmp( & fname[len-4], ".xls")){
#ifndef XLS
+ if (loading) loading = 0;
scerror("XLS import support not compiled in");
#else
open_xls(fname, "UTF-8");
@@ -489,6 +492,7 @@ int readfile(char * fname, int eraseflg) {
return 1;
} else if (! atoi(get_conf_value("nocurses"))) {
+ if (loading) loading = 0;
scinfo("\"%s\" is not a SC-IM compatible file", fname);
return -1;
}
@@ -844,7 +848,7 @@ int import_csv(char * fname, char d) {
//swprintf(line_interp, BUFFERSIZE, L"let %s%d=%s", coltoa(maxcol), maxrow, "0");
//send_to_interp(line_interp);
- auto_justify(0, maxcol, DEFWIDTH);
+ auto_justify(0, maxcols, DEFWIDTH);
//closefile(f, pid, rfd);
fclose(f);
diff --git a/src.scim2/xls.c b/src.scim2/xls.c
index 2bd962d..821deff 100755
--- a/src.scim2/xls.c
+++ b/src.scim2/xls.c
@@ -44,7 +44,7 @@ int open_xls(char * fname, char * encoding) {
WORD r, c;
pWB = xls_open(fname, encoding);
- char line_interp[FBUFLEN] = "";
+ wchar_t line_interp[FBUFLEN] = L"";
struct ent * n;
if (pWB == NULL) {
@@ -78,7 +78,7 @@ int open_xls(char * fname, char * encoding) {
&& cell->id != 0x0BD
&& cell->id != 0x203 ) {
- sprintf(line_interp, "let %s%d=%.15g", coltoa(c), r, (cell->d - 25569) * 86400);
+ swprintf(line_interp, FBUFLEN, L"let %s%d=%.15g", coltoa(c), r, (cell->d - 25569) * 86400);
send_to_interp(line_interp);
n = lookat(r, c);
n->format = 0;
@@ -90,18 +90,18 @@ int open_xls(char * fname, char * encoding) {
// display the value of the cell (either numeric or string)
} else if (cell->id == 0x27e || cell->id == 0x0BD || cell->id == 0x203) {
- sprintf(line_interp, "let %s%d=%.15g", coltoa(c), r, cell->d);
+ swprintf(line_interp, FBUFLEN, L"let %s%d=%.15g", coltoa(c), r, cell->d);
} else if (cell->id == 0x06) { // formula
if (cell->l == 0) { // its a number
- sprintf(line_interp, "let %s%d=%.15g", coltoa(c), r, cell->d);
+ swprintf(line_interp, FBUFLEN, L"let %s%d=%.15g", coltoa(c), r, cell->d);
} else {
if (!strcmp((char *) cell->str, "bool")) { // its boolean, and test cell->d
- sprintf(line_interp, "label %s%d=\"%s\"", coltoa(c), r, (int) cell->d ? "true" : "false");
+ swprintf(line_interp, FBUFLEN, L"label %s%d=\"%s\"", coltoa(c), r, (int) cell->d ? "true" : "false");
} else if (! strcmp((char *) cell->str, "error")) { // formula is in error
- sprintf(line_interp, "label %s%d=\"%s\"", coltoa(c), r, "error"); //FIXME
+ swprintf(line_interp, FBUFLEN, L"label %s%d=\"%s\"", coltoa(c), r, "error"); //FIXME
} else {
- sprintf(line_interp, "label %s%d=\"%s\"", coltoa(c), r, (char *) cell->str);
+ swprintf(line_interp, FBUFLEN, L"label %s%d=\"%s\"", coltoa(c), r, (char *) cell->str);
}
}
@@ -109,16 +109,16 @@ int open_xls(char * fname, char * encoding) {
int pad_pos;
if ((pad_pos = str_in_str((char *) cell->str, "\n")) != -1) ((char *) cell->str)[pad_pos] = '\0'; // For spanning
// clean_carrier((char *) cell->str); // For spanning
- sprintf(line_interp, "label %s%d=\"%s\"", coltoa(c), r, (char *) cell->str);
+ swprintf(line_interp, FBUFLEN, L"label %s%d=\"%s\"", coltoa(c), r, (char *) cell->str);
} else {
- sprintf(line_interp, "label %s%d=\"%s\"", coltoa(c), r, "");
+ swprintf(line_interp, FBUFLEN, L"label %s%d=\"%s\"", coltoa(c), r, "");
}
send_to_interp(line_interp);
}
}
xls_close_WS(pWS);
xls_close(pWB);
- auto_justify(0, maxcol, DEFWIDTH);
+ auto_justify(0, maxcols, DEFWIDTH);
return 0;
#else
return -1;
diff --git a/src.scim2/xlsx.c b/src.scim2/xlsx.c
index 52eb870..a810ad7 100755
--- a/src.scim2/xlsx.c
+++ b/src.scim2/xlsx.c
@@ -104,7 +104,7 @@ char * get_xlsx_number_format_by_id(xmlDocPtr doc_styles, int id) {
void get_sheet_data(xmlDocPtr doc, xmlDocPtr doc_strings, xmlDocPtr doc_styles) {
xmlNode * cur_node = xmlDocGetRootElement(doc)->xmlChildrenNode;
xmlNode * child_node = NULL;
- char line_interp[FBUFLEN] = "";
+ wchar_t line_interp[FBUFLEN] = L"";
int r, c;
// we go forward up to sheet data
@@ -139,7 +139,7 @@ void get_sheet_data(xmlDocPtr doc, xmlDocPtr doc_strings, xmlDocPtr doc_styles)
if (strvalue != NULL && strvalue[0] != '\0') {
st = str_replace (strvalue, "\"", "''");
clean_carrier(st); // we handle padding
- sprintf(line_interp, "label %s%d=\"%s\"", coltoa(c), r, st);
+ swprintf(line_interp, FBUFLEN, L"label %s%d=\"%s\"", coltoa(c), r, st);
send_to_interp(line_interp);
free(st);
}
@@ -151,7 +151,7 @@ void get_sheet_data(xmlDocPtr doc, xmlDocPtr doc_strings, xmlDocPtr doc_styles)
if (strvalue != NULL && strvalue[0] != '\0') {
st = str_replace (strvalue, "\"", "''");
clean_carrier(st); // we handle padding
- sprintf(line_interp, "label %s%d=\"%s\"", coltoa(c), r, st);
+ swprintf(line_interp, FBUFLEN, L"label %s%d=\"%s\"", coltoa(c), r, st);
send_to_interp(line_interp);
free(st);
}
@@ -172,7 +172,7 @@ void get_sheet_data(xmlDocPtr doc, xmlDocPtr doc_strings, xmlDocPtr doc_styles)
)) {
long l = strtol((char *) child_node->xmlChildrenNode->xmlChildrenNode->content, (char **) NULL, 10);
- sprintf(line_interp, "let %s%d=%.15ld", coltoa(c), r, (l - 25569) * 86400 - atoi(get_conf_value("tm_gmtoff")));
+ swprintf(line_interp, FBUFLEN, L"let %s%d=%.15ld", coltoa(c), r, (l - 25569) * 86400 - atoi(get_conf_value("tm_gmtoff")));
send_to_interp(line_interp);
struct ent * n = lookat(r, c);
n->format = 0;
@@ -188,7 +188,7 @@ void get_sheet_data(xmlDocPtr doc, xmlDocPtr doc_strings, xmlDocPtr doc_styles)
(atoi(fmtId) >= 18 && atoi(fmtId) <= 21)
)) {
double l = atof((char *) child_node->xmlChildrenNode->xmlChildrenNode->content);
- sprintf(line_interp, "let %s%d=%.15f", coltoa(c), r, (l - atoi(get_conf_value("tm_gmtoff")) * 1.0 / 60 / 60 / 24) * 86400);
+ swprintf(line_interp, FBUFLEN, L"let %s%d=%.15f", coltoa(c), r, (l - atoi(get_conf_value("tm_gmtoff")) * 1.0 / 60 / 60 / 24) * 86400);
send_to_interp(line_interp);
struct ent * n = lookat(r, c);
n->format = 0;
@@ -202,7 +202,7 @@ void get_sheet_data(xmlDocPtr doc, xmlDocPtr doc_strings, xmlDocPtr doc_styles)
child_node->xmlChildrenNode != NULL &&
! strcmp((char *) child_node->xmlChildrenNode->name, "v") ){
double l = atof((char *) child_node->xmlChildrenNode->xmlChildrenNode->content);
- sprintf(line_interp, "let %s%d=%.15f", coltoa(c), r, l);
+ swprintf(line_interp, FBUFLEN, L"let %s%d=%.15f", coltoa(c), r, l);
send_to_interp(line_interp);
// f - numeric value that is a result from formula
@@ -242,11 +242,11 @@ void get_sheet_data(xmlDocPtr doc, xmlDocPtr doc_strings, xmlDocPtr doc_styles)
free(strf);
// we send the formula to the interpreter and hope to resolve it!
- sprintf(line_interp, "let %s%d=%s", coltoa(c), r, formula);
+ swprintf(line_interp, FBUFLEN, L"let %s%d=%s", coltoa(c), r, formula);
} else {
double l = atof((char *) child_node->last->xmlChildrenNode->content);
- sprintf(line_interp, "let %s%d=%.15f", coltoa(c), r, l);
+ swprintf(line_interp, FBUFLEN, L"let %s%d=%.15f", coltoa(c), r, l);
}
send_to_interp(line_interp);
}
@@ -384,7 +384,7 @@ int open_xlsx(char * fname, char * encoding) {
return -1;
}
- auto_justify(0, maxcol, DEFWIDTH);
+ auto_justify(0, maxcols, DEFWIDTH);
deleterow();
return 0;
}