 
        BRC documentation by scw      08/05/2003
 
_G
     og峹DnO brc_* 禡Aoը禡O pttbbs ΨӬ峹wŪ/Ū
 uA]xs覡Q tricky saϪe۷CF{έץ
 䤤@ bugA̦˲MF䤤B@覡Aì伶gAƱ޲z̦
 UC
 
HӬݳog峹H
     1. pttbbs tκ޲z̡CpGznoiקΧΡAƱog峹
        zҧUqC
     2. Qnsoإη֪ŶOUjTkHC
 
BRC OHpB@H
     brc_* Owqb pttbbs/mbbsd/board.c @ը禡Atd峹wŪ/ŪA
 SIOΪŶ֡CiHb 2.4k HŶOU@ӤHb峹wŪ/
 ŪCMAo˪kiuAOϥΤWwgFC򻡬O
 OHoxs覡C
     ɦb home/[first charactor of id]/[id]/.boardrcCɮ׮榡pUG
 
 FILE     := RECORDS ;
 RECORDS  := RECORDS RECORD | ;
 RECORD   := BOARD_NAME BRC_DATA ;
 BRC_DATA := BRC_NUM BRC_LIST ;
 BRC_LIST := NUM NUM ... NUM ;  (@ BRC_NUM  NUM)
 BOARD_NAME O 15 bytes OW (#define BRC_STRLEN 15)
 BRC_NUM    OoӪOxsqA1 byte H binary 覡xsA <= MAX_NUM (80)
 BRC_LIST   OoӪOAn BRC_NUM  4 bytes integersC
 t~b 24576 bytes (#define BRC_MAXSIZE 24576) ~Ƥ|QΨC
 
     bU|ݨABOARD_NAME Υt~xs]wgbuserƸ̤F^AL
 ⶵ, BRC_NUM  BRC_LIST |bܼƤ, brc_num & brc_list C
     Pw@ɮ׬O_wgŪLkOb brc_list jMɮ׫إߪɶA]NO
 ɦW M.xxxxxxxxxx.A.yyy  xxxxxxxxx ӼƦrCpGoӼƦrb brc_list 
 X{NOwŪAnpG brc_list ҦƦroɮתإ߮ɶj]]NO
 oɮתإ߮ɶbҦ brc_list ɶIe^]OwŪA̫ᬰF`٪Ŷ
 ٦@ӧPw]oӧPwOĤ@Ӱ^ApGɮ׫إ߮ɶb login ɶ@~
 eA@߬OwŪC
     o˥iHݥXoӤkOuOwgC]TӡG
 A brc_num <= 80 ]NO brc_list ̦hsKQӼơAoܰFܤ[He峹
 ~Au|KQgOwŪCĤGNOҦ@~e峹|QPwŪC̫ApG@
 ӤHݪOӦhA .boardrc jpWL BRC_MAXSIZE ǪON|] 24576
 bytes ̤֥iHs 73 ӪOơAo٬OΥO brc_num O 80 p⪺^Co
 TӤpIvTӤjaH
 
BRC @
 
 interface: (in proto.h)
 
  int brc_unread(char *fname, int bnum, int *blist);
      P_@g峹O_wŪC
      ǤJȡG峹ɦW (fname) H brc_num (bnum) M brc_list (blist)C
      Ǧ^ȡGpG bnum M blist P_g峹ŪǦ^ 1C
              _hǦ^ 0C
      B~ĪGGLC
  
  int brc_initial(char *boardname);
      lƦb@ӪOwŪŪAC
      ǤJȡGnlƪOWC
      Ǧ^ȡGY줧eǦ^s brc_numA_hǦ^ 0C
      B~ĪGGpGǤJݪONOثeݪO|Ǧ^ brc_num, OơC_h
      禡|Nثe brc data gJ .boardrc A currboard Ao
      currbid M currbrdattr AŪçs brc_num  brc_listCpGbϥΪ
       .boardrc SoӪOA|]w brc_num = 1Abrc_list[0] = 1
      öǦ^ 0C
  
  void brc_update();
      Nثe brc data gJ .boardrc C
      B~ĪGGpG brc data QΨϥΪvh|ʧ@C
  
  void brc_addlist(char *fname);
      N峹ХܬŪC
      ǤJȡGnХܬŪ峹ɦWC
  
 global variables: (in var.c)
  
  int    brc_num;
      brc_list ļƦrӼơC

  int    brc_list[BRC_MAXNUM];
      wŪ峹sɮɶC
  
  (in var.h)
  extern int             brc_num;
  extern int             brc_list[BRC_MAXNUM];
  
 constant definition: (in board.c)
  
  #define BRC_STRLEN 15           /* Length of board name */
      OW̤jסC
  
  #define BRC_MAXSIZE     24576
      .boardrc ĤjpC
  
  #define BRC_ITEMSIZE    (BRC_STRLEN + 1 + BRC_MAXNUM * sizeof( int ))
      C record ̤jjpC
  
  #define BRC_MAXNUM      80
      brc_num ̤jȡC
  
 private variables: (in board.c)
  
  static time_t brc_expire_time;
      brc_list ȪUAɶbe@߷@wŪC|b init_brdbuf Q]
      w login_start_time - 365 * 86400C
  
  static int    brc_changed = 0;
      qWŪ .boardrc ɬAbrc_num P brc_list O_ܹL]ּg
      ɪơ^C
  
  static char   brc_buf[BRC_MAXSIZE];
      Is read_brc_buf  .boardrc e BRC_MAXSIZE bytes |QmJo buffer
      C

  static int    brc_size;
      Is read_brc_buf  brc_buf ĦrơC

  static char   brc_name[BRC_STRLEN];
      ثe brc data OWC ]Di_ currboard NH by scw^

  static char * fn_boardrc = ".boardrc";
      brc ]wɦWC

  char        * brc_buf_addr=brc_buf;
      unused variable
  
 private funcions: (in board.c)
  
  static void read_brc_buf();
      q .boardrc Ū̦h BRC_MAXSIZE bytes æsJ brc_buf ANsJr
      Ʀsb brc_size C

  static char * brc_getrecord(char *ptr, char *name, int *pnum, int *list);
      q buffer Ū@C ]q`b read_brc_bufi() ϥΡ^
      ǤJȡGptr nŪ bufferA name, pnum, M list OgJŪ쪺ơC
      Ǧ^ȡGVŪX record U@ӦrСC
      B~ĪGGname |QsJ̦h BRC_MAXLEN ӦrAŪ쪺 record OWC
      pnum |QsJŪ쪺 brc_numAlist |QgJ *pnum ơA brc_list
      ơC

  static char * brc_putrecord(char *ptr, char *name, int num, int *list);
      P brc_getrecord() @ΥnۤϡANƼgJ puffer C
      ǤJȡGptr uVngJ bufferAname, num, list OOngJơC
      Ǧ^ȡGVgJ record U@ӦrСC
      B~ĪGGYƬOXk (num > 0 && list[0] > brc_expire_time) ptr |Q
      gJ BRC_ITEMSIZE bytes ơCb list  brc_expire_time Ʀr|
      QgJ]ҥHgJ brc_num i num p^C

  static int brc_unread_time(time_t ftime, int bnum, int *blist);
       brc_unread() AuOǤJOɮ׫إߪɶC
      ǤJȡG峹إ߮ɶ (ftime)  brc_num (bnum) M brc_list (blist)C
      Ǧ^ȡGpG bnum M blist P_g峹ŪǦ^ 1C
              _hǦ^ 0C
