gcs3.c
0000#include <stdio.h>
0001#include <gdbm.h>
0002#include "gcs3.h"
0003extern int outbyte(int num,const char *buf);
0004extern int outstr(const char *buf); /* for zero-terminated string */
0005extern int flush();
0006extern void fatal_func();
0007
0008/********************************************************
0009 header of an html document
0010********************************************************/
0011void hthead(char *title)
0012{
0013 outstr("<html>\n");
0014 outstr("<head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=EUC-JP\">\n");
0015 outstr("<title>");
0016 outstr(title);
0017 outstr("</title></head>\n");
0018 outstr("<body bgcolor=white>\n");
0019 flush();
0020}
0021
0022/********************************************************
0023 tail of an html document
0024********************************************************/
0025void httail()
0026{
0027 outstr("</body>\n</html>\n");
0028 flush();
0029}
0030
0031/********************************************************
0032 title in the body
0033********************************************************/
0034void httitle(char *title)
0035{
0036 outstr("<center><h2>");
0037 outstr(title);
0038 outstr("</h2></center>\n<br>\n");
0039 flush();
0040}
0041
0042/********************************************************
0043 initialize the menu bar
0044********************************************************/
0045void htmnuinit(struct menubar *a)
0046{
0047 a->t0[0]='\0'; /* menu title */
0048 a->l0[0]='\0'; /* menu link */
0049 a->t1[0]='\0';
0050 a->l1[0]='\0';
0051 a->t2[0]='\0';
0052 a->l2[0]='\0';
0053 a->t3[0]='\0';
0054 a->l3[0]='\0';
0055 a->t4[0]='\0';
0056 a->l4[0]='\0';
0057 a->current=0; /* current page */
0058 a->color=0;
0059}
0060
0061/********************************************************
0062 set title and link to menu
0063********************************************************/
0064void htmnuent(struct menubar *a,int i,char *t,char *l)
0065{
0066 switch(i){
0067 case 0:
0068 strcpy(a->t0,t);
0069 strcpy(a->l0,l);
0070 break;
0071 case 1:
0072 strcpy(a->t1,t);
0073 strcpy(a->l1,l);
0074 break;
0075 case 2:
0076 strcpy(a->t2,t);
0077 strcpy(a->l2,l);
0078 break;
0079 case 3:
0080 strcpy(a->t3,t);
0081 strcpy(a->l3,l);
0082 break;
0083 case 4:
0084 strcpy(a->t4,t);
0085 strcpy(a->l4,l);
0086 break;
0087 }
0088}
0089
0090/********************************************************
0091 set current page
0092********************************************************/
0093void htmnupg(struct menubar *a,int page)
0094{
0095 a->current=page;
0096}
0097
0098/********************************************************
0099 set color
0100********************************************************/
0101void htmnucl(struct menubar *a,int col)
0102{
0103 a->color=col;
0104}
0105
0106/********************************************************
0107 menu bar
0108********************************************************/
0109void htmnubar(struct menubar *a)
0110{
0111 char *col0[]={"FFBBBB","BBFFBB","#BBBBFF"};
0112 char *col1[]={"FF5555","55FF55","#5555FF"};
0113 outstr("<div align=center>\n");
0114 outstr("<table cellspacing=4 cellpadding=0 border=0 width=\"100%\">\n");
0115 outstr("<tr>\n");
0116
0117 outstr("<td bgcolor=");
0118 if(a->t0[0]=='\0') outstr("#FFFFFF width=\"20%\"> ");
0119 else{
0120 if(a->current==0) outstr(col1[a->color]); else outstr(col0[a->color]);
0121 outstr(" width=\"20%\"><center>");
0122 if(a->current!=0){
0123 outstr("<a href=\"");
0124 outstr(a->l0);
0125 outstr("\">");
0126 }
0127 outstr(a->t0);
0128 if(a->current!=0) outstr("</a>");
0129 outstr("</center>\n");
0130 }
0131
0132 outstr("<td bgcolor=");
0133 if(a->t1[0]=='\0') outstr("#FFFFFF width=\"20%\"> ");
0134 else{
0135 if(a->current==1) outstr(col1[a->color]); else outstr(col0[a->color]);
0136 outstr(" width=\"20%\"><center>");
0137 if(a->current!=1){
0138 outstr("<a href=\"");
0139 outstr(a->l1);
0140 outstr("\">");
0141 }
0142 outstr(a->t1);
0143 if(a->current!=1) outstr("</a>");
0144 outstr("</center>\n");
0145 }
0146
0147 outstr("<td bgcolor=");
0148 if(a->t2[0]=='\0') outstr("#FFFFFF width=\"20%\"> ");
0149 else{
0150 if(a->current==2) outstr(col1[a->color]); else outstr(col0[a->color]);
0151 outstr(" width=\"20%\"><center>");
0152 if(a->current!=2){
0153 outstr("<a href=\"");
0154 outstr(a->l2);
0155 outstr("\">");
0156 }
0157 outstr(a->t2);
0158 if(a->current!=2) outstr("</a>");
0159 outstr("</center>\n");
0160 }
0161
0162 outstr("<td bgcolor=");
0163 if(a->t3[0]=='\0') outstr("#FFFFFF width=\"20%\"> ");
0164 else{
0165 if(a->current==3) outstr(col1[a->color]); else outstr(col0[a->color]);
0166 outstr(" width=\"20%\"><center>");
0167 if(a->current!=3){
0168 outstr("<a href=\"");
0169 outstr(a->l3);
0170 outstr("\">");
0171 }
0172 outstr(a->t3);
0173 if(a->current!=3) outstr("</a>");
0174 outstr("</center>\n");
0175 }
0176
0177 outstr("<td bgcolor=");
0178 if(a->t4[0]=='\0') outstr("#FFFFFF width=\"20%\"> ");
0179 else{
0180 if(a->current==4) outstr(col1[a->color]); else outstr(col0[a->color]);
0181 outstr(" width=\"20%\"><center>");
0182 if(a->current!=4){
0183 outstr("<a href=\"");
0184 outstr(a->l4);
0185 outstr("\">");
0186 }
0187 outstr(a->t4);
0188 if(a->current!=4) outstr("</a>");
0189 outstr("</center>\n");
0190 }
0191 outstr("</table>\n</div>\n");
0192 flush();
0193}
0194
0195/*************************************************
0196 htfetch - fetch from vargcsd015
0197*************************************************/
0198int htfetch(int id,int ws)
0199{
0200 GDBM_FILE dbf=NULL;
0201 datum dt1;
0202 datum dt2;
0203 int i;
0204
0205 dbf=gdbm_open("/var/gcs/d015",512,GDBM_READER,0666,fatal_func);
0206 if(dbf==NULL){
0207 return 1;
0208 }
0209 dt1.dsize=sizeof(int);
0210 dt1.dptr=(char *)malloc(sizeof(int));
0211 *(int *)dt1.dptr=id;
0212 dt2=gdbm_fetch(dbf,dt1);
0213 if(dt2.dptr==NULL){
0214 outstr("Illegal data id\n");
0215 flush();
0216 return 1;
0217 }
0218 if(ws){
0219 for(i=0;i<dt2.dsize-11;i++){
0220 if(dt2.dptr[i]=='k'&&dt2.dptr[i+1]=='i'&&dt2.dptr[i+2]=='k'&&dt2.dptr[i+4]=='.'){
0221 strcpy(&dt2.dptr[i],"192.168.1.");
0222 dt2.dptr[i+10]='2';
0223 i+=10;
0224 }
0225 }
0226 }
0227 for(i=0;dt2.dptr[i]!='\n';i++);
0228 i++;
0229 outbyte(dt2.dsize-i,dt2.dptr+i);
0230 flush();
0231 free(dt1.dptr);
0232 free(dt2.dptr);
0233 gdbm_close(dbf);
0234 return 0;
0235}
0236
0237/*************************************************
0238 htfetchu - fetch from d016
0239 working directory must be in user's directory
0240*************************************************/
0241int htfetchu(int id,int ws)
0242{
0243 GDBM_FILE dbf=NULL;
0244 datum dt1;
0245 datum dt2;
0246 int i;
0247
0248 dbf=gdbm_open("d016",512,GDBM_READER,0666,fatal_func);
0249 if(dbf==NULL){
0250 return 1;
0251 }
0252 dt1.dsize=sizeof(int);
0253 dt1.dptr=(char *)malloc(sizeof(int));
0254 *(int *)dt1.dptr=id;
0255 dt2=gdbm_fetch(dbf,dt1);
0256 if(dt2.dptr==NULL){
0257 outstr("Illegal data id\n");
0258 flush();
0259 return 1;
0260 }
0261 if(ws){
0262 for(i=0;i<dt2.dsize-11;i++){
0263 if(dt2.dptr[i]=='k'&&dt2.dptr[i+1]=='i'&&dt2.dptr[i+2]=='k'&&dt2.dptr[i+4]=='.'){
0264 strcpy(&dt2.dptr[i],"192.168.1.");
0265 dt2.dptr[i+10]='2';
0266 i+=10;
0267 }
0268 }
0269 }
0270 for(i=0;dt2.dptr[i]!='\n';i++);
0271 i++;
0272 outbyte(dt2.dsize-i,dt2.dptr+i);
0273 flush();
0274 free(dt1.dptr);
0275 free(dt2.dptr);
0276 gdbm_close(dbf);
0277 return 0;
0278}
0279
0280/***************************************************
0281 htfet1 : html from d015 host and user adjusted
0282***************************************************/
0283int htfet1(int num,int ws,int user)
0284{
0285 GDBM_FILE dbf=NULL;
0286 datum dt1;
0287 datum dt2;
0288 int i;
0289 char s[10];
0290
0291 dbf=gdbm_open("/var/gcs/d015",512,GDBM_READER,0666,fatal_func);
0292 if(dbf==NULL){
0293 return 1;
0294 }
0295 dt1.dsize=sizeof(int);
0296 dt1.dptr=(char *)malloc(sizeof(int));
0297 *(int *)dt1.dptr=num;
0298 dt2=gdbm_fetch(dbf,dt1);
0299 if(dt2.dptr==NULL){
0300 outstr("Illegal data id\n");
0301 flush();
0302 return 1;
0303 }
0304 if(ws==1){
0305 for(i=0;i<dt2.dsize-11;i++){
0306 if(dt2.dptr[i]=='k'&&dt2.dptr[i+1]=='i'&&dt2.dptr[i+2]=='k'&&dt2.dptr[i+4]=='.'){
0307 strcpy(&dt2.dptr[i],"192.168.1.");
0308 dt2.dptr[i+10]='2';
0309 i+=10;
0310 }
0311 }
0312 }
0313 if(user!=600){
0314 sprintf(s,"%03i",user);
0315 for(i=0;i<dt2.dsize-11;i++){
0316 if(dt2.dptr[i]=='6'&&dt2.dptr[i+1]=='0'&&dt2.dptr[i+2]=='0'){
0317 dt2.dptr[i]=s[0];
0318 dt2.dptr[i+1]=s[1];
0319 dt2.dptr[i+2]=s[2];
0320 i+=3;
0321 }
0322 }
0323 }
0324
0325 for(i=0;dt2.dptr[i]!='\n';i++);
0326 i++;
0327 outbyte(dt2.dsize-i,dt2.dptr+i);
0328 flush();
0329 free(dt1.dptr);
0330 free(dt2.dptr);
0331 gdbm_close(dbf);
0332 return 0;
0333}
0334
0335
0336/**********************************************************
0337 htfet2 : html from d015 host adjusted, 2 words replaced
0338**********************************************************/
0339int htfet2(int num,int ws,char *str0,char *str1)
0340{
0341 GDBM_FILE dbf=NULL;
0342 datum dt1;
0343 datum dt2;
0344 int i;
0345
0346 dbf=gdbm_open("/var/gcs/d015",512,GDBM_READER,0666,fatal_func);
0347 if(dbf==NULL){
0348 return 1;
0349 }
0350 dt1.dsize=sizeof(int);
0351 dt1.dptr=(char *)malloc(sizeof(int));
0352 *(int *)dt1.dptr=num;
0353 dt2=gdbm_fetch(dbf,dt1);
0354 if(dt2.dptr==NULL){
0355 outstr("Illegal data id\n");
0356 flush();
0357 return 1;
0358 }
0359 if(ws){
0360 for(i=0;i<dt2.dsize-11;i++){
0361 if(dt2.dptr[i]=='k'&&dt2.dptr[i+1]=='i'&&dt2.dptr[i+2]=='k'&&dt2.dptr[i+4]=='.'){
0362 strcpy(&dt2.dptr[i],"192.168.1.");
0363 dt2.dptr[i+10]='2';
0364 i+=10;
0365 }
0366 }
0367 }
0368 for(i=0;dt2.dptr[i]!='\n';i++);
0369 i++;
0370 for(;i<dt2.dsize;i++){
0371 if(dt2.dptr[i]=='$'&&dt2.dptr[i+2]=='$'){
0372 switch(dt2.dptr[i+1]){
0373 case '0':
0374 outstr(str0);
0375 break;
0376 case '1':
0377 outstr(str1);
0378 break;
0379 default:
0380 break;
0381 }
0382 i+=2;
0383 }
0384 else outbyte(1,dt2.dptr+i);
0385 }
0386 flush();
0387 free(dt1.dptr);
0388 free(dt2.dptr);
0389 gdbm_close(dbf);
0390 return 0;
0391}
0392
0393