作者qazq.bbs@bbs.cs.nchu.edu.tw (ξ愛情御守ξ) 看板: plan
標題[功能] 全站真實姓名排序印出
時間中興資科 (Tue, 12 Aug 2003 01:12:30 +0800 (CST)) Updated: 2003/12/29
別人和我提到的功能,寫了一下竟然成功了....呵呵~
不過印出真實姓名....嗯嗯....
檔案會產生在 ~/gem/@/@-realname
可以在站上設資料直接閱讀....記得要鎖文章唷!
畢竟真實姓名不能外露吧....
==============================================================================
: src/util/Makefile
EXE = ... showRealname
: src/util/showRealname.c 新增整支程式
/*-------------------------------------------------------*/
/* util/showRealname.c ( NTHU CS MapleBBS Ver 3.00 ) */
/*-------------------------------------------------------*/
/* target : 全站真實姓名排序印出 */
/* create : 03/08/11 */
/* update : / / */
/* author : itoc.bbs@bbs.tnfsh.tn.edu.tw (util/topusr.c) */
/* modify : qazq.bbs@bbs.cs.nchu.edu.tw */
/*-------------------------------------------------------*/
#include "bbs.h"
#define OUTFILE_REALNAME BBSHOME"/gem/@/@-realname"
typedef struct
{
char userid[IDLEN + 1];
char realname[RNLEN + 1];
char email[60];
int num;
} DATA;
static int i = 0; /* 紀錄有幾個 USER */
static DATA *name;
static int
sort_compare(p1, p2)
const void *p1;
const void *p2;
{
DATA *a1, *a2;
a1 = (DATA *) p1;
a2 = (DATA *) p2;
return (strcmp(a2->realname, a1->realname));
}
static void
write_data(fpath, title, data)
char *fpath;
char *title;
DATA *data;
{
FILE *fp;
char buf[256];
int j;
if (!(fp = fopen(fpath, "w")))
return;
j = 12 - (strlen(title) >> 1);
sprintf(buf, " \033[1;33m○ ──────────→"
" \033[41m%%%ds%%s%%%ds\033[40m "
"←────────── ○\033[m\n\n", j, j);
//為了大家在bbs閱讀方便,我把print斷行了
fprintf(fp, buf, "", title, "");
for (j = 0; j < i; j++)
{
fprintf(fp, "[%3d] %-13s:%-9s - %s\n", j + 1,
data[j].userid, data[j].realname, data[j].email);
}
fprintf(fp, "\n");
fclose(fp);
}
static inline void
topusr(cuser)
ACCT cuser;
{
str_ncpy(name[i].userid, cuser.userid, IDLEN + 1);
str_ncpy(name[i].realname, cuser.realname, RNLEN + 1);
str_ncpy(name[i].email, cuser.email, sizeof(name[i].email));
i++;
}
/*-------------------------------------------------------*/
/* 主程式 */
/*-------------------------------------------------------*/
int
main()
{
int numuser; /* 總共有幾個註冊帳號 */
char c;
chdir(BBSHOME);
numuser = rec_num(FN_SCHEMA, sizeof(SCHEMA)) + 100;
/* 加 100 以免剛好有人註冊 */
name = (DATA *) malloc(sizeof(DATA) * numuser);
memset(name, 0, sizeof(DATA) * numuser);
for (c = 'a'; c <= 'z'; c++)
{
char buf[64];
struct dirent *de;
DIR *dirp;
sprintf(buf, BBSHOME "/usr/%c", c);
chdir(buf);
if (!(dirp = opendir(".")))
continue;
while (de = readdir(dirp))
{
ACCT cuser;
int fd;
char *fname;
fname = de->d_name;
if (*fname <= ' ' || *fname == '.')
continue;
sprintf(buf, "%s/.ACCT", fname);
if ((fd = open(buf, O_RDONLY)) < 0)
continue;
read(fd, &cuser, sizeof(cuser));
close(fd);
topusr(cuser);
}
closedir(dirp);
}
qsort(name, numuser, sizeof(DATA), sort_compare);
write_data(OUTFILE_REALNAME, "真實姓名排行榜", name);
free(name);
return 0;
}
--
┌┼ Author: 中興資科˙中興資科 e資獨秀 bbs.cs.nchu.edu.tw
└┘ Origin: qazq 從 61-216-137-194.HINET-IP.hinet.net 發表