#99 Article 980 Posted at 1995/12/05 16:41:13 by すぅすぅ (MAP5999) [NYAN]
Subject: Re:*8 プログラミングお作法の話 /979 .... /941 /940
こんにちは すぅすぅです
maleneにポストしたのですが、こちらには来なかったみたいなのでもう一度...
きっと誰も望んでいないであろう反応もないであろう(泣)MacのCで挑戦~☆
あへてANSIライブラリは使いません
スクロールはしますがスクロールバーは付きません
大きくなるのでエラー処理は全くしてません
イベントろーるもしません
Symantec(ThinkC)だと少しいじらないと動かないかも
-------- ここから --------
/***********************************************
* にゃん for Macintosh by すぅすぅ
***********************************************/
#include <MacHeaders.h>
/***********************************************
* まずResEditで'DLOG'リソースをID=128で作る
* ItemNumber=1でOKボタン,2でCancelボタン,
* 3でEditTextアイテムという構成
* ('DITL'リソースも出来上がる)
***********************************************/
#define D_GETNUM 128 /* DLOG resource ID */
#define DI_OK 1 /* OK Button ItemNumber */
#define DI_CANCEL 2 /* Cancel Button ItemNumber */
#define DI_EDITTEXT 3 /* EditText ItemNumber */
#define CWITH 400 /* 表示ウィンドウの横幅 */
#define CHEIGHT 300 /* 表示ウィンドウの高さ */
typedef struct {
WindowPtr wp;
TEHandle teh;
} ConsoleData, *ConsolePtr;
/* ToolBoxのイニシャライズ */
void init_toolbox( void )
{
InitGraf(&qd.thePort);
InitFonts();
InitWindows();
InitDialogs(NULL);
InitMenus();
TEInit();
FlushEvents(everyEvent,0);
SetPort(qd.thePort);
InitCursor();
}
/* 数値入力 */
long get_num( void )
{
DialogPtr dp;
Handle item;
Str255 text;
short num;
Rect rct;
long val;
dp=GetNewDialog(D_GETNUM,(void *)0,(WindowPtr)-1);
SetPort(dp);
GetDItem(dp,DI_EDITTEXT,&num,&item,&rct);
SetIText(item,"\p");
num=0;
while(!num) {
ModalDialog((ModalFilterUPP)0,&num);
switch(num) {
case DI_OK: /* OK ボタン */
case DI_CANCEL: /* Cancel ボタン */
break;
default:
num=0;
break;
}
}
if (num==DI_OK) { /* OK */
GetIText(item,text);
StringToNum(text,&val);
}
DisposeDialog(dp);
if (num==DI_CANCEL) { /* Cancel */
ExitToShell(); /* 終了 */
}
return(val);
}
/* 表示ウィンドウを作る,ほか下準備 */
ConsolePtr open_console( void )
{
ConsolePtr cp;
Rect rct1,rct2;
cp=(ConsolePtr)NewPtr(sizeof(ConsoleData));
SetRect(&rct1,0,0,CWITH,CHEIGHT);
rct2=rct1;
OffsetRect(&rct2,20,40);
cp->wp=NewCWindow((void *)0,&rct2,"\p",true,
dBoxProc,(WindowPtr)-1,false,0);
SetPort(cp->wp);
cp->teh=TEStyleNew(&rct1,&rct1);
TEUpdate(&rct1,cp->teh);
return(cp);
}
/* 文字列をウィンドウへ出力する */
void print_str( ConsolePtr cp , Str255 str )
{
TEInsert(str+1,(long)*str,cp->teh);
TEPinScroll(0,-32000,cp->teh);
}
/* 表示ウィンドウを閉じる */
void close_console( ConsolePtr cp )
{
TEDispose(cp->teh);
DisposeWindow(cp->wp);
DisposePtr((Ptr)cp);
}
/* メイン */
void main( void )
{
ConsolePtr cp;
Str255 str;
long q1,q2,n;
init_toolbox(); /* イニシャライズ */
n=get_num(); /* 数値を入力 */
cp=open_console(); /* 表示ウィンドウを開く */
for(q1=1; q1<=n; q1++) {
if ((q1==3)||(q1==5)||(q1==n)) {
q2=q1;
while(q2>0)
print_str(cp,"\pにゃん"); /* にゃん */
q2--;
}
}
else {
NumToString(q1,str);
print_str(cp,str); /* 数字を表示 */
}
print_str(cp,"\p\r"); /* 改行 */
}
while(!Button()) ; /* マウスのボタンが押されるまで待つ */
close_console(cp); /* 表示ウィンドウを閉じる */
ExitToShell(); /* 終了 */
}
-------- ここまで --------
1. MacらしくPascal文字列を使った(文字数数えなくて良いとこは便利)
2. if, for, while は一行でも{}で囲む
3. きちきちに詰まっていて見にくい
ゴミでした。
MAP5999 すぅすぅ