diff options
author | in2 <in2@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2003-07-11 17:02:40 +0800 |
---|---|---|
committer | in2 <in2@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2003-07-11 17:02:40 +0800 |
commit | eff4d07538653fafe9a43f1fcf9860b03b10be7a (patch) | |
tree | b2b515916bf8d9a931d341cadcd7f11a33f708d7 | |
parent | 95f6b3c78f07da448bf74b0e7f4286047bb9a5ad (diff) | |
download | pttbbs-eff4d07538653fafe9a43f1fcf9860b03b10be7a.tar pttbbs-eff4d07538653fafe9a43f1fcf9860b03b10be7a.tar.gz pttbbs-eff4d07538653fafe9a43f1fcf9860b03b10be7a.tar.bz2 pttbbs-eff4d07538653fafe9a43f1fcf9860b03b10be7a.tar.lz pttbbs-eff4d07538653fafe9a43f1fcf9860b03b10be7a.tar.xz pttbbs-eff4d07538653fafe9a43f1fcf9860b03b10be7a.tar.zst pttbbs-eff4d07538653fafe9a43f1fcf9860b03b10be7a.zip |
*** empty log message ***
git-svn-id: http://opensvn.csie.org/pttbbs/pttbbs/trunk@1045 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
-rw-r--r-- | pttbbs/util/.cvsignore | 2 | ||||
-rw-r--r-- | pttbbs/util/boardlist.c | 105 |
2 files changed, 107 insertions, 0 deletions
diff --git a/pttbbs/util/.cvsignore b/pttbbs/util/.cvsignore index 4e206253..431c9ff0 100644 --- a/pttbbs/util/.cvsignore +++ b/pttbbs/util/.cvsignore @@ -43,3 +43,5 @@ mandex shmctl indexuser diskstat +boardlist +boardlist.pm diff --git a/pttbbs/util/boardlist.c b/pttbbs/util/boardlist.c new file mode 100644 index 00000000..b28b2b03 --- /dev/null +++ b/pttbbs/util/boardlist.c @@ -0,0 +1,105 @@ +/* $Id: boardlist.c,v 1.1 2003/07/11 09:02:40 in2 Exp $ */ +#include "bbs.h" + +static void +load_uidofgid(const int gid, const int type) +{ + boardheader_t *bptr, *currbptr; + int n, childcount = 0; + currbptr = &bcache[gid - 1]; + for (n = 0; n < numboards; ++n) { + bptr = SHM->bsorted[type][n]; + if (bptr->brdname[0] == '\0') + continue; + if (bptr->gid == gid) { + if (currbptr == &bcache[gid - 1]) + currbptr->firstchild[type] = bptr; + else { + currbptr->next[type] = bptr; + currbptr->parent = &bcache[gid - 1]; + } + childcount++; + currbptr = bptr; + } + } + bcache[gid - 1].childcount = childcount; + if (currbptr == &bcache[gid - 1]) + currbptr->firstchild[type] = (boardheader_t *) ~ 0; + else + currbptr->next[type] = (boardheader_t *) ~ 0; +} + +char *skipEscape(char *s) +{ + static char buf[TTLEN * 2 + 1]; + int r, w; + for( w = r = 0 ; s[r] != 0 ; ++r ){ + if( s[r] == '\'' || s[r] == '\\' ) + buf[w++] = '\\'; + buf[w++] = s[r]; + } + buf[w++] = 0; + return buf; +} + +void dumpclass(int bid) +{ + boardheader_t *bptr; + int r, w; + bptr = &bcache[bid]; + if (bptr->firstchild[0] == NULL || bptr->childcount <= 0) + load_uidofgid(bid + 1, 0); /* 因為這邊 bid從 0開始, 所以再 +1 回來 */ + printf(" %5d => [\n", bid); + for (bptr = bptr->firstchild[0]; bptr != (boardheader_t *) ~ 0; + bptr = bptr->next[0]) { + if( (bptr->brdattr & (BRD_HIDE | BRD_TOP)) || + (bptr->level && !(bptr->brdattr & BRD_POSTMASK) && + (bptr->level & + ~(PERM_BASIC|PERM_CHAT|PERM_PAGE|PERM_POST|PERM_LOGINOK))) ) + continue; + + printf(" [%5d, '%s', '%s'], \n", + (bptr->brdattr & BRD_GROUPBOARD) ? bptr - bcache : -1, + bptr->brdname, skipEscape(&bptr->title[7])); + } + printf(" ],\n"); + + bptr = &bcache[bid]; + for (bptr = bptr->firstchild[0]; bptr != (boardheader_t *) ~ 0; + bptr = bptr->next[0]) { + if( (bptr->brdattr & (BRD_HIDE | BRD_TOP)) || + (bptr->level && !(bptr->brdattr & BRD_POSTMASK) && + (bptr->level & + ~(PERM_BASIC|PERM_CHAT|PERM_PAGE|PERM_POST|PERM_LOGINOK))) ) + continue; + + printf(" '%d.title' => '%s',\n", + bptr - bcache, skipEscape(&bptr->title[7])); + if( bptr->brdattr & BRD_GROUPBOARD ) + dumpclass(bptr - bcache); + } +} + +int main(int argc, char **argv) +{ + attach_SHM(); + + printf("# this is auto-generated perl module from boardlist.c\n" + "# please do NOT modify this directly\n" + "\n" + "package boardlist;\n" + "require 5.6;\n" + "use Exporter;\n" + "$VERSION = '0.1';\n" + "use vars qw(%%brd);\n" + "\n" + "%%brd = (\n"); + dumpclass(0); + printf(");\n" + "our(@ISA, @EXPORT);\n" + "@ISA = qw(Exporter);\n" + "@EXPORT = qw(%%brd);\n" + "\n" + "1;\n"); + return 0; +} |