cbmimage
Loading...
Searching...
No Matches
internal.h
Go to the documentation of this file.
1
8#ifndef CBMIMAGE_INTERNAL_H
9#define CBMIMAGE_INTERNAL_H 1
10
11#include "cbmimage.h"
12
44
45
46/* forward definition; will be specified later */
48
74typedef
75uint16_t
77 cbmimage_image_settings * settings,
78 uint16_t track
79 );
80
100typedef
101int
103 cbmimage_image_settings * settings,
105 );
106
125typedef
126int
128 cbmimage_image_settings * settings,
130 );
131
152typedef
153int
155 cbmimage_image_settings * settings,
156 cbmimage_dir_entry * dir_entry
157 );
158
175typedef
176int
178 cbmimage_image_settings * settings
179 );
180
196typedef
198
200 uint8_t * buffer;
201
203 uint8_t starttrack;
204
207
209 uint8_t startoffset;
210
214 uint8_t multiplier;
215
220 uint8_t data_count;
221
237
239
275#define CBMIMAGE_I_BAM_SELECTOR_INIT(_starttrack, _startoffset, _multiplier, _data_count, _track, _sector, _reverse_order) \
276 { .starttrack = _starttrack, .startoffset = _startoffset, .multiplier = _multiplier, .data_count = _data_count, .reverse_order = _reverse_order, .block = CBMIMAGE_BLOCK_INIT_FROM_TS(_track, _sector) }
277
310#define CBMIMAGE_BAM_SELECTOR_INIT(_starttrack, _startoffset, _multiplier, _data_count, _track, _sector) \
311 CBMIMAGE_I_BAM_SELECTOR_INIT(_starttrack, _startoffset, _multiplier, _data_count, _track, _sector, 0)
312
345#define CBMIMAGE_BAM_SELECTOR_INIT_REVERSE(_starttrack, _startoffset, _multiplier, _data_count, _track, _sector) \
346 CBMIMAGE_I_BAM_SELECTOR_INIT(_starttrack, _startoffset, _multiplier, _data_count, _track, _sector, 1)
347
380#define CBMIMAGE_BAM_SELECTOR_INIT(_starttrack, _startoffset, _multiplier, _data_count, _track, _sector) \
381 CBMIMAGE_I_BAM_SELECTOR_INIT(_starttrack, _startoffset, _multiplier, _data_count, _track, _sector, 0)
382
411#define CBMIMAGE_BAM_COUNTER_SELECTOR_INIT(_starttrack, _startoffset, _multiplier, _track, _sector) \
412 CBMIMAGE_BAM_SELECTOR_INIT(_starttrack, _startoffset, _multiplier, 0, _track, _sector)
413
457#define CBMIMAGE_BAM_AND_BAM_COUNTER_CREATE(_basename, _index, _starttrack, _startoffset, _multiplier, _data_count, _track, _sector) \
458 _basename.bam[_index] = CBMIMAGE_BAM_SELECTOR_INIT( _starttrack, _startoffset + 1, _multiplier, _data_count, _track, _sector), \
459 _basename.bam_counter[_index] = CBMIMAGE_BAM_COUNTER_SELECTOR_INIT(_starttrack, _startoffset, _multiplier, _track, _sector)
460
479
515
547
562
590
610
623
625
775
786typedef
788
790 size_t size;
791
793 char * filename;
794
796 uint8_t * buffer;
797
799 uint8_t * errormap;
800
802
817#if 0
818void cbmimage_i_dnp_image_open(cbmimage_fileimage * image);
819#endif
820
822
823void cbmimage_i_init_bam_selector(cbmimage_image_settings * settings, cbmimage_i_bam_selector * selector, size_t selector_count);
824
825
845#define cbmimage_i_init_bam_counter_selector(_settings, _selector, _selector_count) \
846 cbmimage_i_init_bam_selector(_settings, _selector, _selector_count)
847
849
850void cbmimage_i_print(const char * text);
851void cbmimage_i_fmt_print(const char * fmt, ...);
852
855
856int cbmimage_i_dir_get_partition_data(cbmimage_dir_entry * dir_entry, cbmimage_blockaddress * block_first, cbmimage_blockaddress * block_last, size_t * block_count);
857
858
860
861int cbmimage_i_dir_set_subpartition_global(cbmimage_image_settings * settings, cbmimage_blockaddress block_subdir_first, size_t block_count);
863
868
870
871#endif // #ifndef CBMIMAGE_INTERNAL_H
cbmimage API and their definitions
uint8_t * cbmimage_i_get_address_of_block(cbmimage_fileimage *image, cbmimage_blockaddress block)
Definition readwriteblock.c:89
struct cbmimage_blockaddress_s cbmimage_blockaddress
Address on drive.
cbmimage_i_bam_selector cbmimage_i_bam_counter_selector
BAM counter selector .
Definition internal.h:478
struct cbmimage_i_bam_selector_s cbmimage_i_bam_selector
BAM Selector .
void cbmimage_i_init_bam_selector(cbmimage_image_settings *settings, cbmimage_i_bam_selector *selector, size_t selector_count)
Definition bam.c:107
int cbmimage_i_bam_check_really_unused(cbmimage_image_settings *settings, cbmimage_blockaddress block)
Definition bam.c:397
struct cbmimage_fileimage_functions_s cbmimage_fileimage_functions
BAM counter selector .
int cbmimage_i_blockaccessor_release(cbmimage_blockaccessor *accessor)
Definition blockaccessor.c:400
struct cbmimage_blockaccessor_s cbmimage_blockaccessor
cbmimage block accessor data structure
void cbmimage_i_fmt_print(const char *fmt,...)
Definition cbprint.c:80
void cbmimage_i_print(const char *text)
Definition cbprint.c:49
void cbmimage_i_d4m_image_open(cbmimage_fileimage *image)
Definition d1m_d2m_d4m.c:334
void cbmimage_i_d2m_image_open(cbmimage_fileimage *image)
Definition d1m_d2m_d4m.c:316
void cbmimage_i_d1m_image_open(cbmimage_fileimage *image)
Definition d1m_d2m_d4m.c:298
void cbmimage_i_d40_image_open(cbmimage_fileimage *image)
Definition d40_d64_d71.c:564
void cbmimage_i_d64_40track_prologic_image_open(cbmimage_fileimage *image)
Definition d40_d64_d71.c:655
void cbmimage_i_d64_42track_image_open(cbmimage_fileimage *image)
Definition d40_d64_d71.c:673
void cbmimage_i_d64_40track_image_open(cbmimage_fileimage *image)
Definition d40_d64_d71.c:601
void cbmimage_i_d64_40track_dolphin_image_open(cbmimage_fileimage *image)
Definition d40_d64_d71.c:637
void cbmimage_i_d64_image_open(cbmimage_fileimage *image)
Definition d40_d64_d71.c:582
int cbmimage_i_d64_chdir_partition_init(cbmimage_image_settings *settings)
Definition d40_d64_d71.c:496
void cbmimage_i_d64_40track_speeddos_image_open(cbmimage_fileimage *image)
Definition d40_d64_d71.c:619
void cbmimage_i_d71_image_open(cbmimage_fileimage *image)
Definition d40_d64_d71.c:691
int cbmimage_i_d71_chdir_partition_init(cbmimage_image_settings *settings)
Definition d40_d64_d71.c:514
void cbmimage_i_d82_image_open(cbmimage_fileimage *image)
Definition d80_d82.c:347
void cbmimage_i_d80_image_open(cbmimage_fileimage *image)
Definition d80_d82.c:329
int cbmimage_i_d81_chdir_partition_init(cbmimage_image_settings *settings)
Definition d81.c:267
void cbmimage_i_d81_image_open(cbmimage_fileimage *image)
Definition d81.c:317
cbmimage_dir_entry * cbmimage_i_dir_get_clone(cbmimage_dir_entry *dir_entry)
clone a directory entry
Definition dir.c:561
struct cbmimage_i_dir_entry_internal_s cbmimage_i_dir_entry_internal
internal data for directory entry
int cbmimage_i_dir_set_subpartition_global(cbmimage_image_settings *settings, cbmimage_blockaddress block_subdir_first, size_t block_count)
Definition dir.c:774
int cbmimage_i_dir_set_subpartition_relative(cbmimage_image_settings *settings, cbmimage_blockaddress block_subdir_first, cbmimage_blockaddress block_subdir_last)
Definition dir.c:831
int cbmimage_i_dir_get_partition_data(cbmimage_dir_entry *dir_entry, cbmimage_blockaddress *block_first, cbmimage_blockaddress *block_last, size_t *block_count)
Definition dir.c:706
struct cbmimage_dir_entry_s cbmimage_dir_entry
A directory entry.
int cbmimage_i_dnp_chdir_partition_init(cbmimage_image_settings *settings)
Definition dnp.c:190
struct cbmimage_fat_s cbmimage_fat
cbmimage FAT structure
int cbmimage_set_bam_fct(cbmimage_image_settings *settings)
Definition internal.h:177
int cbmimage_lba_to_blockaddress_fct(cbmimage_image_settings *settings, cbmimage_blockaddress *block)
Definition internal.h:127
uint16_t cbmimage_get_sectors_in_track_fct(cbmimage_image_settings *settings, uint16_t track)
Definition internal.h:76
int cbmimage_chdir_fct(cbmimage_image_settings *settings, cbmimage_dir_entry *dir_entry)
Definition internal.h:154
int cbmimage_ts_to_blockaddress_fct(cbmimage_image_settings *settings, cbmimage_blockaddress *block)
Definition internal.h:102
struct cbmimage_i_d40_d64_d71_image_settings_s cbmimage_i_d40_d64_d71_image_settings
Image specific settings for D40, D64 and D71 images .
void cbmimage_i_create_last_block(cbmimage_fileimage *image)
Definition fileimage.c:67
struct cbmimage_image_parameter_s cbmimage_image_parameter
Parameter of the image .
struct cbmimage_i_d1m_d2m_d4m_image_settings_s cbmimage_i_d1m_d2m_d4m_image_settings
Image specific settings for CMD D1M, D2M and D4M images .
struct cbmimage_fileimage_s cbmimage_fileimage
Type that describes a CBM disk image on which to operate.
struct cbmimage_i_d80_d82_image_settings_s cbmimage_i_d80_d82_image_settings
Image specific settings for D80 and D82 images .
struct cbmimage_image_settings_s cbmimage_image_settings
Image specific settings for all types of images .
Definition internal.h:47
enum cbmimage_imagetype_e cbmimage_imagetype
The type of the libcbmimage image.
struct cbmimage_i_dnp_image_settings_s cbmimage_i_dnp_image_settings
Image specific settings for CMD DNP images .
struct cbmimage_i_d81_image_settings_s cbmimage_i_d81_image_settings
Image specific settings for D81 images .
struct cbmimage_loop_s cbmimage_loop
cbmimage loop detector struct
int cbmimage_i_validate_1581_partition(cbmimage_fileimage *image, cbmimage_blockaddress block_start, int count)
Definition validate.c:181
BAM counter selector .
Definition internal.h:487
cbmimage_ts_to_blockaddress_fct * ts_to_blockaddress
Definition internal.h:496
cbmimage_lba_to_blockaddress_fct * lba_to_blockaddress
Definition internal.h:501
cbmimage_get_sectors_in_track_fct * get_sectors_in_track
Definition internal.h:491
cbmimage_set_bam_fct * set_bam
Definition internal.h:512
cbmimage_chdir_fct * chdir
Definition internal.h:505
BAM Selector .
Definition internal.h:197
uint8_t data_count
Definition internal.h:220
uint8_t reverse_order
reverse the order of the bits of the BAM
Definition internal.h:236
uint8_t starttrack
the number of the first track that is described in this BAM selector
Definition internal.h:203
uint8_t multiplier
Definition internal.h:214
uint8_t startoffset
the offset inside of the block where this BAM entry is located
Definition internal.h:209
uint8_t * buffer
pointer to the block data where this BAM entry is located
Definition internal.h:200
cbmimage_blockaddress block
the block where this BAM entry is located
Definition internal.h:206
Image specific settings for CMD D1M, D2M and D4M images .
Definition internal.h:597
cbmimage_i_bam_selector bam[2]
Definition internal.h:602
cbmimage_i_bam_counter_selector bam_counter[2]
Definition internal.h:607
Image specific settings for D40, D64 and D71 images .
Definition internal.h:528
cbmimage_i_bam_counter_selector bam_counter[2]
Definition internal.h:544
uint16_t track_lba_start[1+70]
the LBA of the start of each track
Definition internal.h:534
cbmimage_i_bam_selector bam[2]
Definition internal.h:539
const uint8_t * sectors_in_track
number of sectors in a track
Definition internal.h:531
Image specific settings for D80 and D82 images .
Definition internal.h:575
cbmimage_i_bam_counter_selector bam_counter[4]
the location of the BAM counter. At most two entries are needed (D71, D40 with 40 or 42 tracks)
Definition internal.h:587
uint16_t track_lba_start[1+154]
the LBA of the start of each track
Definition internal.h:581
cbmimage_i_bam_selector bam[4]
the location of the BAM. At most two entries are needed (D71, D40 with 40 or 42 tracks)
Definition internal.h:584
const uint8_t * sectors_in_track
number of sectors in a track
Definition internal.h:578
Image specific settings for D81 images .
Definition internal.h:554
cbmimage_i_bam_selector bam[2]
the location of the BAM. At most two entries are needed (D71, D40 with 40 or 42 tracks)
Definition internal.h:556
cbmimage_i_bam_counter_selector bam_counter[2]
the location of the BAM counter. At most two entries are needed (D71, D40 with 40 or 42 tracks)
Definition internal.h:559
internal data for directory entry
Definition internal.h:23
cbmimage_fileimage * image
the fileimage on which this dir_entry operates
Definition internal.h:29
int is_empty
if this directory entry is empty, this is != 0
Definition internal.h:38
cbmimage_dir_entry entry
the caller visible cbmimage_dir_entry
Definition internal.h:26
uint16_t dir_block_offset
the offset into the directory block where this entry is located
Definition internal.h:35
cbmimage_blockaccessor * dir_block_accessor
accessor to the directory block where this entry is located
Definition internal.h:32
cbmimage_loop * loop_detector
loop detector
Definition internal.h:41
Image specific settings for CMD DNP images .
Definition internal.h:617
cbmimage_i_bam_selector bam[32]
the location of the BAM. With DNP, we always have 32 entries
Definition internal.h:620
Parameter of the image .
Definition internal.h:787
uint8_t * buffer
the raw buffer of the disk image
Definition internal.h:796
uint8_t * errormap
if non-null, contains a pointer to the error buffer
Definition internal.h:799
char * filename
the filename as given by the user. May contain paths
Definition internal.h:793
size_t size
size of the image
Definition internal.h:790
Image specific settings for all types of images .
Definition internal.h:635
uint16_t bytes_in_block
the number of bytes in a block
Definition internal.h:676
uint8_t maxtracks
maximum number of tracks (e.g. 35 if track go from 1 to 35)
Definition internal.h:668
const unsigned char * imagetype_name
the name (user readable text) for the file type of the image
Definition internal.h:650
cbmimage_fat * fat
if there is a calculated FAT, this points to it. If there is none, it is NUL.
Definition internal.h:659
uint8_t dir_tracks[2]
Definition internal.h:684
int has_super_sidesector
Definition internal.h:693
cbmimage_blockaddress block_subdir_last
in case of an active sub-dir / sub-partition, this marks the last block of that partition
Definition internal.h:718
cbmimage_fileimage * image
pointer back to the cbmimage_fileimage that contains a pointer to here
Definition internal.h:644
uint8_t info_offset_diskname
the offset of the diskname that is stored in the info block
Definition internal.h:662
cbmimage_blockaddress dir
address of the (first) directory block
Definition internal.h:665
cbmimage_i_d80_d82_image_settings d80_d82
image specific settnigs for D80 and D82 files
Definition internal.h:765
cbmimage_imagetype imagetype
the file type of the image
Definition internal.h:647
unsigned int subdir_relative_addressing
flag if there is an active subdir with relative addresses
Definition internal.h:740
cbmimage_image_settings * next_settings
back-pointer for nested images (directorys, partitions)
Definition internal.h:641
size_t subdir_data_offset
data offset for subdir
Definition internal.h:712
cbmimage_i_d1m_d2m_d4m_image_settings d1m_d2m_d4m
image specific settnigs for D1M, D2M and D4M files
Definition internal.h:768
cbmimage_i_bam_selector * bam
the location of the BAM.
Definition internal.h:699
cbmimage_i_d81_image_settings d81
image specific settnigs for D81 files
Definition internal.h:762
uint16_t maxsectors
Definition internal.h:673
cbmimage_blockaddress geos_border
block of the GEOS border block.
Definition internal.h:754
cbmimage_blockaddress block_subdir_first
in case of an active sub-dir / sub-partition, this marks the start block of that partition
Definition internal.h:715
cbmimage_i_dnp_image_settings dnp
image specific settnigs for DNP (CMD native partition) files
Definition internal.h:771
unsigned int is_partition_table
Define if the current "partition" is the partition table.
Definition internal.h:748
cbmimage_blockaddress lastblock
address of the last block on this image
Definition internal.h:687
cbmimage_fileimage_functions fct
functions for image type specific operations
Definition internal.h:638
unsigned int is_geos
set if this is a GEOS disk
Definition internal.h:751
cbmimage_i_d40_d64_d71_image_settings d40_d64_d71
image specific settnigs for D64, D71 and D40 files
Definition internal.h:759
unsigned int subdir_global_addressing
flag if there is an active subdir with absolute addresses
Definition internal.h:729
cbmimage_i_bam_counter_selector * bam_counter
the location of the BAM counter.
Definition internal.h:702
cbmimage_blockaccessor * info
Definition internal.h:656
size_t bam_count
the number of bam and bam_counter entries
Definition internal.h:696