跳转到内容

Chipmunk Basic 袖珍手册

75% developed
来自维基教科书,开放的书籍,为开放的世界

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扩展名,以便出现在打开对话框中。
  • 另请参阅 - 语句 文件
clear
  • 所有变量都被清除,如果适用(对于等)则被释放。不要与语句cls混淆,该语句将从您的计算机屏幕上清除字符和图片,并将您的光标置于左上角。
cont
  • 返回到stop 或错误发生后一个地址的地址。
del FromLine { - ToLine }
  • 从当前 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 => 从该行到该行
load String#Expr
  • 将一个名为上述表达式结果的存储文件移动到内存中,以便它可以被解释器执行
  • 注意:以 # 开头的行被视为注释。编号行 最多到 2147483647 (231 - 1) 是有效的。
merge ProgFile
  • ProgFile 与内存中的程序合并。具有相同编号的行将被替换,不存在的行将被添加,因此可以执行合并后的程序,如果您希望保存
new
  • 清除所有变量,关闭所有文件,并将程序借用的内存返还给操作系统。
renum ProgFile { {start}, {increment}, {low_limit} , {high_limit} }
  • 重新编号当前或 ProgFile(如果提供)。所有行号参数都是可选的。默认值是 10,10,1,结果是 10,20,30...
  • 使用 low_limits 和 high_limit 可以重新编号文件的特定部分。所有引用的 goto 语句(在限制范围内)都会更改。
run {ProgFile) , {StartLine}
  • 执行内存中现有的程序或从第一行或提供的行开始的命名程序。
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
stop 会导致一个中断,这在例如对应用程序进行更改、调试、中止 或仅 继续 时很有用。
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 解释器文件(版本)
(3.6.6)
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)
2000/XP/7 (3.6.5b6)
其他 (3.6.5b3)
  • 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

字符串

[编辑 | 编辑源代码]
双引号之间的 文字文本,例如:"ProgId42.bas","Hello, world"
以 $ 结尾的 变量,例如:my_text$
Unix、Linux 和 Mac OS X,三种支持的操作系统。
如果解释器不接受 表达式,则为其值。

变量名最多可以包含 31 个字符(字母、数字或下划线 (_))。

已过时的前缀 fn 用于 "def fn",因此为了避免向下兼容性问题,不要在开头使用这两个字节。
如果在名称末尾使用美元符号 ($),则该字段将保存一个 字符串,其长度最多为 254 个字节,这也是程序行的最大长度。
后缀百分号 (%) 被解释为 -32768 到 32767 之间的整数。
所有其他数字变量都被认为是 IEEE 实数

参考文献

[编辑 | 编辑源代码]
  1. Chipmunk Basic 由 Ron Nicholson 创作 - 主页包含一般信息和关于其他 Basic 方言的链接。

进一步阅读

[编辑 | 编辑源代码]
华夏公益教科书