From 3a440947578da32fa8a25afb06a84e47385a6481 Mon Sep 17 00:00:00 2001 From: Kawamata Akira Date: Tue, 7 Nov 2000 17:00:00 +0900 Subject: [PATCH] - Operator precedence order Unary operator> * /> + -> Comparison operator> and, or, xor - Change the value when the comparison operator is established from 1 to -1 - Change prompt to OK - Fixed a bug that negative numbers were output as positive numbers by print / debug - Changed so that loop can escape in next even if for closing price does not match exactly Version 0.03 - from wonbe003.lzh --- janken.wb | 95 ++++++++++++++++++++++++++++++ keywords.h | 59 +++++++++++++++++++ makefile | 23 ++++++++ wonbe.c | 169 +++++++++++++++++++++++++++++++++++++++++++---------- wonbe.exe | Bin 53248 -> 53248 bytes wonbe.fx | Bin 13620 -> 14052 bytes wonbe.txt | 17 ++++-- 7 files changed, 328 insertions(+), 35 deletions(-) create mode 100644 janken.wb create mode 100644 keywords.h create mode 100644 makefile diff --git a/janken.wb b/janken.wb new file mode 100644 index 0000000..8fa52a9 --- /dev/null +++ b/janken.wb @@ -0,0 +1,95 @@ +100 rem じゃんけんゲーム for ワンべぇ +110 rem Nov.6,2000 by autumn +200 T=40 'waitvbする長さ +900 randomize tick +1000 cls +1010 print " ■  ■              ■" +1020 print " ■ ■ ■             ■" +1030 print " ■  ■              ■" +1040 print " ■  ■■   ■ ■■     ■" +1050 print " ■       ■ ■      ■" +1060 print " ■       ■ ■■■    ■" +1070 print " ■       ■■   ■  ■ ■  ■" +1080 print " ■      ■■    ■  ■■■   ■" +1090 print " ■      ■■    ■  ■ ■   ■" +1100 print " ■    ■   ■ ■■  ■  ■   ■" +1110 print " ■    ■   ■■■   ■   ■ ■■" +1120 print " ■   ■■   ■     ■   ■ ■" +1130 print " ■■■■■    ■    ■    ■■■" +1140 print "   ■■      ■        ■" +1200 waitvb T +2000 cls +2010 print "       ■        ■" +2020 print "  ■    ■        ■" +2030 print "  ■    ■       ■" +2040 print " ■■    ■       ■" +2050 print " ■  ■■■■■■■    ■" +2060 print " ■  ■■■■      ■" +2070 print " ■     ■      ■■■   ■" +2080 print " ■     ■     ■■■■    ■" +2090 print " ■     ■     ■  ■    ■" +2100 print " ■     ■     ■  ■■  ■" +2110 print " ■     ■    ■    ■  ■" +2120 print "  ■    ■    ■    ■ ■■" +2130 print " ■    ■■    ■    ■■■" +2140 print "      ■           ■" +2200 waitvb T +3000 a=rnd(3) +3010 goto 4000+(a*1000) +4000 cls +4010 print "              ■" +4020 print "      ■ ■     ■■■■■■" +4030 print "     ■■  ■      ■■■■" +4040 print "    ■■ ■  ■" +4050 print "   ■■   ■" +4060 print "   ■     ■     ■■■■■" +4070 print "  ■          ■■■■■■■" +4080 print " ■■          ■     ■■" +4090 print " ■■                ■■" +4100 print "  ■■               ■■" +4110 print "   ■■              ■■" +4120 print "    ■              ■" +4130 print "    ■■            ■■" +4140 print "     ■■         ■■■" +4150 print "      ■■       ■■■" +4160 print "               ■" +4200 goto 7000 +5000 cls +5010 print "                 ■" +5020 print "  ■              ■" +5030 print " ■               ■  ■" +5040 print " ■ ■■          ■■■■■■" +5050 print "■■■■■     ■    ■■ ■" +5060 print " ■        ■       ■ ■■" +5070 print " ■        ■    ■■■■■■" +5080 print " ■        ■■■  ■■  ■" +5090 print " ■■■■■    ■        ■" +5100 print " ■■  ■    ■     ■■■■■" +5110 print "■■    ■   ■    ■■   ■" +5120 print "■     ■ ■■■■   ■" +5130 print "     ■  ■ ■■■  ■" +5140 print "   ■■■  ■ ■  ■ ■■" +5150 print "  ■■■   ■■      ■■■■" +5160 print "                 ■■■" +5200 goto 7000 +6000 cls +6010 print "         ■■■    ■" +6020 print " ■     ■■■ ■    ■" +6030 print "  ■    ■ ■ ■    ■" +6040 print "  ■     ■ ■  ■■■■■■■" +6050 print "  ■ ■■■■■■■  ■■■    ■" +6060 print " ■■ ■■■■■      ■  ■" +6070 print " ■      ■      ■■■■■" +6080 print " ■      ■      ■■■■■■" +6090 print " ■      ■     ■■  ■  ■" +6100 print " ■      ■    ■■ ■ ■  ■" +6110 print " ■   ■■■■    ■  ■■   ■" +6120 print " ■  ■■  ■■   ■  ■■   ■" +6130 print " ■  ■   ■■■  ■  ■    ■" +6140 print " ■■  ■■■  ■  ■ ■■■  ■■" +6150 print "     ■■       ■■  ■■■" +6160 print "                  ■" +7000 locate 0,16:print " **PUSH START TO EXIT**"; +7010 locate 0,17:print "**ANOTHER BUTTON TO AGAIN**"; +7100 d=wait +7200 goto 1000 diff --git a/keywords.h b/keywords.h new file mode 100644 index 0000000..c07a66b --- /dev/null +++ b/keywords.h @@ -0,0 +1,59 @@ +/* WONBE predefined keyword IDs */ +/* First Created: Nov.3,2000 by Nashiko */ +/* Copyright 2000 (c) by Pie Dey Co.,Ltd. */ + +#define KEYWORD_IF 0x80 +#define KEYWORD_PRINT 0x81 +#define KEYWORD_LOCATE 0x82 +#define KEYWORD_CLS 0x83 +#define KEYWORD_GOTO 0x84 +#define KEYWORD_GOSUB 0x85 +#define KEYWORD_RETURN 0x86 +#define KEYWORD_FOR 0x87 +#define KEYWORD_NEXT 0x88 +#define KEYWORD_END 0x89 +#define KEYWORD_BREAK 0x8a +#define KEYWORD_REM 0x8b +#define KEYWORD_NEW 0x8c +#define KEYWORD_LIST 0x8d +#define KEYWORD_RUN 0x8e +#define KEYWORD_CONT 0x8f +#define KEYWORD_SAVE 0x90 +#define KEYWORD_LOAD 0x91 +#define KEYWORD_MERGE 0x92 +#define KEYWORD_RANDOMIZE 0x93 +#define KEYWORD_EXIT 0x94 +#define KEYWORD_DEBUG 0x95 +#define KEYWORD_WAITVB 0x96 +#define KEYWORD_FILES 0x97 +#define KEYWORD_AND 0xa0 +#define KEYWORD_OR 0xa1 +#define KEYWORD_XOR 0xa2 +#define KEYWORD_NOT 0xb0 +#define KEYWORD_SCAN 0xc0 +#define KEYWORD_WAIT 0xc1 +#define KEYWORD_RND 0xc2 +#define KEYWORD_ABS 0xc3 +#define KEYWORD_TICK 0xc4 +#define KEYWORD_SCAN_A 0xd0 +#define KEYWORD_SCAN_B 0xd1 +#define KEYWORD_SCAN_X1 0xd2 +#define KEYWORD_SCAN_X2 0xd3 +#define KEYWORD_SCAN_X3 0xd4 +#define KEYWORD_SCAN_X4 0xd5 +#define KEYWORD_SCAN_Y1 0xd6 +#define KEYWORD_SCAN_Y2 0xd7 +#define KEYWORD_SCAN_Y3 0xd8 +#define KEYWORD_SCAN_Y4 0xd9 +#define KEYWORD_THEN 0xf0 +#define KEYWORD_CHR 0xf1 +#define KEYWORD_TO 0xf2 +#define KEYWORD_STEP 0xf3 + +#define KEYWORDS_STATEMENT_FROM 0x80 +#define KEYWORDS_STATEMENT_TO 0x97 +#define KEYWORDS_2OP_FROM 0xa0 +#define KEYWORDS_2OP_TO 0xa2 + + +/* end of keywords.h */ diff --git a/makefile b/makefile new file mode 100644 index 0000000..d126588 --- /dev/null +++ b/makefile @@ -0,0 +1,23 @@ + +# start up routine +C0WW_JAPANESE2=..\common\c0wwjpn2.obj + +C0WW=$(C0WW_JAPANESE2) + +LIBWW=@..\common\libww.rsp + +CFLAGS=-DWW -ms -zPCGROUP -zSDGROUP -zGDGROUP + +all: wonbe.fx + +wonbe.fx: wonbe.bin + mkfent wonbe.cf + +wonbe.bin: wonbe.obj + tlink /m /c $(C0WW) wonbe, wonbe, wonbe, $(LIBWW) + exe2fbin wonbe.exe wonbe.bin + +wonbe.obj: wonbe.c + tcc -c $(CFLAGS) $(DEFINES) -IC:\vshare\ww\dev\WWitch\include wonbe.c + + diff --git a/wonbe.c b/wonbe.c index 4c21afb..916428b 100644 --- a/wonbe.c +++ b/wonbe.c @@ -18,7 +18,7 @@ #include "win32text.h" #endif -char myVersion[] = "0.02"; +char myVersion[] = "0.03"; #ifdef WW #define MEMMOVE mymemmove @@ -795,7 +795,7 @@ SHORT calcValue() return -1; } -SHORT expr() +SHORT expr4th() { SHORT acc; acc = calcValue(); @@ -808,12 +808,6 @@ SHORT expr() if( ch != ' ' && ch != '\t' ) break; } switch( ch ) { - case '+': - acc = acc + calcValue(); - break; - case '-': - acc = acc - calcValue(); - break; case '*': acc = acc * calcValue(); break; @@ -828,15 +822,54 @@ SHORT expr() } } break; - case KEYWORD_AND: - acc = acc & calcValue(); + default: + executionPointer--; /* unget it */ + return acc; + } + if( bForceToReturnSuper ) return -1; + } +} + +SHORT expr3nd() +{ + SHORT acc; + acc = expr4th(); + if( bForceToReturnSuper ) return -1; + + while( TRUE ) { + BYTE ch; + while( TRUE ) { + ch = *executionPointer++; + if( ch != ' ' && ch != '\t' ) break; + } + switch( ch ) { + case '+': + acc = acc + expr4th(); break; - case KEYWORD_OR: - acc = acc | calcValue(); - break; - case KEYWORD_XOR: - acc = acc ^ calcValue(); + case '-': + acc = acc - expr4th(); break; + default: + executionPointer--; /* unget it */ + return acc; + } + if( bForceToReturnSuper ) return -1; + } +} + +SHORT expr2nd() +{ + SHORT acc; + acc = expr3nd(); + if( bForceToReturnSuper ) return -1; + + while( TRUE ) { + BYTE ch; + while( TRUE ) { + ch = *executionPointer++; + if( ch != ' ' && ch != '\t' ) break; + } + switch( ch ) { case '>': { BYTE ch2; @@ -845,10 +878,12 @@ SHORT expr() if( ch2 != ' ' && ch2 != '\t' ) break; } if( ch2 == '=' ) { - acc = (acc >= calcValue()); + acc = (acc >= expr3nd()); + if( acc != 0 ) acc = -1; } else { executionPointer--; - acc = (acc > calcValue()); + acc = (acc > expr3nd()); + if( acc != 0 ) acc = -1; } } break; @@ -860,17 +895,51 @@ SHORT expr() if( ch2 != ' ' && ch2 != '\t' ) break; } if( ch2 == '=' ) { - acc = (acc <= calcValue()); + acc = (acc <= expr3nd()); + if( acc != 0 ) acc = -1; } else if( ch2 == '>' ) { - acc = (acc != calcValue()); + acc = (acc != expr3nd()); + if( acc != 0 ) acc = -1; } else { executionPointer--; - acc = (acc < calcValue()); + acc = (acc < expr3nd()); + if( acc != 0 ) acc = -1; } } break; case '=': - acc = (acc == calcValue()); + acc = (acc == expr3nd()); + if( acc != 0 ) acc = -1; + break; + default: + executionPointer--; /* unget it */ + return acc; + } + if( bForceToReturnSuper ) return -1; + } +} + +SHORT expr() +{ + SHORT acc; + acc = expr2nd(); + if( bForceToReturnSuper ) return -1; + + while( TRUE ) { + BYTE ch; + while( TRUE ) { + ch = *executionPointer++; + if( ch != ' ' && ch != '\t' ) break; + } + switch( ch ) { + case KEYWORD_AND: + acc = acc & expr2nd(); + break; + case KEYWORD_OR: + acc = acc | expr2nd(); + break; + case KEYWORD_XOR: + acc = acc ^ expr2nd(); break; default: executionPointer--; /* unget it */ @@ -982,7 +1051,7 @@ void printOrDebug( BOOL bPrint ) break; default: { - WORD val; + SHORT val; #ifdef WW static #endif @@ -1183,6 +1252,20 @@ void st_next() } /* count step and loop again */ *(stacks[stackPointer-1].pvar) += stacks[stackPointer-1].step; + /* counter overflow? */ + if( stacks[stackPointer-1].step > 0 ) { + if( stacks[stackPointer-1].limit < *(stacks[stackPointer-1].pvar) ) { + /* loop done */ + stackPointer--; + return; + } + } else { + if( stacks[stackPointer-1].limit > *(stacks[stackPointer-1].pvar) ) { + /* loop done */ + stackPointer--; + return; + } + } executionPointer = stacks[stackPointer-1].returnPointer; } @@ -1456,7 +1539,7 @@ void editLine() delta = from-target; MEMMOVE( target, from, (WORD)(dataTop-(from-wa)) ); dataTop -= delta; - clearRuntimeInfo(); + /*clearRuntimeInfo();*/ } else { WORD len; len = skipToEOL(waCoockedLine+2)-waCoockedLine+1; @@ -1472,7 +1555,7 @@ void editLine() MEMMOVE( target+len, target, (WORD)(dataTop-(target-wa)) ); MEMMOVE( target, waCoockedLine, len ); dataTop += len; - clearRuntimeInfo(); + /*clearRuntimeInfo();*/ } else { /* replace line */ WORD lost; @@ -1488,7 +1571,7 @@ void editLine() MEMMOVE( nextline+delta, nextline, (WORD)(dataTop-(nextline-wa)) ); MEMMOVE( target, waCoockedLine, len ); dataTop += delta; - clearRuntimeInfo(); + /*clearRuntimeInfo();*/ } } } @@ -1540,14 +1623,36 @@ BOOL convertInternalCode( BYTE * waCoockedLine, const BYTE * waRawLine ) acc *= 10; acc += *src - '0'; src++; - } - if( acc < 0 ) { /* overflow case */ - syntaxError(); - return FALSE; + if( acc < 0 ) { /* overflow case */ + syntaxError(); + return FALSE; + } } *((SHORT*)dst) = acc; dst += 2; } +#if 0 +/* 以下のコードは、2項演算子の-を負数と解釈することがあるので使えない */ + } else if( *src == '-' && (*(src+1) >= '0' && *(src+1) <= '9' ) ) { + WORD acc; + /* 負数の10進のとき */ + *dst++ = 0x01; + src++; + acc = *src-'0'; + src++; + while( TRUE ) { + if( *src < '0' || *src > '9' ) break; + acc *= 10; + acc += *src - '0'; + src++; + if( acc > 32768 ) { /* overflow case */ + syntaxError(); + return FALSE; + } + } + *((SHORT*)dst) = -((SHORT)acc); + dst += 2; +#endif } else if( (*src >= 'a' && *src <= 'z') || (*src >= 'A' && *src <= 'Z') ) { BYTE next = *(src+1); if( (next >= 'a' && next <= 'z') || (next >= 'A' && next <= 'Z') ) { @@ -1701,7 +1806,7 @@ void interpreterMain() void interactiveMain( FILE FAR * fp ) { if( fp == NULL ) { - commonPrint(NULL,"*Ready\n"); + commonPrint(NULL,"OK\n"); } while( TRUE ) { BOOL b; @@ -1737,6 +1842,9 @@ void interactiveMain( FILE FAR * fp ) if( waCoockedLine[0] == 0x01 ) { /* 行エディタを呼び出す */ editLine(); + if( fp == NULL ) { + clearRuntimeInfo(); + } } else { /* その行を実行する */ executionPointer = waCoockedLine; @@ -1785,6 +1893,7 @@ BOOL do_merge( const BYTE * filename ) } interactiveMain( fp ); fclose( fp ); + clearRuntimeInfo(); if( bForceToReturnSuper ) return FALSE; return TRUE; } diff --git a/wonbe.exe b/wonbe.exe index d7042a3bfb1b9c4843676ed5d3ba565aa585308c..bc307757cb941210f7daf8168d218d0e3a386031 100644 GIT binary patch delta 3669 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 ac1u^C>mt */ > +- > 比較演算子 > and,or,xor」となります。(比較演算子は、<と>と=で記述する演算子すべて) + 計算順序は、括弧()を使って明示的に変更できます。  オーバーフロー、アンダーフローのチェックはありません。溢れは無視されます。ただしゼロ除算はエラーになります。  ステートメントなどのキーワードはすべてアルファベット小文字で入力します。大文字を使っても小文字になります。 @@ -96,7 +96,7 @@ return for 変数=式 to 式 for 変数=式 to 式 step 式  変数の値を変化させながらnextまで繰り返します。 - 終了値は厳密であることに注意が必要です。for i=1 to 2 step 2:nextは、無限ループになります。なぜなら変数iは永遠に2にならないからです。このような仕様にしておかないと、終了値を超えたら終わるという判定だと、ループの終値が32767のときに機能しないためです。 + 最後の変数の値が終値に一致せず、終値+ステップ値がオーバーフローする場合は無限ループする可能性があります。そのような値は指定しないように注意してください。 例: for i=0 to 10 step 2 next @@ -220,6 +220,13 @@ tick  自作ソフトを配布するためにwonbe.fxを一緒に渡すことを許可します。アーカイブへの同梱、CD-Rメディアなどへの焼き込み、通信ケーブルによる転送、どれも可です。ただし、ワンべぇの動作に関しては何も保証はできませんので、リスクは自分で負ってください。利用にあたっては、ロイヤリティなどはありませんので、報告も送金も必要ありません。 ● 変更履歴 + +2000年11月7日 Ver 0.03 +・演算子の優先順位 単項演算子 > */ > +- > 比較演算子 > and,or,xor +・比較演算子成立時の値を1から-1に変更 +・プロンプトをOKに変更 +・print/debugで負数が正数として出力されていたバグを解消 +・forの終値がピッタリ一致しなくてもnextでループ脱出するように変更 2000年11月7日 Ver 0.02 scan_XXが機能しないバグを取った 2000年11月6日 Ver 0.01 最初のバージョン