見出し画像

BASICライブラリ化ユーティリティ。かずひと君のプログラミング活動

十進BASICで書かれています
スモールBASIC以前からあるJIS基準のものです
コボルでかかれています
乗り換えが億劫なのと特に、現在不満もないので
使い切った後C言語・スモールBASIC・・とか楽しむつもりです
※基本的にBASICにはCのようにライブラリ化機能がありません
それを仮想的に行えるように作りました

命令として
①差し込み命令  !' <INCLUDE> ファイル名
②カットスタート !' <CUTSTART>
③カットエンド       !' <CUTEND>

用意するもの
①指示ファイル/ユーティリティにかける
②差し込みファイル-サブルーチンとして
 まとめたもの

※差し込み命令があると前後にカット・カットエンドが
 が書き込まれます
 実は以前に挿入されたものは削除されあらたに
 読み込まれます・・・

今から初められる方はスモールBASICがよいかもでね


REM
REM 和仁ファイル結合 十進対応
REM ver 0.975
REM 2021.01.30 
REM ソースカットデバッグ
REM
OPTION BASE 0
DIM fn(3)
DIM pr(2)
DIM sorce$(10000)
DIM work$(10000)
DIM isorce$(1000)
dim cut$(2)
DIM include$(3)
LET cut$(1) ="!' <CUTSTART>"
LET cut$(2) ="!' <CUTEND>"
LET include$(1)="!' <INCLUDE> "

LET db=0
LET ds=1


GOTO 10000

LET aa$=UCASE$("rem ")
LET w$="!' <include> sex"
PRINT include_c$(w$,include$)
stop

10000

LET void=main(a)
FUNCTION title(void)
PRINT "REM ***************************************************"
PRINT "REM * *"
PRINT "REM * かずひとベーシックライブ化ユーティリティ *"
PRINT "REM * 暫定版 10進ベーシック *"
PRINT "REM * *"
PRINT "REM ***************************************************"
END FUNCTION



FUNCTION main(a)
LET work=title(void)
LET void=filename(a)
LET se=main_file_read(c) !' kourituka option

CALL sorcecut(sorce$,work$,cut$,se)
!' CALL hairetu_p(work$,se)

LET c00=1
FOR im=1 TO se
LET a0$=work$(im)
LET b$=include_c$(a0$,include$)

IF b$<>"" THEN


PRINT include$(1)&b$


OPEN #3:NAME path$&b$&ext$ ,ACCESS INPUT

!' LET b$=""

PRINT cut$(1)

LET c02=ifread(isorce$)!'*atode
!' CALL sorcecut(isorce$,work$,cut$,c02)
LET c02=c02-3
!' CALL hairetu_p(isorce$,c02)

PRINT cut$(2)

END IF
IF b$="" THEN
PRINT a0$

END IF


NEXT im

END FUNCTION

FUNCTION filename(a)
FILE GETNAME s$
FILE SPLITNAME (s$) path$, name$,ext$
OPEN #1:NAME path$&name$&ext$ ,ACCESS INPUT
rem OPEN #2:NAME path$&name$&"-obj"&ext$
rem ERASE #2
END FUNCTION



FUNCTION main_file_read(c)

LET c=1
DO
LINE INPUT #1,IF MISSING THEN EXIT DO:a$
LET sorce$(c)=a$
!' PRINT a$
LET c=c+1
LOOP

CLOSE #1
LET main_file_read=c-1
REM PRINT "main read kokomade ***"
END FUNCTION



FUNCTION ifread(fn$())

LET ic=1
DO
LINE INPUT #3,IF MISSING THEN EXIT DO:a$

LET fn$(ic)=a$
PRINT a$
LET ic=ic+1
LOOP
CLOSE #3
LET ifread=ic-1
END FUNCTION



END



EXTERNAL SUB hairetu_p(hairetu$(),ct)


FOR i=1 TO ct

PRINT hairetu$(i)

NEXT i


end sub



EXTERNAL FUNCTION include_c$(a$,include$())


LET work_s$=UCASE$(a$)
LET fn$=""
LET l=LEN(include$(1))
IF left$(work_s$,l)=include$(1) THEN
LET fn$=mid$(a$,l+1,LEN(a$))
LET f=1
IF fn$="" THEN STOP
END IF



LET include_c$=fn$

END FUNCTION






EXTERNAL sub sorcecut(so$(),work$(),cut$(),c)
!'*****基本カット メインでも差し込みでも使う
!'so$ 文字配列
!'work$ 作業配列
!'cut$(1): 排除スタート命令
!'cut$(2): 排除ストップ命令
!'cr 配列数:変化後の配列数も返す
!'
LET se=c
LET c=1
LET c2=1
LET f=0
FOR i=1 TO se
LET s$=so$(i)
LET ww$=UCASE$(s$)
LET f1=POS(ww$,cut$(1))
LET f2=POS(ww$,cut$(2))
IF f1=1 THEN

LET f=1
LET f2=0

end if
IF f2=1 THEN
LET f=0
LET f1=0

LET f12=0


end if


IF f=0 and f2=0 THEN
LET work$(c)=s$
LET c=c+1


END if




NEXT i

LET c=c-1
END sub



EXTERNAL SUB hcopy(so$(),work$(),c)

FOR i=1 TO c
LET s$=work$(i)
LET so$(i)=s$
NEXT i

END SUB



EXTERNAL SUB endc(s$,ecf)
IF UCASE$(LTRIM$(RTRIM$(s$)))="END" THEN
LET ecf=1
ELSE
LET ecf=0
END IF
END SUB



この記事が参加している募集

おうち時間を工夫で楽しく

この記事が気に入ったらサポートをしてみませんか?