回精華區
作者itoc.bbs@cpu.tfcis.org (核心動力) 看板: plan
標題Re: redir可否支援ptt的日期格式^^"...
時間動力核心 (2005/04/24 Sun 11:23:34) Updated: 2005/05/15
※ 引述《itoc (核心動力)》之銘言:
> ※ 引述《pigco (哈)》之銘言:
> > 可不可以讓redir這支程式支援ptt的時間格式 XD...
>   3. 如果你能取得該站的完整資料,那你可以用轉換的

  先將其他 BBS 站的資料抓回並解壓縮
  假設將目錄解開在 /tmp/xxxx
  /tmp/xxxx 裡面要有 .DIR 及 M.*.A 的檔案

  然後執行
  % ~/bin/transbrd /tmp/xxxx ABCD
  即可將 /tmp/xxxx 這目錄下的文章轉到站上的 [ABCD] 板 (要先在站上開這個板)
  看板 [ABCD] 可以是一個全新的看板
  也可以是一個已有文章的看板 (那麼會將文章併入到最後)

  轉換程式如下

: src/util/Makefile

EXE =   ..... transbrd.c

: src/util/transbrd.c 新增此程式

/*-------------------------------------------------------*/
/* util/transbrd.c                                       */
/*-------------------------------------------------------*/
/* target : Maple Sob 2.36 至 Maple 3.02 看板轉換        */
/* create : 05/04/24                                     */
/* update :   /  /                                       */
/*-------------------------------------------------------*/


#include "bbs.h"


/* ----------------------------------------------------- */
/* old DIR of board struct : 128 bytes                   */
/* ----------------------------------------------------- */

struct fileheader
{
  char filename[33];            /* M.9876543210.A */
  char savemode;                /* file save mode */
  char owner[14];               /* uid[.] */
  char date[6];                 /* [02/02] or space(5) */
  char title[73];
  uschar filemode;              /* must be last field @ boards.c */
};
typedef struct fileheader fileheader;


static time_t
trans_hdr_chrono(filename)
  char *filename;
{
  char time_str[11];

  /* M.1087654321.A 或 M.987654321.A */
  str_ncpy(time_str, filename + 2, filename[2] == '1' ? 11 : 10);

  return (time_t) atoi(time_str);
}


static void
trans_hdr_stamp(folder, t, hdr, fpath)
  char *folder;
  time_t t;
  HDR *hdr;
  char *fpath;
{
  FILE *fp;
  char *fname, *family;
  int rc;

  fname = fpath;
  while (rc = *folder++)
  {
    *fname++ = rc;
    if (rc == '/')
      family = fname;
  }
  fname = family + 1;
  *fname++ = '/';
  *fname++ = 'A';

  for (;;)
  {
    *family = radix32[t & 31];
    archiv32(t, fname);

    if (fp = fopen(fpath, "r"))
    {
      fclose(fp);
      t++;
    }
    else
    {
      memset(hdr, 0, sizeof(HDR));
      hdr->chrono = t;
      str_stamp(hdr->date, &hdr->chrono);
      strcpy(hdr->xname, --fname);
      break;
    }
  }
}


/* ----------------------------------------------------- */
/* 轉換主程式                                            */
/* ----------------------------------------------------- */


int
main(argc, argv)
  int argc;
  char *argv[];
{
  int fd;
  char *brdname, *path;
  char fpath[64], folder[64], buf[64];
  time_t chrono;
  fileheader fh;
  HDR hdr;

  if (argc != 3)
  {
    printf("Usage: %s path brdname\n", argv[0]);
    printf("將 path 這目錄下的資料併入看板 brdname\n");
    return 0;
  }

  chdir(BBSHOME);

  brdname = argv[2];
  brd_fpath(folder, brdname, NULL);
  if (!dashd(folder))
  {
    printf("BBS 上沒有此看板 %s\n", brdname);
    return 0;
  }

  path = argv[1];
  sprintf(fpath, "%s/.DIR", path);
  if (!dashf(fpath))
  {
    printf("%s 此目錄下沒有其他 BBS 站的文章\n", path);
    return 0;
  }

  /* 轉換進板畫面 */
  sprintf(fpath, "%s/notes", path);
  if (dashf(fpath))
  {
    brd_fpath(folder, brdname, FN_NOTE);
    f_cp(fpath, folder, O_TRUNC);
  }

  /* 轉換文章 */
  sprintf(fpath, "%s/.DIR", path);
  if ((fd = open(fpath, O_RDONLY)) >= 0)
  {
    brd_fpath(folder, brdname, FN_DIR);

    while (read(fd, &fh, sizeof(fh)) == sizeof(fh))
    {
      /* 轉換文章 .DIR */
      memset(&hdr, 0, sizeof(HDR));
      chrono = trans_hdr_chrono(fh.filename);
      trans_hdr_stamp(folder, chrono, &hdr, buf);
      str_ncpy(hdr.owner, fh.owner, sizeof(hdr.owner));
      str_ansi(hdr.title, fh.title, sizeof(hdr.title));
      hdr.xmode = (fh.filemode & 0x2) ? POST_MARKED : 0;
      rec_add(folder, &hdr, sizeof(HDR));

      /* 拷貝檔案 */
      sprintf(fpath, "%s/%s", path, fh.filename);
      f_cp(fpath, buf, O_TRUNC);
    }
    close(fd);
  }

  return 0;
}

--
  Origin:  Maple-itoc˙動力核心  cpu.tfcis.org 
  Author: itoc itoc.Dorm11.NCTU.edu.tw 發表
精華選讀←離開[主題上]主題下(k)上篇(j)下篇S/a搜尋 G串列 TAB精華 ↑↓捲 Pg/Space翻