#include <ctype.h> #include <sys/types.h> #include <stdio.h> #include <syslog.h> #include "define.h" #include "struct.h" /* * RECURSIVE SEARCH FUNCTIONS */ bool search_oload( arg_type* arg, int vnum ) { struct aif_type* aif; struct afunc_type* afunc; int i; if( arg == NULL ) return FALSE; if( arg->family == if_clause ) { aif = (aif_type*) arg; if( search_oload( aif->yes, vnum ) || search_oload( aif->no, vnum ) || search_oload( aif->condition, vnum ) ) return TRUE; } if( arg->family == function ) { afunc = (afunc_type*) arg; if( afunc->func->func_call == &code_oload && afunc->arg[0] != NULL ) { if( int( afunc->arg[0]->value ) == vnum ) return TRUE; } for( i = 0; i < 4 && afunc->arg[i] != NULL; i++ ) if( search_oload( afunc->arg[i], vnum ) ) return TRUE; } return search_oload( arg->next, vnum ); } bool search_mload( arg_type *arg, int vnum ) { aif_type* aif; afunc_type* afunc; int i; if( arg == NULL ) return FALSE; if( arg->family == if_clause ) { aif = (aif_type*) arg; if( search_mload( aif->yes, vnum ) || search_mload( aif->no, vnum ) || search_mload( aif->condition, vnum ) ) return TRUE; } if( arg->family == function ) { afunc = (afunc_type*) arg; if( afunc->func->func_call == &code_mload && afunc->arg[0] != NULL ) { if( int( afunc->arg[0]->value ) == vnum ) return TRUE; } for( i = 0; i < 4 && afunc->arg[i] != NULL; i++ ) if( search_mload( afunc->arg[i], vnum ) ) return TRUE; } return search_mload( arg->next, vnum ); } bool search_quest( arg_type* arg, int vnum ) { aif_type* aif; afunc_type* afunc; int i; if( arg == NULL ) return FALSE; if( arg->family == if_clause ) { aif = (aif_type*) arg; if( search_quest( aif->yes, vnum ) || search_quest( aif->no, vnum ) || search_quest( aif->condition, vnum ) ) return TRUE; } if( arg->family == function ) { afunc = (afunc_type*) arg; if( ( afunc->func->func_call == &code_assign_quest || afunc->func->func_call == &code_update_quest || afunc->func->func_call == &code_has_quest || afunc->func->func_call == &code_doing_quest || afunc->func->func_call == &code_done_quest ) && afunc->arg[1] != NULL ) { if( int( afunc->arg[1]->value ) == vnum ) return TRUE; } for( i = 0; i < 4 && afunc->arg[i] != NULL; i++ ) if( search_quest( afunc->arg[i], vnum ) ) return TRUE; } return search_quest( arg->next, vnum ); }