[BACK]Return to Gnuplot.h CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / pari / src / graph

Annotation of OpenXM_contrib/pari/src/graph/Gnuplot.h, Revision 1.1.1.1

1.1       maekawa     1: /* This header should be included in one C file only! */
                      2:
                      3: #include <stdio.h>
                      4: #include <stdlib.h>
                      5: #include <setjmp.h>
                      6:
                      7: #ifdef __cplusplus
                      8:   extern "C" {
                      9: #endif
                     10:
                     11: /* CAT2:
                     12:  *      This macro catenates 2 tokens together.
                     13:  */
                     14: /* STRINGIFY:
                     15:  *      This macro surrounds its token with double quotes.
                     16:  */
                     17: #ifndef CAT2
                     18: # if 42 == 1
                     19: #  define CAT2(a,b)a/**/b
                     20: #  define CAT3(a,b,c)a/**/b/**/c
                     21: #  define CAT4(a,b,c,d)a/**/b/**/c/**/d
                     22: #  define CAT5(a,b,c,d,e)a/**/b/**/c/**/d/**/e
                     23: #  define STRINGIFY(a)"a"
                     24:                 /* If you can get stringification with catify, tell me how! */
                     25: # endif
                     26: # if 42 == 42
                     27: #  define CAT2(a,b)a ## b
                     28: #  define CAT3(a,b,c)a ## b ## c
                     29: #  define CAT4(a,b,c,d)a ## b ## c ## d
                     30: #  define CAT5(a,b,c,d,e)a ## b ## c ## d ## e
                     31: #  define StGiFy(a)# a
                     32: #  define STRINGIFY(a)StGiFy(a)
                     33: #  define SCAT2(a,b)StGiFy(a) StGiFy(b)
                     34: #  define SCAT3(a,b,c)StGiFy(a) StGiFy(b) StGiFy(c)
                     35: #  define SCAT4(a,b,c,d)StGiFy(a) StGiFy(b) StGiFy(c) StGiFy(d)
                     36: #  define SCAT5(a,b,c,d,e)StGiFy(a) StGiFy(b) StGiFy(c) StGiFy(d) StGiFy(e)
                     37: # endif
                     38: # ifndef CAT2
                     39: #   include "Bletch: How does this C preprocessor catenate tokens?"
                     40: # endif
                     41: #endif /* CAT2 */
                     42:
                     43:
                     44: #define TERM_CAN_MULTIPLOT    1  /* tested if stdout not redirected */
                     45: #define TERM_CANNOT_MULTIPLOT 2  /* tested if stdout is redirected  */
                     46: #define TERM_BINARY           4  /* open output file with "b"       */
                     47:
                     48: #ifndef NO_JUNK_SMALL
                     49:
                     50: /* Compatibility with the old gnuplot: */
                     51: extern  FILE *outfile;
                     52: FILE *outfile = NULL;
                     53:
                     54: extern  FILE *gpoutfile;
                     55: FILE *gpoutfile = NULL;
                     56:
                     57: static outfile_set;
                     58: static void
                     59: set_gpoutfile(void)
                     60: {
                     61:   outfile = stdout;
                     62:   gpoutfile = stdout;
                     63: }
                     64:
                     65: #define SET_OUTFILE (outfile_set++ ? 1 : (set_gpoutfile(), 1))
                     66:
                     67: extern int encoding;
                     68: int        encoding = 0;
                     69: extern float                   xoffset;  /* x origin */
                     70: extern float                   yoffset;  /* y origin */
                     71: float                   xoffset = 0.0;  /* x origin */
                     72: float                   yoffset = 0.0;  /* y origin */
                     73: extern int             multiplot;
                     74: int            multiplot               = 0;
                     75:
                     76: extern char *outstr;
                     77: #define MAX_ID_LEN 50
                     78: /* char        outstr[MAX_ID_LEN+1] = "STDOUT"; */
                     79: char        *outstr = NULL;
                     80: extern double ticscale; /* scale factor for tic marks (was (0..1])*/
                     81: double        ticscale = 1.0; /* scale factor for tic mark */
                     82:
                     83: char *input_line = NULL;
                     84: int inline_num;          /* from command.c */
                     85:
                     86: float xsize=1.0, ysize=1.0;
                     87: double pointsize=1.0;          /* During test! */
                     88:
                     89: int interactive;    /* from plot.c */
                     90: char *infile_name;       /* from plot.c */
                     91: extern char     default_font[];
                     92: char            default_font[MAX_ID_LEN+1] = "\0"; /* Entry added by DJL */
                     93:
                     94: typedef int TBOOLEAN;
                     95:
                     96: enum DATA_TYPES {
                     97:        INTGR, CMPLX
                     98: };
                     99:
                    100: #if !(defined(ATARI)&&defined(__GNUC__)&&defined(_MATH_H)) &&  !(defined(MTOS)&&defined(__GNUC__)&&defined(_MATH_H)) /* FF's math.h has the type already */
                    101: struct cmplx {
                    102:        double real, imag;
                    103: };
                    104: #endif
                    105:
                    106: struct value {
                    107:        enum DATA_TYPES type;
                    108:        union {
                    109:                int int_val;
                    110:                struct cmplx cmplx_val;
                    111:        } v;
                    112: };
                    113:
                    114: struct lexical_unit {  /* produced by scanner */
                    115:        TBOOLEAN is_token;      /* true if token, false if a value */
                    116:        struct value l_val;
                    117:        int start_index;        /* index of first char in token */
                    118:        int length;                     /* length of token in chars */
                    119: };
                    120:
                    121: /* char *token; */
                    122: #define MAX_TOKENS 20
                    123: extern struct lexical_unit *token;
                    124: struct lexical_unit tokens[MAX_TOKENS];        /* We only process options,
                    125:                                           there should not be many */
                    126: struct lexical_unit *token = tokens;
                    127: long c_token = 0, num_tokens = 0;
                    128: char term_options[200] = "";
                    129:
                    130: /* Here are the only missing functions: */
                    131:
                    132: struct value*
                    133: const_express(struct value*v)
                    134: {
                    135:     if (token[c_token].is_token)
                    136:        croak("Expect a number, got a string");
                    137:     *v = token[c_token++].l_val;
                    138:     return v;
                    139: }
                    140:
                    141: void*
                    142: gp_alloc(unsigned long size, char *usage)
                    143: {
                    144:   return malloc(size);
                    145: }
                    146:
                    147: void*
                    148: gp_realloc(void *old, unsigned long size, char *usage)
                    149: {
                    150:   return realloc(old,size);
                    151: }
                    152:
                    153: void
                    154: bail_to_command_line()
                    155: {
                    156:   croak("panic: gnuplot");
                    157: }
                    158:
                    159: #endif /* NO_JUNK_SMALL */
                    160:
                    161: /* Cannot pull the whole plot.h, too many contradictions. */
                    162:
                    163: #ifdef __ZTC__
                    164: typedef int (*FUNC_PTR)(...);
                    165: #else
                    166: typedef int (*FUNC_PTR)();
                    167: #endif
                    168:
                    169: struct TERMENTRY {
                    170:         char *name;
                    171: #if defined(_Windows) && !defined(WIN32)
                    172:         char GPFAR description[80];     /* to make text go in FAR segment */
                    173: #else
                    174:         char *description;
                    175: #endif
                    176:         unsigned int xmax,ymax,v_char,h_char,v_tic,h_tic;
                    177:         FUNC_PTR options,init,reset,text,scale,graphics,move,vector,linetype,
                    178:                 put_text,text_angle,justify_text,point,arrow,set_font,
                    179:                pointsize;
                    180:        int flags;
                    181:         FUNC_PTR suspend,resume,fillbox,linewidth;
                    182: };
                    183:
                    184: #ifdef _Windows
                    185: #  define termentry TERMENTRY far
                    186: #else
                    187: #  define termentry TERMENTRY
                    188: #endif
                    189:
                    190: extern struct termentry *term;
                    191: struct termentry *term;
                    192:
                    193: #define RETVOID
                    194: #define RETINT , 1
                    195:
                    196: #define F_0 void(*)()
                    197: #define F_1 void(*)(int)
                    198: #define F_1I int(*)(int)
                    199: #define F_1D void(*)(double)
                    200: #define F_1IP int(*)(char*)
                    201: #define F_2 void(*)(unsigned int,unsigned int)
                    202: #define F_2D int(*)(double,double)
                    203: #define F_3 void(*)(unsigned int,unsigned int,int)
                    204: #define F_3T void(*)(int,int,char*)
                    205: #define F_4 void(*)(int,int,int,int)
                    206: #define F_5 void(*)(int,int,int,int,int)
                    207:
                    208: #define CALL_G_METH0(method) CALL_G_METH(method,0,(),RETVOID)
                    209: #define CALL_G_METH1(method,arg1) CALL_G_METH(method,1,(arg1),RETVOID)
                    210: #define CALL_G_METH1I(method,arg1) CALL_G_METH(method,1I,(arg1),RETINT)
                    211: #define CALL_G_METH1D(method,arg1) CALL_G_METH(method,1D,(arg1),RETVOID)
                    212: #define CALL_G_METH1IP(method,arg1) CALL_G_METH(method,1IP,(arg1),RETINT)
                    213: #define CALL_G_METH2(method,arg1,arg2) \
                    214:                CALL_G_METH(method,2,((arg1),(arg2)),RETVOID)
                    215: #define CALL_G_METH2D(method,arg1,arg2) \
                    216:                CALL_G_METH(method,2D,((arg1),(arg2)),RETINT)
                    217: #define CALL_G_METH3(method,arg1,arg2,arg3) \
                    218:                CALL_G_METH(method,3,((arg1),(arg2),(arg3)),RETVOID)
                    219: #define CALL_G_METH3T(method,arg1,arg2,arg3) \
                    220:                CALL_G_METH(method,3T,((arg1),(arg2),(arg3)),RETVOID)
                    221: #define CALL_G_METH4(method,arg1,arg2,arg3,arg4) \
                    222:                CALL_G_METH(method,4,((arg1),(arg2),(arg3),(arg4)),RETVOID)
                    223: #define CALL_G_METH5(method,arg1,arg2,arg3,arg4,arg5) \
                    224:                CALL_G_METH(method,5,((arg1),(arg2),(arg3),(arg4),(arg5)),RETVOID)
                    225:
                    226: #define CALL_G_METH(method,mult,args,returnval)    (           \
                    227:        (term==0) ? (                                           \
                    228:         croak("No terminal specified") returnval               \
                    229:        ) :                                                     \
                    230:        (*(CAT2(F_,mult))term->method)args              \
                    231:      )
                    232:
                    233: #define GET_G_FLAG(mask)    (          \
                    234:        (term==0) ? (                                           \
                    235:         croak("No terminal specified") RETINT          \
                    236:        ) :                                                     \
                    237:        (term->flags & (mask)))
                    238:
                    239: #ifdef DONT_POLLUTE_INIT
                    240: #  define gptable_init()       CALL_G_METH0(init)
                    241: #else
                    242: #  define init()               CALL_G_METH0(init)
                    243: #  define gptable_init         init
                    244: #endif
                    245: #define reset()                CALL_G_METH0(reset)
                    246: #define text()         CALL_G_METH0(text)
                    247: #define options()      CALL_G_METH0(options)
                    248: #define graphics()     CALL_G_METH0(graphics)
                    249: #define linetype(lt)   CALL_G_METH1(linetype,lt)
                    250: #define justify_text(mode)     CALL_G_METH1I(justify_text,mode)
                    251: #define text_angle(ang)        CALL_G_METH1I(text_angle,ang)
                    252: #define scale(xs,ys)   CALL_G_METH2D(scale,xs,ys)
                    253: #define move(x,y)      CALL_G_METH2(move,x,y)
                    254: #define vector(x,y)    CALL_G_METH2(vector,x,y)
                    255: #define put_text(x,y,str)      CALL_G_METH3T(put_text,x,y,str)
                    256: #define point(x,y,p)   CALL_G_METH3(point,x,y,p)
                    257: #define arrow(sx,sy,ex,ey,head)        CALL_G_METH5(arrow,sx,sy,ex,ey,head)
                    258: #define set_font(font) CALL_G_METH1IP(set_font,font)
                    259: #define setpointsize(size)     CALL_G_METH1D(pointsize,size)
                    260: #define suspend()      CALL_G_METH0(suspend)
                    261: #define resume()       CALL_G_METH0(resume)
                    262: #define fillbox(sx,sy,ex,ey,head)      CALL_G_METH5(fillbox,sx,sy,ex,ey,head)
                    263: #define linewidth(size)        CALL_G_METH1D(linewidth,size)
                    264: #define can_multiplot()        GET_G_FLAG(TERM_CAN_MULTIPLOT)
                    265: #define cannot_multiplot()     GET_G_FLAG(TERM_CANNOT_MULTIPLOT)
                    266: #define is_binary()    GET_G_FLAG(TERM_BINARY)
                    267:
                    268: #define termprop(prop) (term->prop)
                    269: #define termset(term) my_change_term(term,strlen(term))
                    270:
                    271: struct termentry * change_term(char*,int);
                    272:
                    273: #define TTABLE_STARTPLOT       0
                    274: #define TTABLE_ENDPLOT         1
                    275: #define TTABLE_STARTMPLOT      2
                    276: #define TTABLE_ENDMPLOT                3
                    277: #define TTABLE_INIT            4
                    278: #define TTABLE_LIST            5
                    279: #define TTABLE_COUNT           6
                    280:
                    281: typedef void (*TSET_FP)(char *s);
                    282: typedef void (*TST_END_FP)(void);
                    283: typedef void (*SET_SIZES_t)(double x, double y);
                    284: typedef double (*GET_SIZES_t)(int flag);
                    285:
                    286: struct t_ftable {
                    287:   int loaded;
                    288:   FUNC_PTR change_term_p;
                    289:   TSET_FP term_set_outputp;
                    290:   SET_SIZES_t set_sizesp;
                    291:   GET_SIZES_t get_sizesp;
                    292:   TST_END_FP term_funcs[TTABLE_COUNT];
                    293: };
                    294:
                    295: #ifdef DYNAMIC_PLOTTING                        /* Can load plotting DLL later */
                    296:
                    297: UNKNOWN_null()
                    298: {
                    299:     croak("gnuplot-like plotting environment not loaded yet");
                    300: }
                    301:
                    302: static void myterm_table_not_loaded_v(void);
                    303: static void myterm_table_not_loaded(char*);
                    304: static int myterm_table_not_loaded_u();
                    305: static void myterm_table_not_loaded_vdd(double x, double y);
                    306: static double myterm_table_not_loaded_di(int flag);
                    307:
                    308: #if 0
                    309: static int ftable_warned;
                    310: static void
                    311: tmp_my_term_init
                    312: {
                    313:   if (!warned++)
                    314:      warn("This runtime link with gnuplot-shim does not implement midlevel start/end functions");
                    315:   shim_myinit();
                    316: }
                    317: #endif
                    318:
                    319: static struct t_ftable my_term_ftable =
                    320: {
                    321:        0, &myterm_table_not_loaded_u, &myterm_table_not_loaded,
                    322:        &myterm_table_not_loaded_vdd,
                    323:        &myterm_table_not_loaded_di,
                    324:        {&myterm_table_not_loaded_v, &myterm_table_not_loaded_v,
                    325:         &myterm_table_not_loaded_v, &myterm_table_not_loaded_v,
                    326:         &myterm_table_not_loaded_v, &myterm_table_not_loaded_v}
                    327: };
                    328:
                    329: static struct t_ftable *my_term_ftablep = &my_term_ftable;
                    330:
                    331: static void
                    332: myterm_table_not_loaded_v(void)
                    333: {
                    334:     if (!my_term_ftablep->loaded) {
                    335:         UNKNOWN_null();
                    336:        return;
                    337:     }
                    338:     croak("This runtime link with gnuplot-shim does not implement midlevel start/end functions");
                    339: }
                    340:
                    341: static void
                    342: myterm_table_not_loaded(char *s)
                    343: {
                    344:   myterm_table_not_loaded_v();
                    345: }
                    346:
                    347: static void
                    348: myterm_table_not_loaded_vdd(double x, double y)
                    349: {
                    350:   myterm_table_not_loaded_v();
                    351: }
                    352:
                    353: static double
                    354: myterm_table_not_loaded_di(int flag)
                    355: {
                    356:   myterm_table_not_loaded_v();
                    357: }
                    358:
                    359: static int
                    360: myterm_table_not_loaded_u()
                    361: {
                    362:   myterm_table_not_loaded_v();
                    363:   return 0;
                    364: }
                    365:
                    366: #  define change_term          (*my_term_ftablep->change_term_p)
                    367: #  define term_set_output      (*my_term_ftablep->term_set_outputp)
                    368: #  define term_start_plot      (*my_term_ftablep->term_funcs[TTABLE_STARTPLOT])
                    369: #  define term_end_plot        (*my_term_ftablep->term_funcs[TTABLE_ENDPLOT])
                    370: #  define term_start_multiplot (*my_term_ftablep->term_funcs[TTABLE_STARTMPLOT])
                    371: #  define term_end_multiplot   (*my_term_ftablep->term_funcs[TTABLE_ENDMPLOT])
                    372: #  define term_init            (*my_term_ftablep->term_funcs[TTABLE_INIT])
                    373: #  define list_terms           (*my_term_ftablep->term_funcs[TTABLE_LIST])
                    374: #  define plotsizes_scale      (*my_term_ftablep->set_sizesp)
                    375: #  define plotsizes_scale_get  (*my_term_ftablep->get_sizesp)
                    376:
                    377: #  define scaled_xmax()        ((int)termprop(xmax)*plotsizes_scale_get(0))
                    378: #  define scaled_ymax()        ((int)termprop(ymax)*plotsizes_scale_get(1))
                    379:
                    380: #define USE_FUNCTION_FROM_TABLE
                    381:
                    382: static struct termentry *
                    383: my_change_term(char*s,int l)
                    384: {
                    385:     SET_OUTFILE;
                    386:     if (!my_term_ftablep->change_term_p)
                    387:        UNKNOWN_null();
                    388:     return term = (struct termentry *)(*my_term_ftablep->change_term_p)(s,l);
                    389: }
                    390:
                    391: static struct termentry dummy_term_tbl[] = {
                    392:     {"unknown", "Unknown terminal type - not a plotting device",
                    393:          100, 100, 1, 1,
                    394:          1, 1, UNKNOWN_null, UNKNOWN_null, UNKNOWN_null,
                    395:          UNKNOWN_null, UNKNOWN_null, UNKNOWN_null, UNKNOWN_null, UNKNOWN_null,
                    396:          UNKNOWN_null, UNKNOWN_null, UNKNOWN_null,
                    397:      UNKNOWN_null, UNKNOWN_null, UNKNOWN_null, UNKNOWN_null, UNKNOWN_null, 0,
                    398:          UNKNOWN_null, UNKNOWN_null, UNKNOWN_null, UNKNOWN_null},
                    399: };
                    400:
                    401: #define set_term_funcp(change_p, term_p) set_term_funcp2((change_p), 0)
                    402: /* #define set_term_funcp3(change_p, term_p, tchange) \
                    403:                        set_term_funcp2((change_p), (tchange)) */
                    404:
                    405: /* This function should be called before any graphic code can be used... */
                    406: void
                    407: set_term_funcp2(FUNC_PTR change_p, TSET_FP tchange)
                    408: {
                    409:     SET_OUTFILE;
                    410:     my_term_ftable.change_term_p = change_p;
                    411:     my_term_ftable.loaded = 1;
                    412:     if (tchange) {
                    413:        my_term_ftable.term_set_outputp = tchange;
                    414:     }
                    415: }
                    416:
                    417: /* Used from Math::Pari */
                    418: void
                    419: set_term_funcp3(FUNC_PTR change_p, void *term_p, TSET_FP tchange)
                    420: {
                    421:   set_term_funcp2(change_p, tchange);
                    422: }
                    423:
                    424: void
                    425: set_term_ftable(struct t_ftable *p)
                    426: {
                    427:   SET_OUTFILE;
                    428:   my_term_ftablep = p;
                    429: }
                    430:
                    431: #else /* !DYNAMIC_PLOTTING */
                    432:
                    433: extern struct termentry term_tbl[];
                    434:
                    435: #  define my_change_term       change_term
                    436: #  define my_term_tbl          term_tbl
                    437:
                    438: extern void term_set_output(char *s);
                    439: extern void term_start_plot(void);
                    440: extern void term_end_plot(void);
                    441: extern void term_start_multiplot(void);
                    442: extern void term_end_multiplot(void);
                    443: extern void term_init(void);
                    444: extern void list_terms(void);
                    445:
                    446: static void
                    447: plotsizes_scale(double x, double y)    { xsize=x; ysize=y; }
                    448:
                    449: static double
                    450: plotsizes_get(int flag)        { return (flag ? ysize : xsize); }
                    451:
                    452: struct t_ftable my_term_ftable =
                    453: {
                    454:        1, (FUNC_PTR)&change_term, &term_set_output,
                    455:        &plotsizes_scale, &plotsizes_get,
                    456:        {&term_start_plot, &term_end_plot,
                    457:         &term_start_multiplot, &term_end_multiplot, &term_init, &list_terms}
                    458: };
                    459:
                    460: struct t_ftable *get_term_ftable()     { SET_OUTFILE; return &my_term_ftable; }
                    461: void set_term_ftable() { SET_OUTFILE; }
                    462:
                    463:
                    464: void
                    465: set_term_funcp3(FUNC_PTR change_p, void *term_p, TSET_FP tchange)
                    466: {
                    467:     SET_OUTFILE;
                    468:     my_term_ftable.change_term_p = change_p;
                    469:     my_term_ftable.loaded = 1;
                    470:     if (tchange) {
                    471:        my_term_ftable.term_set_outputp = tchange;
                    472:     }
                    473: }
                    474:
                    475: #define scaled_xmax()  ((int)termprop(xmax)*xsize)
                    476: #define scaled_ymax()  ((int)termprop(ymax)*ysize)
                    477:
                    478: #endif /* !DYNAMIC_PLOTTING */
                    479:
                    480: #define int_get_term_ftable()  ((IV)get_term_ftable())
                    481: #define int_set_term_ftable(a) (v_set_term_ftable((void*)a))
                    482:
                    483: void
                    484: v_set_term_ftable(void *a) { set_term_ftable((struct t_ftable*)a); }
                    485:
                    486: void
                    487: setup_gpshim(void) { SET_OUTFILE; }
                    488:
                    489: #ifdef SET_OPTIONS_FROM_STRING
                    490: /* This sets the tokens for the options */
                    491: void
                    492: set_tokens_string(char *start)
                    493: {
                    494:     char *s = start;
                    495:     char *tstart;
                    496:     int is_real, is_integer, has_exp;
                    497:
                    498:     num_tokens = 0;
                    499:     while (num_tokens < MAX_TOKENS) {
                    500:        while (*s == ' ' || *s == '\t' || *s == '\n')
                    501:            s++;
                    502:        if (!*s)
                    503:            return;
                    504:        tstart = s;
                    505:        if (*s == ',') {
                    506:            s++;
                    507:            is_integer = is_real = 0;
                    508:            goto process;
                    509:        }
                    510:        is_integer = is_real = ((*s) != 0);
                    511:        if (*s == '+' || *s == '-')
                    512:            s++;
                    513:        has_exp = 0;
                    514:        while (*s && !(*s == ' ' || *s == '\t' || *s == '\n')) {
                    515:            if (!(*s <= '9' && *s >= '0')) {
                    516:                if (*s == '.') {
                    517:                    if (!is_integer)
                    518:                        is_real = 0;
                    519:                    else if (is_integer == 1 && !(s[1] <= '9' && s[1] >= '0'))
                    520:                        is_real = 0;
                    521:                } else if (*s == 'e' || *s == 'E') {
                    522:                    if (has_exp)
                    523:                        is_real = 0;
                    524:                    has_exp = 1;
                    525:                    if (s[1] == '+' || s[1] == '-')
                    526:                        s++;
                    527:                } else if (*s == ',' && (is_integer || is_real))
                    528:                    break;
                    529:                else
                    530:                    is_real = 0;
                    531:                is_integer = 0;
                    532:            } else if (is_integer)
                    533:                is_integer++;
                    534:            s++;
                    535:        }
                    536:       process:
                    537:        token[num_tokens].start_index = tstart - input_line;
                    538:        token[num_tokens].length = s - tstart;
                    539:        if (is_integer) {
                    540:            token[num_tokens].is_token = 0;
                    541:            token[num_tokens].l_val.type = INTGR;
                    542:            token[num_tokens].l_val.v.int_val = atoi(tstart);
                    543:        } else if (is_real) {
                    544:            token[num_tokens].is_token = 0;
                    545:            token[num_tokens].l_val.type = CMPLX;
                    546:            token[num_tokens].l_val.v.cmplx_val.real = atof(tstart);
                    547:            token[num_tokens].l_val.v.cmplx_val.imag = 0;
                    548:        } else {
                    549:            token[num_tokens].is_token = 1;
                    550:        }
                    551:        num_tokens++;
                    552:     }
                    553:     if (num_tokens >= MAX_TOKENS) {
                    554:        char buf[80];
                    555:        sprintf(buf, "panic: more than %d tokens for options", MAX_TOKENS);
                    556:        croak(buf);
                    557:     }
                    558: }
                    559:
                    560: void
                    561: set_options_from(char *s)
                    562: {
                    563:     char *o = input_line;
                    564:
                    565:     input_line = s;            /* for error reports */
                    566:     set_tokens_string(s);
                    567:     options();
                    568:     input_line = o;
                    569:     c_token = num_tokens = 0;
                    570: }
                    571: #endif
                    572:
                    573: #ifdef GNUPLOT_OUTLINE_STDOUT
                    574: int
                    575: StartOutput() {}
                    576:
                    577: int
                    578: EndOutput() {}
                    579:
                    580: int
                    581: OutLine(char *s)
                    582: {
                    583:    return fprintf(stdout, "%s", s);
                    584: }
                    585: #endif
                    586:
                    587: #ifdef __cplusplus
                    588:   }
                    589: #endif

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>