/* (bbcim) diskb_del.c: verwijder bestand uit diskbeeld
 *
 * Copyright (C) W.H.Scholten 1996
 */


/* voor Acorn DFS */
int  disk_del_file(struct diskimage *image, int args, char *arglist[], int flags) {
    FILE *fpdisk;
    char bbcfile_naam[15];
    unsigned char filebyte;
    unsigned char files;
    int  rfiles;
    long file,k;
    int  locked;
    int  removed;
    int  i,j;
    char testnaam[15];
    char *disk;


    disk=image->filename;
    if (diskimage_sanitycheck(image, flags &VERBOSE)) return bbcim_errno;

    fpdisk=fopen(disk,"rb+");
    fseek(fpdisk,256+5L,SEEK_SET);
    fread(&files,1,1,fpdisk);

    rfiles=files/8;
#ifdef NL
    printf("aantal bestanden: %d\n",rfiles);
#else
    printf("number of files: %d\n",rfiles);
#endif

    removed=0;

    /*Hoofdlus: alle bestanden opzoeken. */
    if (files>0) {
	for(file=0;file<files; file +=8) {
	    fseek(fpdisk,file+15L,SEEK_SET);
	    fread(&filebyte,1,1,fpdisk);

	    locked=filebyte >>7;

	    bbcfile_naam[0]=(filebyte & 0x7F);
	    bbcfile_naam[1]='.';    

	    fseek(fpdisk,file+8L,SEEK_SET);
	    fread(bbcfile_naam+2,1,7,fpdisk);
	    bbcfile_naam[9]=0;
	    /*spaties aan het einde van extract weghalen: geeft anders bestands namen
	      met spaties aan het einde */
	    for(i=8; i>0 && (bbcfile_naam[i]==' '); i--);
	    bbcfile_naam[i+1]=0;

	    for (j=0; j<args; j++) {
		if (arglist[j][1]=='.')
		    strncpy(testnaam, arglist[j],9);
		else {
		    testnaam[0]='$'; testnaam[1]='.';
		    strncpy(testnaam+2, arglist[j],7);
		}
		testnaam[9]=0;

		if (!strcmp(bbcfile_naam, testnaam)) {
		    for (k=(file+8)+8; k<256; k++) {
			fseek(fpdisk,k, SEEK_SET);
			fread(&filebyte,1,1,fpdisk);
			fseek(fpdisk,k-8L, SEEK_SET);
			fwrite(&filebyte,1,1,fpdisk);

			fseek(fpdisk,k+256L, SEEK_SET);
			fread(&filebyte,1,1,fpdisk);
			fseek(fpdisk,k-8L+256L, SEEK_SET);
			fwrite(&filebyte,1,1,fpdisk);
		    }
#ifdef NL
		    printf("Bestand %s verwijderd\n",testnaam);
#else
		    printf("File %s removed\n",testnaam);
#endif
		    removed++;
/*          continue;*/
		    break;
		}
	    }
	}/*for*/

	files -=removed*8;
	fseek(fpdisk,256+5L,SEEK_SET);
	fwrite(&files,1,1,fpdisk);

	fclose(fpdisk);

#ifdef NL
	printf("  %d bestand%s verwijderd\n", removed, (removed!=1) ? "en" : "");
#else
	printf("  %d file%s removed\n", removed, (removed!=1) ? "s" : "");
#endif

    }/*if files>0 */
    fclose(fpdisk);
    return 0;
}