Annotation of capa/capa51/pProj/capaParser.h, revision 1.14

1.7       albertel    1: /* definitions of all parser constants/structs
                      2:    Copyright (C) 1992-2000 Michigan State University
                      3: 
                      4:    The CAPA system is free software; you can redistribute it and/or
1.9       albertel    5:    modify it under the terms of the GNU General Public License as
1.7       albertel    6:    published by the Free Software Foundation; either version 2 of the
                      7:    License, or (at your option) any later version.
                      8: 
                      9:    The CAPA system is distributed in the hope that it will be useful,
                     10:    but WITHOUT ANY WARRANTY; without even the implied warranty of
                     11:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
1.9       albertel   12:    General Public License for more details.
1.7       albertel   13: 
1.9       albertel   14:    You should have received a copy of the GNU General Public
1.7       albertel   15:    License along with the CAPA system; see the file COPYING.  If not,
                     16:    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
1.8       albertel   17:    Boston, MA 02111-1307, USA.
                     18: 
                     19:    As a special exception, you have permission to link this program
                     20:    with the TtH/TtM library and distribute executables, as long as you
                     21:    follow the requirements of the GNU GPL in regard to all of the
                     22:    software in the executable aside from TtH/TtM.
                     23: */
1.7       albertel   24: 
1.1       albertel   25: /* <==================================================================> */
                     26: /*  by Isaac Tsai @ 1994                                                */
                     27: 
                     28: #ifndef _CAPA_PARSER_H_
                     29: #define _CAPA_PARSER_H_
                     30: 
                     31: #include  <stdio.h>    /* for FILE *  */
                     32: #ifdef DMALLOC
                     33: #include <dmalloc.h>
                     34: #endif
                     35: #ifdef __STDC__   /* sun ansi cc compiler use this flag */
                     36: #define  CAPA_ARG(x)  x
                     37: #else
                     38: #define  CAPA_ARG(x)  ()
                     39: #endif
                     40: 
                     41: #define  CAPA_ERROR(xx)   {             }
                     42: #define  CAPA_WARNING(xx) {             }
                     43: #define  MESSAGE_WARN 1
                     44: #define  MESSAGE_ERROR 2
                     45: 
                     46: 
                     47: #ifdef   SYMBOL_DBUG
                     48: #define  SSDBUG_PR1(xx)        { printf(xx);       fflush(stdout); }
                     49: #define  SSDBUG_PR2(xx,yy)     { printf(xx,yy);    fflush(stdout); }
                     50: #define  SSDBUG_PR3(xx,yy,zz)  { printf(xx,yy,zz); fflush(stdout); }
                     51: #else
                     52: #define  SSDBUG_PR1(xx)        { }
                     53: #define  SSDBUG_PR2(xx,yy)     { }
                     54: #define  SSDBUG_PR3(xx,yy,zz)  { }
                     55: 
                     56: #endif
                     57: 
                     58: 
                     59: 
                     60: /* Some useful numbers */
                     61: 
1.2       albertel   62: /*#define  EIGHT                8*/
                     63: /*#define  SIXTEEN             16*/
1.1       albertel   64: /*#define  THIRTY_TWO          32*/
                     65: /*#define  SIXTY_FOUR          64*/
                     66: #define  ONE_TWO_EIGHT      128
                     67: #define  QUARTER_K          256
                     68: #define  HALF_K             512
                     69: #define  ONE_K             1024
                     70: #define  TWO_K             2048
                     71: #define  FOUR_K            4096
                     72: 
                     73: 
                     74: 
                     75: #define    ANSWER_STRING_LENG       81
                     76: #define  MAX_OPENED_FILE   4096    /* maximum number of files opened */
                     77: #define  MAX_SYMB_COUNT    4096    /* symbol table size    */
                     78: #define  MAX_FUNC_NAME      256    /* function name length */
                     79: #define  MAX_FUNC_NEST     1024    /* sin(cos(tan(...)))   */
                     80: /*#define  MAX_QTEXT_LEN     4096     overall question text in a set *NO LONGER NEEDED */
                     81: #define  WARN_MSG_LENGTH   1024    /* for warning messages */
1.14    ! albertel   82: #define  MAX_ASCII          256
1.1       albertel   83: 
                     84: #define  ASCII_MODE           1
                     85: #define  TeX_MODE             2
                     86: #define  HTML_MODE            3
                     87: #define  BUBBLE_MODE          4
                     88: 
                     89: #define  ANSWER_STRING_MODE   5   /* used in answers_string() */
                     90: 
                     91: 
                     92: /* parameters used in array_sorted_index() */
                     93: 
                     94: #define  ASCEND_SORT          1
                     95: #define  DESCEND_SORT         2
                     96: #define  NUMERICAL_SORT       3
                     97: 
                     98: 
                     99: 
                    100: typedef struct _symbol {
                    101:   char              *s_name;           /* IDENTIFIER or FUNCTION_ID  or ARRAY_ID name */
                    102:   int                s_type;
                    103:   int                s_array_cnt;
                    104:   int                s_argc;
                    105:   struct _argNode   *s_argp;
                    106:   struct _treeNode  *s_treep;
                    107:   struct _symbol    *s_nextp;
1.3       albertel  108:   struct _symbol    *s_prevp;
1.1       albertel  109:   struct _symbol    *s_arrayp;
                    110:   struct _pts_list  *s_ptslist;
                    111:   int                s_access_cnt;
                    112:   int                s_distype;
                    113:   char              *s_format;
                    114:   union {  char      *s_sval;
                    115:            long       s_ival;
                    116:            double     s_rval;
                    117:         } s_val;
                    118: } Symbol;
                    119: 
                    120: typedef Symbol *Symbol_p;
                    121: 
                    122: #define s_int   s_val.s_ival
                    123: #define s_real  s_val.s_rval
                    124: #define s_str   s_val.s_sval
                    125: 
                    126: #define  E_FORMAT             1
                    127: #define  F_FORMAT             3
                    128: #define  DEFAULT_FORMAT       9
                    129: 
                    130: typedef struct _argNode {
                    131:     Symbol          *a_sp;
                    132:     int              a_idx; 
                    133:     struct _argNode *a_next;
                    134:     struct _argNode *a_prev;
                    135:  } ArgNode_t;
                    136:  
1.4       albertel  137: #define   FIRST_SYMBOLP(aaa)      (aaa->a_sp)
1.1       albertel  138: #define   SECOND_SYMBOLP(aaa)   ( (aaa->a_next)->a_sp )
                    139: #define   THIRD_SYMBOLP(aaa)    ( ((aaa->a_next)->a_next)->a_sp )
1.4       albertel  140: #define   FOURTH_SYMBOLP(aaa)   ( (((aaa->a_next)->a_next)->a_next)->a_sp )
                    141: #define   FIFTH_SYMBOLP(aaa)    ( ((((aaa->a_next)->a_next)->a_next)->a_next)->a_sp )
1.10      albertel  142: #define   SIXTH_SYMBOLP(aaa)    ( (((((aaa->a_next)->a_next)->a_next)->a_next)->a_next)->a_sp )
1.1       albertel  143: #define   FIRST_ARGNAME(aaa)    ( FIRST_SYMBOLP(aaa)->s_name )
                    144: #define   FIRST_ARGTYPE(aaa)    ( FIRST_SYMBOLP(aaa)->s_type )
                    145: #define   FIRST_ARGINT(aaa)     ( FIRST_SYMBOLP(aaa)->s_int )
                    146: #define   FIRST_ARGREAL(aaa)    ( FIRST_SYMBOLP(aaa)->s_real )
                    147: #define   FIRST_ARGSTR(aaa)     ( FIRST_SYMBOLP(aaa)->s_str )
                    148: #define   SECOND_ARGNAME(aaa)   ( SECOND_SYMBOLP(aaa)->s_name )
                    149: #define   SECOND_ARGTYPE(aaa)   ( SECOND_SYMBOLP(aaa)->s_type)
                    150: #define   SECOND_ARGINT(aaa)    ( SECOND_SYMBOLP(aaa)->s_int)
                    151: #define   SECOND_ARGREAL(aaa)   ( SECOND_SYMBOLP(aaa)->s_real)
                    152: #define   SECOND_ARGSTR(aaa)    ( SECOND_SYMBOLP(aaa)->s_str)
1.4       albertel  153: #define   THIRD_ARGNAME(aaa)    ( THIRD_SYMBOLP(aaa)->s_name )
1.1       albertel  154: #define   THIRD_ARGTYPE(aaa)    ( THIRD_SYMBOLP(aaa)->s_type)
                    155: #define   THIRD_ARGINT(aaa)     ( THIRD_SYMBOLP(aaa)->s_int)
                    156: #define   THIRD_ARGREAL(aaa)    ( THIRD_SYMBOLP(aaa)->s_real)
                    157: #define   THIRD_ARGSTR(aaa)     ( THIRD_SYMBOLP(aaa)->s_str)
1.4       albertel  158: #define   FOURTH_ARGTYPE(aaa)   ( FOURTH_SYMBOLP(aaa)->s_type)
                    159: #define   FOURTH_ARGNAME(aaa)   ( FOURTH_SYMBOLP(aaa)->s_name )
                    160: #define   FOURTH_ARGINT(aaa)    ( FOURTH_SYMBOLP(aaa)->s_int)
                    161: #define   FOURTH_ARGREAL(aaa)   ( FOURTH_SYMBOLP(aaa)->s_real)
                    162: #define   FOURTH_ARGSTR(aaa)    ( FOURTH_SYMBOLP(aaa)->s_str)
                    163: #define   FIFTH_ARGTYPE(aaa)    ( FIFTH_SYMBOLP(aaa)->s_type)
                    164: #define   FIFTH_ARGNAME(aaa)    ( FIFTH_SYMBOLP(aaa)->s_name )
                    165: #define   FIFTH_ARGINT(aaa)     ( FIFTH_SYMBOLP(aaa)->s_int)
                    166: #define   FIFTH_ARGREAL(aaa)    ( FIFTH_SYMBOLP(aaa)->s_real)
                    167: #define   FIFTH_ARGSTR(aaa)     ( FIFTH_SYMBOLP(aaa)->s_str)
1.10      albertel  168: #define   SIXTH_ARGTYPE(aaa)    ( SIXTH_SYMBOLP(aaa)->s_type)
                    169: #define   SIXTH_ARGNAME(aaa)    ( SIXTH_SYMBOLP(aaa)->s_name )
                    170: #define   SIXTH_ARGINT(aaa)     ( SIXTH_SYMBOLP(aaa)->s_int)
                    171: #define   SIXTH_ARGREAL(aaa)    ( SIXTH_SYMBOLP(aaa)->s_real)
                    172: #define   SIXTH_ARGSTR(aaa)     ( SIXTH_SYMBOLP(aaa)->s_str)
1.1       albertel  173: 
                    174: 
                    175: 
                    176: 
                    177: typedef struct _treeNode {
                    178:     Symbol           *t_sp;
                    179:     int               t_idx;
                    180:     struct _treeNode *t_left;
                    181:     struct _treeNode *t_right;
                    182:  } TreeNode_t;
                    183: 
                    184: typedef struct _expNode {
                    185:     int              e_type;
                    186:     struct _expNode *e_parentp;
                    187:     struct _expNode *e_lsibp;
                    188:     struct _expNode *e_rsibp;
                    189:     Symbol          *e_sp;
                    190:  } ExpNode;
                    191:  
                    192: typedef ExpNode  *ExpNode_p;
                    193: 
                    194: /* ================================================================ */
                    195: /*   While loop data structure */
                    196: 
                    197: typedef struct _WhileLoop {
                    198:     int             input_idx; /* stores Input_idx */
                    199:     int             line_idx;  /* stores Current_line[Input_idx] */
                    200:     long int        pos_idx;   /* stores next line position in the input stream */
                    201:  } WhileLoop_t;
                    202: 
                    203: 
                    204: /* ================================================================ */
                    205: /*    Warning message data structure */
                    206: 
                    207: typedef  struct  _WarnMsg {
                    208:     int              warn_type;
                    209:     char            *warn_str;
                    210:     struct _WarnMsg *warn_next;
                    211:   } WarnMsg_t;
                    212: 
                    213: 
                    214: 
                    215: 
                    216: 
                    217: 
                    218: /* ================================================================ */
                    219: 
                    220: #define    SYMBOL_MAXLEN     16      /* unit symbol name length */
                    221: #define    NAME_MAXLEN       48      /* unit name length */
                    222: #define    BASEUNIT_LIMIT    32      /* maximum number of base units */
                    223: #define    ONE_K_SIZE        1024 
                    224: 
                    225: /* ================================================================ */
                    226: 
                    227: typedef  struct  _unit_elem {
                    228:   struct  _unit_elem  *ue_nextp;
                    229:   char    ue_symbol[SYMBOL_MAXLEN];
                    230:   int     ue_index;   /* -1 means this is composite */
                    231: #define          UE_COMPOSITE     -1
                    232:   double  ue_scale;
                    233:   double  ue_exp;
                    234: } Unit_E;
                    235: 
                    236: typedef struct  _unit_t {
                    237:   char       u_symbol[SYMBOL_MAXLEN];
                    238:   char       u_name[NAME_MAXLEN];
                    239:   char      *u_comment;
                    240:   int        u_index;
                    241:   struct _unit_t  *u_left;
                    242:   struct _unit_t  *u_right;
                    243:   int        u_type;
                    244: #define          U_BASE            1
                    245: #define          U_DERIVED         2
                    246: #define          U_PREFIX          3
                    247: #define          U_CONSTANT        4
                    248: #define          U_OP_POWER        5
                    249: #define          U_OP_TIMES        6
                    250: #define          U_OP_PLUS         7
                    251: #define          U_OP_MINUS        8
                    252: #define          U_OP_DIVIDE       9
                    253: #define          U_UNKNOWN         10
                    254: #define          U_DEFAULT         11
                    255:   double     u_scale;
                    256:   double     u_offset;
                    257:   int        u_count;
                    258:   Unit_E    *u_list;
                    259: }  Unit_t;
                    260: 
                    261: #define   U_LEFT(x)   ((x)->u_left)
                    262: #define   U_RIGHT(x)  ((x)->u_right)
                    263: #define   U_SYMB(x)   ((x)->u_symbol)
                    264: #define   U_NAME(x)   ((x)->u_name)
                    265: #define   U_COUNT(x)  ((x)->u_count)
                    266: #define   U_TYPE(x)   ((x)->u_type)
                    267: #define   U_SCALE(x)  ((x)->u_scale)
                    268: 
                    269: /* ==================================================================== */
                    270: /* Answer    tolerance    sig     string   */
                    271: /*  int        abs/rel                     */
                    272: /*  real       abs/rel    [l,u]            */
                    273: /*  string                         cs/ci   */
                    274: /*                                 mc      */
                    275: 
                    276: typedef struct _problem {
                    277:    char               *question;    /* Question text                   */
                    278:    char               *answer;      /* Answer string                   */
                    279:    char               *hint;        /* Hint text                       */
                    280:    char               *explain;     /* Explain text                    */
                    281:    char               *capaidplus;  /* Quizzes extra unique identifier 
                    282:                                        Only set in the first problem   */
                    283:    int                 ans_cnt;     
                    284:    int                 weight;
                    285:    int                 tol_type;
                    286:    double              tolerance;
                    287:    int                 ans_type;    /* Type of answer expecting        */
                    288:    int                 sig_ubound;
                    289:    int                 sig_lbound;
                    290:    int                 partial_cdt;
                    291:    
                    292:    int                 calc;         /* calculate correct answers based on 
                    293:                                        formated/unformated exact answer */
                    294:    int                 tries;       /* Number of tries allowed         */
                    295:    int                 show_hint;
                    296:    int                 show_explain;
                    297:    int                 show_br;      /* web only, <BR> on is by default */
                    298:    int                 show_ans_box; /* web only, answer box is shown by default */
1.5       albertel  299:    int                 verbatim; /* do verbatim protection around answers */
1.1       albertel  300:    int                 ans_op;   /* ANS_AND or ANS_OR */
                    301:    char               *id_list;
                    302:    struct   _pts_list *pts_list;
                    303:    char                ans_fmt[ANSWER_STRING_LENG];
                    304:    char                unit_str[ANSWER_STRING_LENG];
                    305:    Unit_t              *ans_unit;
                    306:    struct _answer_info *ans_list;
                    307:    struct _answer_info *ans_list_last;
                    308:    struct _problem     *next;        /* Pointer to next problem         */
                    309: } Problem_t;
                    310: 
                    311: #define   P_TOLTYPE(p)  ((p)->tol_type)
                    312: 
                    313: 
                    314: typedef struct _pts_list {
                    315:    char     *pts_str;
                    316:    int       pts_idx;
                    317:    struct   _pts_list *pts_next;
                    318: } PointsList_t;
                    319: 
                    320: 
                    321: 
                    322: /* Answer related data structure */
                    323: /* 
                    324:    char     *ans_str
                    325:    int       ans_type
                    326:    int       ans_calc
                    327:    int       ans_tol_type
                    328:    double    ans_tol
                    329:    int       ans_sig_ub
                    330:    int       ans_sig_lb
                    331:    char     *ans_id_list;
                    332:    struct   _pts_list *ans_pts_list;
                    333:    char      ans_fmt
                    334:    char      ans_unit_str
                    335:    
                    336: */
                    337: /* 
                    338:     some information in the answer specification should be 
                    339:     problem-wise, such as problem weight, problem tries
                    340:     
                    341: */
                    342: 
                    343: typedef struct _answer_info {
                    344:    char     *ans_str;           /* correct answer in string form */
                    345:    int       ans_type;          /* answer type */
                    346:    int       ans_calc;
                    347:    int       ans_tol_type;      /* answer tolerence type */
                    348:    double    ans_tol;           /* the tolerence itself */
                    349:    int       ans_sig_ub;
                    350:    int       ans_sig_lb;
                    351:    char     *ans_id_list;
                    352:    struct   _pts_list *ans_pts_list;
                    353:    char      ans_fmt[ANSWER_STRING_LENG];
                    354:    char      ans_unit_str[ANSWER_STRING_LENG];
                    355:    Unit_t   *ans_unit;
                    356:    struct   _answer_info *ans_next;
                    357: } AnswerInfo_t;
                    358: 
                    359: 
                    360: 
                    361: /******************************************************************************/
                    362: /* STRUCTURE FOR A PROBLEM                                                    */
                    363: /******************************************************************************/
                    364: 
                    365: #define    SPEC_TOLERANCE       1
                    366: #define    SPEC_SIG             2
                    367: #define    SPEC_WEIGHT          4
                    368: #define    SPEC_TYPE            8
                    369: #define    SPEC_PCREDIT         16
                    370: #define    SPEC_TRY             32
                    371: #define    SPEC_UNIT            64
                    372: 
                    373: /* ---------------------------- tol_type -------------------------- */
                    374: #define    TOL_ABSOLUTE         1
                    375: #define    TOL_PERCENTAGE       2
                    376: 
                    377: /* ------------------------------------------ */
                    378: #define    CALC_UNFORMATED      1
                    379: #define    CALC_FORMATED        2
                    380: 
                    381: #define    CALC_DEFAULT         CALC_UNFORMATED  /* for answer calculation */
                    382: 
                    383: /* ----------------------------------------  web option only */
                    384: #define    DO_SHOW              1
                    385: #define    DONOT_SHOW           0
                    386: 
1.5       albertel  387: #define    DO_VERBATIM          1
                    388: #define    DONOT_VERBATIM       0
                    389: 
1.1       albertel  390: #define    SHOW_BR_DEFAULT      DO_SHOW
1.5       albertel  391: #define    VERBATIM_DEFAULT     DO_VERBATIM
1.1       albertel  392: #define    SHOW_ANSBOX_DEFAULT  DO_SHOW
                    393: 
                    394: #define    SIG_LB_DEFAULT       0        /* ---- sig_lbound ------- */
                    395: #define    SIG_UB_DEFAULT       15       /* ---- sig_ubound ------- */
                    396: #define    PCREDIT_DEFAULT      0        /* ---- partial_cdt ------ */
                    397: #define    TOL_DEFAULT          (0.0)    /* ---- tolerance  ------- */
                    398: #define    WEIGHT_DEFAULT       1        /* ---- weight     ------- */
                    399: #define    NO_LIMIT_TRY         (0)      /* ---- tries      ------- */
                    400: #define    MAX_TRIES            99       /* ---- tries ------------ */
                    401: #define    SHOW_HINT_DEFAULT    1        /* show hints immediately */
                    402: 
                    403: /* ---------------------------  ans_type -------------------------- */
                    404: #define    ANSWER_IS_INTEGER       1
                    405: #define    ANSWER_IS_FLOAT         2
                    406: #define    ANSWER_IS_STRING_CI     3
                    407: #define    ANSWER_IS_STRING_CS     4
                    408: #define    ANSWER_IS_CHOICE        5
                    409: #define    ANSWER_IS_ARITH         6
                    410: #define    ANSWER_IS_SUBJECTIVE    7
                    411: #define    ANSWER_IS_FORMULA       8
                    412: #define    ANSWER_IS_EXTERNAL      9
                    413: 
                    414: #define    YAK                     1
                    415: #define    NAY                     0
                    416: 
                    417: /* -------- results given by capa_check_answer() and capa_check_answers() */
                    418: 
                    419: #define    EXACT_ANS           1
                    420: #define    APPROX_ANS          2 
                    421: #define    SIG_FAIL            3
                    422: #define    UNIT_FAIL           4
                    423: #define    NO_UNIT             5
                    424: #define    UNIT_OK             6
                    425: #define    INCORRECT           7
                    426: #define    UNIT_NOTNEEDED      8
                    427: #define    ANS_CNT_NOT_MATCH   9
                    428: #define    SUB_RECORDED        10
                    429: #define    BAD_FORMULA         11
1.5       albertel  430: #define    WANTED_NUMERIC      12
1.12      albertel  431: #define    UNIT_INVALID_INSTRUCTOR  13
                    432: #define    UNIT_INVALID_STUDENT1    141
                    433: #define    UNIT_INVALID_STUDENT2    142
                    434: #define    UNIT_INVALID_STUDENT3    143
                    435: #define    UNIT_IRRECONCIBLE        15
1.1       albertel  436: 
                    437: /* =============================================================== */
                    438: 
                    439: #define    T_SPACE           9
                    440: #define    T_PREFIX          8
                    441: #define    T_NUMBER          7
                    442: #define    T_BASIC_UNIT      6
                    443: #define    T_DERIVED_UNIT    5
                    444: #define    T_LP              4
                    445: #define    T_RP              3
                    446: #define    T_MULTIPLY        2
                    447: #define    T_POWER           1
                    448: #define    T_END             0
                    449: 
                    450: /* for IFstatus[] */
                    451: 
                    452: #define    IF_FALSE          0
                    453: #define    IF_TRUE           1
                    454: #define    IF_DONT_CARE      2
                    455: 
                    456: /* for IFcurrent[] */
                    457: #define    RUN_IF_PORTION    1
                    458: #define    RUN_ELSE_PORTION  2
                    459: 
                    460: /* ================================================================ */
                    461: /********************** for random(), /MAP(), capa_PIN() */
1.4       albertel  462: /* BETA_DIS is used for genbet() */
                    463: /* CHI_DIS  is for genchi() */
                    464: /* EXPONENTIAL_DIS    genexp() */
                    465: /* GAMMA_DIS    gengam() */
                    466: /* MULTI_NORM_DIS    genmn() */
                    467: /* NONCEN_CHI_DIS    gennch() */
                    468: /* NORMAL_DIS        gennor() */
                    469: /* POISSON_DIS       long ignpoi(float mu) */
1.1       albertel  470: 
1.10      albertel  471: #define    RANDOM_G            1L
                    472: #define    PERMUTATION_G       2L
                    473: #define    PIN_G               3L
1.1       albertel  474: 
1.4       albertel  475: #define    NORMAL_DIS          10 
                    476: #define    POISSON_DIS         11
                    477: #define    EXPONENTIAL_DIS     12 
                    478: #define    BETA_DIS            13
                    479: #define    GAMMA_DIS           14
                    480: #define    CHI_DIS             15
                    481: #define    NONCENTRAL_CHI_DIS  16
1.6       albertel  482: #define    FORMULA_PICK_POINTS 17
1.10      albertel  483: #define    MULTIVARIATE_NORMAL_DIS  18
1.4       albertel  484: 
1.10      albertel  485: #define    GET_GENERATOR        0L
                    486: #define    SET_GENERATOR        1L
1.1       albertel  487: 
1.10      albertel  488: #define    FORWARD_MAP           0
                    489: #define    REVERSE_MAP           1
1.1       albertel  490: 
                    491: 
                    492: 
                    493: /* ---------------------------------------------- capaLexerDef.flex */ 
                    494: void        begin_if_skip      CAPA_ARG(());
                    495: void        begin_while_skip   CAPA_ARG(());
                    496: void        begin_next_line    CAPA_ARG(());
                    497: void        begin_var          CAPA_ARG(());
                    498: void        begin_let          CAPA_ARG(());
                    499: void        begin_def          CAPA_ARG(()); 
                    500: void        begin_ans          CAPA_ARG(());     
                    501: void        begin_map          CAPA_ARG(()); 
                    502: void        begin_ignore       CAPA_ARG(());    
                    503: void        begin_text         CAPA_ARG(());    
                    504: void        begin_question     CAPA_ARG(());
                    505: void        end_problemset     CAPA_ARG(());
                    506: int         match_keyword      CAPA_ARG((char *key));
                    507: int         match_functionid   CAPA_ARG((char *key));    
                    508: void        init_funcstack     CAPA_ARG(()); 
                    509: 
                    510: #ifdef DMALLOC
                    511: #define strsave(s) strcpy(capa_malloc(strlen(s)+1,1),s)
                    512: #define capa_malloc(num,sz) memset(calloc(num,sz),'\0',num*sz)
                    513: #define capa_mfree(p) free(p);
                    514: #else
                    515: char       *strsave             CAPA_ARG((char *s));          
                    516: char       *capa_malloc         CAPA_ARG((unsigned int num, unsigned int sz));
                    517: void        capa_mfree          CAPA_ARG((char *p));
                    518: #endif
                    519: void        capa_msg            CAPA_ARG((int type, char *p));
                    520: void        capa_warn_header    CAPA_ARG(()); 
                    521: void        parse_filename      CAPA_ARG((char *line));
                    522: void        parse_import_id     CAPA_ARG((char *line));
                    523: char       *parse_endinput      CAPA_ARG((char *line));
                    524: void        append_dynamic_buf  CAPA_ARG((char *new_str));
                    525: char*       parser_status       CAPA_ARG((void));
                    526: /*------------------------------------------------- capaGrammarDef.y */
                    527: 
                    528: ExpNode_p   mk_node             CAPA_ARG((int op, ExpNode_p left, ExpNode_p right));
                    529: ExpNode_p   mk_leaf             CAPA_ARG((int type, Symbol_p valp));
                    530: void        append_text         CAPA_ARG((char *str));
                    531: void        append_hint         CAPA_ARG((char *str));
                    532: void        append_explain      CAPA_ARG((char *str));
                    533: void        append_error        CAPA_ARG((char *str));
                    534: void        append_warn         CAPA_ARG((int type, char *str));
                    535: Symbol     *symbols_op          CAPA_ARG((Symbol *a, Symbol *b, int op));
                    536: char       *format_toTeX        CAPA_ARG((char *real));
                    537: char       *format_toHTML       CAPA_ARG((char *real));
                    538: void        init_answerinfo     CAPA_ARG(());
                    539: void        display_var         CAPA_ARG((Symbol *s));
                    540: void        assign_answer       CAPA_ARG((Symbol *s));
                    541: void        assign_tolerance    CAPA_ARG((int tol_type, Symbol *s));
                    542: void        assign_weight       CAPA_ARG((Symbol *s));
                    543: void        assign_try_limits   CAPA_ARG((Symbol *s));
                    544: void        assign_hint         CAPA_ARG((Symbol *s));
                    545: void        assign_units        CAPA_ARG((Symbol *s));
                    546: void        assign_sigs         CAPA_ARG((int lb, int ub));
                    547: void        assign_id_list      CAPA_ARG((Symbol *s));
                    548: void        init_new_prob       CAPA_ARG(());
                    549: void        add_answer_cnt      CAPA_ARG((int op));
                    550: void        finish_answer_info  CAPA_ARG(());
                    551: void        start_question_over CAPA_ARG(());
                    552: 
                    553: Symbol*     get_array_symbol    CAPA_ARG((Symbol* name,Symbol* index,int free_symbols));
                    554: Symbol*     build_array_list    CAPA_ARG((Symbol* ar_name,int num_elem)); 
                    555: /*---------------------------------------------------- capaParserUtils.c */ 
1.11      albertel  556: Symbol*     negate              CAPA_ARG((Symbol* symb));
1.1       albertel  557: void        problem_default     CAPA_ARG((Problem_t  *p));
                    558: int         comp_name           CAPA_ARG((char *a,char *b));
                    559: int         comp_namesymbol     CAPA_ARG((char *a, Symbol *b));
                    560: int         itis_empty          CAPA_ARG((TreeNode_t *root_p));
                    561: void        print_symb_stat     CAPA_ARG(());
                    562: int         preorder_tree       CAPA_ARG((TreeNode_t *node_p));
                    563: int         inorder_tree        CAPA_ARG((TreeNode_t *node_p));
                    564: int         postorder_tree      CAPA_ARG((TreeNode_t *node_p));
                    565: int         destroy_tree        CAPA_ARG((TreeNode_t *node_p));
                    566: int         free_symtree        CAPA_ARG(());
                    567: char       *btree_search        CAPA_ARG((char *key,TreeNode_t  **root_pp,int  (*compar)()));
                    568: Symbol     *find_identifier     CAPA_ARG((register char *name));  
                    569: 
                    570: ArgNode_t  *new_arglist         CAPA_ARG((Symbol *sp));
                    571: ArgNode_t  *addto_arglist       CAPA_ARG((ArgNode_t *argp, Symbol *sp));
                    572: void        walk_arglist        CAPA_ARG((ArgNode_t *argp));
                    573: void        free_arglist        CAPA_ARG((ArgNode_t *argp));
                    574: int         purge_tree          CAPA_ARG((TreeNode_t  **root_pp));
                    575: int         calc_sig            CAPA_ARG((char *a_num ));
                    576: int         endian              CAPA_ARG(());
                    577: TreeNode_t *new_treenode        CAPA_ARG((char *name_p, int type));
                    578: TreeNode_t *new_formulanode     CAPA_ARG((char *name_p, double val));
                    579: 
                    580: TreeNode_t *t_splay             CAPA_ARG((char *name, TreeNode_t *t));
                    581: void        print_array_element CAPA_ARG((Symbol *array_p));
                    582: Symbol     *find_arrayid        CAPA_ARG((char *name_p));
                    583: Symbol     *find_array_by_index CAPA_ARG((Symbol *array_p,char *idx_p));
1.3       albertel  584: int         free_array          CAPA_ARG((char *name_p));
1.1       albertel  585: Symbol     *array_min_max       CAPA_ARG((char *name_p,int min));
                    586: Symbol     *array_moments       CAPA_ARG((char *result_p,char *name_p));
1.10      albertel  587: Symbol     *gen_multivariate_normal  CAPA_ARG((char *output_p,char *seed,int
                    588: item_cnt,int dimen,char *m_vec_str,char *c_vec_str));
1.4       albertel  589: Symbol     *gen_random_by_selector  CAPA_ARG((char *output_p,int sel,char *seed,int item_cnt,float p1,float p2));
1.1       albertel  590: int         setup_formula_id    CAPA_ARG((char *v_str, char *pt_str));
                    591: void        free_formula_tree   CAPA_ARG(());
                    592: 
                    593: Symbol     *find_formula_id     CAPA_ARG((char *name_p));
                    594: int         f_eval_formula      CAPA_ARG((double *f_val,char *f_str,char *v_str, char *pt_str));
                    595: 
                    596: int         f_u_parse_formula   CAPA_ARG((char *f_str));
                    597: int         f_str_to_numbers    CAPA_ARG((double **f_ar, char *n_str));
                    598: int         f_str_to_ids        CAPA_ARG((char ***v_ar, char *n_str));
                    599: 
                    600: PointsList_t *f_gen_pts         CAPA_ARG((char *ap, char *bp, int n));
                    601: PointsList_t *gen_ptslist_str   CAPA_ARG((char *range_str ));
                    602: char   *eval_formula_range_str  CAPA_ARG((char *f_str,char *var_list,char *range_str));
                    603: 
                    604: PointsList_t *gen_ptslist       CAPA_ARG((Symbol *ap,Symbol *bp,Symbol *np));
                    605: PointsList_t *new_ptslist       CAPA_ARG((Symbol *sp ));
                    606: void          free_ptslist      CAPA_ARG((PointsList_t *pts_p)) ;
                    607: /* ====================================== capaUnit.c */
                    608: 
                    609: void        c_ignorewhite       CAPA_ARG((FILE *f));
                    610: double      c_getdouble         CAPA_ARG((FILE *f));
                    611: int         c_getint            CAPA_ARG((FILE *f));
                    612: int         c_getsec_range      CAPA_ARG((FILE *f,int *low,int *high));
                    613: char       *c_getword           CAPA_ARG((FILE *f));
                    614: char       *c_getstring         CAPA_ARG((FILE *f));
                    615: char       *c_getcomment        CAPA_ARG((FILE *f));
                    616: int         c_gettype           CAPA_ARG((FILE *f));
                    617: 
                    618: Unit_t     *u_find_symb         CAPA_ARG((char *name, Unit_t *t, int *result));
                    619: void        u_find_name         CAPA_ARG((Unit_t *t));
                    620: void        print_matches       CAPA_ARG((Unit_t *t));
                    621: double      u_squared_diff      CAPA_ARG((Unit_t *a, Unit_t *b));
                    622: double      u_sq_diff           CAPA_ARG((Unit_t *b));
                    623: 
                    624: void        print_unit_tree     CAPA_ARG(());
                    625: int         alphaorder_utree    CAPA_ARG((Unit_t *node_p));
                    626: int         inorder_diff        CAPA_ARG((Unit_t *node_p));
                    627: int         inorder_utree       CAPA_ARG((Unit_t *node_p));
                    628: int         postorder_utree     CAPA_ARG((Unit_t *node_p));
                    629: int         postwalk_utree      CAPA_ARG((Unit_t *n_p));
                    630: void        process_op          CAPA_ARG((int op));
1.13      albertel  631: Unit_t*     process_utree       CAPA_ARG((Unit_t *t));
1.1       albertel  632: int         check_correct_unit  CAPA_ARG((char *u_symb,Unit_t *t,double *scale));
                    633: int         free_utree          CAPA_ARG((Unit_t *t));
                    634: int         u_postfree          CAPA_ARG((Unit_t *t));
                    635: void        print_unit_t        CAPA_ARG((Unit_t *t));
                    636: void        u_copy_unit         CAPA_ARG((Unit_t *a_p,Unit_t *b_p,double exp_scale));
                    637: int         u_pm_op             CAPA_ARG((Unit_t *a_p, Unit_t *b_p, int op));
                    638: 
                    639: int         u_parsepower        CAPA_ARG((char *unit_str));
                    640: double      s_scan_number       CAPA_ARG((char *buf, int idx, int *r_idx));
                    641: double      s_scan_symbol       CAPA_ARG((char *buf,char *symb_p,int idx,int *r_idx));
                    642: int         s_process_symb      CAPA_ARG((char *symb_str, Unit_t  *cu_p,double exp));
                    643: Unit_t     *u_parse_unit        CAPA_ARG((char *unit_str));
                    644: int         comp_unit_symb      CAPA_ARG((char *a,char *b));
                    645: Unit_t     *u_splay             CAPA_ARG((char *name, Unit_t *t));
                    646: int         u_insert_baseunit   CAPA_ARG((char *n_p,char *s_p,char *c_p));
                    647: int         u_insert_derived    CAPA_ARG((char *n_p,char *s_p,char *c_p,char *u_p));
                    648: void        u_getunit           CAPA_ARG((FILE *f));
                    649: void        simplify_unit       CAPA_ARG((Unit_t *u_p));
                    650: void        freelist_unit_e     CAPA_ARG((Unit_E *ue_p));
                    651: int         is_units_equal      CAPA_ARG((Unit_t *u1_p, Unit_t *u2_p));
                    652: double      units_ratio         CAPA_ARG((Unit_t *u1_p, Unit_t *u2_p));
                    653: Unit_t     *p_new_op            CAPA_ARG((Unit_t *left_p, int op, Unit_t *right_p));
                    654: Unit_t     *p_new_num           CAPA_ARG((Unit_t *left_p, double num, Unit_t *right_p));
                    655: Unit_t     *p_new_unit          CAPA_ARG((Unit_t *left_p, Unit_t *right_p));
                    656: int         s_getnext           CAPA_ARG(());
                    657: int         s_peeknext          CAPA_ARG(());
                    658: double      scan_FLOAT          CAPA_ARG(());
                    659: Unit_t     *scan_num_item       CAPA_ARG(());
                    660: Unit_t     *scan_unit_item      CAPA_ARG(());
                    661: Unit_t     *scan_basic_term     CAPA_ARG(());
                    662: Unit_t     *scan_num_term       CAPA_ARG(());
                    663: Unit_t     *scan_basic_block    CAPA_ARG(());
                    664: Unit_t     *scan_num_block      CAPA_ARG(());
                    665: Unit_t     *scan_unit_expr      CAPA_ARG(());
                    666: Unit_t     *scan_num_expr       CAPA_ARG(());
                    667: Unit_t     *parse_unit_expr     CAPA_ARG((char *symb_str));
                    668: void        print_remains       CAPA_ARG(());
                    669: /* =================================================  capaMapExpr.c */
                    670: 
                    671: int         do_map             CAPA_ARG((char *seed,ArgNode_t *varp,ArgNode_t *argp,int argc, int dir));
                    672: 
                    673: /* ===============================================  capaFormulaLexer.c -- */
                    674: double      f_get_float         CAPA_ARG(());
                    675: char       *f_get_id            CAPA_ARG(());
                    676: int         f_peek_next_token   CAPA_ARG(());
                    677: int         fml_lex             CAPA_ARG(());
                    678: 
                    679: /* ===============================================  capaFormula.y      == */
                    680: int         fml_parse           CAPA_ARG(()); 
                    681: Symbol     *f_symbol_pow        CAPA_ARG((Symbol *ap, Symbol *bp));
                    682: /* ====================================================================== */
                    683: 
                    684: #ifdef  __sun
                    685: #define index(xx,cc)  strchr(xx,cc)
                    686: #define rindex(xx,cc) strrchr(xx,cc)
                    687: #endif
                    688: 
                    689: #endif  /* _CAPA_PARSER_H_ */
                    690: 

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