ベーシックからの変換規則

主な変換規則
[%]→[_]
[.]→[_]
[$]→[_STRING]
[#]→[とる]
[!]→[とる]
[ AND ]→if文の中は[ && ] 演算なら[ & ]
[ OR ]→if文の中は[ || ] 演算なら[ & ]
[ XOR ]→[ ^ ]

ベーシックの記述をC言語に書き換える必要のある予約語です。一部はV3独自の変換です

OR
計算したい場合 cc = xx | yy ;
比較する場合 if( ( xx > 0 ) || ( yy > 0 )){

AND
計算したい場合 cc = xx & yy ;
比較する場合 if( ( xx > 0 ) && ( yy > 0 )){

XOR
計算したい場合 cc = xx ^ yy ;

<>
!= // Not Equal の意味 !はノット =はイコール

=>
>= // 必ず大なりが先

=<
<= // 必ず小なりが先

‘ Rem文
// スラッシュを2つ

% 整数の宣言
_ アンダースコアに変えます。これはグローバルな変数(例えばC1%やDX%など)の場合の変換規則でV3の方で定義してある変数だけです。個人的な変数はこの限りではありません。

. 変数名の中の小数点
_ アンダースコアに変えてください。

: コロン
; セミコロンに変えてください。

GOSUB* ゴーサブ ラベル名
GOSUB_ アスタリスクをアンダースコアに変えてラベル名と一体化させて関数呼び出しにします。V2時代のメインサブルーチンは全てこの規則で定義されています。個人的なサブルーチンに適応する必要はありません。

V2オプションコマンド V3 DLL
GOSUB *GC.IN.A GOSUB_GC_IN_A;

その他の構文
以下の制御文の単純変換例です。変換後{}のペアリングの調整が大抵必要です。

IF if( とりあえずカッコを付けておくと便利
THEN ){ カッコ閉じ、中カッコ
ELSE }else{ 中カッコ、小文字でelse、中カッコ閉じ
RETURN サブルーチンがないので使えない(関数の強制終了は小文字のreturn;です)
FOR for( 小文字にする、カッコ
TO ; <= セミコロン、小なり、イコールにすると便利
NEXT } 中カッコ閉じ。一括変換をすると対応がわからなくなるので注意
WHILE while 小文字
WEND } 中カッコ閉じ。一括変換をすると対応がわからなくなるので注意


xx = VAL( "123.4" )
xx = VAL( "123.4" ) ; // atof() と同じ
xx = atof( "123.4" ) ; // 戻り値はダブル実数 123.4
xx = atoi( "123.4" ) ; // 戻り値はロング整数 123


OPEN "mm" FOR INPUT AS #1
FILE *fp ;
char istring[512];
fp = fopen( "mm" , "rt" ) ;
fgets( istring , 511 , fp ); ; // LINE INPUTと同じ1行取り込み
fclose( fp ) ;

w$ = STR$( 123.4 )
sprintf( w_string , "%f" , 123.4 ) ; // w_string は "123.4000" になる
sprintf( w_string , "A=%f" , 123.4 ) ; // w_string は "A=123.4000" になる

long xx = 123 ;
sprintf( w_string , "%d" , xx ) ; // w_string は "123" になる

double xx = 123.4 ;
sprintf( w_string , "%f" , xx ) ; // w_string は "123.4" になる

double xx = 123.4 ;
sprintf( w_string , "%d" , (long)xx ) ; // w_string は "123" になる
sprintf( w_string , "%f,%d,%s" , 123.4 , 33 , "sss" ) ; // w_string は "123.4000,33,sss" になる

sprintf( w_string , "%12d" , 33 ) ; // w_string は " 33" になる
sprintf( w_string , "%d" , 33 ) ; // w_string は "33" になる

xx = LEN( "123.4" )
xx = LEN( "123.4" )
xx = strlen( "123.4" ) ;

LINE( xx1,yy1)-(xx2,yy2),color1,"B",color2
基本型 LINE( x1 , y1 , x2 , y2 , color1 , boxC , color2 , draw_mode )

LINE( 10,10,100,200,PEN_COLOR(1) ) ;
LINE( 10,10,100,200,PEN_COLOR(1),””,-1,n88_XOR ) ;
LINE( 10,10,100,200,PEN_COLOR(1),”B” ) ;
LINE( 10,10,100,200,PEN_COLOR(1),”BF”, RGB(64,64,128) ) ;
// 引数を省略する場合
DRAW_MODE = n88_OR ; // 描画モードOR
LINE_STYLE_NUMBER = 1 ; // 実線
LINE( xx1,yy1,xx2,yy2 ) ;

サブメニュに線を引く場合(座標はサブメニュの左上が原点(0,0)になります)
CALL_LINE( SUBMENU->m_hDC , xx1,yy1,xx2,yy2 , win_COLOR(2) ) ;
SUB_LOCATE( 0,0 );SUB_PRINT( "MODE Copy" );
SUB_LOCATE( 0,1 );SUB_PRINT( "距離[mm]" );
SUB_LOCATE( 14,1 );SUB_PRINT_V( C42DST );

サブメニュの表示
CALL_CSSTOCK(5);
幅を広げたい場合
CALL_CSSTOCK(5,40); 第二引数は幅の文字数





IF XX = 32 THEN YY=10 : AA = 5
if( XX == 32 ){
YY = 5 ;
AA = 5 ;
}

IF XX = 32 THEN YY=10 : AA = 5 ELSE YY = 20 : AA = 25
if( XX == 32 ){
YY = 10 ;
AA = 5 ;
}else{
YY = 20 ;
AA = 25 ;
}

FOR II = 1 TO 20:AA = II * 3:NEXT
for( II = 1 ; II <= 20 ; II ++ ){
AA = II * 3 ;
}


FOR II = 1 TO 20 STEP 3:AA = II * 3:NEXT
for( II = 1 ; II <= 20 ; II += 3 ){
AA = II * 3 ;
}




特に変わった記述には文字列の処理があります
ベーシックの文字変数はサイズが自由で、足し算が使えるなど便利な変数でしたが、Cではサイズを最初に決める必要があり、足し算は使えません。
使うときには
char string[256];
のように宣言し、
代入は
strcpy(string,”文字は大変”);
のようにします。
V2でメッセージを出すのに使っていたW$への代入は
strcpy( W_STRING,”こんにちは”);
と記述します。
足し算は十分な文字領域を確保しておいて次の関数を使ってください。
char* EXPASCAL add_string( char* char1 ,const char* char2 )
使い方は
char str1[256];
strcpy( str1,”元の文字” );
add_string( str1,”足す文字”);