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%\">&nbsp;");
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%\">&nbsp;");
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%\">&nbsp;");
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%\">&nbsp;");
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%\">&nbsp;");
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