[
板情報
|
カテゴリランキング
]
したらば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
(省略可)
:
※書き込む際の注意事項は
こちら
※画像アップローダーは
こちら
(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)
スマートフォン版
掲示板管理者へ連絡
無料レンタル掲示板