/* archief.c (bbcim) * Copyright (c) W.H.Scholten 1996 * * cleans up the info file and renames (should rename be optional?) * */ int archive_cleanup(int argc, char *argv[], int options) { FILE *fpadd, *fpinfo; char infofile[100]; unsigned long loadaddress, execaddress; int addfiles,l, antwoord; char bbcfile_naam[13], unix_bbcfile_naam[13], nieuwe_info[50]; char nieuwe_naam[55]; char rest_string[100]; int found, len_s, i; unsigned int crc; for(addfiles=2; addfiles<argc; addfiles++) { /*.inf bestanden overslaan:*/ l=strlen(argv[addfiles]); if (l>4) { if (!strncmp(argv[addfiles]+l-4,".inf",4)) continue; } strcpy(infofile,argv[addfiles]); strcat(infofile,".inf"); /* BESTAAT HET INFO BESTAND? */ fpinfo=fopen(infofile, "r"); if (fpinfo==NULL) { #ifdef NL printf("Info bestand %s kan niet geopend worden, sla over\n", infofile); #else printf("Info file %s cannot be opened, skipping file\n", infofile); #endif continue; } /* BESTAAT HET ARCHIEF BESTAND? */ fpadd=fopen(argv[addfiles], "rb"); if (fpadd==NULL) { #ifdef NL printf("Archief bestand %s kan niet geopend worden\n", argv[addfiles]); #else printf("Archive file %s cannot be opened\n", argv[addfiles]); #endif continue; } fclose(fpadd); /* UIT HET inf BESTAND (EVT) DE BESTANDSNAAM HALEN. */ fscanf(fpinfo,"%12s", bbcfile_naam); if (bbcfile_naam[1]!='.') { strncpy(bbcfile_naam, argv[addfiles],12); fseek(fpinfo, 0L, SEEK_SET); } bbcfile_naam[9]=0; fscanf(fpinfo,"%lx %lx", &loadaddress, &execaddress); fgets(rest_string, 99, fpinfo); fclose(fpinfo); reduceer_unix_naam(unix_bbcfile_naam, bbcfile_naam); replace_bad_chars(unix_bbcfile_naam); /* HERNOEMEN ETC ALS NAAM AL BESTAAT */ strcpy(nieuwe_naam, unix_bbcfile_naam); if (strcmp(argv[addfiles], unix_bbcfile_naam)) { if ((fpadd=fopen(unix_bbcfile_naam, "rb"))!=NULL) { fclose(fpadd); antwoord=overschrijf_vraag(argv[addfiles], nieuwe_naam); switch(antwoord) { case OVERSCHRIJVEN: rename(argv[addfiles], unix_bbcfile_naam); break; case HERNOEM_NIEUW: strcpy(unix_bbcfile_naam, nieuwe_naam); rename(argv[addfiles], unix_bbcfile_naam); break; case HERNOEM_BESTAAND: rename(unix_bbcfile_naam, nieuwe_naam); strcat(nieuwe_naam, ".inf"); rename(infofile, nieuwe_naam); rename(argv[addfiles], unix_bbcfile_naam); break; case SLA_OVER: continue; } /*switch*/ } else rename(argv[addfiles], unix_bbcfile_naam); } /*if*/ strcpy(nieuwe_info,unix_bbcfile_naam); strcat(nieuwe_info,".inf"); found=0; len_s=strlen(rest_string); printf("Bestand %-9s (%-9s) CRC ", argv[addfiles], bbcfile_naam); for (i=0; i<len_s-4; i++) { if (!strncmp(rest_string+i,"CRC=",4)) { found=1; sscanf(rest_string+i+4, " %x", &crc); if (crc!=fcrc(unix_bbcfile_naam,1)) { #ifdef NL printf("fout, gevonden: %X", crc); crc=fcrc(unix_bbcfile_naam,0); printf(", berekend: %X", crc); #else printf("wrong, found: %X", crc); crc=fcrc(unix_bbcfile_naam,0); printf(", calculated: %X", crc); #endif } #ifdef NL else printf("in orde"); #else else printf("in orde"); #endif break; } } /*CRC toevoegen, alleen als er nog geen was: */ if (!found) { #ifdef NL printf("toegevoegd"); #else printf("added"); #endif crc=fcrc(unix_bbcfile_naam,0); } remove(infofile); fpinfo=fopen(nieuwe_info,"w"); fprintf(fpinfo, "%-9s %6lX %6lX CRC=%4X", bbcfile_naam, loadaddress, execaddress, (uint) crc); fclose(fpinfo); /* Did the name actually change? */ if (strcmp(argv[addfiles], unix_bbcfile_naam)) { #ifdef NL printf(", hernoemd tot %s\n", unix_bbcfile_naam); #else printf(", renamed to %s\n", unix_bbcfile_naam); #endif } else printf("\n"); } return 0; }