X-Git-Url: http://git.subgeniuskitty.com/pforth/.git/blobdiff_plain/78d81c7341f66e9b35fe130147e3de34cbc0946e..1f99f95d6a7eecc05cae8fb357f9b7bf564c2725:/csrc/pf_inner.c diff --git a/csrc/pf_inner.c b/csrc/pf_inner.c index dffadf0..fc1d7e4 100644 --- a/csrc/pf_inner.c +++ b/csrc/pf_inner.c @@ -5,14 +5,17 @@ ** Author: Phil Burk ** Copyright 1994 3DO, Phil Burk, Larry Polansky, David Rosenboom ** -** The pForth software code is dedicated to the public domain, -** and any third party may reproduce, distribute and modify -** the pForth software code or any derivative works thereof -** without any compensation or license. The pForth software -** code is provided on an "as is" basis without any warranty -** of any kind, including, without limitation, the implied -** warranties of merchantability and fitness for a particular -** purpose and their equivalents under the laws of any jurisdiction. +** Permission to use, copy, modify, and/or distribute this +** software for any purpose with or without fee is hereby granted. +** +** THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL +** WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED +** WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL +** THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR +** CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING +** FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF +** CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +** OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ** **************************************************************** ** @@ -49,6 +52,7 @@ #define M_DUP PUSH_TOS; #define M_DROP { TOS = M_POP; } +#define ASCII_EOT (0x04) /*************************************************************** ** Macros for Floating Point stack access. @@ -197,8 +201,8 @@ static void TraceNames( ExecToken Token, cell_t Level ) static uint64_t UdToUint64( ucell_t Lo, ucell_t Hi ) { return (( 2 * sizeof(ucell_t) == sizeof(uint64_t) ) - ? (((uint64_t)Lo) | (((uint64_t)Hi) >> (sizeof(ucell_t) * 8))) - : Lo ); + ? (((uint64_t)Lo) | (((uint64_t)Hi) >> (sizeof(ucell_t) * 8))) + : Lo); } /* Return TRUE if the unsigned double cell integer LO/HI is not greater @@ -207,15 +211,15 @@ static uint64_t UdToUint64( ucell_t Lo, ucell_t Hi ) static int UdIsUint64( ucell_t Lo, ucell_t Hi ) { return (( 2 * sizeof(ucell_t) == sizeof(uint64_t) ) - ? TRUE - : Hi == 0 ); + ? TRUE + : Hi == 0); } -static const char *pfSelectFileModeCreate( int fam ); -static const char *pfSelectFileModeOpen( int fam ); +static const char *pfSelectFileModeCreate( cell_t fam ); +static const char *pfSelectFileModeOpen( cell_t fam ); /**************************************************************/ -static const char *pfSelectFileModeCreate( int fam ) +static const char *pfSelectFileModeCreate( cell_t fam ) { const char *famText = NULL; switch( fam ) @@ -240,7 +244,7 @@ static const char *pfSelectFileModeCreate( int fam ) } /**************************************************************/ -static const char *pfSelectFileModeOpen( int fam ) +static const char *pfSelectFileModeOpen( cell_t fam ) { const char *famText = NULL; switch( fam ) @@ -269,7 +273,7 @@ static const char *pfSelectFileModeOpen( int fam ) } /**************************************************************/ -int pfCatch( ExecToken XT ) +ThrowCode pfCatch( ExecToken XT ) { register cell_t TopOfStack; /* Cache for faster execution. */ register cell_t *DataStackPtr; @@ -1089,7 +1093,7 @@ DBUG(("XX ah,m,l = 0x%8x,%8x,%8x - qh,l = 0x%8x,%8x\n", ah,am,al, qh,ql )); TOS = -3; /* TODO err num? */ break; } - offset = offsetLow; + offset = (file_offset_t)offsetLow; TOS = sdSeekFile( FileID, offset, PF_SEEK_SET ); } endcase; @@ -1264,6 +1268,9 @@ DBUG(("XX ah,m,l = 0x%8x,%8x,%8x - qh,l = 0x%8x,%8x\n", ah,am,al, qh,ql )); case ID_KEY: PUSH_TOS; TOS = ioKey(); + if (TOS == ASCII_EOT) { + M_THROW(THROW_BYE); + } endcase; #ifndef PF_NO_SHELL