File:  [LON-CAPA] / loncom / homework / CAPA-converter / capaParser.h
Revision 1.2: download - view: text, annotated - select for diffs
Tue Dec 4 15:17:57 2001 UTC (22 years, 5 months ago) by albertel
Branches: MAIN
CVS tags: version_2_9_X, version_2_9_99_0, version_2_9_1, version_2_9_0, version_2_8_X, version_2_8_99_1, version_2_8_99_0, version_2_8_2, version_2_8_1, version_2_8_0, version_2_7_X, version_2_7_99_1, version_2_7_99_0, version_2_7_1, version_2_7_0, version_2_6_X, version_2_6_99_1, version_2_6_99_0, version_2_6_3, version_2_6_2, version_2_6_1, version_2_6_0, version_2_5_X, version_2_5_99_1, version_2_5_99_0, version_2_5_2, version_2_5_1, version_2_5_0, version_2_4_X, version_2_4_99_0, version_2_4_2, version_2_4_1, version_2_4_0, version_2_3_X, version_2_3_99_0, version_2_3_2, version_2_3_1, version_2_3_0, version_2_2_X, version_2_2_99_1, version_2_2_99_0, version_2_2_2, version_2_2_1, version_2_2_0, version_2_1_X, version_2_1_99_3, version_2_1_99_2, version_2_1_99_1, version_2_1_99_0, version_2_1_3, version_2_1_2, version_2_1_1, version_2_1_0, version_2_12_X, version_2_11_X, version_2_11_4_uiuc, version_2_11_4_msu, version_2_11_4, version_2_11_3_uiuc, version_2_11_3_msu, version_2_11_3, version_2_11_2_uiuc, version_2_11_2_msu, version_2_11_2_educog, version_2_11_2, version_2_11_1, version_2_11_0_RC3, version_2_11_0_RC2, version_2_11_0_RC1, version_2_11_0, version_2_10_X, version_2_10_1, version_2_10_0_RC2, version_2_10_0_RC1, version_2_10_0, version_2_0_X, version_2_0_99_1, version_2_0_2, version_2_0_1, version_2_0_0, version_1_99_3, version_1_99_2, version_1_99_1_tmcc, version_1_99_1, version_1_99_0_tmcc, version_1_99_0, version_1_3_X, version_1_3_3, version_1_3_2, version_1_3_1, version_1_3_0, version_1_2_X, version_1_2_99_1, version_1_2_99_0, version_1_2_1, version_1_2_0, version_1_1_X, version_1_1_99_5, version_1_1_99_4, version_1_1_99_3, version_1_1_99_2, version_1_1_99_1, version_1_1_99_0, version_1_1_3, version_1_1_2, version_1_1_1, version_1_1_0, version_1_0_99_3, version_1_0_99_2, version_1_0_99_1, version_1_0_99, version_1_0_3, version_1_0_2, version_1_0_1, version_1_0_0, version_0_99_5, version_0_99_4, version_0_99_3, version_0_99_2, version_0_99_1, version_0_99_0, version_0_6_2, version_0_6, version_0_5_1, version_0_5, version_0_4, stable_2002_spring, stable_2002_july, stable_2002_april, stable_2001_fall, loncapaMITrelate_1, language_hyphenation_merge, language_hyphenation, conference_2003, bz6209-base, bz6209, bz5969, bz2851, STABLE, PRINT_INCOMPLETE_base, PRINT_INCOMPLETE, HEAD, GCI_3, GCI_2, GCI_1, BZ5971-printing-apage, BZ5434-fox, BZ4492-merge, BZ4492-feature_horizontal_radioresponse, BZ4492-feature_Support_horizontal_radioresponse, BZ4492-Support_horizontal_radioresponse
- GPL headers

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

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