ホームページ 更新しました。。。。
といっても まぁ
見た目だけなんですけどねぇ。。。
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 ともに コマンドラインとかインスタンスとか取得するにはどうすればいいのかーー!! と格闘してます っよっと
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 ともに コマンドラインとかインスタンスとか取得するにはどうすればいいのかーー!! と格闘してます っよっと
2009年3月28日土曜日
インターネットと電話線
おとといの夕方から突然インターネットに接続できなくなってしまいました。
電話の方も同時刻から雑音がひどくてまともに通話できるような状態ではありませんでした。
今日NTTに電話したら 特殊な車(電柱をとかの高さまで人を乗せて上げるようなの)が二台
ウチに来て 電話機・配線・保安器をみて回りました。 結局 ウチまで来ている電話線が途中で切れていたそうです。(最近風が強くてなんか当たったのか・・・?)
電柱電柱間での断線だったので 修理費用はかかりませんでした。
今までネットの回線が切断されやすかったのはその所為だったのかなと・・・(まぁ回線復帰しましたが 前と変わんない・・・)
基地局からかなり離れているので 光とか に(できれば)したいな と。
保安器を新しいのにしたからといって回線の安定性が保証されるわけじゃないから 工事するのも なんだな。。。
電話の方も同時刻から雑音がひどくてまともに通話できるような状態ではありませんでした。
今日NTTに電話したら 特殊な車(電柱をとかの高さまで人を乗せて上げるようなの)が二台
ウチに来て 電話機・配線・保安器をみて回りました。 結局 ウチまで来ている電話線が途中で切れていたそうです。(最近風が強くてなんか当たったのか・・・?)
電柱電柱間での断線だったので 修理費用はかかりませんでした。
今までネットの回線が切断されやすかったのはその所為だったのかなと・・・(まぁ回線復帰しましたが 前と変わんない・・・)
基地局からかなり離れているので 光とか に(できれば)したいな と。
保安器を新しいのにしたからといって回線の安定性が保証されるわけじゃないから 工事するのも なんだな。。。
2009年2月25日水曜日
IRCでリバーシっぽいもの。
limeChatでリバーシするjavascriptこしらえました。
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];
}
}
2009年2月7日土曜日
ケンタッキーフライドチキンについて
時々ケンタッキーを食べる機会が自分にはあります。
個人的にケンタッキーを目の前にするとテンション上がります。
だって、おいしいじゃないですか。^^
ただ、鳥をミンチとかにせずそのままカットして揚げているので
それぞれ肉に、ばらつきあったりしますよね。
何でも ウィング サイ キール ドラム リブ の五種類があるそうです。
やっぱり一番大きな肉が食べたいですよね。
なんとケンタッキーでは部位が選択できる かも なのです。
(部位を指定して買えるか。 に対して)「ご来店時に、ご相談ください。
少数であれば、その時の商品の状況によって、お受けできる場合もありますので、
ご来店の際にご相談ください。
なお、必ずご希望にそえるということではございませんのでご了承願います。
」
だそうです。
リブ 10個!! とか無理そうですけど 常識の範囲内であれば 偏った注文もできそうです。
勝手な推測ですが、"オリジナルチキン" 5ピース を頼めば、 上で言った
五種類全部 "かぶり"なしで買えるんでしょうかね?
個人的にドラムとリブは苦手なので、 、"オリジナルチキン" 4ピース ドラムとリブはなしで と言う注文がしたいですね。
食べ物の話をしていると、おなかが減ってきました。。。 そんなこんなで I love KFC.
個人的にケンタッキーを目の前にするとテンション上がります。
だって、おいしいじゃないですか。^^
ただ、鳥をミンチとかにせずそのままカットして揚げているので
それぞれ肉に、ばらつきあったりしますよね。
何でも ウィング サイ キール ドラム リブ の五種類があるそうです。
やっぱり一番大きな肉が食べたいですよね。
なんとケンタッキーでは部位が選択できる かも なのです。
(部位を指定して買えるか。 に対して)「ご来店時に、ご相談ください。
少数であれば、その時の商品の状況によって、お受けできる場合もありますので、
ご来店の際にご相談ください。
なお、必ずご希望にそえるということではございませんのでご了承願います。
」
だそうです。
リブ 10個!! とか無理そうですけど 常識の範囲内であれば 偏った注文もできそうです。
勝手な推測ですが、"オリジナルチキン" 5ピース を頼めば、 上で言った
五種類全部 "かぶり"なしで買えるんでしょうかね?
個人的にドラムとリブは苦手なので、 、"オリジナルチキン" 4ピース ドラムとリブはなしで と言う注文がしたいですね。
食べ物の話をしていると、おなかが減ってきました。。。 そんなこんなで I love KFC.
登録:
投稿 (Atom)