summaryrefslogtreecommitdiffstats
path: root/mbbsd/topsong.c
diff options
context:
space:
mode:
Diffstat (limited to 'mbbsd/topsong.c')
-rw-r--r--mbbsd/topsong.c79
1 files changed, 79 insertions, 0 deletions
diff --git a/mbbsd/topsong.c b/mbbsd/topsong.c
new file mode 100644
index 00000000..d3a65447
--- /dev/null
+++ b/mbbsd/topsong.c
@@ -0,0 +1,79 @@
+/* $Id: topsong.c,v 1.1 2002/03/07 15:13:48 in2 Exp $ */
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include "config.h"
+#include "pttstruct.h"
+#include "common.h"
+#include "proto.h"
+
+#define MAX_SONGS 300
+#define QCAST int (*)(const void *, const void *)
+
+typedef struct songcmp_t {
+ char name[100];
+ char cname[100];
+ long int count;
+} songcmp_t;
+
+static long int totalcount=0;
+
+static int count_cmp(songcmp_t *b, songcmp_t *a) {
+ return (a->count - b->count);
+}
+
+int topsong() {
+ more(FN_TOPSONG,YEA);
+ return 0;
+}
+
+static int strip_blank(char *cbuf, char *buf) {
+ for(; *buf; buf++)
+ if(*buf != ' ')
+ *cbuf++ = *buf;
+ *cbuf = 0;
+ return 0;
+}
+
+void sortsong() {
+ FILE *fo, *fp = fopen(BBSHOME "/" FN_USSONG, "r");
+ songcmp_t songs[MAX_SONGS + 1];
+ int n;
+ char buf[256], cbuf[256];
+
+ memset(songs , 0, sizeof(songs));
+ if(!fp) return;
+ if(!(fo = fopen(FN_TOPSONG,"w"))) {
+ fclose(fp);
+ return;
+ }
+
+ totalcount = 0;
+ while(fgets(buf, 200, fp)) {
+ strtok(buf, "\n\r");
+ strip_blank(cbuf, buf);
+ if(!cbuf[0] || !isprint2(cbuf[0]))
+ continue;
+
+ for(n = 0; n < MAX_SONGS && songs[n].name[0]; n++)
+ if(!strcmp(songs[n].cname,cbuf))
+ break;
+ strcpy(songs[n].name, buf);
+ strcpy(songs[n].cname, cbuf);
+ songs[n].count++;
+ totalcount++;
+ }
+ qsort(songs, MAX_SONGS, sizeof(songcmp_t), (QCAST)count_cmp);
+ fprintf(fo,
+ " \033[36m──\033[37m名次\033[36m──────\033[37m歌"
+ " 名\033[36m───────────\033[37m次數\033[36m"
+ "──\033[32m共%ld次\033[36m──\033[m\n", totalcount);
+ for(n = 0; n < 100 && songs[n].name[0]; n++) {
+ fprintf(fo, " %5d. %-38.38s %4ld \033[32m[%.2f]\033[m\n", n + 1,
+ songs[n].name, songs[n].count,
+ (float)songs[n].count/totalcount);
+ }
+ fclose(fp);
+ fclose(fo);
+}