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