summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormongo <andmarti@gmail.com>2023-06-01 15:36:42 -0300
committermongo <andmarti@gmail.com>2023-06-01 15:36:42 -0300
commitb1ba526d0be4b4ceff13b4d89ebfcaba954d26a3 (patch)
treee51f844475c39f216efd3cfbc12533b1bec09d8f
parent0b7d465aca59d2f0c761bc1912f52e3c0864bf83 (diff)
Avoid malloc roman struct everytime loading is made. Added transpose example file
-rw-r--r--examples/sc/transpose.sc27
-rw-r--r--src/file.c15
2 files changed, 37 insertions, 5 deletions
diff --git a/examples/sc/transpose.sc b/examples/sc/transpose.sc
new file mode 100644
index 0000000..219050d
--- /dev/null
+++ b/examples/sc/transpose.sc
@@ -0,0 +1,27 @@
+# This data file was generated by the Spreadsheet Calculator Improvised (sc-im)
+# You almost certainly shouldn't edit it.
+
+newsheet "Sheet1"
+movetosheet "Sheet1"
+offscr_sc_cols 0
+offscr_sc_rows 0
+nb_frozen_rows 0
+nb_frozen_cols 0
+nb_frozen_screenrows 0
+nb_frozen_screencols 0
+let A0 = 9-H0
+let B0 = 4
+let D0 = 9
+let E0 = 8
+let F0 = 7
+let H0 = 8
+let A1 = 2
+let B1 = 5
+let D1 = 6
+let E1 = 5
+let F1 = 4
+let A2 = 3
+let B2 = 6
+label B4 = "algo"
+goto B4
+movetosheet "Sheet1"
diff --git a/src/file.c b/src/file.c
index 8a620a2..85054b6 100644
--- a/src/file.c
+++ b/src/file.c
@@ -2214,15 +2214,20 @@ void readfile_argv(int argc, char ** argv) {
*/
void load_file(char * file) {
if (file == NULL || file[0] == '\0') return;
- struct roman * roman = calloc(1, sizeof(struct roman));
+ // Do not calloc a new roman struct everytime. See 783 PR discussion.
+ // use the one allocated when loading rc file.
+ struct roman * roman = session->cur_doc;
+ if (roman == NULL) {
+ roman = calloc(1, sizeof(struct roman));
+ // save roman inside session
+ INSERT(roman, (session->first_doc), (session->last_doc), next, prev);
+ session->cur_doc = roman; // important: set cur_doc!
+ }
+
roman->name = ! strlen(file) ? NULL : strdup(file);
roman->first_sh = NULL;
roman->cur_sh = NULL;
- // save roman inside session
- INSERT(roman, (session->first_doc), (session->last_doc), next, prev);
- session->cur_doc = roman; // important: set cur_doc!
-
// malloc a clean sheet
// to make old sc file loading backwards compatible, mark it as is_allocated
roman->cur_sh = roman->first_sh = new_sheet(roman, "Sheet1");