|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T e
Length: 2207 (0x89f)
Types: TextFile
Names: »erase.c«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
└─⟦this⟧ »EUUGD18/X/Xwanderer/erase.c«
#include "wand_head.h"
#define LOCK while((lock = creat(LOCKPATH,0)) < 0)
#define UNLOCK (void) unlink(LOCKPATH)
#define ENTRIES 15
typedef struct
{
char howdead[25];
char name[20];
int score;
int level;
} score_entry;
void show_scores(table,num)
score_entry *table;
int num;
{
int tot = num;
printf("\nNo. Score Level Name How he died\n");
printf("=============================================================================\n");
while(num > 0)
{
num--;
printf("%2d %5d %3d %-20s was killed by %-s\n",(tot-num),table->score,table->level,table->name,table->howdead);
table++;
}
printf("\n\n");
}
int readtable(table_ptr)
score_entry *table_ptr;
{
FILE *fp;
int numread;
if((fp = fopen(HISCOREPATH,"r")) == NULL)
{
numread = 0;
}
else
{
numread = fread(table_ptr, sizeof(score_entry), ENTRIES, fp);
fclose(fp);
}
return numread;
}
void delete_entry(num)
int num;
{
score_entry table[ENTRIES + 22],
*table_ptr = table,
new_entry,temp_entry;
int numread,index = 1, numsaved, lock, output_value = 1;
FILE *fp;
LOCK;
numread = readtable(table_ptr);
if (numread == 0) {
printf("\007Missing or unreadable hiscore table.\n\n");
UNLOCK;
exit(1);
}
if (num > numread) {
printf("\007Invalid entry, choose again\n");
UNLOCK;
return;
}
while(index < num)
{
index++;
table_ptr++;
}
while(index < numread)
{
index++;
*table_ptr = *(table_ptr+1);
table_ptr++;
}
numread--;
fp = fopen(HISCOREPATH,"w");
table_ptr = table;
numsaved = fwrite(table_ptr, sizeof(score_entry), numread, fp);
chmod(HISCOREPATH,0666);
if(numsaved < numread)
{
printf("ERROR! Only %d items saved from %d !\n",numsaved,numread);
output_value = 0;
}
fclose(fp);
UNLOCK;
show_scores(table,numsaved);
}
main()
{
int erasenum,numread;
score_entry table[ENTRIES + 2],
*table_ptr = table;
numread = readtable(table_ptr);
show_scores(table,numread);
printf("\n");
for(;;)
{
printf("Number to erase (0 to exit): ");
scanf("%d",&erasenum);
printf("\n");
if(erasenum == 0)
break;
delete_entry(erasenum);
printf("\n");
}
printf("Byee!\n");
}