2010年2月7日日曜日

IRCのfreenodeにおけるNickServ ChanServ について

● 登録したいニックネームでIRCに接続

● NICKへ登録
/nickserv register ログインパス 自分のメールアドレス
するとメールが送られてきてその指示に従う

● ログイン
/nickserv identify ログインパス

● チャンネルに入ります。(自分が作った 誰かが既に作ったのは無理)
そこでチャンネルを登録
/chanserv register #チャンネル名

● ChanServを常駐させたいとき
/chanserv set #チャンネル名 guard on

● ChanServを常駐を解除させたいとき
/chanserv set #チャンネル名 guard off

● 管理ユーザーを増やす(チャンネルを作った人は最初から管理ユーザー)
/chanserv access #チャンネル名 add [追加したいメンバ] [権限]

/chanserv access #aaa add takahashi +votsriRfAF
+votsriRfAFは最高権限

● 管理ユーザーから消す
/chanserv access #チャンネル名 del [追加したいメンバ] [権限]

● 管理ユーザーの一覧を表示する
/chanserv access #チャンネル名 list

● オペレータになる
/chanserv op #チャンネル名

2010年1月4日月曜日

ホームページについて

ホームページ 更新しました。。。。


といっても まぁ 

見た目だけなんですけどねぇ。。。

コマンドライン引数の取得について

実行形式には
IMAGE_SUBSYSTEM_UNKNOWN 未知のサブシステム
IMAGE_SUBSYSTEM_NATIVE デバイスドライバとからしい
IMAGE_SUBSYSTEM_WINDOWS_GUI GUI
IMAGE_SUBSYSTEM_WINDOWS_CUI CUI
IMAGE_SUBSYSTEM_POSIX_CUI PosixのCUI(?)
IMAGE_SUBSYSTEM_WINDOWS_CE_GUI Windows CEのGUI

があるわけですが 

まぁ

EXEはコマンドライン引数を取得することができます。

C言語では

CUI

int main(int argc,char *argv[])
{
return 0;
}

GUI

int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine, //コマンドライン文字列
int nCmdShow
) {
return 0;
}

とまぁ なっているわけですよね

メイン関数の引数としてコマンドライン引数が取得できるわけなんですが、

ただメイン関数の引数は 普通の関数の引数とは仕組みがちょいと違うんですわな(たぶん)

普通の関数はスタックに積まれているデータを引数として使うんですが、

メインの引数はスタックにあるわけでなくてちょっと違った場所にあるらしい、、、

MS-DOS時代は PSP(program segment prefix)というとこにあったらしい。

Win32ではどのようになっているのか良くわからなかったのだが、PSPはまだ健在らしい・・・?
http://yasu.asuka.net/docs/tsr/
ここによると健在のような。。。

私が持っている書籍によると(高級言語プログラマのためのアセンブラ入門 ソフトバンククリエイティブ株式会社 http://www.amazon.co.jp/%E9%AB%98%E7%B4%9A%E8%A8%80%E8%AA%9E%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E3%82%A2%E3%82%BB%E3%83%B3%E3%83%96%E3%83%A9%E5%85%A5%E9%96%80-%E6%9E%97-%E6%99%B4%E6%AF%94%E5%8F%A4/dp/4797332816   p424~425)

起動直後のDSレジスタにPSPの領域の先頭アドレスがあるとかないとか。。。

GetCommandLine()という関数で取得も可能なのだが。。。

まぁ要するに アセンブラレベルで CUI GUI ともに コマンドラインとかインスタンスとか取得するにはどうすればいいのかーー!! と格闘してます っよっと

EXEの構造について

PEヘッダ の
 FileAlignmentは0x200(512B) ~ 0x10000(64KiB)ですので、それ以下それ以上だとエラーでます。

皆さんお気をつけて。。。

はぁ。。。

もう少しで冬休みも終わりです。。。宿題・課題をやらなければ。。。

2009年3月28日土曜日

インターネットと電話線

おとといの夕方から突然インターネットに接続できなくなってしまいました。

電話の方も同時刻から雑音がひどくてまともに通話できるような状態ではありませんでした。

今日NTTに電話したら 特殊な車(電柱をとかの高さまで人を乗せて上げるようなの)が二台
ウチに来て 電話機・配線・保安器をみて回りました。 結局 ウチまで来ている電話線が途中で切れていたそうです。(最近風が強くてなんか当たったのか・・・?)

電柱電柱間での断線だったので 修理費用はかかりませんでした。

今までネットの回線が切断されやすかったのはその所為だったのかなと・・・(まぁ回線復帰しましたが 前と変わんない・・・)

基地局からかなり離れているので 光とか に(できれば)したいな と。

保安器を新しいのにしたからといって回線の安定性が保証されるわけじゃないから 工事するのも なんだな。。。

2009年2月25日水曜日

IRCでリバーシっぽいもの。

limeChatでリバーシするjavascriptこしらえました。

javascriptをいじるのは初体験でしたが、ハマってしまいそうです^^


以下 リーバシする スプリクト^^(わざとですよ)

var turn=0;//0黒 1 白 ターン
var data = new Array(8*8);
var data2 = new Array(8*8);
var channel_g;
var end=0;

function event::onChannelText(prefix, channel, text){
channel_g=channel;
if(text.match(/^#/i)){

cmd=""+text.match(/[a-z]+$/i);
var ddd=text.match(/(\d)/g);

if(ddd!=null){

x=ddd[0];
y=ddd[1];
if(end==1){
send(channel,"<color navy,silver><ゲームを再開してください>");
return(0);
}
if(x>8||x==0||y>8||y==0){
send(channel,"<color navy,silver><不正な入力です>");
}else{
if(putable(x-1,y-1)==0){
send(channel,"<color navy,silver><そこには打てません>");

}else{
copyArr12();
put(x-1,y-1);
turnChange()
if(numberOfPutable()==0){
turnChange()
if(numberOfPutable()==0){

if(black_n()>white_n()){
send(channel,"<color navy,silver><黒の勝ち>");
}
if(black_n()<white_n()){
send(channel,"<color navy,silver><白の勝ち>");
}
if(black_n()==white_n()){
send(channel,"<color navy,silver><引き分け>");
}
draw();
end=1;
return(0);
}else{
send(channel,"<color navy,silver><打つ手がないのでパス>");
}
}
draw();

}
}
}

if(cmd!=null){
if(cmd.search(/^new$/i)!=-1){
send(channel,"<color navy,silver><ゲームを開始します>");
newGame();
draw();
end=0;
}
if(cmd.search(/^matta$/i)!=-1){
if(matta_ok==1){
send(channel,"<color navy,silver><\"待った\"しました>");
copyArr21();
turnChange()
draw();
end=0;
matta_ok=0;
}else{
send(channel,"<color navy,silver><\"待った\"できません>");
}
}
}
}
}

function newGame(){
turn=0;
for(ix=0;ix<8;ix++){
for(iy=0;iy<8;iy++){
data[(ix)*8+(iy)] = 0;
}
}
data[(3)*8+(3)]=1; //1黒?
data[(4)*8+(4)]=1; //2白
data[(4)*8+(3)]=2;
data[(3)*8+(4)]=2;
}
function draw(){
send(channel_g,"<color white,white>,/<color gray,white>1<color white,white>,,<color gray,white>2<color white,white>,,<color gray,white>3<color white,white>,,<color gray,white>4<color white,white>,,<color gray,white>5<color white,white>,,<color gray,white>6<color white,white>,,<color gray,white>7<color white,white>,,<color gray,white>8");
for(iy=0;iy<8;iy++){
str="";
str+="<color gray,white>"+(iy+1);
for(ix=0;ix<8;ix++){

if(data[(ix)*8+(iy)]==0){
if(putable(ix,iy)==0){
str+=""+"<color green,green>.<color black,green>・<color green,green>.";
}else{
str+=""+"<color green,green>.<color red,green>・<color green,green>."
}
}
if(data[(ix)*8+(iy)]==1){
str+=""+"<color black,green>●";
}
if(data[(ix)*8+(iy)]==2){
str+=""+"<color white,green>●";
}
}
if(iy==5){
str+="<color> balck "+black_n();
}
if(iy==6){
str+="<color> white "+white_n();
}
if(iy==7){
if(turn==0){
str+="<color> 黒の番です";
}else{
str+="<color> 白の番です";
}
}
send(channel_g,str);
}
}

function black_n(){
amount=0;
for(i=0;i<64;i++){
if(data[i]==1){
amount++;
}
}
return(amount);
}

function white_n(){
amount=0;
for(i=0;i<64;i++){
if(data[i]==2){
amount++;
}
}
return(amount);
}

function putable(x,y){
rr=0;
if(data[(x)*8+(y)]==0){
if(turn==0){
a1=2;
a2=1;
}else{
a1=1;
a2=2;
}
if(x!=0&&y!=0){
m=1;
a=0;
while(1){
if(data[(x-m)*8+(y-m)]==a1){
a=1;
}
if(data[(x-m)*8+(y-m)]==a2){
if(a==1){rr=1;}
break;
}
if(data[(x-m)*8+(y-m)]==0){
break;
}
if(x-m==0||y-m==0){
break;
}
m++;

}
}

if(y!=0){
m=1;
a=0;
while(1){
if(data[(x)*8+(y-m)]==a1){
a=1;
}
if(data[(x)*8+(y-m)]==a2){
if(a==1){rr=1;}
break;
}
if(data[(x)*8+(y-m)]==0){
break;
}
if(y-m==0){
break;
}
m++;

}
}

if(x!=7&&y!=0){
m=1;
a=0;
while(1){
if(data[(x+m)*8+(y-m)]==a1){
a=1;
}
if(data[(x+m)*8+(y-m)]==a2){
if(a==1){rr=1;}
break;
}
if(data[(x+m)*8+(y-m)]==0){
break;
}
if(x+m==7||y-m==0){
break;
}
m++;

}
}

if(x!=7){
m=1;
a=0;
while(1){
if(data[(x+m)*8+(y)]==a1){
a=1;
}
if(data[(x+m)*8+(y)]==a2){
if(a==1){rr=1;}
break;
}
if(data[(x+m)*8+(y)]==0){
break;
}
if(x+m==7){
break;
}
m++;

}
}

if(x!=7&&y!=7){
m=1;
a=0;
while(1){
if(data[(x+m)*8+(y+m)]==a1){
a=1;
}
if(data[(x+m)*8+(y+m)]==a2){
if(a==1){rr=1;}
break;
}
if(data[(x+m)*8+(y+m)]==0){
break;
}
if(x+m==7||y+m==7){
break;
}
m++;

}
}

if(y!=7){
m=1;
a=0;
while(1){
if(data[(x)*8+(y+m)]==a1){
a=1;
}
if(data[(x)*8+(y+m)]==a2){
if(a==1){rr=1;}
break;
}
if(data[(x)*8+(y+m)]==0){
break;
}
if(y+m==7){
break;
}
m++;

}
}
if(x!=0&&y!=7){
m=1;
a=0;
while(1){
if(data[(x-m)*8+(y+m)]==a1){
a=1;
}
if(data[(x-m)*8+(y+m)]==a2){
if(a==1){rr=1;}
break;
}
if(data[(x-m)*8+(y+m)]==0){
break;
}
if(x-m==0||y+m==7){
break;
}
m++;

}
}
if(x!=0){
m=1;
a=0;
while(1){
if(data[(x-m)*8+(y)]==a1){
a=1;
}
if(data[(x-m)*8+(y)]==a2){
if(a==1){rr=1;}
break;
}
if(data[(x-m)*8+(y)]==0){
break;
}
if(x-m==0){
break;
}
m++;

}
}
}
return(rr);
}

function put(x,y){
if(turn==0){
a1=2;
a2=1;
}else{
a1=1;
a2=2;
}
if(x!=0&&y!=0){
m=1;
a=0;
while(1){
if(data[(x-m)*8+(y-m)]==a1){
a=1;
}
if(data[(x-m)*8+(y-m)]==a2){
if(a==1){lineChange(x,y,x-m,y-m);}
break;
}
if(data[(x-m)*8+(y-m)]==0){
break;
}
if(x-m==0||y-m==0){
break;
}
m++;

}
}

if(y!=0){
m=1;
a=0;
while(1){
if(data[(x)*8+(y-m)]==a1){
a=1;
}
if(data[(x)*8+(y-m)]==a2){
if(a==1){lineChange(x,y,x,y-m);}
break;
}
if(data[(x)*8+(y-m)]==0){
break;
}
if(y-m==0){
break;
}
m++;

}
}

if(x!=7&&y!=0){
m=1;
a=0;
while(1){
if(data[(x+m)*8+(y-m)]==a1){
a=1;
}
if(data[(x+m)*8+(y-m)]==a2){
if(a==1){lineChange(x,y,x+m,y-m);}
break;
}
if(data[(x+m)*8+(y-m)]==0){
break;
}
if(x+m==7||y-m==0){
break;
}
m++;

}
}

if(x!=7){
m=1;
a=0;
while(1){
if(data[(x+m)*8+(y)]==a1){
a=1;
}
if(data[(x+m)*8+(y)]==a2){
if(a==1){lineChange(x,y,x+m,y);}
break;
}
if(data[(x+m)*8+(y)]==0){
break;
}
if(x+m==7){
break;
}
m++;

}
}

if(x!=7&&y!=7){
m=1;
a=0;
while(1){
if(data[(x+m)*8+(y+m)]==a1){
a=1;
}
if(data[(x+m)*8+(y+m)]==a2){
if(a==1){lineChange(x,y,x+m,y+m);}
break;
}
if(data[(x+m)*8+(y+m)]==0){
break;
}
if(x+m==7||y+m==7){
break;
}
m++;

}
}

if(y!=7){
m=1;
a=0;
while(1){
if(data[(x)*8+(y+m)]==a1){
a=1;
}
if(data[(x)*8+(y+m)]==a2){
if(a==1){lineChange(x,y,x,y+m);}
break;
}
if(data[(x)*8+(y+m)]==0){
break;
}
if(y+m==7){
break;
}
m++;

}
}
if(x!=0&&y!=7){
m=1;
a=0;
while(1){
if(data[(x-m)*8+(y+m)]==a1){
a=1;
}
if(data[(x-m)*8+(y+m)]==a2){
if(a==1){lineChange(x,y,x-m,y+m);}
break;
}
if(data[(x-m)*8+(y+m)]==0){
break;
}
if(x-m==0||y+m==7){
break;
}
m++;

}
}
if(x!=0){
m=1;
a=0;
while(1){
if(data[(x-m)*8+(y)]==a1){
a=1;
}
if(data[(x-m)*8+(y)]==a2){
if(a==1){lineChange(x,y,x-m,y);}
break;
}
if(data[(x-m)*8+(y)]==0){
break;
}
if(x-m==0){
break;
}
m++;

}
}
}

function lineChange(x1,y1,x2,y2){
if(turn==0){
a=1;
}else{
a=2;
}
mx=0
my=0
while(1){
data[(x1+mx)*8+(y1+my)]=a;
if(x2==x1+mx&&y2==y1+my){break;}
if(x2-x1>0){mx++;}
if(x2-x1<0){mx--;}
if(y2-y1>0){my++;}
if(y2-y1<0){my--;}
}
}

function numberOfPutable(){
amount=0;
for(ix=0;ix<8;ix++){
for(iy=0;iy<8;iy++){
if(putable(ix,iy)==1){amount++;}
}
}
//send(channel_g,""+amount);
return(amount);
}

function turnChange(){
if(turn==0){
turn=1;
}else{
turn=0;
}
}
matta_ok=0;
function copyArr12(){
matta_ok=1;
for(i=0;i<64;i++){
data2[i]=data[i];
}
}
function copyArr21(){
for(i=0;i<64;i++){
data[i]=data2[i];
}
}