From d7124327b9b6135cf6f4ec4ffbb64f25287577ac Mon Sep 17 00:00:00 2001 From: "B. Watson" Date: Tue, 13 Apr 2021 13:47:52 -0400 Subject: Save 96 bytes (8270 free now), get rid of conio cruft --- conio-local.h | 252 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ conio/Makefile | 5 +- taipan.c | 4 +- 3 files changed, 257 insertions(+), 4 deletions(-) create mode 100644 conio-local.h 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 +#include + + + +/*****************************************************************************/ +/* 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 /* 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 /* rand() srand() exit() */ #include /* UINT32_MAX */ -- cgit v1.2.3