PC-1500 汉字系统G
========使用说明=========
张 时 钊
西安未央区勉之计算机技术服务部
注:
这份使用说明,原来是用PC-1500绘图打印机打印的。其中许多字根,在GBK字库中没有,只得用圆括号加以说明。如以下文字就是一串字根:
耂产(虍字去七)(“伊”字右旁)广疒厂尤户尸(眉字头)斤
3个圆括号中文字只表示一个字根。这样,如果找不到字根“耂”,就可能表为“(老字头)”或“(老字去匕)”。请读者注意。
PC-1500 汉字系统G
========使用说明=========
目录
一、概说
二、汉字的建立
三、文章编辑的系统 G2
(1)、文章的输入
(2)、文章的输出
(3)、文章的修改
四、词语应用系统G1
--在具体程序中调用汉子的方法
五、汉字输入法
--汉字键盘和组字处理规律
(1)、字元键
(2)、接续健
(3)、转移键
(4)、删插键
六、应用程序实例
--工资管理程序PAY
----------------------------------------------------------------------------
序
1984年9月,我首次接触到袖珍计算机PC-1500,仅花了20天时间,就编研成功第一个汉字系统。该系统不增加任何硬件设备,耗费内存不到8K,不是打印几百个字,而是可以打印出成千上万个不同的汉字,连我自己也感到惊奇。使用该系统,我给陕西省气象局打印了一封信,省局领导看后十分重视,立即拨款,要求我在年内修改定稿。其后的3个月时间里,我摸索出该机说明书上没有的一些特性,破译了许多系统变量。应用这些成果,使我有可能提出现在这个新方案,姑且命名为PC-1500汉字系统H。对这个新系统,亦作无数次修改,形成一个系列。本手册介绍其中比较好的、专供用户使用的H2,H4,H5,H6.它们分别适用于加了8K或16K模块的PC-1500,分别用来编辑汉字文章或在应用程序中调用汉字。这4个也不是最好的,已发觉有一些地方可能还可以改进。但是,牵一发要动全身,愈周密则愈费功夫。修改将变得更加困难,应各方面的要求,先推广使用,希望使用者在使用过程中,如发现什么问题,有什么改进意见,能够及时提供给我,以便今后把它修改的更好。
PC-1500汉字系统的编研,得到陕西省气象局局长马鹤年和孙海鹰同志、省局科教处处长徐达生和叶传元同志的大力支持,得到科教处张家林等同志的热心相助,而咸阳市气象局、旬邑县气象站则给了我充裕的编研时间,才使它能很快地完成,在此我谨对以上提及的所有单位与个人,表示由衷的感谢。
张时钊 1984、12
这里介绍的是新版本G系统的使用说明,新版本把原来的大部分BASIC程序改为机器语言
了,这使打印机显示速度提高了6倍左右,下一步将努力满足用户的另一个要求--在针打
上输出。
张时钊 1986、4
一、概论
G系统PC-1500 汉字系统,不增加硬件设备,只耗内存8K就能使用全部简化汉字及几乎所有汉字,显然,主机至少要加8K、最好是16K模块,而该模块必须经过我们的汉字化处理。汉字化处理不影响其他功能。系统由盒式磁带送入,建立汉字系统后仍可作其他运算。但是一旦进入汉字输入状态,出现汉字光标后,全机65个按键中,除 ENTER和BREAK 外,都被赋予新意义。为此必须加一块键盘盖板,以标明按键的新作用。盖板的全貌如图所示。这时,原来的OFF键已不能关机,它被改为〈删插键〉,SHIFT被改为〈转移键〉,而SML则改为〈接续键〉,其余60个键都改为〈字元键〉。它们的详细功能将在第五节〈汉字输入法〉中叙述。
一块如此的盖板,一盘录有汉字系统软件的磁带,再加上这本说明书,就可使PC-1500具有汉字功能。〈常用汉字〉中有按部首检索的5000个常用汉字的字元组成(即一种汉字编码),实际上能使用的汉字远不至这些。从键盘盖板可知,本系统使用4个接续号和239个字元,每个汉字最多可由12个字元及接续号组成(即码长最大为12),所以可以随意合成的字形近于无穷,可达239^9×4^3=1.6284×10^23。不过其中绝大部分是无意义的,有一些则可认作同一个字。在这本字典中,有些字亦有意给出数种组字方法:有的字形美观正确,但码长较长,有的码短但字形不好,可供不同情况下选用。该字典仅供初次练习时作参考用,建议使用者把字典里的字照打一遍,熟练组字规律后,就可抛开它,独立地组出更多更好的汉字来。
本系统的编码过程就是用字元组字,而组字规则特别简单,易学易记。只是个别没有相应字元的汉字,字形不绝对正确或码长较长。又因为要由该机绘图仪一笔一划写出来,每分钟大约只能输出70-80个字。为了弥补打印完整汉字速度慢的缺点,在不需要打印时,可以只在显示屏上显示各个汉字的字元组成(字元码),仅凭它即可确认一个汉字。汉字输出方式由变量K控制,在输出及输入时,机子会显示符号〈LP?〉或〈PW?〉提示您输入K值。K可以取以下诸值: 1,只显示不打印 2,只打印不显示 3,既显示又打印
打印汉字时,既可横向成行,也可以纵向成行。如为文章,纵向打印时每行长10.2 CM,自动分页,横向打印时每行长4.3 CM,不分页。汉字的打印由变量A控制,A的取值只要 〉0,别无其他限制,它与汉字大小的关系可参见下表:
A 汉字宽MM 相当铅字号
720 9.5 1
560 7.5 2
440 6.0 3
380 5.0 4
310 4.0 小4号
250 3.4 5
200 2.7 6
150 2.0 7
二,汉字系统的建立
磁带上录有汉字词语应用系统G1,它可以拼接其他应用程序(如附录的工资管理程序PAY),使应用程序能使用汉字和短语。磁带上还录有汉字文章编辑系统G2-8K或G2-10K,G2-26K,(这些文件名中的后缀是指用户RAM区的大小,显然主机的用户RAM区愈大,能写入的文章也愈长),不管哪一个,汉字系统的建立都按以下步骤进行:
1,装妥已做过汉字化处理的模块
2,开机后,在PRO状态下,打入
NEW0 ENTER
3,按磁带面上记载的计数器转数,找到所需系统的起始位置,用CLOAD命令送入机中
4,系统送毕,显示提示符 〉后,立即打入:
NEW STATUS 2-1 ENTER,
POKE 30821,24,171 ENTER (如果是加8K RAM 的机子,24 须改为80)。这样汉字系统即告建成,可以随时使用。
可以用LIST命令输出汉字系统的程序部分。这程序后面,又可从行号1开始打入并编辑其他程序,词语应用系统G1后面拼接的应用程序即可如此调试。如果是已调试好的录于磁带上的程序(如上面提到工资管理程序PAY),则可用MEREG命令送入。不论用哪种方法拼接上的程序,都只能用标号入口来启动,且不能用NEW来清除,因为那样会把汉字系统也清除掉。可以在编调其他程序前在打入 NEW STATUS 2-1 ENTER 先把汉字系统全部封闭,则可像平常一样编调新程序,可用NEW(后面不可带数字!)清除而不影响封闭着的汉字系统,需要汉字时,只需打入 POKE 30821,24(80),171 ENTER 又可把汉字程序开放使用,不要汉字时,用NEW0才能把全部RAM释放出来。
已打入其他程序后,打NEW STATUS 2-1, 会把刚打入的程序也封闭起来,开放后也不能删改了,如果在第一次打NEW STATUS 2-1后, 用PEEK读出30823,30824的内容:
A=PEEK 30823
B=PEEK 30824
则可用POKE 30823,A,A代替NEW STATUS 2-1,此命令只封闭汉字系统,而不会封闭拼接上去的其他程序。
三,文章编辑系统G2
使用这些系统时,不能拼接其他程序语句,不能建立额外的数组和变量,如果已作过别的运算,最好用CLEAR清除。在第一次输入文章用DEF Z启动时,也会自动清除其他变量而建立一个尽可能最大的字符串数组。 对于G2-18K是Z$(207,15)×3,对于G2-22K是Z$(145,31)×3,对于G2-26K则为Z$(188,31)×3。它们都是2元数组,机子将它们当作1元数组Z$(3327)×3,Z$(4671)×3,Z$(6047)×3,文章就将存于其中。这字符数组的字符串长度为3,一个汉字需一个或一个以上的字符串。文章中可混用英文字母及其他原有字符,文章中的标点和空格亦借用该机的原有字符。但每一字符串最多只能存2个字符,因为未尾必须以字符CHR$255作标志。
本系统的使用步骤如下:
(1),文章的输入:
以DEF Z启动显示〈I=〉时,打入开始写文章的第一个字符串序号1(一般从头写起,取I=0)。对于提问〈LP?〉,则可按需要回答1,2,3,即指定K值,如取1,输入时就不打印,只把敲入的字元显示一下。最后还要求选定打印汉字的大小A,A值指定后,对于文章中夹打的英文数码等字符,能自动选择大小相匹配的字号。
以上三个数字输毕后,显示屏左上角将出现长方形的〈汉字光标〉(不闪烁),表示已进入汉字输入状态,所有按键的功能改由汉字盖板规定。这时即可依次输入汉字。例如要输入〈陕西省气象局〉这几个汉字时,只要打入:
阝圡人 ENTER
西 ENTER
少 目 ENTER
气 ENTER
⺈豕 ENTER
尸口 ENTER
〈转移键 〉ENTER
每一段文章输毕后,都应按转移键,出现?号后不打任何字符即按一下ENTER,便会换行另起一段。文章全部打完以后,亦应如此打入一个转段换行的讯号,再按BREAK后即打入结束讯号Z$(I/16,15 AND I)=CHR$0(对于G2-26K,其中16,15分别改用32,31)。
详细的方法请看第五节〈汉字输入法〉。
(2),文章的输出:
以DEF X启动,回答了下列机器的提问后,即开始输出直到文章结束:
A;从文章的哪一部分开始输出?提示符〈I=〉指将被输出的第一个字符串的序数;
B;采用何种输出方式〈PW?〉,即要指定K值,如要打印,则取2;
C;拟采用的打印汉字的大小〈A=〉,即给定A值;
D;横向打印还是纵向打印?如要横打,对提问〈Z=〉回答任一非负数,若给负数则
纵向成行。 注意:变量Z不能用于手工打入,那样是无效的,因为在程序中Z要移
作他用。对于G2,纵打时还可以给出各页的页码,它记在变量P中。
输出文章时有两个K值可用于来寻找文章中各个字是存在哪个字符串中(为了定删改的位置):
K=5:同1,但开始时还显示被输出的第一个字符串序号。
K=6:同2,但开始时还打印被输出的第一个字符串序号。
除K=1,5外,显示是不完全的,接续号都被省略了,中途也不停顿,难以辨认每一个汉字。K=1,5时的显示是完全的,连接序号也不遗漏,一行屏幕显示结束或碰到转段换行讯号而显示标记*****时,都停下来,待辨认清楚后再按一下ENTER才继续显示下一行。
按刚叙述的方法,请把已输入的〈陕西省气象局〉这几个字用各种方式输出来,并找出存储各个汉字的字符串序号及最后的转段换行讯号或结束符CHR$0所在的字符串序号。
(3),文章的修改:
已打入的文章需要删、插时都用DEF D启动。例如,已找出〈陕西省气象局〉中的〈西〉和〈省〉字的序号分别为1和2,最后的转段换行的序号为6。想在〈省〉字之前插入〈西安〉二字,则在显示〈I=〉后输入2,出现〈DELETE TO J=〉,这时应打入最末的序号6(如果已打结束符CHR$0,它的序号应为7)。再按ENTER后会显示一个数,它指明最多可以插入多长的内容(按字符串个数计),最后又按一下ENTER,机子即刻把序号2到6的〈省气象局〉这四个字及末尾的转段换行讯号都转移到数组的最后部,接着就进入汉字输入状态,显示屏上左上角出现汉字光标,即可打入要插的内容:
西 ENTER
宀女 ENTER
〈转移键 〉ENTER
插入的字句打完后,也必须按转移键,出现?号但不打字符即按ENTER,机子才把原移到末尾的那段文字移回来接到刚插入的内容之后,即告完成,显示提示符 >而结束。
用(2)节的方法可探知〈西安〉两字已插妥了,它们的位置是2,3,现在要把它们删除。仍用DEF D启动,机子提问〈I=〉时输入2,出现〈DELETE TO J=〉时应输入要删除内容之末尾位置J=3,机子立即开始删去从I 到J(包括它们自己)的字句,完成后亦显示>。
四,词语应用系统G1
--在其他程序中调用汉字的方法
这些系统可把汉字写进任一用DIM语句定义过的变量名只含一个字母的字符串数组中唯独不能用Z作数组名,因为它与系统中用到的缓冲存储器Z$(5)×3重名,汉字要先写在Z$(5)×3中再转到指定的数组的。这些数组如果是一元的,也将被看作时二元的,只不过2个下标(I,J)中第一个I=0罢了。字符串长度须 〉=3,若是专写汉字用的责应取定3。
虽然可以不另外编写程序,直接用手工操作调用本系统,进行汉字的输入输出;但实际上应用时都要编入应用程序中。在应用程序中调用本系统时应特别注意:写汉字时,要使用所有专用变量A--Z,因此数值要保留再次使用的简单变量,必须使用双字母命名的简单变量,或者在进入汉字系统前转到双字母变量里去保存。但仅输出汉字时不受此限制。
调用汉字系统只能通过以下10个标号入口。前3个是专供手工操作的,后7个是子程序入口,在应用程序中用GOSUB语句调用,这10个入口的功能如下:
(1),A:手工操作必须用DEF A 开工,每次进入此入口即显示〈Z$=〉。开头应不管他,立即按ENTER,出现?号,即可打入以下各标号(但不能是W、WW、R、RR),以建立必要的汉字输出状态。只有建立了必要的汉字输出状态,才可以在已定义的数组中写汉字,或从已写好汉字的数组中输出汉字。这时,对提问<Z$=>,必须打入该数组的数组名,接着还要输入下标的开始值I,J(每次的I值是固定的,若为一元数组,I=0)及J的结束值B(一般取最大值B=255,反正输入结束时都必须用转段换行讯号退出汉字输入状态的),然后在出现?号时打WW或RR。如果是从I=0,J=0开始的话,则显示〈I=〉时就按ENTER 使出现?号,再打W或R。
(2),Q:建立缓冲存储器Z$(5)×3后,自动转入口QQ。
(3),QQ:现显示〈PW?〉,可回答1,2,3,分别指定输出方式只显示,只打印或既显示又打印,接着显示〈A=〉,应回答选定的汉字大小。本入口还能建立收集错误转A入口处理的功能。因为由入口A转其他标号,用的是GOTO语句,而后7个标号却是子程序入口,最终不能返回而出错;欲进行读写的数组未定义或Z$(5)×3已建立而转标号Q,亦要出错。建立错误收集功能后,出错时都会自动返至入口A(显示〈Z$=〉),再转其他入口或更改数组名,这样对于手工操作是很方便的。
在应用程序中调用汉字系统时,一般不用以上的3个入口。相应的功能:包括置数组名于Z$,定数组起止下标及汉字输出方式K,A值等,都直接用BASIC语句写在程序中。以下7个入口则用GOSUB语句调用。
(4),T:建立汉字纵向打印方式。
(5),Y:建立汉字横向打印方式。
在进入汉字输出输入状态之前,都必须先选择这两种方式中的一种。
(6),E: 打印头下移一行,在从最左边开始打印。
(7),W:先置I=0,J=0,B=255,再转入口WW。当要从下标(0,0)或一元数组从下标(0)开始向数组写汉字时,进入A入口输入数组名后可不输I,J,B而直接转入口W。如果已指定起止下标后不转入口WW而转入口W,指定的数字也是无效的,仍要从(0,0)开始。
(8),WW:进入汉字输入状态,出现汉字光标,即可对已指定的字符数组,从已指定的下标(I,J)到(I,B)写入汉字。汉字写毕后,只要按一下转移键,出现?号后不打任何字符而按ENTER,即打入一个转段换行的讯号,就会返回。
(9),R:先置I=0,J=0,B=255,再转入口RR,其他作用与入口W类同。
(10),RR:从指定的字符串数组的指定下标(I,J)开始读出汉字,遇到转段换行讯号或到(I,B)时,就会返回。
按上所述,想在A$(50)*3中写几个汉字,再用纵向打印方式打印出来,其手工操作如下所示:
操作: 显示:
DIM A$(50)*3 ENTER >
DEF A z$=
ENTER ?
Q ENTER PW?
2 ENTER A=
310 ENTER Z$=
ENTER ?
Y ENTER Z$=
A ENTER I=
ENTER ?
W ENTER 汉字光标
打入汉字,打毕后
转移键 ?
ENTER Z$=
_已返回 A入口
ENTER ?
T ENTER Z$=
A ENTER I=
ENTER ?
R ENTER
即开始纵向打印输出
如果写成拼接在汉字系统后的应用程序,则上述过程可以写作:
10:"L": CLEAR: DIM Z$(5)*3,A$(50)*3
20:K=2:A=310: GOSUB "Y":GOSUB "W"
30:"K": K=2: A=310: GOSUB "T":Z$="A": GOSUB "R"
此应用程序以DEF L启动。汉字已写入,须反复打印输出时,以DEF K启动。
打印的汉字词语在一行中的位置由变量L 控制,L 每增1,打印位置右移0.2MM。
五,汉字输入法
--汉字键盘和组字规律
(1),字元键--10类共239个字元
在汉字输入状态出现汉字光标后,按住任何一个字元键,将在同一位置轮流显示4个性质相近的字元,约0.4秒钟换一次,1.0秒轮流一遍,你需要某一字元,只要适时松开手指,使它停留在该汉字元上。由于进入该字元到显示它还有一段延迟时间,所以要在前一字元刚出现之时就放手,这要经过练习才能掌握自如。
总计239个字元,按其组字特性,即按后续字元与它的相对位置关系,分为3大类10小类:
(A),左右结构类:包括1,2两类共99个字元,键盘盖板上用绿色标记。在一个字符串中,这类字元后面如果还有1个或两个字元,它就被写在左边1/2或1/3部分中。如〈木又寸〉,第一个〈木〉占左边1/3,第二个〈又〉占余下的2/3中的左边1/2,最后的〈寸〉,因没有后续字元了,故占满余下的1/3,结果组成〈树〉字。
1,类:共19个字元——皮瓦戋虫鱼圭生刂力文欠月页阝ㄗ习乡乚(杨之右旁),它与2类不同的地方仅在于:当一个字符串填满了3个字元,第一个字元属于9类,而以本类字元居最后时,则按笔划顺序,被写作 “故”字状结构(<十口攵>组成“故”)。如〈立口阝〉就自动组成〈部〉字。
2,类:共80个字元,它们是——丩冫<屰忄钅(“兆”之右旁)(“敝”之左旁)才糹犭豸示衤饣(叚之左旁)亻彳禾讠氵足(“卯”之左旁)(“长”字上部)辛艮束丁夕言亥已丿亅丨牙开巨臣方片(佀之右旁)矢幺且屯又七酉缶口贝目耳女子夫巾木火日寸土山石斗车马牛舟人东用冉豕鹿(那之左旁)(印之左旁),其中“讠氵”两字元在键盘盖板上特别加了红色方框,表示它两还有特殊作用:如果一个字符串填满了3个字元,第一个字母又不属于10类,这时处在最后的字元“讠氵”将不参加组字,而只强迫前两个字元成左右结构(“讠”)或上下结构(“氵”)。例如:<白勺讠>组成<的>,<山山氵>组成<出>。
(B),嵌套结构类:包括3——8类共40个字元,在键盘盖板上都用红色标记,它们均要占满余下的整个空间,其后的字元将嵌套其中,如果后面有2个字元,它两的相对关系仍由第一个字元的类别决定。
3,类:共4个字元——了心九(“丹”之外围)。其后的字元将叠加其上,如:<心丿>组成<必>,<(丹之外围)亠>组成<丹>。
4,类:共8个字元——囗内凵(“瓜”之外围)门冂(“风”之外围)大。其后的字元将写在它的中间,如:<囗王>组成<国>,<冂一口>组成<同>。
5,类:共四个字元——辶廴(“断”之左外围)儿,其后的字元将在写在它的右上方,如:<辶丬(“兆”之右旁)>组成<逃>,<廴肀丰>组成<建>。
6,类:共13个字元——耂产(虍字去七)(“伊”字右旁)广疒厂尤户尸(眉字头)斤,其后的字元将写在它的右下方,如:<讠斤、> 组成<诉>,<丨土>组成<在>。
7,类:共8个字元——戊戈弋勺气(“伄”之右旁)⺄,其后的字元将写与他的右下方,如:<勺十用>组成<匍>,<丷(“伄”之右旁)丿>组成<弟>。
8,类:共3个字元——弓(鸟去一)乃,其后的字元将写于它的左下角,如:<(鸟去一)一>组成<鸟>,<(鸟去一)山>组成<岛>。<弓乃>之所以放在此类中,是为了能组成复合字元(“疆”之右旁)(盈字头)。
9,类:共85个字元它们是——曲肀(“兼”字中部)(“曾”字中部)冎巳(“长”字上部)(“象” 字上部)(“象” 字中部)刀刃爫癶千万少乍(“合”字上部)(“充”字上部)厶亡六雨卅尺主夂几毋(“啬”字上部)(“京”去小字)⺧(“寒” 字中部)(“雪”字底)(“曷” 字底)为也巴丂非世弗之其甘矛止穴本氏民米五乙丘王见及发白田西专立皿(“业”去一字)(“巟”字底)乂(“衣”字底)(“长”字底)韦头央夬可由中而两水疋与灬,在一个字符串中,这类字元后面尚有1个或2个字元时,它将被写在上部1/2或1/3部分中,如:<千田>组成<臿>,<千田土>组成<重>。
10,类:共15个字元——小卜⺈艹竹宀冖丶一丷(“兰”字头)十八亠,在一个字符串中,这类字元后面尚有1个或2个字元时,他将被写在上部1/4或1/6部分中,如果是<丶一丷>这三个字元,将被压缩的更多,其目的是使字形紧凑好看,试比较由<丶目><亠田><立日>组成的三个字<自><亩><音>,就可知10类各字元与9类字元相比较有什么特点了。
(2),接续键——5个接续号
原机的SML键被改为接续键,与字元键一样,它也控制着4个接续号——【︻】︼,第5个是由字元“丶”与“】”组成的复合接续号“丶】”。
因为存汉字的字符串数组各字符串长度为3,当一个汉字要由3个以上字元组成时,则必须占用2个以上的字符串。这时除最后一个字符串外,其它字符串的字元都必须用接续号作结尾。虽然,一个汉字可以由数个字符串的字元组成,但输入时仍只按一次ENTER:把所需的字元和接续号都打到显示屏上(一次最多可以打12个),按ENTER键后,机子会自动以接续号分组,存入不同字符串。注意:每组包括最后的接续号在内不能多于3个。接续号除连接2个以上的字符串组成一个汉字外,不同的接续号还有按不同格式组字的作用,所以有时是为了形成合适的字形,特意使用接续号的。
1,左接续号【:以该接续号为结尾的字符串,其字元都写在余下部分的左1/3中。如:
<乡【十乛头>组成<续>,<弓冫【弓冫> 组成<弱>。
2,上接续号︻:以该接续号为结尾的字符串,其字元都写在余下部分的上1/3中。如:<口︻丂>
组成<号>,试比较由<口丂氵>(记着后面的氵使前两个字元变为上下结构)组成的<号>,可见前者字形好,但需2个字符串。
3,右接续号】:以该接续号为结尾的字符串,其字元先写于余下部分的右1/3中。当一个汉字的左边字形,是由2个以上非左右结构的字元组成时,就不可能用左接续号把他们先写于左边;有时虽可写于左边,但笔划比右边的多,却挤在左边1/3中,很不好看。这时,就要违反笔顺习惯,用右接续号先写右边的。如:<力】廿中土>组成<勤>,<尤】(京之上部)小>组成<就>。这个<就>字比由<(京之上部)小【尤>组成的<就> 好的多。
4,下接续号︼:以该接续号为结尾的字符串,其字元先写于余下的部分的下1/3中。有时候之所以要违反笔顺习惯先写下面后写上面,其原因与用右接续号类同。如:<心︼立日>组成(意),这字虽然只由3个字元组成,但因<日>被编在左右结构的2类字元里,<立日心>将被写成“立”字上,“日心”并立在下,字形错了。而按笔顺编码,由<立日︻心>组成的字,上1/3挤一个“音”字,而“心”字却占下2/3。它还可以由<立︻日心氵>组成(意),效果同第一种一样,也只占2个字符串,但要多按一个键。
5,嵌套接续号丶】:当属于3——8类的嵌套结构字元,还有2个以上的后续字元时,也必须用接续号连接。但又不能用上述4种接续号,因为它们只会把嵌套结构字元写到左、上、右、下的1/3中。为此特设置这一复合接续号。有此接续号的字符串中的第一个字元,将占满余下的整个空间,按它所属类别规定后续字符串中的字元应嵌套在哪一部位。1,2类和9,10类字元后也可接嵌套接续号,这时它们也将分别同3和8类一样,其后的字元叠加其上或嵌在左下角。另外,与前4种接续号一样,可以使用多次,形成层层套嵌。如:<辶丶】冂丶】土口氵>就形成<週>字。
(3),转移键——转打原有字符和移动汉字光标
当显示屏上只有汉字光标而无任何字元时,按此键(即原来的SHIFT)即出现?号,这时就暂时退出汉字输入状态,可以打入英文字母和数码等原有字符(双引号“除外)。每次最长能打16个字符,超过部分将不接纳,不管打了多少字符,按了输入键ENTER后,机子只把前16个字符分割为每2个一组。各组都加结尾记号CHR$255,再依次存入一字符串中。若不打任何字符即按ENTER,则如前所述,只存入一个转段换行讯号CHR$255。所有这些情况下,最后按ENTER后都要重返汉字输入状态,重现汉字光标。
当显示屏上已打出字元时,按此键可使光标前移,但最多只能超过最后的字元一格,再按该键则将使光标返回最左端,如果按住不放,将周而复始地自左向右不断移动。这样,可把光标移到任一字元的位置上,然后再敲键,就可以改正光标右边原来输入的错误字元。
当组成一个汉字的相邻两字元是由同一键控制时,打入前一个字元后,也必须按一下转移键,使光标右移一格,才能在光标左边的空格中打入后一个字元。
(4),删插键——抹除、清屏、插入及删去
当显示屏上仅有汉字光标而无字元时,按一下此键,即可把刚写入的一个汉字抹除。如果处在打印状态K=2还会画一方框把该汉字圈去,连续按几次,将抹去最后输入的几个汉字,亦画几次方框,不过后来画的都重叠在第一个上。请注意:每抹去一个汉字时,如果该字前有以CHR$255标记的原机字符及转段换行讯号会全部被一起抹去的。
当刚打过字元键时,按此键可把显示屏上的所有字元清除(被清除的字元尚未被写入),重新打新的字元。
如果已打了部分字元,发现前面漏打几个字元,则可按转移键移动光标到漏打的地方(应超前一格),再按删插键,则从光标左边第一个字元开始,均将右移一格,然后可在光标左边打入应插入的字元。再接连按一下这两个键,又可插入第二个,及至显示屏上总计12格(包括连续号)后,才不能再插入了。
如果按了转移键后再多次按删插键,或按住他不放,则除初按时向右延伸一格外,接着则反而向左缩短,如此可逐一删去光标右边的字元,最后连光标左边的一个字元及光标本身亦消失(按一下转移键可复得之)。这时显示屏上的字元已不见减少,但实际上还会继续把已打入的字元删去。所以作删除键用时要有节制,否则会乱了套。这时必须按一下转移键使出现光标,再按一下任一字元键和删插键,清除乱了套的显示屏,重新开始打正确的。
这样,在不同情况下,删插键有4种不同的功能:
条件 作用
显示屏上无字元 抹去已输入的汉字
显示屏山有字元
刚按过字元键 清除显示屏
刚按过转移键 插入漏打的字元
刚按过删插键 删去多打的字元
六,应用程序实例
——工资管理程序
工资管理程序的文件名PAY亦带后缀,以指明所用主机的RAM区大小,其中PAY-26K可管理256人的工资,PAY-22K是236人,下面介绍的是PAY-18K可管理150人。
用MEREG命令把磁带上的PAY程序接到汉字词语应用系统H5系统之后(该程序文本已附在本说明书之后)。本程序是在加了16RAM的机子中使用的,人名最多可达150,工资细目达9项,前7项是包括基本工资在内的收入项,末2项是扣除项。这些数字存在C$(149,8)×2中,由2个字符的ASCLL码组成一个带2位小数的数,各工资项目合计值则存在数组C(9)中。A$(30)×3中存人名,B$(149,3)×3中存工资级别。P$(30)×3存工资表表名,L$(70)×3中存表头各项目名称,D$(4)×3中存(合计)二字。这3个字符串中的汉字要用手工操作写入,对表头各名称的排列更要经多次调整,如果与后附的样本差别不大,可直接把磁带上录有的这3个字符串数据送入使用。
本程序共有12个标号入口,均以DEF启动,可达到不同目的。这12 个入口的标号及其功能如下:
(1),L:新建——建立各数组,接着出现汉字光标,可打入表名,表头,再转入口Z。如下所述,表名中的单位名和年、月名必须写在P$(30)×3中的一定位置,这也是难写准确的,最好由磁带送入现成的,再改单位名。
(2),N:改单位名——进入本入口即显示汉字光标,改罢单位名即转入口M,此单位名存在P$(30)*3的前7个字符串P$(0)——P$(6)中。显然,单位名不不能太长,如果用不了7个字符串,打完单位名还不退出汉字输入状态,则须打空格来补足。
(3),M:改年、月——对提问(N$=),(M$=),分别输1——2个表示年、月的数码,它们分别存于P$(9),P$(11)中。
(4),Z:更新数据——回答提问(PW?)后,先输出表名表头,对于提问(NN=),输入人数减一,然后逐一输入人名、工资级别(均在汉字输入状态下,每项打毕后都要以转段换行讯号作结尾)及9项工资细目的数值。
(5),X:输出——回答(PW?)时输2,即打出整个工资表,若输1则以显示方式输出。
(6),F:打印数据——可规定起止序号,分别在显示(ll=),(BB=)时打入。本入口不打表名表头,合计也只含打出部分。
(7),G:显示数据——同F,但不打印,且只能规定开始序号,连续按ENTER,将逐一显示人名、级别(汉字字元组成)及各项数值,直到最后一人和合计。
(8),S:查人名——出现汉字光标后,即可打入一个人名,当最后打入转段换行讯号后,机子即去查找,查到后蜂鸣一声而转入口V(不会出现(N=)),否则蜂鸣5声仍反本入口。为了使每次都能找到,不仅打入的人名必须是已输入的,而且其字元组成也必须完全一样。
(9),V:修改细目——显示(N=)时打入一序号,先显示该序号的人名、级别,最后右端显示(J=),应打入要修改的细目之序号,即显示该细目的数值,同时其左边出现?号,可打入新数字修改之。若打入的J值 〉B,则仍反本入口可修改另一个人的。
(10),D:删去——出现(DEL N=)时输入要删去的第一个人的序号,出现(DEL D=)时输入要删去的人数,就可从N起删除D个人的工资。
(11),C:插入——显示(INS N=)时输入插入的位置,出现(INS D=)时输插入的总人数,即可插入D个人的工资于原N号之前。
(12),H:本入口仅重复输出刚输出过的合计这一行。
下面是打印的工资表样本。
旬邑气象站 84年11月份人员工资花名册
N 姓名 级别 工资 生活补贴 奖金 艰苦补贴 洗理费 私车补助 借款 扣房租 扣借款 实发工资
0 王小二 技二 80.56 4.23 2.00 0.00 1.11 2.22 5.21 0.00 2.34 92.99
1 白水泉 技二 80.56 4.23 2.00 0.00 1.11 2.22 5.21 0.00 2.34 92.99
2 田山 技二 80.56 4.23 2.00 0.00 1.11 2.22 5.21 0.00 2.34 92.99
3 林石 技二 80.56 4.23 2.00 0.00 1.11 2.22 5.21 0.00 2.34 92.99
4 叶好龙 技二 80.56 4.23 2.00 0.00 1.11 2.22 5.21 0.00 2.34 92.99
5 米田土 技二 80.56 4.23 2.00 0.00 1.11 2.22 5.21 0.00 2.34 92.99
合 计 483.36 25.38 12.00 0.00 6.66 13.32 31.76 0.00 14.04 557.94
附:工资管理程序 PAY-18K
10:"1":C=B/2.55:C$(I,J)=CHR$(C+1)+CHR$(100*B-255*INT C+1):RETURN
20:"2":C=2.55*ASC C$(I,J)+.01*(ASC RIGHT$(C$(I,J),1))-2.56:RETURN
30:"3":IF K=2USING "######,##":GLCURSOR(0,-85-40*J-12*(J=9)):LPRINT C
40:IF K=1WAIT 60:CURSOR 17:PRINT J;" ";C;" "
50:RETURN
60:"4":A=300:IF K= 2GOSUB "T":CSIZE 2:L=40
70:Z$"P":IF AA=OGOSUB "R"
80:IF AAGOSUB "W"
90:Z$="L":IF K=2GOSUB "E":A=150:CSIZE 1
100:IF AA=0GOSUB "R"
110:IF AAGOSUB "W"
120:RETURN
130:".":IF PEEK 31206<A/14GLCURSOR (0,-550):GOSUB "T":CSIZE 1:RETURN
140:GOSUB "E":RETURN
150:"N":Z$="P":I=0:J=0:B=6:GOSUB"QQ":GOSUB "Y":GOSUB "WW"
160:"M":INPUT "N$=";N$,"M$=";M$:P$(9)=N$+CHR$255:P$(11)=M$+CHR$ 255:END
170:"L":DIM P$(30)*3,L$(70)*3,A$(152,6)*3,B$(152,3)*3,C$(152,8)*2,D$(4)*3
180:DIM E$(6)*3,Z$(5)*3,C(9):AA=1:K=2
190:"=":GOSUB "4":AA=1:INPUT "NN=";NN:II=0:BB=NN:GOTO"8"
200:"Z":CLS :AA=0:INPUT "PW?";K:GOTO "="
210:"X":CLS :AA=0:INPUT "PW?";K:GOSUB"4":II=0:BB=NN:GOTO"8"
220:"G":CLS :AA=0:K=1:WAIT 0:INPUT "II=";II:BB=NN:GOTO"B"
230:"F":GOSUB "T":AA=0:K=2:A=240:CSIZE I:INPUT "II=";II,"BB=";BB:GOTO "8"
240:"S":Z$="E":K=3:GOSUB "Y":GOSUB "W":FOR I=0TO NN:FOR J=0TO 8:IF E$(J)<>A$(I,J)NEXT I:BEEP 5:GOTO "S"
250:IF ASC A$(I,J)<>255AND J<9NEXT J
260:BEEP 1:GOTO "5"
270:"V":CLS:INPUT "N=";I:IF I>NNGOTO "Z"
280:"5":K=1:CLS:WAIT 0:PRINT STR$ I;:Z$="A":J=0:B=9:GOSUB"RR"
290:"6":CURSOR 19:INPUT "J=";J:IF J>BGOTO "V"
300:GOSUB"2":CURSOR 21:PRINT C;" ":CURSOR 18:INPUT B:GOSUB "1"
310:GOTO "6"
320:"C":CLS:INPUT "INS N=";N,"INS D=";D:NN=NN+D:II=N:AA=1:BB=N+D-1
330:FOR I=NNTO N+DSTEP -1:GOTO "7"
340:"D"CLS:INPUT "DEL N=";N,"DEL D=";D:NN=NN-D:D=-D:II=N-1:AA=0:K=1:BB=NN:FOR I=NTO NN
350:"7"FOR J=0TO B:IF J<4THEN LET B$(I,J)=B$(I-D,J)
360:C$(I,J)=C$(I-D,J):NEXT J:NEXT I
370:"B":A=240:FOR I=0TO 9:c(I)=0:NEXT I:IF K=2GOSUB "E"
380:"9":KK=65:IF K=2LPRINT STR$ II:L=20
390:IF K=1PRINT STR$ II;
400:"0":I=II:J=0:B=8:Z$=CHR$ KK:IF AAGOSUB "WW"
410:IF AA =0GOSUB "RR"
420:KK=KK+1:IF KK<67THEN LET L =70:GOTO "0"
430:I=II:O=0:USING :FOR J=0TO 8:IF AAWAIT 0:CLS :USING :PRINT J;:CURSOR 8:INPUT B:GOSUB"1":WAIT
440:GOSUB"2":GOSUB"3":C(J)=C(J)+C:D=D+C*SGN (6.5-J):NEXT J:C(9)=C(9)+D:C=D:GOSUB"3"
450:IF K=2GOSUB "."
460:II=II+1:WAIT 0:IF II<=BBGOTO "9"
470:"H":Z$="D":IF K=2GOSUB ".":A=300:L=20
480:GOSUB "R":CSIZE 1:FOR I=0TO 9:IF K=1 WAIT 60:PRINT I,C(I)
490:IF K=2GLCURSOR (0,-80-40*I-12*(I=9)): LPRINT C(I)
500:NEXT I