+ List = NewHash(1, NULL);
+ wc_printf("<div align=center><form onSubmit=\"return false;\">"
+ "<select multiple name=\"whichaddr\" id=\"whichaddr\" size=\"15\">\n");
+
+ if (!strcasecmp(bstr("which_addr_book"), "__LOCAL_USERS__")) {
+ serv_puts("LIST");
+ serv_getln(buf, sizeof buf);
+ if (buf[0] == '1') while(len = serv_getln(buf, sizeof buf), strcmp(buf, "000")) {
+ Name = (char*) malloc(len + 1);
+ len = extract_token(Name, buf, 0, '|', len + 1);
+ if((len > 5) && (strncmp(Name, "SYS_", 4) == 0)) {
+ free(Name);
+ continue;
+ }
+ Put(List, Name, len, Name, NULL);
+
+ }
+ SortByHashKey(List, 1);
+ it = GetNewHashPos(List, 0);
+ while (GetNextHashPos(List, it, &len, &VCName, &Namee)) {
+ wc_printf("<option value=\"");
+ escputs((char*)Namee);
+ wc_printf("\">");
+ escputs((char*)Namee);
+ wc_printf("</option>\n");
+ }
+ DeleteHashPos(&it);
+ DeleteHash(&List);
+ }
+
+ else {
+ set_room_pref("defaddrbook",NewStrBufDup(sbstr("which_addr_book")), 0);
+ saved_roomname = NewStrBufDup(WC->CurRoom.name);
+ gotoroom(sbstr("which_addr_book"));
+ serv_puts("DVCA");
+ serv_getln(buf, sizeof buf);
+ if (buf[0] == '1') while(len = serv_getln(buf, sizeof buf), strcmp(buf, "000")) {
+ Name = (char*) malloc(len + 1);
+ len = extract_token(Name, buf, 0, '|', len + 1);
+ Put(List, Name, len, Name, NULL);
+
+ }
+ SortByHashKey(List, 1);
+ it = GetNewHashPos(List, 0);
+ while (GetNextHashPos(List, it, &len, &VCName, (void**)&Namee)) {
+ wc_printf("<option value=\"");
+ escputs((char*)Namee);
+ wc_printf("\">");
+ escputs((char*)Namee);
+ wc_printf("</option>\n");
+ }
+ DeleteHashPos(&it);
+ DeleteHash(&List);
+ gotoroom(saved_roomname);
+ FreeStrBuf(&saved_roomname);
+ }
+
+ wc_printf("</select>\n");