[掲示板に戻る]
1 | 「1行181文字を印字する」サブルーチン公開 |
富山清風 2011-6-7 8:39
[返信] [編集] 「プリンタ制御コードを使用したCOBOLプラグラムのCOMPILE&LINK指定」のスレッドの中の 「回転の達人_2011-5-19_12:58:21」_で「1バイト半角132文字が176文字印字可能になります」がありました。 そこで小生の作成したサブル−チンで同様なものがありましたので公開します。 1行181文字印字可能になります (181とは:136*4/3→181.333→切り捨て181文字です) 実際は180文字までしか印字したことがありませんが、理論上は181文字印字可能です。 COBOLのわかる方であれば、LINKしてみてください。 そもそも、1行137文字以上で設計すること自体が無理があるのですが・・・ 長々と書きますがご容赦ください。 概要は: ANK:ANK1文字を2バイト系半角文字に変換しセット JIP:そのままセット(処理の都合上2バイト系の上1桁と下1桁を分けてセット) (注)ラインプリンタで印字する場合は、ラインプリンタのパネル部のスイッチ?で 2/3,1/2,・・・のディップスイッチを/2しなければならなかったような??? 記憶があいまいです。 メインからのパラメータは4つです。 1.入力データ____QATJ-INPUT_______X(250) 2.入力データ長__QATJ-INPUTSIZE___9(03) 3.出力データ____QATJ-OUTPUT______X(505) 4.出力データ長__QATJ-OUTPUTSIZE__9(03) メインの例: _____MOVE____PR-01___________TO______QATJ-INPUT.____________印字しようとしている文字列 _____MOVE____180_____________TO______QATJ-INPSIZE.__________桁数 _____CALL____"AAQATJ"________USING___QATJ.__________________サブルーチンをCALL _____WRITE___LP-RC___________FROM____QATJ-OUTPUT_AFTER_1.___結果を印字 サブルーチンは」以下の通りです。 000010_IDENTIFICATION___________DIVISION. 000020_PROGRAM-ID.______________AAQATJ. 000030****************************************************************** 000040*____ANK から 日本語文字へ変換サブルーチン ____ * 000050****************************************************************** 000060_DATE-COMPILED. 000070_ENVIRONMENT_________DIVISION. 000080_CONFIGURATION_______SECTION. 000090_SOURCE-COMPUTER.____SYSTEM150. 000100_OBJECT-COMPUTER.____SYSTEM150. 000110_DATA____________________DIVISION. 000120_WORKING-STORAGE_________SECTION. 000130****************************************************************** 000140_01__CBL01. 000150_____05__CBL0101_____________PIC__X(256). 000160_____05__CBL0101R____________REDEFINES_CBL0101. 000170_______07__CBL0101O__________OCCURS_256. 000180_________09__CBL010101_______PIC__X(01). 000190_01__CBL02. 000200_____03__CBL0201_____________PIC__9(04)__VALUE__256. 000210**** 000220_01__CBL03. 000230****____________________________________________0123456789ABCDEF 000240_____03__F___________________PIC__X(16)__VALUE_"AAAAJAJAJJJAAAAA"._0 000250_____03__F___________________PIC__X(16)__VALUE_"AAAAJAAJAAJJAAAA"._1 000260_____03__F___________________PIC__X(16)__VALUE_"JJJJJJAAJJJJJAAA"._2 000270_____03__F___________________PIC__X(16)__VALUE_"JJAJJJJAJJJJAAJA"._3 000280_____03__F___________________PIC__X(16)__VALUE_"AAAAAAAAAAAAAAAA"._4 000290_____03__F___________________PIC__X(16)__VALUE_"AAAAAAAJAJAAAAAA"._5 000300_____03__F___________________PIC__X(16)__VALUE_"AAJJJJJJJJJAAAAA"._6 000310_____03__F___________________PIC__X(16)__VALUE_"JJJJJJJJJJAAAAAA"._7 000320_____03__F___________________PIC__X(16)__VALUE_"JAAAAAAAAAAJAAAA"._8 000330_____03__F___________________PIC__X(16)__VALUE_"AAAAAAAAAAAJJAAA"._9 000340_____03__F___________________PIC__X(16)__VALUE_"JJAAAAAAAAAJAAAA"._A 000350_____03__F___________________PIC__X(16)__VALUE_"JAJJJJJJJJAAAAAA"._B 000360_____03__F___________________PIC__X(16)__VALUE_"JAAAAAAAAAJJJJJJ"._C 000370_____03__F___________________PIC__X(16)__VALUE_"AAAAAAAAAAJJJJJJ"._D 000380_____03__F___________________PIC__X(16)__VALUE_"AJAAAAAAAAJJJJJJ"._E 000390_____03__F___________________PIC__X(16)__VALUE_"AAAAAAAAAAJJJJJJ"._F 000400****_漢字文字ピッチ 10.8ポイント 000410_01__PR-START. 000420__________03__F_______________PIC_X(05)_VALUE_""3FE04F40A0"". 000430****_漢字文字ピッチ 14.4ポイント 000440_01__PR-END. 000450__________03__F_______________PIC_X(05)_VALUE_""3FE04FE080"". 000460_01__PR-END-R____________REDEFINES_PR-END. 000470_____03__TBL-END-O_______OCCURS__5. 000480_______05__TBL-END1______PIC__X(01). 000490_01__TBL-CNV. 000500_____03__F___PIC_N(16)_VALUE_NC"・・・・・・・・・・・・・・・・".00-0F 000510_____03__F___PIC_N(16)_VALUE_NC"・・・・・・・・・・・・・・・・".10-1F 000520_____03__F___PIC_N(16)_VALUE_NC"・・・・・・・・・・・・・・・・".20-2F 000530_____03__F___PIC_N(16)_VALUE_NC"・・・・・・・・・・・・・・・・".30-3F 000540_____03__F___PIC_N(16)_VALUE_NC"・・・・・・・・・・・・・・・・".40-4F 000550_____03__F___PIC_N(16)_VALUE_NC"・・・・・・・・・・・・・・・・".50-5F 000560_____03__F___PIC_N(16)_VALUE_NC"・・・・・・・・・・・・・・・・".60-6F 000570_____03__F___PIC_N(16)_VALUE_NC"・・・・・・・・・・・・・・・・".70-7F 000580_____03__F___PIC_N(16)_VALUE_NC"・・・・・・・・・・・・・・・・".80-8F 000590_____03__F___PIC_N(16)_VALUE_NC"・・・・・・・・・・・・・・・・".90-9F 000600_____03__F___PIC_N(16)_VALUE_NC"・・・・・・・・・・・・・・・・".A0-AF 000610_____03__F___PIC_N(16)_VALUE_NC"・・・・・・・・・・・・・・・・".B0-BF 000620_____03__F___PIC_N(16)_VALUE_NC"・・・・・・・・・・・・・・・・".C0-CF 000630_____03__F___PIC_N(16)_VALUE_NC"・・・・・・・・・・・・・・・・".D0-DF 000640_____03__F___PIC_N(16)_VALUE_NC"・・・・・・・・・・・・・・・・".E0-EF 000650_____03__F___PIC_N(16)_VALUE_NC"・・・・・・・・・・・・・・・・".F0-FF 000660_01__TBL-CNV-R___________REDEFINES_TBL-CNV. 000670_____03__TBL-CNR-O_______OCCURS_256. 000680_______05__TBL-JIP1______PIC__X(01). 000690_______05__TBL-JIP2______PIC__X(01). 000700_01__TBL-CNV-RR__________REDEFINES_TBL-CNV. 000710_____03__TBL-CNR-OO______OCCURS_256. 000720_______05__TBL-JIP_______PIC__N(01). 000730_01__WK-CNV-COLUMN___________PIC_9(03). 000740****_""00""+""XX""→COMP-1へ 000750_01__WK-CNV-COMP_________________COMP-1. 000760_01__WK-CNV-COMP-R___________REDEFINES_WK-CNV-COMP. 000770_____03__WK-CNV-00___________PIC_X(01). 000780_____03__WK-CNV-ANK__________PIC_X(01). 000790*************************************************_IX 000800_01__IX-AREA. 000810_____03__IX-INP______________PIC_9(03). 000820_____03__IX-OUT______________PIC_9(03). 000830_____03__IXPR________________PIC_9(02). 000840****************************************************************** 000850_LINKAGE_________________SECTION. 000860****_入力データ、入力サイズ、出力結果(変換結果)、出力サイズ 000870_01__QATJ. 000880_____03__WK-INPUT. 000890_________05__WK-INPDATA______OCCURS__250______PIC_X(01). 000900_____03__WK-INPUTSIZE________PIC_9(03). 000910_____03__WK-OUTPUT. 000920_________05__WK-ESC0_________PIC_X(05). 000930_________05__WK-OUTDATA______OCCURS__505______PIC_X(01). 000940_____03__WK-OUTPUTSIZE_______PIC_9(03). 000950****************************************************************** 000960_PROCEDURE_______________DIVISION____USING__QATJ. 000970_ST. 000980****_出力エリアのクリア 000990_____MOVE____LOW-VALUE_______TO______WK-OUTPUT. 001000****_出力エリアに10.8ポイントを先頭に設定 001010_____MOVE____PR-START________TO______WK-ESC0._____________________ 001020**** 001030_____PERFORM_RECORD-CNV-RTN__THRU__RECORD-CNV-EXT. 001040****_出力レングス設定 001050_____MOVE____IX-OUT__________TO______WK-OUTPUTSIZE. 001060_ST-END. 001070_____EXIT____PROGRAM. 001080****************************************************************** 001090_RECORD-CNV-RTN. 001100****_入力データをコード変換しANK/JIP(A/J)に置き換える 001110_____MOVE____WK-INPUT________TO______CBL0101. 001120_____CALL___"CBLCODE"________USING___CBL01 001130_____________________________________CBL02 001140_____________________________________CBL03. 001150****_以下1文字づつチェックしANK/JIPの判断を行いながら出力エリアへ 001160****_ANK:ANK1文字を2バイト系半角文字に変換しセット 001170****_JIP:そのままセット(処理の都合上2バイト系の上1桁と下1桁をセット 001180_____MOVE____0_______________TO______IX-INP. 001190_____MOVE____0_______________TO______IX-OUT. 001200_RECORD-CNV-10. 001210_____ADD_____1_______________TO______IX-INP. 001220_____IF____(_IX-INP__________>_______250) 001230_______________________________________________GO_RECORD-CNV-90. 001240_____IF____(_IX-INP__________>_______WK-INPUTSIZE) 001250_______________________________________________GO_RECORD-CNV-90. 001260_____MOVE____LOW-VALUE__________TO_____WK-CNV-00. 001270_____MOVE____WK-INPDATA(IX-INP)_TO_____WK-CNV-ANK. 001280_____COMPUTE_WK-CNV-COLUMN___=______WK-CNV-COMP_+_1. 001290_____IF____(_CBL010101(IX-INP)___=___"A"_) 001300_________COMPUTE_IX-OUT__________=_______IX-OUT_+_1 001310_________MOVE____TBL-JIP1(WK-CNV-COLUMN) 001320_________________________________TO______WK-OUTDATA(IX-OUT) 001330_________COMPUTE_IX-OUT__________=_______IX-OUT_+_1 001340_________MOVE____TBL-JIP2(WK-CNV-COLUMN) 001350_________________________________TO______WK-OUTDATA(IX-OUT) 001360_____ELSE 001370_________COMPUTE_IX-OUT__________=_______IX-OUT_+_1 001380_________MOVE____WK-INPDATA(IX-INP) 001390_________________________________TO______WK-OUTDATA(IX-OUT) 001400_________COMPUTE_IX-OUT__________=_______IX-OUT_+_1 001410_________COMPUTE_IX-INP__________=_______IX-INP_+_1 001420_________MOVE____WK-INPDATA(IX-INP) 001430_________________________________TO______WK-OUTDATA(IX-OUT) 001440_____END-IF. 001450_______________________________________________GO_RECORD-CNV-10. 001460_RECORD-CNV-90. 001470****_印字の後ろに14.4ポイントを付加する(元にもどす)_________14.4 001480_____PERFORM______________________________________________________14.4 001490_________VARYING__IXPR__FROM__1___________________________________14.4 001500________________________BY____1___________________________________14.4 001510_________UNTIL____IXPR__>_____5___________________________________14.4 001520____________ADD____1________________TO__IX-OUT____________________14.4 001530____________MOVE___TBL-END1(IXPR)___TO__WK-OUTDATA(IX-OUT)________14.4 001540_____END-PERFORM._________________________________________________14.4 001550_RECORD-CNV-EXT. 001560_____EXIT. 使用時は下線("_")をスペース(" ")で置き換えてください。 000500-000650の・・・・の部分が#NFCNVで上手く変換できなかったので使用時は「手修正」をお願いします。 000500:"________________"_00-0F 000510:"________________"_10-1F 000520:"________________"_20-2F 000530:"________________"_30-3F 000540:"_。「」、・ヲァィゥ[.<(+!"_40-4F 000550:"&ェォャュョゥ_ー_]\*);_"_50-5F 000560:"-/_________,%_>?"_60-6F 000570:"__________:#@'=""_70-7F 000580:"_アイウエオカキクケコ_サシスセ"_80-8F 000590:"ソタチツテトナニヌネノ__ハヒフ"_90-9F 000600:"__ヘホマミムメモヤユ_ヨラリル"_A0-AF 000610:"__________レロワン゙゚"_B0-BF 000620:"_ABCDEFGHI______"_C0-CF 000630:"_JKLMNOPQR______"_D0-DF 000640:"__STUVWXYZ______"_E0-EF 000650:"0123456789______"_F0-FF 上記のN(16)はいずれも漢字の半角文字です。 使用時は下線("_")を2バイト系の半角スペースで置き換えてください。 質問などがあれば本掲示板にてお願いします。 以上です。 使用された方は感想をお願いします。 ガンバレ東日本!! ガンバレOPユーザー!! |
「1行181文字を印字する」サブルー... 富山清風 2011-6-7 8:39 ←いまここ〜 |
BluesBB ©Sting_Band