📄 calls.c
字号:
} read_arg.rda_common.ca_servicecontrol.svc_options = SVC_OPT_PREFERCHAIN; read_arg.rda_eis.eis_allattributes = FALSE; read_arg.rda_eis.eis_infotypes = EIS_ATTRIBUTESANDVALUES; read_arg.rda_eis.eis_select = read_types; read_arg.rda_object = (*friendly_base_path != 'T'? str2dn(base_path): NULLDN); if ((read_entry = local_find_entry(read_arg.rda_object, FALSE)) != NULLENTRY && read_entry->e_data != E_TYPE_CONSTRUCTOR) { read_entry->e_attributes = sort_attrs(read_entry->e_attributes); read_print (as_print, (caddr_t) read_entry->e_attributes); return; }#ifndef NO_STATS LLOG (log_stat,LLOG_NOTICE,("read +%s",base_path));#endif if (ds_read (&read_arg,&error,&result) != DS_OK) { /* deal with error */ cleartext(); quipu_error(&error); } else { /* use data */ if (result.rdr_entry.ent_attr == NULLATTR) { free_seq(textseq); if (text_state == DN_LIST) free_seq(curr_dnseq); curr_dnseq = textseq = NULLDS; entry_number = 0; text_state = TEXT; xprint("No attributes"); return; } xprint("Result of look up ...\n"); if (result.rdr_common.cr_aliasdereferenced) xprint("Alias dereferenced)\n"); result.rdr_entry.ent_attr = sort_attrs(result.rdr_entry.ent_attr); cache_entry(&(result.rdr_entry), FALSE, TRUE); read_print(as_print, (caddr_t) result.rdr_entry.ent_attr); }}void back_start(){ if (!back_buf_num) { cleartext(); tprint("History Buffer Empty!\n"); sleep(3); scrollbar('\0'); return; } if (text_state == DN_LIST) free_seq(curr_dnseq); free_seq(textseq); textseq = NULLDS; curr_dnseq = back_seq; text_state = BACK_LIST; entry_number = back_buf_num; current_entry = display_entry = 1; scrollbar('\0');}void widen(){ register char *str, *sptr; int count = 0; str_seq first; str = get_from_seq(count+1, back_seq); while (count < back_buf_num && strcmp(str, base_path)){ count++; str = get_from_seq(count+1, back_seq); } if (count == back_buf_num) { add_seq(&back_seq, base_path); if (++back_buf_num > histlimit) { first = back_seq; back_seq = back_seq->next; first->next = 0; free_seq(first); } } str = base_path; if (*str != 'T') { for (sptr = str; *sptr != '\0'; sptr++) if (*sptr == '@') str = sptr; sptr = str; typetoggled = 0; if (str != base_path) { if (*--sptr == ' ') str = sptr; *str = '\0'; } else (void) strcpy(base_path, "The World"); make_friendly(friendly_base_path, base_path); set_default_type(); printdialog(getwidget(mainwdgts, '\0')); rd_start(); }}void set_default_type(){ int count, lastindx; WIDGET *wdgt, *vwdgt; DN base_name; wdgt = getwidget(mainwdgts,'t'); vwdgt = getwidget(mainwdgts, 's'); if (av_typeindx) lastindx = wdgt->tindx; else lastindx = 0; if (*base_path != 'T') { if (!typetoggled) { base_name = str2dn(base_path); while (base_name->dn_parent) base_name = base_name->dn_parent; for (count = 0; count < default_num && strcmp(levels[count] ,base_name->dn_rdn->rdn_at-> oa_ot.ot_stroid); count++); if (count < default_num) { av_typeindx = available_types[count]; typeindx = defaults[count]; } else { av_typeindx = available_types[0]; typeindx = defaults[0]; } count = typeindx; if (count < filt_num) { if (lastindx) (void) strcpy(filtvalue[lastindx], vwdgt->dstr); wdgt->tindx = count; (void) strcpy(vwdgt->dstr, filtvalue[wdgt->tindx]); } } } else { for(count = 0; count < default_num && strcmp(levels[count], "@"); count++); if (count < default_num) { av_typeindx = available_types[count]; typeindx = defaults[count]; } else { av_typeindx = available_types[0]; typeindx = defaults[0]; } count = typeindx; if (count < filt_num) { if (lastindx) (void) strcpy(filtvalue[lastindx], vwdgt->dstr); wdgt->tindx = count; (void) strcpy(vwdgt->dstr, filtvalue[wdgt->tindx]); } } make_friendly(friendly_base_path, base_path); typetoggled = 0; printtoggle(wdgt); printdialog(vwdgt);}/* These are the functions called by the list level widgets */void list_start(){ struct ds_search_arg search_arg; struct ds_search_result result; struct DSError error; cleartext(); xprint("OK, listing.\n"); tprint("Working. Please wait....."); if (get_default_service (&search_arg.sra_common) != 0) { xprint ("Default service error -> check your .quipurc\n"); return ; } search_arg.sra_common.ca_servicecontrol.svc_options = SVC_OPT_PREFERCHAIN; search_arg.sra_baseobject = (*base_path != 'T'? str2dn (base_path): NULLDN); search_arg.sra_eis.eis_allattributes = FALSE; search_arg.sra_eis.eis_infotypes = EIS_ATTRIBUTETYPESONLY; search_arg.sra_eis.eis_select = 0; search_arg.sra_subset = SRA_ONELEVEL; search_arg.sra_filter = filter_alloc(); search_arg.sra_filter->flt_type = FILTER_NOT; search_arg.sra_filter->flt_next = NULLFILTER; search_arg.sra_filter->flt_un.flt_un_filter = filter_alloc(); search_arg.sra_filter->flt_un.flt_un_filter->flt_type = FILTER_ITEM; search_arg.sra_filter->flt_un.flt_un_filter->flt_next = NULLFILTER; search_arg.sra_filter->flt_un.flt_un_filter->flt_un.flt_un_item.fi_type = FILTERITEM_EQUALITY; search_arg.sra_filter->flt_un.flt_un_filter->flt_un.flt_un_item.fi_un. fi_un_ava.ava_type = AttrT_new("2.5.4.0"); search_arg.sra_filter->flt_un.flt_un_filter->flt_un.flt_un_item.fi_un. fi_un_ava.ava_value = str2AttrV("dsa", search_arg.sra_filter->flt_un.flt_un_filter-> flt_un.flt_un_item.fi_un.fi_un_ava.ava_type-> oa_syntax); if (search_arg.sra_filter->flt_un.flt_un_filter->flt_un.flt_un_item. fi_un.fi_un_ava.ava_value == NULLAttrV) { cleartext(); xprint("Internal Error! Sorry."); } else if (ds_search (&search_arg,&error,&result) != DS_OK) { /* deal with error */ free_seq(textseq); if (text_state == DN_LIST) free_seq(curr_dnseq); curr_dnseq = textseq = NULLDS; text_state = TEXT; entry_number = 0; cleartext(); xprint("Search error!\n"); quipu_error(&error); } else { cleartext(); correlate_search_results (&result); if (result.CSR_entries != NULLENTRYINFO) { register EntryInfo *ptr; xprint ("Result of search ...\n"); if (result.CSR_common.cr_aliasdereferenced) { xprint ("(Alias dereferenced - object is "); quipu_print ((IFP)dn_print, (caddr_t) result.CSR_object); dn_free (result.CSR_object); xprint (")\n"); } if (text_state == DN_LIST) free_seq(curr_dnseq); free_seq(textseq); curr_dnseq = textseq = NULLDS; display_entry = current_entry = 1; entry_number = 0; text_state = DN_LIST; for (ptr = result.CSR_entries; ptr != NULLENTRYINFO; ptr = ptr->ent_next) { entry_number++; dn2buf ((caddr_t)ptr->ent_dn, goto_path); add_seq (&curr_dnseq, goto_path); } if (entry_number) curr_dnseq = SortList(curr_dnseq); scrollbar('\0'); } else if (result.CSR_limitproblem != LSR_TIMELIMITEXCEEDED) { free_seq(textseq); if (text_state == DN_LIST) free_seq(curr_dnseq); curr_dnseq = textseq = NULLDS; entry_number = 0; text_state = TEXT; xprint("Nothing found<"); } if(result.CSR_limitproblem != LSR_NOLIMITPROBLEM) { switch (result.CSR_limitproblem) { case LSR_TIMELIMITEXCEEDED: if (entry_number > 0) xprint("(Time limit exceeded. Partial results only.)"); else { free_seq(curr_dnseq); curr_dnseq = NULLDS; xprint("(Time limit exceeded.)"); } break; case LSR_SIZELIMITEXCEEDED: xprint("(Size limit exceeded)"); break; case LSR_ADMINSIZEEXCEEDED: if (entry_number > 0) xprint("(Administrative limit reached. Partial results only.)"); else { free_seq(curr_dnseq); curr_dnseq = NULLDS; xprint("(Administrative limit reached.)"); } break; } } entryinfo_free(result.CSR_entries, 0); } filter_free(search_arg.sra_filter);}void rdn2str(ptr,cptr) caddr_t ptr; char * cptr;{ PS ps; char buffer [RESBUF]; if ((ps = ps_alloc(str_open)) == NULLPS) { return ; } if (str_setup(ps, buffer, RESBUF, 1) == NOTOK) { return ; } rdn_print(ps, (RDN) ptr, READOUT); ps_free(ps); *ps->ps_ptr = 0; (void) strcpy(cptr, buffer);}void srch_start(){ struct ds_search_arg search_arg; struct ds_search_result result; struct DSError error; WIDGET *wdgt; DN curr_rdn; if (*mvalue == '\0') { list_start(); return; } cleartext(); xprint("OK. Starting search.\n"); tprint("Working. Please wait....."); wdgt = getwidget(mainwdgts,'t'); if (get_default_service (&search_arg.sra_common) != 0) { xprint ("Default service error -> check your .quipurc\n"); return ; } search_arg.sra_common.ca_servicecontrol.svc_options = SVC_OPT_PREFERCHAIN; curr_rdn = search_arg.sra_baseobject = (*base_path != 'T'? str2dn (base_path): NULLDN); search_arg.sra_eis.eis_allattributes = FALSE; search_arg.sra_eis.eis_infotypes = EIS_ATTRIBUTETYPESONLY; search_arg.sra_eis.eis_select = 0; search_arg.sra_subset = SRA_ONELEVEL; while (curr_rdn != NULLDN) { if (!strcmp(curr_rdn->dn_rdn->rdn_at->oa_ot.ot_stroid, "2.5.4.10")) { search_arg.sra_subset = SRA_WHOLESUBTREE; break; } curr_rdn = curr_rdn->dn_parent; } if ((search_arg.sra_filter = make_filter(filt_arr[gettogglindx(wdgt)])) == NULLFILTER) { (void) xprint("Invalid search filter!"); return; }#ifndef NO_STATS LLOG (log_stat,LLOG_NOTICE,("search +%s, extent %d, val %s", base_path, search_arg.sra_subset, mvalue));#endif if(ds_search (&search_arg,&error,&result) != DS_OK) { /* deal with error */ free_seq(textseq); if (text_state == DN_LIST) free_seq(curr_dnseq); curr_dnseq = textseq = NULLDS; entry_number = 0; text_state = TEXT; cleartext(); xprint(" Search error!\n "); quipu_error(&error); } else { cleartext(); correlate_search_results (&result); if (result.CSR_entries != NULLENTRYINFO) { register EntryInfo *ptr; if (result.CSR_common.cr_aliasdereferenced) { xprint (" (Alias dereferenced - object is "); quipu_print ((IFP)dn_print, (caddr_t) result.CSR_object); dn_free (result.CSR_object); xprint (")\n"); } if (text_state == DN_LIST) free_seq(curr_dnseq); free_seq(textseq); curr_dnseq = textseq = NULLDS; display_entry = current_entry = 1; entry_number = 0; text_state = DN_LIST; for (ptr = result.CSR_entries; ptr != NULLENTRYINFO; ptr = ptr->ent_next){ entry_number++; dn2buf ((caddr_t) ptr->ent_dn, goto_path); add_seq (&curr_dnseq, goto_path); } if (entry_number > 1) curr_dnseq = SortList(curr_dnseq); if (entry_number != 1) scrollbar('\0'); else { if (!isleafnode(goto_path)) { get_listed_object('1', (WIDGET *) 0); } else { char temp[1024]; (void) strcpy(temp, base_path); (void) strcpy(base_path, goto_path); rd_start(); (void) strcpy(base_path, temp); } } } else if(result.CSR_limitproblem != LSR_TIMELIMITEXCEEDED) { free_seq(textseq); if (text_state == DN_LIST) free_seq(curr_dnseq); curr_dnseq = textseq = NULLDS; entry_number = 0; text_state = TEXT; xprint("Nothing found using current search parameters.\n"); } if(result.CSR_limitproblem != LSR_NOLIMITPROBLEM) switch (result.CSR_limitproblem) { case LSR_TIMELIMITEXCEEDED: if (entry_number > 0) xprint("(Time limit exceeded. Partial results only.)"); else { free_seq(curr_dnseq); curr_dnseq = NULLDS; xprint("(Time limit exceeded.)"); } break; case LSR_SIZELIMITEXCEEDED: xprint("(Size limit exceeded)"); break; case LSR_ADMINSIZEEXCEEDED: if (entry_number > 0) xprint("(Administrative limit reached. Partial results only.)"); else { free_seq(curr_dnseq); curr_dnseq = NULLDS; xprint("(Administrative limit reached.)"); } break; } entryinfo_free(result.CSR_entries, 0); } filter_free(search_arg.sra_filter);}void dn2buf (ptr,cptr) caddr_t ptr; char * cptr;{ PS ps; char buffer [RESBUF]; if((ps = ps_alloc(str_open)) == NULLPS) return ; if(str_setup(ps, buffer, RESBUF, 1) == NOTOK) return ; dn_print(ps, (DN) ptr, EDBOUT); *ps->ps_ptr = 0; ps_free (ps); (void) strcpy(cptr, buffer);}void read_print(func,ptr) int (*func) (); caddr_t ptr;{ PS ps; char buffer [RESBUF]; char save; int i, size; register char *str, *sptr; if ((ps = ps_alloc (str_open)) == NULLPS) return ; if (str_setup (ps,buffer,RESBUF,1) == NOTOK) return ; (*func) (ps, ptr, READOUT); *ps->ps_ptr = 0; ps_free(ps); str = buffer ; sptr = str; size = strlen(buffer); if (text_state == DN_LIST) free_seq(curr_dnseq); curr_dnseq = NULLDS; free_seq(textseq); textseq = NULLDS; display_entry = current_entry = 1; entry_number = 0; text_state = TEXT; for (i = 0; i <= size; i++, sptr++) if (*sptr == '\n' || *sptr == '\0') { entry_number++; save = *sptr ; *sptr = '\0'; if (mailformat == greybook && indexstring(str, "rfc822") >= 0) (void) rfc2jnt(str); add_seq(&textseq, str); str = sptr+1; *sptr = save; } scrollbar('\0');}void quipu_print(func,ptr) int (*func)(); /* assumes func (PS ,dataptr,(int) format); */ caddr_t ptr;{ PS ps; char buffer [RESBUF]; int count; register char *str, *sptr; char save;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -