lib/create_standard_function_txt.sh
changeset 351 e7d236750709
child 375 7a11f9e9e703
equal deleted inserted replaced
350:2c3c4dc34979 351:e7d236750709
       
     1 #!/bin/sh 
       
     2 #
       
     3 # copyright 2011 Mario de Sousa (msousa@fe.up.pt)
       
     4 #
       
     5 # Offered to the public under the terms of the GNU Lesser General Public
       
     6 # License as published by the Free Software Foundation; either version 2
       
     7 # of the License, or (at your option) any later version.
       
     8 #
       
     9 # This program is distributed in the hope that it will be useful, but
       
    10 # WITHOUT ANY WARRANTY; without even the implied warranty of
       
    11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
       
    12 # General Public License for more details.
       
    13 #
       
    14 # This code is made available on the understanding that it will not be
       
    15 # used in safety-critical situations without a full and competent review.
       
    16 #
       
    17 
       
    18 echo "(************************************************)"
       
    19 echo "(************************************************)"
       
    20 echo "(***                                          ***)"
       
    21 echo "(***    The IEC 61131-3 standard functions    ***)"
       
    22 echo "(***                                          ***)"
       
    23 echo "(***    Auto-generated file. Do not edit!     ***)"
       
    24 echo "(***                                          ***)"
       
    25 echo "(************************************************)"
       
    26 echo "(************************************************)"
       
    27 
       
    28 
       
    29 echo "{disable code generation}"
       
    30 
       
    31 # Lets parse this file with the C pre-processor!
       
    32 #cpp <<"END" | sed "s/ FUNCTION/\nFUNCTION/g" | grep -v '#'
       
    33 # We usee gcc -E instead, as it seems cpp on OSX works differently! However, it needs an input file parameter...
       
    34 #gcc -E <<"END" | sed "s/ FUNCTION/\nFUNCTION/g" | grep -v '#'
       
    35 cpp <<"END" | sed "s/ FUNCTION/\nFUNCTION/g" | grep -v '#'
       
    36 
       
    37 #define __DEFINE_CLASHING_FUNCTIONS 
       
    38 
       
    39 /* #include "iec_std_lib_generated.h" */
       
    40 /* Macro that expand to subtypes */
       
    41 #define __ANY(DO)                 __ANY_DERIVED(DO) __ANY_ELEMENTARY(DO)
       
    42 #define __ANY_DERIVED(DO)
       
    43 #define __ANY_ELEMENTARY(DO)      __ANY_MAGNITUDE(DO) __ANY_BIT(DO) __ANY_STRING(DO) __ANY_DATE(DO)
       
    44 #define __ANY_MAGNITUDE(DO)       __ANY_NUM(DO) DO(TIME)
       
    45 #define __ANY_BIT(DO)             __ANY_NBIT(DO) DO(BOOL)
       
    46 #define __ANY_NBIT(DO)            DO(BYTE) DO(WORD) DO(DWORD) DO(LWORD)
       
    47 #define __ANY_STRING(DO)          DO(STRING)
       
    48 #define __ANY_DATE(DO)            DO(DATE) DO(TOD) DO(DT)
       
    49 #define __ANY_NUM(DO)             __ANY_REAL(DO) __ANY_INT(DO)
       
    50 #define __ANY_REAL(DO)            DO(REAL) DO(LREAL)
       
    51 #define __ANY_INT(DO)             __ANY_SINT(DO) __ANY_UINT(DO)
       
    52 #define __ANY_SINT(DO)            DO(SINT) DO(INT) DO(DINT) DO(LINT)
       
    53 #define __ANY_UINT(DO)            DO(USINT) DO(UINT) DO(UDINT) DO(ULINT)
       
    54 
       
    55 #define __ANY_1(DO,P1)            __ANY_DERIVED_1(DO,P1) __ANY_ELEMENTARY_1(DO,P1)
       
    56 #define __ANY_DERIVED_1(DO,P1)
       
    57 #define __ANY_ELEMENTARY_1(DO,P1) __ANY_MAGNITUDE_1(DO,P1) __ANY_BIT_1(DO,P1) __ANY_STRING_1(DO,P1) __ANY_DATE_1(DO,P1)
       
    58 #define __ANY_MAGNITUDE_1(DO,P1)  __ANY_NUM_1(DO,P1) DO(TIME,P1)
       
    59 #define __ANY_BIT_1(DO,P1)        __ANY_NBIT_1(DO,P1) DO(BOOL,P1)
       
    60 #define __ANY_NBIT_1(DO,P1)       DO(BYTE,P1) DO(WORD,P1) DO(DWORD,P1) DO(LWORD,P1)
       
    61 #define __ANY_STRING_1(DO,P1)     DO(STRING,P1)
       
    62 #define __ANY_DATE_1(DO,P1)       DO(DATE,P1) DO(TOD,P1) DO(DT,P1)
       
    63 #define __ANY_NUM_1(DO,P1)        __ANY_REAL_1(DO,P1) __ANY_INT_1(DO,P1)
       
    64 #define __ANY_REAL_1(DO,P1)       DO(REAL,P1) DO(LREAL,P1)
       
    65 #define __ANY_INT_1(DO,P1)        __ANY_SINT_1(DO,P1) __ANY_UINT_1(DO,P1)
       
    66 #define __ANY_SINT_1(DO,P1)       DO(SINT,P1) DO(INT,P1) DO(DINT,P1) DO(LINT,P1)
       
    67 #define __ANY_UINT_1(DO,P1)       DO(USINT,P1) DO(UINT,P1) DO(UDINT,P1) DO(ULINT,P1)
       
    68 
       
    69 
       
    70 
       
    71 /*****************************************************************/
       
    72 /*****************************************************************/
       
    73 /*****                                                       *****/
       
    74 /*****                 IEC 61131-3                           *****/
       
    75 /*****      S T A N D A R D     F U N C T I O N S            *****/
       
    76 /*****                                                       *****/
       
    77 /*****************************************************************/
       
    78 /*****************************************************************/
       
    79 
       
    80 /* NOTE: We only define and declare the explicitly typed standard functions
       
    81  *       (e.g., SIN_REAL, SIN_LREAL, ..., ADD_SINT, ADD_INT, ADD_LINT, ...)
       
    82  *       We do not declare/define the overloaded functions
       
    83  *       (SIN, ADD, ...). 
       
    84  *       When handling a call to an overloaded function, the iec2c compiler 
       
    85  *       will determine in stage3 the data type of the parameter being passed, 
       
    86  *       and in stage4 generate the C code to call the correct
       
    87  *       typed standard function.
       
    88  */
       
    89 
       
    90 /* NOTE on explicit typing of:
       
    91  *           - Table 25 - Standard bit shift functions
       
    92  *           - Table 29 - Character string Functions
       
    93  *
       
    94  *  In section 2.5.1.4 (Typing, overloading, and type conversion) of the IEC 61131-3 (version 2)
       
    95  *  of the standard, it is stated:
       
    96  * "A standard function, [...] is said to be overloaded when it
       
    97  * can operate on input data elements of various types within a generic type designator as defined in
       
    98  * 2.3.2. For instance, an overloaded addition function on generic type ANY_NUM can operate on data
       
    99  * of types LREAL, REAL, DINT, INT, and SINT."
       
   100  * [...]
       
   101  * "When a function which normally represents an overloaded operator is to be typed, i.e., the types
       
   102  * of its inputs and outputs restricted to a particular elementary or derived data type as defined in
       
   103  * 2.3, this shall be done by appending an "underline" character followed by the required type, as
       
   104  * shown in table 21."
       
   105  *
       
   106  * However, this explanation (as well as the example in table 21) only refers to functions where the same
       
   107  * generic data type is used for the single input and the output parameter.
       
   108  * How can we create explicitly types functions when this is not the case?
       
   109  * It does not seem to be covered by the standard.
       
   110  *
       
   111  * For this reason, we do not define the LEN_SINT, LEN_INT, LEN_STRING, LEN_[ANY_INT], LEN_[ANY_STRING] functions...
       
   112  */
       
   113  
       
   114 
       
   115 /*****************************************/  
       
   116 /*****************************************/  
       
   117 /*  2.5.1.5.1 Type Conversion Functions  */
       
   118 /*****************************************/  
       
   119 /*****************************************/  
       
   120 
       
   121 /* macros for non-extensible functions */
       
   122 #define __function_1p(fname,to_TYPENAME,p1_NAME,p1_TYPENAME) \
       
   123 FUNCTION fname : to_TYPENAME\
       
   124   VAR_INPUT p1_NAME : p1_TYPENAME; END_VAR\
       
   125   RETURN; \
       
   126 END_FUNCTION\
       
   127 
       
   128 #define __function_2p(fname,to_TYPENAME,p1_NAME,p1_TYPENAME,p2_NAME,p2_TYPENAME) \
       
   129 FUNCTION fname : to_TYPENAME\
       
   130   VAR_INPUT p1_NAME : p1_TYPENAME; p2_NAME : p2_TYPENAME; END_VAR\
       
   131   RETURN; \
       
   132 END_FUNCTION\
       
   133 
       
   134 #define __function_3p(fname,to_TYPENAME,p1_NAME,p1_TYPENAME,p2_NAME,p2_TYPENAME,p3_NAME,p3_TYPENAME) \
       
   135 FUNCTION fname : to_TYPENAME\
       
   136   VAR_INPUT p1_NAME : p1_TYPENAME; p2_NAME : p2_TYPENAME; p3_NAME : p3_TYPENAME; END_VAR\
       
   137   RETURN; \
       
   138 END_FUNCTION\
       
   139 
       
   140 #define __function_4p(fname,to_TYPENAME,p1_NAME,p1_TYPENAME,p2_NAME,p2_TYPENAME,p3_NAME,p3_TYPENAME,p4_NAME,p4_TYPENAME) \
       
   141 FUNCTION fname : to_TYPENAME\
       
   142   VAR_INPUT p1_NAME : p1_TYPENAME; p2_NAME : p2_TYPENAME; p3_NAME : p3_TYPENAME; p4_NAME : p4_TYPENAME; END_VAR\
       
   143   RETURN; \
       
   144 END_FUNCTION\
       
   145 
       
   146 
       
   147 /* macro for extensible functions */
       
   148 #define __function_1e(fname,to_TYPENAME,p1_NAME,p1_TYPENAME, FIRST_INDEX) \
       
   149 FUNCTION fname : to_TYPENAME\
       
   150   VAR_INPUT p1_NAME FIRST_INDEX .. : p1_TYPENAME; END_VAR\
       
   151   RETURN; \
       
   152 END_FUNCTION\
       
   153 
       
   154 #define __function_2e(fname,to_TYPENAME,p1_NAME,p1_TYPENAME,p2_NAME,p2_TYPENAME, FIRST_INDEX) \
       
   155 FUNCTION fname : to_TYPENAME\
       
   156   VAR_INPUT p1_NAME : p1_TYPENAME; p2_NAME FIRST_INDEX .. : p2_TYPENAME; END_VAR\
       
   157   RETURN; \
       
   158 END_FUNCTION\
       
   159 
       
   160 
       
   161 
       
   162 
       
   163 
       
   164 
       
   165 #define __to_anynum_(from_TYPENAME)   __ANY_NUM_1(__iec_,from_TYPENAME)
       
   166 #define __to_anyint_(from_TYPENAME)   __ANY_INT_1(__iec_,from_TYPENAME)
       
   167 #define __to_anybit_(from_TYPENAME)   __ANY_BIT_1(__iec_,from_TYPENAME)
       
   168 #define __to_anynbit_(from_TYPENAME) __ANY_NBIT_1(__iec_,from_TYPENAME)
       
   169 #define __to_anysint_(from_TYPENAME) __ANY_SINT_1(__iec_,from_TYPENAME)
       
   170 #define __to_anyuint_(from_TYPENAME) __ANY_UINT_1(__iec_,from_TYPENAME)
       
   171 #define __to_anyreal_(from_TYPENAME) __ANY_REAL_1(__iec_,from_TYPENAME)
       
   172 #define __to_anydate_(from_TYPENAME) __ANY_DATE_1(__iec_,from_TYPENAME)
       
   173 #define __to_time_(from_TYPENAME)    __iec_(TIME,from_TYPENAME)
       
   174 #define __to_string_(from_TYPENAME)  __iec_(STRING,from_TYPENAME)
       
   175 
       
   176 
       
   177 /*****************/
       
   178 /*   *_TO_**     */
       
   179 /*****************/
       
   180 #define __iec_(to_TYPENAME,from_TYPENAME) __function_1p(from_TYPENAME##_TO_##to_TYPENAME, to_TYPENAME, IN, from_TYPENAME)
       
   181 
       
   182 /******** [ANY_BIT]_TO_[ANY_NUM | ANY_BIT]   ************/ 
       
   183 __ANY_BIT(__to_anynum_)
       
   184 __ANY_BIT(__to_anybit_)
       
   185 
       
   186 /******** [ANY_NUM]_TO_[ANY_NUM | ANY_BIT]   ************/ 
       
   187 __ANY_NUM(__to_anynum_)
       
   188 __ANY_NUM(__to_anybit_)
       
   189 
       
   190 
       
   191 /******** [ANY_BIT | ANY_NUM]_TO_[TIME | ANY_DATE]   ************/ 
       
   192 __ANY_BIT(__to_time_)
       
   193 __ANY_NUM(__to_time_)
       
   194 __ANY_BIT(__to_anydate_)
       
   195 __ANY_NUM(__to_anydate_)
       
   196 
       
   197 
       
   198 /******** [TIME | ANY_DATE]_TO_[ANY_BIT | ANY_NUM]   ************/ 
       
   199 __to_anynum_(TIME)
       
   200 __to_anybit_(TIME)
       
   201 __ANY_DATE(__to_anynum_)
       
   202 __ANY_DATE(__to_anybit_)
       
   203 
       
   204 
       
   205 /******** [ANY_DATE]_TO_[ANY_DATE | TIME]   ************/ 
       
   206 /* Not supported: DT_TO_TIME */
       
   207 /*__iec_(to_TYPENAME,from_TYPENAME)*/
       
   208 __iec_(DATE,DT)
       
   209 __iec_(DT,DT)
       
   210 __iec_(TOD,DT)
       
   211 /* Not supported: DATE_TO_TIME */
       
   212 __iec_(DATE,DATE)
       
   213 /* Not supported: DATE_TO_DT */
       
   214 /* Not supported: DATE_TO_TOD */
       
   215 /* Not supported: TOD_TO_TIME */
       
   216 /* Not supported: TOD_TO_DATE */
       
   217 /* Not supported: TOD_TO_DT */
       
   218 __iec_(TOD,TOD)
       
   219 
       
   220 
       
   221 /******** TIME_TO_[ANY_DATE]   ************/ 
       
   222 /* Not supported: TIME_TO_DATE */
       
   223 /* Not supported: TIME_TO_DT */
       
   224 /* Not supported: TIME_TO_TOD */
       
   225 
       
   226 /******** TIME_TO_TIME   ************/ 
       
   227 __iec_(TIME,TIME)
       
   228 
       
   229 
       
   230 /******** [ANY_BIT]_TO_STRING   ************/ 
       
   231 __ANY_BIT(__to_string_)
       
   232 
       
   233 
       
   234 /******** [ANY_NUM]_TO_STRING   ************/ 
       
   235 __ANY_NUM(__to_string_)
       
   236 
       
   237 /******** [ANY_DATE]_TO_STRING   ************/ 
       
   238 __ANY_DATE(__to_string_)
       
   239 
       
   240 
       
   241 /******** TIME_TO_STRING   ************/ 
       
   242 __iec_(STRING,TIME)
       
   243 
       
   244 
       
   245 /******** STRING_TO_[ANY_BIT]   ************/ 
       
   246 __to_anybit_(STRING)
       
   247 
       
   248 
       
   249 /******** STRING_TO_[ANY_NUM]   ************/ 
       
   250 __to_anynum_(STRING)
       
   251 
       
   252 
       
   253 /******** STRING_TO_[ANY_DATE]   ************/ 
       
   254 __to_anydate_(STRING)
       
   255 
       
   256                                    
       
   257 /******** STRING_TO_TIME   ************/ 
       
   258 __iec_(TIME,STRING)
       
   259 
       
   260 #undef __iec_
       
   261 
       
   262 
       
   263 
       
   264 /**************/
       
   265 /*   TRUNC    */
       
   266 /**************/
       
   267 /* overloaded function! */
       
   268 #define __iec_(to_TYPENAME,from_TYPENAME) __function_1p(TRUNC, to_TYPENAME, IN, from_TYPENAME)
       
   269 __ANY_REAL(__to_anyint_)
       
   270 #undef __iec_
       
   271 
       
   272 
       
   273 /*******************/
       
   274 /*   *_TO_BCD_*    */
       
   275 /*******************/
       
   276 #define __iec_(to_TYPENAME,from_TYPENAME) __function_1p(from_TYPENAME##_TO_BCD_##to_TYPENAME, to_TYPENAME, IN, from_TYPENAME)
       
   277 __ANY_UINT(__to_anynbit_)
       
   278 #undef __iec_
       
   279 
       
   280 
       
   281 /*******************/
       
   282 /*   *_BCD_TO_*    */
       
   283 /*******************/
       
   284 #define __iec_(to_TYPENAME,from_TYPENAME) __function_1p(from_TYPENAME##_BCD_TO_##to_TYPENAME, to_TYPENAME, IN, from_TYPENAME)
       
   285 __ANY_NBIT(__to_anyuint_)
       
   286 #undef __iec_
       
   287 
       
   288 /***********************************/  
       
   289 /***********************************/  
       
   290 /*  2.5.1.5.2 Numerical Functions  */
       
   291 /***********************************/  
       
   292 /***********************************/  
       
   293 
       
   294 /******************************************************************/
       
   295 /***   Table 23 - Standard functions of one numeric variable    ***/
       
   296 /******************************************************************/
       
   297 
       
   298   /**************/
       
   299   /*    ABS     */
       
   300   /**************/
       
   301 #define __iec_(TYPENAME) \
       
   302 __function_1p(ABS_##TYPENAME, TYPENAME, IN, TYPENAME)  /* explicitly typed function */\
       
   303 __function_1p(ABS, TYPENAME, IN, TYPENAME)             /* overloaded function */ 
       
   304 __ANY_REAL(__iec_)
       
   305 __ANY_INT(__iec_)
       
   306 #undef __iec_
       
   307 
       
   308   /**************/
       
   309   /*    SQRT    */
       
   310   /**************/
       
   311 #define __iec_(TYPENAME) \
       
   312 __function_1p(SQRT_##TYPENAME, TYPENAME, IN, TYPENAME)  /* explicitly typed function */\
       
   313 __function_1p(SQRT, TYPENAME, IN, TYPENAME)             /* overloaded function */ 
       
   314 __ANY_REAL(__iec_)
       
   315 #undef __iec_
       
   316 
       
   317   /**************/
       
   318   /*     LN     */
       
   319   /**************/
       
   320 #define __iec_(TYPENAME) \
       
   321 __function_1p(LN_##TYPENAME, TYPENAME, IN, TYPENAME)  /* explicitly typed function */\
       
   322 __function_1p(LN, TYPENAME, IN, TYPENAME)             /* overloaded function */ 
       
   323 __ANY_REAL(__iec_)
       
   324 #undef __iec_
       
   325 
       
   326   /**************/
       
   327   /*     LOG    */
       
   328   /**************/
       
   329 #define __iec_(TYPENAME) \
       
   330 __function_1p(LOG_##TYPENAME, TYPENAME, IN, TYPENAME)  /* explicitly typed function */\
       
   331 __function_1p(LOG, TYPENAME, IN, TYPENAME)             /* overloaded function */ 
       
   332 __ANY_REAL(__iec_)
       
   333 #undef __iec_
       
   334 
       
   335   /**************/
       
   336   /*     EXP    */
       
   337   /**************/
       
   338 #define __iec_(TYPENAME) \
       
   339 __function_1p(EXP_##TYPENAME, TYPENAME, IN, TYPENAME)  /* explicitly typed function */\
       
   340 __function_1p(EXP, TYPENAME, IN, TYPENAME)             /* overloaded function */ 
       
   341 __ANY_REAL(__iec_)
       
   342 #undef __iec_
       
   343 
       
   344   /**************/
       
   345   /*     SIN    */
       
   346   /**************/
       
   347 #define __iec_(TYPENAME) \
       
   348 __function_1p(SIN_##TYPENAME, TYPENAME, IN, TYPENAME)  /* explicitly typed function */\
       
   349 __function_1p(SIN, TYPENAME, IN, TYPENAME)             /* overloaded function */ 
       
   350 __ANY_REAL(__iec_)
       
   351 #undef __iec_
       
   352 
       
   353   /**************/
       
   354   /*     COS    */
       
   355   /**************/
       
   356 #define __iec_(TYPENAME) \
       
   357 __function_1p(COS_##TYPENAME, TYPENAME, IN, TYPENAME)  /* explicitly typed function */\
       
   358 __function_1p(COS, TYPENAME, IN, TYPENAME)             /* overloaded function */ 
       
   359 __ANY_REAL(__iec_)
       
   360 #undef __iec_
       
   361 
       
   362   /**************/
       
   363   /*     TAN    */
       
   364   /**************/
       
   365 #define __iec_(TYPENAME) \
       
   366 __function_1p(TAN_##TYPENAME, TYPENAME, IN, TYPENAME)  /* explicitly typed function */\
       
   367 __function_1p(TAN, TYPENAME, IN, TYPENAME)             /* overloaded function */ 
       
   368 __ANY_REAL(__iec_)
       
   369 #undef __iec_
       
   370 
       
   371   /**************/
       
   372   /*    ASIN    */
       
   373   /**************/
       
   374 #define __iec_(TYPENAME) \
       
   375 __function_1p(ASIN_##TYPENAME, TYPENAME, IN, TYPENAME)  /* explicitly typed function */\
       
   376 __function_1p(ASIN, TYPENAME, IN, TYPENAME)             /* overloaded function */ 
       
   377 __ANY_REAL(__iec_)
       
   378 #undef __iec_
       
   379 
       
   380   /**************/
       
   381   /*    ACOS    */
       
   382   /**************/
       
   383 #define __iec_(TYPENAME) \
       
   384 __function_1p(ACOS_##TYPENAME, TYPENAME, IN, TYPENAME)  /* explicitly typed function */\
       
   385 __function_1p(ACOS, TYPENAME, IN, TYPENAME)             /* overloaded function */ 
       
   386 __ANY_REAL(__iec_)
       
   387 #undef __iec_
       
   388 
       
   389   /**************/
       
   390   /*    ATAN    */
       
   391   /**************/
       
   392 #define __iec_(TYPENAME) \
       
   393 __function_1p(ATAN_##TYPENAME, TYPENAME, IN, TYPENAME)  /* explicitly typed function */\
       
   394 __function_1p(ATAN, TYPENAME, IN, TYPENAME)             /* overloaded function */ 
       
   395 __ANY_REAL(__iec_)
       
   396 #undef __iec_
       
   397 
       
   398 
       
   399 
       
   400 /*****************************************************/
       
   401 /***   Table 24 - Standard arithmetic functions    ***/
       
   402 /*****************************************************/
       
   403 
       
   404 #define __arith_expand(fname,TYPENAME) \
       
   405 __function_1e(fname##_##TYPENAME, TYPENAME, IN, TYPENAME, 1)     /* explicitly typed function */\
       
   406 __function_1e(fname, TYPENAME, IN, TYPENAME, 1)                  /* overloaded function */ 
       
   407 
       
   408 
       
   409 #define __arith_static(fname,TYPENAME) \
       
   410 __function_1p(fname##_##TYPENAME, TYPENAME, IN, TYPENAME)  /* explicitly typed function */\
       
   411 __function_1p(fname, TYPENAME, IN, TYPENAME)               /* overloaded function */ 
       
   412 
       
   413   /**************/
       
   414   /*     ADD    */
       
   415   /**************/
       
   416 #define __iec_(TYPENAME) __arith_expand(ADD, TYPENAME)
       
   417 __ANY_NUM(__iec_)
       
   418 #undef __iec_
       
   419 
       
   420   /**************/
       
   421   /*     MUL    */
       
   422   /**************/
       
   423 #define __iec_(TYPENAME) __arith_expand(MUL, TYPENAME)
       
   424 __ANY_NUM(__iec_)
       
   425 #undef __iec_
       
   426 
       
   427   /**************/
       
   428   /*     SUB    */
       
   429   /**************/
       
   430 #define __iec_(TYPENAME) __arith_static(SUB, TYPENAME)
       
   431 __ANY_NUM(__iec_)
       
   432 #undef __iec_
       
   433 
       
   434   /**************/
       
   435   /*     DIV    */
       
   436   /**************/
       
   437 #define __iec_(TYPENAME)\
       
   438 __function_2p(DIV_##TYPENAME, TYPENAME, IN1, TYPENAME, IN2, TYPENAME)  /* explicitly typed function */\
       
   439 __function_2p(DIV, TYPENAME, IN1, TYPENAME, IN2, TYPENAME)             /* overloaded function */ 
       
   440 __ANY_NUM(__iec_)
       
   441 #undef __iec_
       
   442 
       
   443   /**************/
       
   444   /*     MOD    */
       
   445   /**************/
       
   446 #ifdef __DEFINE_CLASHING_FUNCTIONS  
       
   447 #define __iec_(TYPENAME)\
       
   448 __function_2p(MOD_##TYPENAME, TYPENAME, IN1, TYPENAME, IN2, TYPENAME)  /* explicitly typed function */\
       
   449 __function_2p(MOD, TYPENAME, IN1, TYPENAME, IN2, TYPENAME)             /* overloaded function */ 
       
   450 __ANY_INT(__iec_)
       
   451 #undef __iec_
       
   452 #endif
       
   453 
       
   454   /**************/
       
   455   /*    EXPT    */
       
   456   /**************/
       
   457 #define __in1_anyreal_(in2_TYPENAME)   __ANY_REAL_1(__iec_,in2_TYPENAME)
       
   458 #define __iec_(in1_TYPENAME,in2_TYPENAME) \
       
   459 __function_2p(EXPT, in1_TYPENAME, IN1, in1_TYPENAME, IN2, in2_TYPENAME)             /* overloaded function */ 
       
   460 __ANY_NUM(__in1_anyreal_)
       
   461 #undef __iec_
       
   462 
       
   463   /***************/
       
   464   /*     MOVE    */
       
   465   /***************/
       
   466 #define __iec_(TYPENAME) __arith_static(MOVE, TYPENAME)
       
   467 __ANY(__iec_)
       
   468 #undef __iec_
       
   469 
       
   470 
       
   471 
       
   472 
       
   473 /***********************************/  
       
   474 /***********************************/  
       
   475 /*  2.5.1.5.3 Bit String Functions */
       
   476 /***********************************/  
       
   477 /***********************************/  
       
   478 
       
   479 /****************************************************/
       
   480 /***   Table 25 - Standard bit shift functions    ***/
       
   481 /****************************************************/
       
   482 /* We do not delcare explcitly typed versions of the functions in table 29.
       
   483  * See note at top of this file regarding explicitly typed functions for more details.
       
   484  */
       
   485 #define __in1_anybit_(in2_TYPENAME)   __ANY_BIT_1(__iec_,in2_TYPENAME)
       
   486 
       
   487 
       
   488   /**************/
       
   489   /*     SHL    */
       
   490   /**************/
       
   491 #define __iec_(in1_TYPENAME,in2_TYPENAME) __function_2p(SHL, in1_TYPENAME, IN, in1_TYPENAME, N, in2_TYPENAME)             /* overloaded function */ 
       
   492 __ANY_INT(__in1_anybit_)
       
   493 #undef __iec_
       
   494 
       
   495   /**************/
       
   496   /*     SHR    */
       
   497   /**************/
       
   498 #define __iec_(in1_TYPENAME,in2_TYPENAME) __function_2p(SHR, in1_TYPENAME, IN, in1_TYPENAME, N, in2_TYPENAME)             /* overloaded function */ 
       
   499 __ANY_INT(__in1_anybit_)
       
   500 #undef __iec_
       
   501 
       
   502   /**************/
       
   503   /*     ROR    */
       
   504   /**************/
       
   505 #define __iec_(in1_TYPENAME,in2_TYPENAME) __function_2p(ROR, in1_TYPENAME, IN, in1_TYPENAME, N, in2_TYPENAME)             /* overloaded function */ 
       
   506 __ANY_INT(__in1_anybit_)
       
   507 #undef __iec_
       
   508 
       
   509   /**************/
       
   510   /*     ROL    */
       
   511   /**************/
       
   512 #define __iec_(in1_TYPENAME,in2_TYPENAME) __function_2p(ROL, in1_TYPENAME, IN, in1_TYPENAME, N, in2_TYPENAME)             /* overloaded function */ 
       
   513 __ANY_INT(__in1_anybit_)
       
   514 #undef __iec_
       
   515 
       
   516 
       
   517 
       
   518 /*********************/
       
   519 /***   Table 26    ***/
       
   520 /*********************/
       
   521 
       
   522   /**************/
       
   523   /*     AND    */
       
   524   /**************/
       
   525 #ifdef __DEFINE_CLASHING_FUNCTIONS  
       
   526 #define __iec_(TYPENAME) \
       
   527 __function_1e(AND, TYPENAME, IN, TYPENAME, 1)                /* overloaded function */ \
       
   528 __function_1e(AND_##TYPENAME, TYPENAME, IN, TYPENAME, 1)     /* explicitly typed function */ 
       
   529 __ANY_BIT(__iec_)
       
   530 #undef __iec_
       
   531 #endif
       
   532 
       
   533   /*************/
       
   534   /*     OR    */
       
   535   /*************/
       
   536 #ifdef __DEFINE_CLASHING_FUNCTIONS  
       
   537 #define __iec_(TYPENAME) \
       
   538 __function_1e(OR, TYPENAME, IN, TYPENAME, 1)                /* overloaded function */ \
       
   539 __function_1e(OR_##TYPENAME, TYPENAME, IN, TYPENAME, 1)     /* explicitly typed function */ 
       
   540 __ANY_BIT(__iec_)
       
   541 #undef __iec_
       
   542 #endif
       
   543 
       
   544   /**************/
       
   545   /*     XOR    */
       
   546   /**************/
       
   547 #ifdef __DEFINE_CLASHING_FUNCTIONS  
       
   548 #define __iec_(TYPENAME) \
       
   549 __function_1e(XOR, TYPENAME, IN, TYPENAME, 1)                /* overloaded function */ \
       
   550 __function_1e(XOR_##TYPENAME, TYPENAME, IN, TYPENAME, 1)     /* explicitly typed function */ 
       
   551 __ANY_BIT(__iec_)
       
   552 #undef __iec_
       
   553 #endif
       
   554 
       
   555   /**************/
       
   556   /*     NOT    */
       
   557   /**************/
       
   558 #ifdef __DEFINE_CLASHING_FUNCTIONS  
       
   559 #define __iec_(TYPENAME) \
       
   560 __function_1p(NOT, TYPENAME, IN, TYPENAME)             /* overloaded function */ \
       
   561 __function_1p(NOT_##TYPENAME, TYPENAME, IN, TYPENAME)  /* explicitly typed function */ 
       
   562 __ANY_BIT(__iec_)
       
   563 #undef __iec_
       
   564 #endif
       
   565 
       
   566 
       
   567 
       
   568 
       
   569 
       
   570 
       
   571 /***************************************************/  
       
   572 /***************************************************/  
       
   573 /*  2.5.1.5.4  Selection and comparison Functions  */
       
   574 /***************************************************/  
       
   575 /***************************************************/  
       
   576 
       
   577 /*********************/
       
   578 /***   Table 27    ***/
       
   579 /*********************/
       
   580 
       
   581     /**************/
       
   582     /*    SEL     */
       
   583     /**************/
       
   584 /* The standard states that the inputs for SEL and MUX must be named starting off from 0,
       
   585  * unlike remaining functions, that start off at 1.
       
   586  */
       
   587 #define __iec_(TYPENAME) \
       
   588 __function_3p(SEL, TYPENAME, G, BOOL, IN0, TYPENAME, IN1, TYPENAME)             /* overloaded function */ \
       
   589 __function_3p(SEL_##TYPENAME, TYPENAME, G, BOOL, IN0, TYPENAME, IN1, TYPENAME)  /* explicitly typed function */ 
       
   590 __ANY(__iec_)
       
   591 #undef __iec_
       
   592 
       
   593     /**************/
       
   594     /*     MAX    */
       
   595     /**************/
       
   596 /* Should be for: ANY_ELEMENTARY, but we currently do not support WSTRING yet... */
       
   597 /* However, we can call __ANY_ELEMENTARY since the __ANY_STRING macro does not call DO(WSTRING) */
       
   598 #define __iec_(TYPENAME) \
       
   599 __function_1e(MAX, TYPENAME, IN, TYPENAME, 1)             /* overloaded function */ \
       
   600 __function_1e(MAX_##TYPENAME, TYPENAME, IN, TYPENAME, 1)  /* explicitly typed function */ 
       
   601 __ANY_ELEMENTARY(__iec_)
       
   602 #undef __iec_
       
   603 
       
   604     /**************/
       
   605     /*     MIN    */
       
   606     /**************/
       
   607 /* Should be for: ANY_ELEMENTARY, but we currently do not support WSTRING yet... */
       
   608 /* However, we can call __ANY_ELEMENTARY since the __ANY_STRING macro does not call DO(WSTRING) */
       
   609 #define __iec_(TYPENAME) \
       
   610 __function_1e(MIN, TYPENAME, IN, TYPENAME, 1)             /* overloaded function */ \
       
   611 __function_1e(MIN_##TYPENAME, TYPENAME, IN, TYPENAME, 1)  /* explicitly typed function */ 
       
   612 __ANY_ELEMENTARY(__iec_)
       
   613 #undef __iec_
       
   614 
       
   615     /**************/
       
   616     /*   LIMIT    */
       
   617     /**************/
       
   618 /* Should be for: ANY_ELEMENTARY, but we currently do not support WSTRING yet... */
       
   619 /* However, we can call __ANY_ELEMENTARY since the __ANY_STRING macro does not call DO(WSTRING) */
       
   620 #define __iec_(TYPENAME) \
       
   621 __function_3p(LIMIT, TYPENAME, MN, TYPENAME, IN, TYPENAME, MX, TYPENAME)             /* overloaded function */ \
       
   622 __function_3p(LIMIT_##TYPENAME, TYPENAME, MN, TYPENAME, IN, TYPENAME, MX, TYPENAME)  /* explicitly typed function */ 
       
   623 __ANY_ELEMENTARY(__iec_)
       
   624 #undef __iec_
       
   625 
       
   626     /**************/
       
   627     /*     MUX    */
       
   628     /**************/
       
   629 /* The standard states that the inputs for SEL and MUX must be named starting off from 0,
       
   630  * unlike remaining functions, that start off at 1.
       
   631  */
       
   632 /* The standard considers the explicit typing of MUX function as a special case... 
       
   633  * It should look like: 
       
   634  *         MUX_SINT_REAL, MUX_SINT_STRING, MUX_SINT_[ANY]
       
   635  *         MUX_INT_REAL,  MUX_INT_STRING,  MUX_INT_[ANY]
       
   636  *         MUX_[ANY_INT]_[ANY]
       
   637  */
       
   638 #define __in1_anyint_(in2_TYPENAME)   __ANY_INT_1(__iec_,in2_TYPENAME)
       
   639 #define __iec_(in1_TYPENAME,in2_TYPENAME) \
       
   640 __function_2e(MUX, in2_TYPENAME, K, in1_TYPENAME, IN, in2_TYPENAME, 0)                                  /* overloaded function */ \
       
   641 __function_2e(MUX_##in1_TYPENAME##_##in2_TYPENAME, in2_TYPENAME, K, in1_TYPENAME, IN, in2_TYPENAME, 0)  /* explicitly typed function */ 
       
   642 __ANY(__in1_anyint_)
       
   643 #undef __iec_
       
   644 
       
   645 
       
   646 
       
   647 /******************************************/
       
   648 /***             Table 28               ***/
       
   649 /***   Standard comparison functions    ***/
       
   650 /******************************************/
       
   651 
       
   652     /**************/
       
   653     /*     GT     */
       
   654     /**************/
       
   655 /* Should be for: ANY_ELEMENTARY, but we currently do not support WSTRING yet... */
       
   656 /* However, we can call __ANY_ELEMENTARY since the __ANY_STRING macro does not call DO(WSTRING) */
       
   657 #define __iec_(TYPENAME) \
       
   658 __function_1e(GT, BOOL, IN, TYPENAME, 1)             /* overloaded function */ \
       
   659 __function_1e(GT_##TYPENAME, BOOL, IN, TYPENAME, 1)  /* explicitly typed function */ 
       
   660 __ANY_ELEMENTARY(__iec_)
       
   661 #undef __iec_
       
   662 
       
   663     /**************/
       
   664     /*     GE     */
       
   665     /**************/
       
   666 /* Should be for: ANY_ELEMENTARY, but we currently do not support WSTRING yet... */
       
   667 /* However, we can call __ANY_ELEMENTARY since the __ANY_STRING macro does not call DO(WSTRING) */
       
   668 #define __iec_(TYPENAME) \
       
   669 __function_1e(GE, BOOL, IN, TYPENAME, 1)             /* overloaded function */ \
       
   670 __function_1e(GE_##TYPENAME, BOOL, IN, TYPENAME, 1)  /* explicitly typed function */ 
       
   671 __ANY_ELEMENTARY(__iec_)
       
   672 #undef __iec_
       
   673 
       
   674     /**************/
       
   675     /*     EQ     */
       
   676     /**************/
       
   677 /* Should be for: ANY_ELEMENTARY, but we currently do not support WSTRING yet... */
       
   678 /* However, we can call __ANY_ELEMENTARY since the __ANY_STRING macro does not call DO(WSTRING) */
       
   679 #define __iec_(TYPENAME) \
       
   680 __function_1e(EQ, BOOL, IN, TYPENAME, 1)             /* overloaded function */ \
       
   681 __function_1e(EQ_##TYPENAME, BOOL, IN, TYPENAME, 1)  /* explicitly typed function */ 
       
   682 __ANY_ELEMENTARY(__iec_)
       
   683 #undef __iec_
       
   684 
       
   685     /**************/
       
   686     /*     LT     */
       
   687     /**************/
       
   688 /* Should be for: ANY_ELEMENTARY, but we currently do not support WSTRING yet... */
       
   689 /* However, we can call __ANY_ELEMENTARY since the __ANY_STRING macro does not call DO(WSTRING) */
       
   690 #define __iec_(TYPENAME) \
       
   691 __function_1e(LT, BOOL, IN, TYPENAME, 1)             /* overloaded function */ \
       
   692 __function_1e(LT_##TYPENAME, BOOL, IN, TYPENAME, 1)  /* explicitly typed function */ 
       
   693 __ANY_ELEMENTARY(__iec_)
       
   694 #undef __iec_
       
   695 
       
   696     /**************/
       
   697     /*     LE     */
       
   698     /**************/
       
   699 /* Should be for: ANY_ELEMENTARY, but we currently do not support WSTRING yet... */
       
   700 /* However, we can call __ANY_ELEMENTARY since the __ANY_STRING macro does not call DO(WSTRING) */
       
   701 #define __iec_(TYPENAME) \
       
   702 __function_1e(LE, BOOL, IN, TYPENAME, 1)             /* overloaded function */ \
       
   703 __function_1e(LE_##TYPENAME, BOOL, IN, TYPENAME, 1)  /* explicitly typed function */ 
       
   704 __ANY_ELEMENTARY(__iec_)
       
   705 #undef __iec_
       
   706 
       
   707     /**************/
       
   708     /*     NE     */
       
   709     /**************/
       
   710 /* Should be for: ANY_ELEMENTARY, but we currently do not support WSTRING yet... */
       
   711 /* However, we can call __ANY_ELEMENTARY since the __ANY_STRING macro does not call DO(WSTRING) */
       
   712 #define __iec_(TYPENAME) \
       
   713 __function_1e(NE, BOOL, IN, TYPENAME, 1)             /* overloaded function */ \
       
   714 __function_1e(NE_##TYPENAME, BOOL, IN, TYPENAME, 1)  /* explicitly typed function */ 
       
   715 __ANY_ELEMENTARY(__iec_)
       
   716 #undef __iec_
       
   717 
       
   718 
       
   719 
       
   720 /*********************************************/  
       
   721 /*********************************************/  
       
   722 /*  2.5.1.5.5   Character string  Functions  */
       
   723 /*********************************************/  
       
   724 /*********************************************/  
       
   725 
       
   726 /*************************************/
       
   727 /***           Table 29            ***/
       
   728 /***  Character string  Functions  ***/
       
   729 /*************************************/
       
   730 
       
   731 /* We do not delcare explcitly typed versions of the functions in table 29.
       
   732  * See note at top of this file regarding explicitly typed functions for more details.
       
   733  */
       
   734  
       
   735 #define __A_anyint_(B_TYPENAME)   __ANY_INT_1(__iec_,B_TYPENAME)
       
   736 
       
   737 
       
   738 
       
   739     /***************/
       
   740     /*     LEN     */
       
   741     /***************/
       
   742 #define __iec_(A_TYPENAME,B_TYPENAME) \
       
   743 __function_1p(LEN, A_TYPENAME, IN, B_TYPENAME)                                  /* overloaded function */ 
       
   744 __ANY_STRING(__A_anyint_)
       
   745 #undef __iec_
       
   746 
       
   747 
       
   748     /****************/
       
   749     /*     LEFT     */
       
   750     /****************/
       
   751 #define __iec_(A_TYPENAME,B_TYPENAME) \
       
   752 __function_2p(LEFT, B_TYPENAME, IN, B_TYPENAME, L, A_TYPENAME)                  /* overloaded function */ 
       
   753 __ANY_STRING(__A_anyint_)
       
   754 #undef __iec_
       
   755 
       
   756 
       
   757     /*****************/
       
   758     /*     RIGHT     */
       
   759     /*****************/
       
   760 #define __iec_(A_TYPENAME,B_TYPENAME) \
       
   761 __function_2p(RIGHT, B_TYPENAME, IN, B_TYPENAME, L, A_TYPENAME)                 /* overloaded function */ 
       
   762 __ANY_STRING(__A_anyint_)
       
   763 #undef __iec_
       
   764 
       
   765 
       
   766     /***************/
       
   767     /*     MID     */
       
   768     /***************/
       
   769 #define __iec_(A_TYPENAME,B_TYPENAME) \
       
   770 __function_3p(MID, B_TYPENAME, IN, B_TYPENAME, L, A_TYPENAME, P, A_TYPENAME)    /* overloaded function */ 
       
   771 __ANY_STRING(__A_anyint_)
       
   772 #undef __iec_
       
   773 
       
   774 
       
   775     /******************/
       
   776     /*     CONCAT     */
       
   777     /******************/
       
   778 #define __iec_(TYPENAME) \
       
   779 __function_1e(CONCAT, TYPENAME, IN, TYPENAME, 1)    /* overloaded function */ 
       
   780 __ANY_STRING(__iec_)
       
   781 #undef __iec_
       
   782 
       
   783 
       
   784     /******************/
       
   785     /*     INSERT     */
       
   786     /******************/
       
   787 #define __iec_(A_TYPENAME,B_TYPENAME) \
       
   788 __function_3p(INSERT, B_TYPENAME, IN1, B_TYPENAME, IN2, B_TYPENAME, P, A_TYPENAME)    /* overloaded function */ 
       
   789 __ANY_STRING(__A_anyint_)
       
   790 #undef __iec_
       
   791 
       
   792 
       
   793     /******************/
       
   794     /*     DELETE     */
       
   795     /******************/
       
   796 #define __iec_(A_TYPENAME,B_TYPENAME) \
       
   797 __function_3p(DELETE, B_TYPENAME, IN, B_TYPENAME, L, A_TYPENAME, P, A_TYPENAME)    /* overloaded function */ 
       
   798 __ANY_STRING(__A_anyint_)
       
   799 #undef __iec_
       
   800 
       
   801 
       
   802     /*******************/
       
   803     /*     REPLACE     */
       
   804     /*******************/
       
   805 #define __iec_(A_TYPENAME,B_TYPENAME) \
       
   806 __function_4p(REPLACE, B_TYPENAME, IN1, B_TYPENAME, IN2, B_TYPENAME, L, A_TYPENAME, P, A_TYPENAME)    /* overloaded function */ 
       
   807 __ANY_STRING(__A_anyint_)
       
   808 #undef __iec_
       
   809 
       
   810 
       
   811     /****************/
       
   812     /*     FIND     */
       
   813     /****************/
       
   814 #define __iec_(A_TYPENAME,B_TYPENAME) \
       
   815 __function_2p(FIND, A_TYPENAME, IN1, B_TYPENAME, IN2, B_TYPENAME)                 /* overloaded function */ 
       
   816 __ANY_STRING(__A_anyint_)
       
   817 #undef __iec_
       
   818 
       
   819 
       
   820 /*********************************************/  
       
   821 /*********************************************/  
       
   822 /*  2.5.1.5.6  Functions of time data types  */
       
   823 /*********************************************/  
       
   824 /*********************************************/  
       
   825 
       
   826 /**************************************/
       
   827 /***           Table 30             ***/
       
   828 /***  Functions of time data types  ***/
       
   829 /**************************************/
       
   830 
       
   831 __function_2p(ADD_TIME, TIME, IN1, TIME, IN2, TIME)
       
   832 __function_2p(ADD_TOD_TIME, TOD, IN1, TOD, IN2, TIME)
       
   833 __function_2p(ADD_DT_TIME, DT, IN1, DT, IN2, TIME)
       
   834 
       
   835 __function_2p(SUB_TIME, TIME, IN1, TIME, IN2, TIME)
       
   836 __function_2p(SUB_DATE_DATE, TIME, IN1, DATE, IN2, DATE)
       
   837 __function_2p(SUB_TOD_TIME, TOD, IN1, TOD, IN2, TIME)
       
   838 __function_2p(SUB_TOD_TOD, TIME, IN1, TOD, IN2, TOD)
       
   839 __function_2p(SUB_DT_TIME, DT, IN1, DT, IN2, TIME)
       
   840 __function_2p(SUB_DT_DT, TIME, IN1, DT, IN2, DT)
       
   841 
       
   842 
       
   843 /***  MULTIME  ***/
       
   844 #define __iec_(TYPENAME) \
       
   845 __function_2p(MULTIME_##TYPENAME, TIME, IN1, TIME, IN2, TYPENAME)    /* explicitly typed function */\
       
   846 __function_2p(MULTIME, TIME, IN1, TIME, IN2, TYPENAME)               /* overloaded function */ 
       
   847 __ANY_NUM(__iec_)
       
   848 #undef __iec_
       
   849 
       
   850 /***  MUL  ***/
       
   851 /* NOTE: We can not include the explicitly typed function
       
   852  * __function_2p(DIV_##TYPENAME, TIME, IN1, TIME, IN2, TYPENAME)    
       
   853  * as it would clash with another function with the exact same name declared above
       
   854  * __function_2p(DIV_##TYPENAME, TYPENAME, IN1, TYPENAME, IN2, TYPENAME)
       
   855  * and the standard does not define this explicitly defined function as being overloaded 
       
   856  * (i.e. having an ANY_***) input or output parameter
       
   857  * Note that our compiler would nevertheless work just fine with this overloaded declaration.
       
   858  */
       
   859 #define __iec_(TYPENAME) \
       
   860 __function_2p(MUL, TIME, IN1, TIME, IN2, TYPENAME)               /* overloaded function */ 
       
   861 __ANY_NUM(__iec_)
       
   862 #undef __iec_
       
   863 
       
   864 /***  DIVTIME  ***/
       
   865 #define __iec_(TYPENAME) \
       
   866 __function_2p(DIVTIME_##TYPENAME, TIME, IN1, TIME, IN2, TYPENAME)    /* explicitly typed function */\
       
   867 __function_2p(DIVTIME, TIME, IN1, TIME, IN2, TYPENAME)               /* overloaded function */ 
       
   868 __ANY_NUM(__iec_)
       
   869 #undef __iec_
       
   870 
       
   871 /***  DIV  ***/
       
   872 /* NOTE: We can not include the explicitly typed function
       
   873  * __function_2p(DIV_##TYPENAME, TIME, IN1, TIME, IN2, TYPENAME)    
       
   874  * as it would clash with another function with the exact same name declared above
       
   875  * __function_2p(DIV_##TYPENAME, TYPENAME, IN1, TYPENAME, IN2, TYPENAME)
       
   876  * and the standard does not define this explicitly defined function as being overloaded 
       
   877  * (i.e. having an ANY_***) input or output parameter
       
   878  * Note that our compiler would nevertheless work just fine with this overloaded declaration.
       
   879  */
       
   880 #define __iec_(TYPENAME) \
       
   881 __function_2p(DIV, TIME, IN1, TIME, IN2, TYPENAME)               /* overloaded function */ 
       
   882 __ANY_NUM(__iec_)
       
   883 #undef __iec_
       
   884 
       
   885 
       
   886 /*** CONCAT_DATE_TOD ***/
       
   887 __function_2p(CONCAT_DATE_TOD, DT, IN1, DATE, IN2, TOD)
       
   888 
       
   889 
       
   890 
       
   891 
       
   892 /****************************************************/  
       
   893 /****************************************************/  
       
   894 /*  2.5.1.5.6   Functions of enumerated data types  */
       
   895 /****************************************************/  
       
   896 /****************************************************/  
       
   897 
       
   898 /********************************************/
       
   899 /***              Table 31                ***/
       
   900 /***  Functions of enumerated data types  ***/
       
   901 /********************************************/
       
   902 
       
   903 /* Do we support this? */
       
   904 
       
   905 END
       
   906 
       
   907 echo "{enable code generation}"
       
   908 echo