h. On mozhet takzhe podgotav- livat' parallel'nyj port dlya operacij preryvaniya, s tem chtoby printer posylal preryvanie k processoru, kogda on gotov k priemu ocherednogo simvola, ostavlyaya processor svobodnym dlya drugih del. Vot znachenie bitov registrov statusa i upravleniya: Registr upravleniya bit 0 0 = normal'naya ustanovka, 1 = vyzyvaet vyvod bajta dannyh 1 0 = normal'naya ustanovka, 1 = avtomaticheskij perevod stroki posle vozvrata karetki 2 0 = inicializirovat' port printera, 1 = normal'naya ustanovka 3 0 = otmena vybora printera, 1 = normal'naya ustanovka 4 0 = preryvanie printera zapreshcheno, 1 = razresheno 5-7 ne ispol'zuyutsya Registr statusa bit 0-2 ne ispol'zuyutsya 3 0 = oshibka printera, 1 = net oshibki 4 0 = printer off-line, 1 = printer on-line 5 0 = bumaga vstavlena, 1 = net bumagi 6 0 = printer podtverzhdaet priem simvola, 1 = normal'- naya ustanovka 7 0 = printer zanyat, 1 = printer svoboden Ne imeetsya nikakih osnovanij, chtoby lyubaya programma ne imela proceduru vosstanovleniya pri oshibkah, voznikayushchih pri rabote s printerom. Horosho napisannaya programma dolzhna nachinat' s proverki togo, chto printer svyazan s mashinoj (on line). Esli prisoedinen ne odin printer, to programma dolzhna pozvolyat' pol'zovatelyu vybrat' s kakim iz nih on budet rabotat'. Krome togo, eta procedura dolzh- na vosstanavlivat' situaciyu pri lyubyh oshibkah printera, pri etom hotelos' by, chtoby ne bylo neobhodimosti snova pechatat' ves' dokument. 6.1.1 Inicializaciya porta printera/povtornaya inicializaciya printera. Programmy dolzhny inicializirovat' port kazhdogo printera (LPT1 - LPT3) pered pervym ispol'zovaniem printera. Porty printera dolzhny takzhe povtorno inicializirovat'sya posle ustraneniya prichin oshibki printera. Ne putajte inicializaciyu porta printera s ini- cializaciej samogo printera. Inicializaciya printera eto vnutren- nee delo printera. Ona proishodit avtomaticheski pri ego vklyuche- nii i v bol'shinstve sluchaev printer ne mozhet byt' povtorno ini- cializirovan bez ego vyklyucheniya i povtornogo vklyucheniya. No prog- ramma mozhet povtorno inicializirovat' printer, v tom smysle, chto mogut byt' vosstanovleny nachal'nye parametry, kotorye printer ispol'zuet dlya pechati, otmenyaya vse special'nye shrifty, ostanovy tabulyacii i t.d. Schitaetsya pravilom horoshego tona proizvodit' takoj sbros printera, kogda programma zavershaet rabotu s nim. YAzyki vysokogo urovnya inicializiruyut port printera avtomati- cheski, no programmy na yazyke assemblera trebuyut dlya etoj celi korotkuyu proceduru. S drugoj storony, vosstanovlenie nachal'nyh parametrov pechati trebuetsya vo vseh programmah. Nekotorye printe- ry, takie kak novye |psonovskie printery, imeyut "glavnyj kod sbrosa", kotoryj privodit k polnomu sbrosu printera. No poskol'ku ne vse printery imeyut takoj kod, to programma dolzhna predusmatri- vat' v svoej zavershayushchej chasti vosstanovlenie vseh izmenennyh parametrov. Naprimer, ona mozhet podat' kody vyklyucheniya kursiva, vyklyucheniya plotnoj pechati i t.d. Ne zabud'te vklyuchit' vyzov etoj procedury v proceduru vyhoda po Ctrl-Break. Imejte v vidu, chto na mnogih printerah simvoly ne pechatayutsya do teh por, poka ne poluchen kod vozvrata karetki, zavershayushchij stroku (ili do teh por poka ne vvedena celaya stroka dannyh). Simvoly mogut spokojno ozhidat' v bufere printera, dazhe posle togo, kak porodivshaya ih programma zavershilas'. Kogda nachinaetsya novaya peredacha dannyh na printer, to eti simvoly budut napechata- ny. CHtoby izbezhat' etoj problemy, ne zabyvajte pochistit' bufer pered nachalom pechati; a v kachestve pravil horoshego tona, chistite bufer takzhe pri zavershenii programmy. |to delaetsya posylkoj na printer koda ASCII 24 (pri etom parametry pechati ne menyayutsya). Srednij uroven'. Funkciya 1 preryvaniya 17H BIOS inicializiruet port printera i vozvrashchaet bajt, dayushchij status porta. Pomestite v DX nomer porta - chislo ot 0 do 2 dlya LPT1 - LPT3, posle chego vyzovite preryva- nie. Bajt statusa printera (identichnyj obsuzhdaemomu v [6.1.2]) vozvrashchaetsya v AH. ;---inicializaciya LPT1 MOV AH,1 ;funkciya inicializacii printera MOV DX,0 ;LPT1 INT 17H ;provodim inicializaciyu Nizkij uroven'. Renistr upravleniya vyvodom kazhdogo adaptera printera imeet bit, kotoryj vyzyvaet inicializaciyu adaptera. |tot registr imeet adres porta na 2 bol'she, chem bazovyj adres adaptera. Napominaem, chto bazovyj adres dlya LPT1 hranitsya v yachejke 0040:0008, dlya LPT2 - v 0040:000A i t.d. Imeyut znachenie tol'ko mladshie 5 bitov re- gistra upravleniya vyvodom. Bit 2 - bit inicializacii printera i obychno on ustanavlivaetsya v 1. Dlya inicializacii adaptera nado sbrosit' etot bit v 0 na tysyachu taktov pustogo cikla (3000 dlya AT ili na 1/20 sekundy, ispol'zuya schetchik vremeni sutok BIOS [2.1.5]). V etot moment nuzhno, chtoby byl ustanovlen tol'ko bit 3 (printer vybran). Poetomu poshlite v port znachenie 12, sdelajte zaderzhku, a zatem poshlite v port obychnoe (bez preryvanij) neini- cializonnoe znachenie, kotoroe ravno 8. V dannom primere inicializiruetsya LPT1: ;---inicializiruem LPT1 MOV DX,ES:[8] ;schityvaem bazovyj adres v DX INC DX ;pribavlyaem 2 k bazovomu adresu INC DX ; MOV AL,12 ;znachenie dlya inicializacii OUT DX,AL ;nachinaem inicializaciyu DELAY: MOV AX,1000 ;nachalo pustogo cikla DEC AX ;umen'shaem schetchik JNZ DELAY ;povtoryaem 1000 raz MOV AL,8 ;obychnoe znachenie dlya registra OUT DX,AL ;konec inicializacii 6.1.2 Proverka togo, chto printer svyazan s mashinoj. Programma vsegda dolzhna proverit', chto printer svyazan s mashi- noj, pered tem, kak poslat' na nego vyvod. Legko ustanovit', chto printer ne gotov, tak kak bit 3 registra statusa printera usta- navlivaetsya v 1 v etom sluchae. No namnogo slozhnee tochno oprede- lit' pochemu printer ne gotov: vyklyuchen li on, otmenen vybor prin- tera ili v nem net bumagi. |to proishodit iz-za togo, chto printe- ry raznyh proizvoditelej posylayut raznye nabory bitov v registr statusa printera, dazhe kogda oni nahodyatsya v identichnom sostoya- nii. Hotya registr statusa imeet bity, kotorye dolzhny pokazyvat' eti tri sostoyaniya printera, no v real'nosti znacheniya bitov mogut ne sootvetstvovat' etim usloviyam (bit 3 dolzhen pokazyvat', chto printer vyklyuchen, bit 4 - chto otmenen vybor printera i bit 5 - chto net bumagi). Nizheprivedennye znacheniya vozvrashchayutsya v registr statusa po standartu "|pson", kotoromu obychno sleduet IBM: Znachenie Cepochka bitov Interpretaciya 223 11011111 printer gotov 87 01010111 printer ne gotov 119 01110111 net bumagi v printere 247 11110111 printer vyklyuchen Registr statusa vvoda imeet adres porta na 1 bol'she, chem bazo- vyj adres printera. Bazovyj adres dlya LPT1 hranitsya po adresu 0040:0008, dlya LPT2 - po adresu 0040:000A i t.d. Imejte v vidu, chto esli printer byl vyklyuchen, to emu trebuetsya nekotoroe vremya na inicializaciyu posle vklyucheniya. Ne nachinajte pechatat' do teh por, poka registr statusa vvoda ne soobshchit, chto printer svyazan s mashinoj i gotov k priemu dannyh. Vysokij uroven'. Dannaya procedura proveryaet svyazan li printer s mashinoj i govo- rit pol'zovatelyu chto delat', esli net. Ona ispol'zuet znacheniya iz vysheprivedennoj tablicy. Kak uzhe otmechalos', takoj podhod ne podhodit dlya procedury obshchego naznacheniya, kotoraya budet obsluzhi- vat' mnozhestvo raznyh printerov, no on vpolne podhodit, kogda Vy pishete drajver dannogo pechatayushchego ustrojstva. Otmetim, chto v stroke 120 vychislyaetsya dvuhbajtnoe chislo, putem umnozheniya starshe- go bajta na 256 i dobavleniya k mladshemu bajtu. Dlya polucheniya adresa registra statusa vvoda k znacheniyu poluchennogo bazovogo adresa dobavlyaetsya 1. 100 '''Poluchaem adres LPT1 i proveryaem gotov li printer 110 DEF SEG = &H40 'ukazyvaem na oblast' BIOS 120 PRTRBASE = PEEK(9)+256*PEEK(8)+1 'adres registra statusa 130 IF INP(PRTRBASE) = 223 THEN 180 'esli printer gotov 140 BEEP 'inache zvonok i proverki 150 IF INP(PRTRBASE) = 87 THEN LOCATE 1,1: PRINT"Strike the SELECT key": GOTO 150 160 IF INP(PRTRBASE) = 247 THEN LOCATE 1,1: PRINT"Turn the printer on": GOTO 160 170 IF INP(PRTRBASE) <> 223 THEN 170 'zhdem inicializacii 180 '''Teper' printer on-line -- mozhno nachinat' pechat' 190 LPRINT Z$ Srednij uroven'. Dlya polucheniya bajta statusa iz porta printera nado ispol'zo- vat' funkciyu 2 preryvaniya 17H. Pri vhode DX soderzhit nomer LPT (0-2 dlya LPT1-3). |ta funkciya sbrasyvaet tri neispol'zuemyh bita bajta i delaet operaciyu isklyuchayushchego ILI nad dvumya drugimi, poe- tomu znacheniya otlichayutsya ot privedennyh vyshe: Znachenie Cepochka bitov Interpretaciya 144 10010000 printer gotov 24 00011000 printer ne gotov 184 10111000 printer vyklyuchen I opyat' neobhodimo pomnit', chto eti znacheniya menyayutsya ot printera k printeru. Naibolee obshchuyu informaciyu "vyklyuchen ili ne gotov" daet bit 3 statusa ravnyj 0. Nizkij uroven'. Dannyj primer delaet samoe prostoe - proveryaem bit on-line registra statusa. Dlya polucheniya bajta statusa ispol'zuetsya bazo- vyj adres LPT1. ;---v segmente MESSAGE DB 'Printer not ready - strike any key when OK$' ;---proverka svyazan li printer s mashinoj (on-line) MOV AX,40H ;ES ukazyvaet na oblast' dannyh BIOS MOV ES,AX ; MOV DX,ES:[8] ;poluchaem bazovyj adres INC DX ;smeshchenie dlya registra statusa IN AL,DX ;poluchaem bajt statusa v AL TEST AL,1000B ;proveryaem bit 3 JNZ GO_AHEAD ;esli printer on-line, to vpered ;---pechataem soobshchenie ob oshibke i zhdem nazhatiya klavishi MOV AH,9 ;funkciya vyvoda stroki LEA DX,MESSAGE ;DS:DX ukazyvayut na soobshchenie INT 21H ;pechataem soobshchenie MOV AH,7 ;funkciya ozhidaniya vvoda INT 21H ;ozhidaem nazhatiya klavishi (bez eha) GO_AHEAD: ;prodolzhenie programmy 6.1.3 Interpretaciya oshibok printera i vosstanovlenie posle nih. Proverka oshibok ne dolzhna prekrashchat'sya na tom, chto Vy ubedi- lis', chto printer svyazan s mashinoj. Oshibki printera mogut prois- hodit' v lyuboj moment pechati i programma dolzhna byt' gotova voss- tanovit' situaciyu pri sboyah. Hotya na printere mogut proishodit' samye raznoobraznye oshibki, tol'ko tri tipa oshibok vozvrashchayut informaciyu o sebe v komp'yuter. |to oshibka "otsutstviya bumagi", oshibka "otsutstviya svyazi s mashinoj" i obshchee soobshchenie "proizoshla oshibka". Kak uzhe govorilos' v [6.1.2], ne vse printery soobshchayut ob etih oshibkah odinakovym obrazom, no teoreticheski registr sta- tusa vvoda ispol'zuet sleduyushchie bity: bit 3 = 0 kogda proizoshla oshibka na printere bit 4 = 0 kogda printer ne svyazan s mashinoj (off-line) bit 5 = 1 kogda konchilas' bumaga na printere V chastnosti, bit 4 mozhet ne ispol'zovat'sya ukazannym obrazom. Registr statusa vvoda imeet adres porta, kotoryj na 1 bol'she, chem bazovyj adres printera. Bazovyj adres dlya LPT1 hranitsya po adresu 0040:0008, dlya LPT2 - po adresu 0040:000A i t.d. Na nizkom urovne, kogda programma posylaet dannye na printer, to ona postoyanno obrashchaetsya k bitu 7 etogo registra, chtoby prove- rit' gotov li printer prinyat' ocherednoj simvol. Neslozhno pri etom proverit' pri etom i bit 3, chtoby uznat' o proizoshedshej oshibke. Esli proishodit oshibka, indiciruemaya bitami 4 i 5, to po krajnej mere bit 3 budet raven 0. Programma dolzhna postarat'sya proanali- zirovat' oshibku, a zatem mozhet poprosit' pol'zovatelya ispravit' situaciyu. Otmetim, chto funkciyu DOS, kotoraya vyvodit simvoly na printer (funkciya nomer 5 preryvaniya 21H - sm. [6.3.1]), mozhno zastavit' nepreryvno proveryat' printer na oshibku tajmauta pos- redstvom komandy MODE. Pered zagruzkoj programmy, ispol'zuyushchej funkciyu 5, nado vvesti komandu MODE LPT1: ,,P (eshche luchshe pomes- tit' etu komandu v fajl AUTOEXEC.BAT, s tem chtoby ona vsegda vypolnyalas' pri zagruzke sistemy). Vse eti oshibki privodyat k tomu, chto pechat' ostanavlivaetsya i dolzhny byt' predprinyaty kakie-to dejstviya prezhde chem ona budet prodolzhena. Slishkom ogorchitel'no dlya pol'zovatelya programmy, esli bol'shaya porciya dokumenta dolzhna budet pechatat'sya zanovo pri voz- niknovenii oshibki na printere. Tshchatel'noe produmyvanie procedury vosstanovleniya po oshibke pozvolit programme vozobnovit' pechat' s nachala toj stranicy, na kotoroj proizoshla oshibka. Neobhodimo vsegda zapominat' ukazatel' vyvodimyh dannyh pri nachale pechati novoj stranicy. Pri nachale raboty procedury vosstanovleniya ona mozhet poprosit' pol'zovatelya vstavit' novyj list bumagi, a zatem prodolzhit' pechat' s nachala toj stranicy, na kotoroj proizoshla oshibka. Vysokij uroven'. V Bejsike raspoznayutsya dva oshibochnyh usloviya dlya printera. Kod oshibki 24 vozvrashchaetsya kogda byl otmenen vybor printera, a kod 27 - kogda printer vyklyuchen ili v nem otsutstvuet bumaga. |ti kody mozhno poluchit' s pomoshch'yu tehniki obnaruzheniya oshibok, privedennoj v [7.2.5]. K sozhaleniyu effektivno otlavlivaetsya tol'ko kod 27. CHtoby zaregistrirovat' kod 24 trebuetsya primerno polminuty, v techenie kotoryh programma zamorozhena. Ne slishkom polezno pryamo chitat' registr statusa pered kazhdoj operaciej pechati. |tot metod srabotaet pered nachalom pechati, no nichem ne pomozhet, esli vo vremya pechati proizojdet otmena vybora printera. Privodim procedu- ru obrabotki oshibok printera: 100 ON ERROR GOTO 1000 'ustanavlivaem obrabotku oshibok . . 1000 '''proveryaem proizoshla li oshibka na printere 1010 IF ERR = 24 OR IF ERR = 27 THEN GOSUB 2000: RESUME . . 2000 BEEP: LOCATE 1,1: PRINT"Printer not ready" 2010 PRINT "Strike any key when ready" 2020 IF INKEY$ = "" THEN 2020 'ozhidaem vvoda 2030 RETURN Srednij uroven'. Kogda funkciya 0 preryvaniya 17H vyvodit simvol na printer, to ona vozvrashchaet bajt statusa printera v AH. Proveryajte znachenie etogo bajta posle posylki kazhdogo simvola. BIOS slegka modifici- ruet bajt statusa. Obychno bit 0 ne imeet znacheniya, no v dannom sluchae on ustanavlivaetsya, kogda proishodit oshibka tajmauta (printer ne svyazan s mashinoj). V sleduyushchem primere proveryayutsya dva tipa oshibok: obshchaya oshibka "printer ne gotov" i oshibka "ot- sutstviya bumagi". V primere predpolagaetsya, chto v nachale kazhdoj stranicy (t.e. posle kazhdogo perevoda formata) programma zapomi- naet ukazatel' na nachalo vyvodimyh dannyh, pomeshchaya ego v peremen- nuyu STARTING_PTR. |to pozvolyaet programme pri vozniknovenii oshib- ki povtorit' pechat' s nachala stranicy, a ne s nachala vsego doku- menta. Konechno printer dolzhen byt' povtorno inicializirovan pered povtornoj pechat'yu i dolzhny byt' vosstanovleny vse ego parametry. (Dannyj primer prosto illyustriruet proverku oshibok - on ni v koej mere ne yavlyaetsya rabochej proceduroj.) ;---v segmente dannyh MESSAGE1 DB 'Printer off-line - strike any key when ready$' MESSAGE2 DB 'Printer out of paper - strike any key when ready$' ;---posylaem simvol i proveryaem na oshibku NEXT_CHAR: MOV AH,0 ;nomer funkcii MOV DX,0 ;vybiraem LPT1 MOV AL,[BX] ;BX ukazyvaet na dannye INC BX ;uvelichivaem ukazatel' INT 17H ;posylaem simvol na printer TEST AH,00001000B ;vydelyaem bit 3 (flag oshibki) JZ NEXT_CHAR ;esli net oshibki, to pechataem dal'she TEST AH,00100000B ;vydelyaem bit 5 (otsutstvie bumagi) JZ OFF_LINE ;perehod esli s bumagoj vse v poryadke MOV AH,9 ;gotovim pechat' soobshcheniya LEA DX,MESSAGE2 ;DS:DX ukazyvaet na stroku INT 21H ;vyvodim stroku JMP SHORT RECOVER ;uhodim na vosstanovlenie OFF_LINE: MOV AH,9 ;gotovim pechat' soobshcheniya LEA DX,MESSAGE1 ;DS:DX ukazyvayut na stroku INT 21H ;vyvodim stroku RECOVER: MOV BX,STARTING_PTR ;vosstanavlivaem ukazatel' MOV AH,0 ;funkciya ozhidaniya vvoda INT 16H ;zhdem CALL PRTR_INIT ;inicializaciya printera JMP NEXT_CHAR ;nachinaem pechat' s nachala stranicy 6.1.4 Pereklyuchenie mezhdu dvumya ili neskol'kimi printerami. Komp'yutery, osnashchennye neskol'kimi parallel'nymi portami mogut imet' odnovremenno podsoedinennymi dva ili bolee printerov. Vyvod mozhet perenapravlyat'sya s odnogo printera na drugoj dvumya sposoba- mi. Odin sposob sostoit v tom, chtoby ispol'zovat' tol'ko takie operatory vyvoda na pechat', kotorye ukazyvayut na kakoj printer nado osushchestvlyat' vyvod. Vy mozhete napisat' takoj kod, kotoryj pozvolit Vam izmenyat' specifikaciyu. Vtoroj sposob pereklyucheniya printerov sostoit v ispol'zovanii vyvoda po umolchaniyu na LPT1, no ukazaniya drugogo printera, koto- ryj budet ispol'zovat'sya v kachestve LPT1. |to dostigaetsya izmene- niem bazovogo adresa, otnosyashchegosya k LPT1. |tot bazovyj adres hranitsya v oblasti dannyh BIOS v yachejke 0040:0008. Pomenyajte ego s bazovym adresom dlya LPT2 ili 3 (hranyashchimisya v yachejkah 0040:000A i 0040:000C) i v kachestve LPT1 budet ispol'zovat'sya drugoj adap- ter. Vysokij uroven'. V Bejsike, esli printer byl otkryt operatorom OPEN "LPT1" AS #1, to chtoby pereklyuchit'sya na drugoj printer nado snachala napi- sat' operator CLOSE #1, a zatem otkryt' drugoj printer s pomoshch'yu operatora OPEN "LPT2" AS #1. Vposledstvii vse operatory PRINT #1 budut napravlyat' svoj vyvod na vtoroj printer. |to izmenenie trudnee osushchestvit' v programmah, ispol'zuyushchih operator LPRINT, poskol'ku LPRINT po umolchaniyu posylaet ves' vyvod na LPT1. V etom sluchae Vam neobhodimo pomenyat' bazovye adresa printerov. Sleduyu- shchaya programma na Bejsike delaet imenno eto, pereklyuchaya LPT1 i LPT2. Ee povtornoe ispol'zovanie pereklyuchaet adresa obratno, vozvrashchaya sistemu k pervonachal'noj konfiguracii. 100 DEF SEG = &H40 'ukazyvaem na oblast' dannyh BIOS 110 X = PEEK(8) 'poluchaem mladshij bajt adresa LPT1 120 Y = PEEK(9) 'poluchaem starshij bajt adresa LPT1 130 POKE 8,PEEK(10) 'perenosim mladshij bajt adresa LPT2 140 POKE 9,PEEK(11) 'perenosim starshij bajt adresa LPT2 150 POKE 10,X 'posylaem mladshij bajt LPT1 v LPT2 160 POKE 11,Y 'posylaem starshij bajt LPT1 v LPT2 170 SYSTEM 'vyhodim iz Bejsika |ta programma budet ochen' kstati, esli gotovoe programmnoe obespechenie ne adresuetsya k nuzhnomu printeru. Ee mozhno otkompili- rovat' i hranit' na diske, skazhem pod imenem OTHERPRN, posle chego nado budet tol'ko napechatat' ee imya (v otvet na zapros DOS), chtoby pereklyuchit'sya s printera na printer. Esli u Vas net trans- lyatora s Bejsika, to sozdajte komandnyj fajl OTHERPRN.BAT i po- mestite v nego stroku BASIC OTHERPRN. Kogda Vy napechataete OT- HERPRN, to budet avtomaticheski zagruzhen Bejsik, kotoryj zagruzit i vypolnit programmu OTHERPRN.BAS, posle chego Vy vernetes' v operacionnuyu sistemu. Neobhodimo, pravda, chtoby na diske imelsya interpretator Bejsika BASIC.COM. Pomnite, chto Vy dolzhny ustoyat' pered iskusheniem ispytat' etu programmu pered tem, kak ona budet zapisana na disk, poskol'ku esli Vy ee zapustite, to ona sotret sebya. Nizkij uroven'. Odin sposob, kotorym programma na assemblere mozhet izmenit' printer, na kotoryj ona posylaet dannye, sostoit v ispol'zovanii dlya pechati tol'ko funkcii 0 preryvaniya 17H [6.3.1]. |ta funkciya trebuet, chtoby nomer printera byl pomeshchen v DX. Zavedite peremen- nuyu dlya etogo nomera, s tem chtoby on mog byt' izmenen v lyuboj moment. Vtoraya vozmozhnost' sostoit v obmene bazovyh adresov LPT1 i LPT2 ili LPT3. Sleduyushchaya programma delaet imenno eto. Kak i vse korotkie utility, ona dolzhna pisat'sya v COM forme, kak ob®yasneno v [1.3.6]. ;---obmen bazovymi adresami LPT1 i LPT2 MOV AX,40H ;segment oblasti dannyh BIOS MOV ES,AX ;ES ukazyvaet na dannye MOV BX,8 ;smeshchenie dlya bazovogo adresa LPT1 MOV DX,ES:[BX] ;sohranyaem bazovyj adres LPT1 MOV AX,ES:[BX]+2 ;sohranyaem bazovyj adres LPT2 MOV ES:[BX],AX ;menyaem bazovyj adres LPT2 MOV ES:[BX]+2,DX ;menyaem bazovyj adres LPT1 Razdel 2. Ustanovka specifikacij pechati. Dlya ustanovki razlichnyh specifikacij, otnosyashchihsya k formatu stranicy, stilyu shrifta i t.p., na printer posylayutsya special'nye upravlyayushchie kody. |ti kody posylayutsya na printer kak i lyubye drugie dannye. Nekotorye iz nih eto prostye odnobajtnye kody iz chisla pervyh 32-h nabora kodov ASCII. |ti upravlyayushchie kody (pere- chislennye v [7.1.9]) iniciiruyut takie prostye dejstviya printera, kak perevod stroki ili perevod formata (progon stranicy). Odnako bol'shinstvo specifikacij pechati ustanavlivaetsya posylkoj Esc-pos- ledovatel'nostej, v kotoryh odin ili bolee kodovyh bajtov sleduyut za simvolom Esc, kod kotorogo ASCII 27. Nachal'nyj kod Esc infor- miruet printer, chto simvol(y) kotoryj sleduet za nim sleduet interpretirovat' kak komandu, a ne kak dannye. Takie Esc-posledo- vatel'nosti obychno ne imeyut simvola-ogranichitelya, poskol'ku prin- ter "znaet" dlinu kazhdoj posledovatel'nosti. Tol'ko v nekotoryh sluchayah, kogda posledovatel'nost' mozhet imet' raznuyu dlinu, tre- buetsya ogranichivayushchij simvol, v kachestve kotorogo vsegda ispol'- zuetsya kod ASCII 0. Pochti vo vseh sluchayah specifikacii ustanovlennye etimi kodami dejstvuyut do teh por, poka oni ne budut yavno otmeneny. Kak tol'ko budet poluchen kod, naprimer, podcherkivaniya, to ono budet osu- shchestvlyat'sya do teh por, poka ne budet poslan kod otmeny podcherki- vaniya. Bufer printera mozhet byt' ochishchen bez otmeny ustanovlennyh specifikacij. No esli proizoshla oshibka na printere i printer byl vyklyuchen i vklyuchen, to neobhodimo snova ustanavlivat' vse speci- fikacii. Bol'shinstvo kodov ustanavlivayushchih specifikacii printera pere- meshany s dannymi, na kotorye oni dejstvuyut. Naprimer, dannye dlya slova, kotoroe dolzhno byt' vydeleno zhirnym shriftom, dolzhny pred- varyat'sya Esc-posledovatel'nost'yu, vklyuchayushchej zhirnyj shrift, i zavershat'sya Esc-posledovatel'nost'yu, vyklyuchayushchej ego. Poskol'ku universal'nyj standart na eti kody otsutstvuet, to pechat' s is- pol'zovaniem moshchnyh vozmozhnostej trebuet, chtoby dlya kazhdogo pod- derzhivaemogo printera byli napisany drajvery. Kazhdyj drajver preobrazuet instrukcii, generirueiye proceduroj pechati, v proto- kol, ispol'zuemyj dannym printerom. V assemblere posylka kodov osushchestvlyaetsya samym obychnym obra- zom, no v Bejsike Vy dolzhny pomnit', chto operatory, posylayushchie upravlyayushchie kody (LPRINT ili PRINT#), dolzhny zavershat'sya tochkoj s zapyatoj. V protivnom sluchae operatory budut avtomaticheski dobav- lyat' k posylaemym kodam paru vozvrat karetki/perevod stroki. Obsuzhdeniya i primery posleduyushchih stranic v osnovnom otnosyatsya k graficheskomu printeru IBM. Kody, ispol'zuemye etim printerom, nastol'ko zhe "standartny", naskol'ko i lyuboj drugoj protokol. V bol'shoj stepeni eto svyazano s tem, chto etot protokol ispol'zuetsya v epsonovskih printerah (pervye printery dlya IBM PC byli firmy Epson), kotorye sostavlyayut tret' vseh ispol'zuemyh printerov. Upravlyayushchie kody, ispol'zuemye printerami IBM sravnivayutsya v razdele [6.2.7]. Hotya informaciya, privedennaya v dannom razdele, mozhet byt' neprimenima k tomu printeru, s kotorym Vy rabotaete, no bol'shinstvo obshchih principov primenimo. 6.2.1 Ustanovka tekstovogo i graficheskogo rezhimov. Printer vsegda nahoditsya v tekstovom rezhime, do teh por poka on special'no ne pereveden v graficheskij rezhim. Komanda, ustanav- livayushchaya graficheskij rezhim, dolzhna soobshchat' kakoe chislo bajtov graficheskih dannyh budet peredano (no ne bol'she odnoj stroki) i posle togo, kak eto chislo bajtov budet interpretirovano kak gra- ficheskoe izobrazhenie, printer vernetsya v tekstovyj rezhim. Po etoj prichine net komandy, kotoraya perevodit printer v tekstovyj rezhim. CHislo graficheskih rezhimov u raznyh printerov raznoe. Vo vseh sluchayah, za kodom ustanavlivayushchim graficheskij rezhim sleduyut 2 bajta, ukazyvayushchie kakoe chislo graficheskih bajtov budet peredano (snachala mladshij bajt). CHtoby vychislit' znachenie etih dvuh baj- tov, razdelite chislo bajtov dannyh na 256 i pomestite rezul'tat vo vtoroj bajt, a ostatok - v pervyj bajt. Za etimi dvumya bajtami dolzhny srazu sledovat' bajty dannyh. Kazhdyj bajt opredelyaet cepochku bitov, sootvetstvuyushchih vos'mi vertikal'nym tochkam odnoj pozicii v stroke. Mladshij bit (1) soot- vetstvuet nizu kolonki, a starshij bit (128) - verhu. Naprimer, chtoby napechatat' piramidu, poshlite snachala bajt, u kotorogo usta- novlen tol'ko nizhnij bit, zatem bajt u kotorogo ustanovleny 2 nizhnih bita i t.d. Posle vos'mogo bajta raspolozhite te zhe bajty v obratnom poryadke. Znachenie pervogo bajta budet 1, vtorogo - 3 (1+2), zatem 7 (1+2+4), zatem 15 (1+2+4+8) i t.d. Na risunke 6-1 izobrazhena vsya kartina. Dlya pechati piramidy v Bejsike na graficheskom printere IBM napishite sleduyushchij kod: 100 LPRINT CHR$(27);CHR$(75);CHR$(15);CHR$(0);CHR$(1);CHR$(3); CHR$(7);CHR$(15);CHR$(31);CHR$(63);CHR$(127);CHR$(255); CHR$(127);CHR$(63);CHR$(31);CHR$(15);CHR$(3);CHR$(1); Pervye dva bajta perevodyat printer v graficheskij rezhim s 480 tochkami, sleduyushchie dva - soobshchayut, chto budet peredano 15 bajtov graficheskih dannyh, a zatem idet posledovatel'nost' bajtov dan- nyh. Konechno to zhe samoe mozhno zaprogrammirovat' umnee, organizo- vav cikl, v kotorom budut peredavat'sya bajty dannyh. Otmetim, chto vse problemy v etom sluchae voznikayut, esli ukazannoe chislo bajtov ne sootvetstvuet chislu posylaemyh bajtov. CHtoby sozdat' probel mezhdu graficheskimi figurami vyvedite neskol'ko bajtov s nulevym znacheniem. V Bejsike, kogda v odnoj stroke vyvoditsya bol'she 80 bajtov graficheskih dannyh, ne zabud'te predvaritel'no ustanovit' "beskonechnuyu" shirinu printera. Dlya etogo nado vvesti komandu WIDTH "LPT1:",255. Graficheskij printer IBM imeet chetyrek graficheskih rezhima, kotorye bolee ili menee "standartny". Oni takie: 27,75 480 tochek v stroke. Normal'nyj rezhim. Maksimum 480 bajtov dannyh na operator. 27,76 960 tochek v stroke. Udvoennoe gorizontal'noe razreshenie, no pechat' vdvoe medlennee (dvojnaya plotnost'). Maksimum 960 bajtov dannyh na operator. 27,89 960 tochek v stroke, pechat' s normal'noj skorost'yu (dvoj- naya plotnost' s vysokoj skorost'yu). Dve tochki, prilegayu- shchie po gorizontali, ne mogut byt' napechatany, poskol'ku ne budut uspevat' igolki pechatayushchej golovki. Esli delaetsya popytka ih napechatat', to vtoraya tochka budet ignorirovat'- sya. Maksimum 960 bajtov dannyh na operator. 27,90 1920 tochek v stroke, pechat' vdvoe medlennee (chetvernaya plotnost'). Sosednie tochki po gorizontali dolzhny otstoyat' po krajnej mere na 3 tochki (t.e. 1 pechataem, 2 propuska- em). Maksimum 1920 bajtov dannyh na operator. V bolee plotnyh rezhimah dve prilegayushchie po gorizontali tochki ne mogut byt' napechatany. CHtoby zapolnit' propuski mezhdu tochkami, vernite karetku k levomu polyu, nemnogo sdvin'te pechatayushchuyu golov- ku vpravo i sdelajte vtoroj prohod, ispol'zuya te zhe dannye. Vot sravnenie plotnostej pechati vyzyvaemyh odnimi i temi zhe upravlyayu- shchimi kodami na raznyh printerah: Kody Graficheskij Cvetnoj Kompaktnyj Proprinter 27,75 480 tochek 1108 560 480 27,76 960 tochek 2216 - 960 27,89 960 tochek 2216 - 960 27,90 1920 tochek 4432 - 1920 Cvetnoj printer unikalen iz printerov IBM tem, chto on mozhet ustanavlivat' masshtabnyj koefficient (aspect ratio) dlya grafiches- kih izobrazhenij. |tot koefficient otrazhaet raznicu gorizontal'nyh i vertikal'nyh rasstoyanij mezhdu tochkami. Obychno zhelatelen koeffi- cient 1:1, poskol'ku v protivnom sluchae trudno provodit' grafi- cheskie vychisleniya. No pri kopirovanii graficheskogo ekrana nado chtoby masshtabnyj koefficient byl takim zhe, kak u displeya. V ek- rannom rezhime umerennogo razresheniya 5 tochek po vertikali zanimayut tot zhe razmer, chto 6 tochek po gorizontali. |to sootvetstvuet masshtabnomu koefficientu 5:6 i imenno eto znachenie ispol'zuetsya po umolchaniyu cvetnym printerom. Dopuskayutsya tol'ko koefficienty 1:1 i 5:6. 6.2.2 Upravlenie rasstoyaniem mezhdu strokami. Esli ne prinimat' vo vnimanie printery, imeyushchie special'nye vozmozhnosti grafopostroitelya, to vsya pechat' osushchestvlyaetsya stro- kami. Dazhe graficheskie izobrazheniya risuyutsya postrochno, hotya v etom sluchae net pustyh mest mezhdu strokami. Kod ASCII 10 - stan- dartnyj upravlyayushchij kod perevoda stroki. Posylka ego na printer (bez predshestvuyushchego koda Esc) privodit k tomu, chto bumaga budet prodvinuta vpered na ukazannyj interval. Obychno, esli perevod stroki ne posylaetsya za kodom vozvrata karetki, to pechatayushchaya golovka vozvrashchaetsya k levomu krayu bumagi i mozhno snova pechatat' na toj zhe stroke. Odnako mozhno sdelat' tak, chtoby perevod stroki delalsya avtomaticheski pri kazhdom vozvrate karetki. |tim upravlyayut pereklyuchateli na printere. |to zhe mozhno sdelat' ustanoviv bit 1 registra upravleniya vyvodom (sm. [6.1.0]). Mnogie printery mogut vklyuchat' i vyklyuchat' avtomaticheskij perevod stroki s pomoshch'yu upravlyayushchih kodov 27,53, a nekotorye mogut delat' obratnyj pere- vod stroki s pmoshch'yu kodov 27,93. Po umolchaniyu graficheskij printer ispol'zuet interval pechati ravnyj 1/6 dyujma (t.e. vyvodyat 6 strok na dyujm) i k etomu rezhimu vsegda mozhno vernut'sya, posylaya upravlyayushchie kody 27,50 (eti kody ispol'zuyutsya takzhe v sochetanii s kody izmeneniya intervala mezhdu strokami, obsuzhdaemymi nizhe). Dlya etogo printera imeyutsya eshche dva predopredelennyh mezhstrochnyh intervala, 1/8 dyujma i 7/72 dyujma. Sootvetstvuyushchie im upravlyayushchie kody 27,48 i 27,49. Vozmozhna i bolee tonkaya gradaciya mezhstrochnyh intervalov. Gra- ficheskij printer ispol'zuet tri koda, pozvolyayushchie izmenit' inter- val na ochen' maluyu velichinu. Vse tri upravlyayushchih koda ispol'zuyut 2-hbajtnuyu Esc-posledovatel'nost', za kotoroj sleduet chislo 72-h ili 216-h dolej dyujma, opredelyayushchih mezhstrochnyj interval. Verti- kal'noe rasstoyanie mezhdu centrami dvuh tochek ravno 1/72 dyujma. Interval 8/72 dyujma ne ostavlyaet promezhutka mezhdu strokami (9 strok na dyujm). Standartnyj interval 6 strok na dyujm zadaetsya chislom 12/72 dyujma. Nakonec, 1/216 ravna 1/3 ot 1/72. Izmenenie na takuyu velichinu pozvolyaet pechatayushchej golovke slegka sdvinut'sya ot centra stroki, s tem chtoby tochki pri vtorom prohode zapolnili promezhutki, obespechivaya pechat' bolee vysokogo kachestva. Vot eti Esc-posledovatel'nosti: Izmenenie Esc-posledovatel'nost' 72-e dyujma 27,65,n (gde n ot 1 do 85) 216-e dyujma 27,51,n (gde n ot 1 do 255) 216-e dyujma 27,74,n (gde n ot 1 do 255) Komandy dlya izmeneniya intervala v 72-h dyujma ne stanut aktivnymi do teh por, poka ne vstretitsya vtoroj upravlyayushchij kod: 27,50. Kak ob®yasnyalos' vyshe, etot kod mozhet takzhe ispol'zovat'sya otdel'no dlya vosstanovleniya standartnogo intervala v 1/6 dyujma. Esli ranee byla ispol'zovana komanda 27,65,n, to dlya vosstanovleniya interva- la v 1/6 dyujma nado poslat' komandu 27,65,12,27,50. Dva upravlyayu- shchih koda dlya intervalov v 1/216 dyujma ne identichny. Pervyj kod ustanavlivaet, chto vse posleduyushchie perevody stroki budut vypol- nyat'sya s ukazannym intervalom; vtoroj zhe dejstvuet tol'ko na odin perevod stroki, a zatem vozvrashchaet interval, kotoryj dejstvoval do etogo. Sleduyushchaya tablica sravnivaet mezhstrochnye intervaly, vyzyvaemye odnimi i temi zhe upravlyayushchimi kodami na razlichnyh printerah IBM: Kody Matrichnyj Graficheskij Cvetnoj Kompaktnyj Strujnyj Romashka Pro- printer printer printer printer printer printer 27,48 1/8 1/8 1/8 1/9 1/8 1/8 1/8 27,49 7/72 7/72 6/72 1/9 9/96 7/72 27,50 1/6 1/6 1/6 1/6 1/6 1/6 1/6 27,51 n/216 n/144 n/216 27,65 n/72 n/72 n/72 n/72 n/72 27,74 n/216 n/144 n/216 Nezavisimo ot togo kak izmenyayutsya mezhstrochnye intervaly, prin- ter vsegda kontroliruet pryamye i obratnye dvizheniya lista, poetomu propuski perforacii vsegda delayutsya vovremya. 6.2.3 Upravlenie dvizheniem bumagi. Bumaga na printere peredvigaetsya komandami perevoda stroki, vertikal'noj tabulyacii i perevoda formata. Ustanovkoj pereklyucha- telej na printere opredelyaetsya budet li printer avtomaticheski perehodit' na novuyu stranicu pri obnaruzhenii perforacii mezhdu stranicami. Esli perforaciya ne budet propuskat'sya, to pechat' mozhet zavershit'sya pryamo na vernem krayu ocherednoj stranicy. Pro- pusk perforacii ostavlyaet po tri pustyh stroki sverhu i snizu kazhdoj stranicy. Na samom dele printer ne raspoznaet perforaciyu, vmesto etogo on schitaet, chto v nachal'nyj moment bumaga vyravnena na nachalo stranicy i schitaet chislo perevodov stroki. Mozhno prog- rammno pereopredelit' ustanovku pereklyuchatelej, posylaya na prin- ter upravlyayushchie kody 27,56, chtoby printer ne delal propuska per- foracii i 27,57, chtoby delal propusk perforacii. Graficheskij printer ispol'zuet kod, kotoryj opredelyayut chislo strok, propuskaemyh mezhdu stranicami. |tot kod 27,78,n, gde n - chislo strok ot 1 do 127. Naprimer, kod 27,78,10 privedet k tomu, chto printer budet propuskat' po 10 strok. Esli mezhstrochnyj inter- val raven 1/6 dyujma, to 11-tidyujmovaya stranica budet soderzhat' 66 strok i posle pechati kazhdyh 56-ti strok printer budet delat' propusk 10-ti strok. Uzhe Vasha programma dolzhna pozabotit'sya, chtoby v samom nachale prognat' bumagu na 5 strok, s tem chtoby 55 strok teksta byli centrirovany na kazhdoj stranice. Esli ispol'zuetsya bumaga, razmer kotoroj otlichaetsya ot stan- dartnogo 11-tidyujmovogo, to mozhno izmenit' dlinu stranicy, s tem chtoby propuski perforacii proishodili v nuzhnom meste i chtoby perevod formata ustanavlival bumagu v pravil'nuyu poziciyu. Razmer stranicy mozhet ustanavlivat'sya libo chislom strok na stranice, libo razmerom v dyujmah. CHtoby ustanovit' chislo strok na stranice, poshlite kod 27,67,n, gde n - chislo strok. Ta zhe posledovatel'- nost' ispol'zuetsya i dlya ustanovki dliny stranicy v dyujmah, za isklyucheniem togo, chto dlina stranicy zapisyvaetsya v forme 0,n, gde n mozhet byt' ot 1 do 22 dyujmov. Dlya standartnoj stranicy nado poslat' komandu 27,67,0,11. 6.2.4 Upravlenie polozheniem pechatayushchej golovki. Pechataemyj tekst raspredelyaetsya po stranice chastichno za schet dvizheniya bumagi [6.2.3], a chastichno za schet dvizheniya pechatayushchej golovki. Golovka mozhet byt' pozicionirovana v lyuboe mesto, no ne putem zadaniya ee koordinat. Vmesto etogo ukazyvaetsya ee smeshchenie, otnositel'no samoj levoj pozicii, kotoruyu ona mozhet dostigat'. U printera net datchikov, soobshchayushchih tekushchee polozhenie golovki. Vasha programma dolzhna otslezhivat' polozhenie golovki, esli ono dolzhno byt' izvestnym. Pri etom horoshej praktikokj yavlyaetsya nachinat' pechat' s podachi upravlyayushchego koda 27,60, kotoryj sdvigaet golovku v samuyu levuyu poziciyu, ne delaya perevoda stroki (to zhe samoe delaet i kod vozvrata karetki). Pri pechati teksta imeetsya neskol'ko sposobov peredvinut' go- lovku v nuzhnoe polozhenie. Ona mozhet sdvigat'sya vpravo podachej odnogo ili neskol'kih simvolvo probela ili tabulyacii i vlevo podachej odnogo ili neskol'kih simvolov "vozvrat na shag" ili sim- vola vozvrata karetki. Dvizheniya osushchestvlyayutsya nepreryvno - ne vosprinimajte ih kak sootvetstvuyushchie posledovatel'nosti na obych- noj pishushchej mashinke. Do teh por, poka Vasha programma znaet na- chal'noe polozhenie pechatayushchej golovki ona mozhet kombinaciej pere- vodov stroki, probelov, tabulyacij i vozvratov na shag formatiro- vat' Vash vyvod v sootvetstvii s Vashimi pozhelaniyami. Printery, kotorye umeyut vypolnyat' obratnyj peervod stroki mogut ispol'zo- vat'sya i kak grafopostroiteli. V graficheskih rezhimah vozmozhno peremeshchenie golovki na malye doli dyujma. Pri pechati teksta Vy mozhete vojti v graficheskij re- zhim, chtoby dobit'sya raznyh promezhutkov mezhdu slovami. K sozhale- niyu, etot process sushchestvenno zamedlyaet pechat'. Smotrite primer v punkte [6.3.2]. Imeetsya special'nyj kod, kotoryj zastavlyaet golovku vsegda vozvrashchat'sya v krajnyuyu levuyu poziciyu pered pechat'yu ocherednoj stroki, otmenyaya dvunapravlennuyu pechat'. Hotya eto znachitel'no zamedlyaet pechat', odnako pri etom dostigaetsya bolee tochnoe pozi- cionirovanie golovki. |to osobenno polezno pri rabote v grafiches- kom rezhime. CHtoby vklyuchit' odnonapravlennuyu pechat' nado poslat' kod 27,85,1, a chtoby vernut'sya k dvunapravlennoj pechati - kod 27,85,0. 6.2.5 Ustanovka pozicij tabulyacii. V zavisimosti ot printera mogut ustanavlivat'sya pozicii gori- zontal'noj i vertikal'noj tabulyacii (graficheskij printer IBM ne imeet vertikal'noj tabulyacii). Gorizontal'nye tabulyacii oprede- lyayutsya, kak smeshcheniya ot levogo kraya, vyrazhennye v probelah. V nekotoryh sluchayah dopuskayutsya do 112 pozicij gorizontal'noj tabu- lyacii. Analogichno, vertikal'nye tabulyacii opredelyayutsya kak smeshche- niya otnositel'no verha stranicy, a izmeryayutsya oni v mezhstrochnyh intervalah. Dlya bol'shinstva printerov IBM dopuskaetsya ne bol'she 64-h pozicij vertikal'nyh tabulyacij. Pervye dva bajta koda dlya ustanovki gorizontal'noj tabulyacii 27,68, a dlya ustanovki vertikal'noj tabulyacii - 27,66. Dlya oboih tipov tabulyacij dalee idet stroka bajtov, dayushchaya pozicii tabulya- cii v vozrastayushchem poryadke. |ta stroka dolzhna zavershat'sya bajtom ASCII 0, kotoryj sluzhit ogranichitelem. Dlya ustanovki gorizontal'- noj tabulyacii v poziciyah 15, 30 i 60 poshlite na printer kod 27, 68, 15, 30, 60, 0. Dlya ustanovki vertikal'noj tabulyacii v strokah 8 i 12 - poshlite kod 27, 66, 8, 12, 0. Otmetim, chto esli razmer stranicy otlichaetsya ot standartnyh 11-ti dyujmov, to on dolzhen byt' ustanovlen pered ustanovkoj pozicij vertikal'noj tabulyacii. Vertikal'naya tabulyaciya otmenyaetsya kodom 27,67. Otmetim, chto bol'shinstvo printerov ne imeyut ustanovki polej kak takovoj. Levoe pole mozhet sozdavat'sya za schet vyvoda tabulya- cii ili ryada probelov v nachale kazhdoj stroki. Dlya tochnoj ustanov- ki polej perejdite v graficheskij rezhim i vyvedite ryad bajtov ASCII 0. Pravoe pole sozdaetsya prosto za schet ogranicheniya dliny stroki. 6.2.6 Izmenenie shrifta pechati. SHirina stranicy 8 1/2 dyujma pozvolyaet napechatat' v stroke do 80-ti obychnyh simvolov, esli vse oni imeyut odinakovuyu shirinu. Proporcional'naya pechat' [6.3.3] pozvolyaet pomestit' v stroke eshche neskol'ko simvolov. S drugoj storony, plotnaya pechat' pozvolyaet vyvesti v stroke 132 simvola, pechat' s dvojnoj shirinoj - 40 sim- volov, a plotnaya pechat' s dvojnoj shirinoj - 64 simvola. Imejte vvidu, chto ispol'zovanie pechati s raznoj shirinoj v odnoj stroke privedet k trudnostyam s formatirovaniem. Bol'shinstvo matrichnyh printerov predostavlyayut nabor rezhimov pechati special'nymi shriftami. Vot perechen' standartnyh vozmozhnos- tej predostavlyaemyh graficheskim printerom IBM: Plotnaya pechat': Dlya vklyucheniya rezhima plotnoj pechati nado poslat' odnobajtnyj upravlyayushchij kod 15. Dlya vyklyucheniya etogo rezhima - kod 18. Stan- dartnaya stranica shirinoj 8 1/2 dyujma pozvolyaet napechatat' 132 simvola v stroke v etom rezhime. Pechat' s dvojnoj shirinoj: Dlya togo, chtoby printer nachal pechatat' s dvojnoj shirinoj nado poslat' na nego upravlyayushchij kod 14. Rezhim pechati s dvojnoj shiri- noj neobychen tem, chto printer avtomaticheski vyklyuchaet etot rezhim, kogda vstrechaet simvol vozvrata karetki ili perevoda stroki. Poskol'ku takoj vid pechati obychno ispol'zuetsya dlya odnostrochnyh zagolovkov, to eto svojstvo udobno. CHtoby vyklyuchit' etot rezhim v seredine stroki poshlite kod 20. Vydelennaya pechat': Pri vydelennoj pechati kazhdyj simvol pechataetsya dva raza v odnoj i toj zhe pozicii. |to delaet tochki temnee, chto sozdaet effekt vydeleniya. Skorost' pechati pri etom umen'shaetsya vdvoe. Dlya vklyucheniya etogo rezhima poshlite kod 27,69. Dlya vyklyucheniya - 27,70. Pechat' za dva prohoda: V rezhime pechati za dva prohoda bumaga sdvigaetsya na 1/216 dyujma pered vtorym prohodom pechatayushchej golovki. Pri etom polu- chayutsya bolee zapolnennye bukvy, kotorye k tomu zhe vyglyadyat yarche. Skorost' pechati umen'shaetsya vdvoe. |tot