Added mbfile list [area]
This commit is contained in:
parent
a877a50ded
commit
9f48fb1352
@ -124,8 +124,15 @@ int main(int argc, char **argv)
|
|||||||
cmd = xstrcat(cmd, argv[i]);
|
cmd = xstrcat(cmd, argv[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!strncmp(argv[i], "l", 1))
|
if (!strncmp(argv[i], "l", 1)) {
|
||||||
do_list = TRUE;
|
do_list = TRUE;
|
||||||
|
if (argc > (i + 1)) {
|
||||||
|
i++;
|
||||||
|
Area = atoi(argv[i]);
|
||||||
|
cmd = xstrcat(cmd, (char *)" ");
|
||||||
|
cmd = xstrcat(cmd, argv[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
if (!strncmp(argv[i], "p", 1))
|
if (!strncmp(argv[i], "p", 1))
|
||||||
do_pack = TRUE;
|
do_pack = TRUE;
|
||||||
if (!strncmp(argv[i], "c", 1))
|
if (!strncmp(argv[i], "c", 1))
|
||||||
@ -173,7 +180,7 @@ int main(int argc, char **argv)
|
|||||||
Index();
|
Index();
|
||||||
|
|
||||||
if (do_list)
|
if (do_list)
|
||||||
ListFileAreas();
|
ListFileAreas(Area);
|
||||||
|
|
||||||
die(0);
|
die(0);
|
||||||
return 0;
|
return 0;
|
||||||
|
116
mbfido/mbflist.c
116
mbfido/mbflist.c
@ -42,30 +42,28 @@
|
|||||||
extern int do_quiet; /* Supress screen output */
|
extern int do_quiet; /* Supress screen output */
|
||||||
|
|
||||||
|
|
||||||
void ListFileAreas(void)
|
void ListFileAreas(int Area)
|
||||||
{
|
{
|
||||||
FILE *pAreas, *pFile;
|
FILE *pAreas, *pFile;
|
||||||
int i, iAreas, fcount, tcount = 0;
|
int i, iAreas, fcount, tcount = 0;
|
||||||
int iTotal = 0;
|
int iTotal = 0;
|
||||||
long fsize, tsize = 0;
|
long fsize, tsize = 0;
|
||||||
char *sAreas, *fAreas;
|
char *sAreas, *fAreas, flags[6];
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If nothing to display allowed, return at once.
|
||||||
|
*/
|
||||||
|
if (do_quiet)
|
||||||
|
return;
|
||||||
|
|
||||||
|
colour(LIGHTRED, BLACK);
|
||||||
sAreas = calloc(PATH_MAX, sizeof(char));
|
sAreas = calloc(PATH_MAX, sizeof(char));
|
||||||
fAreas = calloc(PATH_MAX, sizeof(char));
|
fAreas = calloc(PATH_MAX, sizeof(char));
|
||||||
|
|
||||||
IsDoing("List fileareas");
|
|
||||||
if (!do_quiet) {
|
|
||||||
colour(3, 0);
|
|
||||||
printf(" Area Files MByte File Group Area name\n");
|
|
||||||
printf("----- ----- ----- ------------ --------------------------------------------\n");
|
|
||||||
colour(7, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
sprintf(sAreas, "%s/etc/fareas.data", getenv("MBSE_ROOT"));
|
sprintf(sAreas, "%s/etc/fareas.data", getenv("MBSE_ROOT"));
|
||||||
|
|
||||||
if ((pAreas = fopen (sAreas, "r")) == NULL) {
|
if ((pAreas = fopen (sAreas, "r")) == NULL) {
|
||||||
WriteError("Can't open %s", sAreas);
|
WriteError("Can't open %s", sAreas);
|
||||||
if (!do_quiet)
|
|
||||||
printf("Can't open %s\n", sAreas);
|
printf("Can't open %s\n", sAreas);
|
||||||
die(0);
|
die(0);
|
||||||
}
|
}
|
||||||
@ -74,17 +72,96 @@ void ListFileAreas(void)
|
|||||||
fseek(pAreas, 0, SEEK_END);
|
fseek(pAreas, 0, SEEK_END);
|
||||||
iAreas = (ftell(pAreas) - areahdr.hdrsize) / areahdr.recsize;
|
iAreas = (ftell(pAreas) - areahdr.hdrsize) / areahdr.recsize;
|
||||||
|
|
||||||
|
if (Area) {
|
||||||
|
IsDoing("List area %d", Area);
|
||||||
|
|
||||||
|
if (fseek(pAreas, ((Area - 1) * areahdr.recsize) + areahdr.hdrsize, SEEK_SET)) {
|
||||||
|
WriteError("$Can't seek area %d", Area);
|
||||||
|
printf("Can't seek area %d\n", Area);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (fread(&area, areahdr.recsize, 1, pAreas) != 1) {
|
||||||
|
WriteError("$Can't read record for area %d", Area);
|
||||||
|
printf("Can't read record for area %d\n", Area);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (area.Available) {
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Open the file database, create new one if it doesn't exist.
|
||||||
|
*/
|
||||||
|
sprintf(fAreas, "%s/fdb/fdb%d.data", getenv("MBSE_ROOT"), Area);
|
||||||
|
if ((pFile = fopen(fAreas, "r+")) == NULL) {
|
||||||
|
Syslog('!', "Creating new %s", fAreas);
|
||||||
|
if ((pFile = fopen(fAreas, "a+")) == NULL) {
|
||||||
|
WriteError("$Can't create %s", fAreas);
|
||||||
|
die(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fcount = 0;
|
||||||
|
fsize = 0L;
|
||||||
|
colour(CYAN, BLACK);
|
||||||
|
printf("File listing of area %d, %s\n\n", Area, area.Name);
|
||||||
|
printf("File name Kbytes File date Dnlds Flags Description\n");
|
||||||
|
printf("------------ ------ ---------- ----- ----- ------------------------------------\n");
|
||||||
|
colour(LIGHTGRAY, BLACK);
|
||||||
|
|
||||||
|
while (fread(&file, sizeof(file), 1, pFile) == 1) {
|
||||||
|
sprintf(flags, "-----");
|
||||||
|
if (file.Free)
|
||||||
|
flags[0] = 'F';
|
||||||
|
if (file.Deleted)
|
||||||
|
flags[1] = 'D';
|
||||||
|
if (file.Missing)
|
||||||
|
flags[2] = 'M';
|
||||||
|
if (file.NoKill)
|
||||||
|
flags[3] = 'N';
|
||||||
|
if (file.Announced)
|
||||||
|
flags[4] = 'A';
|
||||||
|
|
||||||
|
if (strlen(file.Desc[0]) > 36)
|
||||||
|
file.Desc[0][36] = '\0';
|
||||||
|
printf("%-12s %6ld %s %5ld %s %s\n",
|
||||||
|
file.Name, file.Size / 1024, StrDateDMY(file.FileDate),
|
||||||
|
file.TimesDL + file.TimesFTP + file.TimesReq, flags, file.Desc[0]);
|
||||||
|
fcount++;
|
||||||
|
fsize = fsize + file.Size;
|
||||||
|
}
|
||||||
|
fsize = fsize / 1024;
|
||||||
|
|
||||||
|
colour(CYAN, BLACK);
|
||||||
|
printf("-------------------------------------------------------------------------------\n");
|
||||||
|
printf("%d file%s, %ld Kbytes\n", fcount, (fcount == 1) ? "":"s", fsize);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
WriteError("Area %d is not available", Area);
|
||||||
|
printf("Area %d is not available\n", Area);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
free(sAreas);
|
||||||
|
free(fAreas);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
IsDoing("List fileareas");
|
||||||
|
colour(CYAN, BLACK);
|
||||||
|
printf(" Area Files MByte File Group Area name\n");
|
||||||
|
printf("----- ----- ----- ------------ --------------------------------------------\n");
|
||||||
|
colour(LIGHTGRAY, BLACK);
|
||||||
|
|
||||||
for (i = 1; i <= iAreas; i++) {
|
for (i = 1; i <= iAreas; i++) {
|
||||||
fseek(pAreas, ((i-1) * areahdr.recsize) + areahdr.hdrsize, SEEK_SET);
|
fseek(pAreas, ((i-1) * areahdr.recsize) + areahdr.hdrsize, SEEK_SET);
|
||||||
fread(&area, areahdr.recsize, 1, pAreas);
|
fread(&area, areahdr.recsize, 1, pAreas);
|
||||||
|
|
||||||
if (area.Available) {
|
if (area.Available) {
|
||||||
|
|
||||||
sprintf(fAreas, "%s/fdb/fdb%d.data", getenv("MBSE_ROOT"), i);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Open the file database, create new one if it doesn't excist.
|
* Open the file database, create new one if it doesn't exist.
|
||||||
*/
|
*/
|
||||||
|
sprintf(fAreas, "%s/fdb/fdb%d.data", getenv("MBSE_ROOT"), i);
|
||||||
if ((pFile = fopen(fAreas, "r+")) == NULL) {
|
if ((pFile = fopen(fAreas, "r+")) == NULL) {
|
||||||
Syslog('!', "Creating new %s", fAreas);
|
Syslog('!', "Creating new %s", fAreas);
|
||||||
if ((pFile = fopen(fAreas, "a+")) == NULL) {
|
if ((pFile = fopen(fAreas, "a+")) == NULL) {
|
||||||
@ -103,24 +180,15 @@ void ListFileAreas(void)
|
|||||||
tcount += fcount;
|
tcount += fcount;
|
||||||
tsize += fsize;
|
tsize += fsize;
|
||||||
|
|
||||||
if (!do_quiet)
|
|
||||||
printf("%5d %5d %5ld %-12s %s\n", i, fcount, fsize, area.BbsGroup, area.Name);
|
printf("%5d %5d %5ld %-12s %s\n", i, fcount, fsize, area.BbsGroup, area.Name);
|
||||||
iTotal++;
|
iTotal++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!do_quiet) {
|
colour(CYAN, BLACK);
|
||||||
colour(3, 0);
|
|
||||||
printf("----- ----- ----- ---------------------------------------------------------\n");
|
printf("----- ----- ----- ---------------------------------------------------------\n");
|
||||||
printf("%5d %5d %5ld \n", iTotal, tcount, tsize);
|
printf("%5d %5d %5ld \n", iTotal, tcount, tsize);
|
||||||
}
|
|
||||||
|
|
||||||
fclose(pAreas);
|
fclose(pAreas);
|
||||||
if (!do_quiet) {
|
|
||||||
printf("\r \r");
|
|
||||||
fflush(stdout);
|
|
||||||
}
|
|
||||||
|
|
||||||
free(sAreas);
|
free(sAreas);
|
||||||
free(fAreas);
|
free(fAreas);
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,6 @@
|
|||||||
#ifndef _MBFLIST_H_
|
#ifndef _MBFLIST_H_
|
||||||
#define _MBFLIST_H
|
#define _MBFLIST_H
|
||||||
|
|
||||||
void ListFileAreas(void); /* List fileareas */
|
void ListFileAreas(int); /* List fileareas */
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -119,7 +119,7 @@ void Help(void)
|
|||||||
printf(" im import <area> Import files in current dir to area\n");
|
printf(" im import <area> Import files in current dir to area\n");
|
||||||
printf(" in index Create filerequest index\n");
|
printf(" in index Create filerequest index\n");
|
||||||
printf(" k kill Kill/move old files\n");
|
printf(" k kill Kill/move old files\n");
|
||||||
printf(" l list List file areas\n");
|
printf(" l list [area] List file areas or one area\n");
|
||||||
// printf(" m move <from> <to> <file> Move file from to area\n");
|
// printf(" m move <from> <to> <file> Move file from to area\n");
|
||||||
printf(" p pack Pack filebase\n");
|
printf(" p pack Pack filebase\n");
|
||||||
// printf(" r rearc <area> [file] [arc] Rearc file(s) in area\n");
|
// printf(" r rearc <area> [file] [arc] Rearc file(s) in area\n");
|
||||||
|
Reference in New Issue
Block a user