したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |

盛り上がらないMPWスレ

53ぷご:2004/12/06(月) 22:51
あまり効果がないXCMDの一例

//xCheckOverlap XCMD
//(C)PugoStation 2004
//2004/11/28

//make方法:次の2行をMPWコンソールでEnterで実行すればOK
/*
SC xCheckOverlap.c -o xCheckOverlap.c.o -model near -b -proto strict -align mac68k
Link -w -m MAIN -rt XFCN=13904 -sg xCheckOverlap -o "xCheckOverlap" "xCheckOverlap.c.o" "{Libraries}HyperXLib.o" "{Libraries}MathLib.o" "{CLibraries}StdCLib.o" "{Libraries}MacRuntime.o" "{Libraries}IntEnv.o" "{Libraries}ToolLibs.o" "{Libraries}Interface.o"
*/

//includes
#include <HyperXCmd.h>


//protoTypes
static void DoMain(XCmdPtr paramPtr);
static char *lineStrOfHandle(Handle str,short line);



//main codes
pascal void main(XCmdPtr paramPtr)
{
DoMain(paramPtr);
}



//2つの文字列の重なりを判定
static void DoMain(XCmdPtr paramPtr)
{
Str255tmpStr;
char*c1, *c2;
Handlestr1, str2;
Pointpt;
intx1, y1;
intx2, y2;
intflag;

//大きいフィールド
str1 = paramPtr->params[0];
if(**str1 == 0)
{
paramPtr->returnValue=PasToZero(paramPtr,"?pError: no string1");
return;
}

//小さいフィールド
str2 = paramPtr->params[1];
if(**str2 == 0)
{
paramPtr->returnValue=PasToZero(paramPtr,"?pError: no string2");
return;
}

//小さいフィールドのオフセット
if(**(paramPtr->params[2]) > 0)
{
ZeroToPas(paramPtr,*paramPtr->params[2],tmpStr);
StrToPoint(paramPtr,tmpStr,&pt);
}
else
{
pt.h = 0; pt.v = 0;
}

//オフセット
y1 = pt.v;
x2 = pt.h;
y2 = 0;

//lock
HLock(str1);
HLock(str2);

//判定ルーチン
flag = false;
while(1)
{
//一行取り出す
c1 = lineStrOfHandle(str1, y1);
c2 = lineStrOfHandle(str2, y2);
if( *c1 == 0 || *c2 == 0 )
break;
//オフセット分移動
x1 = 0;
while(x1 < x2)
{
if( *c1 == 0 || *c1 == '?n' )
break;
c1++;
x1++;
}
//逆オフセット
while(x1 > x2)
{
if( *c2 == 0 || *c2 == '?n' )
break;
if( *c2 != '0' )
flag = true;// *c1の外にはみだした場合はtrue
c2++;
x1--;
}
//文字比較ループ
while(1)
{
//文字列終了
//if( *c1 == 0 || *c1 == '?n' )// *c1の外にはみだした場合
//break;
if( *c2 == 0 || *c2 == '?n' )
break;
//判定比較
if(*c1 != '0' && *c2 != '0')
{
flag = true;
break;
}
//次の文字
if( *c1 != 0 && *c1 != '?n' )
c1++;
c2++;
}
if(flag)
break;
//次の行
y1++;
y2++;
}

//unlock
HUnlock(str1);
HUnlock(str2);

if(flag)
paramPtr->returnValue=PasToZero(paramPtr,"?ptrue");
else
paramPtr->returnValue=PasToZero(paramPtr,"?pfalse");
}



//line行目の文字列を取り出す(0行目から始まる!)
static char *lineStrOfHandle(Handle str,short line)
{
short returnCnt;
char *c;

c = *str;

returnCnt = 0;
while(returnCnt < line && *c)
{
if(*c == '?n') returnCnt++;
c++;
}

return c;
}


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板