-
Notifications
You must be signed in to change notification settings - Fork 0
/
gdmatplot-gnuplot.patch
3876 lines (3685 loc) · 110 KB
/
gdmatplot-gnuplot.patch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
From 4d0a8e748a51b520553d6c7dd5d2d8eb6e73313f Mon Sep 17 00:00:00 2001
From: Okan Demir <[email protected]>
Date: Fri, 14 Jun 2024 21:42:51 +0300
Subject: [PATCH] GDMatPlot patch
---
src/alloc.h | 2 +-
src/axis.h | 2 +-
src/bitmap.h | 2 +-
src/boundary.h | 2 +-
src/breaders.h | 10 +
src/color.h | 2 +-
src/command.c | 121 ++-
src/command.h | 2 +-
src/complexfun.h | 2 +
src/contour.h | 2 +-
src/datablock.h | 2 +-
src/datafile.c | 53 +-
src/datafile.h | 2 +-
src/dynarray.h | 2 +-
src/encoding.h | 1 +
src/eval.h | 1 +
src/external.h | 2 +-
src/filters.h | 2 +-
src/fit.c | 4 +
src/fit.h | 6 +-
src/gadgets.h | 2 +-
src/gdmp_disable_io.h | 89 ++
src/getcolor.h | 2 +-
src/gp_hist.h | 2 +-
src/gp_time.h | 2 +-
src/gpexecute.h | 2 +-
src/gplocale.c | 4 +
src/graph3d.h | 2 +-
src/graphics.h | 2 +-
src/help.h | 11 +-
src/hidden3d.h | 2 +-
src/internal.c | 2 +
src/internal.h | 2 +-
src/interpol.h | 2 +-
src/jitter.h | 2 +-
src/libcerf.h | 2 +
src/loadpath.c | 4 +
src/misc.c | 4 +
src/misc.h | 1 +
src/mouse.h | 1 +
src/mousecmn.h | 2 +-
src/parse.h | 2 +-
src/plot.c | 50 +-
src/plot2d.c | 6 +-
src/plot2d.h | 1 +
src/pm3d.h | 2 +-
src/readline.h | 2 +-
src/save.h | 39 +-
src/scanner.h | 1 +
src/set.c | 30 +-
src/setshow.h | 1 +
src/specfun.h | 1 +
src/standard.h | 1 +
src/stats.h | 1 +
src/stdfn.c | 10 +
src/stdfn.h | 6 +
src/syscfg.h | 3 +
src/tabulate.h | 1 +
src/term.c | 8 +
src/term.h | 38 +-
src/term_api.h | 1 +
src/util.c | 2 +
src/util.h | 5 +-
src/util3d.h | 1 +
src/version.c | 6 +-
src/version.h | 1 +
src/vms.h | 2 +-
src/voxelgrid.h | 1 +
src/watch.h | 2 +-
src/xdg.h | 4 +-
term/gdmp.trm | 1828 +++++++++++++++++++++++++++++++++++++++++
71 files changed, 2368 insertions(+), 52 deletions(-)
create mode 100644 src/gdmp_disable_io.h
create mode 100644 term/gdmp.trm
diff --git a/src/alloc.h b/src/alloc.h
index 05748f7a5..63d042c43 100644
--- a/src/alloc.h
+++ b/src/alloc.h
@@ -43,5 +43,5 @@
generic *gp_alloc(size_t size, const char *message);
generic *gp_realloc(generic *p, size_t size, const char *message);
-
+#include "gdmp_disable_io.h"
#endif /* GNUPLOT_ALLOC_H */
diff --git a/src/axis.h b/src/axis.h
index 2cba4b8f0..c302561d1 100644
--- a/src/axis.h
+++ b/src/axis.h
@@ -541,5 +541,5 @@ void dump_axis_range(AXIS *axis);
#define reorder_if_necessary( min, max ) \
do { if (max < min) { double temp = min; min = max; max = temp; } \
} while (0)
-
+#include "gdmp_disable_io.h"
#endif /* GNUPLOT_AXIS_H */
diff --git a/src/bitmap.h b/src/bitmap.h
index da2b1f5f0..57d51ea63 100644
--- a/src/bitmap.h
+++ b/src/bitmap.h
@@ -97,5 +97,5 @@ int b_text_angle(float);
int b_justify_text(enum JUSTIFY mode);
void b_boxfill(int, unsigned int, unsigned int, unsigned int, unsigned int);
void b_filled_polygon(int points, gpiPoint *corners);
-
+#include "gdmp_disable_io.h"
#endif /* GNUPLOT_BITMAP_H */
diff --git a/src/boundary.h b/src/boundary.h
index 7be352ed4..1159adae2 100644
--- a/src/boundary.h
+++ b/src/boundary.h
@@ -22,5 +22,5 @@ extern int ylabel_y, y2label_y, xtic_y, x2tic_y, ytic_x, y2tic_x;
extern int key_cols, key_rows;
extern int key_count;
extern int title_x, title_y;
-
+#include "gdmp_disable_io.h"
#endif /* GNUPLOT_BOUNDARY_H */
diff --git a/src/breaders.h b/src/breaders.h
index 746211b63..bce9e4190 100644
--- a/src/breaders.h
+++ b/src/breaders.h
@@ -46,6 +46,7 @@
/* Prototypes of functions exported by breaders.c */
+#ifndef GDMP_BUILD
void edf_filetype_function(void);
void png_filetype_function(void);
void gif_filetype_function(void);
@@ -53,5 +54,14 @@ void jpeg_filetype_function(void);
int df_libgd_get_pixel(int i, int j, int component);
TBOOLEAN df_read_pixmap(t_pixmap *pixmap);
+#else
+static void edf_filetype_function(void) {}
+static void png_filetype_function(void) {}
+static void gif_filetype_function(void) {}
+static void jpeg_filetype_function(void) {}
+static int df_libgd_get_pixel(int i, int j, int component) { return 0; }
+static TBOOLEAN df_read_pixmap(t_pixmap *pixmap) { return 0; }
+#endif
+#include "gdmp_disable_io.h"
#endif /* GNUPLOT_BINEDF_H */
diff --git a/src/color.h b/src/color.h
index d94b61ea4..b7f21cf4b 100644
--- a/src/color.h
+++ b/src/color.h
@@ -273,7 +273,7 @@ unsigned int rgb_from_gray( double gray );
unsigned int rgb_from_colormap(double gray, udvt_entry *colormap);
double map2gray(double z, udvt_entry *colormap);
void get_colormap_range( udvt_entry *colormap, double *cm_min, double *cm_max );
-
+#include "gdmp_disable_io.h"
#endif /* COLOR_H */
/* eof color.h */
diff --git a/src/command.c b/src/command.c
index dc7a2eb72..d14e86d8f 100644
--- a/src/command.c
+++ b/src/command.c
@@ -133,6 +133,10 @@ static TBOOLEAN pause_internal; /* flag to indicate not to use a dialog box *
# include <conio.h> /* for getch() */
#endif
+#ifdef GDMP_BUILD
+#undef _WIN32
+#endif
+
typedef enum ifstate {IF_INITIAL=1, IF_TRUE, IF_FALSE} ifstate;
/* static prototypes */
@@ -436,7 +440,7 @@ com_line()
}
-int
+int GDMP_DECLSPEC GDMP_STDCALL
do_line()
{
/* Line continuation has already been handled by read_line().
@@ -1146,6 +1150,7 @@ iteration_early_exit()
void
changedir_command()
{
+#ifndef GDMP_BUILD
char *save_file = NULL;
c_token++;
@@ -1159,6 +1164,9 @@ changedir_command()
else
update_gpval_variables(5);
free(save_file);
+#else
+ c_token++;
+#endif
}
@@ -1737,6 +1745,7 @@ call_command()
static void
load_or_call_command( TBOOLEAN call )
{
+#ifndef GDMP_BUILD
c_token++;
if (equals(c_token, "$") && isletter(c_token+1) && !equals(c_token+2,"[")) {
/* "load" a datablock rather than a file */
@@ -1757,6 +1766,9 @@ load_or_call_command( TBOOLEAN call )
fp = loadpath_fopen(save_file, "r");
load_file(fp, save_file, call ? 2 : 1);
}
+#else
+ c_token++;
+#endif
}
@@ -1921,8 +1933,10 @@ timed_pause(double sleep_time)
usleep((useconds_t)(sleep_time * 1e6));
check_for_mouse_events();
#else
+#ifndef GDMP_BUILD
GP_SLEEP(sleep_time);
#endif
+#endif
}
/* process the 'pause' command */
@@ -2410,6 +2424,7 @@ print_command()
void
pwd_command()
{
+#ifndef GDMP_BUILD
char *save_file = NULL;
save_file = gp_alloc(PATH_MAX, "print current dir");
@@ -2418,6 +2433,7 @@ pwd_command()
else
fprintf(stderr, "%s\n", save_file);
free(save_file);
+#endif
c_token++;
}
@@ -2582,6 +2598,7 @@ void return_command() {}
void
save_command()
{
+#ifndef GDMP_BUILD
FILE *fp;
char *save_file = NULL;
TBOOLEAN append = FALSE;
@@ -2663,6 +2680,9 @@ save_command()
}
free(save_file);
+#else
+ c_token += 2;
+#endif
}
@@ -2738,11 +2758,15 @@ stats_command()
void
system_command()
{
+#ifndef GDMP_BUILD
char *cmd;
++c_token;
cmd = try_to_get_string();
do_system(cmd);
free(cmd);
+#else
+ ++c_token;
+#endif
}
@@ -3017,6 +3041,7 @@ invalid_command()
static int
changedir(char *path)
{
+#ifndef GDMP_BUILD
#if defined(MSDOS)
/* first deal with drive letter */
@@ -3047,6 +3072,7 @@ changedir(char *path)
#else
return chdir(path);
#endif /* MSDOS etc. */
+#endif /* GDMP_BUILD */
}
/* used by replot_command() */
@@ -3213,19 +3239,23 @@ help_command()
void
do_shell()
{
+#ifndef GDMP_BUILD
screen_ok = FALSE;
c_token++;
if ((vaxc$errno = lib$spawn()) != SS$_NORMAL) {
os_error(NO_CARET, "spawn error");
}
+#else
+ c_token++;
+#endif
}
static void
do_system(const char *cmd)
{
-
+#ifndef GDMP_BUILD
if (!cmd)
return;
@@ -3239,7 +3269,7 @@ do_system(const char *cmd)
os_error(NO_CARET, "spawn error");
(void) putc('\n', stderr);
-
+#endif
}
#endif /* VMS */
@@ -3465,6 +3495,7 @@ help_command()
static void
do_system(const char *cmd)
{
+#ifndef GDMP_BUILD
int ierr;
/* (am, 19980929)
@@ -3490,6 +3521,7 @@ do_system(const char *cmd)
ierr = system(cmd);
#endif
report_error(ierr);
+#endif
}
/* is_history_command:
@@ -3608,6 +3640,7 @@ rlgets(char *s, size_t n, const char *prompt)
void
do_shell()
{
+#ifndef GDMP_BUILD
screen_ok = FALSE;
c_token++;
@@ -3621,6 +3654,9 @@ do_shell()
# endif /* !(_WIN32 || __DJGPP__) */
os_error(NO_CARET, "unable to spawn shell");
}
+#else
+ c_token++;
+#endif
}
# elif defined(OS2)
@@ -3628,6 +3664,7 @@ do_shell()
void
do_shell()
{
+#ifndef GDMP_BUILD
screen_ok = FALSE;
c_token++;
@@ -3636,6 +3673,9 @@ do_shell()
os_error(NO_CARET, "system() failed");
}
(void) putc('\n', stderr);
+#else
+ c_token++;
+#endif
}
# else /* !OS2 */
@@ -3646,6 +3686,7 @@ do_shell()
void
do_shell()
{
+#ifndef GDMP_BUILD
static char exec[100] = EXEC;
screen_ok = FALSE;
@@ -3657,6 +3698,9 @@ do_shell()
os_error(NO_CARET, "system() failed");
}
(void) putc('\n', stderr);
+#else
+ c_token++;
+#endif
}
# endif /* !MSDOS */
@@ -3935,7 +3979,7 @@ expand_1level_macros()
int
do_system_func(const char *cmd, char **output)
{
-
+#ifndef GDMP_BUILD
#if defined(VMS) || defined(PIPES)
int c;
FILE *f;
@@ -4008,7 +4052,10 @@ do_system_func(const char *cmd, char **output)
return 0;
#endif /* VMS || PIPES */
-
+#else
+ *output = gp_alloc(1, "gdmp_related");
+ return 0;
+#endif /* GDMP_BUILD */
}
static int
@@ -4030,3 +4077,67 @@ report_error(int ierr)
return reported_error;
}
+
+#ifdef GDMP_BUILD
+void *_gdmp_matplot_object = NULL;
+static const double *gdmp_dataframe = NULL;
+static unsigned int gdmp_dataframe_colum_count = 0;
+static unsigned int gdmp_dataframe_row_count = 0;
+static unsigned int gdmp_dataframe_current_line = -1;
+static unsigned int gdmp_dataframe_current_index = 0;
+static unsigned int gdmp_dataframe_size = 0;
+
+void GDMP_DECLSPEC GDMP_STDCALL
+set_gdmp_matplot_object(void *ptr) {
+ _gdmp_matplot_object = ptr;
+}
+
+void GDMP_DECLSPEC GDMP_STDCALL
+set_gdmp_input_line(const char *line, size_t len) {
+ if (!len)
+ len = strlen(line);
+
+ if (gp_input_line_len < len)
+ extend_input_line();
+
+ strncpy(gp_input_line, line, MAX_LINE_LEN - 2);
+}
+
+void GDMP_DECLSPEC GDMP_STDCALL
+set_gdmp_dataframe(const double *df_ptr, unsigned int row_count, unsigned int col_count) {
+ gdmp_dataframe = df_ptr;
+ gdmp_dataframe_colum_count = col_count;
+ gdmp_dataframe_row_count = row_count;
+ gdmp_dataframe_current_line = -1;
+ gdmp_dataframe_current_index = 0;
+ gdmp_dataframe_size = row_count * col_count;
+}
+
+void reset_gdmp_dataframe() {
+ set_gdmp_dataframe(gdmp_dataframe, gdmp_dataframe_row_count, gdmp_dataframe_colum_count);
+}
+
+int seek_gdmp_dataframe(int dl) {
+ gdmp_dataframe_current_line += dl;
+ gdmp_dataframe_current_index = gdmp_dataframe_current_line * gdmp_dataframe_colum_count;
+
+ return gdmp_dataframe_current_line;
+}
+
+int get_gdmp_dataframe_column_count() {
+ if (gdmp_dataframe_colum_count > MAXDATACOLS)
+ return MAXDATACOLS;
+
+ return gdmp_dataframe_colum_count;
+}
+
+const double *get_gdmp_dataframe_column(int col) {
+ if (gdmp_dataframe_current_index + col >= gdmp_dataframe_size)
+ return NULL;
+
+ if (col > gdmp_dataframe_colum_count)
+ return NULL;
+
+ return &gdmp_dataframe[gdmp_dataframe_current_index+col];
+}
+#endif
diff --git a/src/command.h b/src/command.h
index 6ae3d7141..028ecacac 100644
--- a/src/command.h
+++ b/src/command.h
@@ -215,5 +215,5 @@ int do_system_func(const char *cmd, char **output);
void os2_ipc_setup(void);
int os2_ipc_waitforinput(int mode);
#endif
-
+#include "gdmp_disable_io.h"
#endif /* GNUPLOT_COMMAND_H */
diff --git a/src/complexfun.h b/src/complexfun.h
index d24cd5e07..67f2b49e3 100644
--- a/src/complexfun.h
+++ b/src/complexfun.h
@@ -12,3 +12,5 @@ void f_zeta(union argument *arg);
double igamma(double a, double z);
#endif
+
+#include "gdmp_disable_io.h"
diff --git a/src/contour.h b/src/contour.h
index 9ac86ce7d..b97ba41f4 100644
--- a/src/contour.h
+++ b/src/contour.h
@@ -88,5 +88,5 @@ extern dynarray dyn_contour_levels_list;
struct gnuplot_contours *contour(int num_isolines, struct iso_curve *iso_lines);
-
+#include "gdmp_disable_io.h"
#endif /* GNUPLOT_CONTOUR_H */
diff --git a/src/datablock.h b/src/datablock.h
index 23da7e609..3530bd9f5 100644
--- a/src/datablock.h
+++ b/src/datablock.h
@@ -28,5 +28,5 @@ extern int evaluate_inside_functionblock;
#define evaluate_inside_functionblock FALSE
#endif /* USE_FUNCTIONBLOCKS */
-
+#include "gdmp_disable_io.h"
#endif /* GNUPLOT_DATABLOCK_H */
diff --git a/src/datafile.c b/src/datafile.c
index e0c960161..ceacbd40c 100644
--- a/src/datafile.c
+++ b/src/datafile.c
@@ -1480,6 +1480,7 @@ df_open(const char *cmd_filename, int max_using, struct curve_points *plot)
}
#endif /* HAVE_SYS_STAT_H */
+#ifndef GDMP_BUILD
if ((data_fp = loadpath_fopen(df_filename, df_binary_file ? "rb" : "r")) == NULL) {
char *errmsg = gp_alloc(32 + strlen(df_filename), "errmsg");
sprintf(errmsg, "Cannot find or open file \"%s\"", df_filename);
@@ -1490,6 +1491,9 @@ df_open(const char *cmd_filename, int max_using, struct curve_points *plot)
df_eof = 1;
return DF_EOF;
}
+#else
+ data_fp = (FILE *) 1u;
+#endif
}
/*}}} */
@@ -1538,12 +1542,20 @@ df_open(const char *cmd_filename, int max_using, struct curve_points *plot)
/*}}} */
+#ifdef GDMP_BUILD
+extern void reset_gdmp_dataframe();
+#endif
+
/*{{{ void df_close() */
void
df_close()
{
int i;
+#ifdef GDMP_BUILD
+ reset_gdmp_dataframe();
+#endif
+
/* paranoid - mark $n and column(n) as invalid */
df_no_cols = 0;
@@ -1850,11 +1862,17 @@ plot_ticlabel_using(int axis)
df_no_tic_specs++;
}
+#ifdef GDMP_BUILD
+extern const double *get_gdmp_dataframe_column(int col);
+extern int get_gdmp_dataframe_column_count();
+extern int seek_gdmp_dataframe(int dl);
+#endif
/*{{{ int df_readline(v, max) */
int
df_readline(double v[], int max)
{
+#ifndef GDMP_BUILD
if (!data_fp && !df_pseudodata && !df_datablock && !df_array)
return DF_EOF;
@@ -1864,10 +1882,12 @@ df_readline(double v[], int max)
} else {
return df_readascii(v, max);
}
+#else
+ return df_readascii(v, max);
+#endif
}
/*}}} */
-
/* do the hard work... read lines from file,
* - use blanks to get index number
* - ignore lines outside range of indices required
@@ -1880,6 +1900,8 @@ df_readascii(double v[], int max)
char *s;
int return_value = DF_GOOD;
+ seek_gdmp_dataframe(1);
+
/* Some plot styles (e.g. PARALLELPLOT) must guarantee that every line
* of data will return some input value even if it is missing or bad.
* This flag will force the line to return NaN rather than being skipped.
@@ -1907,7 +1929,12 @@ df_readascii(double v[], int max)
return DF_EOF;
/*{{{ process line */
+#ifndef GDMP_BUILD
while ((s = df_gets()) != NULL) {
+#else
+ int dummy_index = 0;
+ while (dummy_index++ < 1) {
+#endif
TBOOLEAN line_okay = TRUE;
int output = 0; /* how many numbers written to v[] */
return_value = DF_GOOD;
@@ -1923,11 +1950,14 @@ df_readascii(double v[], int max)
/*{{{ check for blank lines, and reject by index/every */
/*{{{ skip leading spaces */
+#ifndef GDMP_BUILD
while (isspace((unsigned char) *s) && NOTSEP)
++s; /* will skip the \n too, to point at \0 */
+#endif
/*}}} */
/*{{{ skip comments */
+#ifndef GDMP_BUILD
if (is_comment(*s)) {
if (indexname) { /* Look for index name in comment */
while (is_comment(*s) || isspace((unsigned char)*s))
@@ -1937,16 +1967,20 @@ df_readascii(double v[], int max)
}
continue; /* ignore comments */
}
+#endif
/*}}} */
/*{{{ check EOF on mixed data */
+#ifndef GDMP_BUILD
if (mixed_data_fp && is_EOF(*s)) {
df_eof = 1; /* trap attempts to read past EOF */
return DF_EOF;
}
+#endif
/*}}} */
/*{{{ its a blank line - update counters and continue or return */
+#ifndef GDMP_BUILD
if (*s == 0) {
/* argh - this is complicated ! we need to
* ignore it if we haven't reached first index
@@ -2014,6 +2048,7 @@ df_readascii(double v[], int max)
return DF_FIRST_BLANK - (blank_count - 1);
}
+#endif
/*}}} */
/* get here => was not blank */
@@ -2052,6 +2087,7 @@ df_readascii(double v[], int max)
++df_datum;
+#ifndef GDMP_BUILD
if (df_format) {
/*{{{ do a sscanf */
int i;
@@ -2080,7 +2116,20 @@ df_readascii(double v[], int max)
/*}}} */
} else
df_tokenise(s);
-
+#else
+ int gdmp_col_count = get_gdmp_dataframe_column_count();
+ df_no_cols = 0;
+ if (gdmp_col_count > 0) {
+ expand_df_column(gdmp_col_count);
+ const double *gdmp_df_column = NULL;
+ while ((gdmp_df_column = get_gdmp_dataframe_column(df_no_cols)) && df_no_cols < gdmp_col_count) {
+ df_column[df_no_cols].datum = *gdmp_df_column;
+ df_column[df_no_cols++].good = DF_GOOD;
+ }
+ }
+ if (df_no_cols == 0)
+ df_no_cols = EOF;
+#endif
/* df_tokenise already processed everything, but in the case of pseudodata
* '+' or '++' the value itself was passed as an ascii string formatted by
* "%g". We can do better than this by substituting in the binary value.
diff --git a/src/datafile.h b/src/datafile.h
index 0e662d23b..9bd398fad 100644
--- a/src/datafile.h
+++ b/src/datafile.h
@@ -310,5 +310,5 @@ int df_get_num_matrix_cols(void);
void df_set_plot_mode(int);
void populate_sparse_matrix(struct coordinate **points, int *p_count);
-
+#include "gdmp_disable_io.h"
#endif /* GNUPLOT_DATAFILE_H */
diff --git a/src/dynarray.h b/src/dynarray.h
index 9b83cc37b..732ee6104 100644
--- a/src/dynarray.h
+++ b/src/dynarray.h
@@ -51,5 +51,5 @@ void extend_dynarray(dynarray * array, long increment);
void resize_dynarray(dynarray * array, long newsize);
void *nextfrom_dynarray(dynarray * array);
void droplast_dynarray(dynarray * array);
-
+#include "gdmp_disable_io.h"
#endif /* DYNARRAY_H */
diff --git a/src/encoding.h b/src/encoding.h
index 443947ce5..4e5888ab4 100644
--- a/src/encoding.h
+++ b/src/encoding.h
@@ -64,4 +64,5 @@ size_t strlen_sjis(const char *s);
utf8str += 1; \
} while (0)
+#include "gdmp_disable_io.h"
#endif
diff --git a/src/eval.h b/src/eval.h
index 99d902495..4f7570d55 100644
--- a/src/eval.h
+++ b/src/eval.h
@@ -201,4 +201,5 @@ int gp_words(char *string);
#define free_at(at_ptr) \
do { real_free_at(at_ptr); at_ptr = NULL; } while (0)
+#include "gdmp_disable_io.h"
#endif /* GNUPLOT_EVAL_H */
diff --git a/src/external.h b/src/external.h
index fff62838f..db7e40401 100644
--- a/src/external.h
+++ b/src/external.h
@@ -127,5 +127,5 @@ __inline__ static DLL_SYM(gp_dll_t dl, const char *sym)
#endif /* No DLL */
#endif /* HAVE_EXTERNAL_FUNCTIONS */
-
+#include "gdmp_disable_io.h"
#endif /* GNUPLOT_EXTERNAL_H */
diff --git a/src/filters.h b/src/filters.h
index 39cb5a2c6..cf9eab597 100644
--- a/src/filters.h
+++ b/src/filters.h
@@ -45,5 +45,5 @@ extern double chi_shape_default_fraction; /* This is fraction of longest edge */
#else
#define reset_hulls(foo) /* NOOP */
#endif /* WITH_CHI_SHAPES */
-
+#include "gdmp_disable_io.h"
#endif /* GNUPLOT_FILTERS_H */
diff --git a/src/fit.c b/src/fit.c
index 3e90768dc..a2dfdb2de 100644
--- a/src/fit.c
+++ b/src/fit.c
@@ -108,6 +108,10 @@
#include "util.h"
#include <signal.h>
+#ifdef GDMP_BUILD
+#undef _WIN32
+#endif
+
/* Just temporary */
#if defined(VA_START) && defined(STDC_HEADERS)
static void Dblfn(const char *fmt, ...);
diff --git a/src/fit.h b/src/fit.h
index 470d30f32..219aaca86 100644
--- a/src/fit.h
+++ b/src/fit.h
@@ -83,9 +83,9 @@ extern char *last_fit_command;
/* Prototypes of functions exported by fit.c */
-#if defined(__GNUC__)
+#if defined(__GNUC__) && !defined(GDMP_BUILD)
void error_ex(int t_num, const char *str, ...) __attribute__((noreturn));
-#elif defined(_MSC_VER)
+#elif defined(_MSC_VER) && !defined(GDMP_BUILD)
__declspec(noreturn) void error_ex(int t_num, const char *str, ...);
#else
void error_ex(int t_num, const char *str, ...);
@@ -100,5 +100,5 @@ const char *getfitscript(void);
void call_gnuplot(const double *par, double *data);
TBOOLEAN regress_check_stop(int iter, double chisq, double last_chisq, double lambda);
void fit_progress(int i, double chisq, double last_chisq, double* a, double lambda, FILE *device);
-
+#include "gdmp_disable_io.h"
#endif /* GNUPLOT_FIT_H */
diff --git a/src/gadgets.h b/src/gadgets.h
index 441d1bbcb..22070262d 100644
--- a/src/gadgets.h
+++ b/src/gadgets.h
@@ -715,5 +715,5 @@ extern struct iso_curve *mask_2Dpolygon_set;
extern struct iso_curve *mask_3Dpolygon_set;
extern void construct_2D_mask_set(struct coordinate *points, int p_count);
extern TBOOLEAN masked(double x, double y, struct iso_curve *mask_polygon_set);
-
+#include "gdmp_disable_io.h"
#endif /* GNUPLOT_GADGETS_H */
diff --git a/src/gdmp_disable_io.h b/src/gdmp_disable_io.h
new file mode 100644
index 000000000..2341834c0
--- /dev/null
+++ b/src/gdmp_disable_io.h
@@ -0,0 +1,89 @@
+#ifndef GDMP_DISABLE_IO_H
+#define GDMP_DISABLE_IO_H
+
+#ifdef GDMP_DISABLE_IO
+#undef fclose
+#undef fdopen
+#undef feof
+#undef ferror
+#undef fflush
+#undef fgetc
+#undef fgetpos
+#undef fgets
+#undef fileno
+#undef fopen
+#undef fprintf
+#undef fpurge
+#undef fputc
+#undef fputs
+#undef fread
+#undef freopen
+#undef fscanf
+#undef fseek
+#undef fsetpos
+#undef ftell
+#undef fwrite
+#undef getc
+#undef getchar
+#undef gets
+#undef getw
+#undef perror
+#undef printf
+#undef putc
+#undef putchar
+#undef puts
+#undef putw
+#undef remove
+#undef rewind
+#undef scanf
+#undef vfprintf
+#undef vfscanf
+
+#define fclose(...) (0)
+#define fdopen(...) (0)
+#define feof(...) (0)
+#define ferror(...) (0)
+#define fflush(...) (0)
+#define fgetc(...) (0)
+#define fgetpos(...) (0)
+#define fgets(...) (0)
+#define fileno(...) (0)
+#define fopen(...) (0)
+#define fprintf(...) (0)
+#define fpurge(...) (0)
+#define fputc(...) (0)
+#define fputs(...) (0)
+#define fread(...) (0)
+#define freopen(...) (0)
+#define fscanf(...) (0)
+#define fseek(...) (0)
+#define fsetpos(...) (0)
+#define ftell(...) (0)
+#define fwrite(...) (0)
+#define getc(...) (0)
+#define getchar(...) (0)
+#define gets(...) (0)
+#define getw(...) (0)
+#define perror(...) (0)
+#define printf(...) (0)
+#define putc(...) (0)
+#define putchar(...) (0)
+#define puts(...) (0)
+#define putw(...) (0)
+#define remove(...) (0)
+#define rewind(...) (0)
+#define scanf(...) (0)
+#define vfprintf(...) (0)
+#define vfscanf(...) (0)
+
+#endif // GDMP_DISABLE_IO
+
+#ifdef _WIN32
+#define GDMP_DECLSPEC __declspec(dllexport)
+#define GDMP_STDCALL __stdcall
+#else
+#define GDMP_DECLSPEC
+#define GDMP_STDCALL
+#endif
+
+#endif // GDMP_DISABLE_IO_H
diff --git a/src/getcolor.h b/src/getcolor.h
index 85dad4e94..389e38a19 100644
--- a/src/getcolor.h
+++ b/src/getcolor.h
@@ -56,7 +56,7 @@ extern const char *ps_math_color_formulae[];
/* use gray value to find index of corresponding segment in discrete gradient palette */
int index_from_gray (double gray);
-
+#include "gdmp_disable_io.h"
#endif /* GETCOLOR_H */
/* eof getcolor.h */
diff --git a/src/gp_hist.h b/src/gp_hist.h
index dc6b3d616..7bd790013 100644
--- a/src/gp_hist.h
+++ b/src/gp_hist.h
@@ -102,5 +102,5 @@ const char *history_find_by_number(int);
int history_find_all(char *);
#endif
-
+#include "gdmp_disable_io.h"
#endif /* GNUPLOT_HISTORY_H */
diff --git a/src/gp_time.h b/src/gp_time.h
index e7a0adec3..247883782 100644
--- a/src/gp_time.h
+++ b/src/gp_time.h
@@ -92,5 +92,5 @@ int ggmtime(struct tm *, double);
int tmweek(double, int);
/* ISO 8601 or CDC/MMWE week date -> time in seconds */
double weekdate( int year, int week, int day, int standard );
-
+#include "gdmp_disable_io.h"
#endif /* GNUPLOT_GP_TIME_H */
diff --git a/src/gpexecute.h b/src/gpexecute.h
index 1f28309fe..eb7d2688f 100644
--- a/src/gpexecute.h
+++ b/src/gpexecute.h
@@ -80,5 +80,5 @@ extern int buffered_output_pending;
void gp_exec_event(char type, int mx, int my, int par1, int par2, int winid);
-
+#include "gdmp_disable_io.h"
#endif /* GPEXECUTE_H */
diff --git a/src/gplocale.c b/src/gplocale.c
index 27fb9ae45..9a2e6e4c4 100644
--- a/src/gplocale.c
+++ b/src/gplocale.c
@@ -38,6 +38,10 @@
#include "term_api.h"
#include "util.h"
+#ifdef GDMP_BUILD
+#include "alloc.h"
+#endif
+
/* Day and month names controlled by 'set locale'.
* These used to be defined in national.h but internationalization via locale
* is now a bit more common than it was last century.
diff --git a/src/graph3d.h b/src/graph3d.h
index 1032727a1..21ab3fca3 100644
--- a/src/graph3d.h
+++ b/src/graph3d.h
@@ -201,5 +201,5 @@ void map3d_position_double(struct position *pos, double *x, double *y, const cha
void map3d_position_r(struct position *pos, int *x, int *y, const char *what);
void map3d_position_r_double(struct position *pos, double *x, double *y, const char *what);
-
+#include "gdmp_disable_io.h"
#endif /* GNUPLOT_GRAPH3D_H */
diff --git a/src/graphics.h b/src/graphics.h
index f81bb6c9f..862603841 100644
--- a/src/graphics.h
+++ b/src/graphics.h
@@ -131,5 +131,5 @@ void place_pixmaps(int layer, int dimensions);
int filter_boxplot(struct curve_points *);
void attach_title_to_plot(struct curve_points *this_plot, legend_key *key);
-
+#include "gdmp_disable_io.h"
#endif /* GNUPLOT_GRAPHICS_H */