BRC (v2) documentation by scw   08/05/2003
					06/12/2007 revised by kcwu
					12/02/2007 v3 by piaip
 
���_�G
     �o�g�峹�D�n�O���� brc_* ���禡�A�o�ը禡�O pttbbs �ΨӬ����峹�wŪ/��Ū
 ���u��A���]���������x�s�覡�Q�� tricky �s�a�Ϫ����e�۷������C���F���{�έץ�
 �䤤���@�� bug�A���̦����˲M�F�䤤�B�@�覡�A�ì��伶�g�����A�Ʊ��޲z�̦���
 �U�C
 
����H�Ӭݳo�g�峹�H
     1. pttbbs ���t�κ޲z�̡C�p�G�z�n��o�����i��ק�Χ��ΡA�Ʊ�o�g�峹���
        �z���ҧU�q�C
     2. �Q�n��s�o�إη��֪Ŷ��O�U���j��T����k���H�C
 
BRC �O����H�p��B�@�H
     brc_* �O�w�q�b pttbbs/mbbsd/board.c �����@�ը禡�A�t�d�����峹�wŪ/��Ū�A
 �����S�I�O�Ϊ��Ŷ����֡C�i�H�b 24k �H�����Ŷ��O�U�@�ӤH�b�������峹�wŪ/
 ��Ū�C���M�A�o�˪���k���i��u�������A���O���ϥΤW�w�g�����F�C�����򻡬O��
 �����O�H�o��������x�s�覡�����C
     �����ɦb home/[first charactor of id]/[id]/.brc2�C�ɮ׮榡�p�U�G
 
 FILE     := RECORDS ;
 RECORDS  := RECORDS RECORD | ;
 RECORD   := BRC_BID BRC_DATA ;
 BRC_DATA := BRC_NUM BRC_LIST ;
 BRC_LIST := NUM NUM ... NUM ;  (�@ BRC_NUM �� NUM)
 BRC_BID �O board bid, sizeof(brcbid_t)=2 bytes.
 BRC_NUM    �O��o�ӪO���x�s�q�Asizeof(brcnbrd_t)=2 bytes �H binary �覡�x�s�A��� <= MAX_NUM (80)
 BRC_LIST   �O��o�ӪO�������A��n�� BRC_NUM �� sizeof(time4_t)=4 bytes integers�C
 �t�~�b 24576 bytes (#define BRC_MAXSIZE 24576) ���~����Ƥ��|�Q�Ψ�C
 
     �b�U���|�ݨ�ABRC_BID �� BRC_NUM �� BRC_LIST ���|��b�������ܼƤ�, brc_currbid & brc_num & brc_list �C
     �P�w�@���ɮ׬O�_�w�gŪ�L����k�O�b brc_list ���j�M�ɮ׫إߪ��ɶ��A�]�N�O
 �ɦW M.xxxxxxxxxx.A.yyy �� xxxxxxxxx �����ӼƦr�C�p�G�o�ӼƦr���b brc_list ��
 �X�{�N�O�wŪ�A�n���p�G brc_list ���Ҧ����Ʀr����o���ɮת��إ߮ɶ��j�]�]�N�O
 �o���ɮת��إ߮ɶ��b�Ҧ� brc_list �����ɶ��I���e�^�]�O�wŪ�A�̫ᬰ�F�`�٪Ŷ�
 �٦��@�ӧP�w�]���o�ӧP�w�O�Ĥ@�Ӱ����^�A�p�G�ɮ׫إ߮ɶ��b login �ɶ����@�~
 ���e�A�@�߬O�wŪ�C
     �o�˥i�H�ݥX������o�Ӥ�k���O�u���������O�w�g�����C����������]���T�ӡG
 �����A brc_num <= 80 �]�N�O brc_list �̦h�s�K�Q�ӼơA�o���ܰ��F�ܤ[�H�e���峹
 �~�A�u�|���K�Q�g�O�wŪ���C�ĤG�N�O�Ҧ��@�~�e���峹���|�Q�P���wŪ�C�̫�A�p�G�@
 �ӤH�ݪ��O�Ӧh�A�� .brc2 �j�p�W�L BRC_MAXSIZE ���ǪO�������N�|�����] 24576
 bytes �̤֥i�H�s 73 �ӪO����ơA�o�٬O�Υ����O brc_num ���O 80 �p�⪺�^�C���o
 �T�Ӥp���I�v�T���Ӥ��j�a�H

v3 ����

     Dec 2007 �}�l ptt brc �ޤJ v3 �榡�A�P�e�O���ۮe�C�ҿת� v3 �O�ѩ� BBS
 �u����v�t�γQ�ݥΦӲ��ͪ��ݨD�C���媺�Φ��O�b������[�s���@���A����
 BRC �t�εL�k���릹����ʡF�Y�Q���H����O�_���s����U�a�@�k���@�A�`�����O��
 �� edit_post ���ɮק�W�C�o�ؤ覡���F�IJv�����~�A�٦��ëD�C�ӤH���Q�ݷs����
 �����D�C
     �Ҷq�\�[��A�q BRC �U���٬O���ѡC �b�C�� BRC �O���W�h�s�W�@�� modified
 time �Y�i�C ����k�i�P�ɾA�Ω�����ɮ׻P�����[������t�ΡC�N���O BRC �j�p
 �[�������A���L�o���G���O����j���D�C
     �ѩ� v2 v3 ��ڮt���ä��j�A�o�̪������O�d�H v2 ���D�C �·Цۤv�d svn
 �N���D v3 ��F����F�C

 - ptt2 �� brc V3 �e�i�A MAX_BOARD ��F�W�� (42000)�A�Q�׫�M�w���K�� brc V3
 �]�p�� brcbid_t = int32�C

 
BRC v2 ��@
 
 interface: (in proto.h)
 
  int brc_initialize();
  void brc_finalize();

  int brc_unread(int bid, char *fname, int bnum, int *blist);
      �P�_�@�g�峹�O�_�wŪ�C
      �ǤJ�ȡG�峹�ɦW (fname) �H�� brc_num (bnum) �M brc_list (blist)�C
      �Ǧ^�ȡG�p�G�� bnum �M blist �P�_���g�峹��Ū�Ǧ^ 1�C
              �_�h�Ǧ^ 0�C
      �B�~�ĪG�G�L�C
  
  int brc_initial_board(char *boardname);
      ��l�Ʀb�@�ӪO���wŪ��Ū���A�C
      �ǤJ�ȡG�n��l�ƪ��O�W�C
      �Ǧ^�ȡG�Y��줧�e�������Ǧ^�s�� brc_num�A�_�h�Ǧ^ 0�C
      �B�~�ĪG�G�p�G�ǤJ���ݪO�N�O�ثe�ݪO�|�����Ǧ^ brc_num, �����O���ơC�_�h
      ���禡�|���N�ثe�� brc data �g�^ brc_buf ���A��� currboard �A���o
      currbid �M currbrdattr ��AŪ���ç�s brc_num �� brc_list�C�p�G�b�ϥΪ�
      �� brc_buf ���S������o�ӪO�������A�|�]�w brc_num = 1�Abrc_list[0] = 1
      �öǦ^ 0�C
  
  void brc_update();
      �N�ثe�� brc data �g�J brc_buf ���C
      �B�~�ĪG�G�p�G brc data ���Q���ΨϥΪ��v�������h���|���ʧ@�C
  
  void brc_addlist(char *fname);
      �N�峹�Хܬ��wŪ�C�ϥΫe�ݥ� brc_initial_board()
      �ǤJ�ȡG�n�Хܬ��wŪ���峹�ɦW�C
  
 constant definition:
  
  #define BRC_MAXSIZE     24576
      .brc2 �����Ĥj�p�C
  
  #define BRC_MAXNUM      80
      brc_num ���̤j�ȡC
  
 private variables: (in board.c)
  
  static time_t brc_expire_time;
      brc_list ���Ȫ��U���A�ɶ��b�����e���@�߷��@�wŪ�C�|�b init_brdbuf ���Q�]
      �w�� login_start_time - 365 * 86400�C
  
  static char   brc_buf[BRC_MAXSIZE];
      �I�s read_brc_buf �� .brc2 ���e BRC_MAXSIZE bytes �|�Q�m�J�o�� buffer ���C

  static int    brc_size;
      �I�s read_brc_buf �� brc_buf �������Ħr���ơC

  static int    brc_changed = 0;
      �q�W��Ū�� .brc2 ����ɬ���Abrc_num �P brc_list �O�_���ܹL�C

  static int    brc_currbid;

  static int    brc_num;
      brc_list �������ļƦr�ӼơC

  static int    brc_list[BRC_MAXNUM];
      �wŪ�峹���s�ɮɶ��C
  

  static void read_brc_buf();
      �q .brc2 ��Ū���̦h BRC_MAXSIZE bytes �æs�J brc_buf ���A�N�s�J���r��
      �Ʀs�b brc_size ���C

  static char * brc_putrecord(char *ptr, char *endp, brcbid_t bid, brcnbrd_t num, const time4_t *list);
      �P brc_getrecord() ���@�Υ��n�ۤϡA�N��Ƽg�J puffer ���C
      �ǤJ�ȡGptr ���V�n�g�J�� buffer�Abid, num, list ���O�O�n�g�J����ơC
      �Ǧ^�ȡG���V�g�J�� record �U�@�Ӧr�������СC
      �B�~�ĪG�G�Y��ƬO�X�k�� (num > 0 && list[0] > brc_expire_time) �B�Ŷ�����,
      ��Ʒ|�Q�g�J ptr, endp �����C

  static int brc_unread_time(time_t ftime, int bnum, int *blist);
      �� brc_unread() �����A�u�O�ǤJ���O�ɮ׫إߪ��ɶ��C
      �ǤJ�ȡG�峹���إ߮ɶ� (ftime) �� brc_num (bnum) �M brc_list (blist)�C
      �Ǧ^�ȡG�p�G�� bnum �M blist �P�_���g�峹��Ū�Ǧ^ 1�C
              �_�h�Ǧ^ 0�C