READ文 DATA文 RESTORE文はどのように
READ文 DATA文 RESTORE文はどのように
昔のBASICやAB2まではサポートされていた
READ文 DATA文 RESTORE文は
AB4~では、どのように移植すれば良いのでしょうか?
DATA文が数百行ほどあります。
昔のBASICから頭が切り換えられないので、
どこから手をつけていいのかさっぱりです。
よろしくお願いします。
READ文 DATA文 RESTORE文は
AB4~では、どのように移植すれば良いのでしょうか?
DATA文が数百行ほどあります。
昔のBASICから頭が切り換えられないので、
どこから手をつけていいのかさっぱりです。
よろしくお願いします。
お返事ありがとうございます。
実は、今回の質問の書き込みをした後、思い出したのですが、ずいぶん昔に同じようなことを質問したことがありました。でも何人かの方が教えてくださったことは、遙かに自分の知識とやる気を超えたモノだったので、ついて行けず、あえなく断念しました。そのとき教えてくださった方には、ごめんなさい。
そもそも、今作っているプログラムは、一年生の算数の足し算や引き算のソフトで、どの先生でも、どの児童でも、どの家庭でも簡単に使えるようにしたいという超基本コンセプトがあります(←生意気ですが)。
この超基本コンセプトが自分になかった時代=今ほどパソコンが学校現場や家庭の中に入ってなかった時代には、そのDATA文のデータをシーケンシャルファイルとして、別においてあったのです。まだMS-DOSのN88-BASICのころです。
つまり、自分しかパソコンをもっていなくて、自分しかそのソフトを使えない環境だったので、そのようなプログラムで良かったのです。ところがそのままのプログラムでは、ドライブ番号やフォルダの変更に対応できなかったので(←これも私の未熟なところ)、他人への配布はあきらめていました。そのうちWindowsで動くBASICの存在(←ABのこと)を知りました。
しかし、あるとき、データを本体プログラムに内蔵したら、「~~.EXE」のみになって配布が可能になると、ひらめいたのです(←プログラミングの醍醐味です)。もちろん動作速度も改善されるし・・・。それがREAD文DATA文RESTORE文の組み合わせでした。
と、かなり長くなってしまいましたが、数百行のデータは何とかプログラム本体に起きたいのです。AB2でプログラミングを続けるなら、問題ないといえば問題ないのですが・・・。
ちなみにそのDATA文は、10パターンあり、1パターンが数十行あるで、全部で数百行となります。各DATA文1行は4次元配列となっています。
よろしくお願いします。
そもそも、今作っているプログラムは、一年生の算数の足し算や引き算のソフトで、どの先生でも、どの児童でも、どの家庭でも簡単に使えるようにしたいという超基本コンセプトがあります(←生意気ですが)。
この超基本コンセプトが自分になかった時代=今ほどパソコンが学校現場や家庭の中に入ってなかった時代には、そのDATA文のデータをシーケンシャルファイルとして、別においてあったのです。まだMS-DOSのN88-BASICのころです。
つまり、自分しかパソコンをもっていなくて、自分しかそのソフトを使えない環境だったので、そのようなプログラムで良かったのです。ところがそのままのプログラムでは、ドライブ番号やフォルダの変更に対応できなかったので(←これも私の未熟なところ)、他人への配布はあきらめていました。そのうちWindowsで動くBASICの存在(←ABのこと)を知りました。
しかし、あるとき、データを本体プログラムに内蔵したら、「~~.EXE」のみになって配布が可能になると、ひらめいたのです(←プログラミングの醍醐味です)。もちろん動作速度も改善されるし・・・。それがREAD文DATA文RESTORE文の組み合わせでした。
と、かなり長くなってしまいましたが、数百行のデータは何とかプログラム本体に起きたいのです。AB2でプログラミングを続けるなら、問題ないといえば問題ないのですが・・・。
ちなみにそのDATA文は、10パターンあり、1パターンが数十行あるで、全部で数百行となります。各DATA文1行は4次元配列となっています。
よろしくお願いします。
具体的にはどのようにこれらの命令を使っていらっしゃるのでしょうか。
各命令の使用部分をそれぞれ一部だけでも抜粋していただけたら移植案が出せるかと思いますので。
各命令の使用部分をそれぞれ一部だけでも抜粋していただけたら移植案が出せるかと思いますので。
[hira]
http://hira.hopto.org/
http://hira.hopto.org/
配列の初期化と言うのは、例えば次のようなコードです。
つまり、最初に代入しておきましょう という考えです。
コード: 全て選択
Dim prime[9]=[2,3,5,7,11,13,17,19,23,29] As Long
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
これがプログラムの一部です。
皆さん、お返事ありがとうございます。
これがプログラムの一部を抜粋したモノです。
ABの2.56で動作しています。
実行すると、画面に赤い色で「1」が大きく表示されます。
3000行にRESTORE文があります。
3100行にREAD文があります。
4500行以降がDATA文です。(←こんなのが10パターンあります。)
大文字のところは、昔から全くいじっていないところです。
とってもわかりづらいですが、よろしくお願いします。
これがプログラムの一部を抜粋したモノです。
ABの2.56で動作しています。
実行すると、画面に赤い色で「1」が大きく表示されます。
3000行にRESTORE文があります。
3100行にREAD文があります。
4500行以降がDATA文です。(←こんなのが10パターンあります。)
大文字のところは、昔から全くいじっていないところです。
とってもわかりづらいですが、よろしくお願いします。
コード: 全て選択
1000 '初期設定値
1010 CCC1=2
1020 n1=1
1030 n1$=Str$(n1)
1040 TASUHIKU=0 :dxi=1.5:dx=50 :dxmoji=80 :xp0=1 :dyi=1.5:dy=100 :dymoji=0
1050 GOSUB *HYOUJI1
1820 END
2180 *HYOUJI1'------------------------------------------------------入力された文字を分析します。
2190 DTDT$=""
2200 CCC0=CCC1
2210 NUMn1=LEN(n1$)-1 'n1の桁数
2220 FOR I=1 TO NUMn1
2230 NUMn1$(I)="S"+Mid$(n1$,I+1,1)
2240 DTDT$=DTDT$+NUMn1$(I)
2250 NEXT
2260 GOSUB *MOJIWOKAKU
2270 RETURN
2280 '
2650 *MOJIWOKAKU'-----------------------------------------------------文字を書きます
2660 NDTDT=LEN(DTDT$)
2670 DTN=5000
2700 DTN=NUM-1
2770 '////////////////////////////////////////////////////////
2850 FOR ii=1 TO NDTDT STEP 2
2860 XX=ii :DT$=Mid$(DTDT$,ii,2) :GOSUB *DATINP :GOSUB *W
2880 NEXT
2890 '////////////////////////////////////////////////////////
2900 RETURN
2910 '
2920 '
3050 *DATINP'---------------------------------------------DATA行の読み込み
2950 DTN=0
2960 DATFROM$=DT$
3000 if DATFROM$="S1" then Restore *s1 '数字の「1」を読み込む
' if DATFROM$="S2" then Restore *s2 '数字の「2」を読み込む
' if DATFROM$="S3" then Restore *s3 '数字の「3」を読み込む
' if DATFROM$="S4" then Restore *s4 '数字の「4」を読み込む
' if DATFROM$="S5" then Restore *s5 '数字の「5」を読み込む
' if DATFROM$="S6" then Restore *s6 '数字の「6」を読み込む
' if DATFROM$="S7" then Restore *s7 '数字の「7」を読み込む
' if DATFROM$="S8" then Restore *s8 '数字の「8」を読み込む
' if DATFROM$="S9" then Restore *s9 '数字の「9」を読み込む
' if DATFROM$="S0" then Restore *s0 '数字の「0」を読み込む
3070 *kokoko
3080 for JUJU=1 to 500
3090 DTN=DTN+1
3100 Read nPEN(DTN),ccc(DTN),xp(DTN),yp(DTN)
3180 if xp(DTN)=0 and yp(DTN)=0 then *edatinp
3190 xp(DTN)=xp(DTN)*dxi+dx+(ii-1)*dxmoji
3200 yp(DTN)=yp(DTN)*dyi+dy+(ii-1)*dymoji
3210 CCC(DTN)=CCC0
3230 next
3240 *edatinp
3250 return
3230 '
3240 '
3250 *W'////////////////////////////////////////////////////
3260 FOR I=1 TO DTN-1
3270 GOSUB *PENPEN
3290 NEXT
3300 RETURN
3310 '
3320 '
3330 *PENPEN'///////////////////////////////////////////////////
3340 On nPEN(I) GOTO *P0,*P1,*P2,*P3,*P4,*P5,*P6,*P7,*P8,*P9
3350 *P0 :CIRCLE(xp(I),yp(I)), 1*xp0,CCC(I),,,,F :GOTO *EPEN
3360 *P1 :CIRCLE(xp(I),yp(I)), 2*xp0,CCC(I),,,,F :GOTO *EPEN
3370 *P2 :CIRCLE(xp(I),yp(I)), 4*xp0,CCC(I),,,,F :GOTO *EPEN
3380 *P3 :CIRCLE(xp(I),yp(I)), 6*xp0,CCC(I),,,,F :GOTO *EPEN
3390 *P4 :CIRCLE(xp(I),yp(I)), 8*xp0,CCC(I),,,,F :GOTO *EPEN
3400 *P5 :CIRCLE(xp(I),yp(I)),10*xp0,CCC(I),,,,F :GOTO *EPEN
3410 *P6 :CIRCLE(xp(I),yp(I)), 2*xp0,CCC(I) :GOTO *EPEN
3420 *P7 :CIRCLE(xp(I),yp(I)), 4*xp0,CCC(I) :GOTO *EPEN
3430 *P8 :CIRCLE(xp(I),yp(I)), 6*xp0,CCC(I) :GOTO *EPEN
3440 *P9 :CIRCLE(xp(I),yp(I)), 8*xp0,CCC(I) :GOTO *EPEN
3450 *EPEN
3460 RETURN
3470 '
3480 '
4480 *s1
4490 color 5
4500 Data 6,1,64,39
4510 Data 6,1,64,38
4520 Data 6,1,68,37
4530 Data 6,1,69,36
4540 Data 6,1,71,34
4550 Data 6,1,73,32
4560 Data 6,1,75,31
4570 Data 6,1,77,29
4580 Data 6,1,77,28
4590 Data 6,1,80,27
4600 Data 6,1,81,26
4610 Data 6,1,81,27
4620 Data 6,1,81,36
4630 Data 6,1,81,38
4640 Data 6,1,80,40
4650 Data 6,1,79,48
4660 Data 6,1,80,50
4670 Data 6,1,80,52
4680 Data 6,1,79,53
4690 Data 6,1,79,61
4700 Data 6,1,79,63
4710 Data 6,1,80,65
4720 Data 6,1,79,66
4730 Data 6,1,78,74
4740 Data 6,1,79,76
4750 Data 6,1,79,78
4760 Data 6,1,78,81
4770 Data 6,1,77,84
4780 Data 6,1,77,87
4790 Data 6,1,77,89
4800 Data 6,1,77,91
4810 Data 6,1,77,93
4820 Data 6,1,77,97
4830 Data 6,1,77,99
4840 Data 6,1,77,101
4850 Data 6,1,77,104
4860 Data 6,1,77,106
4870 Data 6,1,76,108
4880 Data 6,1,76,111
4890 Data 6,1,77,114
4900 Data 6,1,77,116
4910 Data 6,1,77,118
4920 Data 6,1,77,119
4930 Data 6,1,77,120
4940 Data 6,1,77,123
4950 Data 6,1,77,126
4960 Data 6,1,77,127
4970 Data 6,1,77,129
4980 Data 0,0,0,0
4990 goto *kokoko
5000
移植案。
[ここをクリックすると内容が表示されます]
コード: 全て選択
#N88BASIC
Type CIRCLEDATA
Pattern As Long
ColorCode As Long
x As Long
y As Long
End Type
Dim Circles[ELM(10),ELM(500)] As CIRCLEDATA
Dim Count[ELM(10)]=[0,0,0,0,0,0,0,0,0,0] As Long
Sub PutData(Num As Long,Pattern As Long,ColorCode As Long,x As Long,y As Long)
With Circles[Num,Count[Num]]
.Pattern=Pattern
.ColorCode=ColorCode
.x=x
.y=y
End With
Count[Num]=Count[Num]+1
End Sub
Dim CCC1 As Long
Dim n1 As Long
Dim n1$ As String
Dim TASUHIKU As Long
Dim dxi As Single,dyi As Single
Dim dx As Long,dy As Long
Dim dxmoji As Long,dymoji As Long
Dim xp0 As Long
Dim DTDT$ As String
Dim CCC0 As Long
Dim NUMn1 As Long
Dim I As Long
Dim NUMn1$[16] As String
Dim NDTDT As Long
Dim DTN As Long
Dim ii As Long
Dim XX As Long
Dim DT$ As String
Dim DATFROM$ As String
Dim JUJU As Long
Dim nPEN[ELM(500)] As Long
Dim CCC[ELM(500)] As Long
Dim xp[ELM(500)] As Long
Dim yp[ELM(500)] As Long
Dim dig As Long
'データ設定
4500 PutData(1,6,1,64,39)
4510 PutData(1,6,1,64,38)
4520 PutData(1,6,1,68,37)
4530 PutData(1,6,1,69,36)
4540 PutData(1,6,1,71,34)
4550 PutData(1,6,1,73,32)
4560 PutData(1,6,1,75,31)
4570 PutData(1,6,1,77,29)
4580 PutData(1,6,1,77,28)
4590 PutData(1,6,1,80,27)
4600 PutData(1,6,1,81,26)
4610 PutData(1,6,1,81,27)
4620 PutData(1,6,1,81,36)
4630 PutData(1,6,1,81,38)
4640 PutData(1,6,1,80,40)
4650 PutData(1,6,1,79,48)
4660 PutData(1,6,1,80,50)
4670 PutData(1,6,1,80,52)
4680 PutData(1,6,1,79,53)
4690 PutData(1,6,1,79,61)
4700 PutData(1,6,1,79,63)
4710 PutData(1,6,1,80,65)
4720 PutData(1,6,1,79,66)
4730 PutData(1,6,1,78,74)
4740 PutData(1,6,1,79,76)
4750 PutData(1,6,1,79,78)
4760 PutData(1,6,1,78,81)
4770 PutData(1,6,1,77,84)
4780 PutData(1,6,1,77,87)
4790 PutData(1,6,1,77,89)
4800 PutData(1,6,1,77,91)
4810 PutData(1,6,1,77,93)
4820 PutData(1,6,1,77,97)
4830 PutData(1,6,1,77,99)
4840 PutData(1,6,1,77,101)
4850 PutData(1,6,1,77,104)
4860 PutData(1,6,1,77,106)
4870 PutData(1,6,1,76,108)
4880 PutData(1,6,1,76,111)
4890 PutData(1,6,1,77,114)
4900 PutData(1,6,1,77,116)
4910 PutData(1,6,1,77,118)
4920 PutData(1,6,1,77,119)
4930 PutData(1,6,1,77,120)
4940 PutData(1,6,1,77,123)
4950 PutData(1,6,1,77,126)
4960 PutData(1,6,1,77,127)
4970 PutData(1,6,1,77,129)
4980 PutData(1,0,0,0,0)
1000 '初期設定値
1010 CCC1=2
1020 n1=1
1030 n1$=Str$(n1)
1040 TASUHIKU=0 :dxi=1.5:dx=50 :dxmoji=80 :xp0=1 :dyi=1.5:dy=100 :dymoji=0
1050 GOSUB *HYOUJI1
1820 Sleep(INFINITE)
2180 *HYOUJI1'------------------------------------------------------入力された文字を分析します。
2190 DTDT$=""
2200 CCC0=CCC1
2210 NUMn1=Len(n1$)-1 'n1の桁数
2220 FOR I=0 TO NUMn1
2230 NUMn1$="S"+Mid$(n1$,I+1,1)
2240 DTDT$=DTDT$+NUMn1$
2250 NEXT
2260 GOSUB *MOJIWOKAKU
2270 RETURN
2280 '
2650 *MOJIWOKAKU'-----------------------------------------------------文字を書きます
2660 NDTDT=Len(DTDT$)
'2670 DTN=5000
'2700 DTN=NUM-1
2770 '////////////////////////////////////////////////////////
2850 FOR ii=1 TO NDTDT STEP 2
2860 XX=ii :DT$=Mid$(DTDT$,ii,2) :GOSUB *DATINP :GOSUB *W
2880 NEXT
2890 '////////////////////////////////////////////////////////
2900 RETURN
2910 '
2920 '
3050 *DATINP'---------------------------------------------DATA行の読み込み
2950 DTN=-1 '←Changed
2960 DATFROM$=DT$
3000 if DATFROM$="S1" then dig=1 '数字の「1」を読み込む
' if DATFROM$="S2" then dig=2 '数字の「2」を読み込む
' if DATFROM$="S3" then dig=3 '数字の「3」を読み込む
' if DATFROM$="S4" then dig=4 '数字の「4」を読み込む
' if DATFROM$="S5" then dig=5 '数字の「5」を読み込む
' if DATFROM$="S6" then dig=6 '数字の「6」を読み込む
' if DATFROM$="S7" then dig=7 '数字の「7」を読み込む
' if DATFROM$="S8" then dig=8 '数字の「8」を読み込む
' if DATFROM$="S9" then dig=9 '数字の「9」を読み込む
' if DATFROM$="S0" then dig=0 '数字の「0」を読み込む
3070 *kokoko
3080 for JUJU=1 to 500
3090 DTN=DTN+1
3100 'Read nPEN(DTN),ccc(DTN),xp(DTN),yp(DTN)
With Circles[dig,DTN]
nPEN[DTN]=.Pattern
CCC[DTN]=.ColorCode
xp[DTN]=.x
yp[DTN]=.y
End With
3180 if xp[DTN]=0 and yp[DTN]=0 then goto *edatinp
3190 xp[DTN]=xp[DTN]*dxi+dx+(ii-1)*dxmoji
3200 yp[DTN]=yp[DTN]*dyi+dy+(ii-1)*dymoji
3210 CCC[DTN]=CCC0
3230 next
3240 *edatinp
3250 return
3230 '
3240 '
3250 *W'////////////////////////////////////////////////////
3260 FOR I=0 TO DTN-1
3270 GOSUB *PENPEN
3290 NEXT
3300 RETURN
3310 '
3320 '
3330 *PENPEN'///////////////////////////////////////////////////
3340 Select Case nPEN
3350 Case 1
CIRCLE(xp,yp), 1*xp0,CCC,,,,F
3360 Case 2
CIRCLE(xp,yp), 2*xp0,CCC,,,,F
3370 Case 3
CIRCLE(xp,yp[I]), 4*xp0,CCC[I],,,,F
3380 Case 4
CIRCLE(xp[I],yp[I]), 6*xp0,CCC[I],,,,F
3390 Case 5
CIRCLE(xp[I],yp[I]), 8*xp0,CCC[I],,,,F
3400 Case 6
CIRCLE(xp[I],yp[I]),10*xp0,CCC[I],,,,F
3410 Case 7
CIRCLE(xp[I],yp[I]), 2*xp0,CCC[I]
3420 Case 8
CIRCLE(xp[I],yp[I]), 4*xp0,CCC[I]
3430 Case 9
CIRCLE(xp[I],yp[I]), 6*xp0,CCC[I]
3440 Case 10
CIRCLE(xp[I],yp[I]), 8*xp0,CCC[I]
3450 End Select
3460 RETURN
一応移植案です。
DATA文にあたるところはPutDataという専用の関数を作成して対応しています。
PutData(数字,パターン,カラー,x,y)
といった感じで(引数が1個増えています)。
行番号などは面倒なのでそのままです(並びが無茶苦茶です^^;;)
極力N88BASICスタイルを保ってみました(変数の宣言が必須になっているとか、命令語がなくなっているなど、どうしても変更しなければいけないところは変更しています)。
N88BASICにはあまり詳しくないので、間違っているところがあるかもしれません。そのときはどなたかご指摘お願いします。
[hira]
http://hira.hopto.org/
http://hira.hopto.org/
できました!。すごいです。
できました。すごいです。ありがとうございました。一気にやる気になりました。
AB4を早速ダウンロードしてコンパイルしたら、動いちゃいました。
でも、
①作ってもらったコードをデバッグしたら
スレッド(&HA14)でアクセス違反がありました(EPI=&H7C958FEA)。
と一番下の方に表示されてプログラムが止まりました。そのすぐ上の「グローバル」タブには、青い右向き三角とともに
n1$(&h0)アクセスできません。
(↑他にもいくつか・・・)
と書かれています。
②さらにファイル名は「prompt.sbp」とかかれています。
このようなモノが自動で作られるということは、
プログラム1個につきフォルダ1個を作って管理していく必要がある
ということなんでしょうか?
特に①のデバッグ件については、教えてもらったコードを元に、
算数プログラムを開発していくのに重要なので、解決方法をよろしくお願いします。
②については(もうすぐ40才なので)ごく簡単に説明していただけると、
助かります。よろしくお願いします。
AB4を早速ダウンロードしてコンパイルしたら、動いちゃいました。
でも、
①作ってもらったコードをデバッグしたら
スレッド(&HA14)でアクセス違反がありました(EPI=&H7C958FEA)。
と一番下の方に表示されてプログラムが止まりました。そのすぐ上の「グローバル」タブには、青い右向き三角とともに
n1$(&h0)アクセスできません。
(↑他にもいくつか・・・)
と書かれています。
②さらにファイル名は「prompt.sbp」とかかれています。
このようなモノが自動で作られるということは、
プログラム1個につきフォルダ1個を作って管理していく必要がある
ということなんでしょうか?
特に①のデバッグ件については、教えてもらったコードを元に、
算数プログラムを開発していくのに重要なので、解決方法をよろしくお願いします。
②については(もうすぐ40才なので)ごく簡単に説明していただけると、
助かります。よろしくお願いします。
1番に関しては、2番の「ファイル名が『prompt.sbp』」ということから考えて、おそらくCIRCLE命令の中でのアクセス違反でしょう。①作ってもらったコードをデバッグしたら
スレッド(&HA14)でアクセス違反がありました(EPI=&H7C958FEA)。
と一番下の方に表示されてプログラムが止まりました。そのすぐ上の「グローバル」タブには、青い右向き三角とともに
n1$(&h0)アクセスできません。
(↑他にもいくつか・・・)
と書かれています。
②さらにファイル名は「prompt.sbp」とかかれています。
このようなモノが自動で作られるということは、
プログラム1個につきフォルダ1個を作って管理していく必要がある
ということなんでしょうか?
プログラムの問題かどうかもはっきりしないので、prompt.sbpでのエラー箇所の内容と、画面下の「プロシージャ」を「Global」に変更するとどこの行が反転されるかお調べいただけると助かります。当方(XP SP2 Home、AB 4.24.00)ではエラーを再現することができませんので。
2番ですが、「prompt.sbp」はActiveBasic本体のフォルダにある「Include」というフォルダの中にあるファイルの1つで、今回のようにN88BASIC互換(実際は本件のように完全互換とはいきませんが)のプログラムを作成するときに呼び出されるファイルです。
そのため、このファイルは複数のプログラムから呼び出され、各プログラムそのものと直接の関係はありません。無理にプログラム1個につきフォルダ1個を作る必要はありませんが、実際にはデバッグ用のファイルなどが生成されてややこしくなるため、フォルダ1個を作った方が管理がしやすくなるかと思います(少しややこしいので理解していただけるか微妙なところ…)。
[hira]
http://hira.hopto.org/
http://hira.hopto.org/
昨日とは少し違います・・・
プロシージャはGlobalしか選べない状態ですが、そのときは、いつも画面下の「プロシージャ」を「Global」に変更するとどこの行が反転されるかお調べいただけると助かります。
「prompt.sbp」の154行目の「End Sub」が黒く反転しています。
(常にそうなるのか何回かやってみましたが、「prompt.sbp」が
表示されないこともあり、自分のしていることが正しいのかさえ、不安なります。)
グローバルタブの中で青い三角印がついているのは
n1$(&H0)アクセスできません
DTDT$(&H0)アクセスできません
NUMn1$配列(&H421A74) の下にある16個
[0](&H0)アクセスできません
[1](&H0)アクセスできません
:
:
[16](&H0)アクセスできません
DT$(&H0)アクセスできません
DATFROM$(&H0)アクセスできません
1番について自分がわかるお返事は、これだけです。
2番についてはなんとなく理解できましたということにしておきます。
縁の下の力持ちが働いてるっていうことかなと思いました。
現在の私の環境は WindowsXP sp2
AB 4.24.00
変数のアドレスが&H0ということは、ただのアクセス違反ではない気がします。
しかも154行目といえばPRINT_ToPrompt(Print命令)の部分です。プログラムからPrint命令は呼び出していないので奇妙な話。
当方XP SP2 Home・AB 4.24.00ということで朝顔さんと環境は同じはずなのに。
N88BASIC特有のGosub→Returnの流れが関係あるのかどうかはわかりませんが、一応現在のActiveBasicの文法に近い形(といってもGosubとReturnをなくした形にしただけ)にしてみましたので、これで一度確認してみてください。
しつこいですが、行番号などはノータッチです。
※他の皆さんもうまく動くか報告していただけるとありがたいです。
しかも154行目といえばPRINT_ToPrompt(Print命令)の部分です。プログラムからPrint命令は呼び出していないので奇妙な話。
当方XP SP2 Home・AB 4.24.00ということで朝顔さんと環境は同じはずなのに。
N88BASIC特有のGosub→Returnの流れが関係あるのかどうかはわかりませんが、一応現在のActiveBasicの文法に近い形(といってもGosubとReturnをなくした形にしただけ)にしてみましたので、これで一度確認してみてください。
しつこいですが、行番号などはノータッチです。
※他の皆さんもうまく動くか報告していただけるとありがたいです。
[ここをクリックすると内容が表示されます]
コード: 全て選択
#N88BASIC
Type CIRCLEDATA
Pattern As Long
ColorCode As Long
x As Long
y As Long
End Type
Dim Circles[ELM(10),ELM(500)] As CIRCLEDATA
Dim Count[ELM(10)]=[0,0,0,0,0,0,0,0,0,0] As Long
Sub PutData(Num As Long,Pattern As Long,ColorCode As Long,x As Long,y As Long)
With Circles[Num,Count[Num]]
.Pattern=Pattern
.ColorCode=ColorCode
.x=x
.y=y
End With
Count[Num]=Count[Num]+1
End Sub
Dim CCC1 As Long
Dim n1 As Long
Dim n1$ As String
Dim TASUHIKU As Long
Dim dxi As Single,dyi As Single
Dim dx As Long,dy As Long
Dim dxmoji As Long,dymoji As Long
Dim xp0 As Long
Dim DTDT$ As String
Dim CCC0 As Long
Dim NUMn1 As Long
Dim I As Long
Dim NUMn1$[16] As String
Dim NDTDT As Long
Dim DTN As Long
Dim ii As Long
Dim XX As Long
Dim DT$ As String
Dim DATFROM$ As String
Dim JUJU As Long
Dim nPEN[ELM(500)] As Long
Dim CCC[ELM(500)] As Long
Dim xp[ELM(500)] As Long
Dim yp[ELM(500)] As Long
Dim dig As Long
'データ設定
4500 PutData(1,6,1,64,39)
4510 PutData(1,6,1,64,38)
4520 PutData(1,6,1,68,37)
4530 PutData(1,6,1,69,36)
4540 PutData(1,6,1,71,34)
4550 PutData(1,6,1,73,32)
4560 PutData(1,6,1,75,31)
4570 PutData(1,6,1,77,29)
4580 PutData(1,6,1,77,28)
4590 PutData(1,6,1,80,27)
4600 PutData(1,6,1,81,26)
4610 PutData(1,6,1,81,27)
4620 PutData(1,6,1,81,36)
4630 PutData(1,6,1,81,38)
4640 PutData(1,6,1,80,40)
4650 PutData(1,6,1,79,48)
4660 PutData(1,6,1,80,50)
4670 PutData(1,6,1,80,52)
4680 PutData(1,6,1,79,53)
4690 PutData(1,6,1,79,61)
4700 PutData(1,6,1,79,63)
4710 PutData(1,6,1,80,65)
4720 PutData(1,6,1,79,66)
4730 PutData(1,6,1,78,74)
4740 PutData(1,6,1,79,76)
4750 PutData(1,6,1,79,78)
4760 PutData(1,6,1,78,81)
4770 PutData(1,6,1,77,84)
4780 PutData(1,6,1,77,87)
4790 PutData(1,6,1,77,89)
4800 PutData(1,6,1,77,91)
4810 PutData(1,6,1,77,93)
4820 PutData(1,6,1,77,97)
4830 PutData(1,6,1,77,99)
4840 PutData(1,6,1,77,101)
4850 PutData(1,6,1,77,104)
4860 PutData(1,6,1,77,106)
4870 PutData(1,6,1,76,108)
4880 PutData(1,6,1,76,111)
4890 PutData(1,6,1,77,114)
4900 PutData(1,6,1,77,116)
4910 PutData(1,6,1,77,118)
4920 PutData(1,6,1,77,119)
4930 PutData(1,6,1,77,120)
4940 PutData(1,6,1,77,123)
4950 PutData(1,6,1,77,126)
4960 PutData(1,6,1,77,127)
4970 PutData(1,6,1,77,129)
4980 PutData(1,0,0,0,0)
1000 '初期設定値
1010 CCC1=2
1020 n1=1
1030 n1$=Str$(n1)
1040 TASUHIKU=0 :dxi=1.5:dx=50 :dxmoji=80 :xp0=1 :dyi=1.5:dy=100 :dymoji=0
2190 DTDT$=""
2200 CCC0=CCC1
2210 NUMn1=Len(n1$)-1 'n1の桁数
2220 FOR I=0 TO NUMn1
2230 NUMn1$="S"+Mid$(n1$,I+1,1)
2240 DTDT$=DTDT$+NUMn1$
2250 NEXT
2660 NDTDT=Len(DTDT$)
'2670 DTN=5000
'2700 DTN=NUM-1
2770 '////////////////////////////////////////////////////////
2850 FOR ii=1 TO NDTDT STEP 2
2860 XX=ii :DT$=Mid$(DTDT$,ii,2)
2950 DTN=-1 '←Changed
2960 DATFROM$=DT$
3000 if DATFROM$="S1" then dig=1 '数字の「1」を読み込む
' if DATFROM$="S2" then dig=2 '数字の「2」を読み込む
' if DATFROM$="S3" then dig=3 '数字の「3」を読み込む
' if DATFROM$="S4" then dig=4 '数字の「4」を読み込む
' if DATFROM$="S5" then dig=5 '数字の「5」を読み込む
' if DATFROM$="S6" then dig=6 '数字の「6」を読み込む
' if DATFROM$="S7" then dig=7 '数字の「7」を読み込む
' if DATFROM$="S8" then dig=8 '数字の「8」を読み込む
' if DATFROM$="S9" then dig=9 '数字の「9」を読み込む
' if DATFROM$="S0" then dig=0 '数字の「0」を読み込む
3080 for JUJU=1 to 500
3090 DTN=DTN+1
3100 'Read nPEN(DTN),ccc(DTN),xp(DTN),yp(DTN)
With Circles[dig,DTN]
nPEN[DTN]=.Pattern
CCC[DTN]=.ColorCode
xp[DTN]=.x
yp[DTN]=.y
End With
3180 if xp[DTN]=0 and yp[DTN]=0 then Exit For
3190 xp[DTN]=xp[DTN]*dxi+dx+(ii-1)*dxmoji
3200 yp[DTN]=yp[DTN]*dyi+dy+(ii-1)*dymoji
3210 CCC[DTN]=CCC0
3230 next
3260 FOR I=0 TO DTN-1
3340 Select Case nPEN
3350 Case 1
CIRCLE(xp,yp), 1*xp0,CCC,,,,F
3360 Case 2
CIRCLE(xp,yp), 2*xp0,CCC,,,,F
3370 Case 3
CIRCLE(xp,yp[I]), 4*xp0,CCC[I],,,,F
3380 Case 4
CIRCLE(xp[I],yp[I]), 6*xp0,CCC[I],,,,F
3390 Case 5
CIRCLE(xp[I],yp[I]), 8*xp0,CCC[I],,,,F
3400 Case 6
CIRCLE(xp[I],yp[I]),10*xp0,CCC[I],,,,F
3410 Case 7
CIRCLE(xp[I],yp[I]), 2*xp0,CCC[I]
3420 Case 8
CIRCLE(xp[I],yp[I]), 4*xp0,CCC[I]
3430 Case 9
CIRCLE(xp[I],yp[I]), 6*xp0,CCC[I]
3440 Case 10
CIRCLE(xp[I],yp[I]), 8*xp0,CCC[I]
3450 End Select
3290 NEXT
2880 NEXT
1820 Sleep(INFINITE)
[hira]
http://hira.hopto.org/
http://hira.hopto.org/
やっぱり同じです。
新しいコードで試したのですが、結果は同じようです。
青三角も同じところについています。
デバッグコンパイルやリリースコンパイルはできましたが、デバッグ実行は・・・。
「prompt.sbp」の154行目の「End Sub」が黒く反転しています。
154行目が違う行を指しているのが気になります。
私のやり方がおかしいのでしょうか?
①作ってもらったコードをすべてドラッグして反転しておき、右クリックでコピー
②ProjectEditerを起動し「ファイル」→「新規作成」→「Basicプログラム(*.abp *.bas)」→「OK」
③出てきた白いところに貼り付け
④F2キー(デバッグ実行)を押し
⑤「保存先のファイルを指定してください」で適当な名前を入れて→「保存」
ここまでを行うと「prompt.sbp」の154行目の「End Sub」が黒く反転している状態に行き着きます。
青三角も同じところについています。
デバッグコンパイルやリリースコンパイルはできましたが、デバッグ実行は・・・。
という部分ですが、最初のコードでも今回のコードでもしかも154行目といえばPRINT_ToPrompt(Print命令)の部分です。
「prompt.sbp」の154行目の「End Sub」が黒く反転しています。
154行目が違う行を指しているのが気になります。
私のやり方がおかしいのでしょうか?
①作ってもらったコードをすべてドラッグして反転しておき、右クリックでコピー
②ProjectEditerを起動し「ファイル」→「新規作成」→「Basicプログラム(*.abp *.bas)」→「OK」
③出てきた白いところに貼り付け
④F2キー(デバッグ実行)を押し
⑤「保存先のファイルを指定してください」で適当な名前を入れて→「保存」
ここまでを行うと「prompt.sbp」の154行目の「End Sub」が黒く反転している状態に行き着きます。
Re: やっぱり同じです。
いいえ、それで正しいです。私のやり方がおかしいのでしょうか?
①作ってもらったコードをすべてドラッグして反転しておき、右クリックでコピー
②ProjectEditerを起動し「ファイル」→「新規作成」→「Basicプログラム(*.abp *.bas)」→「OK」
③出てきた白いところに貼り付け
④F2キー(デバッグ実行)を押し
⑤「保存先のファイルを指定してください」で適当な名前を入れて→「保存」
ここまでを行うと「prompt.sbp」の154行目の「End Sub」が黒く反転している状態に行き着きます。
となると、他に原因があるということでしょうが、現状では思い当たるところがありません…。ご迷惑をおかけします。
[hira]
http://hira.hopto.org/
http://hira.hopto.org/
試しにリリースコンパイルして実行してみるのはどうでしょうか?デバッグ実行のときのみアクセス違反になることがあるようなので...
詳細はINPUT命令(N88BASICモード)にてSTRING型強制終了のトピックをご覧下さい。
詳細はINPUT命令(N88BASICモード)にてSTRING型強制終了のトピックをご覧下さい。