荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: jjksam (In Linux), 信区: InstallBBS
标  题: [转载] html2bbs(转寄)
发信站: 荔园晨风BBS站 (Sat Nov 24 22:55:28 2001), 转信

【 以下文字转载自 jjksam 的信箱 】
【 原文由 jjksam@smth.org 所发表 】
发信人: zdh (火中的凤凰), 信区: BBSMan_Dev
标  题: html2bbs
发信站: BBS 水木清华站 (Wed Nov  7 09:27:25 2001)

发信人: Roland (罗兰), 信区: BBSdev
标  题: [转载] html2bbs (转寄)
发信站: 快意灌水站 (2000年11月15日12:35:05 星期三), 站内信件
    ////////////////////////////////
   /* HTML->BBS Version 1.5      */
  /* Programmed by Cheetah, PKU */
 /* danke@263.net              */
////////////////////////////////
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#define BBSHOME "/home/bbs"
time_t ntime;
long nCount=0;
int AddPost(char *phHome,char *paHome)
{
  FILE *fpA,*fpH;
  char line[1024],*p,*q;
  int nStart=0;
  fpA=fopen(paHome,"w");
  fpH=fopen(phHome,"r");
  while (!feof(fpH))
  {
    if (!fgets(line,sizeof line,fpH))
      continue;
    if (strncmp(line,"<CENTER>",8)==0)
      nStart++;
    if (nStart==1 && line[0]=='\n') { nStart++; continue; }
    if (nStart==2)
    {
      while (p=strstr(line,"&nbsp;"))
      {
        strcpy(p+1,p+6);
        *p=' ';
      }
      if (p=strstr(line,"<BR>"))
        strcpy(p,"\n");
      while (p=strstr(line,"<BR>"))
        strcpy(p,p+4);
      while (p=strstr(line,"</A>"))
        strcpy(p,p+4);
      while (p=strstr(line,"<A HREF=\""))
      {
        if (q=strstr(p,">"))
      strcpy(p,q+1);
    else *p='\0';
      }
      while (p=strstr(line,"<I>"))
        strcpy(p,p+3);
      while (p=strstr(line,"</I>"))
        strcpy(p,p+4);
      while (p=strstr(line,"&amp;"))
      {
        strcpy(p+1,p+5);
    *p='&';
      }
      while (p=strstr(line,"&lt;"))
      {
        strcpy(p+1,p+4);
    *p='<';
      }
      while (p=strstr(line,"&gt;"))
      {
        strcpy(p+1,p+4);
    *p='>';
      }
      while (p=strstr(line,"&amp;"))
      {
        strcpy(p+1,p+5);
    *p='&';
      }
      while (p=strstr(line,"&quot;"))
      {
        strcpy(p+1,p+6);
    *p='"';
      }
      fputs(line, fpA);
    }
    if (nStart==3) break;
  }
  fclose(fpA);
  fclose(fpH);
}
int HtmlProcess(char *phHome,char *paHome)
{
  char fnH[1024],line[1024],head[20],subname[20],subdir[20],subHome[1024];
  char subPath[1024],strTitle[1024],strName[1024],strLine[50];
  char *p;
  int nNumb;
  struct stat st;
  FILE *fpH,*fpName;
  strcpy(fnH,phHome);
  strcat(fnH,"/index.htm");
  if ((fpH=fopen(fnH,"r"))==NULL)
  {
    printf("File open error: %s.\n",fnH);
    exit(-2);
  }
  if(stat(paHome,&st) == -1) {
        if(mkdir(paHome,0755) == -1)
        {
          printf("BBS Announcement directory err: %s.\n",paHome);
          exit(-2);
        }
  } else {
        if(!(st.st_mode & S_IFDIR))
        {
          printf("BBS Announcement directory err: %s.\n",paHome);
          exit(-2);
        }
  }
  sprintf(strName,"%s/.Names",paHome);
  fpName=fopen(strName,"a+");
  if (!fpName)
  {
    printf(".Names open err: %s\n",paHome);
    exit(-2);
  }
  if (ftell(fpName)>20)
    fseek(fpName,SEEK_END,20);
  nNumb=1;
  line[0]=0;
  while (!feof(fpName))
  {
    if (fgets(line,sizeof line,fpName))
    {
      if (strncmp(line,"Numb=",5))
        nNumb=atoi(strchr(line,'=')+1)+1;
    }
  }
  while (!feof(fpH))
  {
    line[0]=0;
    if (!fgets(line,sizeof line,fpH)) continue;
    strncpy(head,line,8);
 head[8]=0;
    p=strchr(line,'<');
    if (p && strncmp(p,"<TITL",5)==0)
      {
    p=strchr(line,'>');
    if (p)
          strncpy(strTitle,p+1,36);
        strTitle[36]=0;
    if (p=strstr(strTitle,"</A><BR>"))
      strcpy(p,p+8);
    printf("Title: %s\n",strTitle); nCount++;
      }
    if (strcmp(head,"<A HREF=")==0)
    {
      p=strchr(line,'>');
      if (p) strncpy(strLine,p+1,38);
      strLine[38]=0;
      if (p=strstr(strLine,"</A><BR>"))
        strcpy(p,p+8);
      p=strchr(line,'"')+1;
      fprintf(fpName,"Name=%s\n",strLine);
      if (*p=='.')
        fprintf(fpName,"Path=~/%d\n",++ntime);
      else
        fprintf(fpName,"Path=~/M.%d.A\n",++ntime);
      fprintf(fpName,"Numb=%d\n",nNumb++);
      fprintf(fpName,"#\n");
      if (*p=='.')
      {
        if (line[10]=='.')
    {
      strncpy(subdir,&line[9],11); subdir[11]=0;
    }
    else{
      strncpy(subdir,&line[9],10); subdir[10]=0;
    }
    sprintf(subHome,"%s/%s",phHome,subdir);
    sprintf(subPath,"%s/%d",paHome,ntime);
    HtmlProcess(subHome,subPath);
      }
      else{
        strncpy(subdir,&line[9],12); subdir[12]=0;
    sprintf(subHome,"%s/%s",phHome,subdir);
    sprintf(subPath,"%s/M.%d.A",paHome,ntime);
        AddPost(subHome,subPath);
      }
    }
  }
  fclose(fpH);
  fclose(fpName);
}
int main(int argc,char *argv[])
{
  char HtmlHome[256],AnnHome[256];
  if (argc!=3)
  {
    printf("Usage: html2ann HTML-DIR ANN-DIR\n");
    exit(-1);
  }
  ntime=time(0);
  strcpy(HtmlHome,argv[1]);
  strcpy(AnnHome,argv[2]);
  HtmlProcess(HtmlHome,AnnHome);
  printf("\n\nFile processed: %ld\n",nCount);
}
附: readme
html2bbs -- 下载清华精华区 转成 Firebird BBS目录结构
Version 1.5 by Cheetah
Date: Dec. 29, 1999
Download: ftp://insight.dhs.org/pub/html2bbs
      ----  Dedicated to a nice girl ----
Usage: html2bbs htmldir bbsdir
声明:该程序只为了用户更好的合法使用清华精华区编写。
   如该程序带来版权上的纠纷,属使用者责任。
例如: html2bbs /home/PopMusic.AIX /home/bbs/0Announce/groups/GROUP_4/music/
SMTH
       先用版主身份在music下建新版SMTH, 重新安装前最好全部删除原来的SMTH目录

    关于转载文章的版权,请先先看看下面的版权声明。
  如果程序有问题,恳请大家反馈,也欢迎大家传播、修改、扩充该程序。您的修改
请上

到ftp://insight.dhs.org/incoming,谢谢。
    我的e-mail: danke@insight.dhs.org; SMTH id: danke
附录:水木清华版权声明
--
※ 来源:·快意灌水站 fb2000.dhs.org·[FROM: 202.112.144.70] --
※ 转寄:·快意灌水站 fb2000.dhs.org·[FROM: 202.119.32.102]
--
;36m※ 修改:.zhch 於 Nov 15 14:59:07 修改本文.[FROM: dsl.nju.edu.cn]m

m;32m※ 转载:.南京大学小百合站 bbs.nju.edu.cn.[FROM: dsl.nju.edu.cn][m
--
“凤凰”是传说中一种能够生死轮回、在烈火中得以涅般的不死的鸟儿.

火中的凤凰
----
http://zdhice.edu.chinaren.com


※ 来源:·BBS 水木清华站 smth.org·[FROM: 166.111.34.163]
--
※ 转载:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.0.146]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店