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