• 締切済み

FBASICで作成したコードをvisualBASICに変換したい

以前に富士通のFBASICで作成したプログラムをVB6.0で作り直したいのですが、よくわかりません。 ソースコードは下記の通りです。 'RS-232Cポート受信準備 baud 0,1200 open"COM0:(s8n1n8)" as #1 on com(0) gosub *RECEVECHK com(0) on *LOOP GOTO *LOOP '------------------------------------------------------------------------- 'データ送信コードのチェック *RECEVECHK RCV$=input$(1,#1) if RCV$=ENQ$ then gosub *TRANACK : return if RCV$=STX$ then gosub *RECEVEDATA :return goto *MSG1 return '------------------------------------------------------------------------- 'データの受信 *RECEVEDATA RCV$=input$(1,#1) if RCV$=ETX$ then *RSTRCVDAT STKDATA$=STKDATA$+RCV$ goto *RECEVEDATA '------------------------------------------------------------------------- 'データ読み込み終了 *RSTRCVDAT gosub *TRANACK:'ACKコード返信へ gosub *TRANEOT:'EOTコード受信へ gosub *KIROKU:'データ書き込みへ return ' '-------------------------------------------------------------------------- *MSG1 'print"受信開始要求のコードではありません." 'print return' ' '------------------------------------------------------------------------- 'ACKコードの返信 *TRANACK print #1,ACK$ return '------------------------------------------------------------------------

みんなの回答

  • s-uzen
  • ベストアンサー率65% (2051/3118)
回答No.2

何とかBASICと名の付く F-BASIC、N88BASIC、その他は、パソコン初期の頃からの逐次処理型のBASIC言語です。 これに対して、Visual Basic 6.0 (VB6)は、イベント処理型のBASIC言語なので、処理言語を始めとして、スタイルが全く違ってきますので、別物のソフトと考えたほうが良いですね。 モジュール構造、ステートメントの文法スタイルなども違いますので、FBASICの処理内容だけ参考にして、作り直しということになりますね。 IDEを使うと画面屋モジュールの作成が簡単にできますが、使ったことが無いと、ここで最初につまずいてしまうかもしれませんね。 標準モジュールに記述して作成すれば、画面無しのプログラムを作ることは可能です。 VB6は、Windows XPまでなら殆どすべてのものが使用できますが、Windows Vista/7は、OCXなどの外部から提供されているものが使えなくなっていますので、OSによっては、この辺も注意が必要です。 VB6がどういう感じのものかは、下記ページの「授業」の所を参照してください。 Visual Basic 中学校 http://homepage1.nifty.com/rucio/main/main.htm RS232C関係は、Visual Basicでは MSCommを使うのが簡単です。 Visual BasicでのMSCommの使い方 http://www.picfun.com/serialframe.html  

mla00530
質問者

お礼

s-uzen様 御丁寧に回答を頂きありがとうございます。 MSCommの使い方から勉強してみます。 また躓いた時は宜しくお願いします。

  • Gletscher
  • ベストアンサー率23% (1525/6504)
回答No.1

BASICと名がついていますが、まったく別物と考えて作り直したほうが良いですよ。

関連するQ&A

  • サブルーチン

    下は身長の平均を求めるプログラムですけど、身長の高い順、低い順に並び替えしたいんですがどうしたらいいかわからないので、よかったら誰か教えていただけませんか                   REM プログラム     10            DIM A(12) 20 PRINT "メニュー” 30 PRINT "身長入力...1" 40 PRINT "身長出力...2" 50 PRINT "終了" 60 PRINT "どれにしますか" 70 INPUT B 80 IF B=1 THEN GOSUB300 ELSE 110 90 GOTO 30 100 IF B=2 THEN GOSUB500 ELSE 130 110 GOTO 30 120 IF B=3 THEN GOSUB700 ELSE 30 130 END 140 A(11)=B 300 FOR I=1 TO 10 310 PRINT i;: PRINT "人目" 315 INPUT C 320 A(I)=C 330 PRINT "これでいいですか?" 340 PRINT "1.YES 2.NO" 345 INPUT D 350 IF D=1 THEN 380 ELSE 370 360 IF D=2 THEN 315 ELSE 340 370 A(11)=A(11)+A(I) 380 NEXT I 390 RETURN 400 IF C=1 THEN 520 500 PRINT "先に入力してください" 510 GOTO 30 515 FOR I=1 TO 12 520 PRINT A(I) 530 NEXT I 540 RETURN 550 PRINT "これで身長の平均を求めるのを終わります"700 RETURN 710  

  • N88-日本語 BASIC ASCII ファイル

    N88-日本語 BASIC ASCII ファイルにするのにはどうしたら、宜しいのでしょうか。 ・MS-DOS 6.20 に付属されている、「Fileconv」を使ってみました。 MS-DOS → N88BASIC ドライブ名は、「C」ですが、Cと打つと、弾かれてしまって、入力が不可能です。 ・因みに、MS-DOSのファイル形式になっている、現在は、以下の記述名です。 ----- 10 width 80,20                         '10~96行まで初期設定 20 cls:beep 30 print "KEY操作 1 左 2 右 3 ミサイル発射" 40 print "自機 <T> を操り 敵 = を撃つゲーム" 50 for i=0 to 40 60 locate i,5:print "-" 70 next 80 locate 19,5:print "-<T>-" 90 x=19: m=0:mx=0:my=0              'x、y 自機の座標  mx、my ミサイル座標 95 randomize(val(right$(time$,2)))         'ex,ey 敵座標  96 ey=int(rnd(1)*10)+6:ex=5 100 gosub 200                    '100~130 メインルーチン 110 if m=1 then gosub 300  'm=0 ミサイル未発射。この時は300行(ミサイル移動ルーチン                     'にはいかない m=1 ミサイル発射中は300行へ   120 gosub 400 130 goto 100 200 b$=""                       '自機の移動、ミサイル発射 202 a$=inkey$ 205 if a$<>"" then b$=a$:goto 202 210 if b$="1" and x>1 then x=x-1 215 if b$="2" and x<37 then x=x+1 220 if b$="3" and m=0 then mx=x+2:my=5:m=1:beep 230 locate x,5 :print"-<T>-" 240 return 300 locate mx,my:print " "              'ミサイル移動ルーチン 310 my=my+1 320 if mx=ex and my=ey then gosub 600: end   '当たり判定  330 if my>15 then mx=0:my=0:m=0:return     '下までいったらミサイル終了。m=0に戻す 340 locate mx,my:print "V":return 400 locate ex,ey:print " "               '敵移動ルーチン           410 ex=ex+1 420 if ex=mx and ey=my then gosub 600 :end   '当たり判定 430 if ex>39 then ex=0: ey=int(rnd(1)*10)+6    '端までいったら新座標 440 locate ex,ey:print"=" 450 return 600 beep                          '当たりの時の処理 610 locate mx,my:color 4:print "*" 620 print "大当たり THE END": color 7 630 print "HIT ANY KEY" 640 a$=input$(1):return

  • N88互換BASICで変換したが使えません。その3

    400 LOCATE 0, 0 :PRINT DATE$; 410 LOCATE 25, 0 :PRINT TR$(TR.NO); 420 LOCATE 70, 0 :PRINT TIME$; 430 TM$=" " 440 WHILE TM$<>"00" AND TM$<>"30" 450 LOCATE 70, 0 :PRINT TIME$; 460 MID$(TM$,1,2)=MID$(TIME$,7,2) 470 XXX!=FRE(0) ' 480 WEND 490 LOCATE 0, 0 :PRINT DATE$; 500 LOCATE 25, 0 :PRINT TR$(TR.NO); 510 LOCATE 70, 0 :PRINT TIME$; 520 GOSUB *DISK.OUT 530 GOTO *TIME.30 540 ' 550 'Writting data to floppy 560 *DISK.OUT 570 PRINT:TR.NO=1 580 ON TR.NO GOSUB *TR.1,*TR.2 590 XXX!=FRE(0) ' 600 RETURN 610 ' 620 ' 630 *TR.1 640 KO.J=0 :PV$="" 650 CLS 660 LOCATE 0, 2 :PRINT "***Getting data***" 670 OPEN "COM:E8N" AS #1 680 PRINT #1,"TS0" 690 PRINT #1,CHR$(&H1B)+"T" 700 PRINT #1,"FM0,01,30" 710 LINE INPUT #1,DM$ 720 WHILE MID$(DM$,2,1)<>"E" :LINE INPUT #1,DM$ :WEND 730 PRINT #1,"FM0,01,30" 740 LINE INPUT #1,DM$

  • N88 basicプログラムの質問(ノルム計算)1

    N88 basicプログラムにおいて鉱物のノルム計算ができるようにしたいのですが、プログラムを打ち込んだのですが、うまく動きません。どなたかわかる方がいればご教授頂きたく願います。 かなり長くなりますが、ぜひともお願い致します。 下記、打ち込んだプログラムとなります。 長いので、質問を分けて入力します。 10 ' 20 '***** normative calculation program for clay minerals ***** by T,Igarashi,1983 30 ' 40 OPTION BASE 1 50 CONSOLE 0,25,0,1 60 WIDTH 40,25 70 ' 80 ' 90 DIM A$(22),DMY$(22),AA$(22),B1$(31),M$(8),L$(8) 100 DIM A(8,22),A1(22),A2(22),B(31),B0(8,31),C9(31),TOTAL(2,8) 110 GOSUB *INIT.1 120 ON ERROR GOTO 5000 130 GOSUB *ENTER 140 FOR QQ=1 TO NN 150 GOSUB *INIT.2 160 IF KORF=1 THEN GOSUB *FILE ELSE GOSUB *KEYBOARD 170 GOSUB *STORE 180 GOSUB *CALC 190 GOSUB *OUTPUT 200 NEXT QQ 210 GOSUB *PRINTOUT 220 GOTO 130 230 ' 240 ' 250 ' 260 *INIT.1 270 RESTORE 290 280 FOR I=1 TO 22 : READ AA$(I) : READ A2(I) : NEXT 290 DATA SIO2,60.085,TiO2,79.899,Al2O3,101.961,Fe2O3,159.692,FeO,71.846,MnO,70.937,MgO,40.304,CaO,56.079,Na2O,61.979,K2O,94.195 300 DATA P2O5,141.943,Cl,35.453,SO3,80.57,S,32.6,Cr2O3,151.989,ZrO2,123.218,F,18.99,CO2,44.9,H2O+,18,H2O-,1,Ig.LOSS,1,Others,1 310 RESTORE 330 320 FOR I=1 TO 31 : READ B1$(I) : NEXT 330 DATA Q,C,ad,mi,ab,an,ka,se,ch,gi,mo,pp,dp,al,Z,hl,th,cc,mg,sd,li,mt,he,cm,pr,il,ru,ap,fr,en,ot 340 C9(1)=A2(1) : C9(2)=A2(3) : C9(3)=A2(1)+A2(3) : C9(4)=A2(10)+A2(3)+A2(1)*6 : C9(5)=A2(9)+A2(3)+A2(1)*6 : C9(6)=A2(8)+A2(3)+A2(1)*2 : C9(7)=A2(3)+A2(1)*2+A2(19)*2 350 C9(8)=A2(10)+A2(3)*3+A2(1)*6+A2(19)*2 : C9(9)=A2(7)*5+A2(3)+A2(1)*3+A2(19)*4 : C9(10)=A2(3)+A2(19)*3 : C9(11)=A2(9)*33+A2(3)+A2(7)+A2(1)*4+A2(19)*4 : C9(12)=A2(3)+A2(1)*4+A2(19) 360 C9(13)=A2(3)+A2(19) : C9(14)=A2(10)+A2(3)*3+A2(13)*4+A2(19)*6 : C9(15)=A2(1)+A2(16) : C9(16)=(A2(9)-16)/2+A2(12) : C9(17)=A2(9)+A2(13) : C9(18)=A2(8)+A2(18) : C9(19)=A2(7)+A2(18) : C9(20)=A2(5)+A2(18) 370 C9(21)=A2(4)+A2(19) : C9(22)=A2(4)+A2(5) : C9(23)=A2(4) : C9(24)=A2(5)+A2(15) : C9(25)=A2(5)-16+A2(14)*2 : C9(26)=A2(2)+A2(5) : C9(27)=A2(2) : C9(28)=A2(8)*10+A2(11)*3+A2(19) 380 C9(29)=A2(8)-A2(17)*2 : C9(30)=A2(1)+A2(7) : C9(31)=1 : DD=0 390 FOR I=1 TO 31 : B(I)=0 : NEXT 400 RETURN 410 ' 420 ' 430 ' 440 *ENTER 450 C=0 : KORF=0 : SCREEN 3,3 : CLS 3 : SCREEN 3,0 : LINE(0,0)-(639,199),6,BF : COLOR 2 460 LOCATE 0,5 : PRINT "How many samples (Max 8 samples)";: INPUT NN 470 IF NN>8 THEN CLS 1 : GOTO 460 480 IF NN=0 THEN GOTO *PROEND 490 COLOR 2 : LOCATE 0,8 : PRINT "Input data from Keyboard or File or End : K/F/E" 500 Y$=INKEY$ 510 IF Y$="" THEN 490 520 IF Y$="e" OR Y$="E" THEN GOTO *PROEND 530 IF Y$="k" OR Y$="K" THEN KORF=0 : RETURN 540 IF Y$<>"f" AND Y$<>"F" THEN 490 550 KORF=1 560 RETURN 570 ' 580 ' 590 ' 600 *INIT.2 610 CLS 1 620 FOR I=1 TO 22 : A(QQ,I)=0 : NEXT I 630 FOR I=1 TO 31 : B(I)=0 : B0(QQ,I)=0 : NEXT I 640 RETURN 650 ' 660 ' 670 ' 680 *FILE 690 OPEN "data.1" AS #1 700 FIELD #1,40 AS MINERAL$,40 AS L1$ 710 FOR I=1 TO 22 : FIELD #1,(I-1)*4+80 AS DMY$(I),4 AS A$(I) : NEXT 720 MAX=LOF(1) : IF MAX=0 THEN RETURN 440 730 LOCATE 1,2 : PRINT MAX;"records are filing." 740 IF DD=1 THEN 800 750 LOCATE 2,5 : PRINT "You need list (Y/N)?": Y$=INKEY$ 760 IF Y$"" THEN 750 770 IF Y$="N" OR Y$="n" OR Y$="ミ" THEN 800 780 IF Y$="Y" OR Y$="y" OR Y$="ン" THEN GOSUB *NAME.LIST : GOTO 800 790 GOTO 750 800 LOCATE 2,10 : INPUT "Record No.";N 810 IF N>MAX THEN CLS 1 : GOTO 730 820 GET #1,N 830 M$=MINERAL$ : L$=L1$ 840 FOR I=1 TO 11 : A(QQ,I)=CVS(A$(I)) : A(QQ,I+11)=CVS(A$(I+11)) : NEXT 850 CLOSE #1 : DD=1 860 LOCATE 2,15 : PRINT "Correct data : Y/N"; : Y$=INKEY$ 870 IF Y$="" THEN 860 880 IF Y$="Y" OR Y$="y" THEN C=1 : GOTO 1120 890 IF Y$="N" OR Y$="n" THEN RETURN 180 900 GOTO 860 910 ' 920 ' 930 ' 940 *NAME.LIST 950 LPRINT 960 LPRINT CHR$(27) ; "V0960" ;CHR$(&H8) 970 LPRINT "Sample Name" ; TAB(40); "Locality" 980 LPRINT CHR$(27);"V0960";CHR$(&H8) 990 FOR II=1 TO MAX 1000 GET #1, II 1010 M$=MINERAL$ : L$=L1$ 1020 LPRINT M$; TAB(40); L$ 1030 NEXT 1040 LPRINT CHR$(27) ; "V0960";CHR$(&H8) 1050 LPRINT CHR$(12) 1060 RETURN 1070 ' 1080 ' 1090 ' 1100 *KEYBOARD 1110 M$="" : L$="" : FOR I=1 TO 22 : A(QQ,I)=0 : NEXT I

  • 十進ベーシックのプログラムの間違いを教えてください。

    誰か次のプログラムの間違いを直してください。入力を間違えても次に進めるようにするにはどこをどう変えたらよいのですか? RESTORE 30 READ a$ 40 INPUT b$ IF a$=b$ THEN IF a$<>b$ THEN GOTO 40 PRINT a$ GOTO 30 DATA i,x,d,k,k,h,end END IF END

  • 以下は、N88BASIC エラー・

    >10 ANSWER = INT(RND(1)*10)+1 >20 INPUT "GUESS (1-10)? ", GUESS >30 IF GUESS > ANSWER THEN PRINT "TOO HIGH!" : GOTO 20 >40 IF GUESS < ANSWER THEN PRINT "TOO LOW!" : GOTO 20 >50 IF GUESS = ANSWER THEN PRINT "YOU GOT IT!" : END 以上はN88BASICWINDOWS95互換プログラムで作成した、簡単な数あてゲーム しかし、実行しようとすると「文法エラー」とでる。 どこが問題か?

  • 99BASICで五目並べを作りたいのですが…

    サブルーチン*CHECK_TABLEは、味方の色(COL:0が黒、1が白)の数を 上から、右上、右、右下、下、左下、左、左上の8つの方向を順番に 数えるプログラムなのですが、上手く動作しません。 出来かけのソースを載せますので、誰か、助けてください。 100 '最初のプログラム(2009/03/18-05:44:23) 110 DIM MASU(640/32,480/32):CLC_X=23*32:CLC_Y=20*32:JUNBN=1 120 DIM CHKTBL_X(7):DIM CHKTBL_Y(7):DIM C(7) 130 CHKTBL_X(0)=0:CHKTBL_Y(0)=-1 140 CHKTBL_X(1)=1:CHKTBL_Y(1)=-1 150 CHKTBL_X(2)=1:CHKTBL_Y(2)=0 160 CHKTBL_X(3)=1:CHKTBL_Y(3)=1 170 CHKTBL_X(4)=0:CHKTBL_Y(4)=1 180 CHKTBL_X(5)=-1:CHKTBL_Y(5)=1 190 CHKTBL_X(6)=-1:CHKTBL_Y(6)=0 200 CHKTBL_X(7)=-1:CHKTBL_Y(7)=-1 210 PALETTE 8,(150,0,0) 220 *MAIN_LOOP'メインループ-------------------------------------------------- 230 CLS 3:SCREEN 3,5,0 240 GOSUB *DRAW_TABLE 250 GOSUB *GET_CLICK 260 SCREEN 3,1,0 270 GOTO *MAIN_LOOP '-------------------------------------------------------- 280 *DRAW_TABLE 290 LINE(0,0)-(640,480),8,BF '背景色を塗る 300 FOR I=0 TO 640/32 310 FOR J=0 TO 480/32 320 LINE(I*32,J*32)-(I*32+32,J*32+32),7,B '升目を描く 330 CX=I:CY=J 340 IF MASU(CX,CY)=1 THEN CIRCLE(I*32+16,J*32+16),16,0:PAINT(I*32+16,J*32+16),0 350 IF MASU(CX,CY)=2 THEN CIRCLE(I*32+16,J*32+16),16,7:PAINT(I*32+16,J*32+16),7 360 NEXT J'マスの値に応じて円の色を変える 370 NEXT I 380 RETURN 390 *GET_CLICK '------------------------------------------------------------- 400 'GET MOUSE 0,SW,MOUSE_X,MOUSE_Y 410 GET MOUSE 2,SW,CLC_X,CLC_Y 'クリックした座標を取得 420 IF CLC_X<>0 AND CLC_Y<>0 THEN CX=CLC_X\32:CY=CLC_Y\32 '32で割る 430 IF MASU(CX,CY)=0 AND FLAG=1 THEN MASU(CX,CY)=JUNBN+1 '順番通りにマスを反映させる 440 NUM1=CX:NUM2=CY:COL=JUNBN+1 450 GOSUB *CHECK_TABLE 460 FOR I=0 TO 7 480 IF C(I)>4 THEN WINCOLOR=JUNBN+1:GOSUB *WIN 485 PRINT "C(";I;")=";C(I) 490 NEXT I 500 MOUSE ON,2:ON MOUSE GOSUB *CHANGE_JUNBN 510 RETURN 520 *CHANGE_JUNBN 530 JUNBN=JUNBN XOR 1:FLAG=1 '順番を反転させる 540 RETURN 550 *CHECK_TABLE '----------------------------------------------------------- 560 FCOL=COL '味方の色 570 FOR I=0 TO 7 580 CHECK_X=NUM1:CHECK_Y=NUM2:COUNT=0 '指定の座標からチェックする 590 FOR J=0 TO 100 600 IF CHECK_X<0 OR CHECK_X>640/32 THEN GOTO *BK 610 IF CHECK_Y<0 OR CHECK_Y>480/32 THEN GOTO *BK 620 IF COUNT>0 AND MASU(CHECK_X,CHECK_Y)<>FCOL THEN GOTO *BK 630 IF COUNT>0 AND MASU(CHECK_X,CHECK_Y)=FCOL THEN C(I)=C(I)+1 640 CHECK_X=CHECK_X+CHKTBL_X(I):CHECK_Y=CHECK_Y+CHKTBL_Y(I) 650 COUNT=COUNT+1 660 NEXT J 670 *BK 680 NEXT I 690 RETURN 700 *WIN '------------------------------------------------------------------- 710 IF WINCOLOR=1 THEN PRINT"黒が勝ちました。!" ELSE PRINT"白が勝ちました。!" 720 RETURN

  • カシオのポケコン プログラム作成について

    先ほど同じ質問をしたのですが、質問の仕方が悪く意図した回答が得られなかったので、 再度質問します。 カシオのポケコン(Z-1GR)のBASICでプログラムを作成する際に Enterキーを押した場合と数値を入力した場合で分岐させたいのですが、やり方がわかりません。 例えば Aを入力、Bを入力すると、C=A+BでCの答えを表示させる。 ただし、Bの入力時に何も入力しないで、そのままEnterキーを押すと、C=0と表示させる と言った感じです 10 INPUT"A=",A 20 INPUT"B=",B 30 IF B="" THEN GOTO 40 ELSE GOTO 50 40 PRINT"C=0":GOTO 20 50 C=A+B 60 PRINT"C=";C:GOTO 20 上のライン30の指示がうまく実行しません。 「B="" THEN GOTO 40」の部分だと思うのですが この部分 (そのままEnterキーを押すとライン40に進む)をどのようにすればよいか 教えてください。 どなたかわかる方いらっしゃいませんか?

  • カシオのポケコンのプログラム作成について

    カシオのポケコン(Z-1GR)のBASICでプログラムを作成する際に Enterキーを押した場合と数値を入力した場合で分岐させたいのですが、やり方がわかりません。 例えば Aを入力、Bを入力すると、C=A+BでCの答えを表示させる。 ただし、Bの入力時に何も入力しないで、そのままEnterキーを押すと、C=0と表示させる と言った感じです 10 INPUT"A=",A 20 INPUT"B=",B 30 IF B="" THEN GOTO 40 ELSE GOTO 50 40 PRINT"C=0" 50 C=A+B 60 PRINT"C=";C:GOTO 20 どなたかわかる方いらっしゃいませんか?

  • 整数でないとき

    10 INPUT X 20 IF X=0 THEN END 30 C=X-2*INT(X/2) 40 IF C=0 THEN PRINT”偶数” ELSE PRINT”奇数” 50 GOTO 10 というプログラムはXが整数でなければ奇数と判定してしまいます。20行と30行の間に命令を追加して、Xが整数でないときは”整数でない”と表示して、次の入力を待つように修正し、整数のときだけ奇数か偶数かを判定するようにするには、 25 IF X^2>INT(X^2) THEN PRINT”整数でない”:GOTO 10 を追加する。 でよいのでしょうか? ぜひ教えてください。 

専門家に質問してみよう