Chipmunk Basic 袖珍手册
Chipmunk Basic 袖珍手册,由Ron H Nicholson为 Mac OS X (Snow Leopard) 或更新版本的免费软件解释器提供,该解释器用于名为 Chipmunk Basic (版本 3 版本 6 更新 6 补丁 0) 的BASIC 编程语言。一些语句仅在 GUI 版本中有效,其他语句通过命令行界面或两者兼而有之。大多数命令和语句在其他支持的平台(如 Linux 或 Microsoft Windows)上应该或多或少地以相同的方式工作。如果您使用高级语法检查编辑器(如 OS X 的 TextWrangler 或 Windows 上的 Notepad++)编写语句,则不需要以行号开头。请参阅本页底部附近的下载部分。
内置的帮助系统非常有限,但由于这是一个开放项目,它随时可能得到扩展。本文档的某些部分和段落也涵盖了完整参考的一部分。
请尝试学习Chipmunk Basic 手册页和自述文件或作者的网站。[1]
为了快速入门,请首先按以下顺序阅读以下主要部分,而各部分主要按字母顺序排列,方便读者使用。
- basic
- 在操作系统的提示符下,可以键入basic,可选地后跟路径和/或文件名,以启动(现有的)BASIC 程序,该程序默认情况下会显示其提示符>
- 程序名称应具有.bas扩展名,以便在打开对话框中显示。
- 另请参阅 - 语句 文件
- 参阅exit
- clear
- cont
- 返回到发生 停止 或错误的地址之后的地址。
- 从当前 progfile 中删除一行(或多行),例如:del 40-90 删除第 40 到 90 行。
- edit LineNumber
- 内置编辑器使用类似 vi 的命令在一行上进行操作(使用 ctrl+c 撤销错误的更改)。
- i => 插入到键为止
- x => 删除一个字符
- A => 追加到行尾
- bye 或
- exit 或
- quit
- 退出解释并返回到您来自的级别。这些命令之一后,应该关闭打开的文件。
- list { { from# } { - [[#LineNum|to#} }
- 所有参数都是可选的,在屏幕上列出当前 prog 的行。
- none => 整个程序,当然,如果没有行编号,这是唯一的选择
- only from# => 从 from# 到最后
- only - to# => 从第一个到 to#
- both => 从 from# 到 to#
- ProgFile 与内存中的程序合并。具有相同编号的行将被替换,不存在的行将被添加,因此合并的程序可以被执行,如果你愿意,可以 保存。
- new
- 清除所有变量,关闭所有文件,并将程序借用的内存返回给操作系统。
- 参阅exit
- renum ProgFile { {start}, {increment}, {low_limit} , {high_limit} }
- 重新编号当前文件或 ProgFile(如果提供)。所有 行号参数 都是可选的。默认值为 10,10,1,结果为 10,20,30...
- 使用 low_limits 和 high_limit,可以重新编号文件的特定部分。所有相关的 go*-语句(在限制内)都会改变。
- 从第一行或提供的行开始执行内存中存在的程序或命名的程序。
- 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) 显示 ASCII 码为 n 的字符。反向操作为 asc。在 Mac OSX {3.6.6(b0)} 的终端版本和 GUI 版本之间,如果 n>127(即 DEL),则存在差异。
有关如何使用此函数的示例,请参见 XFA01。
- field$(my_str$, word_num) ' 从句子中截取单词。
- field$(s$, n, seperator_char$) ' 空格为默认分隔符。
- 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
tan
[edit | edit source]tanh
[edit | edit source]ubound
[edit | edit source]ucase$
[edit | edit source]val
[edit | edit source]- 参见 - 文件
图形
[edit | edit source]颜色
[edit | edit source]- graphics color r,g,b ' 红色、绿色、蓝色值(范围 0-100)
- graphics color 100,100,100 ' 白色
- graphics color 100, 0, 0 ' 红色
绘图
[edit | edit source]- moveto x,y ' 设置起点。
- lineto x,y ' 绘制一条线到该终点。
- pset x,y ' 绘制一个点。
- graphics circle r
- graphics rect x1,y1, x2,y2 ' 绘制一个矩形。
- graphics fillrect x1,y1, x2,y2 ' 也可用于绘制填充椭圆。
图形函数
[edit | edit source]- botton_down = mouse(0)
- current_x = mouse(1)
- current_y = mouse(2)
- last_click_x = mouse(3)
图形窗口
[edit | edit source]- graphics 0 ' 使窗口显示。
- ' 刷新图形。
- graphics window w,h ' 更改大小。
- graphics window x,y, w,h ' 移动窗口。
- graphics -1 ' 隐藏图形窗口。
- graphics drawtext s$ ' 绘制文本。
图片
[edit | edit source]- graphics pict x, y, filename$ ' 显示 PICT 文件。
- call "savepicture", fname$ ' 保存 PICT 文件。
精灵
[edit | edit source]- 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 ' 逆时针旋转 d 度。
- turnleft
- turnright
- up
用户界面
[edit | edit source]- a$ = inputbox("prompt", "title", "default", 0) ' 弹出对话框并请求输入。
- graphics button title$, x,y,w,h,asc("t") ' 弹出按钮,输入字母 "t"。
- graphics button "",-1 ' 清除所有按钮。
- 参见 - 图形窗口
对象
[edit | edit source]- 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() ' 调用成员函数。
运算符
[edit | edit source]算术
[edit | edit source]- +
用数字相加 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
布尔代数
[edit | edit source]- and
按位取消设置。 15 (=1111) and 5 (=0101) 得出 5
- or
按位设置(包含)。 5 or 2 (0010) = 7 (0111)
- xor
与 或 相似,但它是互斥的。 15 xor 6 (0110) = 9 (1001)
比较
[edit | edit source]- not
在比较变量或常量时取反。
- if not fre then print "via CLI" else print "GUI" : endif
- >
测试左边的值是否大于右边的值。
- if fre > 32767 then print "Available memory should be enough for normal use"
- <
- if Age% < 18 then print “需要父母的同意才能结婚”
- >=
- if Speed >=50.1 then print "这个城市有超速罚款的风险"
- <=
- if dat_brn% <= 1995 then print "明年你就可以投票,也许更早"
- <>
测试左边的值是否不等于右边的值。
- if left$(namf$,5) <> "Admin" then print "Welcome, guest"
- =
将值分配给变量或在比较字段时测试是否相等。
- Xmas$="Dec25-26"
- if mo% = 7 or mo% = 8 then print "在北半球一定是夏季"
声音
[edit | edit source]- 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
摩尔斯电码
[edit | edit source]- morse "cq de n6ywu"
- morse my_string$,20,40,13,700 ' 点、音量、每分钟字数、赫兹
语音
[edit | edit source]- say "hello"
- ' 需要 Speech Manager 扩展
- say my_string$, 196, 44, 1
- ' 速率、音调、声音
- say
- ' 读取控制台窗口
- print macfunction("numSpeakers")
- print macfunction("getSpeaker")
- ' 当前语音名称
特殊
[edit | edit source]- Mac 特定函数
- date$ time$ timer doevents
- call "wait", 1 ' 等待一秒钟。
- fre ' 应用程序堆中的空闲内存
清除屏幕。
- cls : print "Welcome to 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 } )
- 显示内存位置addr处 1 个字节或更多字节的内容,具体取决于size_val(2、4 或 8)。要更改: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's OSX 10.6.8 又名 Snow Leopard 上的外观。
在 3.6.8(b2) 上的 macOS 11.2 (Big Sur) 上,它不幸地不再像这样工作了;所有从 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 包含示例、常见问题解答、历史记录等...