Atari: add new function '_is_cmdline_dos()' and some other small changes.

- use this function instead of directly looking at _dos_type in the included
  targetutil and test programs
- fixes/improvements to the Atari runtime library regarding the recently
  changed _dos_type values
- libsrc/atari/targetutil/w2cas.c: exit if no filename was entered
- add documentation for the new function
This commit is contained in:
Christian Groessler
2016-05-25 00:51:40 +02:00
parent a76153cb9f
commit da65866e24
8 changed files with 69 additions and 23 deletions

View File

@@ -27,10 +27,9 @@
__getdefdev:
lda __dos_type ; which DOS?
cmp #ATARIDOS
beq finish
cmp #MYDOS
beq finish
cmp #OSADOS+1
bcs finish ; only supported on OS/A+ and SpartaDOS
; (TODO: add XDOS support)
ldy #BUFOFF
lda #0

View File

@@ -26,11 +26,12 @@
pha
lda __dos_type
beq not_impl ; AtariDOS
cmp #OSADOS+1
bcc do_sparta ; OS/A and SpartaDOS
cmp #MYDOS
bne not_impl ; neither MyDOS, OS/A, nor SpartaDOS
pla
jmp __sysremove ; MyDOS and others (TODO: check XDOS)
jmp __sysremove ; MyDOS
not_impl:
pla

View File

@@ -45,7 +45,7 @@ int main(int argc, char **argv)
if (! iocb) {
fprintf(stderr, "couldn't find a free iocb\n");
if (_dos_type != 1)
if (! _is_cmdline_dos())
cgetc();
return 1;
}
@@ -57,10 +57,20 @@ int main(int argc, char **argv)
printf("\nfilename: ");
x = fgets(buf, 19, stdin);
printf("\n");
if (! x)
if (! x) {
printf("empty filename, exiting...\n");
if (! _is_cmdline_dos())
cgetc();
return 1;
}
if (*x && *(x + strlen(x) - 1) == '\n')
*(x + strlen(x) - 1) = 0;
if (! strlen(x)) { /* empty filename */
printf("empty filename, exiting...\n");
if (! _is_cmdline_dos())
cgetc();
return 1;
}
filename = x;
}
else {
@@ -74,7 +84,7 @@ int main(int argc, char **argv)
buffer = malloc(buflen);
if (! buffer) {
fprintf(stderr, "cannot alloc %ld bytes -- aborting...\n", (long)buflen);
if (_dos_type != 1)
if (! _is_cmdline_dos())
cgetc();
return 1;
}
@@ -87,7 +97,7 @@ int main(int argc, char **argv)
if (! file) {
free(buffer);
fprintf(stderr, "cannot open '%s': %s\n", filename, strerror(errno));
if (_dos_type != 1)
if (! _is_cmdline_dos())
cgetc();
return 1;
}
@@ -101,7 +111,7 @@ int main(int argc, char **argv)
file_err:
fclose(file);
free(buffer);
if (_dos_type != 1)
if (! _is_cmdline_dos())
cgetc();
return 1;
}
@@ -133,7 +143,7 @@ int main(int argc, char **argv)
if (regs.y != 1) {
fprintf(stderr, "CIO call to open cassette returned %d\n", regs.y);
free(buffer);
if (_dos_type != 1)
if (! _is_cmdline_dos())
cgetc();
return 1;
}
@@ -157,7 +167,7 @@ int main(int argc, char **argv)
regs.pc = 0xe456; /* CIOV */
_sys(&regs);
if (_dos_type != 1)
if (! _is_cmdline_dos())
cgetc();
return 1;
}
@@ -173,14 +183,14 @@ int main(int argc, char **argv)
if (regs.y != 1) {
fprintf(stderr, "CIO call to close cassette returned %d\n", regs.y);
if (_dos_type != 1)
if (! _is_cmdline_dos())
cgetc();
return 1;
}
/* all is fine */
printf("success\n");
if (_dos_type != 1)
if (! _is_cmdline_dos())
cgetc();
return 0;
}