/* -*-c-*-
*
- * $Id: bascat.c,v 1.3 1999/10/28 10:18:17 mdw Exp $
+ * $Id$
*
* Display BBC BASIC programs more or less anywhere
*
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-/*----- Revision history --------------------------------------------------*
- *
- * $Log: bascat.c,v $
- * Revision 1.3 1999/10/28 10:18:17 mdw
- * Minor name changes for new coding standards.
- *
- * Revision 1.2 1998/06/26 11:29:28 mdw
- * Added support for line-numbers.
- *
- * Revision 1.1 1998/03/16 15:21:37 mdw
- * Files placed under CVS control.
- *
- * Revision 1.1 1997/07/23 01:19:33 mdw
- * Initial revision
- *
- */
-
/*----- Header files ------------------------------------------------------*/
/* --- ANSI library headers --- */
/*----- Version information -----------------------------------------------*/
-#ifndef NDEBUG
+#ifdef DEBUG
# define D(x) x
#else
# define D(x)
* carried out on an A440 with RISC OS 3.1
*/
-static const char *bcTok__base[] = {
+static const char *tok_base[] = {
"OTHERWISE",
"AND", "DIV", "EOR", "MOD", "OR", "ERROR", "LINE", "OFF",
"STEP", "SPC", "TAB(", "ELSE", "THEN", "*", "OPENIN", "PTR",
"RETURN", "RUN", "STOP", "COLOUR", "TRACE", "UNTIL", "WIDTH", "OSCLI"
};
-static const char *bcTok__c6[] = {
+static const char *tok_c6[] = {
"SUM", "BEAT"
};
-static const char *bcTok__c7[] = {
+static const char *tok_c7[] = {
"APPEND", "AUTO",
"CRUNCH", "DELETE", "EDIT", "HELP", "LIST", "LOAD", "LVAR", "NEW",
"OLD", "RENUMBER", "SAVE", "TEXTLOAD", "TEXTSAVE", "TWIN", "TWINO",
"INSTALL"
};
-static const char *bcTok__c8[] = {
+static const char *tok_c8[] = {
"CASE", "CIRCLE",
"FILL", "ORIGIN", "POINT", "RECTANGLE", "SWAP", "WHILE", "WAIT", "MOUSE",
"QUIT", "SYS", "INSTALL", "LIBRARY", "TINT", "ELLIPSE", "BEATS", "TEMPO",
* Use: Decodes multibyte tokens.
*/
-static int mbtok(int byte, const char *t[], int n, FILE * fp)
+static int mbtok(int byte, const char *t[], int n, FILE *fp)
{
byte -= 0x8E;
if (byte >= n)
* Use: Decodes a byte, changing states as necessary.
*/
-static int decode(int byte, FILE * fp)
+static int decode(int byte, FILE *fp)
{
switch (state) {
/* Fall through here */
default:
keyword:
- keyword(bcTok__base[byte - 0x7F], fp);
+ keyword(tok_base[byte - 0x7F], fp);
break;
}
} else {
/* --- Double-byte token states --- */
case s_c6:
- return (mbtok(byte, bcTok__c6, ITEMS(bcTok__c6), fp));
+ return (mbtok(byte, tok_c6, ITEMS(tok_c6), fp));
break;
case s_c7:
- return (mbtok(byte, bcTok__c7, ITEMS(bcTok__c7), fp));
+ return (mbtok(byte, tok_c7, ITEMS(tok_c7), fp));
break;
case s_c8:
- return (mbtok(byte, bcTok__c8, ITEMS(bcTok__c8), fp));
+ return (mbtok(byte, tok_c8, ITEMS(tok_c8), fp));
break;
/* --- Encoded line number states --- */
case s_linex:
- lineno = ((((byte << 2) | (byte << 12)) & 0xc0c0u) ^ 0x4040u);
+ byte ^= 0x54;
+ lineno = (((byte & 0x30) << 2) |
+ ((byte & 0x0c) << 12) |
+ ((byte & 0x03) << 16));
state++;
break;
case s_liney:
- lineno |= byte & 0x3fu;
+ lineno |= byte & 0x3f;
state++;
break;
case s_linez:
- lineno |= (byte << 8) & 0x3fu;
+ lineno |= (byte & 0x3f) << 8;
fprintf(fp, "%u", lineno);
state = s_normal;
break;
goto eof;
len -= 4;
- state = s_normal;
+ state = s_keyword;
while (len) {
byte = getc(in);
D( fprintf(stderr, "state == %i, byte == %i\n",
die("Found data after end of program");
}
-/* --- @sigPipe@ --- *
+/* --- @sig_pipe@ --- *
*
* Arguments: @int s@ = signal number
*
* Use: Handles SIGPIPE signals, and gracefully kills the program.
*/
-static void sigPipe(int s)
+static void sig_pipe(int s)
{
(void) s;
exit(0); /* Gracefully, oh yes */
out = stdout;
else {
flags |= f_tty;
- signal(SIGPIPE, sigPipe);
+ signal(SIGPIPE, sig_pipe);
}
} else
out = stdout;