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 包括示例、常見問題解答、歷史記錄等等...