static void show_panel_stack(const char *s) { Node *np; //Nav_Panel *np_p; Gen_Win *gwp; if( nav_stack == NULL ){ fprintf(stderr,"show_panel_stack: stack is uninitialized!?\n"); return; } fprintf(stderr,"Panel stack:\n"); np = STACK_TOP_NODE(nav_stack); while( np != NO_NODE ){ gwp = NODE_DATA(np); //assert( GW_TYPE(NAVP_GW(np_p)) == GW_NAV_PANEL ); switch( GW_TYPE(gwp) ){ case GW_NAV_PANEL: fprintf(stderr,"\tnav_panel at 0x%lx, name at 0x%lx\n", (long)gwp,(long)GW_NAME(gwp)); fflush(stderr); fprintf(stderr,"\t%s\n",GW_NAME(gwp)); fflush(stderr); break; default: fprintf(stderr, "show_panel_stack, unhandled genwin type %d, at 0x%lx\n", GW_TYPE(gwp),(long)gwp); fprintf(stderr,"\t%s\n",GW_NAME(gwp)); break; } np = NODE_NEXT(np); } fprintf(stderr,"\n"); }
static const char *_hash_tbl_advance_frag_match(QSP_ARG_DECL Frag_Match_Info * fmi_p, int direction ) { Item *ip; List *lp; // there may be no items!? assert( fmi_p != NULL ); lp = FMI_HT_LIST(fmi_p); if( direction == CYC_FORWARD ){ if( CURR_FRAG(fmi_p) == LAST_FRAG(fmi_p) ) return NULL; else { SET_CURR_FRAG(fmi_p, NODE_NEXT( CURR_LIST_FRAG(fmi_p) ) ); assert( CURR_FRAG(fmi_p) != NULL ); } } else { if( CURR_FRAG(fmi_p) == FIRST_FRAG(fmi_p) ) return NULL; else { SET_CURR_FRAG(fmi_p, NODE_PREV( CURR_LIST_FRAG(fmi_p) ) ); assert( CURR_FRAG(fmi_p) != NULL ); } } ip = NODE_DATA( CURR_LIST_FRAG(fmi_p) ); return ip->item_name; }
static void search_list_for_fragment(List *lp, Frag_Match_Info *fmi_p, const char *frag) { int n; Node* np; // we might assert the this frag match is associated with a list container // but we get here from a list-specific function so should be safe... // famous last words? lp = _alpha_sort(DEFAULT_QSP_ARG lp); // BUG should sort in-place??? np = QLIST_HEAD(lp); n = (int) strlen(frag); SET_CURR_FRAG(fmi_p, NULL); // default SET_FIRST_FRAG(fmi_p, NULL); SET_LAST_FRAG(fmi_p, NULL); while( np != NULL ){ const Item *ip; int compVal; ip = NODE_DATA(np); compVal = strncmp( frag, ITEM_NAME(ip), n ); if( compVal == 0 ){ // We have found the first node that is a match, // but we want also determine the last... SET_CURR_FRAG(fmi_p, np); SET_FIRST_FRAG(fmi_p, np); SET_LAST_FRAG(fmi_p, np); np = NODE_NEXT(np); while( np != NULL ){ ip = NODE_DATA(np); compVal = strncmp( frag, ITEM_NAME(ip), n ); if( compVal != 0 ) return; SET_LAST_FRAG(fmi_p, np); np = NODE_NEXT(np); } return; } np = NODE_NEXT(np); } }
void prio_sched_for_all_threads(struct sched_t* sched, void(*func)(thread_t*)) { int i; for (i = 0; i < LOWEST_PRIO; ++i) { node_t* node = QUEUE_HEAD(SCHED_QUEUE(sched)[i]); while (node != NULL) { func(NODE_DATA(node)); node = NODE_NEXT(node); } } }
void _list_menu(QSP_ARG_DECL const Menu *mp) { List *lp; Node *np; lp = MENU_LIST(mp); np = QLIST_HEAD(lp); while( np != NULL ){ Command *cp; cp = (Command *) NODE_DATA(np); list_command(QSP_ARG cp); np = NODE_NEXT(np); } }
void _call_funcs_from_list(QSP_ARG_DECL List *lp ) { Node *np; void (*func)(SINGLE_QSP_ARG_DECL); np=QLIST_HEAD(lp); assert( np != NULL ); while( np != NULL ){ func = (void (*)(SINGLE_QSP_ARG_DECL)) NODE_DATA(np); (*func)(SINGLE_QSP_ARG); np = NODE_NEXT(np); } }
int get_camera_names( QSP_ARG_DECL Data_Obj *str_dp ) { // Could check format of object here... // Should be string table with enough entries to hold the modes // Should the strings be rows or multidim pixels? List *lp; Node *np; PGR_Cam *pgcp; int i, n; lp = pgc_list(); if( lp == NULL ){ WARN("No cameras!?"); return 0; } n=eltcount(lp); if( OBJ_COLS(str_dp) < n ){ sprintf(ERROR_STRING,"String object %s has too few columns (%ld) to hold %d camera names", OBJ_NAME(str_dp),(long)OBJ_COLS(str_dp),n); WARN(ERROR_STRING); n = OBJ_COLS(str_dp); } np=QLIST_HEAD(lp); i=0; while(np!=NULL){ char *dst; pgcp = (PGR_Cam *) NODE_DATA(np); dst = OBJ_DATA_PTR(str_dp); dst += i * OBJ_PXL_INC(str_dp); if( strlen(pgcp->pc_name)+1 > OBJ_COMPS(str_dp) ){ sprintf(ERROR_STRING,"String object %s has too few components (%ld) to hold camera name \"%s\"", OBJ_NAME(str_dp),(long)OBJ_COMPS(str_dp),pgcp->pc_name); WARN(ERROR_STRING); } else { strcpy(dst,pgcp->pc_name); } i++; if( i>=n ) np=NULL; else np = NODE_NEXT(np); } return i; }
void call_funcs_from_list(QSP_ARG_DECL List *lp ) { Node *np; void (*func)(SINGLE_QSP_ARG_DECL); np=QLIST_HEAD(lp); //#ifdef CAUTIOUS // if( np == NO_NODE ){ // WARN("CAUTIOUS: call_funcs_from_list: list is empty!?"); // return; // } //#endif /* CAUTIOUS */ assert( np != NO_NODE ); while( np != NO_NODE ){ func = (void (*)(SINGLE_QSP_ARG_DECL)) NODE_DATA(np); (*func)(SINGLE_QSP_ARG); np = NODE_NEXT(np); } }
void set_choice(Screen_Obj *sop,int i) { Node *np; int n; Screen_Obj *bsop; n=0; if( SOB_CHILDREN(sop) == NULL ) return; // if no motif np=QLIST_HEAD(SOB_CHILDREN(sop)); while( np != NO_NODE ){ bsop = (Screen_Obj *)NODE_DATA(np); if( n == i ) set_toggle_state(bsop,1); else set_toggle_state(bsop,0); n++; np=NODE_NEXT(np); } }
static const char *_list_advance_frag_match(QSP_ARG_DECL Frag_Match_Info * fmi_p, int direction ) { const Item *ip; assert( fmi_p != NULL ); if( direction == CYC_FORWARD ){ if( CURR_FRAG(fmi_p) == LAST_FRAG(fmi_p) ) return NULL; else { SET_CURR_FRAG(fmi_p, NODE_NEXT(CURR_LIST_FRAG(fmi_p)) ); assert( CURR_FRAG(fmi_p) != NULL ); } } else { if( CURR_FRAG(fmi_p) == FIRST_FRAG(fmi_p) ) return NULL; else { SET_CURR_FRAG(fmi_p, NODE_PREV( CURR_LIST_FRAG(fmi_p) )); assert( CURR_FRAG(fmi_p) != NULL ); } } ip = NODE_DATA( CURR_LIST_FRAG(fmi_p) ); return ip->item_name; }
static void _dump_node_basic(QSP_ARG_DECL Vec_Expr_Node *enp) { Tree_Code code; int i; const char *s; if( enp==NULL ) return; /* print the node "name", and a code that tells about shape knowledge */ // Temporarily print to stderr instead of stdout for debugging... prt_node(enp,msg_str); prt_msg_frag(msg_str); if( SHOWING_LHS_REFS ){ sprintf(msg_str,"\t%d",VN_LHS_REFS(enp)); prt_msg_frag(msg_str); } if( SHOWING_COST ){ if( VN_SHAPE(enp) != NULL ){ sprintf(msg_str,"\t%d", SHP_N_MACH_ELTS(VN_SHAPE(enp))); } prt_msg_frag(msg_str); sprintf(msg_str,"\t%d\t%d", VN_FLOPS(enp),VN_N_MATH(enp)); prt_msg_frag(msg_str); } if( IS_CURDLED(enp) ){ sprintf(msg_str,"\t%s (curdled!?)", NNAME(enp)); prt_msg(msg_str); return; } sprintf(msg_str,"\t%s", NNAME(enp)); prt_msg_frag(msg_str); /* print the special op-dependent args in human-readable form */ code = VN_CODE(enp); if( code==T_DYN_OBJ || code == T_UNDEF || code == T_PROTO || code==T_POINTER || code==T_FUNCPTR || code==T_STR_PTR ){ sprintf(msg_str,"\t%s",VN_STRING(enp)); prt_msg_frag(msg_str); if( code == T_POINTER ){ Identifier *idp; /* We don't use get_set_ptr() here because we don't want an error msg... */ idp = id_of(VN_STRING(enp)); if( idp != NULL && IS_POINTER(idp) && POINTER_IS_SET(idp) ){ if( PTR_REF(ID_PTR(idp)) == NULL ){ /* how could this ever happen??? */ prt_msg_frag("->???"); } else { Data_Obj *dp; dp = REF_OBJ(PTR_REF(ID_PTR(idp))); sprintf(msg_str,"->%s",OBJ_NAME(dp)); prt_msg_frag(msg_str); } } } } else if( code == T_STATIC_OBJ ){ sprintf(msg_str,"\t%s",OBJ_NAME(VN_OBJ(enp))); prt_msg_frag(msg_str); #ifdef SCALARS_NOT_OBJECTS } else if( code == T_SCALAR_VAR ){ sprintf(msg_str,"\t%s",VN_STRING(enp)); prt_msg_frag(msg_str); #endif // SCALARS_NOT_OBJECTS } else if ( code == T_FUNCREF ){ Subrt *srp; srp=VN_SUBRT(enp); sprintf(msg_str,"\t%s",SR_NAME(srp)); prt_msg_frag(msg_str); } else if( code == T_SIZE_FN ){ sprintf(msg_str,"\t%s",FUNC_NAME(VN_FUNC_PTR(enp))); prt_msg_frag(msg_str); } #ifdef NOT_YET else if(code == T_CALL_NATIVE ){ // was kw_token??? // curr_native_func_tbl... sprintf(msg_str,"\t%s",FUNC_NAME(VN_FUNC_PTR(enp))); prt_msg_frag(msg_str); } #endif /* NOT_YET */ else if(code == T_TYPECAST ){ // BUG not how we do precision any more!!! //sprintf(msg_str," %s",NAME_FOR_PREC_CODE(VN_INTVAL(enp))); if( VN_SHAPE(enp) == NULL ) error1("CAUTIOUS: null node shape for typecast node!?"); else { sprintf(msg_str," %s",PREC_NAME(VN_PREC_PTR(enp))); prt_msg_frag(msg_str); } } else if( code == T_SUBRT_DECL || code == T_SCRIPT ){ Subrt *srp; srp=VN_SUBRT(enp); sprintf(msg_str,"\t%s",SR_NAME(srp)); prt_msg_frag(msg_str); } else if( code==T_DECL_STAT ){ //sprintf(msg_str," %s",NAME_FOR_PREC_CODE(VN_INTVAL(enp))); sprintf(msg_str," %s",PREC_NAME(VN_DECL_PREC(enp))); prt_msg_frag(msg_str); } else if( IS_DECL(code) ){ sprintf(msg_str," %s",VN_STRING(enp)); prt_msg_frag(msg_str); } else if( code==T_ADVISE ){ /* BUG need to elim yylex_qsp */ s=eval_string(VN_CHILD(enp,0)); sprintf(msg_str,"\t\"%s\"",s); prt_msg_frag(msg_str); } else if( code==T_WARN ){ /* BUG need to elim yylex_qsp */ s=eval_string(VN_CHILD(enp,0)); sprintf(msg_str,"\t\"%s\"",s); prt_msg_frag(msg_str); } else if( code==T_STRING ){ sprintf(msg_str,"\t\"%s\"",VN_STRING(enp)); prt_msg_frag(msg_str); } else if( code == T_LABEL || code ==T_GO_BACK || code == T_GO_FWD ){ sprintf(msg_str," %s",VN_STRING(enp)); prt_msg_frag(msg_str); } else if( code==T_LIT_DBL ){ sprintf(msg_str," %g",VN_DBLVAL(enp)); prt_msg_frag(msg_str); } else if( code == T_MATH0_FN ){ sprintf(msg_str," %s",FUNC_NAME(VN_FUNC_PTR(enp))); prt_msg_frag(msg_str); } else if( code == T_MATH1_FN ){ sprintf(msg_str," %s",FUNC_NAME(VN_FUNC_PTR(enp))); prt_msg_frag(msg_str); } else if( code == T_MATH2_FN ){ sprintf(msg_str," %s",FUNC_NAME(VN_FUNC_PTR(enp))); prt_msg_frag(msg_str); } else if ( code == T_MATH0_VFN || code == T_MATH1_VFN || code == T_MATH2_VFN || code == T_MATH2_VSFN || code == T_CHAR_VFN /* BUG? shouldn't there bre a VSFN2 ??? */ || code == T_VS_FUNC || code == T_VV_FUNC ){ sprintf(msg_str," %s",VF_NAME(FIND_VEC_FUNC(VN_VFUNC_CODE(enp)))); prt_msg_frag(msg_str); } else if( code==T_CALLFUNC ){ assert(VN_SUBRT(enp)!=NULL); sprintf(msg_str," %s", SR_NAME(VN_SUBRT(enp))); prt_msg_frag(msg_str); } else if( code==T_LIT_INT ){ sprintf(msg_str," %"PRId64, VN_INTVAL(enp) ); prt_msg_frag(msg_str); } else if( code==T_ASSIGN ){ prt_msg_frag("\t"); } else if( code==T_MAXVAL ){ prt_msg_frag("\t"); } else if( code==T_MINVAL ){ prt_msg_frag("\t"); } else if( code==T_RAMP ){ prt_msg_frag("\t"); } /* Now print the addresses of the child nodes */ if( VN_CHILD(enp,0)!=NULL){ sprintf(msg_str,"\t\tn%d",VN_SERIAL(VN_CHILD(enp,0))); prt_msg_frag(msg_str); } for(i=1;i<MAX_CHILDREN(enp);i++){ if( VN_CHILD(enp,i)!=NULL){ sprintf(msg_str,", n%d",VN_SERIAL(VN_CHILD(enp,i))); prt_msg_frag(msg_str); } } prt_msg(""); if( SHOWING_SHAPES && VN_SHAPE(enp) != NULL ){ prt_msg_frag("\t"); if( OWNS_SHAPE(enp) ){ sprintf(msg_str,"* 0x%lx ",(u_long)VN_SHAPE(enp)); prt_msg_frag(msg_str); } else { sprintf(msg_str,"@ 0x%lx ",(u_long)VN_SHAPE(enp)); prt_msg_frag(msg_str); } prt_msg_frag("\t"); describe_shape(VN_SHAPE(enp)); } if( SHOWING_RESOLVERS && VN_RESOLVERS(enp)!=NULL ){ Node *np; Vec_Expr_Node *enp2; prt_msg("\tResolvers:"); np=QLIST_HEAD(VN_RESOLVERS(enp)); while(np!=NULL){ enp2=(Vec_Expr_Node *)NODE_DATA(np); sprintf(msg_str,"\t\t%s",node_desc(enp2)); prt_msg(msg_str); np=NODE_NEXT(np); } } }