Chipmunk Basic 袖珍手册
Chipmunk Basic 袖珍手册是为 Mac OS X (Snow Leopard) 或更高版本的免费软件解释器提供给 Basic 编程 语言称为 Chipmunk Basic (release 3 version 6 update 6 patch 0) 的语言,由Ron H Nicholson编写。一些语句仅在 GUI 版本中有效,另一些则通过命令行界面或两者皆有效。大多数命令和语句在其他支持的平台(如 Linux 或 Microsoft Windows)上应该或多或少地以相同的方式工作。如果您使用高级语法检查编辑器(如 OS X 的 TextWrangler 或 Windows 上的 Notepad++)编写它们,则不必以行号开头语句。请参阅此页面底部的 下载。
内置的帮助系统非常有限,但由于这是一个开放的项目,它可能会在任何时候被扩展。本概念手册的某些部分和段落也涵盖了完整参考的一部分。
请尝试学习Chipmunk Basic 手册页和 README 文件或作者的网站。[1]
为了快速入门,请首先按以下顺序阅读以下主要部分,而部分则主要按字母顺序排列,以方便读者阅读
- 基本
- 在您的操作系统的提示符下,可以键入basic,可以选择后跟路径和/或文件名,以启动一个(现有的)Basic 程序,默认情况下显示它自己的提示符>
- 程序名称应具有.bas扩展名,以便出现在打开对话框中。
- 另请参阅 - 语句 文件
- 请参阅 exit
- clear
- cont
- 返回到stop 或错误发生后一个地址的地址。
- 从当前 progfile 中删除一行(或多行),例如 del 40-90 以删除编号为 40 到 90 的行。
- 编辑 行号
- 内置编辑器支持几条类似于 vi 命令的命令,用于处理一行(使用 ctrl+c 撤销错误更改)。
- i => 插入,直到按下键
- x => 删除一个字符
- A => 在行尾追加
- bye 或
- exit 或
- quit
- 停止解释并返回到您来自的级别。这些命令后应该关闭打开的文件。
- list { { from# } { - [[#LineNum|to#} }
- 所有参数都是可选的,用于列出屏幕上当前程序的行。
- none => 整个程序,当然,如果没有任何行有数字,这是唯一的选择
- only from# => 从该行到最后一行
- only - to# => 从第一行到该行
- both => 从该行到该行
- ProgFile 与内存中的程序合并。具有相同编号的行将被替换,不存在的行将被添加,因此可以执行合并后的程序,如果您希望保存。
- new
- 清除所有变量,关闭所有文件,并将程序借用的内存返还给操作系统。
- 请参阅 exit
- renum ProgFile { {start}, {increment}, {low_limit} , {high_limit} }
- 重新编号当前或 ProgFile(如果提供)。所有行号参数都是可选的。默认值是 10,10,1,结果是 10,20,30...
- 使用 low_limits 和 high_limit 可以重新编号文件的特定部分。所有引用的 goto 语句(在限制范围内)都会更改。
- 执行内存中现有的程序或从第一行或提供的行开始的命名程序。
- save (ProgFile)
- 将驻留在 RAM 中的程序存储在磁盘上。
- 常量可以是双引号(")之间的文字文本,遵循 IEEE 双精度格式规则的数字或以下之一
非零 (<>0)
零 (0)
打印 3.141593
- files ' 列出当前目录。
- files path$, any$ ' 设置当前目录。
- errorstatus$ ' 之后将返回路径。
- open filename$ for input as #1
- open "SFGetFile" for input as #3
- while not eof(3) : input #3,a$ : print a$ : wend : close #3
- open "SFPutFile" for output as #4
- x = fgetbyte #3
- ' 从文件获取一个字节;
- get
- ' 从控制台或终端接收一个字符
- input my_prompt$, y
- ' 在请求数字时设置您自己的提示。
- input s$
- ' 提示输入字符串。
- ' 将整个输入行放在 s$ 中。
- input x
- ' 输入一行。转换为数字。
- input #3, s$
- ' 从文件输入(必须先打开)。
- print "hello"
- print "hello"; ' 打印不带回车或换行。
- print 1+2
- print #4,s$ ' 打印到文件(必须先打开);
- print format$(x, "$###.##") ' 打印格式化的金额。
- print { # FNUM, } using STRINGVAL ; VAR { [ , | ; ] VAR ... } '类似于上述格式
- gotoxy x,y ' 将光标定位在控制台窗口中。(以 0 为起点)
- print fre ' GUI(图形用户界面)版本中的特殊变量
- 20971520 ' 如果您使用 CLI(命令行界面),则为 0
- ' 一如既往:YMMV(您的里程可能会有所不同)
- open "COM1:" for input as #3 ' 需要 CTB 串行工具。
- open "COM1:" for output as #4 ' 先打开输入。
- if not eof(3) then i = fgetbyte(3)'
- open "COM3: 19200" for input as #5 ' 使用旧的串行驱动程序。
函数是用于转换或格式化数据的过程,以便显示信息。
abs 删除数字的符号。例如 abs(-1234)=1234
asc(A$) 显示字符 A$ 的 ASCII 码。是 chr$ 的反函数。
- chr$(n) 显示编号为 n 的 ASCII 字符。是 asc 的反函数。在 Mac OSX {3.6.6(b0)} 上,终端版本和 GUI 版本在 n>127(即 DEL)时存在差异。
请参见 XFA01,了解如何使用此函数的示例。
- field$(my_str$, word_num) ' 从句子中提取单词。
- field$(s$, n, seperator_char$) ' 空格是默认的分隔符。
- format$( Value , StringExpression )
- 返回根据格式字符串表达式格式化的 Value 的字符串表示形式。后者的格式与 print using 语句的格式化语法相同。
- a$ = inkey$ ' 轮询键盘输入。非阻塞。
此函数用于将数字转换为字符串,例如:print "this is my number:"+str$(123+2),输出:this is my number:125。在前面的示例中,字符串和整数的混合会导致类型不匹配错误。
更有趣的示例,在基于 Unix 的机器(如 Mac OS)上,使用 ls、awk、str$ 和 system$ 来列出文件夹 /Users/nmm/Desktop/ 中的前 3 个文件
10 FOR n=1 TO 3
20 PRINT system$("ls /Users/nmm/Desktop| awk '(NR=="+str$(n)+")")
30 NEXT n
- 另见 - 文件
- graphics color r,g,b ' 红色、绿色、蓝色值(范围 0-100)
- graphics color 100,100,100 ' 白色
- graphics color 100, 0, 0 ' 红色
- moveto x,y ' 设置起点。
- lineto x,y ' 绘制一条线到这个终点。
- pset x,y ' 绘制一个点。
- graphics circle r
- graphics rect x1,y1, x2,y2 ' 绘制一个矩形。
- graphics fillrect x1,y1, x2,y2 ' 填充矩形或圆形
- botton_down = mouse(0)
- current_x = mouse(1)
- current_y = mouse(2)
- last_click_x = mouse(3)
- graphics 0 ' 显示窗口。
- ' 刷新图形。
- graphics window w,h ' 改变大小。
- graphics window x,y, w,h ' 移动窗口。
- graphics -1 ' 隐藏图形窗口。
- graphics drawtext s$ ' 绘制文本。
- graphics pict x, y, filename$ ' 显示 PICT 文件。
- call "savepicture", fname$ ' 保存 PICT 文件。
- down ' 使用 ResEdit 创建您自己的精灵。
- pendown
- penup
- sprite 1, 100,50, 128 ' 在 (100,50) 位置绘制精灵 #1
- sprite n, x,y, rsrc_id ' 精灵是 ICN# 图标图像,内置精灵 rsrc_id 为 128 到 142
- sprite n forward x ' 移动精灵 #n x 像素。
- sprite n turn d ' 逆时针旋转精灵 #n d 度。
- turnleft
- turnright
- up
- a$ = inputbox("提示", "标题", "默认值", 0) ' 弹出对话框并要求输入。
- graphics button title$, x,y,w,h,asc("t") ' 弹出一个按钮,输入字母 "t"。
- graphics button "",-1 ' 清除所有按钮。
- 另见 - 图形窗口
- OOP - 面向对象编程 - 这里只是一些语法提示 -
- class my_class [ extends super_class_name ]
- {public|private} x as {integer|double|string}
- ... ' 等等
- sub member_function_name() ' 定义公有成员函数。
- this.x = ...
- member_function_name = return_value
- end sub
- end class ' 结束类定义
- dim a as new my_class ' 创建一个实例。
- a.member_function_name() ' 调用成员函数。
- +
用数值添加数字 *print 4 + 2* 显示 *6*
当与 字符串 一起使用时,加号表示连接
- NamF$="Jimmy " : NamL$="Wales" : print NamF$ + NamL$
- 结果是 *Jimmy Wales*
- -
减法。 *print 6 - 4* 结果为 *2*
乘法。 *print 4 * 2* 结果为 *8*
- /
除法。 *print 8 / 2* 将返回 *4*
- ^
指数。 *print 2 ˆ 3* 给您 *8*
- 模
模运算,即计算左数除以右数后的余数 *7 mod 2* = *1*
- 与
按位取消设置。 *15 (=1111) and 5 (=0101)* 生成 5
- 或
按位设置(包含)。 *5 or 2 (0010)* = *7 (0111)*
- 异或
与 或 相似,但互斥。 *15 xor 6 (0110)* = *9 (1001) *
- 非
在比较变量或常量时为否定。
- if not fre then print "via CLI" else print "GUI" : endif
- >
测试左边的值是否大于右边的值。
- if fre > 32767 then print "可用内存应该足以正常使用"
- <
- if Age% < 18 then print "需要父母的结婚许可"
- >=
- if Speed >=50.1 then print "在这个城市存在超速罚单的风险"
- <=
- if dat_brn% <= 1995 then print "明年你就可以投票了,也许更早"
- <>
测试左边的值是否不等于右边的值。
- if left$(namf$,5) <> "Admin" then print "欢迎,访客"
- =
将值分配给变量或在比较字段时测试是否相等
- Xmas$="Dec25-26"
- if mo% = 7 or mo% = 8 then print "在北半球肯定是在夏季"
- sound 800, 0.5, 50 ' 播放一个半秒钟的声音。
- sound freq,dur,vol ' 赫兹、秒、音量 [0 到 100]
- sound 0, rsrc_id ' 播放一个 snd 资源。
- sound -2,voice,key,velocity,seconds [,channel] ' sound -2 需要 Quicktime 2.1 Midi
- morse "cq de n6ywu"
- morse my_string$,20,40,13,700 ' 点、音量、字速、赫兹
- say "hello"
- ' 需要 Speech Manager 扩展
- say my_string$, 196, 44, 1
- ' 速率、音调、声音
- say
- ' 读取控制台窗口
- print macfunction("numSpeakers")
- print macfunction("getSpeaker")
- ' 当前声音的名称
- Mac 特定函数
- date$ time$ timer doevents
- call "wait", 1 ' 等待一秒钟。
- fre ' 应用程序堆中的可用内存
清除屏幕。
- cls : print "欢迎使用 Chipmunk Basic"
输入一些静态整数、实数或文本(用双引号 (") 括起来)来填充数组、变量等。
- data ...{,...}* : read ... : restore ...
- rem 在一个农场里,有一些动物,它们有类型名称、在房屋、笼子、马厩等中的数量。
- dim t%(3) : data "|7|15|15|(END)","animals|5|3","cat|3|0","dog|1|1"
- data "horse|0|0","rabbit|0|2","chicken|0|9","(END)|15|15"
- read a$ : s$=left$(a$,1) : d%=len(field$( a$, -1, s$ )) : g$=right$(a$,len(a$)-1) : e$=field$( g$, d%, s$ ) : d%=1
- while d% < len(field$( a$, -1, s$ ))
- t%(d%-1)=val(field$( g$, d%, s$ )) : d%=d%+1
- wend
- for f%=3 to 7 : if field$( a$, f% - 2, s$ ) = e$ then exit for : end if
- dim r$(3) : dim q$(t%(0),t%(1),t%(2)) :rem 模式和表格
- for f% = 0 to 3 : read r$(f%) : if r$(f%) = e$ then exit for : end if : next f% : m% = f% - 1
- 见 弧度
- dim ... : erase ...
- 特殊情况是在 SDBM 格式中定义数据库。
- dim DBSTRINGVAR as dbm$( STRINGEXPR )
- 使用 STRINGEXPR 中包含的文件名打开一个 sdbm 数据库文件。如果不存在,则创建数据库。
- 可以使用或存储到 DBSTRINGVAR ( STRINGKEY ) 命名的数组字符串变量来访问此数据库。
- 示例:mydb$(key$) = somevalstr$; : print mydb$(key$)
- close DBSTRINGVAR
- 如果使用该变量名打开 sdbm 数据库文件,则将其关闭。
- end
- 可选语句,明确显示程序文件的逻辑结束。
- for ...=... to ... step ... next ...
- gosub ... return
- goto ...
- if ... then ... else ... endif
- {let} ...=...
- 记录或为了兼容性原因,因为如果第一个词是 变量 定义,则这是隐含的。
- peek( addr { , size_val } )
- 显示 1 个字节或更多字节的内容,具体取决于size_val(2、4 或 8),位于内存位置addr。要更改:poke
- poke ADDR_EXPR, DATA_EXPR { , SIZE_VAL }
- 更改已寻址位置的内容(见 peek)
- radians : degrees
- 解释器指令,指定对三角函数(如 cos、sin、tan 等)使用什么单位。
- rem
- select case
- sub ... : end sub
- while ...{=...} wend : exit while
- 见 sub
- 执行当前程序中其他位置的一个或多个编号行。
- 10 print "Power(s) of two"
- gosub 50 : print "Ok" : end
- 50 print "To quit type number <0 or >8"
- input "FromExp",n% : if n%<0 then return
- 90 m%=2
- for e%=n% to n%+7 : s% =m% ^ e% : : if s%>32767 then return
- 见 gosub
- 执行命名子程序或自定义调用,包括参数。
- sub mumble(param1, param2) ' 定义带有 2 个参数的子程序。
- mumble = 7 + param1 ' 设置返回值
- end sub
- x = mumble(1) ' 调用子程序。额外参数设置为 0。
- IOS (HotPaw Basic 1.5.6)
- Chipmunk Basic 解释器文件(版本)
- MacOS 10.13-14 (1.368.2116 beta)
- OS X 10.9-12 (1.367.2627)
- OS X 10.6+ Intel (3.6.6)
- OS X 10.5/6 (3.6.5)
- OSX 10.x (3.6.4)
- Classic 9 (3.6.3)
- armv6l 命令行可执行文件 + 手册页 (3.6.7b6 beta)
- Shapedraw anoved.net,访问日期:2019 年 9 月 3 日
- XFAT - 显示 ASCII 字符表 0-127 (CLI) 或 0-255 (GUI)
输出可能取决于系统和/或版本。
以下是 3.6.6(b0) 在 Mac 的 OSX 10.6.8 又名 Snow Leopard 上的显示效果。
在 macOS 11.2 (Big Sur) 的 3.6.8(b2) 中,它不再像这样工作;所有字符从 128 到 255 显示为 '#'。
a-3 XFAT.bas rvup1.9.26.22 'eXample Formatted AscTable' Chipmunk BASIC v3.6.6(b0) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 nul soh stx etx eot enq ack bel bs ht lf vt ff cr so si dle dc1 dc2 dc4 dc4 nak syn etb can em sub esc fs gs rs us 0x00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 ' ' '!' '"' '#' '$' '%' '&' ''' '(' ')' '*' '+' ',' '-' '.' '/' '0' '1' '2' '3' '4' '5' '6' '7' '8' '9' ':' ';' '<' '=' '>' '?' 0x20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 '@' 'A' 'B' 'C' 'D' 'E' 'F' 'G' 'H' 'I' 'J' 'K' 'L' 'M' 'N' 'O' 'P' 'Q' 'R' 'S' 'T' 'U' 'V' 'W' 'X' 'Y' 'Z' '[' '\' ']' '^' '_' 0x40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 '`' 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 'u' 'v' 'w' 'x' 'y' 'z' '{' '|' '}' '~' del 0x60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e 7f 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 'Ä' 'Å' 'Ç' 'É' 'Ñ' 'Ö' 'Ü' 'á' 'à' 'â' 'ä' 'ã' 'å' 'ç' 'é' 'è' 'ê' 'ë' 'í' 'ì' 'î' 'ï' 'ñ' 'ó' 'ò' 'ô' 'ö' 'õ' 'ú' 'ù' 'û' 'ü' 0x80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f 90 91 92 93 94 95 96 97 98 99 9a 9b 9c 9d 9e 9f 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 '†' '°' '¢' '£' '§' '•' '¶' 'ß' '®' '©' '™' '´' '¨' '≠' 'Æ' 'Ø' '∞' '±' '≤' '≥' '¥' 'µ' '∂' '∑' '∏' 'π' '∫' 'ª' 'º' 'Ω' 'æ' 'ø' 0xa0 a1 a2 a3 a4 a5 a6 a7 a8 a9 aa ab ac ad ae af b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 ba bb bc bd be bf 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 '¿' '¡' '¬' '√' 'ƒ' '≈' '∆' '«' '»' '…' ' ' 'À' 'Ã' 'Õ' 'Œ' 'œ' '–' '—' '“' '”' '‘' '’' '÷' '◊' 'ÿ' 'Ÿ' '⁄' '€' '‹' '›' 'fi' 'fl' 0xc0 c1 c2 c3 c4 c5 c6 c7 c8 c9 ca cb cc cd ce cf d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 da db dc dd de df 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 '‡' '·' '‚' '„' '‰' 'Â' 'Ê' 'Á' 'Ë' 'È' 'Í' 'Î' 'Ï' 'Ì' 'Ó' 'Ô' '' 'Ò' 'Ú' 'Û' 'Ù' 'ı' 'ˆ' '˜' '¯' '˘' '˙' '˚' '¸' '˝' '˛' 'ˇ' 0xe0 e1 e2 e3 e4 e5 e6 e7 e8 e9 ea eb ec ed ee ef f0 f1 f2 f3 f4 f5 f6 f7 f8 f9 fa fb fc fd fe ff done Break in line 220 >list 100 rem Clear screen - make table of control characters and show your own app+int/vsn_id & first 32 codeNumbers 110 v$ = fn version$() : g% = instr(v$,"graphics") : option base 0 120 if g% = 0 then h$ = "app" else h$ = "a"+mid$(v$,g%+8,2) 130 cls : dim i$(32) : for j% = 0 to 32 : read i$(j%) : next j% 140 print h$;" XFAT.bas rvup1.9.26.22 'eXample Formatted AscTable' "+left$(v$,instr(v$,",")-1) 150 k% = -32 : gosub 240 : for j% = k%+32 to l%+32 : print i$(j%); : next j% : print : gosub 320 160 rem print all codelines until del (0x7f) in a loop & finish 170 while j% < 97 : gosub 310 : wend : if g% = 0 then 200 180 rem GUI-mode when 'graphics' is found in builtin FuNct 'version$()' 190 while j% < 225 : gosub 310 : wend 200 print "done" 210 rem Break so user can decide to change, continue, list, quit, restart etc. r1: added hexadecimal codePoints 220 stop 230 rem SubProcedure to show characterCodes 240 if k% = 64 then l% = k%+30 else l% = k%+31 250 for j% = k%+32 to l%+32 : print right$(" "+str$(j%),4); : next j% : if j% = 127 then print " 127"; : j% = j%+1 260 print : return 270 rem ASCII-characters contained in a line followed by a line containing their hexadecimal value 280 for j% = k%+32 to l%+32 : print " '";chr$(j%);"'"; : next j% : if j% = 127 then print i$(32); : j% = j%+1 290 print : gosub 320 : return 300 rem both codes and content 310 k% = j%-32 : gosub 240 : gosub 280 : return 320 for j% = k%+32 to k%+63 : if j% mod 32 = 0 then 330 print "0x";hex$(j%,2); 340 else 350 print " ";hex$(j%,2); 360 endif 370 next j% : print : return 380 rem 'database' of special chars that are making a mess of your screen if printed as is 390 data " nul"," soh"," stx"," etx"," eot"," enq"," ack"," bel"," bs"," ht"," lf"," vt"," ff"," cr"," so"," si" 400 data " dle"," dc1"," dc2"," dc4"," dc4"," nak"," syn"," etb"," can"," em"," sub"," esc"," fs"," gs"," rs"," us" 410 data " del"
- 十六进制数据可以用 0x 作为前缀或 &h 作为前缀输入。
- 示例:0x07ff &h241f
程序文件中一行的前十个数字可以用于某些 语句 和简单的内置编辑器。
- 限制:1 到 231 - 1 = 2147483647
- 具有超过九位数字的行在显示器上不可见。
后面跟着冒号 (:) 的标签可以使用,例如:
- x=7
- foo: print x : x=x-1 : if x>0 then goto foo
- Unix、Linux 和 Mac OS X,三种支持的操作系统。
- 如果解释器不接受 表达式,则为其值。
变量名最多可以包含 31 个字符(字母、数字或下划线 (_))。
- 已过时的前缀 fn 用于 "def fn",因此为了避免向下兼容性问题,不要在开头使用这两个字节。
- 如果在名称末尾使用美元符号 ($),则该字段将保存一个 字符串,其长度最多为 254 个字节,这也是程序行的最大长度。
- 后缀百分号 (%) 被解释为 -32768 到 32767 之间的整数。
- 所有其他数字变量都被认为是 IEEE 实数。
- ↑ Chipmunk Basic 由 Ron Nicholson 创作 - 主页包含一般信息和关于其他 Basic 方言的链接。
- Chipmunk Basic 参考手册;
- ReadMe 包括示例、常见问题解答、历史记录等等...