]> git.sur5r.net Git - cc65/commitdiff
Add Atari version of of doesclrscrafterexit().
authorChristian Groessler <chris@groessler.org>
Mon, 6 Jun 2016 22:42:51 +0000 (00:42 +0200)
committerChristian Groessler <chris@groessler.org>
Mon, 6 Jun 2016 22:42:51 +0000 (00:42 +0200)
- Update documentation.
- Update atari.h and apple2.h header files.
- Adapt Atari test/target programs.
- Fix a typo in "div" entry in funcref.sgml.

doc/funcref.sgml
include/apple2.h
include/atari.h
libsrc/atari/doesclrscr.s [new file with mode: 0644]
libsrc/atari/is_cmdline_dos.s
libsrc/atari/targetutil/w2cas.c
testcode/lib/atari/defdev.c
testcode/lib/atari/mem.c

index 9bd4a35957a8515ec6443373387c8cc2110af5af..5b529b8224398cb959f70b7a7265dfbcef2391bf 100644 (file)
@@ -949,27 +949,7 @@ id="malloc" name="malloc"> may still return <tt/NULL/.
 <tag/Declaration/<tt/unsigned char _is_cmdline_dos (void);/
 <tag/Description/The function returns 0 if the DOS doesn't support command line arguments.
 It returns 1 if it does.
-<tag/Notes/<itemize>
-<item>Many Atari DOSes which don't support command line arguments immediately clear the screen
-and display their menu after a program exits. Therefore it might be difficult to read
-the last messages printed by the program prior to its exit. This function can be used
-to decide if a delay or wait for a key press should be executed when then program
-exits.
-</itemize>
 <tag/Availability/cc65 (<tt/atari/ and <tt/atarixl/ platforms)
-<tag/Example/<verb>
-/* Hello World for Atari */
-#include <stdio.h>
-#include <unistd.h>
-#include <atari.h>
-int main(void)
-{
-    printf("Hello World\n");
-    if (! _is_cmdline_dos())
-        sleep(5);
-    return 0;
-}
-</verb>
 </descrip>
 </quote>
 
@@ -2572,8 +2552,8 @@ used in presence of a prototype.
 <descrip>
 <tag/Function/Divide two ints and return quotient and remainder.
 <tag/Header/<tt/<ref id="stdlib.h" name="stdlib.h">/
-<tag/Declaration/<tt/div_t __fastcall__ div (int numer, int denom);/
-<tag/Description/<tt/div/ divides <tt/numer/ by <tt/denom/ and returns the
+<tag/Declaration/<tt/div_t __fastcall__ div (int number, int denom);/
+<tag/Description/<tt/div/ divides <tt/number/ by <tt/denom/ and returns the
 quotient and remainder in a <tt/div_t/ structure.
 <tag/Notes/<itemize>
 <item>The function is only available as fastcall function, so it may only
@@ -2587,6 +2567,40 @@ ldiv
 </quote>
 
 
+<sect1>doesclrscrafterexit<label id="doesclrscrafterexit"><p>
+
+<quote>
+<descrip>
+<tag/Function/Determines whether the screen is going to be cleared after program exit.
+<tag/Header/<tt/<ref id="atari.h" name="atari.h">, <ref id="apple2.h" name="apple2.h">/
+<tag/Declaration/<tt/unsigned char doesclrscrafterexit (void);/
+<tag/Description/The function returns 0 if the screen won't be cleared immediately after
+program termination. It returns 1 if it will.
+<tag/Notes/<itemize>
+<item>Some systems, maybe depending on configuration, immediately clear the screen
+after a program exits. Therefore it might be difficult to read
+the last messages printed by the program prior to its exit. This function can be used
+to decide if a delay or wait for a key press should be executed when then program
+exits.
+</itemize>
+<tag/Availability/cc65 (<tt/atari/, <tt/atarixl/, <tt/apple2/, and <tt/apple2enh/ platforms)
+<tag/Example/<verb>
+/* Hello World */
+#include <stdio.h>
+#include <unistd.h>
+#include <atari.h>
+int main(void)
+{
+    printf("Hello World\n");
+    if (doesclrscrafterexit())
+        sleep(5);
+    return 0;
+}
+</verb>
+</descrip>
+</quote>
+
+
 <sect1>em_commit<label id="em_commit"><p>
 
 <quote>
index a1b094d4d3d8073941e72be2ca7d2bf22b02755d..97a2f124f9dffabe5a34898b516dc4b002740616 100644 (file)
@@ -177,6 +177,9 @@ unsigned char get_ostype (void);
 void rebootafterexit (void);
 /* Reboot machine after program termination has completed. */
 
+unsigned char doesclrscrafterexit (void);
+/* Will the screen automatically be cleared after program termination. */
+
 #define ser_apple2_slot(num)  ser_ioctl (0, (void*) (num))
 /* Select a slot number from 1 to 7 prior to ser_open.
 ** The default slot number is 2.
index fa99fca20d719e1676d725349b73ed20437c3635..76684c624acde8be2cafc69d1e0834991bd8d5dd 100644 (file)
@@ -161,12 +161,13 @@ extern void __fastcall__ _scroll (signed char numlines);
                                           /* numlines < 0  scrolls down */
 
 /* misc. functions */
-extern unsigned char get_ostype(void);       /* get ROM version */
-extern unsigned char get_tv(void);           /* get TV system */
-extern void _save_vecs(void);                /* save system vectors */
-extern void _rest_vecs(void);                /* restore system vectors */
-extern char *_getdefdev(void);               /* get default floppy device */
-extern unsigned char _is_cmdline_dos(void);  /* does DOS support command lines */
+extern unsigned char get_ostype(void);            /* get ROM version */
+extern unsigned char get_tv(void);                /* get TV system */
+extern void _save_vecs(void);                     /* save system vectors */
+extern void _rest_vecs(void);                     /* restore system vectors */
+extern char *_getdefdev(void);                    /* get default floppy device */
+extern unsigned char _is_cmdline_dos(void);       /* does DOS support command lines */
+extern unsigned char doesclrscrafterexit (void);  /* will DOS clear the screen after program termination */
 
 /* global variables */
 extern unsigned char _dos_type;         /* the DOS flavour */
diff --git a/libsrc/atari/doesclrscr.s b/libsrc/atari/doesclrscr.s
new file mode 100644 (file)
index 0000000..c085fae
--- /dev/null
@@ -0,0 +1,19 @@
+;
+; Christian Groessler, June-2016
+;
+; unsigned char doesclrscr(void);
+;
+; returns 0/1 if after program termination the screen isn't/is cleared
+;
+
+        .export  _doesclrscrafterexit
+        .import  __dos_type
+        .include "atari.inc"
+
+_doesclrscrafterexit:
+        ldx     #0
+        lda     __dos_type
+        cmp     #MAX_DOS_WITH_CMDLINE + 1
+        txa
+        rol     a
+        rts
index 71b35fbadd91f930f399e7044ef427a56129dd2a..b85cb3ca7db0e5081ac98372d957f3676b5dc456 100644 (file)
@@ -7,14 +7,9 @@
 ;
 
         .export  __is_cmdline_dos
-        .import  __dos_type
-        .include "atari.inc"
+        .import  _doesclrscrafterexit
 
 __is_cmdline_dos:
-        ldx     #0
-        lda     __dos_type
-        cmp     #MAX_DOS_WITH_CMDLINE + 1
-        txa
-        rol     a
-        eor     #$01
+        jsr     _doesclrscrafterexit    ; currently (unless a DOS behaving differently is popping up)
+        eor     #$01                    ; we can get by with the inverse of _doesclrscrafterexit
         rts
index c95ff7ba5ca87b6ef72d99af1b5107e8606b6121..c1dd0cfccbf3120519302fb3a217955449bda164 100644 (file)
@@ -35,7 +35,7 @@ static struct __iocb *findfreeiocb(void)
 static void exitfn(void)
 {
     /* if DOS will automatically clear the screen, after the program exits, wait for a keypress... */
-    if (! _is_cmdline_dos())
+    if (doesclrscrafterexit())
         cgetc();
 }
 
index 06ddb6365564cab02c07b42679a84dbb5e791fbf..851d87106ef63ae270baf6b73814c17c13f01028 100644 (file)
@@ -13,6 +13,6 @@ extern char _defdev[];
 int main(void)
 {
         printf("default device: %s\n", _defdev);
-        if (! _is_cmdline_dos()) cgetc();
+        if (doesclrscrafterexit()) cgetc();
         return 0;
 }
index a8d50cf30923e34db58ddd8003f7c59506e835da..04978c77e3d04bc04a611ae822e601d358a1c04c 100644 (file)
@@ -41,6 +41,6 @@ int main(void)
   printf("  sp:              $%04X  (stack ptr)\n", getsp());
 
   if (allocmem) free(allocmem);
-  if (! _is_cmdline_dos()) cgetc();
+  if (doesclrscrafterexit()) cgetc();
   return(0);
 }