]> code.citadel.org Git - citadel.git/blobdiff - webcit/roomops.c
* Brought over the newer string tokenizer from Citadel
[citadel.git] / webcit / roomops.c
index 008b75d338abde25e24106abf74da533a3743687..1a3c2960c9d42f403e1d1a0d0d45b7b3d72d2689 100644 (file)
@@ -28,7 +28,7 @@
 
 
 
-char floorlist[128][256];
+char floorlist[128][SIZ];
 
 
 /*
@@ -37,7 +37,7 @@ char floorlist[128][256];
 void load_floorlist(void)
 {
        int a;
-       char buf[256];
+       char buf[SIZ];
 
        for (a = 0; a < 128; ++a)
                floorlist[a][0] = 0;
@@ -150,7 +150,7 @@ int rordercmp(struct roomlisting *r1, struct roomlisting *r2)
  */
 void listrms(char *variety)
 {
-       char buf[256];
+       char buf[SIZ];
        int num_rooms = 0;
 
        struct roomlisting *rl = NULL;
@@ -220,7 +220,7 @@ void listrms(char *variety)
 void list_all_rooms_by_floor(void)
 {
        int a;
-       char buf[256];
+       char buf[SIZ];
 
        load_floorlist();
 
@@ -272,7 +272,7 @@ void zapped_list(void)
 {
        output_headers(1);
        wprintf("<TABLE WIDTH=100%% BORDER=0 BGCOLOR=770000><TR><TD>");
-       wprintf("SIZE=+1 COLOR=\"FFFFFF\"");
+       wprintf("<FONT SIZE=+1 COLOR=\"FFFFFF\"");
        wprintf("<B>Zapped (forgotten) rooms</B>\n");
        wprintf("</TD></TR></TABLE><BR>\n");
        listrms("LZRM -1");
@@ -285,9 +285,9 @@ void zapped_list(void)
 /*
  * read this room's info file (set v to 1 for verbose mode)
  */
-void readinfo(int v)
+void readinfo(void)
 {
-       char buf[256];
+       char buf[SIZ];
 
        serv_puts("RINF");
        serv_gets(buf);
@@ -296,50 +296,19 @@ void readinfo(int v)
                fmout(NULL);
                wprintf("</FONT>");
        }
-       else {
-               if (v == 1)
-                       wprintf("<EM>%s</EM><BR>\n", &buf[4]);
-       }
 }
 
 
 
-void embed_room_banner(char *got) {
-       char buf[256];
-       char fakegot[256];
-       static int remember_new_mail = (-1);
 
-       /* We need to have the information returned by a GOTO server command.
-        * If it isn't supplied, we fake it by issuing our own GOTO.
-        */
-       if (got == NULL) {
-               serv_printf("GOTO %s", WC->wc_roomname);
-               serv_gets(fakegot);
-               got = fakegot;
-       }
-
-       /* Check for new mail. */
-       WC->new_mail = extract_int(&got[4], 9);
-
-       /* Now start spewing HTML. */
-       wprintf("<CENTER><TABLE width=100%% border=0 cellpadding=5><TR>");
+/* Display room graphic.  The server doesn't actually
+ * need the room name, but we supply it in order to
+ * keep the browser from using a cached graphic from 
+ * another room.
+ */
+void embed_room_graphic(void) {
+       char buf[SIZ];
 
-       if ((strlen(WC->ugname) > 0) && (strcasecmp(WC->ugname, WC->wc_roomname))) {
-               wprintf("<TD VALIGN=TOP><A HREF=\"/ungoto\">");
-               wprintf("<IMG SRC=\"/static/back.gif\" BORDER=0>");
-               wprintf("<BR><FONT SIZE=-2>Previous room</FONT></A></TD>");
-       }
-       wprintf("<TD VALIGN=TOP BGCOLOR=444455>");
-       wprintf("<FONT SIZE=+2 COLOR=FFFFEE>%s</FONT><BR>", WC->wc_roomname);
-       wprintf("<FONT COLOR=DDDDCC>%d new of %d messages</FONT></TD>\n",
-               extract_int(&got[4], 1),
-               extract_int(&got[4], 2));
-
-       /* Display room graphic.  The server doesn't actually
-        * need the room name, but we supply it in order to
-        * keep the browser from using a cached graphic from 
-        * another room.
-        */
        serv_puts("OIMG _roompic_");
        serv_gets(buf);
        if (buf[0] == '2') {
@@ -350,24 +319,49 @@ void embed_room_banner(char *got) {
                serv_puts("CLOS");
                serv_gets(buf);
        }
-       wprintf("<TD VALIGN=TOP>");
-       readinfo(0);
-       wprintf("</TD>");
 
-       /* Let the user know if new mail has arrived */
-       if ( (WC->new_mail > remember_new_mail) && (WC->new_mail>0) ) {
+}
+
+
+/* Let the user know if new mail has arrived 
+ */
+void embed_newmail_button(void) {
+       if ( (WC->new_mail > WC->remember_new_mail) && (WC->new_mail>0) ) {
                wprintf("<TD VALIGN=TOP>"
                        "<IMG SRC=\"/static/mail.gif\" border=0 "
                        "ALT=\"You have new mail\">"
                        "<BR><BLINK>%d</BLINK>", WC->new_mail);
                wprintf("<FONT SIZE=-2> new mail messages</FONT></TD>");
-               remember_new_mail = WC->new_mail;
+               WC->remember_new_mail = WC->new_mail;
+       }
+}
+
+
+
+void embed_room_banner(char *got) {
+       char fakegot[SIZ];
+
+       /* We need to have the information returned by a GOTO server command.
+        * If it isn't supplied, we fake it by issuing our own GOTO.
+        */
+       if (got == NULL) {
+               serv_printf("GOTO %s", WC->wc_roomname);
+               serv_gets(fakegot);
+               got = fakegot;
        }
 
-       wprintf("<TD VALIGN=TOP><A HREF=\"/gotonext\">");
-       wprintf("<IMG SRC=\"/static/forward.gif\" border=0>");
-       wprintf("<BR><FONT SIZE=-2>Next room</FONT></A></TD>");
-       wprintf("</TR></TABLE></CENTER>\n");
+       /* Check for new mail. */
+       WC->new_mail = extract_int(&got[4], 9);
+
+       svprintf("ROOMNAME", WCS_STRING, "%s", WC->wc_roomname);
+       svprintf("NEWMSGS", WCS_STRING, "%d", extract_int(&got[4], 1));
+       svprintf("TOTALMSGS", WCS_STRING, "%d", extract_int(&got[4], 2));
+       svcallback("ROOMPIC", embed_room_graphic);
+       svcallback("ROOMINFO", readinfo);
+       svcallback("YOUHAVEMAIL", embed_newmail_button);
+
+       do_template("roombanner.html");
+       clear_local_substs();
 }
 
 
@@ -383,7 +377,7 @@ void embed_room_banner(char *got) {
  */
 void gotoroom(char *gname, int display_name)
 {
-       char buf[256];
+       char buf[SIZ];
        static long ls = (-1L);
 
 
@@ -393,7 +387,10 @@ void gotoroom(char *gname, int display_name)
                 wprintf("Cache-Control: no-store\n");
 
                wprintf("<HTML><HEAD>\n"
+                       "<META HTTP-EQUIV=\"refresh\" CONTENT=\"500363689;\">\n"
                        "<META HTTP-EQUIV=\"Pragma\" CONTENT=\"no-cache\">\n"
+                       "<META HTTP-EQUIV=\"expired\" CONTENT=\"28-May-1971 18:10:00 GMT\">\n"
+                       "<meta name=\"MSSmartTagsPreventParsing\" content=\"TRUE\">\n"
                        "</HEAD>\n");
                do_template("background.html");
        }
@@ -489,7 +486,7 @@ char *pop_march(int desired_floor)
  */
 void gotonext(void)
 {
-       char buf[256];
+       char buf[SIZ];
        struct march *mptr, *mptr2;
        char next_room[32];
 
@@ -559,7 +556,7 @@ void smart_goto(char *next_room) {
  */
 void slrp_highest(void)
 {
-       char buf[256];
+       char buf[SIZ];
 
        /* set pointer */
        serv_puts("SLRP HIGHEST");
@@ -576,7 +573,7 @@ void slrp_highest(void)
  */
 void ungoto(void)
 {
-       char buf[256];
+       char buf[SIZ];
 
        if (!strcmp(WC->ugname, "")) {
                smart_goto(WC->wc_roomname);
@@ -602,7 +599,7 @@ void ungoto(void)
  */
 void display_editroom(void)
 {
-       char buf[256];
+       char buf[SIZ];
        char er_name[20];
        char er_password[10];
        char er_dirname[15];
@@ -784,7 +781,7 @@ void display_editroom(void)
  */
 void editroom(void)
 {
-       char buf[256];
+       char buf[SIZ];
        char er_name[20];
        char er_password[10];
        char er_dirname[15];
@@ -925,6 +922,79 @@ void editroom(void)
        smart_goto(er_name);
 }
 
+/*
+ * Invite, Kick, and show Who Knows a room
+ */
+void display_whok(void)
+{
+        char buf[SIZ], room[SIZ], username[SIZ];
+
+        serv_puts("GETR");
+        serv_gets(buf);
+
+        if (buf[0] != '2') {
+                display_error(&buf[4]);
+                return;
+        }
+        extract(room, &buf[4], 0);
+
+        strcpy(username, bstr("username"));
+
+        output_headers(1);
+
+        if(!strcmp(bstr("sc"), "Kick")) {
+                sprintf(buf, "KICK %s", username);
+                serv_puts(buf);
+                serv_gets(buf);
+
+                if (buf[0] != '2') {
+                        display_error(&buf[4]);
+                        return;
+                } else {
+                        wprintf("User %s kicked out of room %s.\n", 
+                                username, room);
+                }
+        } else if(!strcmp(bstr("sc"), "Invite")) {
+                sprintf(buf, "INVT %s", username);
+                serv_puts(buf);
+                serv_gets(buf);
+
+                if (buf[0] != '2') {
+                        display_error(&buf[4]);
+                        return;
+                } else {
+                        wprintf("User %s invited to room %s.\n", 
+                                username, room);
+                }
+        }
+        
+
+        wprintf("<FORM METHOD=\"POST\" ACTION=\"/display_whok\">\n");
+        wprintf("<SELECT NAME=\"username\" SIZE=10>\n");
+        serv_puts("WHOK");
+        serv_gets(buf);
+        if (buf[0] == '1') {
+                while (serv_gets(buf), strcmp(buf, "000")) {
+                        extract(username, buf, 0);
+                        wprintf("<OPTION>");
+                        escputs(username);
+                        wprintf("\n");
+                }
+        }
+        wprintf("</SELECT>\n");
+
+        wprintf("<CENTER>\n");
+        wprintf("<input type=submit name=sc value=\"Kick\">");
+        wprintf("</CENTER>\n");
+        wprintf("</FORM>\n");
+        wprintf("<FORM METHOD=\"POST\" ACTION=\"/display_whok\">\n");
+        wprintf("Invite: ");
+        wprintf("<input type=text name=username>\n");
+        wprintf("<input type=hidden name=sc value=\"Invite\">");
+        wprintf("<input type=submit value=\"Invite\">");
+        wDumpContent(1);
+}
+
 
 
 /*
@@ -932,7 +1002,8 @@ void editroom(void)
  */
 void display_entroom(void)
 {
-       char buf[256];
+       int i;
+       char buf[SIZ];
 
        serv_puts("CRE8 0");
        serv_gets(buf);
@@ -967,12 +1038,32 @@ void display_entroom(void)
 
        wprintf("<LI><INPUT TYPE=\"radio\" NAME=\"type\" VALUE=\"invonly\" ");
        wprintf("> Private - invitation only\n");
+       wprintf("</UL>\n");
+
+        wprintf("<LI>Resides on floor: ");
+        load_floorlist(); 
+        wprintf("<SELECT NAME=\"er_floor\" SIZE=\"1\">\n");
+        for (i = 0; i < 128; ++i)
+                if (strlen(floorlist[i]) > 0) {
+                        wprintf("<OPTION ");
+                        wprintf("VALUE=\"%d\">", i);
+                        escputs(floorlist[i]);
+                        wprintf("</OPTION>\n");
+                }
+        wprintf("</SELECT>\n");                
+       wprintf("</UL>\n");
+
 
        wprintf("<CENTER>\n");
        wprintf("<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"OK\">");
        wprintf("<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Cancel\">");
        wprintf("</CENTER>\n");
-       wprintf("</FORM>\n");
+       wprintf("</FORM>\n<HR>");
+       serv_printf("MESG roomaccess");
+       serv_gets(buf);
+       if (buf[0] == '1') {
+               fmout(NULL);
+       }
        wDumpContent(1);
 }
 
@@ -983,10 +1074,11 @@ void display_entroom(void)
  */
 void entroom(void)
 {
-       char buf[256];
+       char buf[SIZ];
        char er_name[20];
        char er_type[20];
        char er_password[10];
+       int er_floor;
        int er_num_type;
 
        if (strcmp(bstr("sc"), "OK")) {
@@ -996,6 +1088,7 @@ void entroom(void)
        strcpy(er_name, bstr("er_name"));
        strcpy(er_type, bstr("type"));
        strcpy(er_password, bstr("er_password"));
+       er_floor = atoi(bstr("er_floor"));
 
        er_num_type = 0;
        if (!strcmp(er_type, "guessname"))
@@ -1005,7 +1098,8 @@ void entroom(void)
        if (!strcmp(er_type, "invonly"))
                er_num_type = 3;
 
-       sprintf(buf, "CRE8 1|%s|%d|%s", er_name, er_num_type, er_password);
+       sprintf(buf, "CRE8 1|%s|%d|%s|%d", 
+               er_name, er_num_type, er_password, er_floor);
        serv_puts(buf);
        serv_gets(buf);
        if (buf[0] != '2') {
@@ -1062,7 +1156,7 @@ void display_private(char *rname, int req_pass)
 void goto_private(void)
 {
        char hold_rm[32];
-       char buf[256];
+       char buf[SIZ];
 
        if (strcasecmp(bstr("sc"), "OK")) {
                display_main_menu();
@@ -1120,8 +1214,8 @@ void display_zap(void)
  */
 void zap(void)
 {
-       char buf[256];
-       char final_destination[256];
+       char buf[SIZ];
+       char final_destination[SIZ];
 
        /* If the forget-room routine fails for any reason, we fall back
         * to the current room; otherwise, we go to the Lobby
@@ -1154,7 +1248,7 @@ void zap(void)
  */
 void confirm_delete_room(void)
 {
-       char buf[256];
+       char buf[SIZ];
 
        serv_puts("KILL 0");
        serv_gets(buf);
@@ -1188,8 +1282,8 @@ void confirm_delete_room(void)
  */
 void delete_room(void)
 {
-       char buf[256];
-       char sc[256];
+       char buf[SIZ];
+       char sc[SIZ];
 
        strcpy(sc, bstr("sc"));