diff options
Diffstat (limited to 'web/parse_html.c')
-rwxr-xr-x | web/parse_html.c | 294 |
1 files changed, 0 insertions, 294 deletions
diff --git a/web/parse_html.c b/web/parse_html.c deleted file mode 100755 index 402412de..00000000 --- a/web/parse_html.c +++ /dev/null @@ -1,294 +0,0 @@ -#include "mod_ptt.h" -#include <time.h> -#include <math.h> -#define KUSERINFO "$userinfo$" -#define KUSERID "$userid$" -#define KUSERNAME "$username$" -#define KUSERMONEY "$usermoney$" -#define KTIMEYEAR "$timeyear$" -#define KTIMEMONTH "$timemonth$" -#define KTIMEMDAY "$timemday$" -#define KTIMEWEEK "$timeweek$" -#define KSERVERTIME "$servertime$" -#define KTIMEHOUR "$hour$" -#define KTIMEMINUTE "$minute$" -#define KTIMESECOND "$second$" -#define KMSGONLOAD "$MSGonLoad$" -#define KFCSONLOAD "$FCSonLoad$" -#define KHTMLTITLE "$HTMLtitle$" -#define KSCROLLTITLE "$SCROLLtitle$" -#define KBGCOLOR "$BGCOLOR$" -#define KBGSOUND "$BGSOUND$" -#define KINCHTML "$file:" - - - -char * -ap_parseline(request_rec *r, const char *str, char *str_substiute[]) { - int i, off=0; - char *strbuf, *po; - pool *p = r->pool; - strbuf = pstrdup(p, str); - - if(str_substiute == NULL) return strbuf; - for(i=0; str_substiute[i]!=NULL; i+=2) - { - off = 0; - while(po = strstr(strbuf + off, str_substiute[i])) - { - *po = 0; - strbuf = pstrcat(p, strbuf, str_substiute[i+1] !=NULL - ? str_substiute[i+1] : "", po+strlen(str_substiute[i]), NULL); - off += str_substiute[i+1] ? strlen(str_substiute[i+1]) : 0; - } - } - return strbuf; -} - -char * -ap_standard_parseline(request_rec *r, char *str) -{ - time_t now = time(NULL); - pool *p = r->pool; - char *str_substiute[]= // 關鍵字的代換表 - { - KUSERID, "ptt", - KUSERNAME, "name", -/* - KTIMEYEAR, whatyear(p,&now), - KTIMEMONTH,whatmonth(p,&now), - KTIMEMDAY, whatday(p,&now), - KTIMEWEEK, whatweek(p,&now), - KSERVERTIME, whattime(p,&now), - KTIMEHOUR, whathour(p,&now), - KTIMEMINUTE, whatminute(p,&now), - KTIMESECOND, whatsecond(p,&now), -*/ - KUSERINFO, NULL, - KUSERMONEY, "100", - NULL,NULL - }; - return ap_parseline(r, str, str_substiute); -} - -int -ap_showfile(request_rec *r, char *filename, char *table[], char *t2[], FILE *fo) -{ - pool *p = r->pool; - FILE *fp = pfopen(p, filename, "r"); - char *str, *incfile, buf[512]; - - if (!fp) { -#if DEBUG - rputs(filename, r); -#endif - return -1; - } - - while (fgets(buf, 512, fp)) - { - - str = ap_standard_parseline(r, - ap_parseline(r, - ap_parseline(r, buf, table), - t2)); - - if ((incfile = strstr(str, KINCHTML)) != NULL) { - incfile += strlen(KINCHTML); - incfile = strtok(incfile, "$"); -#if 0 - if (*incfile != '/') - incfile = ap_pstrcat(p, TEMPLATEDIR "/", incfile, NULL); -#endif - ap_showfile(r, incfile, table, t2, fo); - } else if(fo) fputs(str, fo); - else rputs(str, r); - } - - pfclose(p, fp); - return 0; -} - -char * -add_href(pool *p, char *l) -{ - char *href[] = {"http://", "ftp://", "gopher://", "file://", - "telnet://", "mailto:", NULL}, - *end, url[PATHLEN], *tl, *po; - int i, urllen, off; - - tl = pstrdup(p, l); - - for(i=0; href[i]!=NULL; i++) - { - off = 0; - //Ptt: while 應該用 while 但 while 有bug - if((po = strstr(tl + off, href[i]))) - { - for(end = po; (*end>='&' && *end<='z')||*end=='~' ; end++); - urllen = end - po; - - if(urllen > PATHLEN) - { - off += PATHLEN; continue; - } - - strncpy(url, po, urllen); - *po= 0; - url[urllen] = 0; - tl = psprintf(p, "%s<a href=\"%s\" target=\"%s\">%s</a>%s", tl, - url, "new", url, end); - off += 2 * urllen + 15; - } - } - - return tl; -} - -/* - format: - char *name, void *ptr, size_t length - char *name, int *ptr, -1 - char *name, char **ptr, 0 -*/ -int -GetQueryDatas(request_rec *r, int **table) -{ - int rc, i, match=0, dlen, maxlen; - char *name, *value, *str; - pool *p = r->pool; - - for(i=1; table[i]!=NULL; i+=3) - { - if((int) table[i+1]) *table[i]=0; - else (char *) (*table[i]) = pstrdup(p, ""); - } - do - { - if((rc = unescape(r, &name, &value))<0) break; - for(i=0; table[i]; i+=3) - { - if(!strcmp((char *)table[i], name)) break; - -#if 0 -/* SiE990313 test: 抓 未定義的變數 */ - if(!strcmp((char *)table[i], "$SPARE$")) - { - (char *) (*table[i + 1]) = pstrdup(p, name); - continue; - } -#endif - } - if(table[i] && table[i+1]) - { - if((maxlen = (int) table[i+2]) > 0) - { - if(!*value) continue; - dlen = strlen((char *)table[i+1]); - str = ap_escape_html(p, value); - if(maxlen > dlen) - strexam( - strncat((char *)table[i+1],str,maxlen-dlen) - ); - } - else if((int) table[i+2] == 0) // for file upload - { -// str = ap_escape_html(p, value); - //if(value) - (*table[i+1]) = (int) value; -// else (*table[i+1]) = (int) pstrdup(p,""); - } - else - { - if(!*value) continue; - *(table[i+1]) += atoi(value); - } - match++; - } - } while(rc>0); - return match; -} - - -int -ap_url_redirect(request_rec *r, char *url) -{ - r->status = REDIRECT; - - ap_table_setn(r->headers_out, "Location", pstrdup(r->pool, url)); - return MOVED; - //return REDIRECT, MOVED 或 HTTP_SEE_OTHER 都可 -} - -char * -pint2str(pool* p, int c) -{ - return ap_psprintf(p,"%d",c); -} - -char* -preplace(request_rec *r, char* src, char* sig, char* rep) -{ - char *ptr; - int siglen=strlen(sig), off=0; - - while((ptr = strstr(src+off,sig))) - { - *ptr = 0; - src = pstrcat(r->pool, src, rep, NULL); - off = strlen(src); - src = pstrcat(r->pool, src, ptr+siglen, NULL); - } - return src; -} - -int -hex2dig(char *str) -{ - int base,ret=0,i,len=strlen(str); - - for(i=0; i<len; i++) - { - if(str[i]>='a' && str[i]<='f') base = str[i]-'a'+10; - else if(str[i]>='A' && str[i]<='F') base = str[i]-'A'+10; - else if(str[i]>='0' && str[i]<='9') base = str[i]-'0'; - else return -1; - - ret += base*pow(16,len-i-1); - } - return ret; -} - -char * -pstrncpy(pool* p, char tmp[], int n) -{ - char *ptr; - ptr=pstrdup(p,tmp); - *(ptr+n)=0; - return psprintf(p,"%s",ptr); -} - -char * -GetPathToken(request_rec *r, int count) -{ - char *str, *token, *sepr = "/\\?&"; - int i; - str = pstrdup(r->pool, r->path_info + 1); - token = strtok(str, sepr); - for( i = 1 ; i < count; i++) - { - token = strtok(NULL, sepr); - if(!token) return "-1"; /* Heat:count超過也要考慮 */ - } - return token; -} - - -/* - 個人信件夾檔保管方式: - - mail/@/rec/FF/F/UUDDTT - mail/@/dat/FF/F/UUDDTT - -*/ - |