diff --git a/libhxcfe/sources/loaders/xml_loader/xml_writer.c b/libhxcfe/sources/loaders/xml_loader/xml_writer.c index 82853b2a..8d35c42e 100644 --- a/libhxcfe/sources/loaders/xml_loader/xml_writer.c +++ b/libhxcfe/sources/loaders/xml_loader/xml_writer.c @@ -40,7 +40,7 @@ #include "libhxcadaptor.h" -void gettracktype(HXCFE_SECTORACCESS* ss,int track,int side,int * nbsect,int *firstsectid,char * format,int *sectorsize) +void gettracktype(HXCFE_SECTORACCESS* ss,int track,int side,int * nbsect,int *firstsectid,char * format,int * format_id, int *sectorsize) { int i; HXCFE_SECTCFG** sca; @@ -49,42 +49,39 @@ void gettracktype(HXCFE_SECTORACCESS* ss,int track,int side,int * nbsect,int *fi *sectorsize = 512; *firstsectid = 1; sprintf(format,"IBM_MFM"); + *format_id = IBMFORMAT_DD; *nbsect = 0; - sca = hxcfe_getAllTrackSectors(ss,track,side,ISOIBM_MFM_ENCODING,&nb_sectorfound); + sca = hxcfe_getAllTrackISOSectors(ss,track,side,&nb_sectorfound); if(nb_sectorfound) { *sectorsize = sca[0]->sectorsize; *firstsectid = 0xFF; *nbsect = nb_sectorfound; - for(i=0;isector<*firstsectid) - *firstsectid = sca[i]->sector; - hxcfe_freeSectorConfig (ss,sca[i]); - } - free(sca); - } - - sca = hxcfe_getAllTrackSectors(ss,track,side,ISOIBM_FM_ENCODING,&nb_sectorfound); - if(nb_sectorfound) - { - *sectorsize = sca[0]->sectorsize; - *firstsectid = 0xFF; - *nbsect = nb_sectorfound; - for(i=0;itrackencoding == IBMFORMAT_SD ) || + ( sca[0]->trackencoding == ISOFORMAT_SD ) + ) { sprintf(format,"IBM_FM"); + *format_id = IBMFORMAT_SD; + } + else + { + sprintf(format,"IBM_MFM"); + *format_id = IBMFORMAT_DD; + } + + for(i=0;isector<*firstsectid) *firstsectid = sca[i]->sector; hxcfe_freeSectorConfig (ss,sca[i]); } + free(sca); } - - } typedef struct sect_offset_ @@ -136,6 +133,7 @@ int XML_libWrite_DiskFile(HXCFE_IMGLDR* imgldr_ctx,HXCFE_FLOPPY * floppy,char * HXCFE_SECTCFG** sca; sect_offset ** sorted_sectoffset,**sectoffset; uint32_t crc32; + int trackformatid; sectoffset = NULL; sorted_sectoffset = NULL; @@ -179,7 +177,7 @@ int XML_libWrite_DiskFile(HXCFE_IMGLDR* imgldr_ctx,HXCFE_FLOPPY * floppy,char * fprintf(xmlfile,"\t\t%d\n",floppy->floppyNumberOfTrack); fprintf(xmlfile,"\t\t%d\n",floppy->floppyNumberOfSide); - gettracktype(ss,0,0,&nbsect,&firstsectid,(char*)&trackformat,§orsize); + gettracktype(ss,0,0,&nbsect,&firstsectid,(char*)&trackformat,&trackformatid,§orsize); fprintf(xmlfile,"\t\t%s\n",trackformat); @@ -217,7 +215,7 @@ int XML_libWrite_DiskFile(HXCFE_IMGLDR* imgldr_ctx,HXCFE_FLOPPY * floppy,char * fprintf(xmlfile,"\t\t\t\n",j,i); fprintf(xmlfile,"\t\t\t\t0x%.6X\n",fileoffset); - gettracktype(ss,j,i,&nbsect,&firstsectid,(char*)&trackformat,§orsize); + gettracktype(ss,j,i,&nbsect,&firstsectid,(char*)&trackformat,&trackformatid,§orsize); fprintf(xmlfile,"\t\t\t\t%s\n",trackformat); nb_sectorfound = 0; @@ -266,6 +264,29 @@ int XML_libWrite_DiskFile(HXCFE_IMGLDR* imgldr_ctx,HXCFE_FLOPPY * floppy,char * { fprintf(xmlfile,"\t\t\t\t\t\n",sca[s]->sector,sca[s]->sectorsize); + + if( ( trackformatid != IBMFORMAT_SD ) && + ( + ( sca[s]->trackencoding == IBMFORMAT_SD ) || + ( sca[s]->trackencoding == ISOFORMAT_SD ) + ) + ) + { + fprintf(xmlfile,"\t\t\t\t\t\tIBM_FM\n"); + } + else + { + if( ( trackformatid != IBMFORMAT_DD ) && + ( + ( sca[s]->trackencoding == IBMFORMAT_DD ) || + ( sca[s]->trackencoding == ISOFORMAT_DD ) + ) + ) + { + fprintf(xmlfile,"\t\t\t\t\t\tIBM_MFM\n"); + } + } + if(sca[s]->fill_byte_used) { fprintf(xmlfile,"\t\t\t\t\t\t0x%.2X\n",sca[s]->fill_byte); diff --git a/libhxcfe/sources/xml_disk/xml_disk.c b/libhxcfe/sources/xml_disk/xml_disk.c index b1a6cf27..8f29004c 100644 --- a/libhxcfe/sources/xml_disk/xml_disk.c +++ b/libhxcfe/sources/xml_disk/xml_disk.c @@ -550,6 +550,7 @@ static void XMLCALL charhandler(void *data, const char *s, int len) ad->fill_value = ahextoi(buffer); break; + case FORMAT_SECTOR: case FORMAT_TRACK: case FORMAT: if(!ad->xmlcheck) diff --git a/libhxcfe/sources/xml_disk/xml_disk.h b/libhxcfe/sources/xml_disk/xml_disk.h index 2c485994..fcd3f073 100644 --- a/libhxcfe/sources/xml_disk/xml_disk.h +++ b/libhxcfe/sources/xml_disk/xml_disk.h @@ -63,7 +63,8 @@ enum TRACK_PREGAP, TRACK_PREGAP_US, SET_INDEX_LENGTH, - SET_INDEX_POSITION + SET_INDEX_POSITION, + FORMAT_SECTOR }; keyword keyword_list[]= @@ -126,5 +127,6 @@ keyword keyword_list[]= {"sector_data", SECTORDATA_SECTOR, SECTOR}, {"sector_size", SECTORSIZE_SECTOR, SECTOR}, {"data_offset", DATAOFFSETSECTOR, SECTOR}, + {"format", FORMAT_SECTOR, SECTOR}, {0,0,0} };