Annotation of 43BSDReno/contrib/isode-beta/others/quipu/uips/xd/filt.c, revision 1.1

1.1     ! root        1: 
        !             2: #ifndef lint
        !             3: static char *rcsid = "$Header: /f/osi/others/quipu/uips/xd/RCS/filt.c,v 7.1 90/07/27 08:45:57 mrose Exp $";
        !             4: #endif
        !             5: 
        !             6: /*
        !             7:  * $Header: /f/osi/others/quipu/uips/xd/RCS/filt.c,v 7.1 90/07/27 08:45:57 mrose Exp $
        !             8:  */
        !             9: 
        !            10: /*
        !            11:  * $Log:       filt.c,v $
        !            12:  * Revision 7.1  90/07/27  08:45:57  mrose
        !            13:  * update
        !            14:  * 
        !            15:  * Revision 7.0  90/06/12  13:10:49  mrose
        !            16:  * *** empty log message ***
        !            17:  * 
        !            18:  * Revision 1.5  90/04/26  10:22:40  emsrssn
        !            19:  * Installation fixed
        !            20:  * 
        !            21:  * 
        !            22:  * Revision 1.4  90/04/25  17:28:10  emsrssn
        !            23:  * Lint tidy up
        !            24:  * 
        !            25:  * 
        !            26:  * Revision 1.3  90/04/19  13:54:11  emsrssn
        !            27:  * keyboard accelerator now activates button highlight.
        !            28:  * 
        !            29:  * search types available is dependent on current position
        !            30:  * to prevent unreasonable searches.
        !            31:  * 
        !            32:  * the help popup changes automatically depending on the 
        !            33:  * position of the cursor
        !            34:  * 
        !            35:  * buttons remain a fixed size when the application is
        !            36:  * resized
        !            37:  * 
        !            38:  * command line options are now handled properly
        !            39:  * 
        !            40:  * logging added
        !            41:  * 
        !            42:  * "reads" are now sorted to show mail address at top etc.
        !            43:  * 
        !            44:  * 
        !            45:  * Revision 1.2  90/03/16  11:29:41  emsrdsm
        !            46:  * *** empty log message ***
        !            47:  * 
        !            48:  * Revision 1.1  90/03/09  16:48:58  emsrdsm
        !            49:  * Initial revision
        !            50:  * 
        !            51:  * Revision 1.1  90/03/09  12:10:17  emsrdsm
        !            52:  * Initial revision
        !            53:  * 
        !            54:  * Revision 1.1  90/03/09  11:36:42  emsrdsm
        !            55:  * Initial revision
        !            56:  * 
        !            57:  */
        !            58: 
        !            59: #include "quipu/util.h"
        !            60: #include "quipu/common.h"
        !            61: #include "quipu/entry.h"
        !            62: #include "filt.h"
        !            63: #include "y.tab.h"
        !            64: #include "symtab.h"
        !            65: 
        !            66: extern unsigned int curr_filt;
        !            67: extern unsigned int filt_num;
        !            68: extern unsigned int typeindx;
        !            69: extern filt_struct *filt_arr[];
        !            70: extern char *filtvalue[];
        !            71: extern char *filttype[];
        !            72: extern char *default_arr[];
        !            73: 
        !            74: extern char svalue[], mvalue[];
        !            75: 
        !            76: make_type(name_val, filt)
        !            77: char * name_val;
        !            78: filt_struct * filt;
        !            79: {
        !            80:   filttype[curr_filt] = (char *) malloc((unsigned int) (strlen(name_val) + 1));
        !            81:   (void) strcpy(filttype[curr_filt], name_val);
        !            82:   
        !            83: /*  if (default_val) {
        !            84:     default_arr[curr_filt] = 
        !            85:       (char *) malloc((unsigned int) (strlen(default_val)+1));
        !            86:     (void) strcpy(default_arr[curr_filt], default_val);
        !            87:   } else {
        !            88:     default_arr[curr_filt] = (char *) malloc((unsigned int) 2);
        !            89:     *default_arr[curr_filt] = '\0';
        !            90:   }*/
        !            91:   filt_arr[curr_filt] = filt;
        !            92: }
        !            93: 
        !            94: filt_struct *
        !            95: make_item_filter(oid, match, value)
        !            96: char *oid;
        !            97: int match;
        !            98: char *value;
        !            99: {
        !           100:   register filt_struct * filt = (filt_struct *) malloc(sizeof(filt_struct));
        !           101:   
        !           102:   filt->flt_type = ITEM;
        !           103:   filt->next = 0;
        !           104:   
        !           105:   filt->fu_cont.item.fi_type = match;
        !           106:   filt->fu_cont.item.stroid = 
        !           107:     (char *) malloc((unsigned int) (strlen(oid) + 1));
        !           108:   (void) strcpy(filt->fu_cont.item.stroid, oid);
        !           109:   
        !           110:   if (*value == '*') filt->fu_cont.item.name = (char *) 0;
        !           111:   else {
        !           112:     filt->fu_cont.item.name = 
        !           113:       (char *) malloc((unsigned int) (strlen(value) + 1));
        !           114:     (void) strcpy(filt->fu_cont.item.name, value);
        !           115:   }
        !           116:   return filt;
        !           117: }
        !           118: 
        !           119: filt_struct *
        !           120: link_filters(filt1, filt2)
        !           121: filt_struct *filt1;
        !           122: filt_struct *filt2;
        !           123: {
        !           124:   filt1->next = filt2;
        !           125:   return filt1;
        !           126: }
        !           127: 
        !           128: filt_struct *
        !           129: make_parent_filter(filt_type, filt1, filt2, filt3)
        !           130: int filt_type;
        !           131: filt_struct * filt1;
        !           132: filt_struct * filt2;
        !           133: filt_struct * filt3;
        !           134: {
        !           135:   filt_struct * parent = (filt_struct *) malloc(sizeof(filt_struct));
        !           136: 
        !           137:   switch (filt_type) {
        !           138: 
        !           139:   case NOT:
        !           140:     parent->flt_type = NOT;
        !           141:     parent->fu_cont.sub_filt = filt1;
        !           142:     parent->next = 0;
        !           143:     break;
        !           144: 
        !           145:   case AND:
        !           146:     parent->flt_type = AND;
        !           147:     parent->fu_cont.sub_filt = filt1;
        !           148:     filt1->next = filt2;
        !           149:     filt2->next = filt3;
        !           150:     parent->next = 0;
        !           151:     break;
        !           152: 
        !           153:   default:
        !           154:     parent->flt_type = OR;
        !           155:     parent->fu_cont.sub_filt = filt1;
        !           156:     filt1->next = filt2;
        !           157:     filt2->next = filt3;
        !           158:     parent->next = 0;
        !           159:     break;
        !           160:   }
        !           161: 
        !           162:   return parent;
        !           163: }
        !           164: 
        !           165: free_filt(filt)
        !           166: filt_struct *filt;
        !           167: {
        !           168:   if (filt) {
        !           169:     free_filt(filt->next);
        !           170: 
        !           171:     if (filt->flt_type = ITEM) {
        !           172:       free(filt->fu_cont.item.stroid);
        !           173:       if (filt->fu_cont.item.name) free(filt->fu_cont.item.name);
        !           174:     } else
        !           175:       free_filt(filt->fu_cont.sub_filt);
        !           176: 
        !           177:     free((char *) filt);
        !           178:   } else
        !           179:     return;
        !           180: }
        !           181: 
        !           182: Filter
        !           183: make_filter(filt)
        !           184: filt_struct *filt;
        !           185: {
        !           186:   int type;
        !           187:   Filter rfilt, sfilt = filter_alloc();
        !           188:   
        !           189:   if (!filt)
        !           190:     return 0;
        !           191:   
        !           192:   switch(filt->flt_type) {
        !           193: 
        !           194:   case ITEM:
        !           195:     sfilt->flt_type = FILTER_ITEM;
        !           196:     sfilt->flt_next = make_filter(filt->next);
        !           197:     
        !           198:     (void) strcpy(svalue, (filt->fu_cont.item.name? 
        !           199:                           filt->fu_cont.item.name:
        !           200:                           mvalue));
        !           201:     
        !           202:     type = filt->fu_cont.item.fi_type;
        !           203: 
        !           204:     switch(type) {
        !           205:     case APPROX:
        !           206:     case EQUAL:
        !           207:       sfilt->flt_un.flt_un_item.fi_un.fi_un_ava.ava_type = 
        !           208:        AttrT_new(filt->fu_cont.item.stroid);
        !           209: 
        !           210:       if ((sfilt->flt_un.flt_un_item.fi_un.fi_un_ava.ava_value =
        !           211:           str2AttrV(svalue,
        !           212:                     sfilt->flt_un.flt_un_item.fi_un.fi_un_ava.ava_type->
        !           213:                     oa_syntax)) == NULL) {
        !           214:        
        !           215:        rfilt = sfilt->flt_next;
        !           216:        sfilt->flt_next = NULLFILTER;
        !           217:        filter_free(sfilt);
        !           218:        return rfilt;
        !           219:       }
        !           220: 
        !           221:       if (type == EQUAL)
        !           222:        sfilt->flt_un.flt_un_item.fi_type = FILTERITEM_EQUALITY;
        !           223:       else
        !           224:        sfilt->flt_un.flt_un_item.fi_type = FILTERITEM_APPROX;
        !           225: 
        !           226:       break;
        !           227: 
        !           228:     case SUBSTRING:
        !           229:       sfilt->flt_un.flt_un_item.fi_type = FILTERITEM_SUBSTRINGS;
        !           230:       sfilt->flt_un.flt_un_item.fi_un.fi_un_substrings.fi_sub_type =
        !           231:        AttrT_new(filt->fu_cont.item.stroid);
        !           232:       
        !           233:       sfilt->flt_un.flt_un_item.fi_un.fi_un_substrings.fi_sub_initial =
        !           234:        NULLAV;
        !           235:       sfilt->flt_un.flt_un_item.fi_un.fi_un_substrings.fi_sub_final = 
        !           236:        NULLAV;
        !           237:       sfilt->flt_un.flt_un_item.fi_un.fi_un_substrings.fi_sub_any =
        !           238:        avs_comp_new(str2AttrV(svalue,
        !           239:                               sfilt->flt_un.flt_un_item.fi_un.
        !           240:                               fi_un_substrings.fi_sub_type->
        !           241:                               oa_syntax));
        !           242:       break;
        !           243:       
        !           244:     default:
        !           245:       sfilt->flt_un.flt_un_item.fi_type = FILTERITEM_APPROX;
        !           246:       break;
        !           247:     }
        !           248:     return sfilt;
        !           249: 
        !           250:     
        !           251:   case AND:
        !           252:     sfilt->flt_type = FILTER_AND;
        !           253:     sfilt->flt_un.flt_un_filter = make_filter(filt->fu_cont.sub_filt);
        !           254:     sfilt->flt_next = make_filter(filt->next);
        !           255:     return sfilt;
        !           256: 
        !           257:     
        !           258:   case OR:
        !           259:     sfilt->flt_type = FILTER_OR;
        !           260:     sfilt->flt_un.flt_un_filter = make_filter(filt->fu_cont.sub_filt);
        !           261:     sfilt->flt_next = make_filter(filt->next);
        !           262:     return sfilt;
        !           263: 
        !           264: 
        !           265:   case NOT:
        !           266:     sfilt->flt_type = FILTER_NOT;
        !           267:     sfilt->flt_next = make_filter(filt->next);
        !           268:     sfilt->flt_un.flt_un_filter = make_filter(filt->fu_cont.sub_filt);
        !           269:     return sfilt;
        !           270: 
        !           271: 
        !           272:   default:
        !           273:     return NULLFILTER;
        !           274:   }
        !           275: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.