aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorB. Watson <yalhcru@gmail.com>2021-04-13 13:47:52 -0400
committerB. Watson <yalhcru@gmail.com>2021-04-13 13:48:09 -0400
commitd7124327b9b6135cf6f4ec4ffbb64f25287577ac (patch)
treece0bc80dd5985900b1f98ae130d45867fa8cd1c1
parentc05f3a05ddf387e8ecea5b4f5985709749a0e6f7 (diff)
downloadtaipan-d7124327b9b6135cf6f4ec4ffbb64f25287577ac.tar.gz
Save 96 bytes (8270 free now), get rid of conio cruft
-rw-r--r--conio-local.h252
-rw-r--r--conio/Makefile5
-rw-r--r--taipan.c4
3 files changed, 257 insertions, 4 deletions
diff --git a/conio-local.h b/conio-local.h
new file mode 100644
index 0000000..af661e1
--- /dev/null
+++ b/conio-local.h
@@ -0,0 +1,252 @@
+/* 20210413 bkw: Modified version of cc65's conio.h, for use with
+ Atari 8-bit Taipan. Changes include:
+ - replaced gotox() and gotoy() with macros
+ - commented out prototypes for functions Taipan doesn't use.
+*/
+
+/*****************************************************************************/
+/* */
+/* conio.h */
+/* */
+/* Direct console I/O */
+/* */
+/* */
+/* */
+/* (C) 1998-2007 Ullrich von Bassewitz */
+/* Roemerstrasse 52 */
+/* D-70794 Filderstadt */
+/* EMail: uz@cc65.org */
+/* */
+/* */
+/* This software is provided 'as-is', without any expressed or implied */
+/* warranty. In no event will the authors be held liable for any damages */
+/* arising from the use of this software. */
+/* */
+/* Permission is granted to anyone to use this software for any purpose, */
+/* including commercial applications, and to alter it and redistribute it */
+/* freely, subject to the following restrictions: */
+/* */
+/* 1. The origin of this software must not be misrepresented; you must not */
+/* claim that you wrote the original software. If you use this software */
+/* in a product, an acknowledgment in the product documentation would be */
+/* appreciated but is not required. */
+/* 2. Altered source versions must be plainly marked as such, and must not */
+/* be misrepresented as being the original software. */
+/* 3. This notice may not be removed or altered from any source */
+/* distribution. */
+/* */
+/*****************************************************************************/
+
+
+
+/*
+** This is the direct console interface for cc65. I do not like the function
+** names very much, but the first version started as a rewrite of Borland's
+** conio, and, even if the interface has changed, the names did not.
+**
+** The interface does direct screen I/O, so it is fast enough for most
+** programs. I did not implement text windows, since many applications do
+** not need them and should not pay for the additional overhead. It should
+** be easy to add text windows on a higher level if needed,
+**
+** Most routines do not check the parameters. This may be unfortunate but is
+** also related to speed. The coordinates are always 0/0 based.
+*/
+
+
+
+#ifndef _CONIO_H
+#define _CONIO_H
+
+
+
+#include <stdarg.h>
+#include <target.h>
+
+
+
+/*****************************************************************************/
+/* Functions */
+/*****************************************************************************/
+
+
+
+void clrscr (void);
+/* Clear the whole screen and put the cursor into the top left corner */
+
+unsigned char kbhit (void);
+/* Return true if there's a key waiting, return false if not */
+
+// 20210413 bkw: these 3 replaced with macros (see below).
+// void __fastcall__ gotox (unsigned char x);
+/* Set the cursor to the specified X position, leave the Y position untouched */
+
+// void __fastcall__ gotoy (unsigned char y);
+/* Set the cursor to the specified Y position, leave the X position untouched */
+
+// void __fastcall__ gotoxy (unsigned char x, unsigned char y);
+/* Set the cursor to the specified position */
+
+// 20210413 bkw: commented out (not used by taipan)
+// unsigned char wherex (void);
+/* Return the X position of the cursor */
+
+// unsigned char wherey (void);
+/* Return the Y position of the cursor */
+
+void __fastcall__ cputc (char c);
+/* Output one character at the current cursor position */
+
+// 20210413 bkw: commented out (not used by taipan)
+// void __fastcall__ cputcxy (unsigned char x, unsigned char y, char c);
+/* Same as "gotoxy (x, y); cputc (c);" */
+
+void __fastcall__ cputs (const char* s);
+/* Output a NUL-terminated string at the current cursor position */
+
+// 20210413 bkw: commented out (not used by taipan)
+// void __fastcall__ cputsxy (unsigned char x, unsigned char y, const char* s);
+/* Same as "gotoxy (x, y); puts (s);" */
+
+// 20210413 bkw: commented out (not used by taipan)
+// int cprintf (const char* format, ...);
+/* Like printf(), but uses direct screen output */
+
+// 20210413 bkw: commented out (not used by taipan)
+// int __fastcall__ vcprintf (const char* format, va_list ap);
+/* Like vprintf(), but uses direct screen output */
+
+char cgetc (void);
+/* Return a character from the keyboard. If there is no character available,
+** the function waits until the user does press a key. If cursor is set to
+** 1 (see below), a blinking cursor is displayed while waiting.
+*/
+
+// 20210413 bkw: commented out (not used by taipan)
+// int cscanf (const char* format, ...);
+/* Like scanf(), but uses direct keyboard input */
+
+// 20210413 bkw: commented out (not used by taipan)
+// int __fastcall__ vcscanf (const char* format, va_list ap);
+/* Like vscanf(), but uses direct keyboard input */
+
+// 20210413 bkw: commented out (not used by taipan)
+// char cpeekc (void);
+/* Return the character from the current cursor position */
+
+// 20210413 bkw: commented out (not used by taipan)
+// unsigned char cpeekcolor (void);
+/* Return the color from the current cursor position */
+
+// 20210413 bkw: commented out (not used by taipan)
+// unsigned char cpeekrevers (void);
+/* Return the reverse attribute from the current cursor position.
+** If the character is reversed, then return 1; return 0 otherwise.
+*/
+
+// 20210413 bkw: commented out (not used by taipan)
+// void __fastcall__ cpeeks (char* s, unsigned int length);
+/* Return a string of the characters that start at the current cursor position.
+** Put the string into the buffer to which "s" points. The string will have
+** "length" characters, then will be '\0'-terminated.
+*/
+
+// 20210413 bkw: commented out (not used by taipan)
+// unsigned char __fastcall__ cursor (unsigned char onoff);
+/* If onoff is 1, a cursor is displayed when waiting for keyboard input. If
+** onoff is 0, the cursor is hidden when waiting for keyboard input. The
+** function returns the old cursor setting.
+*/
+
+// 20210413 bkw: commented out (not used by taipan)
+// unsigned char __fastcall__ revers (unsigned char onoff);
+/* Enable/disable reverse character display. This may not be supported by
+** the output device. Return the old setting.
+*/
+
+// 20210413 bkw: commented out (not used by taipan)
+// unsigned char __fastcall__ textcolor (unsigned char color);
+/* Set the color for text output. The old color setting is returned. */
+
+// 20210413 bkw: commented out (not used by taipan)
+// unsigned char __fastcall__ bgcolor (unsigned char color);
+/* Set the color for the background. The old color setting is returned. */
+
+// 20210413 bkw: commented out (not used by taipan)
+// unsigned char __fastcall__ bordercolor (unsigned char color);
+/* Set the color for the border. The old color setting is returned. */
+
+void __fastcall__ chline (unsigned char length);
+/* Output a horizontal line with the given length starting at the current
+** cursor position.
+*/
+
+// 20210413 bkw: commented out (not used by taipan)
+// void __fastcall__ chlinexy (unsigned char x, unsigned char y, unsigned char length);
+/* Same as "gotoxy (x, y); chline (length);" */
+
+// 20210413 bkw: commented out (not used by taipan)
+// void __fastcall__ cvline (unsigned char length);
+/* Output a vertical line with the given length at the current cursor
+** position.
+*/
+
+// 20210413 bkw: commented out (not used by taipan)
+// void __fastcall__ cvlinexy (unsigned char x, unsigned char y, unsigned char length);
+/* Same as "gotoxy (x, y); cvline (length);" */
+
+// 20210413 bkw: commented out (not used by taipan)
+// void __fastcall__ cclear (unsigned char length);
+/* Clear part of a line (write length spaces). */
+
+// 20210413 bkw: commented out (not used by taipan)
+// void __fastcall__ cclearxy (unsigned char x, unsigned char y, unsigned char length);
+/* Same as "gotoxy (x, y); cclear (length);" */
+
+// 20210413 bkw: commented out (not used by taipan)
+// void __fastcall__ screensize (unsigned char* x, unsigned char* y);
+/* Return the current screen size. */
+
+// 20210413 bkw: commented out (not used by taipan)
+// void __fastcall__ cputhex8 (unsigned char val);
+// void __fastcall__ cputhex16 (unsigned val);
+/* These shouldn't be here... */
+
+
+
+/*****************************************************************************/
+/* Macros */
+/*****************************************************************************/
+
+/* 20210413 bkw: taipan binary is actually smaller with these as macros. */
+#define gotoy(y) (*(unsigned char*) (84) = (y))
+#define gotox(x) (*(unsigned char*) (85) = (x))
+#define gotoxy(x,y) { gotox(x); gotoy(y); }
+
+/* On some platforms, functions are not available or are dummys. To suppress
+** the call to these functions completely, the platform header files may
+** define macros for these functions that start with an underline. If such a
+** macro exists, a new macro is defined here, that expands to the one with the
+** underline. The reason for this two stepped approach is that it is sometimes
+** necessary to take the address of the function, which is not possible when
+** using a macro. Since the function prototype is still present, #undefining
+** the macro will give access to the actual function.
+*/
+
+#ifdef _textcolor
+# define textcolor(x) _textcolor(x)
+#endif
+#ifdef _bgcolor
+# define bgcolor(x) _bgcolor(x)
+#endif
+#ifdef _bordercolor
+# define bordercolor(x) _bordercolor(x)
+#endif
+#ifdef _cpeekcolor
+# define cpeekcolor(x) _cpeekcolor(x)
+#endif
+
+
+
+/* End of conio.h */
+#endif
diff --git a/conio/Makefile b/conio/Makefile
index 9b0911e..b3cd9a3 100644
--- a/conio/Makefile
+++ b/conio/Makefile
@@ -1,6 +1,9 @@
all: conio.lib
-OBJS=cgetc.o chline.o clrscr.o cputc.o cputs.o cvline.o gotox.o gotoxy.o gotoy.o revers.o wherex.o wherey.o
+OBJS=cgetc.o chline.o cputc.o cputs.o cvline.o revers.o
+
+# unused, disabled:
+# clrscr.o gotox.o gotoxy.o gotoy.o wherex.o wherey.o
conio.lib: $(OBJS)
ar65 a conio.lib *.o
diff --git a/taipan.c b/taipan.c
index 2350615..274a041 100644
--- a/taipan.c
+++ b/taipan.c
@@ -1,10 +1,8 @@
/* Taipan! for Atari 8-bit. Ported from the Linux/curses version,
which was based on the original Applesoft BASIC version. */
-#include <conio.h> /* cputc() wherex() wherey() gotoxy()
- gotox() cputs() revers() clrscr()
- chline() chlinexy() cvlinexy() */
/* we're actually using a locally modified conio, see conio/README */
+#include "conio-local.h"
#include <stdlib.h> /* rand() srand() exit() */
#include <stdint.h> /* UINT32_MAX */