home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1997 March / VPR9703A.ISO / VPR_DATA / DOGA / SOURCES / POLYEDIT.LZH / ML / DATA.H < prev    next >
C/C++ Source or Header  |  1996-02-16  |  5KB  |  238 lines

  1. /*
  2.  *        データ構造定義
  3.  *
  4.  *        T.Kobayashi        1994.5.14
  5.  */
  6.  
  7. #define    DATA    1
  8.  
  9. #ifndef    ALLOC
  10. #    include "alloc.h"
  11. #endif
  12.  
  13. #include "defines.h"
  14.  
  15. /*    型    */
  16. #define    TYPE_NOASN        0x00
  17. #define    TYPE_BOOLEAN    0x01
  18. #define    TYPE_INT        0x02
  19. #define    TYPE_REAL        0x04
  20. #define    TYPE_TYPE        0x08
  21. #define    TYPE_FUNC        0x10
  22. #define    TYPE_ARRAY        0x20
  23. #define    TYPE_OBJECT        0x40
  24.  
  25. /*    関数の型    */
  26. #define    FUNC_NO        0
  27. #define    FUNC_SYS    1
  28. #define    FUNC_USR    2
  29.  
  30. /*    演算子    */
  31. #define        OPE_SINGLE        5        /*    単項    */
  32. #define        OPE_EXP_END        0        /*    式終了    */
  33. #define        OPE_NOT            1        /*    !        */
  34. #define        OPE_MINUS1        2        /*    単項-    */
  35. #define        OPE_INC            3        /*    ++        */
  36. #define        OPE_DEC            4        /*    --        */
  37. #define        OPE_PLUS        5        /*    +        */
  38. #define        OPE_MINUS        6        /*    -        */
  39. #define        OPE_MULT        7        /*    *        */
  40. #define        OPE_DIVIDE        8        /*    /        */
  41. #define        OPE_DOT            9        /*    .        */
  42. #define        OPE_REFER        10        /*    .        */
  43. #define        OPE_MOD            11        /*    %        */
  44. #define        OPE_LSS            12        /*    <        */
  45. #define        OPE_GTR            13        /*    >        */
  46. #define        OPE_LSSEQ        14        /*    <=        */
  47. #define        OPE_GTREQ        15        /*    >=        */
  48. #define        OPE_AND            16        /*    &        */
  49. #define        OPE_OR            17        /*    |        */
  50. #define        OPE_XOR            18        /*    ^        */
  51. #define        OPE_EQ            19        /*    ==        */
  52. #define        OPE_NOTEQ        20        /*    !=        */
  53. #define        OPE_LSFT        21        /*    <<        */
  54. #define        OPE_RSFT        22        /*    >>        */
  55. #define        FUNC_START        32        /*    関数    */
  56.  
  57. /*    識別子管理    */
  58. #define        IDENT_RESERVE    0
  59. #define        IDENT_LOCAL        1        /*    ローカル変数    */
  60. #define        IDENT_GLOBAL    2        /*    大域変数        */
  61. #define        IDENT_VAR        3        /*    変数識別子        */
  62. #define        IDENT_FUNC        4        /*    関数識別子        */
  63. #define        IDENT_ARY        16        /*    配列変数        */
  64. #define        IDENT_PRIVATE    32
  65. #define        IDENT_CONST        64
  66.  
  67. typedef    char    IdentName[IDENT_CHARS+1] ;
  68. typedef struct {
  69.     char    *name;
  70.     int        id;
  71. }    IdentTable;
  72.  
  73. typedef    struct    {
  74.     int        max ;
  75.     int        count ;
  76.     char    *flag ;
  77.     IdentName    *name ;
  78.     IdentTable    *table ;
  79.     int    tablesize;
  80. }
  81.     IdentBuffer ;
  82.  
  83. /*
  84.  *    関数
  85.  */
  86. typedef    struct    {
  87.     int        type ;        /*    タイプ    */
  88.     char    *name ;        /*    名前    */
  89.     void    *ptr ;        /*    実体    */
  90. }
  91.     FuncBuffer ;
  92.  
  93. /*
  94.  *    オブジェクト
  95.  */
  96. typedef    struct    {
  97.         short    type ;        /*    型番号        */
  98.         short    ref ;        /*    参照数        */
  99.         int        size ;        /*    サイズ        */
  100. }
  101.     Object ;
  102.  
  103. /*
  104.  *    クラス
  105.  */
  106. typedef    struct    {
  107.     char        *name ;            /*    名前            */
  108.     int            funcs ;            /*    関数の最大数    */
  109.     int            parent ;        /*    継承クラス        */
  110.     FuncBuffer    *func ;            /*    関数リスト        */
  111. }
  112.     Class ;
  113.  
  114. extern    int        ObjectCount ;
  115. extern    Class    ClassList[] ;
  116. extern    IdentBuffer    *IdentGlobalVar, *IdentLocalVar, *IdentFunction ;
  117.  
  118. /*
  119.  *        演算用データ構造体
  120.  */
  121. /*    論理型    */
  122. typedef    struct    {
  123.     short    type ;
  124.     short    dmy ;
  125.     int        l ;
  126. }
  127.     BoolData ;
  128.  
  129. /*    整数型        */
  130. typedef    struct    {
  131.     short    type ;
  132.     short    dmy ;
  133.     int        i ;
  134. }
  135.     IntData ;
  136.  
  137. /*    実数型        */
  138. typedef    struct    {
  139.     short    type ;
  140.     short    dmy ;
  141.     float    r ;
  142. }
  143.     RealData ;
  144.  
  145. /*    配列型    */
  146. typedef    struct    {
  147.     short    type ;
  148.     short    size ;
  149.     void    *ary ;
  150. }
  151.     ArrayData ;
  152.  
  153. /*    実行型    */
  154. typedef    struct    {
  155.     short    type ;
  156.     short    dmy ;
  157.     int        ident ;
  158. }
  159.     ExecData ;
  160.  
  161. /*    型型    */
  162. typedef    struct    {
  163.     short    type ;
  164.     short    dmy ;
  165.     int        t ;
  166. }
  167.     TypeData ;
  168.  
  169. /*    オブジェクト型    */
  170. typedef    struct    {
  171.     short    type ;
  172.     short    dmy ;
  173.     Object    *ptr ;
  174. }
  175.     ObjectData ;
  176.  
  177. typedef    union    {
  178.     short        type ;
  179.     BoolData    ld ;
  180.     IntData        id ;
  181.     RealData    rd ;
  182.     ArrayData    ad ;
  183.     ExecData     funcd ;
  184.     TypeData    td ;
  185.     ObjectData    od ;
  186. }
  187.     DataStruct ;
  188.  
  189. #ifdef __cplusplus
  190. extern "C" {
  191. #endif
  192. /*    init.c    */
  193. extern    void    StackInit( int );
  194. extern    void    StackExit( void );
  195. extern    void    ObjectInit( void );
  196. extern    void    ObjectExit( void );
  197.  
  198. /*    object.c    */
  199. extern    Object    *ObjectAlloc( int, int );
  200. extern    void    ObjectFree( Object* );
  201. extern    int        ObjectCheck( DataStruct*, int );
  202. extern    Object    *ObjectDup( Object* );
  203. extern    Object    *ObjectCopy( Object* );
  204.  
  205. /*    class.c    */
  206. extern    int        ObjectSetClass( char*, int, int );
  207.  
  208. /*    func.c    */
  209. extern    FuncBuffer    *FunctionAlloc( int );
  210. extern    void    FunctionFree( FuncBuffer* );
  211. extern    int        FunctionSet( int, char*, int(*)() );
  212. extern    void    OperatorSet( int, int, int(*)() );
  213.  
  214. /*    stack.c    */
  215. extern    DataStruct    *StackTop( void );
  216. extern    void    StackPop( void );
  217. extern    void    StackPush( DataStruct* );
  218. extern    void    StackPushBoolean( int );
  219. extern    void    StackPushInt( int );
  220. extern    void    StackPushReal( double );
  221. extern    DataStruct    *StackAlloc( int );
  222. extern    void    StackRelease( DataStruct* );
  223. extern    int        StackMaxUsed( void );
  224. extern    void    DataPrint( DataStruct* );
  225. extern    int        DataToString( char*, DataStruct* );
  226.  
  227. /*    ident.c    */
  228. extern    IdentBuffer    *IdentAlloc( int, int );
  229. extern    void    IdentFree( IdentBuffer* );
  230. extern    int        IdentAppend( IdentBuffer*, char*, int );
  231. extern    int        IdentSearch( IdentBuffer*, char* );
  232. extern    void    IdentPrivate( IdentBuffer* );
  233. extern    int        IdentFlag( IdentBuffer*, int );
  234. #ifdef __cplusplus
  235. }
  236. #endif
  237.  
  238.