15 * Look for URL's embedded in a buffer and make them linkable. We use a
16 * target window in order to keep the BBS session in its own window.
31 for (pos=0; pos<strlen(buf); ++pos) {
32 if (!strncasecmp(&buf[pos],"http://",7)) start = pos;
33 if (!strncasecmp(&buf[pos],"ftp://",6)) start = pos;
38 if ((start>0)&&(buf[start-1]=='<')) ench = '>';
39 if ((start>0)&&(buf[start-1]=='[')) ench = ']';
40 if ((start>0)&&(buf[start-1]=='(')) ench = ')';
41 if ((start>0)&&(buf[start-1]=='{')) ench = '}';
43 for (pos=strlen(buf); pos>start; --pos) {
44 if ((buf[pos]==' ')||(buf[pos]==ench)) end = pos;
47 strncpy(urlbuf,&buf[start],end-start);
48 urlbuf[end-start] = 0;
51 strncpy(outbuf,buf,start);
52 sprintf(&outbuf[start],"%cA HREF=%c%s%c TARGET=%c%s%c%c%s%c/A%c",
53 LB,QU,urlbuf,QU,QU,TARGET,QU,RB,urlbuf,LB,RB);
54 strcat(outbuf,&buf[end]);
59 void read_message(msgnum, oper)
71 sprintf(buf,"MSG0 %ld",msgnum);
75 wprintf("<STRONG>ERROR:</STRONG> %s<BR>\n",&buf[4]);
79 wprintf("<TABLE WIDTH=100% BORDER=0 CELLSPACING=0 CELLPADDING=0 BGCOLOR=000077><TR><TD>\n");
80 wprintf("<FONT COLOR=\"FFFF00\"><B> ");
83 strcpy(reply_to,"nobody...xxxxx");
84 while(serv_gets(buf), strncasecmp(buf,"text",4)) {
85 if (!strncasecmp(buf,"nhdr=yes",8)) nhdr=1;
86 if (nhdr==1) buf[0]='_';
87 if (!strncasecmp(buf,"type=",5))
88 format_type=atoi(&buf[5]);
89 if (!strncasecmp(buf,"from=",5)) {
90 wprintf("from %s ",&buf[5]);
93 if (!strncasecmp(buf,"path=",5))
94 strcpy(reply_to,&buf[5]);
95 if (!strncasecmp(buf,"subj=",5))
96 strcpy(m_subject,&buf[5]);
97 if ((!strncasecmp(buf,"hnod=",5))
98 && (strcasecmp(&buf[5],serv_info.serv_humannode)))
99 wprintf("(%s) ",&buf[5]);
100 if ((!strncasecmp(buf,"room=",5))
101 && (strcasecmp(&buf[5],wc_roomname)))
102 wprintf("in %s> ",&buf[5]);
104 if (!strncasecmp(buf,"node=",5)) {
105 if ( (room_flags&QR_NETWORK)
106 || ((strcasecmp(&buf[5],serv_info.serv_nodename)
107 &&(strcasecmp(&buf[5],serv_info.serv_fqdn)))))
109 wprintf("@%s ",&buf[5]);
111 if ((!strcasecmp(&buf[5],serv_info.serv_nodename))
112 ||(!strcasecmp(&buf[5],serv_info.serv_fqdn)))
114 strcpy(reply_to,from);
116 else if (haschar(&buf[5],'.')==0) {
117 sprintf(reply_to,"%s @ %s",from,&buf[5]);
121 if (!strncasecmp(buf,"rcpt=",5))
122 wprintf("to %s ",&buf[5]);
123 if (!strncasecmp(buf,"time=",5)) {
125 tm=(struct tm *)localtime(&now);
126 strcpy(buf,(char *)asctime(tm)); buf[strlen(buf)-1]=0;
127 strcpy(&buf[16],&buf[19]);
128 wprintf("%s ",&buf[4]);
132 if (nhdr==1) wprintf("****");
133 wprintf("</B></FONT></TD>");
136 wprintf("<TD ALIGN=RIGHT NOWRAP><FONT COLOR=\"FFFF00\"><B>");
138 wprintf("<A HREF=\"/confirm_move_msg");
139 wprintf("&msgid=%ld", msgnum);
140 wprintf("&referer=%s\">Move</A>", oper);
142 wprintf(" ");
144 wprintf("<A HREF=\"/confirm_delete_msg");
145 wprintf("&msgid=%ld", msgnum);
146 wprintf("&referer=%s\">Del</A>", oper);
148 wprintf("</B></FONT></TD>");
151 wprintf("</TR></TABLE>\n");
153 if (strlen(m_subject)>0) {
154 wprintf("Subject: %s<BR>\n",m_subject);
157 if (format_type == 0) {
161 while(serv_gets(buf), strcmp(buf,"000")) {
162 while ((strlen(buf)>0)&&(isspace(buf[strlen(buf)-1])))
163 buf[strlen(buf)-1] = 0;
165 ((!strncmp(buf,">",1))||(!strncmp(buf," >",2))||(!strncmp(buf," :-)",4)))) {
166 wprintf("<FONT COLOR=\"000044\"><I>");
170 (strncmp(buf,">",1))&&(strncmp(buf," >",2))&&(strncmp(buf," :-)",4))) {
171 wprintf("</FONT></I>");
177 wprintf("</TT><BR>\n");
185 * load message pointers from the server
187 int load_msg_ptrs(servcmd)
196 wprintf("<EM>%s</EM><BR>\n",&buf[4]);
199 while (serv_gets(buf), strcmp(buf,"000")) {
200 msgarr[nummsgs] = atol(buf);
208 * command loop for reading messages
210 void readloop(char *oper) {
215 printf("HTTP/1.0 200 OK\n");
217 wprintf("<HTML><HEAD><TITLE>Messages</TITLE>\n");
218 wprintf("</HEAD><BODY BACKGROUND=\"/image&name=background\" TEXT=\"#000000\" LINK=\"#004400\">\n");
220 wprintf("<CENTER><B>%s - ",wc_roomname);
221 if (!strcmp(oper,"readnew")) {
222 strcpy(cmd,"MSGS NEW");
223 wprintf("new messages");
225 else if (!strcmp(oper,"readold")) {
226 strcpy(cmd,"MSGS OLD");
227 wprintf("old messages");
230 strcpy(cmd,"MSGS ALL");
231 wprintf("all messages");
233 wprintf("</B></CENTER><BR>\n");
235 nummsgs = load_msg_ptrs(cmd);
237 if (!strcmp(oper,"readnew")) {
238 wprintf("<EM>No new messages in this room.</EM>\n");
240 else if (!strcmp(oper,"readold")) {
241 wprintf("<EM>No old messages in this room.</EM>\n");
244 wprintf("<EM>This room is empty.</EM>\n");
249 for (a=0; a<nummsgs; ++a) {
250 read_message(msgarr[a], oper);
253 DONE: wprintf("</BODY></HTML>\n");