1000 ' 1010 '*** BLINK2 *** 1020 ' SAVE"BLINK2.BAS",A 1030 BLINK2'BASICリンカー VER 2.00 1040 DEFINT A-Z:CLEAR ,,,15 1050 GOSUB BINIT '初期化 1060 GOSUB BINCMD 'コマンドファイル入力 1070 GOSUB BMDLNK 'モジュールリンク 1080 GOSUB BINFPR '結果出力 1090 GOSUB BFINSH '終了 1100 END 1110 ' 1120 '*** BINIT  *** 1130 ' SAVE"BINIT.BAS",A 1140 BINIT'初期化 1150 '() 1160 GOSUB CZINIT 1170 GOSUB CRINIT 1180 GOSUB CTINIT 1190 CZESET.PINENO=53:GOSUB CZESET 1200 ' 1210 CM.INCNT=200 'リンク可能なモジュール数 1220 CM.CALCNT=50 'ひとつのモジュールで呼び出せるモジュール数 1230 CM.DIRMAX=9 '検索パスの最大数 1240 CM.ENTCNT=0 'リンクエントリ数 1250 CM.INCMAX=100 'インクルード可能なファイル数 1260 CM.PAGELMAX=50 '1頁あたりの最大行数 1270 CM.PAGELMIN=10 '1頁あたりの最小行数 1280 CM.DPLINE=50 '1頁あたりの改頁行数省略値 1290 CM.INCCNT=0 '現在のインクルードファイル数 1300 CM.COMFL$="" 'コマンドファイル名既定値 1310 CM.TITLE$="N" 'モジュールタイトル付与フラグ 1320 CM.TLTEXT$="" 'タイトル文字列 1330 ' 1340 CM.DEF$="N" '結果出力省略値の設定 1350 CM.DEFFL$="" '出力先 1360 CM.DEFPMD$="" 'ファイル出力のモード 1370 CM.DEFPAGE$="N" '改ページ指示 1380 CM.DEFPAGES=0 '改ページ行数 1390 CM.DEFPIT$="N" 'プリンタ出力の日本語ピッチ指示 1400 CM.DEFPITS=0 'プリンタ出力の日本語ピッチドット数 1410 CM.DEFCMD$="" 'コマンドライン 1420 ' 1430 CM.MAP$="N" 'モジュールMAPの出力 1440 CM.MAPFL$="" 'モジュールMAPの出力先 1450 CM.MAPPMD$="" 'ファイル出力のモード 1460 CM.MAPPAGE$="N" '改ページ指示 1470 CM.MAPPAGES=0 '改ページ行数 1480 CM.MAPPIT$="N" 'プリンタ出力の日本語ピッチ指示 1490 CM.MAPPITS=0 'プリンタ出力の日本語ピッチドット数 1500 CM.MAPCMD$="" 'コマンドライン 1510 ' 1520 CM.STRUCT$="N" '構成表の出力 1530 CM.STRUCTFL$="" '構成表の出力先 1540 CM.STRUCTPMD$="" 'ファイル出力のモード 1550 CM.STRUCTPAGE$="N" '改ページ指示 1560 CM.STRUCTPAGES=0 '改ページ行数 1570 CM.STRUCTPIT$="N" 'プリンタ出力の日本語ピッチ指示 1580 CM.STRUCTPITS=0 'プリンタ出力の日本語ピッチドット数 1590 CM.STRUCTCMD$="" 'コマンドライン 1600 ' 1610 CM.LMLOAD$="N" 'リンク後のLMロード 1620 ' 1630 CM.STATUS$="N" 'LM諸元表 1640 CM.STATUSFL$="" 'LM諸元表の出力先 1650 CM.STATUSPMD$="" 'ファイル出力のモード 1660 CM.STATUSPAGE$="N" '改ページ指示 1670 CM.STATUSPAGES=0 '改ページ行数 1680 CM.STATUSPIT$="N" 'プリンタ出力の日本語ピッチ指示 1690 CM.STATUSPITS=0 'プリンタ出力の日本語ピッチドット数 1700 CM.STATUSCMD$="" 'コマンドライン 1710 ' 1720 CM.XREF$="N" 'クロスリファレンスの出力 1730 CM.XREFFL$="" 'クロスリファレンスの出力先 1740 CM.XREFPMD$="OUTPUT" 'ファイル出力のモード 1750 CM.XREFPAGE$="N" '改ページ指示 1760 CM.XREFPAGES=0 '改ページ行数 1770 CM.XREFPIT$="N" 'プリンタ出力の日本語ピッチ指示 1780 CM.XREFPITS=0 'プリンタ出力の日本語ピッチドット数 1790 CM.XREFCMD$="" 'コマンドライン 1800 ' 1810 CM.MAIN$="" 'メインモジュール名 1820 CM.RETDIR$="" '処理後戻るディレクトリィ 1830 CM.PREFIX$="" 'ファイルプリフィックス 1840 CM.PREFIXFG$="N" 'ファイルプリフィクスの指定可否 1850 CM.DIRCNT=0 '検索ディレクトリの数 1860 CM.DIRCUR=0 '現在カレントなパスの位置 1870 CM.LINENO=1000 '行番号初期値 1880 CM.LSTEP=10 '行番号増分値 1890 CM.LINMAX=60000! '行番号最大値 1900 CM.ENTCUR=0 '現在処理対象とするエントリ位置 1910 CM.STRNO=1 'カレント位置の階層レベル 1920 CM.VER$="v2.00" 'VERSION NUMBER 1930 CM.LMNAMEFG$="N" 'LM名の指定 1940 CM.LMNAME$="TEMPLM" 'LM名 1950 CM.LMLINES=0 '作成したLMのライン数 1960 CM.LMBYTES=0 '作成したLMの文字数 1970 CM.LMDATE$="" 'LM作成日付 1980 CM.LMTIME$="" 'LM作成時間 1990 CM.OTCNT=4 '出力結果数 2000 CM.OTCUR=0 '出力結果テーブルカウンタ 2010 CM.PAGEL=0 '改頁用行カウンタ 2020 ' 2030 DIM CM.MNAME$(CM.INCNT) 'モジュール名格納テーブル 2040 DIM CM.MLINNO$(CM.INCNT) '割り当て行範囲 2050 DIM CM.MINDIR(CM.INCNT) '入力ディレクトリィ番号 2060 DIM CM.MLINES(CM.INCNT) 'モジュール毎ライン数 2070 DIM CM.MBYTES(CM.INCNT) 'モジュール毎文字数 2080 DIM CM.MNAME2$(CM.INCNT,CM.CALCNT) '呼び出しモジュール名 2090 DIM CM.MCLCNT(CM.INCNT) '呼び出したモジュール数 2100 DIM CM.MCTCNT(CM.INCNT,CM.CALCNT) 'モジュールの呼び出し回数 2110 DIM CM.MNFLG(CM.INCNT) 'モジュールの存在可否フラグ 2120 DIM CM.INCLF$(CM.INCMAX) 'インクルードファイル名 2130 DIM CM.INCLNO$(CM.INCMAX) '割り当て行範囲 2140 DIM CM.IINDIR(CM.INCMAX) '入力ディレクトリィ番号INCLUDE 2150 DIM CM.INCFG(CM.INCMAX) '存在可否 2160 DIM CM.ILINES(CM.INCMAX) 'インクルードファイルの行数 2170 DIM CM.IBYTES(CM.INCMAX) 'インクルードファイルの文字数 2180 DIM CM.SDIR$(CM.DIRMAX) '検索ディレクトリ名 2190 DIM CM.OTSEQ(CM.OTCNT) '出力結果順序 2200 ' 2210 ' 2220 GOSUB BOPING 2230 GOSUB BCMDNM 2240 RETURN 2250 ' 2260 '*** BINCMD *** 2270 ' SAVE"BINCMD.BAS",A 2280 BINCMD'コマンドファイル入力 2290 '() 2300 GOSUB BCMOPN 2310 GOSUB BCMPRS 2320 GOSUB BCMFNI 2330 RETURN 2340 ' 2350 '*** BMDLNK *** 2360 ' SAVE"BMDLNK.BAS",A 2370 BMDLNK'モジュールリンク処理 2380 '() 2390 GOSUB BMDLOP '開始処理 2400 GOSUB BMDMED 'モジュール編集処理 2410 GOSUB BMDFNI '終了処理 2420 RETURN 2430 ' 2440 '*** BINFPR *** 2450 ' SAVE"BINFPR.BAS",A 2460 BINFPR'結果出力 2470 '() 2480 GOSUB CTORST:GOSUB CTCSET 2490 ' 2500 FOR BINFPR.II=1 TO CM.OTCNT STEP 1 2510 BINFPR.OK=CM.OTSEQ(BINFPR.II) 2520 IF BINFPR.OK=1 AND CM.STATUS$="Y" THEN GOSUB *BINFPR.INFST 2530 IF BINFPR.OK=2 AND CM.MAP$="Y" THEN GOSUB *BINFPR.INFMP 2540 IF BINFPR.OK=3 AND CM.STRUCT$="Y" THEN GOSUB *BINFPR.INFSR 2550 IF BINFPR.OK=4 AND CM.XREF$="Y" THEN GOSUB *BINFPR.INFXR 2560 NEXT BINFPR.II 2570 ' 2580 RETURN 2590 ' 2600 *BINFPR.INFST 2610 CTEOPN.PINNAME$=CM.STATUSFL$:CTEOPN.PINPMD$=CM.STATUSPMD$ 2620 GOSUB CTEOPN:GOSUB CTOSET:GOSUB CTCRST 2630 GOSUB BINFST:GOSUB CTORST:GOSUB CTCSET:GOSUB CTECLS 2640 RETURN 2650 ' 2660 *BINFPR.INFMP 2670 CTEOPN.PINNAME$=CM.MAPFL$:CTEOPN.PINPMD$=CM.MAPPMD$ 2680 GOSUB CTEOPN:GOSUB CTOSET:GOSUB CTCRST 2690 GOSUB BINFMP:GOSUB CTORST:GOSUB CTCSET:GOSUB CTECLS 2700 RETURN 2710 ' 2720 *BINFPR.INFSR 2730 CTEOPN.PINNAME$=CM.STRUCTFL$:CTEOPN.PINPMD$=CM.STRUCTPMD$ 2740 GOSUB CTEOPN:GOSUB CTOSET:GOSUB CTCRST 2750 GOSUB BINFSR:GOSUB CTORST:GOSUB CTCSET:GOSUB CTECLS 2760 RETURN 2770 ' 2780 *BINFPR.INFXR 2790 CTEOPN.PINNAME$=CM.XREFFL$:CTEOPN.PINPMD$=CM.XREFPMD$ 2800 GOSUB CTEOPN:GOSUB CTOSET:GOSUB CTCRST 2810 GOSUB BINFXR:GOSUB CTORST:GOSUB CTCSET:GOSUB CTECLS 2820 RETURN 2830 ' 2840 '*** BFINSH *** 2850 ' SAVE"BFINSH.BAS",A 2860 BFINSH'終了処理 2870 '() 2880 CLOSE 2890 IF CM.RETDIR$="" THEN *BFINSH.SKIP1 2900 CHDIR CM.RETDIR$ 2910 IF CZSERR.PSTS<>0 THEN GOSUB CZERAB 2920 *BFINSH.SKIP1 2930 CTMDSP.PINCHR$="リンクを終了しました。" 2940 CTMDSP.PINCOR=7:GOSUB CTMDSP 2950 IF CM.LMLOAD$="Y" THEN GOSUB BMLOAD 2960 RETURN 2970 ' 2980 '*** CZINIT *** 2990 ' SAVE"CZINIT.BAS",A 3000 CZINIT'システム初期化 3010 '() 3020 ZSEENO=0 3030 ZSEELN=0 3040 ZIOMOD$=" " 3050 ZERMAX=50 3060 DIM ZERLEV(ZERMAX) 3070 ZERCNT=0 3080 RETURN 3090 ' 3100 '*** CRINIT *** 3110 ' SAVE"CRINIT.BAS",A 3120 CRINIT'メモリ初期化 3130 '() 3140 ZENMOD$=" " 3150 ON ERROR GOTO CZSERR 3160 RETURN 3170 ' 3180 '*** CTINIT *** 3190 ' SAVE"CTINIT.BAS",A 3200 CTINIT'端末初期化 3210 '() 3220 CLS 3 3230 WIDTH 80,25 3240 CONSOLE 0,25,2,1 3250 COLOR 7 3260 ' 3270 ZIOMOD$="C " 3280 ZIOCOR=7 3290 RETURN 3300 ' 3310 '*** CZESET *** 3320 ' SAVE"CZESET.BAS",A 3330 CZESET'システムエラー無判定番号の設定 3340 '(PINENO) 3350 ZERCNT=ZERCNT+1:IF ZERCNT>ZERMAX THEN RETURN 3360 ZERLEV(ZERCNT)=CZESET.PINENO 3370 RETURN 3380 ' 3390 '*** BOPING *** 3400 ' SAVE"BOPING.BAS",A 3410 BOPING'オープニングメッセージ出力 3420 '() 3430 CTMDSP.PINCOR=7 3440 CTMDSP.PINCHR$="BASIC―LINKER "+CM.VER$:GOSUB CTMDSP 3450 CTMDSP.PINCHR$=" Programmed 1987.2 y.nanba":GOSUB CTMDSP 3460 CTMDSP.PINCHR$="":GOSUB CTMDSP 3470 RETURN 3480 ' 3490 '*** BCMDNM *** 3500 ' SAVE"BCMDNM.BAS",A 3510 BCMDNM'コマンドファイル名の入力 3520 '() 3530 CTINTX.PINCHR$="コマンドファイル名は?" 3540 GOSUB CTINTX 3550 IF CTINTX.POTCHR$<>"" THEN *BCMDNM.SKIP1 3560 CTMSGW.PINCHR$="リンクコマンドを入力して下さい。" 3570 GOSUB CTMSGW 3580 *BCMDNM.SKIP1 3590 CM.COMFL$=CTINTX.POTCHR$ 3600 RETURN 3610 ' 3620 '*** BCMOPN *** 3630 ' SAVE"BCMOPN.BAS",A 3640 BCMOPN'コマンドファイルのオープン 3650 '() 3660 IF CM.COMFL$="" THEN BCMOPN.FL$="KYBD:" ELSE BCMOPN.FL$=CM.COMFL$ 3670 CZSERR.PSTS=0:OPEN BCMOPN.FL$ FOR INPUT AS #1 3680 IF CZSERR.PSTS=53 THEN BCMERW.PNO=3:GOSUB BCMERW 3690 RETURN 3700 ' 3710 '*** BCMPRS *** 3720 ' SAVE"BCMPRS.BAS",A 3730 BCMPRS'コマンドファイル入力処理 3740 '() 3750 IF CM.COMFL$<>"" THEN GOSUB *BCMPRS.FIN ELSE GOSUB *BCMPRS.KIN 3760 RETURN 3770 ' 3780 *BCMPRS.KIN 3790 BCMPRS.EFG=0 3800 WHILE BCMPRS.EFG=0 3810 COLOR 7:LINE INPUT BCMPRS.CLINE$ 3820 CCSPBA.PINCHR$=BCMPRS.CLINE$:GOSUB CCSPBA 3830 IF CCSPBA.POTCHR$="END" THEN BCMPRS.EFG=1:GOTO *BCMPRS.SKIP89 3840 GOSUB *BCMPRS.EDIT 3850 *BCMPRS.SKIP89 3860 WEND 3870 RETURN 3880 ' 3890 *BCMPRS.FIN 3900 WHILE NOT EOF(1) 3910 LINE INPUT #1,BCMPRS.CLINE$ 3920 GOSUB *BCMPRS.EDIT 3930 WEND 3940 RETURN 3950 ' 3960 *BCMPRS.EDIT 3970 BCMANL.PINCHR$=BCMPRS.CLINE$:GOSUB BCMANL 3980 IF BCMANL.PSTS=1 THEN BCMWRG.PIER=12:GOSUB *BCMPRS.BCMWRG:RETURN 3990 BCMPRS.CIN$=BCMANL.POTCMD$:BCMPRS.CPR$=BCMANL.POTPRM$ 4000 ' 4010 IF BCMPRS.CIN$="LMNAME " THEN GOSUB *BCMPRS.LMNAME: RETURN 4020 IF BCMPRS.CIN$="TITLE " THEN GOSUB *BCMPRS.TITLE: RETURN 4030 IF BCMPRS.CIN$="MAIN " THEN GOSUB *BCMPRS.MAIN: RETURN 4040 IF BCMPRS.CIN$="INCLUDE " THEN GOSUB *BCMPRS.INCLUDE:RETURN 4050 IF BCMPRS.CIN$="INDIR " THEN GOSUB *BCMPRS.INDIR: RETURN 4060 IF BCMPRS.CIN$="RETDIR " THEN GOSUB *BCMPRS.RETDIR: RETURN 4070 IF BCMPRS.CIN$="MAP " THEN GOSUB *BCMPRS.MAP: RETURN 4080 IF BCMPRS.CIN$="STRUCT " THEN GOSUB *BCMPRS.STRUCT: RETURN 4090 IF BCMPRS.CIN$="LMLOAD " THEN GOSUB *BCMPRS.LMLOAD: RETURN 4100 IF BCMPRS.CIN$="STATUS " THEN GOSUB *BCMPRS.STATUS: RETURN 4110 IF BCMPRS.CIN$="XREF " THEN GOSUB *BCMPRS.XREF: RETURN 4120 IF BCMPRS.CIN$="PREFIX " THEN GOSUB *BCMPRS.PREFIX: RETURN 4130 IF BCMPRS.CIN$="DEFAULT " THEN GOSUB *BCMPRS.DEFAULT:RETURN 4140 ' 4150 BCMWRG.PIER=12:GOSUB *BCMPRS.BCMWRG 4160 RETURN 4170 ' 4180 *BCMPRS.PRCARD'制御カードの表示 4190 IF CM.COMFL$="" THEN RETURN' IGGNORE KBIN 4200 CTMDSP.PINCHR$=BCMPRS.CLINE$ 4210 CTMDSP.PINCOR=6:GOSUB CTMDSP 4220 RETURN 4230 ' 4240 *BCMPRS.BCMIGN'制御カードの無視 4250 GOSUB *BCMPRS.PRCARD 4260 CTMDSP.PINCHR$="この制御カードは無効です。" 4270 CTMDSP.PINCOR=2: GOSUB CTMDSP 4280 RETURN 4290 ' 4300 *BCMPRS.BCMWRG 4310 GOSUB *BCMPRS.PRCARD 4320 GOSUB BCMWRG 4330 RETURN 4340 ' 4350 *BCMPRS.LMNAME'LM名の設定 4360 IF LEN(BCMPRS.CPR$)=0 THEN BCMWRG.PIER=1:GOSUB *BCMPRS.BCMWRG:RETURN 4370 IF CM.LMNAMEFG$<>"N" THEN BCMWRG.PIER=2:GOSUB *BCMPRS.BCMWRG:RETURN 4380 CM.LMNAMEFG$="Y":CM.LMNAME$=BCMPRS.CPR$ 4390 RETURN 4400 ' 4410 *BCMPRS.TITLE'タイトルの設定 4420 IF CM.TITLE$="Y" THEN BCMWRG.PIER=2:GOSUB *BCMPRS.BCMWRG:RETURN 4430 CM.TITLE$="Y" 4440 CM.TLTEXT$=BCMPRS.CPR$ 4450 RETURN 4460 ' 4470 *BCMPRS.MAIN'メインルーチン名の設定" 4480 IF LEN(BCMPRS.CPR$)=0 THEN BCMWRG.PIER=3:GOSUB *BCMPRS.BCMWRG:RETURN 4490 IF LEN(BCMPRS.CPR$)>6 THEN BCMWRG.PIER=10:GOSUB *BCMPRS.BCMWRG:RETURN 4500 IF CM.MAIN$<>"" THEN BCMWRG.PIER=2:GOSUB *BCMPRS.BCMWRG:RETURN 4510 CCLCHK.PINCHR$=BCMPRS.CPR$:GOSUB CCLCHK 4520 IF CCLCHK.PSTS=1 THEN BCMWRG.PIER=10:GOSUB *BCMPRS.BCMWRG:RETURN 4530 CM.MAIN$=BCMPRS.CPR$ 4540 RETURN 4550 ' 4560 *BCMPRS.INCLUDE'インクルードファイル名の設定 4570 IF LEN(BCMPRS.CPR$)=0 THEN BCMWRG.PIER=4:GOSUB *BCMPRS.BCMWRG:RETURN 4580 IF LEN(BCMPRS.CPR$)>6 THEN BCMWRG.PIER=9:GOSUB *BCMPRS.BCMWRG:RETURN 4590 CCLCHK.PINCHR$=BCMPRS.CPR$:GOSUB CCLCHK 4600 IF CCLCHK.PSTS=1 THEN BCMWRG.PIER=9:GOSUB *BCMPRS.BCMWRG:RETURN 4610 CCLEFT.PINCHR$=BCMPRS.CPR$:CCLEFT.PINLEN=6:GOSUB CCLEFT 4620 IF CM.INCCNT>=CM.INCMAX THEN BCMWRG.PIER=8:GOSUB *BCMPRS.BCMWRG:RETURN 4630 CM.INCCNT=CM.INCCNT+1 4640 CM.INCLF$(CM.INCCNT)=CCLEFT.POTCHR$ 4650 RETURN 4660 ' 4670 *BCMPRS.INDIR'検索パスの設定 4680 IF LEN(BCMPRS.CPR$)=0 THEN BCMWRG.PIER=11:GOSUB *BCMPRS.BCMWRG:RETURN 4690 FOR BCMPRS.MM=1 TO CM.DIRCNT STEP 1 4700 IF BCMPRS.CPR$<>CM.SDIR$(BCMPRS.MM) THEN GOTO *BCMPRS.SKIP44 4710 BCMWRG.PIER=7:GOSUB *BCMPRS.BCMWRG:RETURN 4720 *BCMPRS.SKIP44 4730 NEXT BCMPRS.MM 4740 IF CM.DIRCNT>=CM.DIRMAX THEN BCMWRG.PIER=6:GOSUB *BCMPRS.BCMWRG:RETURN 4750 CM.DIRCNT=CM.DIRCNT+1:CM.SDIR$(CM.DIRCNT)=BCMPRS.CPR$ 4760 RETURN 4770 ' 4780 *BCMPRS.RETDIR'処理後戻るディレクトリィ名 4790 IF CM.RETDIR$<>"" THEN BCMWRG.PIER=2:GOSUB *BCMPRS.BCMWRG:RETURN 4800 IF LEN(BCMPRS.CPR$)=0 THEN BCMWRG.PIER=5:GOSUB *BCMPRS.BCMWRG:RETURN 4810 CM.RETDIR$=BCMPRS.CPR$ 4820 RETURN 4830 ' 4840 *BCMPRS.MAP'モジュール表の出力 4850 IF CM.MAP$="Y" THEN BCMWRG.PIER=2:GOSUB *BCMPRS.BCMWRG:RETURN 4860 BCMCMA.PINCHR$=BCMPRS.CPR$:GOSUB BCMCMA 4870 IF BCMCMA.PSTS=1 THEN BCMWRG.PIER=12:GOSUB *BCMPRS.BCMWRG:RETURN 4880 CM.MAP$="Y":CM.MAPFL$=BCMCMA.POTFIL$:CM.MAPPMD$=BCMCMA.POTPMD$ 4890 CM.MAPPAGE$=BCMCMA.POTPAG$:CM.MAPPAGES=BCMCMA.POTPGS 4900 CM.MAPPIT$=BCMCMA.POTPIT$:CM.MAPPTS=BCMCMA.POTPTS 4910 CM.MAPCMD$=BCMPRS.CPR$:BCMPRS.OSEQ=2:GOSUB *BCMPRS.MKSEQ 4920 RETURN 4930 ' 4940 *BCMPRS.STRUCT'構成表の出力 4950 IF CM.STRUCT$="Y" THEN BCMWRG.PIER=2:GOSUB *BCMPRS.BCMWRG:RETURN 4960 BCMCMA.PINCHR$=BCMPRS.CPR$:GOSUB BCMCMA 4970 IF BCMCMA.PSTS=1 THEN BCMWRG.PIER=12:GOSUB *BCMPRS.BCMWRG:RETURN 4980 CM.STRUCT$="Y":CM.STRUCTFL$=BCMCMA.POTFIL$:CM.STRUCTPMD$=BCMCMA.POTPMD$ 4990 CM.STRUCTPAGE$=BCMCMA.POTPAG$:CM.STRUCTPAGES=BCMCMA.POTPGS 5000 CM.STRUCTPIT$=BCMCMA.POTPIT$:CM.STRUCTPTS=BCMCMA.POTPTS 5010 CM.STRUCTCMD$=BCMPRS.CPR$:BCMPRS.OSEQ=3:GOSUB *BCMPRS.MKSEQ 5020 RETURN 5030 ' 5040 *BCMPRS.LMLOAD'LMのロード 5050 IF CM.LMLOAD$="Y" THEN BCMWRG.PIER=2:GOSUB *BCMPRS.BCMWRG:RETURN 5060 CM.LMLOAD$="Y" 5070 RETURN 5080 ' 5090 *BCMPRS.STATUS'LMステータス表の出力 5100 IF CM.STATUS$="Y" THEN BCMWRG.PIER=2:GOSUB *BCMPRS.BCMWRG:RETURN 5110 BCMCMA.PINCHR$=BCMPRS.CPR$:GOSUB BCMCMA 5120 IF BCMCMA.PSTS=1 THEN BCMWRG.PIER=12:GOSUB *BCMPRS.BCMWRG:RETURN 5130 CM.STATUS$="Y":CM.STATUSFL$=BCMCMA.POTFIL$:CM.STATUSPMD$=BCMCMA.POTPMD$ 5140 CM.STATUSPAGE$=BCMCMA.POTPAG$:CM.STATUSPAGES=BCMCMA.POTPGS 5150 CM.STATUSPIT$=BCMCMA.POTPIT$:CM.STATUSPTS=BCMCMA.POTPTS 5160 CM.STATUSCMD$=BCMPRS.CPR$:BCMPRS.OSEQ=1:GOSUB *BCMPRS.MKSEQ 5170 RETURN 5180 ' 5190 *BCMPRS.XREF'クロスリファレンスの出力 5200 IF CM.XREF$="Y" THEN BCMWRG.PIER=2:GOSUB *BCMPRS.BCMWRG:RETURN 5210 BCMCMA.PINCHR$=BCMPRS.CPR$:GOSUB BCMCMA 5220 CM.XREFPAGE$=BCMCMA.POTPAG$:CM.XREFPAGES=BCMCMA.POTPGS 5230 IF BCMCMA.PSTS=1 THEN BCMWRG.PIER=12:GOSUB *BCMPRS.BCMWRG:RETURN 5240 CM.XREF$="Y":CM.XREFFL$=BCMCMA.POTFIL$:CM.XREFPMD$=BCMCMA.POTPMD$ 5250 CM.XREFPIT$=BCMCMA.POTPIT$:CM.XREFPTS=BCMCMA.POTPTS 5260 CM.XREFCMD$=BCMPRS.CPR$:BCMPRS.OSEQ=4:GOSUB *BCMPRS.MKSEQ 5270 RETURN 5280 ' 5290 *BCMPRS.PREFIX'プリフィクスの付与 5300 IF CM.PREFIXFG$="Y" THEN BCMWRG.PIER=2:GOSUB *BCMPRS.BCMWRG:RETURN 5310 IF LEN(BCMPRS.CPR$)=0 THEN BCMWRG.PIER=15:GOSUB *BCMPRS.BCMWRG:RETURN 5320 CM.PREFIXFG$="Y" 5330 CM.PREFIX$=BCMPRS.CPR$ 5340 RETURN 5350 ' 5360 *BCMPRS.DEFAULT'省略値の設定 5370 IF CM.DEF$="Y" THEN BCMWRG.PIER=2:GOSUB *BCMPRS.BCMWRG:RETURN 5380 BCMCMA.PINCHR$=BCMPRS.CPR$:GOSUB BCMCMA 5390 IF BCMCMA.PSTS=1 THEN BCMWRG.PIER=12:GOSUB *BCMPRS.BCMWRG:RETURN 5400 CM.DEF$="Y":CM.DEFFL$=BCMCMA.POTFIL$:CM.DEFPMD$=BCMCMA.POTPMD$ 5410 CM.DEFPAGE$=BCMCMA.POTPAG$:CM.DEFPAGES=BCMCMA.POTPGS 5420 CM.DEFPIT$=BCMCMA.POTPIT$:CM.DEFPTS=BCMCMA.POTPTS 5430 CM.DEFCMD$=BCMPRS.CPR$ 5440 RETURN 5450 ' 5460 *BCMPRS.MKSEQ 5470 CM.OTCUR=CM.OTCUR+1:CM.OTSEQ(CM.OTCUR)=BCMPRS.OSEQ 5480 RETURN 5490 ' 5500 '*** BCMFNI *** 5510 ' SAVE"BCMFNI.BAS",A 5520 BCMFNI'コマンドファイル終了処理 5530 '() 5540 CLOSE #1 5550 GOSUB *BCMFNI.CMCHECK 5560 GOSUB *BCMFNI.PDEF 5570 GOSUB *BCMFNI.PREFIX 5580 GOSUB *BCMFNI.CMWRG 5590 RETURN 5600 ' 5610 *BCMFNI.CMCHECK 5620 IF CM.MAIN$="" THEN BCMERW.PNO=1:GOSUB BCMERW 5630 IF CM.DIRCNT=0 THEN BCMERW.PNO=2:GOSUB BCMERW 5640 RETURN 5650 ' 5660 *BCMFNI.CMWRG'警告の通知 5670 IF CM.LMNAMEFG$="N" THEN BCMWRG.PIER=13:GOSUB BCMWRG 5680 RETURN 5690 ' 5700 *BCMFNI.PDEF'パラメータデェフォルトの設定 5710 IF CM.DEF$="N" THEN RETURN 5720 IF CM.DEF$<>"Y" OR CM.MAPCMD$<>"" THEN *BCMFNI.SKIP11 5730 CM.MAPFL$=CM.DEFFL$ 5740 CM.MAPPMD$=CM.DEFPMD$ 5750 CM.MAPPAGE$=CM.DEFPAGE$ 5760 CM.MAPPAGES=CM.DEFPAGES 5770 CM.MAPPIT$=CM.DEFPIT$ 5780 CM.MAPPITS=CM.DEFPITS 5790 *BCMFNI.SKIP11 5800 ' 5810 IF CM.DEF$<>"Y" OR CM.STRUCTCMD$<>"" THEN *BCMFNI.SKIP21 5820 CM.STRUCTFL$=CM.DEFFL$ 5830 CM.STRUCTPMD$=CM.DEFPMD$ 5840 CM.STRUCTPAGE$=CM.DEFPAGE$ 5850 CM.STRUCTPAGES=CM.DEFPAGES 5860 CM.STRUCTPIT$=CM.DEFPIT$ 5870 CM.STRUCTPITS=CM.DEFPITS 5880 *BCMFNI.SKIP21 5890 ' 5900 IF CM.DEF$<>"Y" OR CM.STATUSCMD$<>"" THEN *BCMFNI.SKIP31 5910 CM.STATUSFL$=CM.DEFFL$ 5920 CM.STATUSPMD$=CM.DEFPMD$ 5930 CM.STATUSPAGE$=CM.DEFPAGE$ 5940 CM.STATUSPAGES=CM.DEFPAGES 5950 CM.STATUSPIT$=CM.DEFPIT$ 5960 CM.STATUSPITS=CM.DEFPITS 5970 *BCMFNI.SKIP31 5980 ' 5990 IF CM.DEF$<>"Y" OR CM.XREFCMD$<>"" THEN *BCMFNI.SKIP41 6000 CM.XREFFL$=CM.DEFFL$ 6010 CM.XREFPMD$=CM.DEFPMD$ 6020 CM.XREFPAGE$=CM.DEFPAGE$ 6030 CM.XREFPAGES=CM.DEFPAGES 6040 CM.XREFPIT$=CM.DEFPIT$ 6050 CM.XREFPITS=CM.DEFPITS 6060 *BCMFNI.SKIP41 6070 RETURN 6080 ' 6090 *BCMFNI.PREFIX 6100 BCMFMK.PINCHR$=CM.LMNAME$:GOSUB BCMFMK:CM.LMNAME$=BCMFMK.POTCHR$ 6110 BCMFMK.PINCHR$=CM.RETDIR$:GOSUB BCMFMK:CM.RETDIR$=BCMFMK.POTCHR$ 6120 FOR BCMFNI.JJ=1 TO CM.DIRCNT STEP 1 6130 BCMFMK.PINCHR$=CM.SDIR$(BCMFNI.JJ):GOSUB BCMFMK 6140 CM.SDIR$(BCMFNI.JJ)=BCMFMK.POTCHR$ 6150 NEXT BCMFNI.JJ 6160 BCMFMK.PINCHR$=CM.MAPFL$:GOSUB BCMFMK:CM.MAPFL$=BCMFMK.POTCHR$ 6170 BCMFMK.PINCHR$=CM.STRUCTFL$:GOSUB BCMFMK:CM.STRUCTFL$=BCMFMK.POTCHR$ 6180 BCMFMK.PINCHR$=CM.STATUSFL$:GOSUB BCMFMK:CM.STATUSFL$=BCMFMK.POTCHR$ 6190 BCMFMK.PINCHR$=CM.XREFFL$:GOSUB BCMFMK:CM.XREFFL$=BCMFMK.POTCHR$ 6200 RETURN 6210 ' 6220 '*** BMDLOP *** 6230 ' SAVE"BMDLOP.BAS",A 6240 BMDLOP'モジュールリンク開始処理 6250 '() 6260 OPEN CM.LMNAME$ FOR OUTPUT AS #2 6270 IF CZSERR<>0 THEN GOSUB CZERAB 6280 CTMDSP.PINCHR$="リンクを開始します。" 6290 CTMDSP.PINCOR=7: GOSUB CTMDSP 6300 RETURN 6310 ' 6320 '*** BMDMED *** 6330 ' SAVE"BMDMED.BAS",A 6340 BMDMED'モジュール編集ならびにLM作成 6350 '() 6360 '--- 自動リンク処理 6370 CM.ENTCUR=1 6380 CM.ENTCNT=1 6390 CCLEFT.PINCHR$=CM.MAIN$:CCLEFT.PINLEN=6:GOSUB CCLEFT 6400 CM.MNAME$(CM.ENTCUR)=CCLEFT.POTCHR$ 6410 WHILE CM.ENTCUR<=CM.ENTCNT 6420 GOSUB *BMDMED.SMDL 6430 CM.ENTCUR=CM.ENTCUR+1 6440 WEND 6450 '--- 手動リンク処理 6460 GOSUB BMDMAN 6470 RETURN 6480 ' 6490 *BMDMED.SMDL 6500 GOSUB *BMDMED.MOPEN '入力モジュールのオープン 6510 GOSUB *BMDMED.ADDENT '外部名のサーチならびに登録 6520 GOSUB *BMDMED.MCLOS '入力モジュールのクローズ 6530 RETURN 6540 ' 6550 *BMDMED.MOPEN'入力モジュールのオープン 6560 CTMDSP.PINCHR$="モジュール" 6570 CTMDSP.PINCHR$=CTMDSP.PINCHR$+CM.MNAME$(CM.ENTCUR) 6580 CTMDSP.PINCHR$=CTMDSP.PINCHR$+"をリンクします。" 6590 CTMDSP.PINCOR=7:GOSUB CTMDSP 6600 BMOPEN.PINFIL$=CM.MNAME$(CM.ENTCUR):GOSUB BMOPEN 6610 IF BMOPEN.PSTS=1 THEN CM.MNFLG(CM.ENTCUR)=1:RETURN 6620 CM.MINDIR(CM.ENTCUR)=BMOPEN.PDIRNO 6630 RETURN 6640 ' 6650 *BMDMED.ADDENT 6660 IF CM.ENTCUR=1 AND CM.MNFLG(CM.ENTCUR)=1 THEN BMDMSW.PNO=1:GOSUB BMDMSW 6670 IF CM.MNFLG(CM.ENTCUR)=1 THEN RETURN 6680 ' 6690 IF CM.TITLE$="Y" THEN GOSUB *BMDMED.PTITLE 6700 IF CM.TITLE$<>"Y" THEN BMDMED.ISTLINE=CM.LINENO 6710 WHILE NOT EOF(3) 6720 GOSUB BMDSIN:BMDMED.STEXT$=BMDSIN.POTCHR$ 6730 ' LINE INPUT #3,BMDMED.STEXT$ 6740 GOSUB *BMDMED.ADDENT2 6750 BMRPUT.PINCHR$=BMDMED.OTEXT$:GOSUB BMRPUT 6760 WEND 6770 RETURN 6780 ' 6790 *BMDMED.PTITLE 6800 BMDMED.ISTLINE=CM.LINENO 6810 BMHEAD.PINCHR$=CM.MNAME$(CM.ENTCUR) 6820 GOSUB BMHEAD 6830 RETURN 6840 ' 6850 *BMDMED.ADDENT2 6860 CCLNNO.PINCHR$=BMDMED.STEXT$: GOSUB CCLNNO 6870 BMDMED.CWKT$=CCLNNO.POTSTX$ 6880 CCELBL.PINCHR$=CCLNNO.POTSTX$:GOSUB CCELBL 6890 CCBTOA.PBIN=CM.LINENO: GOSUB CCBTOA 6900 BMDMED.OTEXT$=CCBTOA.PASC$+BMDMED.CWKT$ 6910 BMDMED.IENLINE=CM.LINENO 6920 CM.LINENO=CM.LINENO+CM.LSTEP 6930 IF CM.LINENO>CM.LINMAX THEN BMDMSW.PNO=2:GOSUB BMDMSW 6940 IF CCELBL.PCNT<>0 THEN GOSUB *BMDMED.TBLADD 6950 RETURN 6960 ' 6970 *BMDMED.TBLADD 6980 ' 6990 FOR BMDMED.JJ=1 TO CCELBL.PCNT STEP 1 7000 BMDMED.KK=(BMDMED.JJ-1)*6+1 7010 BMDMED.CWK$=MID$(CCELBL.POTCHR$,BMDMED.KK,6) 7020 ' 7030 '--- 2次テーブルへの登録 7040 BMDMED.WFL=0 7050 FOR BMDMED.LL=1 TO CM.MCLCNT(CM.ENTCUR) 7060 BMDMED.CWK3$=CM.MNAME2$(CM.ENTCUR,BMDMED.LL) 7070 IF BMDMED.CWK3$<>BMDMED.CWK$ THEN *BMDMED.SKIP5 7080 BMDMED.WFL=1 7090 CM.MCTCNT(CM.ENTCUR,BMDMED.LL)=CM.MCTCNT(CM.ENTCUR,BMDMED.LL)+1 7100 BMDMED.LL=CM.MCLCNT(CM.ENTCUR)+1 7110 *BMDMED.SKIP5 7120 NEXT BMDMED.LL 7130 IF BMDMED.WFL=1 THEN *BMDMED.SKIP4 7140 CM.MCLCNT(CM.ENTCUR)=CM.MCLCNT(CM.ENTCUR)+1 7150 IF CM.MCLCNT(CM.ENTCUR)>CM.CALCNT THEN BMDMED.PNO=4:GOSUB BMDMSW 7160 CM.MNAME2$(CM.ENTCUR,CM.MCLCNT(CM.ENTCUR))=BMDMED.CWK$ 7170 CM.MCTCNT(CM.ENTCUR,CM.MCLCNT(CM.ENTCUR))=1 7180 *BMDMED.SKIP4 7190 ' 7200 '--- 1次テーブルへの登録 7210 BMDMED.WFL=0 7220 FOR BMDMED.LL=1 TO CM.ENTCNT 7230 IF CM.MNAME$(BMDMED.LL)<>BMDMED.CWK$ THEN *BMDMED.SKIP8 7240 BMDMED.WFL=1 7250 BMDMED.LL=CM.ENTCNT+1 'LEAVE FOR 7260 *BMDMED.SKIP8 7270 NEXT BMDMED.LL 7280 IF BMDMED.WFL=1 THEN *BMDMED.SKIP9 7290 CM.ENTCNT=CM.ENTCNT+1 7300 IF CM.ENTCNT>CM.INCNT THEN BMDMED.PNO=3:GOSUB BMDMSW 7310 CM.MNAME$(CM.ENTCNT)=BMDMED.CWK$ 7320 *BMDMED.SKIP9 7330 NEXT BMDMED.JJ 7340 RETURN 7350 ' 7360 *BMDMED.MCLOS'入力モジュールのクローズ 7370 IF CM.MNFLG(CM.ENTCUR)=1 THEN RETURN 7380 CLOSE #3 7390 BMLINE.PINSTL=BMDMED.ISTLINE:BMLINE.PINENL=BMDMED.IENLINE 7400 GOSUB BMLINE:CM.MLINNO$(CM.ENTCUR)=BMLINE.POTCHR$ 7410 RETURN 7420 ' 7430 '*** BMDFNI *** 7440 ' SAVE"BMDFNI.BAS",A 7450 BMDFNI'モジュールリンク終了処理 7460 '() 7470 CLOSE #2 7480 IF CZSERR.PSTS<>0 THEN GOSUB CZERAB 7490 GOSUB CIDTTM 7500 CM.LMDATE$=CIDTTM.PDATE$:CM.LMTIME$=CIDTTM.PTIME$ 7510 RETURN 7520 ' 7530 '*** CTORST *** 7540 ' SAVE"CTORST.BAS",A 7550 CTORST'外部装置出力を不可にする 7560 '() 7570 MID$(ZIOMOD$,2,1)=" " 7580 RETURN 7590 ' 7600 '*** CTCSET *** 7610 ' SAVE"CTCSET.BAS",A 7620 CTCSET'CRT出力を可にする 7630 '() 7640 MID$(ZIOMOD$,1,1)="C" 7650 RETURN 7660 ' 7670 '*** CTEOPN *** 7680 ' SAVE"CTEOPN.BAS",A 7690 CTEOPN'外部機器のオープン 7700 '(PINNAME$,PINPMD$) 7710 ' 外部機器 1.プリンタ 7720 ' 2.磁器ディスク 7730 ' 3.CRT 7740 IF CTEOPN.PINPMD$="" THEN GOSUB *CTEOPN.OUTPUT:RETURN 7750 IF CTEOPN.PINPMD$="OUTPUT" THEN GOSUB *CTEOPN.OUTPUT:RETURN 7760 IF CTEOPN.PINPMD$="APPEND" THEN GOSUB *CTEOPN.APPEND:RETURN 7770 RETURN 7780 ' 7790 *CTEOPN.OUTPUT 7800 OPEN CTEOPN.PINNAME$ FOR OUTPUT AS #15 7810 RETURN 7820 ' 7830 *CTEOPN.APPEND 7840 CZSERR.PSTS=0 7850 OPEN CTEOPN.PINNAME$ FOR APPEND AS #15 7860 IF CZSERR.PSTS=53 THEN GOSUB *CTEOPN.OUTPUT 7870 RETURN 7880 ' 7890 '*** CTOSET *** 7900 ' SAVE"CTOSET.BAS",A 7910 CTOSET'外部装置出力を可にする 7920 '() 7930 MID$(ZIOMOD$,2,1)="O" 7940 RETURN 7950 ' 7960 '*** CTCRST *** 7970 ' SAVE"CTCRST.BAS",A 7980 CTCRST'CRT出力を不可にする 7990 '() 8000 MID$(ZIOMOD$,1,1)=" " 8010 RETURN 8020 ' 8030 '*** BINFST *** 8040 ' SAVE"BINFST.BAS",A 8050 BINFST'LMステータスの出力 8060 ' 8070 GOSUB *BINFST.TITLE 8080 CTMSGW.PINCHR$="LMファイル名  : "+CM.LMNAME$:GOSUB *BINFST.LOT 8090 ' 8100 CCBTOA.PBIN=CM.LMLINES:GOSUB CCBTOA 8110 CTMSGW.PINCHR$="LMサイズ 行数 : "+CCBTOA.PASC$:GOSUB *BINFST.LOT 8120 CCBTOA.PBIN=CM.LMBYTES:GOSUB CCBTOA 8130 CTMSGW.PINCHR$="      文字数: "+CCBTOA.PASC$:GOSUB *BINFST.LOT 8140 CTMSGW.PINCHR$="LM作成日付   : "+CM.LMDATE$:GOSUB *BINFST.LOT 8150 CCBTOA.PBIN=CM.ENTCNT+CM.INCCNT:GOSUB CCBTOA 8160 CTMSGW.PINCHR$="LM作成時間   : "+CM.LMTIME$:GOSUB *BINFST.LOT 8170 CTMSGW.PINCHR$="入力モジュール数 : "+CCBTOA.PASC$:GOSUB *BINFST.LOT 8180 ' 8190 CTMSGW.PINCHR$="検索ディレクトリィ: "+CM.SDIR$(1):GOSUB *BINFST.LOT 8200 FOR BINFST.KK=2 TO CM.DIRCNT STEP 1 8210 CTMSGW.PINCHR$=SPACE$(22)+CM.SDIR$(BINFST.KK):GOSUB *BINFST.LOT 8220 NEXT BINFST.KK 8230 RETURN 8240 ' 8250 *BINFST.TITLE 8260 BINFTL.PINPAG$=CM.STATUSPAGE$ 8270 BINFTL.PINCHR$="LM諸元表":GOSUB BINFTL 8280 RETURN 8290 ' 8300 *BINFST.LOT 8310 IF CM.STATUSPAGE$<>"Y" THEN *BINFST.SKIP43 8320 CM.PAGEL=CM.PAGEL+1 8330 IF CM.STATUSPAGES"Y" THEN *BINFMP.SKIP43 9300 CM.PAGEL=CM.PAGEL+1 9310 IF CM.PAGEL>CM.MAPPAGES THEN GOSUB *BINFMP.TITLE 9320 *BINFMP.SKIP43 9330 GOSUB CTMSGW 9340 RETURN 9350 ' 9360 '*** BINFSR *** 9370 ' SAVE"BINFSR.BAS",A 9380 BINFSR'構成表の出力 9390 '() 9400 BINFSR.SP=80:BINFSR.BTM=80:BINFSR.TOP=1 9410 DIM BINFSR.STACK1(BINFSR.BTM),BINFSR.STACK2(BINFSR.BTM) 9420 BINFSR.STACK1(1)=1:BINFSR.STACK2(1)=1:BINFSR.SP=BINFSR.SP-1 9430 GOSUB *BINFSR.TITLE 9440 CTMSGW.PINCHR$=" 1 "+CM.MNAME$(1):GOSUB *BINFSR.LOT 9450 IF CM.MCLCNT(1)=0 THEN RETURN 9460 BINFSR.II=1:BINFSR.JJ=1 9470 ' 9480 WHILE BINFSR.SPBINFSR.CWK$ THEN *BINFSR.SKIP1 9530 BINFSR.PNT=BINFSR.KK 9540 BINFSR.KK=CM.ENTCNT+1 'LEAVE FOR 9550 *BINFSR.SKIP1 9560 NEXT BINFSR.KK 9570 GOSUB *BINFSR.DISP' 9580 IF CM.MCLCNT(BINFSR.PNT)<>0 THEN GOSUB *BINFSR.PUSH 9590 IF CM.MCLCNT(BINFSR.PNT)=0 THEN GOSUB *BINFSR.POPCK 9600 WEND 9610 RETURN 9620 ' 9630 *BINFSR.POPCK 9640 BINFSR.JJ=BINFSR.JJ+1 9650 IF CM.MCLCNT(BINFSR.II)>=BINFSR.JJ THEN RETURN 9660 GOSUB *BINFSR.POP:IF BINFSR.BTM0 THEN BINFSR.CWK$=SPACE$(BINFSR.BWK)+CCBTOA.PASC$ 9750 CTMSGW.PINCHR$="" 9760 FOR BINFSR.KKK=1 TO CCBTOA.PBIN-2 9770 CTMSGW.PINCHR$=CTMSGW.PINCHR$+" ヨ " 9780 NEXT BINFSR.KKK 9790 CTMSGW.PINCHR$=CTMSGW.PINCHR$+" モユ" 9800 CTMSGW.PINCHR$=CTMSGW.PINCHR$+BINFSR.CWK$ 9810 CTMSGW.PINCHR$=CTMSGW.PINCHR$+" "+CM.MNAME2$(BINFSR.II,BINFSR.JJ) 9820 GOSUB *BINFSR.LOT 9830 RETURN 9840 ' 9850 *BINFSR.POP 9860 BINFSR.II=BINFSR.STACK1(BINFSR.SP) 9870 BINFSR.JJ=BINFSR.STACK2(BINFSR.SP) 9880 BINFSR.SP=BINFSR.SP+1 9890 RETURN 9900 ' 9910 *BINFSR.PUSH 9920 BINFSR.SP=BINFSR.SP-1 9930 BINFSR.STACK1(BINFSR.SP)=BINFSR.II 9940 BINFSR.STACK2(BINFSR.SP)=BINFSR.JJ 9950 BINFSR.II=BINFSR.PNT 9960 BINFSR.JJ=1 9970 RETURN 9980 ' 9990 *BINFSR.TITLE 10000 BINFTL.PINPAG$=CM.STRUCTPAGE$ 10010 BINFTL.PINCHR$="LM構成表":GOSUB BINFTL 10020 RETURN 10030 ' 10040 *BINFSR.LOT 10050 IF CM.STRUCTPAGE$<>"Y" THEN *BINFSR.SKIP43 10060 CM.PAGEL=CM.PAGEL+1 10070 IF CM.PAGEL>CM.STRUCTPAGES THEN GOSUB *BINFSR.TITLE 10080 *BINFSR.SKIP43 10090 GOSUB CTMSGW 10100 RETURN 10110 ' 10120 '*** BINFXR *** 10130 ' SAVE"BINFXR.BAS",A 10140 BINFXR'クロスリファレンスの出力 10150 '() 10160 GOSUB *BINFXR.TITLE 10170 ' --- SORT 10180 DIM BINFXR.SI(CM.ENTCNT),BINFXR.CMWK$(CM.ENTCNT) 10190 FOR BINFXR.II=1 TO CM.ENTCNT STEP 1 10200 BINFXR.SI(BINFXR.II)=BINFXR.II 10210 BINFXR.CMWK$(BINFXR.II)=CM.MNAME$(BINFXR.II) 10220 NEXT BINFXR.II 10230 FOR BINFXR.II=1 TO CM.ENTCNT STEP 1 10240 FOR BINFXR.JJ=BINFXR.II+1 TO CM.ENTCNT STEP 1 10250 IF BINFXR.CMWK$(BINFXR.II)<=BINFXR.CMWK$(BINFXR.JJ) THEN *BINFXR.S1 10260 SWAP BINFXR.CMWK$(BINFXR.JJ),BINFXR.CMWK$(BINFXR.II) 10270 SWAP BINFXR.SI(BINFXR.JJ),BINFXR.SI(BINFXR.II) 10280 *BINFXR.S1 10290 NEXT 10300 NEXT 10310 FOR BINFXR.II=1 TO CM.ENTCNT STEP 1 10320 CTMSGW.PINCHR$="" 10330 BINFXR.IL=BINFXR.SI(BINFXR.II) 10340 BINFXR.IF=0:BINFXR.CWK$="" 10350 FOR BINFXR.JJ=1 TO CM.MCLCNT(BINFXR.IL) 10360 CCBTOA.PBIN=CM.MCTCNT(BINFXR.IL,BINFXR.JJ):GOSUB CCBTOA 10370 CCZERO.PINCHR$=CCBTOA.PASC$:CCZERO.PINLEN=2:GOSUB CCZERO 10380 BINFXR.CWK$=BINFXR.CWK$+CCZERO.POTCHR$+"/" 10390 BINFXR.CWK$=BINFXR.CWK$+CM.MNAME2$(BINFXR.IL,BINFXR.JJ)+" " 10400 GOSUB *BINFXR.MPUT 10410 NEXT BINFXR.JJ 10420 NEXT BINFXR.II 10430 ERASE BINFXR.SI,BINFXR.CMWK$ 10440 RETURN 10450 ' 10460 *BINFXR.MPUT 10470 BINFXR.IWK1=BINFXR.JJ MOD 6 10480 IF BINFXR.IWK1<>0 AND BINFXR.JJ<>CM.MCLCNT(BINFXR.IL) THEN RETURN 10490 IF BINFXR.IF<>0 THEN CTMSGW.PINCHR$=SPACE$(6)+" : " 10500 IF BINFXR.IF=0 THEN CTMSGW.PINCHR$=BINFXR.CMWK$(BINFXR.II)+" : " 10510 CTMSGW.PINCHR$=CTMSGW.PINCHR$+BINFXR.CWK$:GOSUB *BINFXR.LOT 10520 CTMSGW.PINCHR$="":BINFXR.CWK$="":BINFXR.IF=1 10530 RETURN 10540 ' 10550 *BINFXR.TITLE 10560 BINFXR.CWK3$=CTMSGW.PINCHR$ 10570 BINFTL.PINPAG$=CM.XREFPAGE$ 10580 BINFTL.PINCHR$="クロスリファレンス表":GOSUB BINFTL 10590 CTMSGW.PINCHR$="モジュール名 : 呼び出しモジュール (回数/モジュール名)" 10600 GOSUB *BINFXR.LOT 10610 CTMSGW.PINCHR$=STRING$(79,"-"):GOSUB *BINFXR.LOT 10620 CTMSGW.PINCHR$=BINFXR.CWK3$ 10630 RETURN 10640 ' 10650 *BINFXR.LOT 10660 IF CM.XREFPAGE$<>"Y" THEN *BINFXR.SKIP43 10670 CM.PAGEL=CM.PAGEL+1 10680 IF CM.PAGEL>CM.XREFPAGES THEN GOSUB *BINFXR.TITLE 10690 *BINFXR.SKIP43 10700 GOSUB CTMSGW 10710 RETURN 10720 ' 10730 '*** CZERAB *** 10740 ' SAVE"CZERAB.BAS",A 10750 CZERAB'システムエラー処理 10760 '() 10770 'ON ERROR GOTO 0 10780 GOSUB *CZERAB.MSGSET 10790 ' 10800 IF CTMDSP.PINCHR$<>"" THEN *CZERAB.SKIP1 10810 CTMDSP.PINCHR$="システムエラーが発生しました。"+" " 10820 CTMDSP.PINCHR$=CTMDSP.PINCHR$+"ERR="+STR$(ZSEENO)+" " 10830 CTMDSP.PINCHR$=CTMDSP.PINCHR$+"ERL="+STR$(ZSEELN) 10840 *CZERAB.SKIP1 10850 CTMDSP.PINCOR=2: GOSUB CTMDSP 10860 GOSUB CZABRT 10870 END 10880 ' 10890 *CZERAB.MSGSET 10900 CZERAB.M$="" 10910 IF ZSEENO=7 THEN CZERAB.M$="メモリー容量が足りません。" 10920 IF ZSEENO=14 THEN CZERAB.M$="文字列を格納するメモリー容量が足りません。" 10930 IF ZSEENO=53 THEN CZERAB.M$="指定したファイルは存在しません。" 10940 IF ZSEENO=56 THEN CZERAB.M$="ファイル名の指定方法が誤っています。" 10950 IF ZSEENO=62 THEN CZERAB.M$="ディスクの準備ができていません。" 10960 IF ZSEENO=64 THEN CZERAB.M$="ディスクI/Oエラーが発生しました。" 10970 IF ZSEENO=68 THEN CZERAB.M$="ディスクに空き容量がありません。" 10980 IF ZSEENO=69 THEN CZERAB.M$="ディスク上のFATが壊れています。" 10990 IF ZSEENO=70 THEN CZERAB.M$="ドライブ番号が誤っています。" 11000 IF ZSEENO=75 THEN CZERAB.M$="指定したディレクトリィは存在しません。" 11010 IF ZSEENO=76 THEN CZERAB.M$="ファイルに対してアクセスできません。" 11020 CTMDSP.PINCHR$=CZERAB.M$ 11030 RETURN 11040 ' 11050 '*** CTMDSP *** 11060 ' SAVE"CTMDSP",A 11070 CTMDSP'CRTにメッセージを出力する 11080 '(PINCHR$,PINCOR) 11090 COLOR CTMDSP.PINCOR 11100 CTMDSP.PLINE$=CTMDSP.PINCHR$ 11110 IF LEN(CTMDSP.PLINE$)>80 THEN CTMDSP.PLINE$=LEFT$(CTMDSP.PLINE$,80) 11120 PRINT CTMDSP.PLINE$ 11130 RETURN 11140 ' 11150 '*** BMLOAD *** 11160 ' SAVE"BMLOAD.BAS",A 11170 BMLOAD'LMのロード 11180 '() 11190 CTMDSP.PINCHR$="LMをロードします。":CTMDSP.PINCOR=7 11200 GOSUB CTMDSP 11210 LOAD CM.LMNAME$ 11220 END 11230 ' 11240 '*** CZSERR *** 11250 ' SAVE"CZSERR.BAS",A 11260 CZSERR'システムエラートラップ 11270 '(//PLNO,PSTS) 11280 ' PRINT "ERR=";ERR,"ERL=";ERL 11290 CZSERR.PSTS=ERR 11300 CZSERR.PLNO=ERL 11310 ZSEENO=ERR 11320 ZSEELN=ERL 11330 CZSERR.IWK=0 11340 FOR CZSERR.II=1 TO ZERCNT 11350 IF ZERLEV(CZSERR.II)<>ZSEENO THEN GOTO *CZSERR.SKIP1 11360 CZSERR.IWK=1 11370 CZSERR.II=ZERCNT+1 ' LEAVE FOR 11380 *CZSERR.SKIP1 11390 NEXT CZSERR.II 11400 IF CZSERR.IWK=0 THEN GOSUB CZERAB 11410 RESUME NEXT 11420 END 11430 ' 11440 '*** CTINTX *** 11450 ' SAVE"CTINTX.BAS",A 11460 CTINTX'促進付きのテキスト入力 11470 '(PINCHR$,POTCHR$) 11480 COLOR ZIOCOR 11490 PRINT CTINTX.PINCHR$; 11500 LINE INPUT CTINTX.POTCHR$ 11510 RETURN 11520 ' 11530 '*** CTMSGW *** 11540 ' SAVE"CTMSGW.BAS",A 11550 CTMSGW'メッセージ出力を行う 11560 '(PINCHR$) 11570 IF MID$(ZIOMOD$,1,1)<>"C" THEN *CTMSGW.SKIP1 11580 CTMDSP.PINCHR$=CTMSGW.PINCHR$ 11590 CTMDSP.PINCOR=ZIOCOR 11600 GOSUB CTMDSP 11610 *CTMSGW.SKIP1 11620 IF MID$(ZIOMOD$,2,1)<>"P" THEN *CTMSGW.SKIP2 11630 CPMDSP.PINCHR$=CTMSGW.PINCHR$ 11640 CPMDSP.PINCOR=ZIOCOR 11650 GOSUB CPMDSP 11660 *CTMSGW.SKIP2 11670 IF MID$(ZIOMOD$,2,1)<>"O" THEN *CTMSGW.SKIP3 11680 CTMPUT.PINCHR$=CTMSGW.PINCHR$ 11690 COLOR 7 11700 GOSUB CTMPUT 11710 *CTMSGW.SKIP3 11720 RETURN 11730 ' 11740 '*** BCMERW *** 11750 ' SAVE"BCMERW.BAS",A 11760 BCMERW'致命的なエラーの処理 11770 '(PNO) 11780 DIM BCMERW.CM$(30) 11790 BCMERW.CM$(1)="メインモジュール名が指定されていません。" 11800 BCMERW.CM$(2)="検索ディレクトリィが指定されていません。" 11810 BCMERW.CM$(3)="指定したコマンドファイルは存在しません。" 11820 BCMERW.CM$(4)="" 11830 BCMERW.CM$(5)="" 11840 BCMERW.CM$(6)="" 11850 BCMERW.CM$(7)="" 11860 BCMERW.CM$(8)="" 11870 BCMERW.CM$(9)="" 11880 ' 11890 ' 11900 CTMDSP.PINCHR$=BCMERW.CM$(BCMERW.PNO) 11910 CTMDSP.PINCOR=2:GOSUB CTMDSP 11920 ERASE BCMERW.CM$ 11930 GOSUB CZABRT 11940 END 11950 ' 11960 '*** CCSPBA *** 11970 ' SAVE"CCSPBA.BAS",A 11980 CCSPBA'文字列ブランクサプレス (前後サプレス) 11990 '(PINCHR$,POTCHR$) 12000 CCSPBA.POTCHR$="" 12010 CCSPBA.ILEN=LEN(CCSPBA.PINCHR$) 12020 IF CCSPBA.ILEN=0 THEN RETURN 12030 FOR CCSPBA.IST=1 TO CCSPBA.ILEN STEP 1 12040 IF MID$(CCSPBA.PINCHR$,CCSPBA.IST,1)<>" " THEN *CCSPBA.SKIP1 12050 NEXT CCSPBA.IST 12060 *CCSPBA.SKIP1 12070 FOR CCSPBA.IEN=CCSPBA.ILEN TO 1 STEP -1 12080 IF MID$(CCSPBA.PINCHR$,CCSPBA.IEN,1)<>" " THEN *CCSPBA.SKIP2 12090 NEXT CCSPBA.IEN 12100 *CCSPBA.SKIP2 12110 IF CCSPBA.IEN80 THEN BCMANL.PSTS=1:RETURN 12240 IF BCMANL.ILEN=0 THEN BCMANL.PSTS=1:RETURN 12250 CCSAMP.PINCHR$=BCMANL.PINCHR$:CCSAMP.PDEL$="=" 12260 CCSAMP.PINO=1:GOSUB CCSAMP 12270 CCLEFT.PINCHR$=CCSAMP.POTCHR$:CCLEFT.PINLEN=9:GOSUB CCLEFT 12280 BCMANL.POTCMD$=CCLEFT.POTCHR$ 12290 IF CCSAMP.PSTS=1 THEN RETURN 12300 ' 12310 CCSAMP.PINO=2:GOSUB CCSAMP 12320 CCSPBA.PINCHR$=CCSAMP.POTCHR$:GOSUB CCSPBA 12330 BCMANL.POTPRM$=CCSPBA.POTCHR$ 12340 IF CCSAMP.PSTS=0 THEN BCMANL.PSTS=1:RETURN 12350 RETURN 12360 ' 12370 '*** BCMWRG *** 12380 ' SAVE"BCMWRG.BAS",A 12390 BCMWRG'コマンドファイル入力時の警告エラ 12400 '(BCMWRG.PIER) 12410 DIM BCMWRG.M$(20) 12420 BCMWRG.M$(1)="LM名が指定されていません。" 12430 BCMWRG.M$(2)="このコマンドはすでに指定されています。" 12440 BCMWRG.M$(3)="メインモジュール名が指定されていません。" 12450 BCMWRG.M$(4)="インクルード名が指定されていません。" 12460 BCMWRG.M$(5)="戻りディレクトリィ名が指定されていません。" 12470 BCMWRG.M$(6)="検索ディリクトリィの指定が制限数を越えました。" 12480 BCMWRG.M$(7)="すでに同一名のディレクトリィ名が指定されています。" 12490 BCMWRG.M$(8)="インクルードファイルの指定が制限数を越えています。" 12500 BCMWRG.M$(9)="インクルードファイル名が誤っています。" 12510 BCMWRG.M$(10)="メインモジュール名が誤っています。" 12520 BCMWRG.M$(11)="検索ディレクトリィ名が指定されていません。" 12530 BCMWRG.M$(12)="入力コマンドが誤っています。" 12540 BCMWRG.M$(13)="LM名が指定されていないので、LM名を"+CM.LMNAME$ 12550 BCMWRG.M$(13)=BCMWRG.M$(13)+"とします。" 12560 BCMWRG.M$(14)="出力パラメータが指定されていません。" 12570 BCMWRG.M$(15)="プリフィックス名が指定されていません。" 12580 ' 12590 CTMDSP.PINCHR$=BCMWRG.M$(BCMWRG.PIER):CTMDSP.PINCOR=6:GOSUB CTMDSP 12600 ERASE BCMWRG.M$ 12610 RETURN 12620 ' 12630 '*** CCLCHK *** 12640 ' SAVE"CCLCHK.BAS",A 12650 CCLCHK'ラベルとしての妥当性をチェックする 12660 '(PINCHR$//PSTS) PSTS=1:ILLEGAL LABEL 12670 CCLCHK.PSTS=0 12680 CCSPBA.PINCHR$=CCLCHK.PINCHR$: GOSUB CCSPBA 12690 CCLCHK.ILEN=LEN(CCSPBA.POTCHR$) 12700 IF CCLCHK.ILEN=0 THEN CCLCHK.PSTS=1: RETURN 12710 IF CCLCHK.ILEN>6 THEN CCLCHK.PSTS=1: RETURN 12720 CCLCHK.CWK$=LEFT$(CCSPBA.POTCHR$,1) 12730 IF CCLCHK.CWK$<"A" OR CCLCHK.CWK$>"Z" THEN CCLCHK.PSTS=1: RETURN 12740 FOR CCLCHK.II=2 TO CCLCHK.ILEN STEP 1 12750 CCLCHK.CWK$=MID$(CCSPBA.POTCHR$,CCLCHK.II,1) 12760 IF CCLCHK.CWK$>="A" AND CCLCHK.CWK$=<"Z" THEN *CCLCHK.SKIP1 12770 IF CCLCHK.CWK$>="0" AND CCLCHK.CWK$=<"9" THEN *CCLCHK.SKIP1 12780 CCLCHK.PSTS=1: RETURN 12790 *CCLCHK.SKIP1 12800 NEXT CCLCHK.II 12810 RETURN 12820 ' 12830 '*** CCLEFT *** 12840 ' SAVE"CCLEFT.BAS",A 12850 CCLEFT'入力テキストを左詰めにする。 12860 '(PINCHR$,PINLEN//POTCHR$) 12870 CCLEFT.POTCHR$="" 12880 CCLEFT.ILEN=LEN(CCLEFT.PINCHR$) 12890 IF CCLEFT.PINLEN=0 THEN CCLEFT.POTCHR$="":RETURN 12900 IF CCLEFT.ILEN=0 THEN CCLEFT.POTCHR$=SPACE$(CCLEFT.PINLEN):RETURN 12910 CCSPBA.PINCHR$=CCLEFT.PINCHR$:GOSUB CCSPBA 12920 CCLEFT.POTCHR$=SPACE$(CCLEFT.PINLEN) 12930 CCLEFT.ILEN=LEN(CCSPBA.POTCHR$) 12940 MID$(CCLEFT.POTCHR$,1,CCLEFT.ILEN)=CCSPBA.POTCHR$ 12950 RETURN 12960 ' 12970 '*** BCMCMA *** 12980 ' SAVE"BCMCMA.BAS",A 12990 BCMCMA'結果出力のコマンドパラメータ解析を行う 13000 '(PINCHR$//POTFIL$,POTPMD$,POTPAG$,POTPGS, 13010 ' POTPIT$,POTPTS,PSTS) PSTS=1:ILLEGAL PARAMETER 13020 BCMCMA.POTFIL$="" 13030 BCMCMA.POTPMD$="" 'INIT PARAMETER 13040 BCMCMA.POTPAG$="" 13050 BCMCMA.POTPGS=0 13060 BCMCMA.POTPIT$="" 13070 BCMCMA.POTPTS=0 13080 BCMCMA.PSTS=0 13090 BCMCMA.IFF=0 13100 BCMSPL.PINCHR$=BCMCMA.PINCHR$:GOSUB BCMSPL 13110 IF BCMSPL.PSTS=1 THEN BCMCMA.PSTS=1:RETURN 13120 BCMCMA.ILEN=LEN(BCMSPL.POTDSC$) 13130 IF BCMCMA.ILEN>4 THEN BCMCMA.PSTS=1:RETURN 13140 CCLEFT.PINCHR$=BCMSPL.POTDSC$:CCLEFT.PINLEN=4:GOSUB CCLEFT 13150 ' 13160 BCMCMA.CDEV$=CCLEFT.POTCHR$ 13170 GOSUB *BCMCMA.DEFDEV 13180 FOR BCMCMA.I=1 TO BCMSPL.POTSBN 13190 GOSUB *BCMCMA.SBPP:IF BCMCMA.PSTS=1 THEN RETURN 13200 NEXT BCMCMA.I 13210 GOSUB *BCMCMA.PCHECK:IF BCMCMA.PSTS=1 THEN RETURN 13220 GOSUB *BCMCMA.PSET 13230 RETURN 13240 ' 13250 *BCMCMA.PCHECK'パラメータ組合せ判定 13260 IF BCMCMA.CDEV$="SCRN" THEN GOSUB *BCMCMA.SCRN:RETURN 13270 IF BCMCMA.CDEV$="LPT " THEN GOSUB *BCMCMA.LPT:RETURN 13280 IF BCMCMA.CDEV$="A " THEN GOSUB *BCMCMA.DISK:RETURN 13290 IF BCMCMA.CDEV$="B " THEN GOSUB *BCMCMA.DISK:RETURN 13300 IF BCMCMA.CDEV$="C " THEN GOSUB *BCMCMA.DISK:RETURN 13310 IF BCMCMA.CDEV$="D " THEN GOSUB *BCMCMA.DISK:RETURN 13320 BCMCMA.PSTS=1 13330 RETURN 13340 ' 13350 *BCMCMA.DEFDEV 13360 IF BCMCMA.CDEV$<>" " THEN RETURN 13370 IF BCMSPL.POTFIL$<>"" THEN BCMCMA.CDEV$="A ":BCMCMA.IFF=1 13380 IF BCMSPL.POTFIL$="" THEN BCMCMA.CDEV$="SCRN" 13390 RETURN 13400 ' 13410 *BCMCMA.SBPP'サブパラメータ分割 13420 BCMCMA.SBP1$(BCMCMA.I)="":BCMCMA.SBP2$(BCMCMA.I)="" 13430 CCSAMP.PINCHR$=BCMSPL.POTSBP$(BCMCMA.I):CCSAMP.PINO=1:CCSAMP.PDEL$="," 13440 GOSUB CCSAMP 13450 CCSPBA.PINCHR$=CCSAMP.POTCHR$:GOSUB CCSPBA 13460 BCMCMA.SBP1$(BCMCMA.I)=CCSPBA.POTCHR$:IF CCSAMP.PSTS=1 THEN RETURN 13470 CCSAMP.PINO=2:GOSUB CCSAMP 13480 CCSPBA.PINCHR$=CCSAMP.POTCHR$:GOSUB CCSPBA 13490 BCMCMA.SBP2$(BCMCMA.I)=CCSPBA.POTCHR$ 13500 IF CCSAMP.PSTS=0 THEN BCMCMA.PSTS=1:RETURN 13510 RETURN 13520 ' 13530 *BCMCMA.SCRN 13540 FOR BCMCMA.II=1 TO BCMSPL.POTSBN 13550 IF BCMCMA.SBP1$(BCMCMA.II)="PAGE" THEN *BCMCMA.SKIP22 13560 BCMCMA.PSTS=1:RETURN 13570 *BCMCMA.SKIP22 13580 NEXT BCMCMA.II 13590 IF BCMSPL.POTFIL$<>"" THEN BCMCMA.PSTS=1:RETURN 13600 RETURN 13610 ' 13620 *BCMCMA.LPT 13630 FOR BCMCMA.II=1 TO BCMSPL.POTSBN 13640 IF BCMCMA.SBP1$(BCMCMA.II)="PAGE" THEN *BCMCMA.SKIP32 13650 IF BCMCMA.SBP1$(BCMCMA.II)="PITCH" THEN *BCMCMA.SKIP32 13660 BCMCMA.PSTS=1:RETURN 13670 *BCMCMA.SKIP32 13680 NEXT BCMCMA.II 13690 IF BCMSPL.POTFIL$<>"" THEN BCMCMA.PSTS=1:RETURN 13700 RETURN 13710 ' 13720 *BCMCMA.DISK 13730 FOR BCMCMA.II=1 TO BCMSPL.POTSBN 13740 IF BCMCMA.SBP1$(BCMCMA.II)="APPEND" THEN *BCMCMA.SKIP42 13750 IF BCMCMA.SBP1$(BCMCMA.II)="PAGE" THEN *BCMCMA.SKIP42 13760 BCMCMA.PSTS=1 13770 *BCMCMA.SKIP42 13780 NEXT BCMCMA.II 13790 IF BCMSPL.POTFIL$="" THEN BCMCMA.PSTS=1:RETURN 13800 RETURN 13810 ' 13820 *BCMCMA.PSET'パラメータセット 13830 BCMCMA.CWK2$=BCMCMA.CDEV$:IF BCMCMA.IFF=1 THEN BCMCMA.CWK2$="" 13840 IF BCMCMA.CWK2$="" THEN CCSPSA.PINCHR$=BCMSPL.POTFIL$ 13850 IF BCMCMA.CWK2$<>"" THEN CCSPSA.PINCHR$=BCMCMA.CWK2$+":"+BCMSPL.POTFIL$ 13860 GOSUB CCSPSA:BCMCMA.POTFIL$=CCSPSA.POTCHR$ 13870 FOR BCMCMA.II=1 TO BCMSPL.POTSBN 13880 IF BCMCMA.SBP1$(BCMCMA.II)="APPEND" THEN GOSUB *BCMCMA.APPEND 13890 IF BCMCMA.SBP1$(BCMCMA.II)="PAGE" THEN GOSUB *BCMCMA.PAGE 13900 IF BCMCMA.SBP1$(BCMCMA.II)="PITCH" THEN GOSUB *BCMCMA.PITCH 13910 IF BCMCMA.PSTS=1 THEN RETURN 13920 NEXT 13930 RETURN 13940 ' 13950 *BCMCMA.APPEND 13960 IF BCMCMA.POTPMD$<>"" THEN BCMCMA.PSTS=1:RETURN 13970 BCMCMA.POTPMD$="APPEND" 13980 RETURN 13990 '---改頁指定 14000 *BCMCMA.PAGE 14010 IF BCMCMA.POTPAG$<>"" THEN BCMCMA.PSTS=1:RETURN 14020 BCMCMA.POTPAG$="Y" 14030 IF BCMCMA.SBP2$(BCMCMA.II)="" THEN BCMCMA.POTPGS=CM.DPLINE:RETURN 14040 CCATOB.PASC$=BCMCMA.SBP2$(BCMCMA.II):GOSUB CCATOB 14050 IF CCATOB.PSTS=1 THEN BCMCMA.PSTS=1:RETURN 14060 IF CCATOB.PBIN>CM.PAGELMAX THEN BCMCMA.PSTS=1:RETURN 14070 IF CCATOB.PBIN"" THEN BCMCMA.PSTS=1:RETURN 14130 BCMCMA.POTPIT$="Y" 14140 IF BCMCMA.SBP2$(BCMCMA.II)="" THEN BCMCMA.POTPTS=5:RETURN 14150 CCATOB.PASC$=BCMCMA.SBP2$(BCMCMA.II):GOSUB CCATOB 14160 IF CCATOB.PSTS=1 THEN BCMCMA.PSTS=1:RETURN 14170 BCMCMA.POTPTS=CCATOB.PBIN 14180 RETURN 14190 ' 14200 '*** BCMFMK *** 14210 ' SAVE"BCMFMK.BAS",A 14220 BCMFMK'ファイル名にプリフィックスを付与して返す。 14230 '(PINCHR$,POTCHR$) 14240 BCMFMK.POTCHR$="":IF LEN(BCMFMK.PINCHR$)=0 THEN RETURN 14250 IF CM.PREFIXFG$="N" THEN BCMFMK.POTCHR$=BCMFMK.PINCHR$:RETURN 14260 BCMSPL.PINCHR$=BCMFMK.PINCHR$:GOSUB BCMSPL 14270 IF BCMSPL.POTFIL$="" THEN BCMFMK.POTCHR$=BCMFMK.PINCHR$:RETURN 14280 CFDRCK.PINCHR$=BCMSPL.POTFIL$:GOSUB CFDRCK 14290 IF CFDRCK.PSTS=1 THEN BCMFMK.POTCHR$=BCMFMK.PINCHR$:RETURN'ABS 14300 CCSPBA.PINCHR$=BCMSPL.POTFIL$:GOSUB CCSPBA 14310 IF BCMSPL.POTDSC$<>"" THEN *BCMFMK.SKIP41 14320 BCMFMK.POTCHR$=CM.PREFIX$+"\"+CCSPBA.POTCHR$ 14330 RETURN 14340 *BCMFMK.SKIP41 14350 BCMFMK.POTCHR$=BCMSPL.POTDSC$+":"+CM.PREFIX$+"\"+CCSPBA.POTCHR$ 14360 RETURN 14370 ' 14380 '*** BMDMAN *** 14390 ' SAVE"BMDMAN.BAS",A 14400 BMDMAN'手動リンク処理 14410 '() 14420 FOR BMDMAN.II=1 TO CM.INCCNT STEP 1 14430 GOSUB *BMDMAN.MOPEN 14440 GOSUB *BMDMAN.ADDINC 14450 GOSUB *BMDMAN.MCLOS 14460 *BMDMAN.SKIP0 14470 NEXT BMDMAN.II 14480 RETURN 14490 ' 14500 *BMDMAN.MOPEN 14510 CTMDSP.PINCHR$="モジュール" 14520 CTMDSP.PINCHR$=CTMDSP.PINCHR$+CM.INCLF$(BMDMAN.II) 14530 CTMDSP.PINCHR$=CTMDSP.PINCHR$+"を手動リンクします。" 14540 CTMDSP.PINCOR=7:GOSUB CTMDSP 14550 BMOPEN.PINFIL$=CM.INCLF$(BMDMAN.II):GOSUB BMOPEN 14560 IF BMOPEN.PSTS=1 THEN CM.INCFG(BMDMAN.II)=1:RETURN 14570 CM.IINDIR(BMDMAN.II)=BMOPEN.PDIRNO 14580 RETURN 14590 ' 14600 *BMDMAN.ADDINC'インクルードファイル入力 14610 IF CM.INCFG(BMDMAN.II)=1 THEN RETURN 14620 BMDMAN.ISTLINE=CM.LINENO 14630 IF CM.TITLE$="Y" THEN BMHEAD.PINCHR$=CM.INCLF$(BMDMAN.II):GOSUB BMHEAD 14640 WHILE NOT EOF(3) 14650 LINE INPUT #3,BMDMAN.STEXT$ 14660 GOSUB *BMDMAN.EDIT 14670 BMRPUT.PINCHR$=BMDMAN.OTEXT$:GOSUB BMRPUT 14680 WEND 14690 RETURN 14700 ' 14710 *BMDMAN.EDIT 14720 CCLNNO.PINCHR$=BMDMAN.STEXT$:GOSUB CCLNNO 14730 BMDMAN.IENLINE=CM.LINENO 14740 CCBTOA.PBIN=CM.LINENO:CM.LINENO=CM.LINENO+CM.LSTEP:GOSUB CCBTOA 14750 BMDMAN.OTEXT$=CCBTOA.PASC$+CCLNNO.POTSTX$ 14760 CM.ILINES(BMDMAN.II)=CM.ILINES(BMDMAN.II)+1 14770 CM.IBYTES(BMDMAN.II)=CM.IBYTES(BMDMAN.II)+LEN(BMDMAN.STEXT$) 14780 RETURN 14790 ' 14800 *BMDMAN.MCLOS 14810 IF CM.INCFG(BMDMAN.II)=1 THEN RETURN 14820 CLOSE #3 14830 BMLINE.PINSTL=BMDMAN.ISTLINE:BMLINE.PINENL=BMDMAN.IENLINE 14840 GOSUB BMLINE:CM.INCLNO$(BMDMAN.II)=BMLINE.POTCHR$ 14850 RETURN 14860 ' 14870 '*** BMOPEN *** 14880 ' SAVE"BMOPEN.BAS",A 14890 BMOPEN'モジュール編集ならびにLM作成 14900 '(PINFIL$//PDIRNO,PSTS) PSTS=1 NOT FOUND 14910 ' 14920 FOR BMOPEN.II=1 TO CM.DIRCNT STEP 1 14930 IF CM.DIRCUR=BMOPEN.II THEN *BMOPEN.SKIP02 14940 CHDIR CM.SDIR$(BMOPEN.II) 14950 CM.DIRCUR=BMOPEN.II 14960 *BMOPEN.SKIP02 14970 IF CZSERR.PSTS<>0 THEN GOSUB CZERAB 14980 CCSPSA.PINCHR$=BMOPEN.PINFIL$+".BAS":GOSUB CCSPSA 14990 OPEN CCSPSA.POTCHR$ FOR INPUT AS #3 15000 IF CZSERR.PSTS<>0 AND CZSERR.PSTS<>53 THEN GOSUB CZERAB 15010 IF CZSERR.PSTS<>0 THEN GOTO *BMOPEN.SKIP99 15020 BMOPEN.PDIRNO=BMOPEN.II 15030 BMOPEN.PSTS=0 15040 RETURN 15050 *BMOPEN.SKIP99 15060 CZSERR.PSTS=0 15070 NEXT BMOPEN.II 15080 CTMDSP.PINCHR$="モジュール" 15090 CTMDSP.PINCHR$=CTMDSP.PINCHR$+CM.MNAME$(CM.ENTCUR) 15100 CTMDSP.PINCHR$=CTMDSP.PINCHR$+"はありません。" 15110 CTMDSP.PINCOR=6:GOSUB CTMDSP 15120 BMOPEN.PSTS=1 15130 RETURN 15140 ' 15150 '*** BMDMSW *** 15160 ' SAVE"BMDMSW.BAS",A 15170 BMDMSW'致命的なエラーの処理 15180 '(PNO) 15190 DIM BMDMSW.CM$(30) 15200 BMDMSW.CM$(1)="メインモジュールが存在しません。" 15210 BMDMSW.CM$(2)="登録ライン数が制限を越えました。" 15220 BMDMSW.CM$(3)="リンクモジュール数が制限を越えました。" 15230 BMDMSW.CM$(4)="呼び出しモジュール数が制限を越えました。" 15240 BMDMSW.CM$(5)="" 15250 BMDMSW.CM$(6)="" 15260 BMDMSW.CM$(7)="" 15270 BMDMSW.CM$(8)="" 15280 BMDMSW.CM$(9)="" 15290 ' 15300 ' 15310 CTMDSP.PINCHR$=BMDMSW.CM$(BMDMSW.PNO) 15320 CTMDSP.PINCOR=2:GOSUB CTMDSP 15330 ERASE BMDMSW.CM$ 15340 GOSUB CZABRT 15350 END 15360 ' 15370 '*** BMDSIN *** 15380 ' SAVE"BMDSIN.BAS",A 15390 BMDSIN'入力モジュールの行取得 15400 '(//POTCHR$) 15410 LINE INPUT #3,BMDSIN.POTCHR$ 15420 CM.MLINES(CM.ENTCUR)=CM.MLINES(CM.ENTCUR)+1 15430 BMDSIN.ILEN=LEN(BMDSIN.POTCHR$) 15440 CM.MBYTES(CM.ENTCUR)=CM.MBYTES(CM.ENTCUR)+BMDSIN.ILEN 15450 RETURN 15460 ' 15470 '*** BMRPUT *** 15480 ' SAVE"BMROUT.BAS",A 15490 BMRPUT'LMへのレコード書込 15500 '(PINCHR$) 15510 PRINT #2,BMRPUT.PINCHR$ 15520 CM.LMLINES=CM.LMLINES+1 15530 CM.LMBYTES=CM.LMBYTES+LEN(BMRPUT.PINCHR$) 15540 RETURN 15550 ' 15560 '*** BMHEAD *** 15570 ' SAVE"BMHEAD.BAS",A 15580 BMHEAD'モジュール毎のヘッダ表示 15590 '(PINCHR$) 15600 CCBTOA.PBIN=CM.LINENO:CM.LINENO=CM.LINENO+CM.LSTEP 15610 GOSUB CCBTOA 15620 BMRPUT.PINCHR$=CCBTOA.PASC$+" '":GOSUB BMRPUT 15630 CCBTOA.PBIN=CM.LINENO:CM.LINENO=CM.LINENO+CM.LSTEP 15640 GOSUB CCBTOA:BMHEAD.CWK$=CCBTOA.PASC$+" '" 15650 IF CM.TLTEXT$="" THEN GOSUB *BMHEAD.DEF ELSE GOSUB *BMHEAD.HAND 15660 GOSUB BMRPUT 15670 RETURN 15680 '--- 省略時タイトル 15690 *BMHEAD.DEF 15700 BMRPUT.PINCHR$=BMHEAD.CWK$+AKCNV$("*** ") 15710 BMRPUT.PINCHR$=BMRPUT.PINCHR$+AKCNV$(BMHEAD.PINCHR$)+AKCNV$(" ***") 15720 RETURN 15730 '--- 指定時タイトル 15740 *BMHEAD.HAND 15750 BMRPUT.PINCHR$=BMHEAD.CWK$+CM.TLTEXT$ 15760 RETURN 15770 ' 15780 '*** CCLNNO *** 15790 ' SAVE"CCLNNO.BAS",A 15800 CCLNNO'行番号とソースを分割する 15810 '(PINCHR$//POTLNO$,POTSTX$) 15820 CCLNNO.POTLNO$="" 15830 CCLNNO.POTSTX$="" 15840 CCLNNO.ILEN=LEN(CCLNNO.PINCHR$) 15850 FOR CCLNNO.II=1 TO CCLNNO.ILEN 15860 CCLNNO.CWK$=MID$(CCLNNO.PINCHR$,CCLNNO.II,1) 15870 IF CCLNNO.CWK$<"0" OR CCLNNO.CWK$>"9" THEN *CCLNNO.SKIP1 15880 NEXT CCLNNO.II 15890 *CCLNNO.SKIP1 15900 CCLNNO.POTLNO$=MID$(CCLNNO.PINCHR$,1,CCLNNO.II-1) 15910 CCLNNO.POTSTX$=MID$(CCLNNO.PINCHR$,CCLNNO.II,CCLNNO.ILEN-CCLNNO.II+1) 15920 RETURN 15930 ' 15940 '*** CCELBL *** 15950 ' SAVE"CCELBL.BAS",A 15960 CCELBL'指定文字列より外部ラベルをみつける 15970 '(PINCHR$//POTCHR$,PCNT) 15980 CCELBL.PSTS=0 15990 CCELBL.POTCHR$="" 16000 CCELBL.PCNT=0 16010 CCSPCM.PINCHR$=CCELBL.PINCHR$: GOSUB CCSPCM 16020 CCLNNO.PINCHR$=CCSPCM.POTSTX$: GOSUB CCLNNO 16030 CCSAMP.PINCHR$=CCLNNO.POTSTX$ 16040 CCSAMP.PDEL$=":" 16050 CCSAMP.PINO=1 16060 CCSAMP.PSTS=0 16070 WHILE CCSAMP.PSTS=0 16080 GOSUB CCSAMP 16090 CCELBL.IWK=INSTR(CCSAMP.POTCHR$,"GOSUB") 16100 IF CCELBL.IWK<>0 THEN CCELBL.IWK=CCELBL.IWK+5:GOTO *CCELBL.SKIP2 16110 CCELBL.IWK=INSTR(CCSAMP.POTCHR$,"GO TO") 16120 IF CCELBL.IWK<>0 THEN CCELBL.IWK=CCELBL.IWK+5:GOTO *CCELBL.SKIP2 16130 CCELBL.IWK=INSTR(CCSAMP.POTCHR$,"GOTO") 16140 IF CCELBL.IWK<>0 THEN CCELBL.IWK=CCELBL.IWK+4:GOTO *CCELBL.SKIP2 16150 CCELBL.IWK=INSTR(CCSAMP.POTCHR$,"RESTORE") 16160 IF CCELBL.IWK<>0 THEN CCELBL.IWK=CCELBL.IWK+7:GOTO *CCELBL.SKIP2 16170 GOTO *CCELBL.SKIP1 16180 *CCELBL.SKIP2 16190 ' 16200 CCELBL.ILN=LEN(CCSAMP.POTCHR$)-CCELBL.IWK+1 16210 CCEICK.PINCHR$=MID$(CCSAMP.POTCHR$,CCELBL.IWK,CCELBL.ILN) 16220 GOSUB CCEICK 16230 IF CCEICK.PSTS<>1 THEN *CCELBL.SKIP1 16240 CCELBL.POTCHR$=CCELBL.POTCHR$+CCEICK.POTCHR$ 16250 CCELBL.PCNT=CCELBL.PCNT+1 16260 *CCELBL.SKIP1 16270 CCSAMP.PINO=CCSAMP.PINO+1 16280 WEND 16290 RETURN 16300 ' 16310 '*** CCBTOA *** 16320 ' SAVE"CCBTOA.BAS",A 16330 CCBTOA'バイナリ値を数字文字列に変換する 16340 '(PBIN,PASC$) 16350 CCBTOA.PASC$="" 16360 CCBTOA.CWK$=STR$(CCBTOA.PBIN) 16370 FOR CCBTOA.II=1 TO LEN(CCBTOA.CWK$) STEP 1 16380 IF MID$(CCBTOA.CWK$,CCBTOA.II,1)=" " THEN *CCBTOA.SKIP1 16390 CCBTOA.PASC$=CCBTOA.PASC$+MID$(CCBTOA.CWK$,CCBTOA.II,1) 16400 *CCBTOA.SKIP1 16410 NEXT CCBTOA.II 16420 RETURN 16430 ' 16440 '*** BMLINE *** 16450 ' SAVE"BMLINE.BAS",A 16460 BMLINE'行範囲の作成 16470 '(PINSTL,PINENL//POTCHR$) 16480 CCBTOA.PBIN=BMLINE.PINSTL:GOSUB CCBTOA 16490 CCLEFT.PINCHR$=CCBTOA.PASC$:CCLEFT.PINLEN=5:GOSUB CCLEFT 16500 BMLINE.CWK$=CCLEFT.POTCHR$ 16510 CCBTOA.PBIN=BMLINE.PINENL:GOSUB CCBTOA 16520 CCLEFT.PINCHR$=CCBTOA.PASC$:CCLEFT.PINLEN=5:GOSUB CCLEFT 16530 BMLINE.POTCHR$=BMLINE.CWK$+" - "+CCLEFT.POTCHR$ 16540 RETURN 16550 ' 16560 '*** CIDTTM *** 16570 ' SAVE"CIDTTM.BAS",A 16580 CIDTTM'日付け、時刻、現在秒の取得 16590 '(//PDATE$,PTIME$,PSEC) 16600 CIDTTM.PDATE$=DATE$ 16610 CIDTTM.PTIME$=TIME$ 16620 CIDTTM.CHH$=LEFT$(CIDTTM.PTIME$,2) 16630 CIDTTM.CMM$=MID$(CIDTTM.PTIME$,4,2) 16640 CIDTTM.CSS$=RIGHT$(CIDTTM.PTIME$,2) 16650 CIDTTM.PSEC=0 16660 CCATOB.PASC$=CIDTTM.CHH$: GOSUB CCATOB 16670 CIDTTM.PSEC=CIDTTM.PSEC+CCATOB.PBIN*60*60 16680 CCATOB.PASC$=CIDTTM.CMM$: GOSUB CCATOB 16690 CIDTTM.PSEC=CIDTTM.PSEC+CCATOB.PBIN*60 16700 CCATOB.PASC$=CIDTTM.CSS$: GOSUB CCATOB 16710 CIDTTM.PSEC=CIDTTM.PSEC+CCATOB.PBIN 16720 RETURN 16730 ' 16740 '*** BINFTL *** 16750 ' SAVE"BINFTL.BAS",A 16760 BINFTL'結果出力のヘッダ表示 16770 '(PINCHR$,PINPAG$) 16780 BINFTL.IWK=FRE(2)'強制ガーベッジコレクション 16790 BINFTL.CWK3$=CTMSGW.PINCHR$ 16800 IF BINFTL.PINPAG$<>"Y" THEN *BINFTL.SKIP1 16810 CTMSGW.PINCHR$=CHR$(&HC):GOSUB CTMSGW:CM.PAGEL=0 16820 *BINFTL.SKIP1 16830 CTMSGW.PINCHR$=" ":GOSUB *BINFTL.LOT 16840 BINFTL.CWK$="BASIC-LINKER "+CM.VER$+" " 16850 BINFTL.CWK$=BINFTL.CWK$+AKCNV$("***")+" "+BINFTL.PINCHR$ 16860 BINFTL.CWK$=BINFTL.CWK$+" "+AKCNV$("***") 16870 BINFTL.CWK$=BINFTL.CWK$+SPACE$(79-LEN(BINFTL.CWK$)) 16880 BINFTL.CWK2$=" "+DATE$+" "+TIME$ 16890 BINFTL.IWK=LEN(BINFTL.CWK2$) 16900 BINFTL.IWK2=LEN(BINFTL.CWK$)-BINFTL.IWK+1 16910 MID$(BINFTL.CWK$,BINFTL.IWK2,BINFTL.IWK)=BINFTL.CWK2$ 16920 CTMSGW.PINCHR$=BINFTL.CWK$ 16930 GOSUB *BINFTL.LOT 16940 CTMSGW.PINCHR$=" ":GOSUB *BINFTL.LOT 16950 CTMSGW.PINCHR$=BINFTL.CWK3$ 16960 RETURN 16970 ' 16980 *BINFTL.LOT 16990 GOSUB CTMSGW:CM.PAGEL=CM.PAGEL+1 17000 RETURN 17010 ' 17020 '*** CCZERO *** 17030 ' SAVE"CCZERO.BAS",A 17040 CCZERO'文字列ゼロ付与 17050 '(PINCHR$,PINLEN//POTCHR$) 17060 CCZERO.POTCHR$="" 17070 IF CCZERO.PINLEN=0 THEN RETURN 17080 IF LEN(CCZERO.PINCHR$)=0 THEN RETURN 17090 CCSPBA.PINCHR$=CCZERO.PINCHR$:GOSUB CCSPBA 17100 CCZERO.ILEN=LEN(CCSPBA.POTCHR$):IF CCZERO.ILEN=0 THEN RETURN 17110 CCZERO.POTCHR$=STRING$(CCZERO.PINLEN,"0") 17120 IF CCZERO.ILEN>CCZERO.PINLEN THEN CCZERO.ILEN=CCZERO.PINLEN 17130 CCZERO.CWK$=RIGHT$(CCSPBA.POTCHR$,CCZERO.ILEN) 17140 CCZERO.BWK=CCZERO.PINLEN-CCZERO.ILEN+1 17150 MID$(CCZERO.POTCHR$,CCZERO.BWK,CCZERO.ILEN)=CCZERO.CWK$ 17160 RETURN 17170 ' 17180 '*** CZABRT *** 17190 ' SAVE"CZABRT.BAS",A 17200 CZABRT'プログラムの異常終了 17210 '() 17220 CTMDSP.PINCHR$="このプログラムを異常終了させました。" 17230 CTMDSP.PINCOR=2:GOSUB CTMDSP 17240 CLOSE:COLOR 7 17250 END 17260 ' 17270 '*** CPMDSP *** 17280 ' SAVE"CPMDSP",A 17290 CPMDSP'プリンタにメッセージを出力する 17300 '(PINCHR$,PINCOR) 17310 CPMDSP.CLINE$=CPMDSP.PINCHR$ 17320 IF LEN(CPMDSP.CLINE$)>80 THEN CPMDSP.CLINE$=LEFT$(CPMDSP.CLINE$,80) 17330 LPRINT CPMDSP.CLINE$ 17340 RETURN 17350 ' 17360 '*** CTMPUT *** 17370 ' SAVE"CTMPUT",A 17380 CTMPUT'外部装置へテキストを出力する 17390 '(PINCHR$) 17400 CTMPUT.CLINE$=CTMPUT.PINCHR$ 17410 IF LEN(CTMPUT.CLINE$)>80 THEN CTMPUT.CLINE$=LEFT$(CTMPUT.CLINE$,80) 17420 PRINT #15,CTMPUT.CLINE$ 17430 RETURN 17440 ' 17450 '*** CCSAMP *** 17460 ' SAVE"CCSAMP.BAS",A 17470 CCSAMP'デリミッタ分割された部分列取出 17480 '(PINCHR$,PINO,PDEL$,POTCHR$,PSTS) PSTS = 1:NONE CHR 17490 CCSAMP.PSTS=0 17500 CCSAMP.POTCHR$="" 17510 CCSAMP.CLEN=LEN(CCSAMP.PINCHR$) 17520 CCSAMP.IIST=1 17530 CCSAMP.IEN=CCSAMP.CLEN 17540 CCDELM.PINCHR$=CCSAMP.PINCHR$ 17550 CCDELM.PDEL$=CCSAMP.PDEL$ 17560 FOR CCSAMP.II=1 TO CCSAMP.PINO STEP 1 17570 CCDELM.PINO=CCSAMP.II:GOSUB CCDELM 17580 CCSAMP.IEN=CCDELM.PIPOS-1 17590 IF CCDELM.PSTS=1 THEN CCSAMP.IEN=CCSAMP.CLEN:CCSAMP.PSTS=1 17600 CCSAMP.IST=CCSAMP.IIST 17610 CCSAMP.IIST=CCDELM.PIPOS+1 17620 NEXT CCSAMP.II 17630 *CCSAMP.SKIP1 17640 IF CCSAMP.IST>CCSAMP.IEN THEN RETURN 17650 CCSAMP.IWK=CCSAMP.IEN-CCSAMP.IST+1 17660 CCSAMP.POTCHR$=MID$(CCSAMP.PINCHR$,CCSAMP.IST,CCSAMP.IWK) 17670 RETURN 17680 ' 17690 '*** BCMSPL *** 17700 ' SAVE"BCMSPL.BAS",A 17710 BCMSPL'コマンドパラメータの分割 17720 '(PINCHR$//POTDSC$,POTFIL$,POTSBN,POTSBP$(9),PSTS) 17730 'PSTS=1:ILLEGAL PARAMETER 17740 BCMSPL.POTDSC$="":BCMSPL.POTFIL$="":BCMSPL.POTSBN=0 17750 FOR BCMSPL.I=1 TO 9:BCMSPL.POTSBP$(BCMSPL.I)="":NEXT BCMSPL.I 17760 BCMSPL.PSTS=0 17770 BCMSPL.CWK$=BCMSPL.PINCHR$ 17780 BCMSPL.ILEN=LEN(BCMSPL.CWK$) 17790 '---ファイルディスクリプタの抽出 17800 CCSAMP.PINCHR$=BCMSPL.CWK$:CCSAMP.PINO=1:CCSAMP.PDEL$=":":GOSUB CCSAMP 17810 IF CCSAMP.PSTS<>0 THEN *BCMSPL.SKIP1 17820 CCSPBA.PINCHR$=CCSAMP.POTCHR$:GOSUB CCSPBA 17830 BCMSPL.POTDSC$=CCSPBA.POTCHR$ 17840 BCMSPL.IP=INSTR(BCMSPL.CWK$,":") 17850 IF BCMSPL.IP=0 THEN BCMSPL.PSTS=1:RETURN 17860 IF BCMSPL.IP=BCMSPL.ILEN THEN RETURN 17870 BCMSPL.CWK$=MID$(BCMSPL.CWK$,BCMSPL.IP+1,BCMSPL.ILEN-BCMSPL.IP) 17880 *BCMSPL.SKIP1 17890 '---ファイル名の抽出 17900 BCMSPL.ILEN=LEN(BCMSPL.CWK$) 17910 CCSAMP.PINCHR$=BCMSPL.CWK$:CCSAMP.PINO=1:CCSAMP.PDEL$="/":GOSUB CCSAMP 17920 IF CCSAMP.PSTS=0 THEN *BCMSPL.SKIP2 17930 CCSPBA.PINCHR$=CCSAMP.POTCHR$:GOSUB CCSPBA 17940 BCMSPL.POTFIL$=CCSPBA.POTCHR$ 17950 RETURN 17960 *BCMSPL.SKIP2 17970 CCSPBA.PINCHR$=CCSAMP.POTCHR$:GOSUB CCSPBA 17980 BCMSPL.POTFIL$=CCSPBA.POTCHR$ 17990 BCMSPL.IP=INSTR(BCMSPL.CWK$,"/") 18000 IF BCMSPL.IP=0 THEN BCMSPL.PSTS=1:RETURN 18010 IF BCMSPL.IP=BCMSPL.ILEN THEN BCMSPL.POTSBN=1:RETURN 18020 BCMSPL.CWK$=MID$(BCMSPL.CWK$,BCMSPL.IP+1,BCMSPL.ILEN-BCMSPL.IP) 18030 '---サブパラメータの抽出 18040 BCMSPL.ILEN=LEN(BCMSPL.CWK$) 18050 CCSAMP.PINO=0:CCSAMP.PDEL$="/":CCSAMP.PINCHR$=BCMSPL.CWK$:CCSAMP.PSTS=0 18060 WHILE CCSAMP.PSTS=0 18070 CCSAMP.PINO=CCSAMP.PINO+1:IF CCSAMP.PINO>9 THEN BCMSPL.PSTS=1:RETURN 18080 GOSUB CCSAMP 18090 BCMSPL.POTSBP$(CCSAMP.PINO)=CCSAMP.POTCHR$ 18100 BCMSPL.POTSBN=CCSAMP.PINO 18110 WEND 18120 RETURN 18130 ' 18140 '*** CCSPSA *** 18150 ' SAVE"CCSPSA.BAS",A 18160 CCSPSA'文字列ブランクサプレス (無条件サプレス) 18170 '(PINCHR$,POTCHR$) 18180 CCSPSA.POTCHR$="" 18190 IF LEN(CCSPSA.PINCHR$)=0 THEN RETURN 18200 FOR CCSPSA.II=1 TO LEN(CCSPSA.PINCHR$) STEP 1 18210 IF MID$(CCSPSA.PINCHR$,CCSPSA.II,1)=" " THEN *CCSPSA.SKIP1 18220 CCSPSA.POTCHR$=CCSPSA.POTCHR$+MID$(CCSPSA.PINCHR$,CCSPSA.II,1) 18230 *CCSPSA.SKIP1 18240 NEXT CCSPSA.II 18250 RETURN 18260 ' 18270 '*** CCATOB *** 18280 ' SAVE"CCATOB.BAS",A 18290 CCATOB'ASCIIをバイナリへ変換する 18300 '(PASC$,PBIN,PSTS) PSTS=1:ILLEGAL VALUE 18310 CCATOB.PSTS=0 18320 CCATOB.PBIN=0 18330 CCNCHK.PINCHR$=CCATOB.PASC$: GOSUB CCNCHK 18340 IF CCNCHK.PSTS<>0 THEN CCATOB.PSTS=1:RETURN 18350 CCATOB.PBIN=VAL(CCATOB.PASC$) 18360 RETURN 18370 ' 18380 '*** CFDRCK *** 18390 ' SAVE"CFDRCK.BAS",A 18400 CFDRCK'指定したファイルが絶対指定か相対指定かを判定する。 18410 '(PINCHR$,PSTS) PSTS=1:ABSOLUTE =0:RELATIVE 18420 CFDRCK.PSTS=0 18430 CCSPBA.PINCHR$=CFDRCK.PINCHR$:GOSUB CCSPBA 18440 IF LEN(CCSPBA.POTCHR$)=0 THEN RETURN 18450 IF LEFT$(CCSPBA.POTCHR$,1)="\" THEN CFDRCK.PSTS=1 18460 RETURN 18470 ' 18480 '*** CCSPCM *** 18490 ' SAVE"CCSPCM.BAS",A 18500 CCSPCM'本文とコメントを分割する 18510 '(PINCHR$,POTSTX$,POTCMT$) 18520 CCSPCM.POTSTX$="" 18530 CCSPCM.POTCMT$="" 18540 CCSPCM.IWC=0 18550 CCSPCM.CWC$=CHR$(&H22) 18560 FOR CCSPCM.II=1 TO LEN(CCSPCM.PINCHR$) STEP 1 18570 CCSPCM.IWK$=MID$(CCSPCM.PINCHR$,CCSPCM.II,1) 18580 IF CCSPCM.IWK$=CCSPCM.CWC$ THEN CCSPCM.IWC=CCSPCM.IWC XOR 1 18590 IF CCSPCM.IWK$<>"'" THEN *CCSPCM.SKIP1 18600 IF CCSPCM.IWC=1 THEN *CCSPCM.SKIP1 18610 CCSPCM.ISS=1 18620 CCSPCM.ISE=CCSPCM.II-1 18630 CCSPCM.ICS=CCSPCM.II+1 18640 CCSPCM.ICE=LEN(CCSPCM.PINCHR$) 18650 IF CCSPCM.ISS>CCSPCM.ISE THEN *CCSPCM.SKIP01 18660 CCSPCM.POTSTX$=MID$(CCSPCM.PINCHR$,CCSPCM.ISS,CCSPCM.ISE) 18670 *CCSPCM.SKIP01 18680 IF CCSPCM.ICS>CCSPCM.ICE THEN *CCSPCM.SKIP02 18690 CCSPCM.IWK=CCSPCM.ICE-CCSPCM.ICS+1 18700 CCSPCM.POTCMT$=MID$(CCSPCM.PINCHR$,CCSPCM.ICS,CCSPCM.IWK) 18710 *CCSPCM.SKIP02 18720 RETURN 18730 *CCSPCM.SKIP1 18740 NEXT CCSPCM.II 18750 CCSPCM.POTSTX$=CCSPCM.PINCHR$ 18760 RETURN 18770 ' 18780 '*** CCEICK *** 18790 ' SAVE"CCEICK.BAS",A 18800 CCEICK'外部ラベルと内部ラベルを判別する 18810 '(PINCHR$,POTCHR$,PSTS) PSTS=0:INTERNAL 1:EXTERNAL 2:ILLEGAL 18820 CCEICK.PSTS=0 18830 CCEICK.POTCHR$="" 18840 CCSPBA.PINCHR$=CCEICK.PINCHR$: GOSUB CCSPBA 18850 CCEICK.ILEN=LEN(CCSPBA.POTCHR$) 18860 IF CCEICK.ILEN=0 THEN CCEICK.PSTS=2: RETURN 18870 IF LEFT$(CCSPBA.POTCHR$,1)="*" THEN *CCEICK.SKIP1 18880 CCLCHK.PINCHR$=CCSPBA.POTCHR$: GOSUB CCLCHK 18890 IF CCLCHK.PSTS=1 THEN CCEICK.PSTS=2: RETURN 18900 CCEICK.POTCHR$=CCSPBA.POTCHR$ 18910 IF CCEICK.ILEN=6 THEN *CCEICK.SKIP01 18920 CCEICK.POTCHR$=CCSPBA.POTCHR$+SPACE$(6-CCEICK.ILEN) 18930 *CCEICK.SKIP01 18940 CCEICK.PSTS=1: RETURN 18950 *CCEICK.SKIP1 18960 IF CCEICK.ILEN<=1 THEN CCEICK.PSTS=2: RETURN 18970 CCEICK.POTCHR$=MID$(CCSPBA.POTCHR$,2,CCEICK.ILEN-1) 18980 CCEICK.PSTS=0 18990 RETURN 19000 ' 19010 '*** CCDELM *** 19020 ' SAVE"CCDELM.BAS",A 19030 CCDELM'デリミッタ分割 19040 '(PINCHR$,PINO,PDEL$,PIPOS,PSTS) 19050 CCDELM.PSTS=0 19060 CCDELM.II=1 19070 FOR CCDELM.JJ=1 TO CCDELM.PINO STEP 1 19080 CCDELM.PIPOS=INSTR(CCDELM.II,CCDELM.PINCHR$,CCDELM.PDEL$) 19090 IF CCDELM.PIPOS=0 THEN CCDELM.PSTS=1:RETURN 19100 CCDELM.II=CCDELM.PIPOS+1 19110 NEXT CCDELM.JJ 19120 RETURN 19130 ' 19140 '*** CCNCHK *** 19150 ' SAVE"CCNCHK.BAS",A 19160 CCNCHK'文字列が数字かチェックする。  19170 '(PINCHR$,PSTS) PSTS=1:ILLEGAL VALUE 19180 CCNCHK.PSTS=0 19190 CCSPBA.PINCHR$=CCNCHK.PINCHR$: GOSUB CCSPBA 19200 CCNCHK.ILEN=LEN(CCSPBA.POTCHR$) 19210 IF CCNCHK.ILEN=0 THEN CCNCHK.PSTS=1: RETURN 19220 FOR CCNCHK.II=1 TO CCNCHK.ILEN STEP 1 19230 CCNCHK.CWK$=MID$(CCSPBA.POTCHR$,CCNCHK.II,1) 19240 IF CCNCHK.CWK$<"0" THEN CCNCHK.PSTS=1: RETURN 19250 IF CCNCHK.CWK$>"9" THEN CCNCHK.PSTS=1: RETURN 19260 NEXT CCNCHK.II 19270 RETURN