File Coverage

Image.xs
Criterion Covered Total %
statement 55 57 96.4
branch 6 10 60.0
condition n/a
subroutine n/a
pod n/a
total 61 67 91.0


line stmt bran cond sub pod time code
1             #include "EXTERN.h"
2             #include "perl.h"
3             #include "XSUB.h"
4              
5             #include "diskimage.h"
6              
7             #define DIRECTORY_FILENAME_LENGTH 16
8             #define DISKDRIVE_STATUS_LENGTH 80
9              
10             MODULE = D64::Disk::Image PACKAGE = D64::Disk::Image
11             PROTOTYPES: ENABLE
12              
13             # my $diskImage = di_load_image($name);
14              
15             DiskImage*
16             di_load_image(name)
17             char *name
18             CODE:
19 1           RETVAL = di_load_image(name);
20             OUTPUT:
21             RETVAL
22              
23             # my $diskImage = di_create_image($name, $size);
24              
25             DiskImage*
26             di_create_image(name, size);
27             char *name
28             int size
29             CODE:
30 28           RETVAL = di_create_image(name, size);
31             OUTPUT:
32             RETVAL
33              
34             # di_free_image($diskImage);
35              
36             void
37             di_free_image(di)
38             DiskImage *di
39             CODE:
40 29           di_free_image(di);
41              
42             # di_sync($diskImage);
43              
44             void
45             di_sync(di)
46             DiskImage *di
47             CODE:
48 1           di_sync(di);
49              
50             # my ($numstatus, $status) = di_status($diskImage);
51              
52             void
53             di_status(di)
54             DiskImage *di
55             PREINIT:
56             char *status;
57             int numstatus, statuslen;
58             PPCODE:
59 3           New(1, status, DISKDRIVE_STATUS_LENGTH + 1, char);
60 3 50         if (status) {
61 3           memset(status, '\0', DISKDRIVE_STATUS_LENGTH + 1);
62 3           PUSHs(sv_2mortal(newSViv(numstatus = di_status(di, status))));
63 3           statuslen = strlen(status);
64 3           PUSHs(sv_2mortal(newSVpv(status, statuslen)));
65 3           PUSHs(sv_2mortal(newSVnv(numstatus)));
66             }
67 3           Safefree(status);
68              
69             # my $numstatus = di_format($diskImage, $rawname, $rawid);
70              
71             int
72             di_format(di, rawname, rawid)
73             DiskImage *di
74             unsigned char *rawname
75             unsigned char *rawid
76             CODE:
77 23           RETVAL = di_format(di, rawname, rawid);
78             OUTPUT:
79             RETVAL
80              
81             # my $status = di_delete($diskImage, $rawPattern, $fileType);
82              
83             int
84             di_delete(di, rawpattern, type)
85             DiskImage *di
86             unsigned char *rawpattern
87             FileType type
88             CODE:
89 1           RETVAL = di_delete(di, rawpattern, type);
90             OUTPUT:
91             RETVAL
92              
93             # my $status = di_rename($diskImage, $oldRawName, $newRawName, $fileType);
94              
95             int
96             di_rename(di, oldrawname, newrawname, type)
97             DiskImage *di
98             unsigned char *oldrawname
99             unsigned char *newrawname
100             FileType type
101             CODE:
102 2           RETVAL = di_rename(di, oldrawname, newrawname, type);
103             OUTPUT:
104             RETVAL
105              
106             # my $sectors = di_sectors_per_track($imageType, $track);
107              
108             int
109             di_sectors_per_track(type, track)
110             ImageType type
111             int track
112             CODE:
113 6           RETVAL = di_sectors_per_track(type, track);
114             OUTPUT:
115             RETVAL
116              
117             # my $tracks = di_tracks($imageType);
118              
119             int
120             di_tracks(type)
121             ImageType type
122             CODE:
123 3           RETVAL = di_tracks(type);
124             OUTPUT:
125             RETVAL
126              
127             # my ($title, $id) = di_title($diskImage);
128              
129             void
130             di_title(di)
131             DiskImage *di
132             PREINIT:
133             unsigned char *title;
134             unsigned char *id;
135             PPCODE:
136 2           title = di_title(di);
137 2           id = title + 18;
138 2           PUSHs(sv_2mortal(newSVpv((const char *)title, 16)));
139 2           PUSHs(sv_2mortal(newSVpv((const char *)id, 5)));
140              
141             # my $track_blocks_free = di_track_blocks_free($diskImage, $track);
142              
143             int
144             di_track_blocks_free(di, track)
145             DiskImage *di
146             int track
147             CODE:
148 3           RETVAL = di_track_blocks_free(di, track);
149             OUTPUT:
150             RETVAL
151              
152             # my $is_ts_free = di_is_ts_free($diskImage, $track, $sector);
153              
154             int
155             di_is_ts_free(di, track, sector)
156             DiskImage *di
157             int track
158             int sector
159             CODE:
160             TrackSector ts;
161 3           ts.track = (unsigned char)track;
162 3           ts.sector = (unsigned char)sector;
163 3           RETVAL = di_is_ts_free(di, ts);
164             OUTPUT:
165             RETVAL
166              
167             # di_alloc_ts($diskImage, $track, $sector);
168              
169             void
170             di_alloc_ts(di, track, sector)
171             DiskImage *di
172             int track
173             int sector
174             CODE:
175             TrackSector ts;
176 4           ts.track = (unsigned char)track;
177 4           ts.sector = (unsigned char)sector;
178 4           di_alloc_ts(di, ts);
179              
180             # di_free_ts($diskImage, $track, $sector);
181              
182             void
183             di_free_ts(di, track, sector)
184             DiskImage *di
185             int track
186             int sector
187             CODE:
188             TrackSector ts;
189 2           ts.track = (unsigned char)track;
190 2           ts.sector = (unsigned char)sector;
191 2           di_free_ts(di, ts);
192              
193             # my $rawname = di_rawname_from_name($name);
194              
195             void
196             di_rawname_from_name(name)
197             char *name
198             PREINIT:
199             int rawnamelen;
200             unsigned char *rawname;
201             PPCODE:
202 57           New(1, rawname, DIRECTORY_FILENAME_LENGTH + 1, unsigned char);
203 57 50         if (rawname) {
204 57           PUSHs(sv_2mortal(newSViv(rawnamelen = di_rawname_from_name(rawname, name))));
205 57           rawname[DIRECTORY_FILENAME_LENGTH] = '\0';
206 57           PUSHs(sv_2mortal(newSVpv((const char *)rawname, 0)));
207             }
208 57           Safefree(rawname);
209              
210             # my $name = di_name_from_rawname($rawname);
211              
212             void
213             di_name_from_rawname(rawname)
214             unsigned char *rawname
215             PREINIT:
216             int namelen;
217             char *name;
218             PPCODE:
219 25           New(1, name, DIRECTORY_FILENAME_LENGTH + 1, char);
220 25 50         if (name) {
221 25           PUSHs(sv_2mortal(newSViv(namelen = di_name_from_rawname(name, rawname))));
222 25           name[DIRECTORY_FILENAME_LENGTH] = '\0';
223 25           PUSHs(sv_2mortal(newSVpv(name, 0)));
224             }
225 25           Safefree(name);
226              
227             # my $blocksfree = _di_blocksfree($diskImage);
228              
229             int
230             _di_blocksfree(di)
231             DiskImage *di
232             CODE:
233 0           RETVAL = di->blocksfree;
234             OUTPUT:
235             RETVAL
236              
237             # my $imageType = _di_type($diskImage);
238              
239             ImageType
240             _di_type(di)
241             DiskImage *di
242             CODE:
243 0           RETVAL = di->type;
244             OUTPUT:
245             RETVAL
246              
247             MODULE = D64::Disk::Image PACKAGE = D64::Disk::Image::File
248             PROTOTYPES: ENABLE
249              
250             # my $imageFile = di_open($diskImage, $rawname, $fileType, $mode);
251              
252             ImageFile*
253             di_open(di, rawname, type, mode)
254             DiskImage *di
255             unsigned char *rawname
256             FileType type
257             char *mode
258             CODE:
259 20           RETVAL = di_open(di, rawname, type, mode);
260 20 100         if (RETVAL == NULL)
261 3           XSRETURN_UNDEF;
262             OUTPUT:
263             RETVAL
264              
265             # di_close($imageFile);
266              
267             void
268             di_close(imgfile)
269             ImageFile *imgfile
270             CODE:
271 16           di_close(imgfile);
272              
273             # my ($counter, $buffer) = di_read($imageFile, $maxlength);
274              
275             void
276             di_read(imgfile, len);
277             ImageFile *imgfile
278             int len
279             PREINIT:
280             unsigned char *buffer;
281             int counter;
282             PPCODE:
283 3           New(1, buffer, len + 1, unsigned char);
284 3 50         if (buffer) {
285 3           memset(buffer, '\0', len + 1);
286 3           PUSHs(sv_2mortal(newSViv(counter = di_read(imgfile, buffer, len))));
287 3           PUSHs(sv_2mortal(newSVpv((const char *)buffer, counter)));
288 3           PUSHs(sv_2mortal(newSVnv(counter)));
289             }
290 3           Safefree(buffer);
291              
292             # my $counter = di_write($imageFile, $buffer, $length);
293              
294             int
295             di_write(imgfile, buffer, len);
296             ImageFile *imgfile
297             unsigned char *buffer
298             int len
299             CODE:
300 12           RETVAL = di_write(imgfile, buffer, len);
301             OUTPUT:
302             RETVAL