]> code.citadel.org Git - citadel.git/blobdiff - webcit/roomops.c
* Moved to the new string tokenizer API
[citadel.git] / webcit / roomops.c
index ae1de7791d6a067deda1e3608e2c3b8696cf74f4..d54ca16199accb15f7b3a7c0a70c4d5ae14046e8 100644 (file)
@@ -35,12 +35,12 @@ struct folder {
 };
 
 char *viewdefs[] = {
-       "Messages",
-       "Summary",
+       "Bulletin Board",
+       "Mail Folder",
        "Address Book",
        "Calendar",
-       "Tasks",
-       "Notes"
+       "Task List",
+       "Notes List"
 };
 
 char floorlist[128][SIZ];
@@ -63,7 +63,7 @@ void load_floorlist(void)
                return;
        }
        while (serv_gets(buf), strcmp(buf, "000")) {
-               extract(floorlist[extract_int(buf, 0)], buf, 1);
+               extract_token(floorlist[extract_int(buf, 0)], buf, 1, '|', sizeof floorlist[0]);
        }
 }
 
@@ -180,7 +180,7 @@ void listrms(char *variety)
        while (serv_gets(buf), strcmp(buf, "000")) {
                ++num_rooms;
                rp = malloc(sizeof(struct roomlisting));
-               extract(rp->rlname, buf, 0);
+               extract_token(rp->rlname, buf, 0, '|', sizeof rp->rlname);
                rp->rlflags = extract_int(buf, 1);
                rp->rlfloor = extract_int(buf, 2);
                rp->rlorder = extract_int(buf, 3);
@@ -300,7 +300,10 @@ void embed_view_o_matic(void) {
        int i;
 
        wprintf("<FORM NAME=\"viewomatic\">\n"
+               "<span class=\"room_banner_new_messages\">View as: "
                "<SELECT NAME=\"newview\" SIZE=\"1\" "
+               "STYLE=\"font-family: Bitstream Vera Sans,Arial,Helvetica,sans-serif;"
+               " font-size: 7pt; background: #444455; color: #ddddcc;\" "
                "OnChange=\"location.href=viewomatic.newview.options"
                "[selectedIndex].value\">\n");
 
@@ -324,7 +327,7 @@ void embed_view_o_matic(void) {
                        wprintf("</OPTION>\n");
                }
        }
-       wprintf("</SELECT></FORM>\n");
+       wprintf("</select></span></form>\n");
 }
 
 
@@ -376,12 +379,7 @@ void embed_room_banner(char *got, int navbar_style) {
                        "</td>\n"
                );
 
-               if ( (navbar_style == navbar_default)
-                  && (WC->wc_view != VIEW_CALENDAR) 
-                  && (WC->wc_view != VIEW_ADDRESSBOOK) 
-                  && (WC->wc_view != VIEW_NOTES) 
-                  && (WC->wc_view != VIEW_TASKS) 
-                  ) {
+               if ( (navbar_style == navbar_default) && (WC->wc_view == VIEW_BBS) ) {
                        wprintf(
                                "<td>"
                                "<A HREF=\"/readnew\">"
@@ -446,6 +444,17 @@ void embed_room_banner(char *got, int navbar_style) {
                                                "</span></a></td>\n"
                                        );
                                        break;
+                               case VIEW_MAILBOX:
+                                       wprintf(
+                                               "<td>"
+                                               "<A HREF=\"/readfwd\">"
+                                               "<img align=\"middle\" src=\"/static/readmsgs.gif\" "
+                                               "border=\"0\">"
+                                               "<span class=\"navbar_link\">"
+                                               "View message list"
+                                               "</span></a></td>\n"
+                                       );
+                                       break;
                                default:
                                        wprintf(
                                                "<td>"
@@ -537,7 +546,7 @@ void gotoroom(char *gname)
        if (buf[0] != '2') {
                return;
        }
-       extract(WC->wc_roomname, &buf[4], 0);
+       extract_token(WC->wc_roomname, &buf[4], 0, '|', sizeof WC->wc_roomname);
        WC->room_flags = extract_int(&buf[4], 4);
        /* highest_msg_read = extract_int(&buf[4],6);
           maxmsgnum = extract_int(&buf[4],5);
@@ -621,7 +630,7 @@ void gotonext(void)
                        while (serv_gets(buf), strcmp(buf, "000")) {
                                mptr = (struct march *) malloc(sizeof(struct march));
                                mptr->next = NULL;
-                               extract(mptr->march_name, buf, 0);
+                               extract_token(mptr->march_name, buf, 0, '|', sizeof mptr->march_name);
                                mptr->march_floor = extract_int(buf, 2);
                                mptr->march_order = extract_int(buf, 3);
                                if (WC->march == NULL) {
@@ -738,9 +747,9 @@ int self_service(int newval) {
        serv_gets(buf);
        if (buf[0] != '2') return(0);
 
-       extract(name, &buf[4], 0);
-       extract(password, &buf[4], 1);
-       extract(dirname, &buf[4], 2);
+       extract_token(name, &buf[4], 0, '|', sizeof name);
+       extract_token(password, &buf[4], 1, '|', sizeof password);
+       extract_token(dirname, &buf[4], 2, '|', sizeof dirname);
        flags = extract_int(&buf[4], 3);
        floor = extract_int(&buf[4], 4);
        order = extract_int(&buf[4], 5);
@@ -817,16 +826,18 @@ void display_editroom(void)
                display_main_menu();
                return;
        }
-       extract(er_name, &buf[4], 0);
-       extract(er_password, &buf[4], 1);
-       extract(er_dirname, &buf[4], 2);
+       extract_token(er_name, &buf[4], 0, '|', sizeof er_name);
+       extract_token(er_password, &buf[4], 1, '|', sizeof er_password);
+       extract_token(er_dirname, &buf[4], 2, '|', sizeof er_dirname);
        er_flags = extract_int(&buf[4], 3);
        er_floor = extract_int(&buf[4], 4);
 
        output_headers(1, 1, 1, 0, 0, 0, 0);
 
        /* print the tabbed dialog */
-       wprintf("<br /><center><TABLE border=0 cellspacing=0 cellpadding=0 width=99%%>"
+       wprintf("<br />"
+               "<div id=\"fix_scrollbar_bug\">"
+               "<TABLE border=0 cellspacing=0 cellpadding=0 width=100%%>"
                "<TR ALIGN=CENTER>"
                "<TD>&nbsp;</TD>\n");
 
@@ -926,16 +937,18 @@ void display_editroom(void)
 
        wprintf("<TD>&nbsp;</TD>\n");
 
-       wprintf("</TR></TABLE>\n");
+       wprintf("</TR></TABLE></div>\n");
        /* end tabbed dialog */ 
 
        /* begin content of whatever tab is open now */
-       wprintf("<TABLE border=0 width=99%% bgcolor=\"#FFFFFF\">\n"
+       wprintf("<div id=\"fix_scrollbar_bug\">"
+               "<TABLE border=0 width=100%% bgcolor=\"#FFFFFF\">\n"
                "<TR><TD>\n");
 
        if (!strcmp(tab, "admin")) {
                wprintf("<UL>"
-                       "<LI><A HREF=\"/confirm_delete_room\">\n"
+                       "<LI><A HREF=\"/delete_room\" "
+                       "onClick=\"return confirm('Are you sure you want to delete this room?');\">\n"
                        "Delete this room</A>\n"
                        "<LI><A HREF=\"/display_editroompic\">\n"
                        "Set or change the graphic for this room's banner</A>\n"
@@ -970,7 +983,7 @@ void display_editroom(void)
                wprintf("CHECKED ");
                wprintf("> Public room\n");
 
-               wprintf("<LI><INPUT TYPE=\"radio\" NAME=\"type\" VALUE=\"guessname\" ");
+               wprintf("<LI><INPUT TYPE=\"radio\" NAME=\"type\" VALUE=\"hidden\" ");
                if ((er_flags & QR_PRIVATE) &&
                    (er_flags & QR_GUESSNAME))
                        wprintf("CHECKED ");
@@ -1069,7 +1082,7 @@ void display_editroom(void)
                if (buf[0] != '2') {
                        wprintf("<EM>%s</EM>\n", &buf[4]);
                } else {
-                       extract(er_roomaide, &buf[4], 0);
+                       extract_token(er_roomaide, &buf[4], 0, '|', sizeof er_roomaide);
                        wprintf("<INPUT TYPE=\"text\" NAME=\"er_roomaide\" VALUE=\"%s\" MAXLENGTH=\"25\">\n", er_roomaide);
                }
        
@@ -1093,7 +1106,7 @@ void display_editroom(void)
                serv_puts("CONF getsys|application/x-citadel-ignet-config");
                serv_gets(buf);
                if (buf[0]=='1') while (serv_gets(buf), strcmp(buf, "000")) {
-                       extract(node, buf, 0);
+                       extract_token(node, buf, 0, '|', sizeof node);
                        not_shared_with = realloc(not_shared_with,
                                        strlen(not_shared_with) + 32);
                        strcat(not_shared_with, node);
@@ -1103,9 +1116,9 @@ void display_editroom(void)
                serv_puts("GNET");
                serv_gets(buf);
                if (buf[0]=='1') while (serv_gets(buf), strcmp(buf, "000")) {
-                       extract(cmd, buf, 0);
-                       extract(node, buf, 1);
-                       extract(remote_room, buf, 2);
+                       extract_token(cmd, buf, 0, '|', sizeof cmd);
+                       extract_token(node, buf, 1, '|', sizeof node);
+                       extract_token(remote_room, buf, 2, '|', sizeof remote_room);
                        if (!strcasecmp(cmd, "ignet_push_share")) {
                                shared_with = realloc(shared_with,
                                                strlen(shared_with) + 32);
@@ -1119,10 +1132,10 @@ void display_editroom(void)
                }
 
                for (i=0; i<num_tokens(shared_with, '\n'); ++i) {
-                       extract_token(buf, shared_with, i, '\n');
-                       extract_token(node, buf, 0, '|');
+                       extract_token(buf, shared_with, i, '\n', sizeof buf);
+                       extract_token(node, buf, 0, '|', sizeof node);
                        for (j=0; j<num_tokens(not_shared_with, '\n'); ++j) {
-                               extract_token(cmd, not_shared_with, j, '\n');
+                               extract_token(cmd, not_shared_with, j, '\n', sizeof cmd);
                                if (!strcasecmp(node, cmd)) {
                                        remove_token(not_shared_with, j, '\n');
                                }
@@ -1144,9 +1157,9 @@ void display_editroom(void)
                );
 
                for (i=0; i<num_tokens(shared_with, '\n'); ++i) {
-                       extract_token(buf, shared_with, i, '\n');
-                       extract_token(node, buf, 0, '|');
-                       extract_token(remote_room, buf, 1, '|');
+                       extract_token(buf, shared_with, i, '\n', sizeof buf);
+                       extract_token(node, buf, 0, '|', sizeof node);
+                       extract_token(remote_room, buf, 1, '|', sizeof remote_room);
                        if (strlen(node) > 0) {
                                wprintf("<FORM METHOD=\"POST\" "
                                        "ACTION=\"/netedit\">"
@@ -1188,7 +1201,7 @@ void display_editroom(void)
                );
 
                for (i=0; i<num_tokens(not_shared_with, '\n'); ++i) {
-                       extract_token(node, not_shared_with, i, '\n');
+                       extract_token(node, not_shared_with, i, '\n', sizeof node);
                        if (strlen(node) > 0) {
                                wprintf("<FORM METHOD=\"POST\" "
                                        "ACTION=\"/netedit\">"
@@ -1246,9 +1259,9 @@ void display_editroom(void)
                serv_puts("GNET");
                serv_gets(buf);
                if (buf[0]=='1') while (serv_gets(buf), strcmp(buf, "000")) {
-                       extract(cmd, buf, 0);
+                       extract_token(cmd, buf, 0, '|', sizeof cmd);
                        if (!strcasecmp(cmd, "listrecp")) {
-                               extract(recp, buf, 1);
+                               extract_token(recp, buf, 1, '|', sizeof recp);
                        
                                escputs(recp);
                                wprintf(" <A HREF=\"/netedit&cmd=remove&line="
@@ -1275,9 +1288,9 @@ void display_editroom(void)
                serv_puts("GNET");
                serv_gets(buf);
                if (buf[0]=='1') while (serv_gets(buf), strcmp(buf, "000")) {
-                       extract(cmd, buf, 0);
+                       extract_token(cmd, buf, 0, '|', sizeof cmd);
                        if (!strcasecmp(cmd, "digestrecp")) {
-                               extract(recp, buf, 1);
+                               extract_token(recp, buf, 1, '|', sizeof recp);
                        
                                escputs(recp);
                                wprintf(" <A HREF=\"/netedit&cmd=remove&line="
@@ -1401,7 +1414,7 @@ void display_editroom(void)
        }
 
        /* end content of whatever tab is open now */
-       wprintf("</TD></TR></TABLE>\n");
+       wprintf("</TD></TR></TABLE></div>\n");
 
        wDumpContent(1);
 }
@@ -1449,9 +1462,9 @@ void editroom(void)
                display_editroom();
                return;
        }
-       extract(er_name, &buf[4], 0);
-       extract(er_password, &buf[4], 1);
-       extract(er_dirname, &buf[4], 2);
+       extract_token(er_name, &buf[4], 0, '|', sizeof er_name);
+       extract_token(er_password, &buf[4], 1, '|', sizeof er_password);
+       extract_token(er_dirname, &buf[4], 2, '|', sizeof er_dirname);
        er_flags = extract_int(&buf[4], 3);
 
        strcpy(er_roomaide, bstr("er_roomaide"));
@@ -1461,7 +1474,7 @@ void editroom(void)
                if (buf[0] != '2') {
                        strcpy(er_roomaide, "");
                } else {
-                       extract(er_roomaide, &buf[4], 0);
+                       extract_token(er_roomaide, &buf[4], 0, '|', sizeof er_roomaide);
                }
        }
        strcpy(buf, bstr("er_name"));
@@ -1485,7 +1498,7 @@ void editroom(void)
        if (!strcmp(buf, "invonly")) {
                er_flags |= (QR_PRIVATE);
        }
-       if (!strcmp(buf, "guessname")) {
+       if (!strcmp(buf, "hidden")) {
                er_flags |= (QR_PRIVATE | QR_GUESSNAME);
        }
        if (!strcmp(buf, "passworded")) {
@@ -1594,7 +1607,7 @@ void do_invt_kick(void) {
                escputs(&buf[4]);
                return;
         }
-        extract(room, &buf[4], 0);
+        extract_token(room, &buf[4], 0, '|', sizeof room);
 
         strcpy(username, bstr("username"));
 
@@ -1645,7 +1658,7 @@ void display_whok(void)
                escputs(&buf[4]);
                return;
         }
-        extract(room, &buf[4], 0);
+        extract_token(room, &buf[4], 0, '|', sizeof room);
 
         
        wprintf("<TABLE border=0 CELLSPACING=10><TR VALIGN=TOP>"
@@ -1660,7 +1673,7 @@ void display_whok(void)
         serv_gets(buf);
         if (buf[0] == '1') {
                 while (serv_gets(buf), strcmp(buf, "000")) {
-                        extract(username, buf, 0);
+                        extract_token(username, buf, 0, '|', sizeof username);
                         wprintf("<OPTION>");
                         escputs(username);
                         wprintf("\n");
@@ -1714,9 +1727,10 @@ void display_entroom(void)
                "</div>\n<div id=\"content\">\n"
        );
 
-       wprintf("<center><table border=0 width=99%% bgcolor=\"#ffffff\"><tr><td>\n");
+       wprintf("<div id=\"fix_scrollbar_bug\">"
+               "<table border=0 width=100%% bgcolor=\"#ffffff\"><tr><td>\n");
 
-       wprintf("<FORM METHOD=\"POST\" ACTION=\"/entroom\">\n");
+       wprintf("<form name=\"create_room_form\" method=\"POST\" action=\"/entroom\">\n");
 
        wprintf("<UL><LI>Name of room: ");
        wprintf("<INPUT TYPE=\"text\" NAME=\"er_name\" MAXLENGTH=\"127\">\n");
@@ -1733,8 +1747,22 @@ void display_entroom(void)
                 }
         wprintf("</SELECT>\n");
 
+       /* Our clever little snippet of JavaScript automatically selects
+        * a public room if the view is set to Bulletin Board, and it
+        * selects a mailbox room otherwise.  The user can override this,
+        * of course.
+        */
        wprintf("<LI>Default view for room: ");
-        wprintf("<SELECT NAME=\"er_view\" SIZE=\"1\">\n");
+        wprintf("<SELECT NAME=\"er_view\" SIZE=\"1\" OnChange=\""
+               "       if (this.form.er_view.value == 0) {     "       
+               "               this.form.type[0].checked=true;         "
+               "               this.form.er_floor.disabled = false;    "
+               "       }                                               "
+               "       else {                                          "
+               "               this.form.type[4].checked=true;         "
+               "               this.form.er_floor.disabled = true;     "
+               "       }                                               "
+               "\">\n");
        for (i=0; i<(sizeof viewdefs / sizeof (char *)); ++i) {
                wprintf("<OPTION %s VALUE=\"%d\">",
                        ((i == 0) ? "SELECTED" : ""), i );
@@ -1746,20 +1774,38 @@ void display_entroom(void)
        wprintf("<LI>Type of room:<UL>\n");
 
        wprintf("<LI><INPUT TYPE=\"radio\" NAME=\"type\" VALUE=\"public\" ");
-       wprintf("CHECKED > Public room\n");
-
-       wprintf("<LI><INPUT TYPE=\"radio\" NAME=\"type\" VALUE=\"guessname\" ");
-       wprintf("> Private - guess name\n");
-
-       wprintf("<LI><INPUT TYPE=\"radio\" NAME=\"type\" VALUE=\"passworded\" ");
-       wprintf("> Private - require password:\n");
+       wprintf("CHECKED OnChange=\""
+               "       if (this.form.type[0].checked == true) {        "
+               "               this.form.er_floor.disabled = false;    "
+               "       }                                               "
+               "\"> Public (automatically appears to everyone)\n");
+
+       wprintf("<LI><INPUT TYPE=\"radio\" NAME=\"type\" VALUE=\"hidden\" OnChange=\""
+               "       if (this.form.type[1].checked == true) {        "
+               "               this.form.er_floor.disabled = false;    "
+               "       }                                               "
+               "\"> Private - hidden (accessible to anyone who knows its name)\n");
+
+       wprintf("<LI><INPUT TYPE=\"radio\" NAME=\"type\" VALUE=\"passworded\" OnChange=\""
+               "       if (this.form.type[2].checked == true) {        "
+               "               this.form.er_floor.disabled = false;    "
+               "       }                                               "
+               "\"> Private - require password:\n");
        wprintf("<INPUT TYPE=\"text\" NAME=\"er_password\" MAXLENGTH=\"9\">\n");
 
-       wprintf("<LI><INPUT TYPE=\"radio\" NAME=\"type\" VALUE=\"invonly\" ");
-       wprintf("> Private - invitation only\n");
+       wprintf("<LI><INPUT TYPE=\"radio\" NAME=\"type\" VALUE=\"invonly\" OnChange=\""
+               "       if (this.form.type[3].checked == true) {        "
+               "               this.form.er_floor.disabled = false;    "
+               "       }                                               "
+               "\"> Private - invitation only\n");
+
+       wprintf("<LI><INPUT TYPE=\"radio\" NAME=\"type\" VALUE=\"personal\" "
+               "OnChange=\""
+               "       if (this.form.type[4].checked == true) {        "
+               "               this.form.er_floor.disabled = true;     "
+               "       }                                               "
+               "\"> Personal (mailbox for you only)\n");
 
-       wprintf("<LI><INPUT TYPE=\"radio\" NAME=\"type\" VALUE=\"personal\" ");
-       wprintf("> Personal (mailbox for you only)\n");
        wprintf("</UL>\n");
 
        wprintf("<CENTER>\n");
@@ -1773,7 +1819,7 @@ void display_entroom(void)
        if (buf[0] == '1') {
                fmout(NULL, "CENTER");
        }
-       wprintf("</td></tr></table></center>\n");
+       wprintf("</td></tr></table></div>\n");
        wDumpContent(1);
 }
 
@@ -1799,9 +1845,9 @@ void er_set_default_view(int newview) {
        serv_gets(buf);
        if (buf[0] != '2') return;
 
-       extract(rm_name, &buf[4], 0);
-       extract(rm_pass, &buf[4], 1);
-       extract(rm_dir, &buf[4], 2);
+       extract_token(rm_name, &buf[4], 0, '|', sizeof rm_name);
+       extract_token(rm_pass, &buf[4], 1, '|', sizeof rm_pass);
+       extract_token(rm_dir, &buf[4], 2, '|', sizeof rm_dir);
        rm_bits1 = extract_int(&buf[4], 3);
        rm_floor = extract_int(&buf[4], 4);
        rm_listorder = extract_int(&buf[4], 5);
@@ -1842,7 +1888,7 @@ void entroom(void)
        er_view = atoi(bstr("er_view"));
 
        er_num_type = 0;
-       if (!strcmp(er_type, "guessname"))
+       if (!strcmp(er_type, "hidden"))
                er_num_type = 1;
        if (!strcmp(er_type, "passworded"))
                er_num_type = 2;
@@ -1870,11 +1916,16 @@ void entroom(void)
  */
 void display_private(char *rname, int req_pass)
 {
+       output_headers(1, 1, 2, 0, 0, 0, 0);
+       wprintf("<div id=\"banner\">\n"
+               "<TABLE WIDTH=100%% BORDER=0 BGCOLOR=\"#444455\"><TR><TD>"
+               "<SPAN CLASS=\"titlebar\">Go to a hidden room</SPAN>"
+               "</TD></TR></TABLE>\n"
+               "</div>\n<div id=\"content\">\n"
+       );
 
-       output_headers(1, 1, 0, 0, 0, 0, 0);
-
-       svprintf("BOXTITLE", WCS_STRING, "Go to a hidden room");
-       do_template("beginbox");
+       wprintf("<div id=\"fix_scrollbar_bug\">"
+               "<table border=0 width=100%% bgcolor=\"#ffffff\"><tr><td>\n");
 
        wprintf("<CENTER>\n");
        wprintf("<br />If you know the name of a hidden (guess-name) or\n");
@@ -1904,7 +1955,7 @@ void display_private(char *rname, int req_pass)
                "&nbsp;"
                "<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Cancel\">");
        wprintf("</FORM>\n");
-       do_template("endbox");
+       wprintf("</td></tr></table></div>\n");
        wDumpContent(1);
 }
 
@@ -1998,59 +2049,13 @@ void zap(void)
 
 
 
-
-/*
- * Confirm deletion of the current room
- */
-void confirm_delete_room(void)
-{
-       char buf[SIZ];
-
-       serv_puts("KILL 0");
-       serv_gets(buf);
-       if (buf[0] != '2') {
-               strcpy(WC->ImportantMessage, &buf[4]);
-               display_main_menu();
-               return;
-       }
-       output_headers(1, 1, 2, 0, 0, 0, 0);
-       wprintf("<div id=\"banner\">\n");
-       wprintf("<TABLE WIDTH=100%% BORDER=0 BGCOLOR=\"#770000\"><TR><TD>");
-       wprintf("<SPAN CLASS=\"titlebar\">Confirm deletion of room</SPAN>\n");
-       wprintf("</TD></TR></TABLE>\n");
-       wprintf("</div>\n<div id=\"content\">\n");
-
-       wprintf("<CENTER>");
-       wprintf("<FORM METHOD=\"GET\" ACTION=\"/delete_room\">\n");
-
-       wprintf("Are you sure you want to delete <FONT SIZE=+1>");
-       escputs(WC->wc_roomname);
-       wprintf("</FONT>?<br />\n");
-
-       wprintf("<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Delete\">");
-       wprintf("<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Cancel\">");
-
-       wprintf("</FORM></CENTER>\n");
-       wDumpContent(1);
-}
-
-
 /*
  * Delete the current room
  */
 void delete_room(void)
 {
        char buf[SIZ];
-       char sc[SIZ];
-
-       strcpy(sc, bstr("sc"));
 
-       if (strcasecmp(sc, "Delete")) {
-               strcpy(WC->ImportantMessage,
-                       "Cancelled.  This room was not deleted.");
-               display_main_menu();
-               return;
-       }
        serv_puts("KILL 1");
        serv_gets(buf);
        if (buf[0] != '2') {
@@ -2101,10 +2106,10 @@ void netedit(void) {
 
        /* This loop works for add *or* remove.  Spiffy, eh? */
        while (serv_gets(buf), strcmp(buf, "000")) {
-               extract(cmpa0, buf, 0);
-               extract(cmpa1, buf, 1);
-               extract(cmpb0, line, 0);
-               extract(cmpb1, line, 1);
+               extract_token(cmpa0, buf, 0, '|', sizeof cmpa0);
+               extract_token(cmpa1, buf, 1, '|', sizeof cmpa1);
+               extract_token(cmpb0, line, 0, '|', sizeof cmpb0);
+               extract_token(cmpb1, line, 1, '|', sizeof cmpb1);
                if ( (strcasecmp(cmpa0, cmpb0)) 
                   || (strcasecmp(cmpa1, cmpb1)) ) {
                        fprintf(fp, "%s\n", buf);
@@ -2256,7 +2261,7 @@ void do_folder_view(struct folder *fold, int max_folders, int num_floors) {
                else {
                        wprintf("<SPAN CLASS=\"roomlist_old\">");
                }
-               extract(buf, fold[i].name, levels-1);
+               extract_token(buf, fold[i].name, levels-1, '|', sizeof buf);
                escputs(buf);
                wprintf("</SPAN>");
 
@@ -2334,7 +2339,7 @@ void do_rooms_view(struct folder *fold, int max_folders, int num_floors) {
                if (levels == 1) {
 
                        /* Begin inner box */
-                       extract(buf, fold[i].name, levels-1);
+                       extract_token(buf, fold[i].name, levels-1, '|', sizeof buf);
                        stresc(boxtitle, buf, 1, 0);
                        svprintf("BOXTITLE", WCS_STRING, boxtitle);
                        do_template("beginbox");
@@ -2360,7 +2365,7 @@ void do_rooms_view(struct folder *fold, int max_folders, int num_floors) {
                        else {
                                wprintf("<SPAN CLASS=\"roomlist_old\">");
                        }
-                       extract(buf, fold[i].name, levels-1);
+                       extract_token(buf, fold[i].name, levels-1, '|', sizeof buf);
                        escputs(buf);
                        wprintf("</SPAN>");
                        if (fold[i].selectable) {
@@ -2417,7 +2422,7 @@ void list_all_rooms_by_floor(char *viewpref) {
                                alloc_folders * sizeof(struct folder));
                }
                memset(&fold[max_folders], 0, sizeof(struct folder));
-               extract(fold[max_folders].name, buf, 1);
+               extract_token(fold[max_folders].name, buf, 1, '|', sizeof fold[max_folders].name);
                ++max_folders;
                ++num_floors;
        }
@@ -2432,7 +2437,7 @@ void list_all_rooms_by_floor(char *viewpref) {
                                alloc_folders * sizeof(struct folder));
                }
                memset(&fold[max_folders], 0, sizeof(struct folder));
-               extract(fold[max_folders].room, buf, 0);
+               extract_token(fold[max_folders].room, buf, 0, '|', sizeof fold[max_folders].room);
                ra_flags = extract_int(buf, 5);
                flags = extract_int(buf, 1);
                fold[max_folders].floor = extract_int(buf, 2);
@@ -2510,7 +2515,7 @@ void knrooms() {
                }
        }
 
-       get_preference("roomlistview", listviewpref);
+       get_preference("roomlistview", listviewpref, sizeof listviewpref);
 
        if ( (strcasecmp(listviewpref, "folders"))
           && (strcasecmp(listviewpref, "table")) ) {