mirror of
https://github.com/tbamud/tbamud.git
synced 2025-12-21 01:30:12 +01:00
new rebuild Index utility
This commit is contained in:
parent
86f83bcc57
commit
1c3714926d
2 changed files with 160 additions and 0 deletions
|
|
@ -29,6 +29,7 @@ all: $(BINDIR)/asciipasswd \
|
||||||
$(BINDIR)/shopconv \
|
$(BINDIR)/shopconv \
|
||||||
$(BINDIR)/sign \
|
$(BINDIR)/sign \
|
||||||
$(BINDIR)/split \
|
$(BINDIR)/split \
|
||||||
|
$(BINDIR)/rebuildIndex \
|
||||||
$(BINDIR)/wld2html \
|
$(BINDIR)/wld2html \
|
||||||
$(BINDIR)/webster
|
$(BINDIR)/webster
|
||||||
|
|
||||||
|
|
@ -48,6 +49,11 @@ wld2html: $(BINDIR)/wld2html
|
||||||
|
|
||||||
webster: $(BINDIR)/webster
|
webster: $(BINDIR)/webster
|
||||||
|
|
||||||
|
rebuildIndex: $(BINDIR)/rebuildIndex
|
||||||
|
|
||||||
|
$(BINDIR)/rebuildIndex: rebuildAsciiIndex.c
|
||||||
|
$(CC) $(CFLAGS) -o $(BINDIR)/rebuildIndex rebuildAsciiIndex.c
|
||||||
|
|
||||||
$(BINDIR)/asciipasswd: asciipasswd.c
|
$(BINDIR)/asciipasswd: asciipasswd.c
|
||||||
$(CC) $(CFLAGS) -o $(BINDIR)/asciipasswd asciipasswd.c @CRYPTLIB@
|
$(CC) $(CFLAGS) -o $(BINDIR)/asciipasswd asciipasswd.c @CRYPTLIB@
|
||||||
|
|
||||||
|
|
|
||||||
154
src/util/rebuildAsciiIndex.c
Normal file
154
src/util/rebuildAsciiIndex.c
Normal file
|
|
@ -0,0 +1,154 @@
|
||||||
|
/* ************************************************************************
|
||||||
|
* file: rebuildAsciiIndex.c Part of tbaMUD *
|
||||||
|
* Copyright (C) 1990, 2010 - see 'license.doc' for complete information. *
|
||||||
|
* All Rights Reserved *
|
||||||
|
************************************************************************* */
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <dirent.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#define READ_SIZE 256
|
||||||
|
|
||||||
|
int atoi(const char *str);
|
||||||
|
long atol(const char *str);
|
||||||
|
|
||||||
|
|
||||||
|
void walkdir(FILE* index_file, char *dir);
|
||||||
|
int get_line(FILE *fl, char *buf);
|
||||||
|
|
||||||
|
int main(int argc, char** argv)
|
||||||
|
{
|
||||||
|
FILE *index_file;
|
||||||
|
if ( argc == 1 ) {
|
||||||
|
printf("Usage: %s indexfile\n",argv[0]);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (!(index_file = fopen(argv[1], "w"))) {
|
||||||
|
perror("error opening index file");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
walkdir(index_file, ".");
|
||||||
|
|
||||||
|
fprintf(index_file, "~\n");
|
||||||
|
fclose(index_file);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *parsename(char *filename) {
|
||||||
|
static char copy[1024];
|
||||||
|
strcpy(copy, filename);
|
||||||
|
char *extension = strchr(copy, '.');
|
||||||
|
if (extension == NULL) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
if (strcmp(".plr", extension)) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
*extension = '\0';
|
||||||
|
return copy;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *findLine(FILE *plr_file, char *tag) {
|
||||||
|
static char line[5000];
|
||||||
|
rewind(plr_file);
|
||||||
|
|
||||||
|
while (get_line(plr_file, line)) {
|
||||||
|
if(!strncmp(tag, line, strlen(tag))) {
|
||||||
|
return line+strlen(tag);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
long parseid(FILE *plr_file) {
|
||||||
|
return atol(findLine(plr_file, "Id :"));
|
||||||
|
}
|
||||||
|
|
||||||
|
int parselevel(FILE *plr_file) {
|
||||||
|
return atoi(findLine(plr_file, "Levl:"));
|
||||||
|
}
|
||||||
|
|
||||||
|
int parseadminlevel(FILE *plr_file, int level) {
|
||||||
|
char *fromFile = findLine(plr_file, "Admn:");
|
||||||
|
if (fromFile != NULL)
|
||||||
|
return atoi(fromFile);
|
||||||
|
|
||||||
|
if (level >= 30)
|
||||||
|
return level-30;
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
long parselast(FILE *plr_file) {
|
||||||
|
return atol(findLine(plr_file, "Last:"));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void walkdir(FILE *index_file, char *dir) {
|
||||||
|
char filename_qfd[1000] ;
|
||||||
|
struct dirent *dp;
|
||||||
|
DIR *dfd;
|
||||||
|
|
||||||
|
if ((dfd = opendir(dir)) == NULL)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Can't open %s\n", dir);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
while ((dp = readdir(dfd)) != NULL)
|
||||||
|
{
|
||||||
|
struct stat stbuf ;
|
||||||
|
sprintf( filename_qfd , "%s/%s",dir,dp->d_name) ;
|
||||||
|
if( stat(filename_qfd,&stbuf ) == -1 ) {
|
||||||
|
fprintf(stdout, "Unable to stat file: %s\n",filename_qfd) ;
|
||||||
|
continue ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( ( stbuf.st_mode & S_IFMT ) == S_IFDIR ) {
|
||||||
|
if (!strcmp(".", dp->d_name) || !strcmp("..", dp->d_name))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
walkdir(index_file, filename_qfd);
|
||||||
|
} else {
|
||||||
|
char *name = parsename(dp->d_name);
|
||||||
|
|
||||||
|
if (name != NULL) {
|
||||||
|
FILE *plr_file = fopen(filename_qfd, "r");
|
||||||
|
long id = parseid(plr_file);
|
||||||
|
|
||||||
|
int level = parselevel(plr_file);
|
||||||
|
int adminlevel = parseadminlevel(plr_file, level);
|
||||||
|
if (level > 30)
|
||||||
|
level = 30;
|
||||||
|
long last = parselast(plr_file);
|
||||||
|
|
||||||
|
fprintf(index_file, "%ld %s %d %d 0 %ld\n", id, name, level, adminlevel, last);
|
||||||
|
|
||||||
|
fclose(plr_file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int get_line(FILE *fl, char *buf)
|
||||||
|
{
|
||||||
|
char temp[READ_SIZE];
|
||||||
|
int lines = 0;
|
||||||
|
int sl;
|
||||||
|
|
||||||
|
do {
|
||||||
|
if (!fgets(temp, READ_SIZE, fl))
|
||||||
|
return (0);
|
||||||
|
lines++;
|
||||||
|
} while (*temp == '*' || *temp == '\n' || *temp == '\r');
|
||||||
|
|
||||||
|
/* Last line of file doesn't always have a \n, but it should. */
|
||||||
|
sl = strlen(temp);
|
||||||
|
while (sl > 0 && (temp[sl - 1] == '\n' || temp[sl - 1] == '\r'))
|
||||||
|
temp[--sl] = '\0';
|
||||||
|
|
||||||
|
strcpy(buf, temp); /* strcpy: OK, if buf >= READ_SIZE (256) */
|
||||||
|
return (lines);
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue