Google
オフコン練習帳内を検索
インターネット全体を検索

NECオフコン関連
オフコン一般
情報

[掲示板に戻る]

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ユーザー!!
BluesBB ©Sting_Band