欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

文字處理及復(fù)合字符處理的方法

文檔序號(hào):99707閱讀:979來(lái)源:國(guó)知局
專(zhuān)利名稱(chēng):文字處理及復(fù)合字符處理的方法
以下所引述的專(zhuān)利申請(qǐng)與本申請(qǐng)具有相關(guān)的主題并與本申請(qǐng)轉(zhuǎn)讓給同一受讓人,其內(nèi)容結(jié)合在此作為參考,該美國(guó)專(zhuān)利申請(qǐng)的名稱(chēng)為“文字處理及文本排版方法”,發(fā)明人是Robert M.Carosso其申請(qǐng)?zhí)枮楸景l(fā)明涉及一種進(jìn)行文字處理的方法,具體地說(shuō),涉及一種操作并輸出復(fù)合字符的方法。
其它的文字處理系統(tǒng)也能夠由一個(gè)操作者向該系統(tǒng)輸入文本,對(duì)文本進(jìn)行編輯和修改,然后用一個(gè)輸出裝置打印該文本,該輸出裝置可以是一個(gè)點(diǎn)陣打印機(jī),一個(gè)字母式打印機(jī),一個(gè)行式打印機(jī)或是一個(gè)激光打印機(jī)。這些輸出裝置中絕大多數(shù)都可在打印一行信息時(shí)產(chǎn)生一組固定的字符。這種字符組被稱(chēng)為字根,它們依賴(lài)于特定的裝置,一個(gè)打印機(jī)在它的字根內(nèi)可以有129個(gè)字符,96個(gè)字符,或其它預(yù)定數(shù)目的圖形字符。在這些字根中通??梢园l(fā)現(xiàn)不同的標(biāo)點(diǎn)符號(hào)以及大寫(xiě)和小寫(xiě)字母和從1到0的數(shù)字。
由于這些輸出裝置在它們的字根內(nèi)的字符數(shù)目有限,經(jīng)常會(huì)發(fā)生在一個(gè)輸出裝置上打印文件時(shí),該輸出裝置的字根內(nèi)沒(méi)有所需要的一個(gè)特殊的圖形符號(hào)。這種情況可發(fā)生在用一個(gè)標(biāo)準(zhǔn)的美國(guó)字符組來(lái)輸出一個(gè)某些字符上帶有注音號(hào)的外文文件時(shí)。在這種情況下,經(jīng)常是在該輸出裝置的字根中有所需要的所有圖形字母并且它們都被使用,而且該字根中還可能包括一個(gè)可用作注音符號(hào)的標(biāo)點(diǎn)符號(hào)。因此,字母和注音符號(hào)均可打印在同一位置上,以便在輸出文件中可產(chǎn)生出所需要的有注音符的字母。至少一個(gè)已知的系統(tǒng)表明可提供這種能力,它使操作者能夠先輸入一個(gè)字符,隨后退一格再輸入第二個(gè)字符,例如為了打印一個(gè)其上有注音符的A,操作者先輸入A,然后退一格,然后再輸入注音符,這樣將在輸出文件中打印出一個(gè)其上有注音符的A。
這種方案雖然在某些情況下可行,但并非在所有情況下一定可行,甚至可能產(chǎn)生完全不希望的結(jié)果。例如,人們可能希望在一個(gè)大寫(xiě)的A之上較高的垂直位置上有注音符而在同一行內(nèi)的一個(gè)小寫(xiě)的a之上的一個(gè)較低的垂直位置上有注音符。與此類(lèi)似,例如,當(dāng)所用輸出裝置的圖形符號(hào)組中僅包括句號(hào)而不包括冒號(hào)時(shí),若希望在打印的文件中產(chǎn)生一個(gè)冒號(hào),該方法將不允許在一個(gè)句號(hào)之上較高的垂直位置上打上另一個(gè)句號(hào)以產(chǎn)生一個(gè)冒號(hào)。
因此,所希望的是一種改進(jìn)的方法,利用該方法可通過(guò)在同一字符位置上重打上兩個(gè)或多個(gè)字符以產(chǎn)生一個(gè)復(fù)合的或合成的字符。
該方法利用輸出裝置的字符組中的單個(gè)圖形字符,將使輸出裝置中的有限的一組字符能夠用于產(chǎn)生復(fù)合的字符。
因此,本發(fā)明的一個(gè)目的是提供一種方法,用兩個(gè)或多個(gè)現(xiàn)有的字符構(gòu)成新的字符來(lái)擴(kuò)展一個(gè)輸出裝置的有限的字符組。
本發(fā)明的另一個(gè)目的是提供一種產(chǎn)生復(fù)合字符的方法,該方法允許一個(gè)復(fù)合字符的單個(gè)分量字符之間的水平定位。
本發(fā)明的再一個(gè)目的是提供一種產(chǎn)生復(fù)合字符的方法,該方法允許一個(gè)復(fù)合字符的單個(gè)分量字符之間的垂直定位。
本發(fā)明的再一個(gè)目的是提供一種處理復(fù)合字符的方法,該方法不依賴(lài)于將要打印這些字符的特定輸出裝置。
本發(fā)明的再一個(gè)目的是提供一種處理復(fù)合字符的方法,該方法使處理時(shí)間為最短。
本發(fā)明在以下所附的權(quán)利要求
書(shū)中具體限定。結(jié)合附圖參閱以下說(shuō)明可以理解本發(fā)明的上述的以及進(jìn)一步的目的和優(yōu)點(diǎn)。
本方法用一個(gè)輸出裝置的字符組內(nèi)現(xiàn)存的字符來(lái)合成復(fù)合字符,該方法包括一個(gè)預(yù)定的字符變換表,該表可用于將一個(gè)輸入字符與一個(gè)或多個(gè)輸出字符相映射。字符變換表包括為使輸出裝置打印頭在單個(gè)字符的打印之間進(jìn)行的水平和垂直位移所提供的信息。字符變換表還包括字符寬度和打印密度信息。當(dāng)利用字符變換表將輸入字符變換為輸出字符時(shí),在字符的每一復(fù)合分量中都設(shè)置一個(gè)指示以表示除了第一個(gè)分量外其它的分量都只是一個(gè)復(fù)合字符的一個(gè)分量。這就允許一個(gè)復(fù)合字符包括兩個(gè)或多個(gè)單獨(dú)的分量,它們由文本處理程序作為一個(gè)單個(gè)字符來(lái)操作。
本發(fā)明的方法的實(shí)施方式和制作本發(fā)明的裝置的方式及其工作方式可在以下結(jié)合附圖進(jìn)行的詳細(xì)描述中得到最好的理解,在幾張附圖中相同的參考號(hào)表示了相同的元素,其中圖1是一個(gè)能夠執(zhí)行文字處理程序的現(xiàn)有技術(shù)的硬件系統(tǒng)示意圖。
圖2是一個(gè)文字處理程序的打印程序流程圖。
圖3是圖2的打印程序所用的縱欄程序的流程圖。
圖4是圖3的縱欄程序所用的校對(duì)程序的流程圖。
圖5是圖4的校對(duì)程序所用的擴(kuò)展分布的流程圖。
圖6是圖2的打印程序所用的字符變換表的方框圖。
圖7是圖2的打印程序所用的鏈?zhǔn)綑谛畔K(CIB)的方框圖。
圖8是應(yīng)打印的正文及其對(duì)應(yīng)的文件正文緩沖器的一個(gè)實(shí)例。
圖9是對(duì)應(yīng)于圖8中的實(shí)例在校對(duì)前的字符記錄鏈。
圖10是圖9中的實(shí)例在校對(duì)后的字符記錄鏈。
圖11是與圖10中字符鏈的實(shí)例相對(duì)應(yīng)的鏈接排隊(duì)輸出信息塊。
現(xiàn)代文字處理機(jī)給用戶(hù)提供了一種十分有力而又使用簡(jiǎn)便的工具,操作員可以用它建立、修改、貯存和打印任何種類(lèi)的打印信息或資料。
硬件結(jié)構(gòu)圖1表示一種典型的現(xiàn)有技術(shù)的硬件結(jié)構(gòu),它可以執(zhí)行包含本發(fā)明的文字處理程序。圖1的硬件系統(tǒng)可以是一個(gè)個(gè)人計(jì)算機(jī)、小型計(jì)算機(jī)或是大型計(jì)算機(jī),這對(duì)本發(fā)明沒(méi)有影響。圖1的硬件系統(tǒng)可以用于建立和印制資料。
為了建立資料,操作員要使用鍵盤(pán)103,該鍵盤(pán)與打字機(jī)的鍵盤(pán)相似。資料的每一頁(yè)都在一個(gè)象電視一樣的屏幕或監(jiān)視器101上顯示出來(lái),這就使操作員能夠看見(jiàn)在印到紙上以前被打字的內(nèi)容。如果操作員造成錯(cuò)誤,他就可以返回來(lái)重打一遍,而無(wú)需使用修正帶或擦除裝置去改正差錯(cuò)。文字處理系統(tǒng)自動(dòng)地將資料的正文對(duì)齊,當(dāng)正文正是所需要的內(nèi)容時(shí),就用文字處理系統(tǒng)將資料在打印機(jī)109上印出來(lái)。在印制前,資料被作為文字處理文件保存在可以貯存它的磁盤(pán)107上,如果需要該資料或者要修改并進(jìn)行打印,可以過(guò)后予以印制。文字處理程序本身在中央處理機(jī)105中執(zhí)行,105即包括算術(shù)邏輯運(yùn)算部件也包括主存儲(chǔ)器。
典型的文字處理系統(tǒng)可與各種式樣的打印機(jī)配套。最佳實(shí)施方案的文字處理系統(tǒng)可以配用行式打印機(jī)、陣列打印機(jī)以及字母質(zhì)量打印機(jī),字母質(zhì)量打印機(jī)使操作員能夠選擇不同形式的資料打印外觀十、十二或十五個(gè)間距,或者成比例間隔的形式。另外,這些打印機(jī)一般都可以配裝各種規(guī)格的紙,可以是單張或是連續(xù)形式以及封皮。
典型的文字處理系統(tǒng)為制作和控制資料輸入和印制提供了各種操作及性能。最佳實(shí)施方案的文字處理系統(tǒng)借助使用菜單指導(dǎo)操作員進(jìn)行整個(gè)文字處理操作。在監(jiān)視器101上,菜單呈現(xiàn)為一個(gè)選擇表,文字處理系統(tǒng)使操作員能夠決定那一項(xiàng)操作是所需要的,并讓操作員利用鍵盤(pán)103進(jìn)行適當(dāng)?shù)幕卮?。借助這些菜單,操作員從一開(kāi)始就控制資料的建立以及修訂步進(jìn),直到最后印出副本。在較佳實(shí)施方案的文字處理系統(tǒng)中,采用本發(fā)明的打印程序提取貯存在磁盤(pán)107上的文字處理資料,并在打印機(jī)109上輸出以前對(duì)它進(jìn)行編排。
編輯和打印功能最佳實(shí)施方案的文字處理系統(tǒng)可以分為兩個(gè)基本的功能,編輯功能和打印功能。編輯功能靠編輯程序?qū)崿F(xiàn),而打印功能靠打印程序?qū)崿F(xiàn)。在編輯程序開(kāi)始時(shí),就顯示出一個(gè)菜單,使操作員可以開(kāi)始建立、編輯或修改資料。在打印程序開(kāi)始時(shí),也顯示出一個(gè)菜單,使操作員能夠選擇各種打印功能。
在最佳實(shí)施方案中,在菜單上的每個(gè)功能都被編號(hào)。在菜單底部的選擇字段內(nèi)適當(dāng)?shù)奈恢糜幸粋€(gè)閃亮的光標(biāo),該光標(biāo)總是表示操作員正在菜單上進(jìn)行選擇或正在進(jìn)行正文打字時(shí)在屏幕上相應(yīng)的位置。在操作員打字時(shí),光標(biāo)位置即指示下一個(gè)字符將在屏幕(即監(jiān)視器101)上要顯示的位置。在菜單上的選擇字段內(nèi),操作員只需簡(jiǎn)單地按下他要執(zhí)行的功能的編號(hào)。
每次操作員顯示文字處理菜單時(shí),在屏幕上顯現(xiàn)的大部分回答字段都包括缺省的回答,這節(jié)省了操作員的時(shí)間,否則還要完成整個(gè)字段的操作。每個(gè)缺省都被認(rèn)為是響應(yīng)于每個(gè)回答字段的最一般的用戶(hù)。操作員可以承認(rèn)缺省回答或在必要是對(duì)它進(jìn)行修改。
編輯程序操作員使用編輯程序去建立或修改資料。一分資料是一頁(yè)或多頁(yè)正文,且操作員已給資料命名。操作員必須給資料命名,以便過(guò)后當(dāng)操作員要對(duì)它檢索以再進(jìn)行編輯或打印時(shí),文字處理系統(tǒng)知道要檢索的是哪一份資料。
在該系統(tǒng)中,對(duì)每一個(gè)被建立的新資料都要提供資料摘要,用資料摘要進(jìn)一步識(shí)別操作員將要打字的新資料。在資料摘要中大部分回答字段都呈現(xiàn)為缺省值。這些回答字段包含資料打印的具體指示。在開(kāi)始打印資料時(shí),可以在建立或修改資料的時(shí)候改變這些回答字段。
a.狀態(tài)和格式行在最佳實(shí)施方案的文字處理系統(tǒng)中,在屏幕的頂部顯示有兩行字符,它們是狀態(tài)行和格式行。每當(dāng)操作員打字或編輯一個(gè)資料時(shí),它們總是在屏幕上顯示出來(lái)。狀態(tài)行顯示出操作員正在觀察的資料名稱(chēng),并且告訴操作員在資料中光標(biāo)的位置、頁(yè)號(hào)、行號(hào)以及在行上的欄的位置。
在狀態(tài)行下是格式行。該行指示出操作員已選定的標(biāo)記(tabs)的位置以及該頁(yè)正文的行長(zhǎng),很象打字機(jī)的功能。格式行確定標(biāo)記、dectabs以及右部邊界(當(dāng)需要右對(duì)齊時(shí))的位置,還確定用于打印留空的專(zhuān)用線的位置。該格式行在狀態(tài)行的下方顯示。調(diào)節(jié)字符間隔的線表示行間的間隔,1表示單間隔,2表示雙間隔。標(biāo)號(hào)字符表示在縱欄的不同部位處所確定的標(biāo)記的位置。返回字符或字母J可以用以表示右部邊界。在打印過(guò)程中,字母J被用來(lái)規(guī)定在格式下邊正文右部對(duì)齊的位置,這與在資料摘要或打印菜單上是否已選定對(duì)齊位置無(wú)關(guān)。
b.資料文件每當(dāng)使用最佳實(shí)施方案的文字處理系統(tǒng)建立資料時(shí),在磁盤(pán)107上就產(chǎn)生資料文件。該資料文件包含三種形式的信息。它包括資料摘要信息,其中還包括由打印程序用于控制資料打印的信息。它包括資料正文本身,它可以包括插入在它里邊的指示那些字行需要縮進(jìn)一、二字的信息以及指示正文的各個(gè)部分的上標(biāo)或下標(biāo)、正文歸中等各種格式信息。該資料文件還包括格式記錄(行),它指示用于使正文在各頁(yè)上對(duì)齊的格式。
c.格式行當(dāng)操作員建立一個(gè)資料時(shí),一個(gè)預(yù)定的缺省格式行被抄入資料文件中。這個(gè)起始格式行包含被規(guī)定為該裝置的最一般的位置的定位。但是操作員可以改變這些格式,以適應(yīng)它們每一個(gè)資料的專(zhuān)門(mén)的需要。操作員也可以在他們打字或編輯資料時(shí),在正文中他們需要的任何位置建立新的格式行,可以在一頁(yè)上的任意兩行之間或在一頁(yè)的第一行之前建立格式。建立格式的任何改變都只影響與它們有聯(lián)系的那些資料。改變?cè)谖木鋬?nèi)的格式行只影響在該格式行以后直至遇到正文內(nèi)下一個(gè)格式行之間的正文。
如上所述,格式行能夠控制資料的間隔。在最佳實(shí)施方案的文字處理系統(tǒng)中,行的分隔可以被確定為四分之一間隔、半間隔、無(wú)間隔(復(fù)打印)、單間隔、一個(gè)半間隔、雙間隔或三間隔。在打印資料時(shí),空格行對(duì)資料也有影響。在屏幕上的顯示總是呈現(xiàn)為單間隔。
格式行標(biāo)記的定位可以用于改變?cè)谝恍兄姓牡乃轿恢?。在格式行?nèi)右部邊界的定位,可用于確定在一行中最右邊的那個(gè)字符的縱欄所需的位置。格式行也可以用于對(duì)右端對(duì)齊進(jìn)行限定,在打印出資料時(shí)形成整齊的右部邊界。在打印輸出過(guò)程中,由包括右端對(duì)齊指示器的格式行控制的所有正文,在打印時(shí)其右端及左端邊界都是對(duì)齊的。利用dectabs對(duì)位字符上述格式行也可用于對(duì)編號(hào)或名稱(chēng)欄對(duì)位,dectabs對(duì)位字符可以是小數(shù)點(diǎn)、逗號(hào)或者冒號(hào)。
操作員可以在資料正文內(nèi)任何位置設(shè)置一個(gè)新的格式行。例如,如果操作員正在對(duì)一個(gè)表格打字,該表格需要一些專(zhuān)門(mén)標(biāo)記的位置,而操作員又不愿意改變當(dāng)時(shí)的格式行的位置;此時(shí)操作員就可以為表格制作一個(gè)新的格式,并且在完成該表格時(shí)建立另一格式行,以便回到原來(lái)位置。
d.文字銜接(Wrap)最佳實(shí)施方案的文字處理系統(tǒng)具有一種文字銜接性能,它可以使操作員連續(xù)打字而無(wú)需擔(dān)心各行的末尾。當(dāng)操作員打印到一行的末尾時(shí),該系統(tǒng)會(huì)自動(dòng)地將光標(biāo)及正被打字的字(不安置在該行)移到下一行左部邊界處。
e.要求間隔一個(gè)所要求的間隔就是一個(gè)專(zhuān)門(mén)的間隔字符,該字符位于文字銜接界限以外。位于所要求的間隔的兩側(cè)的字或字符,在右端都不會(huì)被文字銜接性能分開(kāi)。操作員靠打入所要求的間隔,可以保證正文中的兩個(gè)或更多的專(zhuān)門(mén)的字(或字符)繼續(xù)留在同一行上。例如,日期1985年11月19日(November 19,1985)可以通過(guò)文字銜接在“11月”和“19日”之間分開(kāi);如果操作員在這兩個(gè)所要求的字之間設(shè)置一個(gè)間隔字符,則文字銜接就決不會(huì)將“11月”和“19日”分到兩行中;如果操作員希望將這個(gè)保護(hù)作用擴(kuò)展到“1985年”,他就可以在逗號(hào)和“1985年”之間打下另一個(gè)所要求的間隔。
在擴(kuò)展右對(duì)齊功能時(shí),一個(gè)所要求的間隔即被視為是一個(gè)正常的非間隔符。如果在字符之間發(fā)生擴(kuò)展,所要求的間隔將隨著字符的其余部分同時(shí)擴(kuò)展。如果在文字(即在間隔上)之間發(fā)生擴(kuò)展,此時(shí)所要求的間隔將不擴(kuò)展。
f.格式化正文的輸入在輸入正文時(shí),可以象在打字機(jī)上一樣使用鍵盤(pán)103上的標(biāo)記鍵。每次操作員按下標(biāo)記鍵時(shí),標(biāo)號(hào)字符就在正文中置位,并且同時(shí)在屏幕上顯示出來(lái)。光標(biāo)跨移到該格式行的下一個(gè)標(biāo)記位置。如果在光標(biāo)位置和右部邊界之間沒(méi)有保留的終止標(biāo)記時(shí)按下標(biāo)記鍵,則標(biāo)記字符就被置位在下一行的第一欄中,并且光標(biāo)移動(dòng)到該行的第一個(gè)終止標(biāo)記處。在輸入正文時(shí),操作員使用歸中鍵將正文(如標(biāo)題)歸在一行的正中。該系統(tǒng)可以根據(jù)在格式行內(nèi)確定的邊界計(jì)算出行的中心位置。當(dāng)按下對(duì)中鍵時(shí),對(duì)中字符就在正文中置位,并且在屏幕上顯示出來(lái)。集中于邊界以?xún)?nèi)的正文的末尾可利用返回鍵予以確定。
在進(jìn)行數(shù)字欄打字時(shí),例如若用小數(shù)點(diǎn)的話,操作員用dectabs鍵將小數(shù)標(biāo)記字符排齊。在格式行中,小數(shù)點(diǎn)與相應(yīng)的標(biāo)記位置對(duì)準(zhǔn)。如果數(shù)字沒(méi)有小數(shù)點(diǎn),則該系統(tǒng)呈現(xiàn)為小數(shù)點(diǎn)在數(shù)字的右邊出現(xiàn),并且與該數(shù)字排齊,好象實(shí)際上打了一個(gè)小數(shù)點(diǎn)一樣。
在輸入正文時(shí),操作員使用上-下標(biāo)鍵指示正文中上標(biāo)和下標(biāo)的位置,進(jìn)行上標(biāo)和下標(biāo)字符打字,并且在屏幕上正文中操作的相應(yīng)顯示點(diǎn)顯示出字符。以此來(lái)命令打印機(jī)從正在打印行期上或期下移動(dòng)一行的三分之一,于是在被打印的資料中建立出上標(biāo)或下標(biāo)。每個(gè)帶上標(biāo)文本都應(yīng)該跟隨著一個(gè)下標(biāo)字符,反過(guò)來(lái)也一樣。這就可以保證其余的正文返回到基本打印行。僅在印制過(guò)程中給正文加以上標(biāo)或下標(biāo),并且不在屏幕上呈現(xiàn)同樣的顯示。在屏幕上打印出連續(xù)的下標(biāo)字符,即將打印機(jī)在紙上向上移動(dòng)一行的三分之一。對(duì)于每個(gè)打入的上標(biāo)字符,正文中都必須跟隨著同樣數(shù)字的下標(biāo)字符。
g.多欄打印最佳實(shí)施方案的文字處理系統(tǒng)可以進(jìn)行多欄印制。多欄印制允許操作員在打印紙上的一面上邊靠邊地印制兩個(gè)或更多的正文欄。當(dāng)以多欄的格式印制資料時(shí),在打印紙的一面上每頁(yè)資料就是肯個(gè)欄。任何資料都可按多欄格式印制,但是多欄的作用是通過(guò)在打印紙的一個(gè)(實(shí)際的)面上安排兩個(gè)或更多的資料的(邏輯上的)頁(yè)實(shí)現(xiàn)的。例如,如果操作員以?xún)蓚€(gè)欄的格式打印資料的1到4頁(yè),則實(shí)際上只打印兩張紙,資料的1和2頁(yè)打印在第一個(gè)雙欄頁(yè)上(1頁(yè)在左欄,2頁(yè)在右欄),資料的3和4頁(yè)打印在第二個(gè)雙欄頁(yè)上(3頁(yè)在左欄,4頁(yè)在右欄)。
如果在每頁(yè)資料的格式行中,右部邊界沒(méi)有適當(dāng)?shù)卣{(diào)整(過(guò)窄),其結(jié)果則無(wú)法預(yù)料。因此,在打印一分資料之前,應(yīng)對(duì)該資料進(jìn)行適當(dāng)?shù)幕I劃。在準(zhǔn)備以多欄形式打印資料時(shí),操作員應(yīng)注意到如下規(guī)則1、將格式行的右部邊界調(diào)整到該欄的寬度。在實(shí)際的打印紙面上,每頁(yè)資料只是一欄。
2、在每頁(yè)資料上的行號(hào)不必是相同的。在多欄印制的過(guò)程中,當(dāng)一個(gè)頁(yè)字符在一個(gè)欄(邏輯頁(yè))中沖突時(shí),在該欄中不會(huì)再打印,其它欄則繼續(xù)印制。當(dāng)頁(yè)字符在最長(zhǎng)的欄中遇到時(shí),該多欄的印制即告結(jié)束,并且開(kāi)始印制下一個(gè)多欄頁(yè)。
3、控制一分資料中具體某一頁(yè)的格式行,也控制其相應(yīng)欄的格式。
4、多欄頁(yè)印制可以與單欄的印制頁(yè)結(jié)合一起進(jìn)行,其方法可以是加寬代表最左側(cè)欄的頁(yè)中格式行的右部邊界,并且制作代表另外欄的空格的頁(yè)。
5、帶有頭和尾的頁(yè)的寬度應(yīng)與紙的寬度配合。
分段及邊界對(duì)齊性能使操作員能夠在多欄印制的資料中擊入專(zhuān)門(mén)的代碼,以使得在印制資料時(shí)將正文的各段或其他部分在該頁(yè)上依水平方向?qū)R。
h.頁(yè)首(Header)和頁(yè)尾(Footer)根據(jù)資料的類(lèi)型,經(jīng)常需要在印制的每一頁(yè)的頂部或底部印制規(guī)范的信息。利用頁(yè)首和頁(yè)尾的功能,操作員就能自動(dòng)地在一分資料的每一頁(yè)上或所選定的連續(xù)的一些頁(yè)上打印出這樣的信息章或節(jié)的題目,鉛字條相應(yīng)的注解以及頁(yè)號(hào)。該最佳實(shí)施方案的文字處理系統(tǒng)允許每分資料有一個(gè)頁(yè)首和一個(gè)頁(yè)尾。
i.腳注該最佳實(shí)施方案的文字處理系統(tǒng)具有一種性能,不需要在各頁(yè)的底部打印上作為參考的腳注,而是將它們都打印在一個(gè)單獨(dú)的參考頁(yè)上,且在印制過(guò)程中腳注自動(dòng)地印在正確頁(yè)的底部。一個(gè)腳注引用可以包括一個(gè)到三個(gè)字母數(shù)字字符,這些字符標(biāo)識(shí)出要加以腳注的正文。在印制資料時(shí),腳注引用及腳注正文的標(biāo)識(shí)符都作為數(shù)碼被印出。
j.其他打印選擇除了使操作員能夠控制以多欄格式印制資料的指令以外,在輸入資料時(shí)還可以應(yīng)用專(zhuān)門(mén)的鍵序,它表現(xiàn)為在打印過(guò)程中的資料正文中的格式信息,以調(diào)入專(zhuān)門(mén)的字符打印。這些專(zhuān)門(mén)的印制選擇包括黑體打印,即使每個(gè)字符打印兩次,以造成加黑的外觀;偏移打印,即在稍微偏移的位置上將字符打印兩次,造成打印的黑影;復(fù)(overstrike)打印,即在任一個(gè)字符上打印一個(gè)斜線字符,以及在正文下邊劃線以強(qiáng)調(diào)重點(diǎn)的快速方式,以使操作員不必用手再去做這項(xiàng)工作。
打印程序一旦操作人員建立完一個(gè)資料或者編輯完一個(gè)現(xiàn)有資料時(shí),他就可以退出編輯程序,然后再進(jìn)入打印程序把資料打印出來(lái)。
當(dāng)一個(gè)資料被建立起來(lái)并使磁盤(pán)107上存在一個(gè)文字狀理資料后,操作人員就可以使用文字處理系統(tǒng)中的打印程序在打印機(jī)109上打印這個(gè)建立起來(lái)的資料,操作人員可以在字母質(zhì)量打印機(jī)、高速行式打印機(jī)或者點(diǎn)陣式打印機(jī)上打印出該資料,這取決于文字處理現(xiàn)場(chǎng)所具有的具體設(shè)備。
a.打印菜單打印操作開(kāi)始以后,監(jiān)視器101顯示出一打印菜單。這個(gè)菜單允許操作人員根據(jù)要打印的具體要求修正打印指令。該菜單允許操作人員指定下列信息要用的打印機(jī);每頁(yè)的拷貝數(shù);正文打印開(kāi)始和結(jié)束的頁(yè)號(hào);封頁(yè)打印開(kāi)始和結(jié)束的頁(yè)號(hào);欄數(shù);左邊欄的邊界;頁(yè)式打印的第一個(gè)頁(yè)號(hào);紙的長(zhǎng)度;頭部和尾部的打印位置;連續(xù)腳注打印的起始號(hào)碼,間距(每英寸10、12或15個(gè)字符);饋紙選擇;每英寸行數(shù)選擇;右邊整版;試樣打印;打印正文中的注釋;打印文件概要及合并打印。要打印的文件的名稱(chēng)出現(xiàn)在該打印菜單的頂端。上述打印菜單中的信息區(qū)中還含有缺省值,這些缺省值允許操作人員既可以接受屏幕上的打印菜單,又可以改變上述的參數(shù)表。
b.打印程序流程打印程序的總流程是輸入-處理-輸出的過(guò)程。首先,打印程序從存貯在磁盤(pán)107上的文字處理資料接受資料正文和有關(guān)正文的信息;然后,打印程序把這個(gè)正文轉(zhuǎn)換成一種規(guī)范的、或者說(shuō)標(biāo)準(zhǔn)的格式,以便于用不受正文源和輸出終端制約的同一內(nèi)部處理程序?qū)λ右蕴幚怼I厦娴妮敵鼋K端也就是指打印上述正文的特定類(lèi)似的打印機(jī)。最后,打印程序把處理完畢的規(guī)范格式的資料傳送給一個(gè)合適的與終端有關(guān)的輸出程序,這個(gè)程序被設(shè)計(jì)成把規(guī)范格式快速轉(zhuǎn)換成特定的輸出裝置(打印機(jī))所要求的格式。
圖2中示出了打印程序的主程序,該程序控制打印程序的總流程。
這個(gè)主程序如下總初始化、預(yù)置打印機(jī)特性(Profile)、預(yù)置字符轉(zhuǎn)換表、產(chǎn)生格式饋送、打印文件概要、復(fù)制循環(huán)、合并打印、輸出程序、清除并退出狀態(tài)程序。
在總初始化期間,各種錯(cuò)誤指示符、狀態(tài)指示符均被初始化、輸入文件和輸出設(shè)備也被初始化。輸入文件指定打印出哪個(gè)文字處理資料,輸出設(shè)備指定在哪個(gè)輸出設(shè)備上打印出上述資料。上面的輸入文件和輸出設(shè)備由使用打印菜單與操作人員進(jìn)行的人機(jī)對(duì)話來(lái)確定。一旦輸出設(shè)備確定之后,就可以從字符變換文件裝入要使用的特定打印機(jī)的字符變換表(CMT)。文字變換文件包括本系統(tǒng)內(nèi)具有的每種打印機(jī)的字符變換表。在初始化期間還建立起一個(gè)打印控制程序塊,打印程序使用這個(gè)程序塊來(lái)控制資料的打印。表1示出了打印控制程序塊,其中的一些信息是從把資料打入系統(tǒng)時(shí)建立的文字處理文件中的資料概要中得到的。如果需要的話,操作人員可以使用打印菜單對(duì)信息進(jìn)行更改。
表1打印控制程序段(P~B)輸出設(shè)備的邏輯資源號(hào)(LRN)拷貝數(shù)欄數(shù)要打印的第一頁(yè)要打印的最后一頁(yè)最后合并頁(yè)要打印的第一封面頁(yè)要打印的最后封面頁(yè)文件總頁(yè)數(shù)總合并頁(yè)起始頁(yè)號(hào)欄左邊的邊緣列陣紙長(zhǎng)每頁(yè)上的首行起始位置每頁(yè)上的首字起始位置每頁(yè)上的末行起始位置每頁(yè)上的末字起始位置;
起始腳注號(hào);
水平移動(dòng)索引(HMI);
垂直移動(dòng)索引(VMI);
打印機(jī)種類(lèi);
饋送順序;
字形;
比例打印標(biāo)志;
右邊整版標(biāo)志;
試樣拷貝標(biāo)志;
注釋打印標(biāo)志;
文件概要打印標(biāo)志;
合并打印標(biāo)志;
記錄處理用的格式資料標(biāo)志;
記錄處理用的表列資料存在標(biāo)志;
縮寫(xiě)文件標(biāo)志;
文字處理臨時(shí)資料標(biāo)志。
操作人員使用打印菜單可對(duì)打印控制程序塊中的各種參數(shù)進(jìn)行更改。最佳實(shí)施例中的打印菜單中的這一項(xiàng)目可允許操作人員指定下列參數(shù)a.打印隊(duì)列名在一個(gè)文字處理系統(tǒng)中,每個(gè)打印機(jī)都被賦予一個(gè)特定的隊(duì)列名。缺省打印次序在操作人員登記時(shí)就已確定。缺省打印隊(duì)列字段中的名稱(chēng)指定了打印資料的(輸出設(shè)備)隊(duì)列。操作人員用其它有效的打印隊(duì)列名重打缺省打印隊(duì)列就可以對(duì)它進(jìn)行更改。如果其它資料正等待使用同一輸出設(shè)備,則要打印的資料必須等待。
b.拷貝數(shù)這個(gè)字段指定待打印的資料中操作人員所期望的每頁(yè)資料的拷貝數(shù)。操作人員可以要求1到63張拷貝。
c.正文打印的起始、終止頁(yè)這個(gè)三位數(shù)字組成的字段指定了資料中開(kāi)始打印和終止打印的頁(yè)號(hào)。如果操作人員指定從0頁(yè)打印到999頁(yè),那么所有的頁(yè)都將打印出來(lái);如果操作人員指定從第3頁(yè)開(kāi)始打印到第3頁(yè),那么只有第3頁(yè)才被打印出來(lái)。
d.封面打印的起始、終止頁(yè)這個(gè)三位數(shù)字字段指定了封面打印的起始和終止頁(yè)號(hào),其情況和正文打印相同。
e.欄數(shù)這個(gè)字段能使操作人員指定一頁(yè)上打出的欄數(shù)(實(shí)際上就是資料頁(yè)數(shù))。最多可指定打出九欄。
f.左邊邊緣的設(shè)定這些值表示從紙的左邊邊緣到被打印的頁(yè)上每欄開(kāi)始處的距離。最多指定左邊有9個(gè)邊緣字段。這能使操作人員在一頁(yè)上最多可打出9欄,并指定欄的起始位置。
g.第一頁(yè)頁(yè)號(hào)這個(gè)字符段用于進(jìn)行自動(dòng)編頁(yè)。它指示本系統(tǒng)從這個(gè)頁(yè)號(hào)開(kāi)始在每頁(yè)的上邊或下邊對(duì)頁(yè)進(jìn)行編號(hào)。
h.紙長(zhǎng)(行數(shù))這個(gè)值指定了將在其上打印資料的紙的尺寸。打印機(jī)在每英寸上打出6個(gè)單間隔行(每11英寸66行)或者8個(gè)單間隔行(每11英寸88行)。
i.頁(yè)首頭起始位置/頁(yè)尾起始位置這些字段在資料第1頁(yè)上指定了打印頁(yè)首或者頁(yè)尾的位置和每頁(yè)上行的起始位置。
j.頁(yè)尾起始號(hào)這個(gè)字段允許操作人員為資料中順序偏號(hào)的腳注指定一個(gè)起始號(hào)碼。
k.間距1表示每英吋10個(gè)字符,2表示每英吋12個(gè)字符,而3則表示每英吋15個(gè)字符。
l.饋紙序列在這個(gè)字段中打入一個(gè)回答S,將使打印機(jī)在每打完一頁(yè)后停機(jī),并允許操作人員插入一張新紙?;卮餝一般用于人工單張紙式打印機(jī)。如果在這個(gè)字段中打入一個(gè)C,則通知打印機(jī)在連續(xù)形式的紙上或在切割式饋送機(jī)紙上連續(xù)打印各頁(yè)。這個(gè)字段中的下列回答(L,1和2)是對(duì)兩重或三重匣式供紙器而言的,這些供紙器從一個(gè)或二個(gè)供紙匣中連續(xù)不停地供給單張紙張,一次一張。L-回答指示該系統(tǒng)從1號(hào)匣中送出第1頁(yè)、從2號(hào)匣中送出剩余的頁(yè)。1回答指示該系統(tǒng)從后匣中送出紙張而2回答則指示系統(tǒng)從前匣中送出紙張。
m.每英寸行數(shù)(6或8)這個(gè)字段允許操作人員指定在每英寸紙上打出的行數(shù)。
n.右邊對(duì)齊當(dāng)操作人員指定右邊整板后,每行上字符的排布將使打印出的資料除了有一個(gè)整齊的左邊邊緣之外,還有一個(gè)整齊的右邊邊緣。有了右邊整版選擇,一旦某一頁(yè)上最后一行以一個(gè)頁(yè)字符(不是回車(chē))結(jié)尾,那這一行就會(huì)被調(diào)整為和右邊對(duì)齊(用把前面的字符間隔開(kāi)的辦法)。正文中位于指示右邊整版的格式行以后的任何行,在印刷期間都將會(huì)加以右邊整版處理,而不管打印菜單中是否選擇了右邊整版。
o.試樣拷貝這個(gè)字段允許操作人員得到一個(gè)作為試樣或最終拷貝打印出來(lái)的資料。如果操作人員選擇于試樣拷貝,標(biāo)在資料中格式行上的行間距將會(huì)加倍。例如,指定單間距的格式行將會(huì)在試樣拷貝中打印出雙倍間距。
p.打印注釋這個(gè)字段指示出打印輸出要不要包括打在資料的注釋。
q.打印資料概要這個(gè)字段指示出操作人員是不是希望資料概要的拷貝和資料一起被打印出來(lái)。
r.輸入合并資料名當(dāng)合并打印一個(gè)格式資料時(shí),這個(gè)字段用來(lái)指定所用的合并資料的名稱(chēng)。合并打印允許操作人員進(jìn)行自動(dòng)文字重復(fù)書(shū)寫(xiě)。為了實(shí)現(xiàn)這個(gè)目標(biāo),操作人員建立兩個(gè)資料,這兩個(gè)資料一旦指定按標(biāo)準(zhǔn)格式文字打印出來(lái)時(shí)將被合并。這就叫做“格式資料”。然后,把所有的名稱(chēng)、地址和其它有用信息統(tǒng)統(tǒng)打入一個(gè)叫“合并資料”的資料。如果所用的設(shè)備有能力打印封面頁(yè),那么,操作人員還可在封面上合并打印地址。在合并打印這兩個(gè)資料時(shí),有用信息將插入格式資料中。這個(gè)格式資料將被連續(xù)地打印出來(lái),直至合并資料中的所有有用信息用盡為止。
打印程序流程打印程序的總層次框圖流程圖示于圖2。打印程序被字處理系統(tǒng)調(diào)用之后,進(jìn)入程序塊201,該處理系統(tǒng)具有指示要被處理的文字處理文件的指示字,程序塊201進(jìn)到程序塊203,后者執(zhí)行打印程序的總初始化。
在程序塊203中,進(jìn)行各種初始化來(lái)建立數(shù)據(jù)結(jié)構(gòu)和打開(kāi)通向文字處理文件的通路。這種初始化還包括建立程序控制程序塊(PCB),該程序塊示于表1,其參數(shù)來(lái)自要處理的資料的文字處理文件中的資料概要和打印概要記錄。
而后進(jìn)入程序塊205處理打印菜單。通過(guò)與打印菜單對(duì)話,操作者可以規(guī)定或改變用于打印出文字處理資料的各種參數(shù)。在程序塊205,進(jìn)行一次檢查,看合并資料是否要被打印出來(lái),如果是,則合并文件被打開(kāi),概要記錄被讀出。還要進(jìn)行一次類(lèi)似的檢查,看封面頁(yè)是否要打印出,如果是,則建立起PCB中的項(xiàng)目。這時(shí),也進(jìn)行與輸出設(shè)備的初始化有關(guān)的各種操作。這些參數(shù)初始化功能包括決定供給順序、比例打印和字根形式,并將結(jié)果存在打印控制程序塊中以備以后使用。
利用來(lái)自要被打印出的文字處理資料文件中的信息對(duì)表1中的打印控制程序塊進(jìn)行初始化,該信息具有打印菜單中操作者輸入的參數(shù),它包括控制打印的大部分信息,例如字根,左邊的空白處,縱欄數(shù),在什么頁(yè)上打印,間距,每英吋的行數(shù),文件類(lèi)別等。一旦被初始化,PCB中的大部分信息在資料的打印中保持不變。
PCB中的兩個(gè)重要參數(shù)是水平移動(dòng)指數(shù)和垂直移動(dòng)指數(shù)。水平移動(dòng)指數(shù)(HMI)和垂直移動(dòng)指數(shù)(VMI)在程序塊205中計(jì)算,以備以后將頁(yè)長(zhǎng),頁(yè)首行,頁(yè)尾行左邊空白轉(zhuǎn)換成基本單位時(shí)使用。
一個(gè)基本單位定義成輸出設(shè)備的打印頭或其它輸出媒介在軟件控制下能移動(dòng)的最小水平或垂直距離。HMI被定義成特定輸出設(shè)備的標(biāo)準(zhǔn)字符寬度中的水平基本單位的數(shù)量。VMI被定義成特定輸出設(shè)備的標(biāo)準(zhǔn)的高度中垂直基本單位的數(shù)量。HMI和VMI都存貯在PCB中,并且很容易為打印程序所用。
使用打印機(jī)基本單位是因?yàn)樗鼈兪歉鞣N打印機(jī)的唯一通用單位,并使打印程序中的子程序與要打印文件的特定的打印機(jī)無(wú)關(guān)。在最佳實(shí)施例中,行打印機(jī)的水平基本單位是1/10英吋,垂直基本單位是1/6英吋。點(diǎn)陣打印機(jī)用于15間距模式時(shí),水平基本單位是1/15英吋,用于12間距模式時(shí),水平基本單位是1/12英吋,用于10間距模式時(shí),是1/10英吋,其垂直基本單位1/48英吋,字母質(zhì)量打印機(jī)的基本單位是1/20英吋(用于比例或非比例模式并與間距無(wú)關(guān)),其垂直基本單位為1/48英吋。具有精確的基本單位的打印機(jī)比只有粗略的基本單位的打印機(jī)的輸出質(zhì)量要高。這是因?yàn)樵诩埳系挠懈嗟哪芊帕孔址牡胤?,因而可更?zhǔn)確地完成諸如右側(cè)對(duì)齊、集中和輸出復(fù)合字符等功能垂直定位功能(例如上標(biāo)、下標(biāo)和輸出字符)。一個(gè)復(fù)合字符是在同一字符空格中,盡可能利用字符打印間的水平或垂直偏移多次打印兩個(gè)或更多個(gè)字符。
這時(shí),在程序塊205也建立起設(shè)備信息塊(DIB)。DIB包括輸出打印機(jī)的專(zhuān)用信息。例如目前在紙上的垂直或水平位置,已排入設(shè)備中但尚未打印的行的表,打印機(jī)上所能得到的最大垂直位置(可以隨送紙器或紙張規(guī)格的不同而改變),從最后寫(xiě)入時(shí)刻起通過(guò)的紙張數(shù),已經(jīng)寫(xiě)下的數(shù),以及各種標(biāo)識(shí)。初始標(biāo)識(shí)表示打印機(jī)是否已起動(dòng),TFED標(biāo)識(shí)表示打印頭下是否已有紙,RECON標(biāo)識(shí)表示設(shè)備已重新連接上,YESREC標(biāo)識(shí)表示可與此設(shè)備重連多次,SHFT標(biāo)識(shí)表示打印機(jī)是否處在移出狀態(tài),ENDFLI標(biāo)識(shí)表示是否遇到文件的末尾。
程序塊207對(duì)字符變換表(CMT)初始化。字符變換表的實(shí)例示于圖6,這些表是根據(jù)字符變換文件設(shè)量并填寫(xiě)的。每個(gè)打印機(jī)的每種字形有一個(gè)字符變換文件。字符變換表用來(lái)將編碼的正文字符從存貯在資料文件中的字符表達(dá)式變成字符碼,這些字符碼是起動(dòng)要用來(lái)打印資料的特定輸出裝置上的相應(yīng)字符圖形所需要的。字根名稱(chēng)以及打印機(jī)類(lèi)型從打印控制程序塊中獲得。字符變換文件由一實(shí)用程序建立,該程序以容易使用的文字處理資料的形式讀字符變換資料并將它們變成打印程序能更容易進(jìn)行的表格。為處理字符變換資料,需要讀數(shù)百次實(shí)用程序記錄,但只需讀幾次字符變換文件來(lái)裝入字符變換表。因此,通過(guò)執(zhí)行打印程序以外的這一功能,大部分處理工作是每種字根作一次而不是每一打印資料做一次。
圖6所示的字符變換表包括兩組表格。第一組表格將內(nèi)部資料字符碼變成打印機(jī)輸出字符碼以及字符要打印的垂直相對(duì)位置和水平偏移。第二組表格將輸出字符碼變成打印密度和輸出字符寬度。字符變換表使得編輯程序輸入的資料中的一個(gè)單一字符導(dǎo)致在被打印資料上打印多個(gè)字符,這是利用復(fù)合字符完成的,其中,在字符中每一復(fù)合層打印一個(gè)字符。下面將會(huì)清楚地看出,在資料中被編碼成字母A且?guī)в幸恢匾舴?hào)的字符可以這樣打印出來(lái),即先打字符A,然后在其上打重音符號(hào),此重音符號(hào)根據(jù)被打印A是大寫(xiě)還是小寫(xiě)來(lái)確定垂直偏移。
如圖6所示,字根中規(guī)定的每一復(fù)合字符層有3個(gè)表。資料字符至打印機(jī)輸出字符變換表(表603,609,615)將用于規(guī)定由操作者輸入的字符變換成由特定打印機(jī)識(shí)別的字符碼,以產(chǎn)生期望的圖形。每一復(fù)合字符層的第二個(gè)表(表605,611,617)是可選擇的字符垂直偏移變換表,如果存在的話,它指示在打印所期望的圖形之前,打印頭要上下移動(dòng)的垂直偏移。每一復(fù)合字符層的第三個(gè)表(表607,613,619)是可選擇的字符水平偏移變換表,如果存在的話,它表示在打印所期望的圖形前,打印頭要左右移動(dòng)的水平偏移。
圖6示出了變換表指示字符塊601,它規(guī)定了三個(gè)復(fù)合層。第一層有輸出字符碼表603,垂直偏移表605和水平偏移表607,表2有輸出字符碼表609,垂直偏移表611和水平偏移表613,表N有輸出字符碼表615,垂直偏移表617和水平偏移表619。圖6所示的范例字符變換表能將鍵盤(pán)碼0-254變換成一個(gè)輸出字符,其字符碼255被保留下來(lái)以便指示鍵盤(pán)碼將不變成字符。例如,此255碼用于表603中的項(xiàng)254以指示鍵盤(pán)碼將不打印一個(gè)字符。此255碼也用在復(fù)合層2-N中以指示在此層中無(wú)復(fù)合字符存在。例如鍵盤(pán)碼44是一個(gè)ASCⅡ逗號(hào),它在2層(表609)或N層(表615)中沒(méi)有復(fù)合字符,而碼4在第2層(表609)有一個(gè)復(fù)合字符,但在N層(表615)沒(méi)有復(fù)合字符。而碼5在2層(609)和N層(表617)中有一項(xiàng)。
如果用于打印資料的特定輸出設(shè)備有一個(gè)常規(guī)字符組和一移出字符組,輸出字符碼表中的一位表示它是一個(gè)常規(guī)字符還是移出字符。如果用于打印文件的特定輸出設(shè)備沒(méi)有進(jìn)行垂直偏移的能力,垂直偏移表可以不存在。同樣,如果此特定輸出設(shè)備不具備水平偏移的能力,水平偏移表可以不要。
CMT指示字符塊除了指示字符-字符變換表(該表規(guī)定輸出碼以及垂直和水平偏移)外,也指示輸出字符碼表,該表包括規(guī)定敲擊輸出字符的錘擊密度和輸出字符寬度。
把字符碼從存在文字處理資料中的碼變成打印機(jī)使用的碼的過(guò)程包括首先使用資料(鍵盤(pán))字符碼作為進(jìn)入輸出字符碼表,輸出字符垂直偏移表和輸出字符水平偏移表的索引,以對(duì)一個(gè)復(fù)合層檢索輸出字符碼,垂直偏移和水平偏移。而后輸出字符碼可用來(lái)引入輸出字符錘擊密度表(621)以便檢索敲擊輸出字符的密度,輸出字符碼也可用來(lái)引入輸出字符寬度表(表623)以檢索輸出字符的寬度。此過(guò)程對(duì)文件碼的每一復(fù)合層都重復(fù)進(jìn)行。
例如,資料碼5用來(lái)表示其上有一個(gè)重音符號(hào)、其下有一個(gè)逗號(hào)的大寫(xiě)字母C,如果對(duì)復(fù)合層1該資料碼5從表603中產(chǎn)生一個(gè)輸出碼67,從表605中產(chǎn)生一個(gè)垂直偏移碼0,從表609中產(chǎn)生一個(gè)水平偏移碼0(當(dāng)把輸出字符碼作為錘擊密度表621的索引時(shí),這將從表623中得到錘擊密度為3以及10個(gè)基本單位的字符寬度),則復(fù)合層2將產(chǎn)生輸出字符碼96(表609中的一個(gè)重音符號(hào),表611中的垂直偏移2和表613中的水平偏移0)、錘擊密度1和6個(gè)基本單位的字符寬度0。復(fù)合層N將產(chǎn)生垂直偏移為-1,水平偏移為1的輸出字符碼44(逗號(hào))、錘擊密度0和2個(gè)基本單位的字符寬度。
資料碼被翻譯,從每一復(fù)合層中檢出的信息存在字符記錄(CR)中,CR是字符的雙向鏈接表,CR中包含的信息被規(guī)定在表2中。
表2縱欄信息塊(CIB)指向下一個(gè)縱欄信息塊(CIB)的指針縱欄號(hào)邏輯頁(yè)面號(hào)頁(yè)面記錄鍵指向現(xiàn)行正文記錄的指針進(jìn)入到現(xiàn)行正文記錄中的偏移指向現(xiàn)行格式記錄的指針(行寬,標(biāo)記停止,現(xiàn)行行間隔)指向字符表的起始的指針指向最近銜接點(diǎn)字符記錄的指針指向字符表的末尾的指針當(dāng)前垂直位置當(dāng)前水平位置底線標(biāo)記黑體打印標(biāo)記陰影打印標(biāo)記復(fù)印標(biāo)記邏輯行標(biāo)記的末尾段對(duì)齊等待標(biāo)記邏輯頁(yè)面標(biāo)記的末尾在一條字符鏈中的一個(gè)字符記錄,除去該鏈中的指向NIL的最后的字符記錄以外,包括一個(gè)指向該鏈中的下一個(gè)字符記錄的指示字。一個(gè)字符記錄,除去該鏈中指向NIL的第一個(gè)字符記錄以外,也包括一個(gè)指向該鏈中前面的字符記錄的指示字。一個(gè)字符記錄包括字符相對(duì)于主行的垂直位置,相對(duì)于左邊空白區(qū)域的當(dāng)前水平位置,和由字符變換表獲得的任何垂直偏移,以及由字符變換表獲得的水平偏移。
輸出字符本身連同字符組(例如為一規(guī)則字符或一移出字符)貯存于字符記錄中。字符記錄包括一個(gè)表明它有銜接點(diǎn)的標(biāo)記。若此標(biāo)記真的話(此標(biāo)記被置或出現(xiàn)),則該行就在此字符上斷開(kāi);而該字符及隨后的字符可能被銜接到下一行的開(kāi)端。
如果在資料中停止字符正好出現(xiàn)在該字符之前,則停止標(biāo)記是正確的,而程序?qū)⑹勾蛴C(jī)在打印該字符前停止。
字符記錄包括一個(gè)對(duì)齊標(biāo)記,若此標(biāo)記置于正確位置,則意味著該字符可以被向右對(duì)齊。如果字符本身是一個(gè)空格,而要求的標(biāo)記出現(xiàn),則就意味著為向右對(duì)齊,可將該字符當(dāng)作一個(gè)正規(guī)的非空格字符對(duì)待,而不把它當(dāng)作為一個(gè)空格。
如果字符有一個(gè)復(fù)合標(biāo)記,則它是一個(gè)復(fù)合字符的一個(gè)非原始的成份。如果出現(xiàn)底線,黑體打印,陰影打印或復(fù)打印標(biāo)記,則這些特征將加到該現(xiàn)行字符上去。此外,如果出現(xiàn)連續(xù)對(duì)下一個(gè)字符加底線的標(biāo)記,則在該行中,在該字符和下一字符之間的任何空格部份也應(yīng)該加底線。
方框209起動(dòng)文字處理資料的第一個(gè)付本的打印。將控制來(lái)自PCB的付本的打印的各變量初始化之后,復(fù)制循環(huán)開(kāi)始。
如果操作者要求的話,則方塊211打印資料概要。每一次復(fù)制可打印資料概要頁(yè)一次。在資料概要中要打印的信息可以貯存在文字處理資料的概要記錄中讀取。
方塊213為合并打印進(jìn)行初始化。此初始化包括初始化數(shù)據(jù)結(jié)構(gòu),這些數(shù)據(jù)結(jié)構(gòu)是為實(shí)現(xiàn)在合并打印時(shí)處理記錄所必需的。
方塊215實(shí)行打印下標(biāo)所必需的初始化,本初始化僅在打印該資料的第一復(fù)制件時(shí)出現(xiàn)。
方塊217起動(dòng)合并打印循環(huán)。在方塊217中,來(lái)自欄信息塊的、合并打印所需的信息,例如,對(duì)合并資料的索引和記錄鍵,都貯存到稱(chēng)之為RIBs的數(shù)據(jù)結(jié)構(gòu)中。在每一格式的起始,將來(lái)自RIB的信息送入欄信息塊(CIB)中,下面對(duì)CIB還要作介紹。在每頁(yè)的頂部,CIB信息保存在RIB中。于是,如果遇到斷開(kāi)時(shí),CIB可以從RIBs中恢復(fù),以返回到合并資料的右邊位置。
方塊219為實(shí)際頁(yè)面循環(huán)起動(dòng)。這個(gè)方塊執(zhí)行在打印機(jī)上控制一張實(shí)際頁(yè)的打印時(shí)所需的初始化。
在方塊221中,實(shí)行頁(yè)面送入。頁(yè)面送入到打印機(jī),而且,如果在打印機(jī)上有一個(gè)三者取二的送紙盤(pán),則在頁(yè)面送入前送出適當(dāng)?shù)闹噶钚蛄幸员氵x擇適當(dāng)?shù)募埍P(pán)。在第一頁(yè)面送入前完成打印機(jī)的初始化,或者在斷開(kāi)處送入頁(yè)面前實(shí)行初始化。某些打印機(jī)要求此時(shí)也對(duì)左邊空白,字距,每英吋的行數(shù)及可選用的字體,進(jìn)行初始化。
方塊223利用圖3中的欄構(gòu)建的程序在頁(yè)面內(nèi)建立和打印頁(yè)首,對(duì)此下面還要作介紹。
方塊225在起動(dòng)打印每一頁(yè)面內(nèi)的正文中任何欄前,初始化腳注號(hào)。
方塊227利用圖3的欄構(gòu)建的程序建立和打印正文的各欄。
方塊229打印在打印正文頁(yè)面期間積累起來(lái)的任何腳注。
方塊231利用圖3的欄構(gòu)建的程序建立和打印頁(yè)面腳注。
方塊233處理由操作員中斷打印操作引起的在頁(yè)面內(nèi)的任何斷開(kāi),或處理由設(shè)備錯(cuò)誤,例如紙或打印紙帶脫出引起打印中斷的在頁(yè)面內(nèi)的斷開(kāi)。
然后方塊235檢查是否所有的正文頁(yè)面已經(jīng)被打印,如果還沒(méi)有打印完,則返回到方塊221以便打印正文的下一頁(yè)面。如果所有的正文頁(yè)面已經(jīng)被打印,則方塊237進(jìn)入建立和打印封面頁(yè)面。
然后進(jìn)入方塊239判斷是否所有合并打印已完成,如果尚未打印完,則返回到方塊219,以便打印下一個(gè)合并資料。如果所有的合并打印已經(jīng)完成,則進(jìn)入方塊241檢查是否所有復(fù)制件已被打印,如果需要更多的付本,則返回到211,以便起動(dòng)對(duì)資料的下一復(fù)制件的打印。如果所有的復(fù)制件已經(jīng)被打印,則進(jìn)行方塊243並實(shí)行打印程序清除,并進(jìn)行方塊245,塊245完成打印程序。
欄程序圖3示出了最佳實(shí)施例的欄構(gòu)建和打印程序。欄程序通過(guò)訪問(wèn)字符檢索器構(gòu)建一個(gè)邏輯行,以便從文體輸入源得到一個(gè)字符,然后調(diào)用字符處理器以便貯存可打印的字符或者如果字符為控制字符的話,作相應(yīng)的動(dòng)作。當(dāng)打印一個(gè)多欄資料時(shí),則欄構(gòu)建器必須被調(diào)用多次,以便產(chǎn)生多個(gè)邏輯行,這樣使得在頁(yè)面內(nèi)的總打印行在其被實(shí)際輸出到打印機(jī)前被完成。
該程序先進(jìn)入方塊301。而后進(jìn)入方塊303以便對(duì)當(dāng)前打印的那個(gè)實(shí)際頁(yè)面部分進(jìn)行欄信息塊(CIB)初始化。該CIB是一個(gè)數(shù)據(jù)結(jié)構(gòu),它包含所有的與一邏輯頁(yè)面(例如正文頁(yè)面,封面頁(yè)面帶頁(yè)首或頁(yè)尾的頁(yè)面等)相關(guān)的內(nèi)容,欄信息塊的內(nèi)容示于表3中。
表3字符記錄(CR)指向下一個(gè)字符記錄的指針指向前一個(gè)字符記錄的指針垂直位置水平位置垂直偏移水平偏移字符輸出碼字符組(例如規(guī)則或移出)銜接點(diǎn)標(biāo)記停止標(biāo)記對(duì)齊標(biāo)記要求的標(biāo)記復(fù)合標(biāo)記底線標(biāo)記對(duì)下一字符繼續(xù)加底線標(biāo)記黑體打印標(biāo)記陰影打印標(biāo)記復(fù)式打印標(biāo)記對(duì)于多欄打印,多個(gè)CIBs被連成環(huán)形,它可以被往返循環(huán),以獲取訪問(wèn)每一邏輯頁(yè)面欄內(nèi)容的入口,此邏輯頁(yè)面包含現(xiàn)行實(shí)際頁(yè)面的正文部份。于是,欄構(gòu)建程序能被調(diào)用去構(gòu)建一欄中的一行,再次調(diào)用去構(gòu)建另一欄中的一行,並且當(dāng)它在一給定縱列中不再使用時(shí),總是可以繼續(xù)往下工作。對(duì)于頁(yè)首、頁(yè)尾和單欄正文頁(yè)面,只有一個(gè)CIB,並且指向本身。圖7示出了四個(gè)連接的CIBs,當(dāng)它們?cè)诖蛴∫粋€(gè)實(shí)際頁(yè)面的四個(gè)縱列組成部分時(shí)可能出現(xiàn)。
在方塊305中,檢查是否所有的欄都在頁(yè)面的末尾,如果是,在方塊329中返回,如果所有的欄都不在頁(yè)面的末尾,則進(jìn)入方塊307,並確定哪一欄需要構(gòu)建。一旦確定了那一欄需要構(gòu)建,進(jìn)入方塊309以構(gòu)建一欄。在方塊309中,來(lái)自資料輸入緩沖器的下一個(gè)字符被檢索。
方塊309利用指向貯存在欄信息塊中的資料文件的指針,從文本中檢索一個(gè)字符。該欄信息塊中包含指向輸入緩沖器的指針,這些緩沖器包含了從輸入資料中讀取的記錄和現(xiàn)行文本。如果合并打印,則該信息塊中也有一個(gè)指向包含由合并資料讀取的現(xiàn)行正文的輸入緩沖器的指針,它包含對(duì)正在使用的任何正文記錄緩沖器和所有有關(guān)的記錄鍵和頁(yè)號(hào)的索引。它檢驗(yàn)用于NIL記錄緩沖器的指針。它檢驗(yàn)進(jìn)入記錄器的索引,弄明白是否每個(gè)來(lái)自該記錄器的字符都已檢索,是否要讀取一個(gè)新的記錄。它更新指向緩沖器中的現(xiàn)行字符的指針,并且,在必要時(shí),處理在記錄之間的傳輸。
輸入正文字符通常是根據(jù)一正文頁(yè)面中的正文緩沖器進(jìn)行檢索的,此正文頁(yè)面從頭至尾循環(huán)。雖然,有時(shí)候字符檢索必須專(zhuān)門(mén)處理,例如當(dāng)文本來(lái)自一腳注參考頁(yè),或來(lái)自包含一正文串的虛緩沖器(此正文串由一頁(yè)或腳注號(hào)或資料概要信息組成)時(shí),就屬這種情形。在所有這些情況時(shí),為這種使用設(shè)立一個(gè)與用于正常情況的緩沖器相同的緩沖器,並適當(dāng)?shù)卮_立正文長(zhǎng)度等。這就使逐字符檢查時(shí)的數(shù)目最小,並且只有當(dāng)現(xiàn)有記錄用完和需要新的記錄時(shí)才會(huì)執(zhí)行異常碼。
在對(duì)字符檢索之后,進(jìn)入方塊311,判斷被檢索的字符必須被處理的方式。如果從資料文件的正文中檢索到的字符是一個(gè)可打印的字符,則進(jìn)入方塊313。如果從資料文件檢索到的字符不是一個(gè)可打印的字符,則進(jìn)入方塊327,執(zhí)行任何需要的特殊處理。方塊327處理那些特殊字符,這些特殊的字符指明水平定位功能(例如標(biāo)記,(dectab),對(duì)中或縮排),垂直定位功能(例如下標(biāo)或上標(biāo))以及注釋?zhuān)谘谛蛄?hide sequenas),和欄對(duì)齊功能。
水平定位功能定義為標(biāo)記,dectabs,歸中或縮排。用來(lái)處理水平定位功能的事體序列通常如下,在CIB中設(shè)定一個(gè)標(biāo)志以便指明一個(gè)水平定位功能已經(jīng)遇見(jiàn),過(guò)程繼續(xù)進(jìn)行。于是,如果由資料文件中檢索到的下一字符是另一個(gè)水平定位功能,則結(jié)束前面的水平定位功能并在CIB中設(shè)定新的水平定位功能標(biāo)志。如果下一字符是一個(gè)可打印的字符,則在CIB中重新設(shè)定水平定位功能,并將CIB指針指向那個(gè)字符的字符記錄(CR)。如果水平定位功能要求調(diào)整水平定位,例如一個(gè)標(biāo)記,則也同樣進(jìn)行上述工作。最后,如果水平定位功能為行上的最后銜接點(diǎn),則把那個(gè)指針作為斷開(kāi)行的地方,就出現(xiàn)文字銜接。由于缺乏有效的標(biāo)記停止缺乏在正文之后的歸中標(biāo)志,者其它失效的中心欄標(biāo)題而使水平定位失敗,那么它可能使一行終止,被排隊(duì),或被一回車(chē)所終止。
當(dāng)遇到一個(gè)垂直定位功能,例如一個(gè)上標(biāo)或下標(biāo)字符時(shí),對(duì)在CIB中的現(xiàn)行垂直位置給予適當(dāng)?shù)恼{(diào)整。當(dāng)遇到指示段落對(duì)齊的字符時(shí),在CIB中設(shè)定等待標(biāo)志,以便指明該欄應(yīng)等到每個(gè)與其他欄相關(guān)的CIBS中的等待標(biāo)記已經(jīng)接通,或應(yīng)該等待到每個(gè)其他欄中已遇見(jiàn)一頁(yè)面的斷開(kāi)字符時(shí)為止。在處理完畢特殊字符后,方塊327退至方塊317。
一旦在資料文件中遇到一個(gè)可打印的字符,就進(jìn)入方塊313。方塊313將來(lái)自資料文件的可打印的輸入正文字符翻譯成與輸出設(shè)備相關(guān)的輸出字符代碼,上述輸出設(shè)備將打印字符并在自前行的末尾產(chǎn)生一字符記錄和在字符記錄中貯存目前的字符信息。上述對(duì)可打印字符的翻譯包括處理復(fù)合字符及可能的垂直和水平定位偏移。如果字符變換表包括幾層復(fù)合,則產(chǎn)生該多個(gè)字符記錄(CR),而且在第一字符記錄之后的每個(gè)字符記錄有合成標(biāo)志集。
來(lái)自欄信息塊(CIB)的當(dāng)前標(biāo)志信息和當(dāng)前的相對(duì)垂直位置(根據(jù)上/下標(biāo))貯存在每個(gè)CR中,而且如果與字符變換表有一垂直位置偏差,上述相對(duì)的垂直位置可以調(diào)整。來(lái)自CIB的當(dāng)前水平位置被貯存在第一復(fù)合部分字符記錄中(此字符認(rèn)為是最寬的字符),而在CIB中的水平位置則通過(guò)加寬字符寬度進(jìn)行修正。在上述基本層之后的所有復(fù)合層都給與水平位置,這些水平位置把所有復(fù)合層都集中到第一個(gè)(最寬的)字符上。上述定中心位置是通過(guò)把當(dāng)前復(fù)合元素寬度和最初的字符的寬度差之半與初級(jí)字符的水平位置相加。為了簡(jiǎn)化處理輸出碼,必須產(chǎn)生CMT以便將一個(gè)復(fù)合字符的最寬輸出字符存貯到復(fù)合層1表(圖6中的603表)。每個(gè)復(fù)合元素的輸出字符也可在CMT中找到,並且存貯在CR中。其他的現(xiàn)行CIB信息,例如是否出現(xiàn)標(biāo)記或dectabs,右對(duì)齊,停止,集中等等,也存貯在字符記錄中,或用停用(turn off)一個(gè)標(biāo)記並設(shè)定一個(gè)指向當(dāng)前字符記錄的指向字而在CIB中對(duì)上述信息作修正。
方塊315把字符記錄的實(shí)際鏈接轉(zhuǎn)變成由CIB指向的字符記錄鏈。將字符記錄鏈接成如圖7所示的雙向連結(jié)的表格結(jié)構(gòu)。每個(gè)字符記錄包含一可打印的字符及有關(guān)該字符的特殊信息和指向下一個(gè)和前一個(gè)字符記錄的指示字。字符記錄是一個(gè)輸出字符和其相關(guān)信息的規(guī)范形式。包含各種指示字和標(biāo)記的字符記錄的內(nèi)容示于表2中。
圖7示出了三個(gè)字符記錄鏈,這些鏈與在一頁(yè)中所包含的四欄相對(duì)應(yīng)。來(lái)自CIB701的鏈1包含字符記錄711至727,來(lái)自CIB703的鏈2包含CRs731至737,來(lái)自CIB707的鏈3包含CRs771至783。CIB705有一個(gè)空鏈。
字符處理完畢,方塊317就開(kāi)始判斷行終止是否已發(fā)生。如果還未出現(xiàn)行終止,則方塊317出口到方塊307,以便檢索下一個(gè)字符。
方塊317檢查行構(gòu)建循環(huán)是否應(yīng)被終止。在幾個(gè)條件之一發(fā)生時(shí),行構(gòu)建被終止?;剀?chē),頁(yè)面表記,嵌入的格式行,或其他硬件終止符引起從循環(huán)中出口並把這一行立即排隊(duì)並立即重置CIB中的行指針。行長(zhǎng)超出條件也會(huì)產(chǎn)生從循環(huán)中出口。當(dāng)前行上的最后字符于是被稱(chēng)為“非法字符”,因?yàn)樗且粋€(gè)已超過(guò)右邊緣的字符。
在方塊319,對(duì)一個(gè)銜接點(diǎn)進(jìn)行搜索,所謂銜接點(diǎn)是這樣一個(gè)點(diǎn),即在行的末尾處的字符可以在該點(diǎn)上被接到下一個(gè)行開(kāi)頭的點(diǎn)。如果方塊317不能找到一個(gè)由在字符記錄中的銜接標(biāo)記所指明的有效的銜接字符,則“非法字符”便成為銜接點(diǎn)。在圖7中的銜接點(diǎn),如在CIB中的點(diǎn)所指向的那樣出現(xiàn)在在圖7中的字符記錄725,737和781上。在銜接點(diǎn)確定之后,通過(guò)在銜接點(diǎn)上切斷連結(jié)表,將字符鏈在銜接點(diǎn)斷開(kāi)。然后將空格字符從完成的行的末尾移開(kāi),以便避免可能的字下劃線懸置行的末尾,和以便簡(jiǎn)化向右對(duì)齊。完成的行于是在行信息塊(LIB)中排隊(duì),在表4中示出了行信息塊。來(lái)自銜接點(diǎn)之后的行的其余部分于是被重置到在CIB中的下一個(gè)行的開(kāi)頭。水平和垂直位置在CIB內(nèi)被重置,並在下一次時(shí),為本欄執(zhí)行欄程序,在表的末尾處構(gòu)建邏輯頁(yè)面。
當(dāng)制作行信息塊(LIB)時(shí),將來(lái)自CIB中的對(duì)齊邊線標(biāo)記貯于其中,于是,在CIB中的對(duì)齊邊線標(biāo)記被倒換。(即,若它為正確的,則變成錯(cuò)誤的,反之亦然)。由右邊緣給定的行長(zhǎng),以及在行中的正文的最后寬度,也均貯存在LIB中。
表4行信息塊(LIB)下一個(gè)LIB的指針前一個(gè)LIB的指針字符表開(kāi)始的指針字符表結(jié)尾的指針邊對(duì)齊標(biāo)志下一個(gè)長(zhǎng)度行長(zhǎng)度頁(yè)面標(biāo)志結(jié)尾在段定位標(biāo)志上等待現(xiàn)行的行間字符當(dāng)一欄中的一個(gè)邏輯行結(jié)束以后,如果有格式行或行中的對(duì)齊字符,則進(jìn)入框321,進(jìn)行該行里正文本的對(duì)齊。下面將參考圖4更詳細(xì)地描述通過(guò)框321用對(duì)齊程序來(lái)對(duì)齊行內(nèi)正文的過(guò)程。
把現(xiàn)行對(duì)齊以后,進(jìn)入框323???23取出與剛剛結(jié)束的邏輯行相關(guān)的字符記錄表,并把它們插到排隊(duì)輸出信息塊上,而該排隊(duì)輸出信息塊是從來(lái)自正規(guī)正文的各個(gè)QOIBs上設(shè)置了上標(biāo)和下標(biāo)的CIB得到的。表5表示該QOIB的內(nèi)容。這樣就產(chǎn)生了各個(gè)水平行,它們位于其本身QOIB上的不同的垂直位置。通過(guò)進(jìn)行這種垂直位置的排序,使得各行能以一個(gè)正確的順序輸給打印機(jī),并且在該頁(yè)面上產(chǎn)生出以正確垂直位置打印的正文本。
表5排隊(duì)輸出信息塊(QOIB)
下一個(gè)QOIB的指針字符表開(kāi)始指針字符表結(jié)尾指針相關(guān)的上標(biāo)/下標(biāo)層絕對(duì)垂直位置在本行里的停止字符如果進(jìn)行多欄打印,框323還要執(zhí)行一個(gè)混合操作,在每個(gè)CIB的相同的垂直位置取出QOIBs,并把它們連接在一起。這樣,通過(guò)從每欄的相同垂直位置上取出邏輯行,并把它們組合到用于輸給打字機(jī)的實(shí)際行上,我們能夠以正確的垂直位置把不同的欄輸給打字機(jī)。于是,把整頁(yè)上相同垂直位置上的所有字符,作為一個(gè)具有多行輸出的連續(xù)行輸出,來(lái)處理位于各種不同垂直位置的正文的情況。在圖10中示出了一個(gè)QOIBs的排序表的例子,它示出了一個(gè)單欄行,它的形成是讀出圖中正文的輸入緩沖器,通過(guò)運(yùn)用圖6的字符變換表進(jìn)行轉(zhuǎn)換,以產(chǎn)生圖9的字符記錄鏈。
欄325判定是否已經(jīng)準(zhǔn)備好了將被輸出到打印機(jī)上的一個(gè)實(shí)際打印行,如果沒(méi)有,返回框307,為下一欄建立一行。如果已經(jīng)準(zhǔn)備好了輸給打印機(jī)的打印行。則從框325進(jìn)入框327。
當(dāng)欄程序確定輸給打印機(jī)的一行已準(zhǔn)備好時(shí),則把該行從排好隊(duì)的輸出信息塊隊(duì)列中取出,并把它輸給適當(dāng)?shù)妮敵龀绦?,該程序依?lài)于打印文件所用的具體的打印機(jī)。在框327中,根據(jù)打印控制塊規(guī)定的輸出設(shè)備的功能來(lái)調(diào)用校正設(shè)備驅(qū)動(dòng)器。然后,該設(shè)備驅(qū)動(dòng)器取出已傳輸給它的實(shí)際打印行,執(zhí)行所用的具體輸出打印機(jī)所要求的附加處理,然后把這處理的打印行輸給該打印機(jī)。
當(dāng)每個(gè)實(shí)際打印行完全構(gòu)成存貯在QOIB上以后,進(jìn)入框327,在框327中,把QOIB輸給適當(dāng)?shù)妮敵龀绦?,在該程序中把字符記錄的連接表從該QOIB中移出。然后,把該字符記錄表橫移,并設(shè)立一個(gè)輸出緩沖器,在該緩沖器中存貯來(lái)自字符的字符,打印機(jī)規(guī)定格式信息(比如,換碼序列,打印機(jī)控制信息,這些控制信息用于執(zhí)行下面劃線、黑體打印、黑影打印或者復(fù)式打印、水平定位,等等)。
用隨打印機(jī)的不同而不同的打印機(jī)的專(zhuān)門(mén)輸出程序,來(lái)實(shí)現(xiàn)實(shí)際的水平定位。例如,在一個(gè)行式打印機(jī)上,在一行中空隙之間的分隔,是通過(guò)在緩沖器中插入空白字符來(lái)實(shí)現(xiàn)的,而在字母質(zhì)量打印機(jī)中(letter quacity printer),分隔動(dòng)作可在把該打印行輸給打印機(jī)輸出驅(qū)動(dòng)器之前,在一行內(nèi)插入與一個(gè)絕對(duì)水平標(biāo)記對(duì)應(yīng)的換碼序列來(lái)實(shí)現(xiàn)。
應(yīng)當(dāng)指出,從一個(gè)QOIB連接起來(lái)的所有的字符塊都有同樣的垂直位置,并且是從最高的垂直位置到最低的垂直位置來(lái)對(duì)QOIBs進(jìn)行處理,所以,可以從最高垂直位置行開(kāi)始,逐步進(jìn)展到最低垂直位置行,以這種方式把每一行輸給打字機(jī),因此,當(dāng)要打印一個(gè)資料時(shí),可以把該紙預(yù)先上移。
把該行輸出以后,從框327進(jìn)入框305,以建立每一欄中的下一行。
對(duì)齊程序在框401進(jìn)入對(duì)齊程序,圖4是該最佳實(shí)施方案的對(duì)齊程序的方框圖。如果需要,則在欄的建立程序的末尾調(diào)入對(duì)齊程序,以執(zhí)行右側(cè)對(duì)齊。它運(yùn)用在行信息塊(LIB)中的信息,以及來(lái)自打印控制塊的水平移動(dòng)變址(HMI)。該LIB包含有行的開(kāi)始和結(jié)尾的指針、目標(biāo)行的長(zhǎng)度,以調(diào)整行和該行中文本的現(xiàn)行長(zhǎng)度。
在框403中,把指針初始化,使之指向與該行相聯(lián)系的字符記錄鏈的開(kāi)始和結(jié)尾,也就是被對(duì)齊。然后在框405中計(jì)算所要求的擴(kuò)充量,它是右側(cè)邊緣與正文尺寸之差。
然后進(jìn)入框407,對(duì)該行進(jìn)行回掃,計(jì)能夠擴(kuò)充的空位數(shù)、能夠擴(kuò)充的字符數(shù),和組合字符元素?cái)?shù)。在遇到鏈的開(kāi)始之前。或遇到帶有未對(duì)齊字符標(biāo)志的字符記錄之前,一直繼續(xù)這種回掃。例如,如果字符是在標(biāo)記之后首先進(jìn)入的,則將把未對(duì)齊字符標(biāo)志設(shè)置在字符記錄中。
如果在框407所執(zhí)行的行回掃期間,在一個(gè)組合字符上該掃描被停止,則執(zhí)行正掃,把指針提前移到組合中的最末字符記錄。這樣做是因?yàn)榻M合必須被一起擴(kuò)充。
當(dāng)通過(guò)框407的回掃發(fā)現(xiàn)鏈開(kāi)始時(shí),則該程序暫時(shí)脫開(kāi)字符連接表,并在此定位,好象該行實(shí)際開(kāi)始一樣來(lái)使用指向該字符的指針。把這種結(jié)構(gòu)稱(chēng)為半連接表,好象它是一個(gè)整個(gè)連接表一樣把它用于橫移一個(gè)表的一部分。
然后進(jìn)入框409,用組合計(jì)數(shù)來(lái)修正字符計(jì)數(shù),以得到該行中能擴(kuò)充的字符計(jì)數(shù)。必須把字符的組合元素的數(shù)目從能擴(kuò)充字符的總數(shù)同中扣除。因?yàn)楸仨毎言摻M合當(dāng)作是一個(gè)字符一樣來(lái)擴(kuò)充,因?yàn)榘阉鼈兇蛴r(shí)只要求一個(gè)字符的空白。
在框411,把指針初始化到第一可擴(kuò)充字符的末尾,以便跳過(guò)組合元素。在框413中,實(shí)現(xiàn)在第一可擴(kuò)充字符上將該表切斷,在切斷之前,把指針存貯到該字符記錄上。字符記錄鏈的這種切斷,是由一個(gè)字符記錄引起的,該字符記錄的對(duì)齊標(biāo)志為“0”,這表示這個(gè)字符出現(xiàn)在一個(gè)標(biāo)記點(diǎn)上,而在行中比標(biāo)記字符出現(xiàn)早的字符在右側(cè)對(duì)齊的過(guò)程中不能被移動(dòng)。
框415進(jìn)行檢查,以判定是否可擴(kuò)充的字符數(shù)同等于零。如果可擴(kuò)充的字符數(shù)目不等于零,則進(jìn)入框417,進(jìn)行檢查以判定可擴(kuò)充空位數(shù)目是否等于零。如果可擴(kuò)充空位的數(shù)目不等于零,則進(jìn)入框419。
在框419中,進(jìn)行計(jì)算,以確定分布在字中的字符之間的擴(kuò)充部分,使得當(dāng)對(duì)齊一行時(shí),字間的空間不會(huì)變得太大。對(duì)齊程序試圖放置字內(nèi)的字符之間的某一擴(kuò)充部分和字間擴(kuò)展的剩余部分。在字內(nèi)字符之間所分布的量和字間的空位所分布的量,是利用一個(gè)空位一字符比(SCRATIO)來(lái)確定的。在該最佳實(shí)施方案中。使用了1比8的比例,這意味著,對(duì)于在字符間引入的每個(gè)擴(kuò)充單元,將在字間的每個(gè)空白字符引進(jìn)入八個(gè)擴(kuò)充單元。因此,在框419中,擴(kuò)充的總量被除以字符數(shù)加上空位-字符比乘以字間出現(xiàn)的空白數(shù)后得來(lái)的。應(yīng)當(dāng)指出,因?yàn)槊恳豢瘴蛔址际菃为?dú)擴(kuò)充的,所以,如果操作員在某些字之間打進(jìn)2個(gè)空位,不在其它的字之間打進(jìn)一個(gè)空位,那么由兩個(gè)空位隔開(kāi)的字間擴(kuò)充將為由一個(gè)空位隔開(kāi)的字間擴(kuò)充的兩倍那樣大。
然后進(jìn)入框421,計(jì)算字符內(nèi)擴(kuò)充極限。該字符內(nèi)擴(kuò)充極限(ILECHECK)是在字符之間允許引進(jìn)的擴(kuò)充的最大量,它使字內(nèi)的字符不致于超過(guò)最大量。通過(guò)把水平移動(dòng)變址乘以NILEFAIL,而后再除以DILEFALL的一個(gè)常數(shù)比來(lái)計(jì)算字符內(nèi)擴(kuò)充極限。在該最佳實(shí)施方案中,NILEFAIL是3,而DILEFAIL是2,所以在該最佳實(shí)施例方案中字符之間所允許的最大擴(kuò)充量是標(biāo)準(zhǔn)字符寬度的三等分。
然后進(jìn)入框423,檢查是否字符內(nèi)擴(kuò)充值超過(guò)了字符內(nèi)擴(kuò)充極限。如果這個(gè)擴(kuò)充值沒(méi)有超過(guò)該極限,則從框423進(jìn)入框427,把所計(jì)算出的擴(kuò)充量用于字內(nèi)字符間的擴(kuò)充。
如果字符內(nèi)擴(kuò)充量比字符內(nèi)擴(kuò)充極限大,則進(jìn)入框425,把該擴(kuò)充量定為等于字符內(nèi)擴(kuò)充極限。
接著進(jìn)入框427,把字符內(nèi)擴(kuò)充余量置為零,使得任何剩余擴(kuò)充部分在字間出現(xiàn)。
然后進(jìn)入框429,計(jì)算字符間的總擴(kuò)充(EXPTOT),它是每個(gè)字符之間的擴(kuò)充量乘以可擴(kuò)充字符的數(shù)目。接著進(jìn)入框431,通過(guò)分配字內(nèi)字符之間的某些擴(kuò)充來(lái)分配字符鏈內(nèi)的字符內(nèi)擴(kuò)充。用圖5的分配程序來(lái)完成這個(gè)分配。
接著進(jìn)入框433,計(jì)算分配在字間的空位中的剩余擴(kuò)充。通過(guò)取出所要求的總擴(kuò)充量,并從中減去在字符之間已經(jīng)出現(xiàn)的擴(kuò)充量,我們可以計(jì)算出剩余量。
然后進(jìn)入框435,計(jì)算分配在字對(duì)之間的每一字內(nèi)空間里的擴(kuò)充量。通過(guò)取出擴(kuò)充剩余量,并除以字符的數(shù)目來(lái)實(shí)現(xiàn)這個(gè)計(jì)算。
接著進(jìn)入437,計(jì)算未被均勻地分配在字間空間的擴(kuò)充剩余。當(dāng)實(shí)現(xiàn)以擴(kuò)充總量除以字間出現(xiàn)的空位數(shù)目的整理操作時(shí)取出剩余量。以此來(lái)完成這項(xiàng)工作。這是用取模函數(shù)(MOD)來(lái)做的。
然后進(jìn)入框439,設(shè)置在字間分配的總的擴(kuò)充剩余,它即是在框433中所計(jì)算的擴(kuò)充量。
再進(jìn)入框441,利用圖5的分配程序來(lái)分配字符鏈內(nèi)字間空間里的擴(kuò)充。
當(dāng)字符間和字之間所有的擴(kuò)充都已出現(xiàn)以后,進(jìn)入框443,重新連接在標(biāo)記處或組合字符中被切斷的字符記錄鏈,以便把已經(jīng)對(duì)齊的行的部分再連接到未能對(duì)齊的行的任何部分,并且完成行對(duì)齊,而后返回到框445中的調(diào)用程序。
下面將討論分配程序,當(dāng)正在分配行內(nèi)字間的空間時(shí),在剩余量被用盡之前,任何剩余量都是從字間實(shí)現(xiàn)的總擴(kuò)充量除以字間的空位數(shù)目(這里在字間是均勻分配的)所得到的。在每一行信息塊(LIB)中,有一個(gè)側(cè)邊標(biāo)志位,在每一行排隊(duì)后把它觸發(fā),使它從一行到另一行間倒換。這個(gè)側(cè)邊標(biāo)志判定是否有剩余,如果有,則在行的左端或右端開(kāi)始分配。通過(guò)倒換這種分配,引起頁(yè)面故障的河溝或?qū)捪兜目赡苄詼p少3。這對(duì)于基本單位較大的打印機(jī)(比如行式打印機(jī))比起字母質(zhì)量打印機(jī)(其上每一剩余單元可能只相當(dāng)于1/120英寸)更為重要得多。
現(xiàn)在返回到框415,在這里進(jìn)行檢查,以判定對(duì)齊的行中可擴(kuò)充字符的數(shù)目是否等于零。如果其回答是肯定的,則從框415進(jìn)入框447。
如果進(jìn)入了框447,這說(shuō)明對(duì)齊的行不包含能在其間各位中產(chǎn)生擴(kuò)充的任何連續(xù)的字符,并且說(shuō)明所有的擴(kuò)充必定發(fā)生在字之間。在框447中進(jìn)行檢查,以判定可擴(kuò)充空位的數(shù)目是否等于零。如果等于零,則從框447進(jìn)入框443,在從對(duì)齊程序出口之前進(jìn)行清除。如果從框447進(jìn)入了框443,這表明該行在字間不包含任何不擴(kuò)充的字符,或可擴(kuò)充的空位。因此,不能發(fā)生任何的擴(kuò)充,且不能把行對(duì)齊。如果框447判定在行里有可擴(kuò)充的空位,則進(jìn)入到框449。
在框449中,通過(guò)把所要求的擴(kuò)充量除以在其中進(jìn)行分配的可擴(kuò)充的空間字符的數(shù)目,來(lái)計(jì)算在字間的空位字符中分配的擴(kuò)充部分。
然后進(jìn)入框451,計(jì)算其擴(kuò)充剩余,即在所有的空位中不能進(jìn)行均勻分配的所要求的擴(kuò)充量。通過(guò)取出所要求的擴(kuò)充總量并被不擴(kuò)充空位數(shù)目的整除,來(lái)計(jì)算該剩余量。通過(guò)取模(MOO)操作來(lái)完成這項(xiàng)工作。
在框453中,調(diào)用分配程序,以將擴(kuò)充分配給字符鏈內(nèi)的字內(nèi)空位中。擴(kuò)充分配以后,從框453進(jìn)入框443,在這里完成行的對(duì)齊。
現(xiàn)在返回到框417進(jìn)行檢查,以判定可擴(kuò)充空位的數(shù)目是否為零,如果是,則從框417進(jìn)入框455。如果進(jìn)到此分支,就表明在對(duì)齊的行內(nèi)有可擴(kuò)充字符,但在行內(nèi)的字間沒(méi)有任何對(duì)齊的可擴(kuò)充空位。所以,如果有任何擴(kuò)充,那么行的所有擴(kuò)充必定出現(xiàn)在字內(nèi)的字符之間,而在字之間的空位里不會(huì)有擴(kuò)充發(fā)生。
在框455中,通過(guò)把所要求的擴(kuò)充總量除以行內(nèi)擴(kuò)充字符的數(shù)目,來(lái)計(jì)算字符之間被擴(kuò)充的量。
在框457中,通過(guò)在擴(kuò)充總量除以字符數(shù)目的時(shí)候確定剩余量,來(lái)計(jì)算在字符之間不能平均分配的擴(kuò)充量。這是利用取模操作,求總擴(kuò)充量對(duì)可擴(kuò)充字符數(shù)目的余數(shù)來(lái)實(shí)現(xiàn)的。
然后進(jìn)入框459,如上對(duì)框421所說(shuō)那樣計(jì)算字符由擴(kuò)充極限。計(jì)算這個(gè)字符內(nèi)擴(kuò)充極限的目的在于,不允許字內(nèi)的字符之間的擴(kuò)充量變得過(guò)大。
在框461中進(jìn)行檢查,以判定是否能使行內(nèi)的字符之間剩余量的分配達(dá)到不引人注意的程度。這是通過(guò)把常量REMFAIL與HMI(這是標(biāo)準(zhǔn)字符的寬度)進(jìn)行比較實(shí)現(xiàn)的。標(biāo)準(zhǔn)字符的寬度(HMI)是依據(jù)上述的用于打印該行的具體輸出設(shè)備的基本單位的數(shù)目限定的。
例如,如果用一個(gè)12間距型的字母質(zhì)量打印機(jī),它的最小的移動(dòng)1/120英寸,則標(biāo)準(zhǔn)字符寬度就是空位的寬度,將為10,這意味著橫移一個(gè)標(biāo)準(zhǔn)字符的距離打印機(jī)設(shè)備可做的最小移動(dòng)距離為10。在該最佳實(shí)施方案中,常量REMFAIL是按照等于6限定的,這樣,如果正用的打印機(jī)的HMI為10,因?yàn)?不大于10,則從框461進(jìn)入框465,而不用把剩余量設(shè)置為0。在這種情況下,能夠在字符之間分配剩余量,因?yàn)橐呀?jīng)確認(rèn),字符之間的擴(kuò)充只是一個(gè)字符寬度的1/6(數(shù)值6為REMFAIL的常量),在某些字符之間多一些,這都不會(huì)引起打印資料的讀者的注意。
就HMI為1的行式打印機(jī)而言,打印頭所能移動(dòng)的最小距離是一個(gè)完整的標(biāo)準(zhǔn)字符寬度,因?yàn)?比1大,將從框461進(jìn)入框463。在這種情況,不能在字符之間分配剩余量,因?yàn)槿藗兏械?,與其中未加入多于一個(gè)剩余的字符間的擴(kuò)充相比,在一些字符之間比一個(gè)完整字符寬度還多的擴(kuò)充(直到剩余用盡)將是顯著的。在框463中,把剩余量置零,以便不在字符之間分配剩余量。
于是,在框461中做比較,在框463置剩余量,查明是否所有的擴(kuò)充都發(fā)生在字符之間而在字之間沒(méi)有擴(kuò)充,如果至多為字符寬度的1/6,則只允許在字符之間分配剩余,當(dāng)把所有的剩余量分配完成以后,在分配剩余部分的字符之間出現(xiàn)的擴(kuò)充比其它字符之間出現(xiàn)的擴(kuò)充多得多。
然后進(jìn)入框465,判定在字符之間發(fā)生的擴(kuò)充量是否大于或等于框459里所計(jì)算出的字符間擴(kuò)充極限。如果框465確定字符間的擴(kuò)充未超過(guò)該極限,則進(jìn)入框469。如果字符間擴(kuò)充量超過(guò)該極限,則從框465進(jìn)入框467。
在框467中,把字符之間的擴(kuò)充值設(shè)置為字符內(nèi)擴(kuò)充極限,并把剩余量置零,這樣就沒(méi)有任何剩余的分配在字符之間發(fā)生,因?yàn)槟切┌ㄊS嗟囊粋€(gè)附加單元的擴(kuò)充將會(huì)超過(guò)字符內(nèi)的擴(kuò)充極限。
在框469中,將進(jìn)行總擴(kuò)充的計(jì)算,總的擴(kuò)充是字符間的擴(kuò)充乘以可擴(kuò)充字符數(shù),再加上剩余量。
然后進(jìn)入框471,調(diào)用分配程序,來(lái)分配字內(nèi)的字符之間的擴(kuò)充。在字符之間分配了擴(kuò)充以后,行的對(duì)齊完成了,在返回對(duì)齊程序的調(diào)用程序之前從框471進(jìn)入框443。
分配空間程序在圖5中描述了擴(kuò)充分配程序。當(dāng)一行被擴(kuò)充來(lái)對(duì)齊右邊緣時(shí),通過(guò)對(duì)齊程序來(lái)調(diào)用分配空間程序,來(lái)分配字內(nèi)字符間的擴(kuò)充,或字間的空格。在框501進(jìn)入分配程序。在框503中,進(jìn)行檢查判定擴(kuò)充分配是由左向右進(jìn)行的(從字符記錄鏈的始端開(kāi)始)還是由右向左進(jìn)行(從字符記錄鏈的末端開(kāi)始)。通過(guò)檢查在行信息塊(LIB)中的邊標(biāo)志來(lái)確定是否有余量分配在行的始端和末端。隨著每一行產(chǎn)生邊緣標(biāo)志的倒換,通過(guò)改變不能均勻分配的擴(kuò)充余量的分配可以有助于減少在行的始端和末端形成大量的空位的可能性。
如果從左向右分配,則進(jìn)入框505并且將指向?qū)⒁獢U(kuò)展的第一個(gè)字符的指針定在字符記錄鏈的始端。如果擴(kuò)充將從右到左進(jìn)行,則把在框507中指針定在字符記錄鏈的最后一個(gè)字符上。
在框509中,作一個(gè)檢查來(lái)確定指在字符記錄鏈中當(dāng)前字符記錄上的指針是否為NIL。
如果是NIL,它表示已到達(dá)鏈的末端并且做擴(kuò)充分配,從框509進(jìn)入框511,在框511返回到分配程序的調(diào)用程序。如果字符指針不是NIL那么,進(jìn)入框513。
在框513中進(jìn)行檢查,看現(xiàn)行字符是否可擴(kuò)充。如果下一個(gè)字符是現(xiàn)行字符的復(fù)合分量則現(xiàn)行的字符不可擴(kuò)充,該現(xiàn)行字符是一個(gè)空白并且沒(méi)在做字間擴(kuò)充,或者該現(xiàn)行字符和下一個(gè)字符都不是空白且沒(méi)在做字符間擴(kuò)充。當(dāng)現(xiàn)行字符不可擴(kuò)充時(shí),進(jìn)入框515,通過(guò)把它在其字符記錄中的水平位置增加一個(gè)總擴(kuò)充的現(xiàn)行值(EXPTOT),把下一個(gè)字符右移。
如果即時(shí)字符可擴(kuò)展,由框513進(jìn)入框517來(lái)檢查分配是由左向右還是由右向左進(jìn)行的。如果分配擴(kuò)充是由左向右的則進(jìn)入框519并且擴(kuò)充值增加了累計(jì)的擴(kuò)充值。如果分配是由右向左進(jìn)行,則由框517進(jìn)入框533。
由框519轉(zhuǎn)入512用來(lái)檢查余量是否為零。如果余量為零,那么所有不能被均勻分配的擴(kuò)充已被分配,并且不再需多余量了。
如果有一個(gè)余量并且末被全部分配(即通過(guò)每次分配一個(gè)最小移動(dòng)單位進(jìn)行字符擴(kuò)展來(lái)使用余量)然后進(jìn)入框523,并且累積擴(kuò)充值加1而余量減1然后從523進(jìn)入框525。
框525利用一個(gè)累積擴(kuò)充值(EX PTOT)把下一個(gè)字符的水平位置調(diào)整到EX PTOT右邊的字符位置,這項(xiàng)工作的完成是當(dāng)與它有關(guān)的字符記錄中看到其右端的下一個(gè)字符的水平位置時(shí)把它取出并將累積擴(kuò)充值加到其上。
然后進(jìn)入框527,進(jìn)行檢查以確定擴(kuò)充分配是從左向右還是從右向左。如果是從左向右進(jìn)行則進(jìn)入框529,現(xiàn)行字符指針移到指向右邊的下一個(gè)字符。如果擴(kuò)充是從右向左,則進(jìn)入框531,現(xiàn)行字符指針指向左邊前一個(gè)字符。在框529或框531中調(diào)節(jié)了現(xiàn)行字符指針后,程序回到框509,檢查是否記錄鏈的末端字符。
在確定了現(xiàn)行字符是可擴(kuò)充的以后,如果擴(kuò)充是從右向左,則回到框533。在框533中,右邊的下一個(gè)字符的水平位置調(diào)整一個(gè)累積擴(kuò)充值。
然后進(jìn)入框535,并且累積擴(kuò)充值減少了一個(gè)該擴(kuò)充值,這項(xiàng)工作的完成是在擴(kuò)充由右向左時(shí),在行的右端的字符根據(jù)所需擴(kuò)展的總量移動(dòng),并且每一個(gè)后續(xù)字符則根據(jù)不斷減小量,移動(dòng)這個(gè)減小量等于其本身的擴(kuò)充值(EX PVAL)。
在框537,進(jìn)行檢查,來(lái)確定余量是否等于0,如果等于0則進(jìn)入框527。如果余量不等于0,那么累積擴(kuò)充值減1,同時(shí)余量減1。因此,可以知道當(dāng)由右向左分配時(shí),余量在各處一次分配一個(gè)單元,直到余量用盡完成擴(kuò)充由框539進(jìn)入框527。
對(duì)齊程序的源編碼程序表和分配程序都附在本發(fā)明的附錄中,這些程序都是用PA SCAL語(yǔ)言編寫(xiě)的,它可用于Hoheywell,Information System InC霍尼維爾,信息系統(tǒng)公司的DPS6計(jì)算機(jī),這種語(yǔ)言在霍尼維爾信息系統(tǒng)公司的題目為DPS6和Level 6 Gcos 6Pascal用戶(hù)指南的說(shuō)明書(shū)中進(jìn)行了詳細(xì)描述,該說(shuō)明書(shū)的序號(hào)為GZ40,在此附上以供參考。
從上述對(duì)齊程序和分配程序的討論,可以知道通過(guò)首先試圖分配字中字符間的擴(kuò)充部分到某一限度來(lái)使行對(duì)齊,以使字符不會(huì)有超量的空間間隔,并把需要擴(kuò)充的余量分配在字間的空間內(nèi)。還可以更進(jìn)一步了解到因?yàn)樽址g和詞間的擴(kuò)充量不能總是均勻的,致使非均勻分配,或余量,擴(kuò)充部分從行的左到右端之間變化,以便于盡可能多地減少大量的或超長(zhǎng)空白格出現(xiàn),否到,如果余量總是沿一邊分配,就可能使空白總在行尾端出現(xiàn)。還可以進(jìn)一步認(rèn)識(shí)到,通過(guò)使用水平移動(dòng)變址(HMZ)和打印機(jī)最小移動(dòng)單元,一個(gè)規(guī)范的對(duì)齊程序可以用于所有的輸出設(shè)備。
帶一個(gè)復(fù)合字符的對(duì)齊之例圖8所示之例為打印正文中的一行及其相應(yīng)的輸入緩存器,它們提供給打印程序以便在輸出設(shè)備上打印。圖8中的第一行用了一個(gè)指示標(biāo)記指示一頁(yè)中的各欄,可要求有一組標(biāo)記是在4和5列中間,而右端邊緣標(biāo)記組將出現(xiàn)在23和24列中間。圖8中打印出的正文行表示希望在所打印的行中包括有一個(gè)帶上標(biāo)“1”的字“SUP”和一個(gè)帶下標(biāo)“2”的字“SUB”。還可看出在第15列中的字符是屬于一個(gè)復(fù)合字符,它由大寫(xiě)字母“C”,在其下方加逗點(diǎn)并在其上方加重音號(hào)(例如模仿法語(yǔ)重音Cedila)所組成,在圖8中的輸入緩存器行示出了將提供到打印程序中去的要印到輸出設(shè)備上的相應(yīng)字符。
在圖8的輸入緩存器中,向右的箭頭用于指示一個(gè)標(biāo)記鍵被按下,向上的箭頭用于指示上標(biāo)鍵被按下,向下的箭頭用于指示下標(biāo)鍵被按下,三角形用于指示一個(gè)空白字符鍵被按下。須指出“C”和其上帶有的重音號(hào)和其下帶有的逗號(hào)的復(fù)合字符在緩存器中是以單一字符來(lái)代表的。這是假設(shè)在輸入資料的鍵盤(pán)上有一個(gè)相應(yīng)于該復(fù)合字符的鍵,實(shí)際上該復(fù)合字符可以由緩存器中的多個(gè)字符序列來(lái)表示,這個(gè)字符的字符碼為一個(gè)特殊的字符碼。
圖9說(shuō)明與圖8的輸入緩存器相對(duì)應(yīng)的字符記錄鏈,表示輸入緩存器已經(jīng)由打印程序通過(guò)應(yīng)用圖6所示的字符變換表轉(zhuǎn)換過(guò)的情況。在圖9中,字符記錄之間的指針是用帶箭頭的弧線指示的,箭頭指到鏈中的下一個(gè)字符記錄和其前面的字符記錄。在圖9中,相應(yīng)的字符記錄頂上括號(hào)內(nèi)的符號(hào)代表將要輸出到打印資料頁(yè)上的字符圖形。在各字符記錄中,字符圖形是用多位碼表示的,當(dāng)這項(xiàng)多位編碼被輸出到輸出設(shè)備上時(shí)即能產(chǎn)生相應(yīng)的字符圖形。在圖9中各字符記錄框內(nèi)的第二行代表用于保持打印資料輸出設(shè)備中的水平基本單位的水平位置和其水平偏移。在本例中,假定所有的字符(帶重音號(hào)和逗號(hào)的字符除外)都是10個(gè)基本單位的標(biāo)準(zhǔn)寬度,于是,在第一欄上的字符在位置0處開(kāi)始而在第二欄上的字符就在水平位置10處開(kāi)始等等。在本例中重音字符占有6個(gè)基本單位的寬度,逗號(hào)則占有4個(gè)基本單位的寬度。這些重音號(hào)和逗號(hào)字符的水平位置按照上述的它們的寬度應(yīng)把這些字符集中到“C”上頭,此外逗號(hào)因?yàn)樵谧址儞Q表(見(jiàn)圖6中表619)中已指定有一個(gè)水平偏移,故它已將其中心位置右移了一個(gè)基本單位。
圖9中各字符記錄框內(nèi)的第三行包含有字符的垂直位置和垂直偏移,是以打印資料的輸出設(shè)備的垂直基本單位來(lái)量度的。對(duì)此例來(lái)說(shuō)是假定該輸出設(shè)備能完成。每英寸48個(gè)垂直運(yùn)動(dòng)基本單位,可把該資料可打印成每英寸8行,這就意味著該輸出設(shè)備能夠完成每行有6個(gè)基本單位的垂直運(yùn)動(dòng),并且也說(shuō)明分別向上移1/3或向下移1/3即能在每個(gè)上標(biāo)層或下標(biāo)層分別打出該上標(biāo)和下標(biāo),所以下標(biāo)層1將導(dǎo)致一個(gè)垂直運(yùn)動(dòng)一2,兩層上標(biāo)將導(dǎo)致垂直運(yùn)動(dòng)+4。
圖9中字符記錄框內(nèi)底行的內(nèi)容中包括有字銜接、復(fù)合字符以及對(duì)齊標(biāo)志。如果字銜接標(biāo)志是1,則即意味著這個(gè)字符是一個(gè)銜接的起始點(diǎn),該銜接標(biāo)志在具有水平位置90、140、142、145和190的各字符記錄中是一個(gè)1,這些字符各相應(yīng)于正文行中的各字的起始。具有水平位置140、142和145的字符記錄框中每個(gè)都具有銜接標(biāo)志置位,這是因?yàn)樗鼈兊拿恳粋€(gè)都是一個(gè)字的起始字符,它們共同構(gòu)成一個(gè)復(fù)合字符。
如果字符記錄是一個(gè)復(fù)合字符中的第二到第N個(gè)字符,則該復(fù)合標(biāo)志(底行中的中間標(biāo)志)就是一個(gè)1,該組合標(biāo)志在與水平位置為142和145的字符記錄框相對(duì)應(yīng)的字符記錄框中是一個(gè)1。
對(duì)齊標(biāo)志是底行中居于右側(cè)的標(biāo)志,如果該字符在對(duì)齊過(guò)程中能被移動(dòng),則該對(duì)齊標(biāo)志為一個(gè)1,這個(gè)標(biāo)志在圖9中所有的字符記錄框中都是一個(gè)1,而相應(yīng)于水平位置為40的字符的字符記錄則例外,它是在字“SUP”中的“S”,這個(gè)字不能被移動(dòng),因?yàn)樗窃诎聪聵?biāo)志鍵后在一行中所出現(xiàn)的第一個(gè)字符。
圖10說(shuō)明對(duì)齊在圖9中的字符記錄鏈的結(jié)果。在圖8所示,右側(cè)邊緣被置于23和24行之間,所以該右側(cè)邊緣是置于水平位置230的。當(dāng)從字符記錄鏈的末端回掃到發(fā)現(xiàn)一個(gè)銜接點(diǎn)時(shí),所發(fā)現(xiàn)的第一個(gè)銜接點(diǎn)便是用于字“EXAMPLE”的字母“E”的字符記錄,該字母具有一個(gè)水平位置190。因此,字符記錄鏈在此點(diǎn)中斷,并且與鏈中超過(guò)這一點(diǎn)的各字符記錄相聯(lián)系的字符記錄將全變成正文的下一行,并且它們的水平位置被相應(yīng)地調(diào)整成如圖10中所示,即相應(yīng)于字“EXAMPLE”的各字符記錄從水平位置0開(kāi)始接續(xù)地進(jìn)行到水平位置70。在字“COMP”后面的字符空格也被刪除,因此對(duì)齊的字符記錄鏈包含有字符“1”,它始于水平位置0;直到字符“P”,它始于水平位置170。
為了確定在對(duì)齊過(guò)程中一行所必須被擴(kuò)充的量,該占據(jù)180個(gè)水平基本單位寬度的行長(zhǎng)應(yīng)從水平位置被230右側(cè)邊緣位置所減,以產(chǎn)生所需要的擴(kuò)充量,即是50個(gè)水平基本單位。當(dāng)該行被回掃描時(shí),發(fā)現(xiàn)在水平位置40處的S是“非對(duì)齊的”,于是處于該鏈中這個(gè)字符記錄以前的任意字符都不能在此對(duì)齊過(guò)程中重改位置。當(dāng)在能被調(diào)整的那行的區(qū)段中計(jì)算可擴(kuò)充的字符數(shù)時(shí),確定出可擴(kuò)充的字符(CHARS)數(shù)是等于11,且復(fù)合分量(COMPS)是等于2,因此,對(duì)于復(fù)合分量調(diào)整的可擴(kuò)充字符數(shù)就是11-2,即結(jié)果數(shù)為9。在能擴(kuò)充的該行中存在的可擴(kuò)充的空格數(shù)是2。這些空格字符就是出現(xiàn)在圖9中水平位置80和130處的空格。
當(dāng)對(duì)齊程序確定出每個(gè)可擴(kuò)充的可擴(kuò)字符數(shù)量時(shí),即是擴(kuò)充量(50)除以可擴(kuò)充的字符數(shù)(9),加上字符空格比(8比1)乘以可擴(kuò)充的空格數(shù)(2),其結(jié)果即為50被9除加8乘2,即等于25分之50,這生成一個(gè)字符間擴(kuò)充值(EXPVAL)2。故該對(duì)齊程序即將調(diào)用分配程序用2個(gè)水平基本單位去擴(kuò)充每個(gè)可擴(kuò)充的字符。
然后,對(duì)齊程序確定在字間的空格中能實(shí)現(xiàn)的擴(kuò)充量,這可由從所要求的總擴(kuò)充量(該值是50)中減去已被完成的字間擴(kuò)充量,它是2乘9,于是50-18等于總數(shù)為32個(gè)擴(kuò)充的基本單位,這些需被分配在字符記錄鏈中的空格中,每個(gè)字間空格的擴(kuò)充值可通過(guò)把擴(kuò)充量(32)除以空格數(shù)(2),以產(chǎn)生16個(gè)水平基本單位的字間擴(kuò)充值,然后用擴(kuò)充值16來(lái)調(diào)用分配程序,該值是用于擴(kuò)充每個(gè)空格字符和改變?nèi)我忄徑址恢玫摹?br>在上述對(duì)齊的例子中,無(wú)論在計(jì)算字符間或是字間的擴(kuò)充值時(shí)都沒(méi)有任何余量,如果字符間擴(kuò)充值在計(jì)算后產(chǎn)生了余量,則它將被置0,且不把它分配在字符之間,這是因?yàn)樵谶@行中存有空格能分配它們的緣故。
如果在計(jì)算字間空格擴(kuò)充時(shí)產(chǎn)生了余量,則在每次即分配一個(gè)基本單位加到每個(gè)被擴(kuò)充的空格的16個(gè)基本單位上去,直到余量全被用盡為止。該余量可以該行的左端或右端開(kāi)始分配,這取決于在被對(duì)齊行的信息方框中的邊緣標(biāo)志值在于何處而定。
對(duì)齊程序的末尾的字符記錄鏈連同圖9中的字符記錄鏈一起如圖10所示,它具有修正過(guò)的水平位置220的字符記錄框(該行右端的“P”),該記錄框的指針向前指到NIL,以及具有修正過(guò)的水平位置0的字符記錄框(字“EXAMPLE”中前一個(gè)字母E)向后指向NIL,因?yàn)檫@個(gè)字符記錄框是下一打印行的開(kāi)始。
圖11說(shuō)明在一個(gè)輸出行內(nèi)的字符記錄框在其垂直位置上的調(diào)整結(jié)果,這是在輸出行被傳送到驅(qū)動(dòng)打印機(jī)的相應(yīng)輸出設(shè)備的驅(qū)動(dòng)器完成的。如前所述,各輸出行應(yīng)被調(diào)整到這樣子,即對(duì)位于紙上較高位置者先進(jìn)行輸出,然后對(duì)下一個(gè)較低行進(jìn)行輸出,這樣以便使紙能在輸出設(shè)備中向上行。在圖11中有4個(gè)排隊(duì)輸出信息框(QOIB)它們是1101,1103,1105和1107。
圖11中的4個(gè)QOIBs通過(guò)一個(gè)“接下步(NEXTQO)”指針連系起來(lái),除去其最后一個(gè)是指向NIL外,每個(gè)NEXTQO都指到下一步QOIB。QOIB1101中具有屬于兩個(gè)字符記錄框的一條字符記錄鏈,這兩個(gè)字符記錄在垂直位置2被打印。這些字符記錄框相當(dāng)于字符“1”,它被作為上標(biāo)來(lái)打印,以及另一個(gè)相當(dāng)于被打印在復(fù)合字符“C”上方的重音號(hào)。QOIB1103包含有14個(gè)字符記錄框,它們相當(dāng)于被打印正文的基本行。QOIB1105包含一個(gè)單個(gè)字符記錄框,它是逗號(hào)并以相對(duì)的垂直位置-1打在復(fù)合字符“C”的下方,以及QOIB1107也包含有一個(gè)字符記錄框,它相當(dāng)于字符“2”作為下標(biāo)來(lái)出現(xiàn),并具有相對(duì)的垂直位置-2。
當(dāng)這些字符鏈按照垂直位置實(shí)際輸出到輸出設(shè)備中時(shí),每條字符記錄鏈將導(dǎo)致在輸出設(shè)備上打印出正文的一行,所以在如圖8所示的例中,輸出到打印機(jī)上的正文將出現(xiàn)為4個(gè)獨(dú)立行。
從以上的討論中可知,本發(fā)明的對(duì)齊方法和處理復(fù)合字符的方法能夠廣泛靈活地實(shí)現(xiàn)對(duì)齊行內(nèi)的文本和復(fù)合那些復(fù)合字符,以致可用多擊那些能垂直或水平偏移的單個(gè)字符的方法而復(fù)合出復(fù)合字符。
雖然在此最佳實(shí)施方案中所闡明的是在一行中作右側(cè)對(duì)齊,但是本方法對(duì)進(jìn)行左側(cè)對(duì)齊是同樣能夠應(yīng)用的。
雖然在此最佳實(shí)施方案中已闡明的是關(guān)于交替地利用在相鄰行間的余量并且是利用該行的右端或左端起始的余量進(jìn)行對(duì)齊,但是把它發(fā)展成從每第三行的中央進(jìn)行處理而用盡該余量。也是容易想到的。
雖然在本最佳實(shí)施方案中闡述的是關(guān)于利用一個(gè)打印機(jī)作為輸出設(shè)備,但是本發(fā)明也同樣能夠應(yīng)用于各種其它型式的輸出設(shè)備。
雖然在本最佳實(shí)施方案中已闡明的是關(guān)于進(jìn)行字間擴(kuò)充附加上字符間擴(kuò)充,但是也能借發(fā)生在所有的字間的空白的擴(kuò)充而不用字符間的擴(kuò)充。同樣地,本方法也能改變成只作字符間的擴(kuò)充,而不作字間擴(kuò)充。這些變化都能通過(guò)整定字符對(duì)空格的擴(kuò)充比(SCRAT10)分別為較大的數(shù)或?yàn)?來(lái)實(shí)現(xiàn)。借用修改該對(duì)齊程序邏輯而消除無(wú)用的邏輯能取得更好的方法,但這對(duì)本技術(shù)領(lǐng)域
人員是顯而易做的。
在結(jié)合本最佳實(shí)施方案揭示并闡明的本發(fā)明的同時(shí),有關(guān)上述技術(shù)領(lǐng)域
的人員都將懂得,對(duì)上述和形式和細(xì)節(jié)方面所做出的其它改變都離不開(kāi)本發(fā)明的構(gòu)思范圍。
權(quán)利要求
1.一種在輸出裝置上輸出一個(gè)本來(lái)不具備的圖形字符的方法包括如下步驟A、定義一個(gè)表,該表將一個(gè)輸入字符變換為兩個(gè)或多個(gè)輸出圖形字符;和B、在輸入字符發(fā)生時(shí)將其變換為兩個(gè)或多個(gè)輸出字符,并且在處理復(fù)合字符的任何地方都將這些輸出字符作為一個(gè)獨(dú)立的單元來(lái)對(duì)待。
2.權(quán)利要求
1的方法,其中只有選定的輸入字符被變換為多重輸出字符。
3.權(quán)利要求
2的方法,其中在該變換表中采用一個(gè)預(yù)定的代碼來(lái)指示對(duì)該層上的輸入字符沒(méi)有復(fù)合分量。
4.權(quán)利要求
1的方法,其中該變換表有選擇地包含與每一輸出字符相關(guān)的垂直位移信息,這樣即可控制圖形字符的垂直定位。
5.權(quán)利要求
1的方法,其中該變換表有選擇地包含與每一輸出字符相關(guān)的水平位移信息,這樣即可控制圖形字符的水平位置。
6.權(quán)利要求
1的方法,其中該字符變換表中的復(fù)合輸出字符按寬度遞減的層次排列,并且該變換表包括與每一輸出字符相關(guān)的寬度信息,這樣即可控制與一個(gè)復(fù)合字符相關(guān)的所有輸出字符的中心定位。
7.權(quán)利要求
1的方法,其中該字符變換表中的復(fù)合輸出字符被排列為最寬的字符出現(xiàn)在第一層中。
8.權(quán)利要求
7的方法,其中除最寬的分量外的每一輸出字符的分量均根據(jù)最寬的分量而定中心。
9.權(quán)利要求
1的方法,其中該變換表包括字符寬度信息。
10.權(quán)利要求
1的方法,其中該變換表包括字符打印密度信息。
專(zhuān)利摘要
一種在文字處理系統(tǒng)中的同一字符位置上通過(guò)多重打印兩個(gè)或多個(gè)字符以打印出復(fù)合字符的方法。該方法可以利用輸出裝置的字符組內(nèi)找出的單個(gè)圖形字符產(chǎn)生復(fù)合的圖形字符。該方法在打印形成該復(fù)合字符的單個(gè)字符之間為打印頭提供垂直的和/或水平的位移。
文檔編號(hào)B41J3/01GK86103724SQ86103724
公開(kāi)日1987年3月4日 申請(qǐng)日期1986年6月3日
發(fā)明者羅伯特·M·卡羅索 申請(qǐng)人:霍尼韋爾信息系統(tǒng)公司導(dǎo)出引文BiBTeX, EndNote, RefMan
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
吉木乃县| 沁阳市| 延长县| 夏津县| 淮安市| 金华市| 凤山市| 阳高县| 巴塘县| 奉化市| 佳木斯市| 都兰县| 光山县| 祁连县| 香格里拉县| 镇平县| 剑河县| 新民市| 文安县| 都安| 霍林郭勒市| 海门市| 剑川县| 湘潭县| 阳原县| 肃南| 内黄县| 丰城市| 会东县| 伊宁市| 德兴市| 云阳县| 静海县| 东辽县| 徐州市| 彩票| 高雄县| 襄城县| 永德县| 怀远县| 阿图什市|