⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calls.c

📁 ftam等标准协议服务器和客户端的源代码。
💻 C
📖 第 1 页 / 共 3 页
字号:
  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);    /* print in blocks of 100 bytes-larger seems too much for curses*/  str = buffer;  do {    for (count = 0, sptr = str; *sptr != '\0' &&	 count < 100; sptr++, count++);    save = *sptr;    *sptr = 0;    xprint (str);    *sptr = save;    str = sptr;  } while (*sptr != '\0');}void quipu_error(err)     struct DSError *err;{  switch(err->dse_type) {  case DSE_LOCALERROR:    xprint(" SD internal error!\n");    break;  case DSE_REMOTEERROR:    xprint(" Problem with remote directory server!\n");    break;  case DSE_ATTRIBUTEERROR:    xprint(" Faulty data found in database!\n");    break;  case DSE_REFERRAL:  case DSE_DSAREFERRAL:    xprint(" Requested data unavailable at present.\n");    break;  case DSE_SECURITYERROR:    xprint(" You do not have the privileges required\n to make this request!");    break;  case DSE_NAMEERROR:    xprint(" Invalid directory position!\n");    break;  case DSE_SERVICEERROR:    xprint(" Directory Service Error!\n");    break;  default:    xprint(" Requested data unavailable at present.\n");  }}void returnmain(){  QUITFN();  setwidgets (mainwdgts,-1);  rd_start();  scrollbar('\0');}void get_listed_object(number, wdgt)     char number;     WIDGET *wdgt;{  int entrynum, count = 0;  char *sptr, *str;  char buffer[1024];    if (text_state != DN_LIST && text_state != BACK_LIST) {    *wdgt->dstr = '\0';    printdialog(wdgt);    return;  }    *srchvalue = number;  *(srchvalue+1) = '\0';  if (wdgt) {    printdialog(wdgt);    dialog(wdgt);  }    entrynum = atoi(srchvalue);  if (entrynum > entry_number) {    *wdgt->dstr = '\0';    printdialog(wdgt);    return;  }  if (sptr = get_from_seq (entrynum, curr_dnseq))     if(!isleafnode(sptr)) {      cleartext();      str = get_from_seq(count+1, back_seq);            while (str && 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);	back_buf_num++;      }            (void) strcpy(base_path, sptr);      make_friendly(friendly_base_path, base_path);      wdgt = getwidget(mainwdgts, '\0');      printdialog(wdgt);      rd_start();      typetoggled = 0;      set_default_type();    } else {      (void) strcpy(buffer, base_path);      (void) strcpy(base_path, sptr);      make_friendly(friendly_base_path, base_path);      rd_start();      (void) strcpy(base_path, buffer);    }  *srchvalue = '\0';}void scrollbar(command)     char command;{  register char *str;  char *base_rdn;  register int rdn_count = 0;  int lines, count = 0;  str_seq thisseq;    if (!entry_number)    return;    if(command == '[') {    if(display_entry >= entry_number)      return;    for (count = 0; (display_entry + count) < entry_number && 	 count < text_height/2; count++);    current_entry += count;  } else if(command == ']') {    for (count = 0; (current_entry - count) > 1 && 	 count < text_height/2; count++);    current_entry -= count;  }    cleartext();    switch(text_state) {  case BACK_LIST:    thisseq = back_seq;    break;  case DN_LIST:    base_rdn = base_path;    while(*base_rdn != '\0') {      if(*base_rdn == '@')	rdn_count++;      base_rdn++;    }    if (*base_path != 'T') rdn_count++;    thisseq = curr_dnseq;    break;  case TEXT:    thisseq = textseq;    break;  }    if (current_entry > entry_number)     current_entry = 1;    lines = linec()-2;  count = 0;    for (display_entry = current_entry; display_entry <= entry_number        && gety() < lines; display_entry++) {    if (text_state == DN_LIST || text_state == BACK_LIST)      xprintint(" %d ", display_entry) ;        base_rdn = str = get_from_seq(display_entry, thisseq);    if (text_state == DN_LIST && rdn_count) {      while (rdn_count) {	if (*str == '@') rdn_count--;	str++;      }      while(*str == ' ') str++;      count = (int) (str - base_rdn);    } else if (count) str += count;        if (str) {      if (text_state != TEXT) {	make_friendly(friendly_name, str);	xprint(friendly_name);      } else	xprint(str);      xprint("\n");    }  }  if (text_state == DN_LIST)    if (current_entry >= entry_number) xprint("<List finished>");    else        xprintint("<Total of %d entries>", entry_number);  printbar(entry_number, current_entry, display_entry-current_entry);  display_entry--;  return;}void make_friendly(fstr, str)     char *fstr;     register char *str;{  register char *end_ptr;  char save;    *fstr = '\0';  if (!strcmp(str, "The World")) {    (void) strcpy(fstr, str);    return;  }    while (*str != '\0') {    while (*str != '=') str++;    while (*str == ' ') str++;        end_ptr = ++str;    while (*end_ptr != '@' && *end_ptr != '\0') end_ptr++;    save = *end_ptr;    *end_ptr = '\0';    if (*fstr == '\0')      (void) strcpy(fstr, str);    else      (void) strcat(fstr, str);    *end_ptr = save;    str = end_ptr;    if (*str != '\0')      (void) strcat(fstr, ", ");  }}   void goto_addr(){  set_default_type();  rd_start();}int isleafnode(name)     char *name;{  struct ds_list_arg list_arg;  struct ds_list_result   list_result;  struct ds_read_arg read_arg;  struct ds_read_result   read_result;  struct DSError          list_error, read_error;  char entry_str[1024];  if (get_default_service (&read_arg.rda_common) != 0) return(1);  read_arg.rda_common.ca_servicecontrol.svc_options = 1;  read_arg.rda_eis.eis_allattributes = FALSE;  read_arg.rda_eis.eis_infotypes = EIS_ATTRIBUTESANDVALUES;  read_arg.rda_eis.eis_select = oclass;  read_arg.rda_object = (*name? str2dn(name): NULLDN);  if (ds_read (&read_arg,&read_error,&read_result) != DS_OK) return(1);  else {    if (read_result.rdr_entry.ent_attr == NULLATTR) return(0);    entry2str((caddr_t) read_result.rdr_entry.ent_attr, entry_str, 1024);    if (issubstr(entry_str, "NonLeaf")) return(0);  }  if (get_default_service (&list_arg.lsa_common) != 0) return(1);  list_arg.lsa_common.ca_servicecontrol.svc_sizelimit = 1;  list_arg.lsa_common.ca_servicecontrol.svc_options = 1;  if (*name)     list_arg.lsa_object = str2dn(name);  else    list_arg.lsa_object = NULLDN;  if (ds_list (&list_arg,&list_error,&list_result) != DS_OK)     return (1);  else {    if (list_result.lsr_subordinates == NULLSUBORD) return(1);    else return(0);  }}void entry2str(ptr, cptr, size)     caddr_t ptr;     char *cptr;     int size;{  PS ps;  if ((ps = ps_alloc (str_open)) == NULLPS) return ;  if (str_setup (ps, cptr, size, 1) == NOTOK) return ;  as_print(ps, (Attr_Sequence) ptr, READOUT);  *ps->ps_ptr = 0;  ps_free(ps);}int issubstr(str, substr)     char *str;     char *substr;{  register char *sptr;  char c;  int substrlen = strlen(substr);  int count;  if (*substr == '\0' || *str == '\0') return(0);  sptr = str;  c = *substr;  while (1) {    while (*sptr != '\0' && *sptr != c) sptr++;    if (*sptr == '\0') return(0);    for (count = 0; count >= 0 && count < substrlen; count++) {      if (sptr[count] == '\0') return(0);      else if (substr[count] != sptr[count]) count = -2;    }    if (count == substrlen) return(1);    sptr++;  }}int indexstring(string, substring)     char *string, *substring;{  register char *sub, *str;  char c, s;  int indx = 0;  while (1) {    str = string + indx;;    if (*str == '\0') return(-1);    sub = substring;    if (*str == *sub) {      s = *str;      c = *sub;      while(c == s && c != '\0') {        c = *++sub;        s = *++str;      }      if (c == '\0') return((int) indx);      else if(s == '\0') return(-1);    }    indx++;  }}void rfc2jnt(string)     char *string;{  char reversed[STRINGLEN];  char front[STRINGLEN];  register char *part;  char *mailbox;  mailbox = string;  while (*mailbox != '-') mailbox++;  reversed[0] = '\0';  part = string + strlen(string);  if (*part != '\0') return;    while(1) {    while (*part != '.' && *part != '@') --part;    if (*part == '.') {      if (reversed[0] != '\0') (void) strcat(reversed, ".");      part++;      (void) strcat(reversed, part);      *--part = '\0';      --part;    } else {      part++;      (void) strcat(reversed, ".");      (void) strcat(reversed, part);      *part-- = '\0';      while (!isspace(*part)) --part;      ++part;      (void) strcpy(front, part);      (void) strcpy(string, "mailbox               - ");      (void) strcat(string, front);      (void) strcat(string, reversed);      return;    }  }}  struct attrcomp *sort_attrs(entry_attrs)     struct attrcomp *entry_attrs;{  struct attrcomp *last, *next, *curr, *first, *firstn;    first = curr = entry_attrs;  firstn = last = next = 0;    while (curr)    if (!strcmp("2.5.4.3", curr->attr_type->oa_ot.ot_stroid) ||        !strcmp("2.5.4.4", curr->attr_type->oa_ot.ot_stroid) ||        !strcmp("0.9.2342.19200300.100.1.3",                curr->attr_type->oa_ot.ot_stroid) ||        !strcmp("0.9.2342.19200300.100.1.2",                curr->attr_type->oa_ot.ot_stroid) ||        !strcmp("2.5.4.20", curr->attr_type->oa_ot.ot_stroid)) {      if (first == curr) first = curr->attr_link;      if (next)        next->attr_link = curr;      else        firstn = curr;            next = curr;      if (last)        last->attr_link = curr->attr_link;      curr = curr->attr_link;      next->attr_link = 0;    } else {      last = curr;      curr = curr->attr_link;    }  if (next) {    next->attr_link = first;    return firstn;  } else    return first;}char *GetSurname(name)     register char *name;{  while (*name != '\0') name++;  while (*name != ' ' && *name != '=') name--;  return ++name;}char *GetWholeRelName(name)     register char *name;{  while (*name!= '\0') name++;  while (*name != '=') name--;  while (!isalpha(*name)) name++;  return name;}str_seq SortList(list)     str_seq list;{  register str_seq currEntry, lastSortedEntry , currSortedEntry;   str_seq sortedList;  char *sortedName, *currName;  register DN curr_dn;  DN dn;  if (!list) return 0;  currEntry = list;  sortedList = 0;  while (currEntry) {    dn = curr_dn = str2dn(currEntry->dname);    while (curr_dn && curr_dn->dn_parent != NULLDN)       curr_dn = curr_dn->dn_parent;        if (!strcmp(curr_dn->dn_rdn->rdn_at->oa_ot.ot_stroid, "2.5.4.3"))      currName = GetSurname(currEntry->dname);    else       currName = GetWholeRelName(currEntry->dname);    dn_free(dn);    if (!sortedList) {      sortedList = currEntry;      currEntry = currEntry->next;      sortedList->next = 0;    } else {      lastSortedEntry = 0;      currSortedEntry = sortedList;      while (currSortedEntry != 0) {	dn = curr_dn = str2dn(currSortedEntry->dname);		while (curr_dn && curr_dn->dn_parent != NULLDN) 	  curr_dn = curr_dn->dn_parent;		if (!strcmp(curr_dn->dn_rdn->rdn_at->oa_ot.ot_stroid, 		    "2.5.4.3"))	  sortedName = GetSurname(currSortedEntry->dname);	else 	  sortedName = GetWholeRelName(currSortedEntry->dname);		dn_free(dn);	if (strcmp(currName, sortedName) <= 0) {	  if (lastSortedEntry) {	    lastSortedEntry->next = currEntry;	    currEntry = currEntry->next;	    lastSortedEntry->next->next = currSortedEntry;	  } else {	    sortedList = currEntry;	    currEntry = currEntry->next;	    sortedList->next = currSortedEntry;	  }	  currSortedEntry = 0;	} else {	  lastSortedEntry = currSortedEntry;	  currSortedEntry = currSortedEntry->next;	  if (!currSortedEntry) {	    lastSortedEntry->next = currEntry;	    currEntry = currEntry->next;	    lastSortedEntry->next->next = 0;	    currSortedEntry = 0;	  }	}      }    }  }  return sortedList;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -