Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-02-21 10:05:33

0001 /*
0002  *  qp_exev_op_cmp.h  --
0003  *
0004  *  Original: 23-Jan-1995 17:17
0005  *
0006  *  Author:   Maarten Ballintijn <Maarten.Ballintijn@cern.ch>
0007  *
0008  *  $Id$
0009  *
0010  *  $Log$
0011  *  Revision 1.4  1996/04/23 18:38:40  maartenb
0012  *  - Add RCS keywords
0013  *
0014  *
0015  */
0016 
0017 case FC_LT + (D_STR * 64):
0018 case FC_LE + (D_STR * 64):
0019 case FC_GT + (D_STR * 64):
0020 case FC_GE + (D_STR * 64):
0021 case FC_EQ + (D_STR * 64):
0022 case FC_NE + (D_STR * 64):
0023 case FC_CT + (D_STR * 64):
0024 {
0025     char        tmp1[QP_STR_MAX], tmp2[QP_STR_MAX];
0026     int     i, n = 1, d;
0027 
0028     if ( frame_size[framep] != 1 ) {
0029         o1 = &stack[frame[framep]];
0030         inc_o1 = datatype_size[D_STR];
0031         n = frame_size[framep];
0032     } else {
0033         strncpy( tmp1, (char *) &stack[frame[framep]], QP_STR_MAX );
0034         o1 = (Int32 *) tmp1;
0035         inc_o1 = 0;
0036     }
0037     if ( frame_size[framep-1] != 1 ) {
0038         o2 = &stack[frame[framep-1]];
0039         inc_o2 = datatype_size[D_STR];
0040         qp_assert( n==1 || n==frame_size[framep-1] );
0041         n = frame_size[framep-1];
0042     } else {
0043         strncpy( tmp2, (char *) &stack[frame[framep-1]], QP_STR_MAX );
0044         o2 = (Int32 *) tmp2;
0045         inc_o2 = 0;
0046     }
0047     POP_FRAME(2);
0048 
0049     NEW_FRAME(D_BOOL,n,r);
0050     inc_r = datatype_size[D_BOOL];
0051 
0052     o1 += inc_o1 * (n-1);
0053     o2 += inc_o2 * (n-1);
0054     r += inc_r * (n-1);
0055     for ( i=0 ; i < n ; i++ ) {
0056 
0057         *((bool *) r) = FALSE;
0058         d = strncasecmp( (char *) o1, (char *) o2, QP_STR_MAX );
0059         switch ( fc ) {
0060         case FC_LT+(D_STR * 64): if ( d < 0 ) *((bool*)r)=TRUE;break;
0061         case FC_LE+(D_STR * 64): if ( d <= 0 ) *((bool*)r)=TRUE;break;
0062         case FC_GT+(D_STR * 64): if ( d > 0 ) *((bool*)r)=TRUE;break;
0063         case FC_GE+(D_STR * 64): if ( d >= 0 ) *((bool*)r)=TRUE;break;
0064         case FC_EQ+(D_STR * 64): if ( d == 0 ) *((bool*)r)=TRUE;break;
0065         case FC_NE+(D_STR * 64): if ( d != 0 ) *((bool*)r)=TRUE;break;
0066         case FC_CT+(D_STR * 64): if ( d == 0 ) *((bool*)r)=TRUE;break;
0067         }
0068 
0069         o1 -= inc_o1;
0070         o2 -= inc_o2;
0071         r -= inc_r;
0072     }
0073     break;
0074 }
0075 
0076 
0077 
0078 /*
0079  *  Combine these entries to shrink the case statement, to avoid 
0080  *  HP-C case statement bug :-(
0081  */
0082 case FC_LTLT + (D_STR * 64):
0083 case FC_LTLE + (D_STR * 64):
0084 case FC_LELT + (D_STR * 64):
0085 case FC_LELE + (D_STR * 64):
0086 case FC_GTGT + (D_STR * 64):
0087 case FC_GTGE + (D_STR * 64):
0088 case FC_GEGT + (D_STR * 64):
0089 case FC_GEGE + (D_STR * 64):
0090 {
0091     char        tmp1[QP_STR_MAX], tmp2[QP_STR_MAX], tmp3[QP_STR_MAX];
0092     int     i, n = 1;
0093 
0094     if ( frame_size[framep] != 1 ) {
0095         o1 = &stack[frame[framep]];
0096         inc_o1 = datatype_size[D_STR];
0097         n = frame_size[framep];
0098     } else {
0099         strncpy( tmp1, (char *) &stack[frame[framep]], QP_STR_MAX );
0100         o1 = (Int32 *) tmp1;
0101         inc_o1 = 0;
0102     }
0103     if ( frame_size[framep-1] != 1 ) {
0104         o2 = &stack[frame[framep-1]];
0105         inc_o2 = datatype_size[D_STR];
0106         qp_assert( n==1 || n==frame_size[framep-1] );
0107         n = frame_size[framep-1];
0108     } else {
0109         strncpy( tmp2, (char *) &stack[frame[framep-1]], QP_STR_MAX );
0110         o2 = (Int32 *) tmp2;
0111         inc_o2 = 0;
0112     }
0113     if ( frame_size[framep-2] != 1 ) {
0114         o3 = &stack[frame[framep-2]];
0115         inc_o3 = datatype_size[D_STR];
0116         qp_assert( n==1 || n==frame_size[framep-2] );
0117         n = frame_size[framep-2];
0118     } else {
0119         strncpy( tmp3, (char *) &stack[frame[framep-2]], QP_STR_MAX );
0120         o3 = (Int32 *) tmp3;
0121         inc_o3 = 0;
0122     }
0123     POP_FRAME(3);
0124 
0125     NEW_FRAME(D_BOOL,n,r);
0126     inc_r = datatype_size[D_BOOL];
0127 
0128     o1 += inc_o1 * (n-1);
0129     o2 += inc_o2 * (n-1);
0130     o3 += inc_o3 * (n-1);
0131     r += inc_r * (n-1);
0132 
0133     switch ( fc ) {
0134     case FC_LTLT + (D_STR * 64):
0135         for ( i=0 ; i < n ; i++ ) {
0136             if ( (strncasecmp( (char *)o1, (char *)o2, QP_STR_MAX) < 0) &&
0137                 (strncasecmp( (char *)o2, (char *)o3, QP_STR_MAX) < 0)
0138             ) {
0139                 *((bool *) r) = TRUE;
0140             } else {
0141                 *((bool *) r) = FALSE;
0142             }
0143             o1 -= inc_o1; o2 -= inc_o2; o3 -= inc_o3; r -= inc_r;
0144         }
0145         break;
0146     case FC_LTLE + (D_STR * 64):
0147         for ( i=0 ; i < n ; i++ ) {
0148             if ( (strncasecmp( (char *)o1, (char *)o2, QP_STR_MAX) < 0) &&
0149                 (strncasecmp( (char *)o2, (char *)o3, QP_STR_MAX) <= 0)
0150             ) {
0151                 *((bool *) r) = TRUE;
0152             } else {
0153                 *((bool *) r) = FALSE;
0154             }
0155             o1 -= inc_o1; o2 -= inc_o2; o3 -= inc_o3; r -= inc_r;
0156         }
0157         break;
0158     case FC_LELT + (D_STR * 64):
0159         for ( i=0 ; i < n ; i++ ) {
0160             if ( (strncasecmp( (char *)o1, (char *)o2, QP_STR_MAX) <= 0) &&
0161                 (strncasecmp( (char *)o2, (char *)o3, QP_STR_MAX) < 0)
0162             ) {
0163                 *((bool *) r) = TRUE;
0164             } else {
0165                 *((bool *) r) = FALSE;
0166             }
0167             o1 -= inc_o1; o2 -= inc_o2; o3 -= inc_o3; r -= inc_r;
0168         }
0169         break;
0170     case FC_LELE + (D_STR * 64):
0171         for ( i=0 ; i < n ; i++ ) {
0172             if ( (strncasecmp( (char *)o1, (char *)o2, QP_STR_MAX) <= 0) &&
0173                 (strncasecmp( (char *)o2, (char *)o3, QP_STR_MAX) <= 0)
0174             ) {
0175                 *((bool *) r) = TRUE;
0176             } else {
0177                 *((bool *) r) = FALSE;
0178             }
0179             o1 -= inc_o1; o2 -= inc_o2; o3 -= inc_o3; r -= inc_r;
0180         }
0181         break;
0182     case FC_GTGT + (D_STR * 64):
0183         for ( i=0 ; i < n ; i++ ) {
0184             if ( (strncasecmp( (char *)o1, (char *)o2, QP_STR_MAX) > 0) &&
0185                 (strncasecmp( (char *)o2, (char *)o3, QP_STR_MAX) > 0)
0186             ) {
0187                 *((bool *) r) = TRUE;
0188             } else {
0189                 *((bool *) r) = FALSE;
0190             }
0191             o1 -= inc_o1; o2 -= inc_o2; o3 -= inc_o3; r -= inc_r;
0192         }
0193         break;
0194     case FC_GTGE + (D_STR * 64):
0195         for ( i=0 ; i < n ; i++ ) {
0196             if ( (strncasecmp( (char *)o1, (char *)o2, QP_STR_MAX) > 0) &&
0197                 (strncasecmp( (char *)o2, (char *)o3, QP_STR_MAX) >= 0)
0198             ) {
0199                 *((bool *) r) = TRUE;
0200             } else {
0201                 *((bool *) r) = FALSE;
0202             }
0203             o1 -= inc_o1; o2 -= inc_o2; o3 -= inc_o3; r -= inc_r;
0204         }
0205         break;
0206     case FC_GEGT + (D_STR * 64):
0207         for ( i=0 ; i < n ; i++ ) {
0208             if ( (strncasecmp( (char *)o1, (char *)o2, QP_STR_MAX) >= 0) &&
0209                 (strncasecmp( (char *)o2, (char *)o3, QP_STR_MAX) > 0)
0210             ) {
0211                 *((bool *) r) = TRUE;
0212             } else {
0213                 *((bool *) r) = FALSE;
0214             }
0215             o1 -= inc_o1; o2 -= inc_o2; o3 -= inc_o3; r -= inc_r;
0216         }
0217         break;
0218     case FC_GEGE + (D_STR * 64):
0219         for ( i=0 ; i < n ; i++ ) {
0220             if ( (strncasecmp( (char *)o1, (char *)o2, QP_STR_MAX) >= 0) &&
0221                 (strncasecmp( (char *)o2, (char *)o3, QP_STR_MAX) >= 0)
0222             ) {
0223                 *((bool *) r) = TRUE;
0224             } else {
0225                 *((bool *) r) = FALSE;
0226             }
0227             o1 -= inc_o1; o2 -= inc_o2; o3 -= inc_o3; r -= inc_r;
0228         }
0229         break;
0230     default:
0231         qp_assert(0);
0232         break;
0233     }
0234     break;
0235 }
0236 
0237 
0238