DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T e

⟦7da8123e6⟧ TextFile

    Length: 2207 (0x89f)
    Types: TextFile
    Names: »erase.c«

Derivation

└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
    └─⟦this⟧ »EUUGD18/X/Xwanderer/erase.c« 

TextFile

#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");
}