[SAMPLE40] SAMPLE

10 REM SAMPLE40 ARGUMENT OF SINGLE, DOUBLE AND STRING VARIABLE
20 CLS
30 DEF SEG = DEFUSER:M%=0
40 BLOAD "C_ARG.EXE", M%
50 B%=&H1000
60 A!=3.456:B!=7.891
70 CS1$="1234":CS2$="ABCDE":CS3$="qq"
80 C#=12.3456:D#=89.1234
90 PRINT "A! B! C# D#";A!;B!;C#;D#
100 PRINT "cs1$,cs2$,cs3$";" ";CS1$;" ";CS2$;" ";CS3$
110 PRINT:PRINT:PRINT "ただいまより機械語Programで編集します。"
120 PRINT "数Dataは交換、文字Dataは交換および連結します。"
130 CALL B%(A!,B!,C#,D#,CS1$,CS2$,CS3$)
140 PRINT "A! B! C# D#";A!;B!;C#;D#
150 PRINT "cs1$,cs2$,cs3$";" ";CS1$;" ";CS2$;" ";CS3$

これは単精度変数A!,B!、倍精度変数C#,D#を取り替え、文字列CS1,CS2を取り替え、
さらにCS3をCS1+CSに書き換えしています。BASICの文字列変数は 255文字以内です。
[ARGUMENT引数の受け渡し] を参照。


C_ARG.EXEのsourceは次のとおりです。
このうち開始番地の 0x1000から、終了部 C3,90,90,90、、、、
までの実行部だけをresaveしたものがC_ARG_CORE.EXEです。
SAMPLE40_2はSAMPLE40でC_ARG.EXE をC_ARG_CORE.EXEに取り替えたものです。
機械語の呼び出し番地が&H1000から0に変わります。

/************************** Start of MAIN.H **************************/
#ifndef _[#ifndef _
#define _[#define _
#ifdef __STDC__
#else /* __STDC__ */
#endif /* __STDC__ */
#endif /* _[#endif /* _ */
/*************************** End of MAIN.H ***************************/




/************************* Start of MAIN-C.C *************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "main.h"
#ifdef __STDC__

#else
#endif

void main( argv )
char *argv[];
{
int i,j,k,l;
float d;
float *ii,*jj;//,id[25];
double d2;
double *ll,*kk;
char *cs1,*cs2,*cs3;
char ch1[256],ch2[256],ch3[256];
ii=(float*)(argv[0]);

////////////////////////////
//BASIC-INT = C++ SHORT 2byte
//C++ int = 4byte

jj=(float*)(argv[1]);
kk=(double*)(argv[2]);
ll=(double*)(argv[3]);
cs1=(char*)(argv[4]);
cs2=(char*)(argv[5]);
cs3=(char*)(argv[6]);

d=*ii;
*ii=*jj;
*jj=d;
d2=*kk;
*kk=*ll;
*ll=d2;
for (i=0;i<256;i++) {
ch1[i]=*cs1;
if (*cs1 ==0) {break;}
cs1 +=1;}
for (i=0;i<256;i++) {
ch2[i]=*cs2;
if (*cs2 ==0) {break;}
cs2 +=1;}
cs1=(char*)(argv[4]);
cs2=(char*)(argv[5]);
for (i=0;i<256;i++) {
ch3[i]=*cs1;
if (*cs1 ==0) {j=i;break;}
cs1 +=1;}
for (i=j;i<256;i++) {
ch3[i]=*cs2;
if (*cs2 ==0) {break;}
cs2 +=1;}


cs1=(char*)(argv[4]);
cs2=(char*)(argv[5]);
for (i=0;i<256;i++) {
*cs1=ch2[i];
if (*cs1 ==0) {break;}
cs1 +=1;}
for (i=0;i<256;i++) {
*cs2=ch1[i];
if (*cs2 ==0) {break;}
cs2 +=1;}
for (i=0;i<256;i++) {
*cs3=ch3[i];
if (*cs3 ==0) {break;}
cs3 +=1;}

return; }
/************************** End of MAIN-C.C **************************/