#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <wchar.h>

int main(int argc,char *argv[])
{
  int n,ndat,k,m,ket,r,g,b;
  char fname[32];
  wint_t wc[17];
  wchar_t buf[1024],buf2[8192],macd[128][20],name[64],pt[3],nameh[64],pth[3],mac[20],mac2[20],tm[128][24],*adr,*ptr,cl[8];
  FILE *fp,*fph,*fpw;

  if(argc!=2){
    fprintf(stderr,"Usage: %s MMDD\n",argv[0]);
    exit(0);
  }
  sscanf(argv[1],"%d",&n);
  n/=100;
  r=(abs(6-abs(n-9))-2)*64+128;if(r>255)r=255;else if(r<128)r=128;
  g=(abs(6-abs(n-5))-2)*64+128;if(g>255)g=255;else if(g<128)g=128;
  b=(abs(6-abs(n-1))-2)*64+128;if(b>255)b=255;else if(b<128)b=128;
  swprintf(cl,7,L"%02x%02x%02x",r,g,b);
  sprintf(fname,"%s.html",argv[1]);
  if((fp = fopen(fname,"rb")) == NULL){
    sprintf(fname,"%s.htm",argv[1]);
    if((fp = fopen(fname,"rb")) == NULL){
      fprintf(stderr,"Cannot open %s.html nor %s.htm\n",argv[1],argv[1]);
      exit(0);
    }
  }
  fprintf(stderr,"Read: %s\n",fname);
  fpw=fopen("mkhtml.html","wt,ccs=UTF-8");
  n=-1;m=0;ket=-100;
  for(k=1;k<=16;k++) wc[k]=getwc(fp);
  while(wc[16]!=WEOF){
    for(k=0;k<16;k++) wc[k]=wc[k+1];
    //fwprintf(stderr,L"%c",wc[16]);
    wc[16]=getwc(fp);
    if(wc[0]=='<'&&wc[1]=='t'&&wc[2]=='r'&&wc[3]=='>') ket=0;
    else if(wc[0]=='n'&&wc[1]=='o'&&wc[2]=='w'&&wc[3]=='r'&&wc[4]=='a'&&wc[5]=='p'&&wc[6]=='>'){
      if(ket==11&&wc[7]=='N') tm[n][8]=L'_';
      ket++;
    }
    else if(wc[2]==':'&&wc[5]==':'&&wc[8]==':'&&wc[11]==':'&&wc[14]==':'){
      n++;
      for(k=0;k<=16;k++) macd[n][k]=wc[k];
      macd[n][17]=L'\0';
      m=1;
      for(k=0;k<=16;k++) wc[k]=getwc(fp);
    }
    else if(wc[2]==':'&&wc[5]==':'){
      if(m==1){
        for(k=0;k<=7;k++) tm[n][k]=wc[k];
        tm[n][8]=L'-';
        tm[n][9]=L'\0';
        m=2;
        for(k=0;k<9;k++) wc[k]=wc[k+8];
        for(k=0;k<=7;k++) wc[k+9]=getwc(fp);
      }
      else if(m==2){
        for(k=0;k<=7;k++) tm[n][k+9]=wc[k];
        tm[n][17]=L'\0';
        m=0;
        for(k=0;k<9;k++) wc[k]=wc[k+8];
        for(k=0;k<=7;k++) wc[k+9]=getwc(fp);
        //fwprintf(stderr,L"%d: %s %s\n",n,macd[n],tm[n]);
      }
    }
  }
  ndat=n+1;
  fclose(fp);

  fprintf(stderr,"Read: maclist.dat\n");
  if((fp = fopen("maclist.dat","rt,ccs=UTF-8")) == NULL){
    fprintf(stderr,"Cannot open maclist.dat\n");
    exit(1);
  }
  fgetws(buf,1024,fp);
  fprintf(stderr,"Read: shusseki.html\n");
  if((fph = fopen("shusseki.html","rt,ccs=UTF-8")) == NULL){
    fprintf(stderr,"Cannot open shusseki.html\n");
    exit(1);
  }
  fgetws(buf2,8192,fph);
  fwprintf(fpw,L"%s",buf2);
  fwprintf(fpw,L"</th><th bgcolor=%s>%c%c<br>%c%c",cl,fname[0],fname[1],fname[2],fname[3]);
  fgetws(buf2,8192,fph);
  fwprintf(fpw,L"%s",buf2);
  fgetws(buf2,8192,fph);
  adr=wcstok(buf2,L"\t",&ptr);
  adr=wcstok(NULL,L"\t",&ptr);
  swscanf(adr,L"%s",pth);pth[1]=L'\0';
  adr=wcstok(NULL,L"\t",&ptr);
  swscanf(adr,L"%s",nameh);
  adr=wcstok(NULL,L"\t",&ptr);
  //fwprintf(stderr,L"</tr><tr><th> %s</th><th> %s</th><th> %s",pth,nameh,adr);
  while(!feof(fp)){
    if(fgetws(buf,1024,fp)==NULL) break;
    k=0;
    //fwprintf(fpw,L"%s",buf);
    mac2[0]='\0';
    if(swscanf(buf,L"%s %s %s %s",pt,name,mac,mac2)>=3){
      //fwprintf(stderr,L"\n%s %s - %s %s %s\n",pth,nameh,pt,name,mac);
      if(pt[0]=='-'){
        if(wcscmp(name,nameh)==0){
          fgetws(buf2,8192,fph);
	  adr=wcstok(buf2,L"\t",&ptr);
	  adr=wcstok(NULL,L"\t",&ptr);
	  swscanf(adr,L"%s",pth);pth[1]=L'\0';
	  adr=wcstok(NULL,L"\t",&ptr);
	  swscanf(adr,L"%s",nameh);
	  adr=wcstok(NULL,L"\t",&ptr);
        }
	continue;
      }
      if(wcscmp(pt,pth)==0&&wcscmp(name,nameh)==0) k++;
      for(n=0;n<ndat;n++){
        if(wcscmp(macd[n],mac)==0||wcscmp(macd[n],mac2)==0){
          k+=2;
          break;
        }
      }
      //if(k>0)
	{
        fwprintf(fpw,L"</th></tr><tr><th>\t%s</th><th>\t%s",pt,name);
        if(k/2){
          fwprintf(fpw,L"\t</th><th bgcolor=%s><a href=/%s>",cl,tm[n]);
          //if(tm[n][8]=='_') fwprintf(fpw,L"<font color=ff0000>");
          fwprintf(fpw,L"〇");
          //if(tm[n][8]=='_') fwprintf(fpw,L"</font>");
          fwprintf(fpw,L"</a>");
        }
        else  fwprintf(fpw,L"\t</th><th bgcolor=%s>--",cl);
        //fprintf(stderr,"\nk=%d\n",k);
        if(k%2){
	  while(adr!=NULL){
            fwprintf(fpw,L"%s",adr);
	    adr=wcstok(NULL,L"\t",&ptr);
	  }
          fgetws(buf2,8192,fph);
          //fwprintf(stderr,L"%s",buf2);
          adr=wcstok(buf2,L"\t",&ptr);
          adr=wcstok(NULL,L"\t",&ptr);
          swscanf(adr,L"%s",pth);pth[1]=L'\0';
          adr=wcstok(NULL,L"\t",&ptr);
          swscanf(adr,L"%s",nameh);
          adr=wcstok(NULL,L"\t",&ptr);
        }
        else fwprintf(fpw,L"\n");
      }
    }
  }
  fwprintf(fpw,L"</th></tr></table></body>\n");
  fclose(fpw);
  fclose(fp);
  _fcloseall();
  sprintf(fname,"shusseki_%s.html",argv[1]);
  fprintf(stderr,"Rename: shusseki.html => %s\n",fname);
  remove(fname);
  rename("shusseki.html",fname);
  fprintf(stderr,"Write: shusseki.html\n");
  rename("mkhtml.html","shusseki.html");
  return 0;
}
