Skip to content

Commit 7c7a52e

Browse files
committed
Support user break; tidy up exit
1 parent 3f955bb commit 7c7a52e

1 file changed

Lines changed: 38 additions & 32 deletions

File tree

tzx2tap.c

Lines changed: 38 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
//
66

77
#include <errno.h>
8+
#include <input.h>
89
#include <stdbool.h>
910
#include <stdio.h>
1011
#include <stdlib.h>
@@ -25,11 +26,22 @@
2526

2627
static unsigned char old_cpu_speed;
2728
static bool browser = false;
29+
static unsigned char fhi,fho = 0;
30+
static char *mem = NULL;
2831

2932
static uint32_t Get2(char *mem) { return(mem[0]+(mem[1]*256UL)); }
3033
static uint32_t Get3(char *mem) { return(mem[0]+(mem[1]*256UL)+(mem[2]*256UL*256UL)); }
3134
static uint32_t Get4(char *mem) { return(mem[0]+(mem[1]*256UL)+(mem[2]*256UL*256UL)+(mem[3]*256UL*256UL*256UL)); }
3235

36+
static unsigned char err_break[] = "D BREAK - no repea" "\xf4";
37+
38+
static void user_break(void)
39+
{
40+
if (in_key_pressed(IN_KEY_SCANCODE_SPACE | 0x8000)) // CAPS+SPACE
41+
exit((int)err_break);
42+
}
43+
44+
3345
// exits with an error message *errstr
3446
static int Err(char *errstr, bool browser)
3547
{
@@ -110,11 +122,17 @@ static int convert_data(unsigned char fhi, unsigned char fho, uint32_t posn, uin
110122
return 0;
111123
}
112124

125+
static void cleanup(void)
126+
{
127+
if(fhi) esx_f_close(fhi);
128+
if(fho) esx_f_close(fho);
129+
if(mem) free(mem);
130+
ZXN_NEXTREGA(REG_TURBO_MODE, old_cpu_speed);
131+
}
132+
113133
int main(int argc, char *argv[])
114134
{
115-
unsigned char fhi,fho = 0;
116135
uint32_t flen;
117-
char *mem = NULL;
118136
char buf[256];
119137
uint32_t pos = 10, p, oldpos = 0;
120138
uint32_t len;
@@ -191,12 +209,13 @@ int main(int argc, char *argv[])
191209
old_cpu_speed = ZXN_READ_REG(REG_TURBO_MODE);
192210
ZXN_NEXTREG(REG_TURBO_MODE, RTM_28MHZ);
193211

212+
atexit(cleanup);
213+
194214
errno = 0;
195215
fhi = esx_f_open(src, ESX_MODE_READ);
196216

197217
if(errno) {
198-
err = errno;
199-
goto end;
218+
exit(errno);
200219
}
201220

202221
if(!list) {
@@ -207,40 +226,37 @@ int main(int argc, char *argv[])
207226
if(errno == ESX_EEXIST) {
208227
if(!browser) printf("\nFile already converted?");
209228
err = Err("File exists", browser); //ERRB_4_OUT_OF_MEMORY
210-
goto end;
229+
exit(ERRB_4_OUT_OF_MEMORY);
211230
} else {
212-
err = errno;
213-
goto end;
231+
exit(errno);
214232
}
215233
}
216234
}
217235

218236
flen=FileLength(fhi);
219237
if(flen==0) {
220-
err=errno;
221-
goto end;
238+
exit(errno);
222239
}
223240

224241
mem=(char *) malloc(MAX_HEADER_SIZE);
225242

226243
if(mem==NULL) {
227244
err = Err("Out of memory", browser); //ERRB_4_OUT_OF_MEMORY
228-
goto end;
245+
exit(ERRB_4_OUT_OF_MEMORY);
229246
}
230247

231248
esx_f_read(fhi,mem,10); mem[7]=0;
232249

233250
if(strcmp(mem,"ZXTape!")) {
234-
err = ESX_EWRTYPE;
235-
goto end;
251+
exit(ESX_EWRTYPE);
252+
236253
}
237254

238255
if(!browser) printf("\nZXTape file revision %d.%02d\n",mem[8],mem[9]);
239256

240257
if(!mem[8]) {
241258
if(!browser) printf("Error: TZX dev ver not supported\n");
242-
err = ESX_EWRTYPE;
243-
goto end;
259+
exit(ESX_EWRTYPE);
244260
}
245261

246262
if(mem[8]>MAJREV)
@@ -258,6 +274,7 @@ int main(int argc, char *argv[])
258274
}
259275

260276
while(pos<flen) {
277+
user_break();
261278
start = read_file(fhi, mem, pos);
262279
pos++;
263280
p = pos - start;
@@ -279,13 +296,11 @@ int main(int argc, char *argv[])
279296
if(!list) {
280297
err = convert_data(fhi, fho, pos+0x02, 2);
281298
if(err) {
282-
err=0;
283-
goto end;
299+
exit(0);
284300
}
285301
err = convert_data(fhi, fho, pos+0x04, len);
286302
if(err) {
287-
err=0;
288-
goto end;
303+
exit(0);
289304
}
290305
}
291306
if(verbose) {
@@ -304,13 +319,11 @@ int main(int argc, char *argv[])
304319
if(!list) {
305320
err = convert_data(fhi, fho, pos+0x0F, 2);
306321
if(err) {
307-
err=0;
308-
goto end;
322+
exit(0);
309323
}
310324
err = convert_data(fhi, fho, pos+0x12, len);
311325
if(err) {
312-
err=0;
313-
goto end;
326+
exit(0);
314327
}
315328
}
316329
if(verbose) converted = 2;
@@ -337,13 +350,11 @@ int main(int argc, char *argv[])
337350
if(!list) {
338351
err = convert_data(fhi, fho, pos+0x07, 2);
339352
if(err) {
340-
err=0;
341-
goto end;
353+
exit(0);
342354
}
343355
err = convert_data(fhi, fho, pos+0x0A, len);
344356
if(err) {
345-
err=0;
346-
goto end;
357+
exit(0);
347358
}
348359
}
349360
if(verbose) converted = 2;
@@ -501,10 +512,5 @@ int main(int argc, char *argv[])
501512
}
502513
}
503514

504-
end:
505-
if(fhi) esx_f_close(fhi);
506-
if(fho) esx_f_close(fho);
507-
if(mem) free(mem);
508-
ZXN_NEXTREGA(REG_TURBO_MODE, old_cpu_speed);
509-
return err;
515+
exit(0);
510516
}

0 commit comments

Comments
 (0)