1000 ' ****************************************** 1010 ' *** N88互換BASIC for Windows95 *** 1020 ' *** 入力サブルーチン *** 1030 ' *** "NKINPUT.BAS" *** 1040 ' *** 2004.01.17 M.YAMASAKI *** 1050 ' ****************************************** 1060 ' 1070 DIM NII$(21),NIP(21) 1080 WIDTH 80,20: CONSOLE 0,20 1090 ' 1095 LOCATE 0,1 : PRINT "既に入力済みの文字変数を、一部訂正するための「入力サブルーチン」。" 1097 PRINT "制作者 M.YAMASAKIさんのご厚意により公開。(2004/ 1/20) " : PRINT "カーソル位置を適当に動かし、文字入力をします。" 1100 INP1$="漢字ABCDEF" 1110 INP2$="12345漢字" 1120 LOCATE 20,5 : PRINT "入力項目1 : ";INP1$;" " 1130 LOCATE 20,10 : PRINT "入力項目2 : ";INP2$;" " 1140 ' 1150 '入力項目1 上書モード 1160 NIX=35 '位置座標X 1170 NIY=5 '位置座標Y 1180 NI$=INP1$ '入力する文字列代入 1190 NIM=0 '入力値 0=上書モード 1=挿入モード 1200 GOSUB *NINPUT '入力サブルーチン コール 1210 INP1$=NI$ '入力した文字列代入 1220 LOCATE 35,5 : PRINT INP1$;" " 1230 ' 1240 '入力項目2 挿入モード 1250 NIX=35 : NIY=10 : NI$=INP2$ : NIM=1 : GOSUB *NINPUT : INP2$=NI$ 1260 LOCATE 35,10 : PRINT INP2$;" " 1270 IF NIM=4 THEN 1150 '返り値 4=上入力項目へ 5=下入力項目へ 1280 ' 1290 print :print " INP1$は ";: color 6: print INP1$ : color 7 1295 print " INP2$は ";: color 6: print INP2$ ;: color 7: print " に、 変更されました。 END" 1300 END 1310 ' 8000 '******** N88BASIC風入力サブルーチン ******** 8010 '* N88互換BASIC for Windows95 用 8020 '* 注記 8030 '*   1070 DIM NII$(21),NIP(21) 配列添字は最大入力文字数+1 8040 '*   8300 NIMAX=20 入力文字数の最大値 8050 '*   8330 NIXK=8 グラフィックのX座標係数 WIDTHによる 8060 '*   8340 NIYK=20 グラフィックのY座標係数 WIDTHによる 8070 '*   8350 NITM=300 カーソル点滅サイクル   PC能力による 8080 '* サブルーチンコール 8090 '*   NIX=35 : NIY=10 : NI$=INP2$ : NIM=0 : GOSUB *NINPUT 8100 '*   位置座標X,Y  入力する  モード 本サブルーチン 8110 '*   LOCATEのX,Y   文字列を  0=上書 8120 '*   と同じ値     代入    1=挿入 8130 '* 戻り値 8140 '*   NI$:入力した文字列 8150 '*   NIE:入力した文字数 8160 '*   NIM:4=上カーソルで終了 5=下カーソルで終了 8170 '* 制御キー 8180 '*   BackSpace :カーソル左の文字を削除 8190 '*   Enter   :入力終了 8200 '*   Insert   :上書き(カーソル|)と挿入(同i)のモード切替 8210 '*   右カーソル:カーソル右移動 右端で停止 8220 '*   左カーソル:カーソル左移動 左端で停止 8230 '*   上カーソル:入力終了 NIM=4 8240 '*   下カーソル:入力終了 NIM=5 8250 '*   Delete  :カーソル位置の文字を削除 8260 '******** 2004/01/07   M.YAMASAKI ******** 8270 ' 8280 *NINPUT 8290 '* 初期設定 8300 NIMAX=20 '文字数の最大値 8310 NIE=KLEN(NI$) '文字数の初期値 8320 NIX0=NIX 'カラム座標の初期値 8330 NIXK=8 'グラフィックのX座標係数 8340 NIYK=20 'グラフィックのY座標係数 8350 NITM=300 'カーソル点滅サイクル 8360 NIT=1 'カーソル点滅カウンタ 8370 FOR NI=1 to 20 8380 IF NI>NIE THEN NII$(NI)="" ELSE NII$(NI)=KMID$(NI$,NI,1) '各カラム文字配列 8390 NEXT NI 8400 GOSUB *NIP 'カラムの座標計算と表示 8410 NI=1 'カラム追番 8420 '* カーソルと文字表示 8430 *NI1 8440 NIX=NIP(NI) 8450 IF NIT=1 THEN LINE(NIX*NIXK,NIY*NIYK+2)-(NIX*NIXK,(NIY+1)*NIYK-2),7 'カーソル表示 8460 IF NIT=1 AND NIM=1 THEN LINE(NIX*NIXK,NIY*NIYK+4)-(NIX*NIXK,NIY*NIYK+7),0 '挿入モードカーソル表示 8470 IF NIT=NITM/2 THEN LINE(NIX*NIXK,NIY*NIYK+2)-(NIX*NIXK,(NIY+1)*NIYK-2),0 'カーソル非表示 8480 IF NIT=NITM/2 THEN LOCATE NIX,NIY : PRINT NII$(NI) '文字表示 8490 '* キー入力 8500 NIK$=INKEY$ 'キー入力バッファ 8510 NIT=NIT+1 : IF NIT=NITM THEN NIT=1 '表示カウンタ加算と初期化 8520 IF NIK$="" THEN *NI1 '未入力なら表示へ 8530 NIT=1 8540 LINE (NIX*NIXK,NIY*NIYK+2)-(NIX*NIXK,(NIY+1)*NIYK-2),0 'カーソル非表示 8550 LOCATE NIX,NIY : PRINT NII$(NI) '文字表示 8560 '* 制御キー 8570 IF ASC(NIK$)=8 AND NI>1 THEN NI=NI-1 : FOR I=NI TO NIE :NII$(I)=NII$(I+1) : NEXT : NIE=NIE-1 : GOSUB *NIP 'BackSpace 削除 8580 IF ASC(NIK$)=13 THEN *NI2 'Enter    入力終了 8590 IF ASC(NIK$)=18 THEN IF NIM=0 THEN NIM=1 ELSE NIM=0 'Insert    上書/挿入切替 8600 IF ASC(NIK$)=28 AND NI=1 THEN NI=NI-1 '左カーソル 左移動 8620 IF ASC(NIK$)=30 THEN NIM=4 : GOTO *NI2 '上カーソル 入力終了 8630 IF ASC(NIK$)=31 THEN NIM=5 : GOTO *NI2 '下カーソル 入力終了 8640 IF ASC(NIK$)=127 AND NI=0 AND ASC(NIK$)<32) OR (ASC(NIK$)>126 AND ASC(NIK$)<256) THEN *NI1 8660 '* 文字入力 8670 IF NIM=0 AND NI=NIE+1 THEN IF NIE=NIMAX THEN *NI1 ELSE NIE=NIE+1 8680 IF NIM=0 THEN NII$(NI)=NIK$ : NI=NI+1 : GOSUB *NIP '文字上書入力 8690 IF NIM=1 AND NIE=NIMAX THEN *NI1 8700 IF NIM=1 THEN FOR I=NIE TO NI STEP -1 : NII$(I+1)=NII$(I) : NEXT : NII$(NI)=NIK$ : NI=NI+1 : NIE=NIE+1 : GOSUB *NIP '文字挿入入力 8710 GOTO *NI1 8720 ' 8730 '* カラム文字の座標計算と表示サブルーチン 8740 *NIP 8750 FOR I=1 to NIE 8760 IF I=1 THEN NIP(I)=NIX0 : NIX=NIX0 8770 IF ASC(NII$(I))>0 AND ASC(NII$(I))<256 THEN NIR=1 ELSE NIR=2 8780 NIX=NIX+NIR : NIP(I+1)=NIX 8790 LOCATE NIP(I),NIY : PRINT NII$(I); 8800 NEXT I 8810 LOCATE NIP(NIE+1),NIY : PRINT " " 8820 RETURN 8830 ' 8840 '* 入力終了処理 8850 *NI2 8860 NI$="" 8870 FOR I=1 TO NIE 8880 NI$=NI$+NII$(I) '入力した各カラム文字を文字列に配置 8890 NEXT I 8900 RETURN