2010年8月29日日曜日

2010年7月25日日曜日

HSPでGLUTを使わないでOpenGLを使ってみた。




Glutを使わずOpenGLを直叩きしました。


うまいこといきました。


ソース
http://begriff.zxq.net/TEST3.ZIP

2010年7月6日火曜日

あぁ 勘違い。

strlen() は \0 も計算に入れるものだと思ってコードを組んでた。アホや。。。

2010年6月28日月曜日

HSPでOpenGL その2



いろいろといじってたら
影ができた模様。タイマーとかも使って回転するアニメーションを作れた。
ダブルバッファリングはまだ実装していない
HSPとglutとの組み合わせは難しい終了処理がよくわからない。
OpenGLは一筋縄ではいかないようである

2010年6月27日日曜日

HSPでOpenGL その1


HSPでOpenGLというかglutを動かしてみた。


影とか 光源とか 設定の仕方がわからなかったので真っ白な物体が表示された。

2010年4月11日日曜日

repeat~loop foreach~loop をマクロで実装

repeat~loop foreach~loopをマクロで実装しました。

gotoでループを脱出してもスタックオーバーフローになりません

ちゃんと システム変数cnt もオリジナルと同じ挙動をします。

foreachも対応しました。拡張機能として
配列変数の各次元にも対応しました。

foreach
foreach2
foreach3
foreach4

といったように

foreachをモジュール型変数で使うときもオリジナルと同じ挙動するようになりました。

詳しくは それとなくHSPで

ケン○ッキーフライドチキン作ってみた その2

また挑戦してみました。

今回は大成功です!!!(自分なりには)

レシピのほうは私のホムペ“それとなくHSP”で公開しました。

たぶん私が初の試みでしょう。揚げ粉にコーヒーの粉ミルク(?)を配合したのは!

2010年3月29日月曜日

IRCボット改良版

  1. ; Character Codepage Encode module  
  2.    
  3. #ifndef __ENCODE_AS__  
  4. #define global __ENCODE_AS__  
  5.    
  6. #module "mod_encode"  
  7.    
  8. #const global CODEPAGE_S_JIS            932 ; Shift-JIS  
  9. #const global CODEPAGE_EUC_JP         51932 ; EUC-JP  
  10. #const global CODEPAGE_JIS            50220 ; iso-2022-jp(JIS)  
  11. #const global CODEPAGE_UTF_7          65000 ; utf-7  
  12. #const global CODEPAGE_UTF_8          65001 ; utf-8  
  13. #const global CODEPAGE_UNICODE         1200 ; Unicode  
  14. #const global CODEPAGE_UNICODE_BE      1201 ; Unicode(Big-Endian)  
  15. #const global CODEPAGE_AUTODET_ALL    50001 ; auto detect all  
  16. #const global CODEPAGE_AUTODET        50932 ; auto detect  
  17.    
  18. #usecom IMultiLanguage@mod_encode    "{275c23e1-3747-11d0-9fea-00aa003f8646}" \  
  19.                                     "{275c23e2-3747-11d0-9fea-00aa003f8646}"  
  20. #comfunc MuLang_ConvertString 9 var, int, int, var, var, var, var  
  21.    
  22. #deffunc _encode_init  
  23.     newcom ml, IMultiLanguage  
  24.     return  
  25.    
  26. #deffunc _encode_term onexit  
  27.     delcom ml  
  28.     return  
  29.    
  30. #deffunc __FromSJIS@mod_encode str _src, int srcCodepage, var dest, int destCodepage, local src, local srcSize, local destSize, local pdwMode  
  31.     pdwMode = 0  
  32.     srcSize = -1  
  33.     destSize= 0  
  34.     src        = _src  
  35.     sdim dest  
  36.     MuLang_ConvertString ml, pdwMode, srcCodepage, destCodepage, src, srcSize, dest, destSize  
  37.     sdim dest, destSize + 1  
  38.     MuLang_ConvertString ml, pdwMode, srcCodepage, destCodepage, src, srcSize, dest, destSize  
  39.     return destSize  
  40.    
  41. #defcfunc _ToSJIS@mod_encode var src, int srcCodepage, int destCodepage, local dest  
  42.     __FromSJIS src, srcCodepage, dest, destCodepage  
  43.     return dest  
  44.    
  45. #define _FromSJIS __FromSJIS@mod_encode  
  46.    
  47. #global  
  48.   
  49.   
  50. _encode_init  
  51.   
  52.   
  53. ; SJIS -> other char code   
  54. #define            sjis2eucjp(%1, %2)    _FromSJIS@mod_encode %2, CODEPAGE_S_JIS, %1, CODEPAGE_EUC_JP  
  55. #define            sjis2jis(%1, %2)    _FromSJIS@mod_encode %2, CODEPAGE_S_JIS, %1, CODEPAGE_JIS  
  56. #define            sjis2utf7n(%1, %2)    _FromSJIS@mod_encode %2, CODEPAGE_S_JIS, %1, CODEPAGE_UTF_7  
  57. #define            sjis2utf8n(%1, %2)    _FromSJIS@mod_encode %2, CODEPAGE_S_JIS, %1, CODEPAGE_UTF_8  
  58.    
  59. ; other char code -> SJIS  
  60. #define ctype    eucjp2sjis(%1)        _ToSJIS@mod_encode(%1, CODEPAGE_EUC_JP, CODEPAGE_S_JIS)  
  61. #define ctype    jis2sjis(%1)        _ToSJIS@mod_encode(%1, CODEPAGE_JIS,    CODEPAGE_S_JIS)  
  62. #define ctype    utf7n2sjis(%1)        _ToSJIS@mod_encode(%1, CODEPAGE_UTF_7,  CODEPAGE_S_JIS)  
  63. #define ctype    utf8n2sjis(%1)        _ToSJIS@mod_encode(%1, CODEPAGE_UTF_8,  CODEPAGE_S_JIS)  
  64.   
  65. ////////////////////////////////match  
  66. #uselib"kernel32.dll"  
  67.   
  68. #cfunc global IsDBCSLeadByteEx "IsDBCSLeadByteEx" int,int  
  69. #define global ctype MB1(%1) IsDBCSLeadByteEx(0,%1)  
  70. #module  
  71. #defcfunc match str buf1_,str buf2_  
  72. buf1=buf1_  
  73. buf2=buf2_  
  74. buf3=""  
  75. hyoka=0  
  76. index=0  
  77. count=0  
  78.    data_(3)=0  
  79.    data_(2)=0  
  80.    data_(1)=0  
  81.    data_(0)=0  
  82. while(1)  
  83.  while(1)  
  84.   data=peek(buf1,index)  
  85.   if(MB1(data)){  
  86.    pre_index=index  
  87.    data_(count)=peek(buf1,index)  
  88.    index+  
  89.    count+  
  90.    data_(count)=peek(buf1,index)  
  91.    index+  
  92.    count+  
  93.   }else{  
  94.    pre_index=index  
  95.    data_(count)=peek(buf1,index)  
  96.    index+  
  97.    count+  
  98.   }  
  99.   if(count>=3||data=0){  
  100.    buf3=strf("%c",data_(0))+strf("%c",data_(1))+strf("%c",data_(2))+strf("%c",data_(3))  
  101.    data_(3)=0  
  102.    data_(2)=0  
  103.    data_(1)=0  
  104.    data_(0)=0  
  105.    count=0  
  106.    _break  
  107.   }  
  108.  wend  
  109.  index=pre_index  
  110. // mes buf3  
  111.  if(instr(buf2,0,buf3)>=0){  
  112.   
  113.    hyoka+  
  114.   
  115.   
  116.  }  
  117.  if peek(buf1,index)=0:_break  
  118.    
  119. wend  
  120. return hyoka  
  121. #global  
  122. //////////////////////////match  
  123.   
  124.   
  125.   
  126. #include "hspsock.as"  
  127.    
  128. onexit *exit  
  129. goto *hi  
  130. *exit  
  131.     sockclose SockId  
  132.     end  
  133. *hi  
  134.    
  135. /////定数/////////////////////////////  
  136.       
  137. ServerName="irc.freenode.net"  
  138. Port=6667  
  139. NickName=""  
  140. ChannelName="#hspDwiki_TEST"  
  141. CloseMessage="Leaving..."  
  142. MainWindowSize=400+6+21  
  143.    
  144. /////変数初期化///////////////////////  
  145.    
  146. Command=""  
  147. InputData=""  
  148. Message=""  
  149. SockId=0  
  150. sdim StringsData,65536  
  151. sdim GetData,1024  
  152. sdim send_data,1024  
  153. sdim aidata_,1024*1024*16  
  154. sdim aidata,1024*1024*16  
  155. sdim aidata_load,1024*1024*16  
  156. sdim nowgetdata,1024  
  157. sdim gyodata,1024  
  158. savefile="aigakushu.txt"  
  159. loadfile="aigakushu_load.txt"  
  160.   
  161.   
  162. /////ウィンドウ・オブジェクト配置/////  
  163.    
  164. screen 3,300,12+21+19+6+21+12,2  
  165. syscolor 15  
  166. boxf  
  167. color   
  168. sysfont 17  
  169.    
  170. pos 12,12  
  171. mes "チャンネル名"   
  172.    
  173. pos ,12+21  
  174. objsize 300-24,19  
  175. input ChannelName  
  176.    
  177. pos 300-12-88,12+21+19+6  
  178. objsize 88,21   
  179. button gosub "OK",*join  
  180.    
  181.    
  182. screen 4,300,12+21+19+6+21+12,2  
  183. syscolor 15  
  184. boxf  
  185. color   
  186. sysfont 17  
  187.    
  188. pos 12,12  
  189. mes "切断メッセージ"   
  190.    
  191. pos ,12+21  
  192. objsize 300-24,19  
  193. input CloseMessage  
  194.    
  195. pos 300-12-88,12+21+19+6  
  196. objsize 88,21   
  197. button gosub "OK",*part  
  198.    
  199. screen 5,300,12+21+19+6+21+19+6+21+21+6+21+12+21+6,2  
  200. syscolor 15  
  201. boxf  
  202. color   
  203. sysfont 17  
  204.    
  205. pos 12,12  
  206. mes "接続サーバ"   
  207.    
  208. pos ,12+21  
  209. objsize 300-24,19  
  210. input ServerName  
  211.    
  212. pos ,12+21+19+6  
  213. mes "ポート"   
  214.    
  215. pos ,12+21+19+6+21  
  216. objsize 300-24,19  
  217. input Port  
  218.    
  219. pos ,12+21+19+6+21+19+6  
  220. mes "ユーザー名"   
  221.    
  222. pos ,12+21+19+6+21+19+6+21  
  223. objsize 300-24,19  
  224. input NickName  
  225.    
  226. pos 300-12-88,12+21+19+6+21+19+6+21+21+6  
  227. objsize 88,21   
  228. button "OK",*session  
  229.    
  230.    
  231. screen 0,640,MainWindowSize+6+21+6+21  
  232. syscolor 15  
  233. boxf  
  234. color   
  235. sysfont 17  
  236.    
  237. pos 12,12  
  238. objsize 88,21  
  239. button gosub "LOGIN",*session_req  
  240.    
  241. pos 12+88+6,12  
  242. objsize 88,21  
  243. button gosub "JOIN",*join_req  
  244.    
  245. pos 12+88+6+88+6,12  
  246. objsize 88,21  
  247. button gosub "PART",*part_req  
  248.    
  249. pos 12,12+21+6  
  250. objsize 640-24,MainWindowSize-12-21-6-6-21-12  
  251. mesbox StringsData,,,4  
  252. Hmesbox=stat  
  253.    
  254. pos 12,MainWindowSize-12-21  
  255. objsize 640-88-24-6,21  
  256. input InputData  
  257. Hinput=stat  
  258.    
  259. pos 640-88-12,MainWindowSize-12-21  
  260. objsize 88,21  
  261. button gosub "OK",*talk  
  262.   
  263. pos 640-88-12,MainWindowSize-12-21+6+21  
  264. objsize 88,21  
  265. button gosub "学習OFF",*gaku  
  266. gakuid=stat  
  267.   
  268. pos 640-88-12-6-88,MainWindowSize-12-21+6+21  
  269. objsize 88,21  
  270. button gosub "発言OFF",*hatu  
  271. hatuid=stat  
  272.   
  273. pos 12,MainWindowSize-12-21+6+21+3  
  274. color  
  275. mes "読書込ファイル"  
  276.   
  277. pos 12+6+88,MainWindowSize-12-21+6+21  
  278. objsize 88,21  
  279. input savefile  
  280.   
  281. pos 12+88+6+88+6,MainWindowSize-12-21+6+21+3  
  282. color  
  283. mes "読込ファイル"  
  284.   
  285. pos 12+88+6+88+6+6+88,MainWindowSize-12-21+6+21  
  286. objsize 88,21  
  287. input loadfile  
  288.   
  289. pos 640-88-12-6-88,MainWindowSize-12-21+6+21+6+21  
  290. objsize 88,21  
  291. button gosub "UTF-8",*moji  
  292. mojiid=stat  
  293.   
  294. stop  
  295.   
  296. *moji  
  297. mojic xor 1  
  298. if mojic :objprm mojiid,"JIS":else:objprm mojiid,"UTF-8"  
  299.  return  
  300.    
  301. *gaku  
  302. ai xor 1  
  303. if ai:objprm gakuid,"学習ON":else:objprm gakuid,"学習OFF"  
  304.  return  
  305. *hatu  
  306. ht xor 1  
  307. if ht:objprm hatuid,"発言ON":else:objprm hatuid,"発言OFF"  
  308.  return  
  309. /////データチェック///////////////////  
  310.    
  311. *main  
  312. repeat  
  313. sockcheck SockID  
  314. stat_=stat  
  315. if stat_=0{  
  316.     gsel 0  
  317.     sockget GetData,1024,SockID  
  318.   
  319.  if(mojic==0){  
  320.   get_data=utf8n2sjis(GetData)  
  321.  }else{  
  322.   get_data=jis2sjis(GetData)  
  323.  }  
  324.       
  325.     StringsData+=get_data+"\n"  
  326.     objprm Hmesbox,StringsData  
  327.     sendmsg objinfo(Hmesbox,2),0xb6,0,65536  
  328.     if(instr(get_data,0,"PRIVMSG")>=0){  
  329.      if(ai){  
  330.       notesel aidata_load  
  331.    noteload loadfile  
  332.      if(1){  
  333.       nowgetdata=strmid(get_data,instr(get_data,instr(get_data,0,"PRIVMSG"),":")+instr(get_data,0,"PRIVMSG")+1,strlen(get_data)-instr(get_data,instr(get_data,0,"PRIVMSG"),":")-instr(get_data,0,"PRIVMSG")-1)  
  334.    if(ht){  
  335.     aidata_=aidata_load+aidata  
  336.    notesel aidata_  
  337.    count=0  
  338.    maxmatch=0  
  339.    countmax=notemax*5/6-1  
  340.    while(1)  
  341.     if(count>=countmax):_break  
  342.     noteget gyodata,count  
  343.  //   dialog "1: "+gyodata  
  344.  //   dialog "2: "+nowgetdata  
  345.  //   dialog "3: "+match(gyodata,nowgetdata)  
  346.     if match(gyodata,nowgetdata)>=maxmatch{  
  347.      maxmatch=match(gyodata,nowgetdata)  
  348.        
  349.      maxmatchgyo=count  
  350.     }  
  351.     count+  
  352.    wend  
  353.   // dialog "4: "+maxmatch  
  354.    if (1.0*maxmatch/strlen(nowgetdata)>=0.13||(strlen(nowgetdata)>=8&&maxmatch>=4)) && strlen(nowgetdata)>=4:noteget gyodata,maxmatchgyo+1:{  
  355.     if(rnd(100)>82){  
  356.     gosub *aitalk  
  357.    }  
  358.    }  
  359.    }  
  360.    aidata+=nowgetdata  
  361.    notesel aidata  
  362.    notesave savefile  
  363.   }  
  364.  }  
  365.  }  
  366.  if(instr(get_data,0,"PING")=0)||(instr(get_data,0,"ping")=0){  
  367.   gosub *pong  
  368.  }  
  369. }  
  370.    
  371. wait 1  
  372. loop  
  373.    
  374. /////コマンド送信////////////////////  
  375.    
  376. *enter  
  377. send_buf=""+Message+""+Command+"\n"  
  378.   
  379.   
  380.   
  381.  if(mojic==0){  
  382.   sjis2utf8n send_data,send_buf  
  383.  }else{  
  384.   sjis2jis send_data,send_buf  
  385.  }  
  386.   
  387. sockput send_data,SockId  
  388. StringsData+=""+Message+""+Command+"\n\n"  
  389. objprm Hmesbox,StringsData  
  390. sendmsg objinfo(Hmesbox,2),0xb6,0,65536  
  391. Message=""  
  392. return  
  393.    
  394. *talk  
  395.     Message="PRIVMSG "+ChannelName+" :"  
  396.     Command=InputData  
  397.     gosub *enter  
  398.     objprm Hinput,""  
  399.     return  
  400.       
  401. *aitalk  
  402.     Message="PRIVMSG "+ChannelName+" :"  
  403.     Command=gyodata  
  404.     gosub *enter  
  405.     return  
  406. *pong  
  407.     Message="PONG"  
  408.     Command=""  
  409.     gosub *enter  
  410.     return  
  411.       
  412. *join_req  
  413.     gsel 3,1  
  414.     return  
  415.    
  416. *join  
  417.     gsel 3,-1  
  418.     gsel 0  
  419.     Message="JOIN "+ChannelName  
  420.     Command=""  
  421.     gosub *enter  
  422.     objprm Hinput,""  
  423.     return  
  424.    
  425. *part_req   
  426.     gsel 4,1  
  427.     return  
  428.    
  429. *part  
  430.     gsel 4,-1  
  431.     gsel 0  
  432.     Message="PART "+ChannelName+" :"  
  433.     Command=CloseMessage  
  434.     gosub *enter  
  435.     objprm Hinput,""  
  436.     return  
  437.    
  438. *session_req  
  439.     gsel 5,1  
  440.     return  
  441.    
  442. *session  
  443.     gsel 5,-1  
  444.     gsel 0  
  445.     if once:sockclose SockId  
  446.     sockopen SockId,ServerName,Port  
  447.     sockput "USER username host server real\n",SockId  
  448.     sockput "NICK "+NickName+"\n",SockId  
  449.     once=1  
  450.   
  451.    notesel aidata  
  452.    exist savefile  
  453.    if strsize=-1{  
  454.     notesave savefile  
  455.    }  
  456.    noteload savefile  
  457.   
  458.    notesel aidata_load  
  459.    exist loadfile  
  460.    if strsize=-1{  
  461.     notesave loadfile  
  462.    }  
  463.    noteload loadfile  
  464.       
  465.     goto *main  

2010年3月28日日曜日

IRC 人工無能

糞アルゴリズムによるボット
  1. ; Character Codepage Encode module  
  2.    
  3. #ifndef __ENCODE_AS__  
  4. #define global __ENCODE_AS__  
  5.    
  6. #module "mod_encode"  
  7.    
  8. #const global CODEPAGE_S_JIS            932 ; Shift-JIS  
  9. #const global CODEPAGE_EUC_JP         51932 ; EUC-JP  
  10. #const global CODEPAGE_JIS            50220 ; iso-2022-jp(JIS)  
  11. #const global CODEPAGE_UTF_7          65000 ; utf-7  
  12. #const global CODEPAGE_UTF_8          65001 ; utf-8  
  13. #const global CODEPAGE_UNICODE         1200 ; Unicode  
  14. #const global CODEPAGE_UNICODE_BE      1201 ; Unicode(Big-Endian)  
  15. #const global CODEPAGE_AUTODET_ALL    50001 ; auto detect all  
  16. #const global CODEPAGE_AUTODET        50932 ; auto detect  
  17.    
  18. #usecom IMultiLanguage@mod_encode    "{275c23e1-3747-11d0-9fea-00aa003f8646}" \  
  19.                                     "{275c23e2-3747-11d0-9fea-00aa003f8646}"  
  20. #comfunc MuLang_ConvertString 9 var, int, int, var, var, var, var  
  21.    
  22. #deffunc _encode_init  
  23.     newcom ml, IMultiLanguage  
  24.     return  
  25.    
  26. #deffunc _encode_term onexit  
  27.     delcom ml  
  28.     return  
  29.    
  30. #deffunc __FromSJIS@mod_encode str _src, int srcCodepage, var dest, int destCodepage, local src, local srcSize, local destSize, local pdwMode  
  31.     pdwMode = 0  
  32.     srcSize = -1  
  33.     destSize= 0  
  34.     src        = _src  
  35.     sdim dest  
  36.     MuLang_ConvertString ml, pdwMode, srcCodepage, destCodepage, src, srcSize, dest, destSize  
  37.     sdim dest, destSize + 1  
  38.     MuLang_ConvertString ml, pdwMode, srcCodepage, destCodepage, src, srcSize, dest, destSize  
  39.     return destSize  
  40.    
  41. #defcfunc _ToSJIS@mod_encode var src, int srcCodepage, int destCodepage, local dest  
  42.     __FromSJIS src, srcCodepage, dest, destCodepage  
  43.     return dest  
  44.    
  45. #define _FromSJIS __FromSJIS@mod_encode  
  46.    
  47. #global  
  48.   
  49.   
  50. _encode_init  
  51.   
  52.   
  53. ; SJIS -> other char code   
  54. #define            sjis2eucjp(%1, %2)    _FromSJIS@mod_encode %2, CODEPAGE_S_JIS, %1, CODEPAGE_EUC_JP  
  55. #define            sjis2jis(%1, %2)    _FromSJIS@mod_encode %2, CODEPAGE_S_JIS, %1, CODEPAGE_JIS  
  56. #define            sjis2utf7n(%1, %2)    _FromSJIS@mod_encode %2, CODEPAGE_S_JIS, %1, CODEPAGE_UTF_7  
  57. #define            sjis2utf8n(%1, %2)    _FromSJIS@mod_encode %2, CODEPAGE_S_JIS, %1, CODEPAGE_UTF_8  
  58.    
  59. ; other char code -> SJIS  
  60. #define ctype    eucjp2sjis(%1)        _ToSJIS@mod_encode(%1, CODEPAGE_EUC_JP, CODEPAGE_S_JIS)  
  61. #define ctype    jis2sjis(%1)        _ToSJIS@mod_encode(%1, CODEPAGE_JIS,    CODEPAGE_S_JIS)  
  62. #define ctype    utf7n2sjis(%1)        _ToSJIS@mod_encode(%1, CODEPAGE_UTF_7,  CODEPAGE_S_JIS)  
  63. #define ctype    utf8n2sjis(%1)        _ToSJIS@mod_encode(%1, CODEPAGE_UTF_8,  CODEPAGE_S_JIS)  
  64.   
  65. ////////////////////////////////match  
  66. #uselib"kernel32.dll"  
  67.   
  68. #cfunc global IsDBCSLeadByteEx "IsDBCSLeadByteEx" int,int  
  69. #define global ctype MB1(%1) IsDBCSLeadByteEx(0,%1)  
  70. #module  
  71. #defcfunc match str buf1_,str buf2_  
  72. buf1=buf1_  
  73. buf2=buf2_  
  74. buf3=""  
  75. hyoka=0  
  76. index=0  
  77. count=0  
  78.    data_(3)=0  
  79.    data_(2)=0  
  80.    data_(1)=0  
  81.    data_(0)=0  
  82. while(1)  
  83.  while(1)  
  84.   data=peek(buf1,index)  
  85.   if(MB1(data)){  
  86.    pre_index=index  
  87.    data_(count)=peek(buf1,index)  
  88.    index+  
  89.    count+  
  90.    data_(count)=peek(buf1,index)  
  91.    index+  
  92.    count+  
  93.   }else{  
  94.    pre_index=index  
  95.    data_(count)=peek(buf1,index)  
  96.    index+  
  97.    count+  
  98.   }  
  99.   if(count>=3){  
  100.    buf3=strf("%c",data_(0))+strf("%c",data_(1))+strf("%c",data_(2))+strf("%c",data_(3))  
  101.    data_(3)=0  
  102.    data_(2)=0  
  103.    data_(1)=0  
  104.    data_(0)=0  
  105.    count=0  
  106.    _break  
  107.   }  
  108.  wend  
  109.  index=pre_index  
  110. // mes buf3  
  111.  if(instr(buf2,0,buf3)>=0){  
  112.   
  113.    hyoka+  
  114.   
  115.   
  116.  }  
  117.  if peek(buf1,index)=0:_break  
  118.    
  119. wend  
  120. return hyoka  
  121. #global  
  122. //////////////////////////match  
  123.   
  124.   
  125.   
  126. #include "hspsock.as"  
  127.    
  128. onexit *exit  
  129. goto *hi  
  130. *exit  
  131.     sockclose SockId  
  132.     end  
  133. *hi  
  134.    
  135. /////定数/////////////////////////////  
  136.       
  137. ServerName="irc.freenode.net"  
  138. Port=6667  
  139. NickName=""  
  140. ChannelName="#hspDwiki_TEST"  
  141. CloseMessage="Leaving..."  
  142. MainWindowSize=400+6+21  
  143.    
  144. /////変数初期化///////////////////////  
  145.    
  146. Command=""  
  147. InputData=""  
  148. Message=""  
  149. SockId=0  
  150. sdim StringsData,65536  
  151. sdim GetData,1024  
  152. sdim send_data,1024  
  153. sdim aidata,256*256  
  154. sdim nowgetdata,1024  
  155. sdim gyodata,1024  
  156.   
  157.    notesel aidata  
  158.    exist "aigakushu.txt"  
  159.    if strsize=-1{  
  160.     notesave "aigakushu.txt"  
  161.    }  
  162.    noteload "aigakushu.txt"  
  163.   
  164. /////ウィンドウ・オブジェクト配置/////  
  165.    
  166. screen 3,300,12+21+19+6+21+12,2  
  167. syscolor 15  
  168. boxf  
  169. color   
  170. sysfont 17  
  171.    
  172. pos 12,12  
  173. mes "チャンネル名"   
  174.    
  175. pos ,12+21  
  176. objsize 300-24,19  
  177. input ChannelName  
  178.    
  179. pos 300-12-88,12+21+19+6  
  180. objsize 88,21   
  181. button gosub "OK",*join  
  182.    
  183.    
  184. screen 4,300,12+21+19+6+21+12,2  
  185. syscolor 15  
  186. boxf  
  187. color   
  188. sysfont 17  
  189.    
  190. pos 12,12  
  191. mes "切断メッセージ"   
  192.    
  193. pos ,12+21  
  194. objsize 300-24,19  
  195. input CloseMessage  
  196.    
  197. pos 300-12-88,12+21+19+6  
  198. objsize 88,21   
  199. button gosub "OK",*part  
  200.    
  201. screen 5,300,12+21+19+6+21+19+6+21+21+6+21+12+21+6,2  
  202. syscolor 15  
  203. boxf  
  204. color   
  205. sysfont 17  
  206.    
  207. pos 12,12  
  208. mes "接続サーバ"   
  209.    
  210. pos ,12+21  
  211. objsize 300-24,19  
  212. input ServerName  
  213.    
  214. pos ,12+21+19+6  
  215. mes "ポート"   
  216.    
  217. pos ,12+21+19+6+21  
  218. objsize 300-24,19  
  219. input Port  
  220.    
  221. pos ,12+21+19+6+21+19+6  
  222. mes "ユーザー名"   
  223.    
  224. pos ,12+21+19+6+21+19+6+21  
  225. objsize 300-24,19  
  226. input NickName  
  227.    
  228. pos 300-12-88,12+21+19+6+21+19+6+21+21+6  
  229. objsize 88,21   
  230. button "OK",*session  
  231.    
  232.    
  233. screen 0,640,MainWindowSize+6+21  
  234. syscolor 15  
  235. boxf  
  236. color   
  237. sysfont 17  
  238.    
  239. pos 12,12  
  240. objsize 88,21  
  241. button gosub "LOGIN",*session_req  
  242.    
  243. pos 12+88+6,12  
  244. objsize 88,21  
  245. button gosub "JOIN",*join_req  
  246.    
  247. pos 12+88+6+88+6,12  
  248. objsize 88,21  
  249. button gosub "PART",*part_req  
  250.    
  251. pos 12,12+21+6  
  252. objsize 640-24,MainWindowSize-12-21-6-6-21-12  
  253. mesbox StringsData,,,4  
  254. Hmesbox=stat  
  255.    
  256. pos 12,MainWindowSize-12-21  
  257. objsize 640-88-24-6,21  
  258. input InputData  
  259. Hinput=stat  
  260.    
  261. pos 640-88-12,MainWindowSize-12-21  
  262. objsize 88,21  
  263. button gosub "OK",*talk  
  264.   
  265. pos 640-88-12,MainWindowSize-12-21+6+21  
  266. objsize 88,21  
  267. button gosub "学習OFF",*gaku  
  268. gakuid=stat  
  269.   
  270. pos 640-88-12-6-88,MainWindowSize-12-21+6+21  
  271. objsize 88,21  
  272. button gosub "発言OFF",*hatu  
  273. hatuid=stat  
  274. stop  
  275.   
  276. *gaku  
  277. ai xor 1  
  278. if ai:objprm gakuid,"学習ON":else:objprm gakuid,"学習OFF"  
  279.  return  
  280. *hatu  
  281. ht xor 1  
  282. if ht:objprm hatuid,"発言ON":else:objprm hatuid,"発言OFF"  
  283.  return  
  284. /////データチェック///////////////////  
  285.    
  286. *main  
  287. repeat  
  288. sockcheck SockID  
  289. stat_=stat  
  290. if stat_=0{  
  291.     gsel 0  
  292.     sockget GetData,1024,SockID  
  293.   
  294.  get_data=utf8n2sjis(GetData)  
  295.       
  296.     StringsData+=get_data+"\n"  
  297.     objprm Hmesbox,StringsData  
  298.     sendmsg objinfo(Hmesbox,2),0xb6,0,65536  
  299.     if(instr(get_data,0,"PRIVMSG")>=0){  
  300.      if(ai){  
  301.      if(1){  
  302.       nowgetdata=strmid(get_data,instr(get_data,instr(get_data,0,"PRIVMSG"),":")+instr(get_data,0,"PRIVMSG")+1,strlen(get_data)-instr(get_data,instr(get_data,0,"PRIVMSG"),":")-instr(get_data,0,"PRIVMSG")-1)  
  303.    if(ht){  
  304.    notesel aidata  
  305.    count=0  
  306.    maxmatch=0  
  307.    while(1)  
  308.     if(count>=notemax-1):_break  
  309.     noteget gyodata,count  
  310.  //   dialog "1: "+gyodata  
  311.  //   dialog "2: "+nowgetdata  
  312.  //   dialog "3: "+match(gyodata,nowgetdata)  
  313.     if match(gyodata,nowgetdata)>=maxmatch{  
  314.      maxmatch=match(gyodata,nowgetdata)  
  315.        
  316.      maxmatchgyo=count  
  317.     }  
  318.     count+  
  319.    wend  
  320.   // dialog "4: "+maxmatch  
  321.    if 1.0*maxmatch/strlen(nowgetdata)>=0.3:noteget gyodata,maxmatchgyo+1:{  
  322.     if(rnd(100)>60){  
  323.     gosub *aitalk  
  324.    }  
  325.    }  
  326.    }  
  327.    aidata+=nowgetdata  
  328.    notesel aidata  
  329.    notesave "aigakushu.txt"  
  330.   }  
  331.  }  
  332.  }  
  333. }  
  334.    
  335. wait 1  
  336. loop  
  337.    
  338. /////コマンド送信////////////////////  
  339.    
  340. *enter  
  341. send_buf=""+Message+""+Command+"\n"  
  342. sjis2utf8n send_data,send_buf  
  343. sockput send_data,SockId  
  344. StringsData+=""+Message+""+Command+"\n\n"  
  345. objprm Hmesbox,StringsData  
  346. sendmsg objinfo(Hmesbox,2),0xb6,0,65536  
  347. Message=""  
  348. return  
  349.    
  350. *talk  
  351.     Message="PRIVMSG "+ChannelName+" :"  
  352.     Command=InputData  
  353.     gosub *enter  
  354.     objprm Hinput,""  
  355.     return  
  356.       
  357. *aitalk  
  358.     Message="NOTICE "+ChannelName+" :"  
  359.     Command=gyodata  
  360.     gosub *enter  
  361.     return  
  362.       
  363. *join_req  
  364.     gsel 3,1  
  365.     return  
  366.    
  367. *join  
  368.     gsel 3,-1  
  369.     gsel 0  
  370.     Message="JOIN "+ChannelName  
  371.     Command=""  
  372.     gosub *enter  
  373.     objprm Hinput,""  
  374.     return  
  375.    
  376. *part_req   
  377.     gsel 4,1  
  378.     return  
  379.    
  380. *part  
  381.     gsel 4,-1  
  382.     gsel 0  
  383.     Message="PART "+ChannelName+" :"  
  384.     Command=CloseMessage  
  385.     gosub *enter  
  386.     objprm Hinput,""  
  387.     return  
  388.    
  389. *session_req  
  390.     gsel 5,1  
  391.     return  
  392.    
  393. *session  
  394.     gsel 5,-1  
  395.     gsel 0  
  396.     if once:sockclose SockId  
  397.     sockopen SockId,ServerName,Port  
  398.     sockput "USER username host server real\n",SockId  
  399.     sockput "NICK "+NickName+"\n",SockId  
  400.     once=1  
  401.     goto *main  

機械語をそのまま打ち込むプログラミング言語

uselib "user32.dll"
efunc MessageBoxA

func main{
38 A8 B2 6D
F3 C1 79 DG
[loop_start] //ラベル
5b 75 82 c1

75 05 [@loop_start]
// 75 05 ・・・ JNZ [@loop_start] loop_startにある一定の条件でジャンプ
FF 25(@MessageBoxA)
//間接絶対naerコール
E8(@kkk)
//普通のnearコール
}

func kkk{
4b cc 48 a2
}


こんな感じの言語ってどうだろうか。言語としての機能はAPIのサポート。関数。ラベル
コンパイラというよりはEXEのデータ構造に準拠したファイルを生成する訓練にはなるかなー

2010年3月27日土曜日

IRCリーバシ改良版

一気に文字列を送りつけると送信元と受信側で表示にラグが発生するので
間隔をあけて送信するようにしました。
あと色付けするとその分送る文字数が増えるので 軽くするために色はありません。

  1. var turn=0;//0黒 1 白 ターン  
  2. var data = new Array(8*8);   
  3. var data2 = new Array(8*8);   
  4. var channel_g;  
  5. var end=0;  
  6. var timer_id;  
  7.   
  8. function event::onChannelText(prefix, channel, text){  
  9.  channelchannel_g=channel;  
  10.  if(text.match(/^#/i)){  
  11.     
  12.   cmd=""+text.match(/[a-z]+$/i);  
  13.   var ddd=text.match(/(\d)/g);  
  14.   
  15.   if(ddd!=null){  
  16.   
  17.    x=ddd[0];  
  18.    y=ddd[1];  
  19.    if(end==1){  
  20.     send(channel,"<color navy,silver><ゲームを再開してください>");  
  21.     return(0);  
  22.    }  
  23.    if(x>8||x==0||y>8||y==0){  
  24.     send(channel,"<color navy,silver><不正な入力です>");  
  25.    }else{  
  26.     if(putable(x-1,y-1)==0){  
  27.      send(channel,"<color navy,silver><そこには打てません>");  
  28.        
  29.     }else{  
  30.      copyArr12();  
  31.      put(x-1,y-1);  
  32.      turnChange()  
  33.      if(numberOfPutable()==0){  
  34.       turnChange()  
  35.       if(numberOfPutable()==0){  
  36.          
  37.        if(black_n()>white_n()){  
  38.         send(channel,"<color navy,silver><黒の勝ち>");  
  39.        }  
  40.        if(black_n()<white_n()){  
  41.         send(channel,"<color navy,silver><白の勝ち>");  
  42.        }  
  43.        if(black_n()==white_n()){  
  44.         send(channel,"<color navy,silver><引き分け>");  
  45.        }  
  46.        draw();  
  47.        end=1;  
  48.        return(0);  
  49.       }else{  
  50.        send(channel,"<color navy,silver><打つ手がないのでパス>");  
  51.       }  
  52.      }  
  53.      draw();  
  54.        
  55.     }  
  56.    }  
  57.   }  
  58.   
  59.   if(cmd!=null){  
  60.    if(cmd.search(/^new$/i)!=-1){  
  61.     send(channel,"<color navy,silver><ゲームを開始します>");  
  62.     newGame();  
  63.     draw();  
  64.     end=0;  
  65.    }  
  66.    if(cmd.search(/^debug$/i)!=-1){  
  67.     send(channel,"<color navy,silver><デバッグを開始します>");  
  68.     newGame();  
  69.     debug();  
  70.     draw();  
  71.     end=0;  
  72.    }  
  73.    if(cmd.search(/^matta$/i)!=-1){  
  74.     if(matta_ok==1){  
  75.      send(channel,"<color navy,silver><\"待った\"しました>");  
  76.      copyArr21();  
  77.      turnChange()  
  78.      draw();  
  79.      end=0;  
  80.      matta_ok=0;  
  81.     }else{  
  82.      send(channel,"<color navy,silver><\"待った\"できません>");  
  83.     }  
  84.    }  
  85.   }  
  86.  }  
  87. }  
  88.   
  89. function newGame(){  
  90.  turn=0;  
  91.  for(ix=0;ix<8;ix++){  
  92.   for(iy=0;iy<8;iy++){  
  93.    data[(ix)*8+(iy)] = 0;  
  94.   }  
  95.  }  
  96.  data[(3)*8+(3)]=1; //1黒?  
  97.  data[(4)*8+(4)]=1; //2白  
  98.  data[(4)*8+(3)]=2;  
  99.  data[(3)*8+(4)]=2;  
  100. }  
  101.   
  102. var strbuf = new Array(8);   
  103.   
  104. function draw(){  
  105.  send(channel_g,"<color>....1..2..3..4..5..6..7..8 ←X  Y↓ 書式 #X Y");  
  106.  for(iy=0;iy<8;iy++){  
  107.   str="";  
  108.   str+=""+(iy+1);  
  109.   for(ix=0;ix<8;ix++){  
  110.      
  111.    if(data[(ix)*8+(iy)]==0){  
  112.     if(putable(ix,iy)==0){  
  113.      str+=""+"..・";  
  114.     }else{  
  115.      str+=""+"*"  
  116.     }  
  117.    }  
  118.    if(data[(ix)*8+(iy)]==1){  
  119.     str+=""+"●";  
  120.    }  
  121.    if(data[(ix)*8+(iy)]==2){  
  122.     str+=""+"○";  
  123.    }  
  124.   }  
  125.   if(iy==5){  
  126.    str+="  balck "+black_n();  
  127.   }  
  128.   if(iy==6){  
  129.    str+="  white "+white_n();  
  130.   }  
  131.   if(iy==7){  
  132.    if(turn==0){  
  133.    str+="  黒の番です";  
  134.    }else{  
  135.    str+="  白の番です";  
  136.    }  
  137.   }  
  138.   //send(channel_g,str);  
  139.   strbuf[iy]=str;  
  140.     
  141.  }  
  142.   
  143.  timer_id=setTimeout(myTimer,2200);  
  144.    
  145. }  
  146.   
  147. var ixxx=0;  
  148.   
  149. function myTimer(){  
  150.  send(channel_g,strbuf[ixxx]);  
  151.   
  152.  ixxx++;  
  153.  if(ixxx==9){  
  154.   ixxx=0;  
  155.  }else{  
  156.   timer_id=setTimeout(myTimer,2200);  
  157.  }  
  158. }  
  159.   
  160. function black_n(){  
  161.  amount=0;  
  162.  for(i=0;i<64;i++){  
  163.   if(data[i]==1){  
  164.    amount++;  
  165.   }  
  166.  }  
  167.  return(amount);  
  168. }  
  169.   
  170. function white_n(){  
  171.  amount=0;  
  172.  for(i=0;i<64;i++){  
  173.   if(data[i]==2){  
  174.    amount++;  
  175.   }  
  176.  }  
  177.  return(amount);  
  178. }  
  179.   
  180. function putable(x,y){  
  181.  rr=0;  
  182.  if(data[(x)*8+(y)]==0){  
  183.   if(turn==0){  
  184.    a1=2;  
  185.    a2=1;  
  186.   }else{  
  187.    a1=1;  
  188.    a2=2;  
  189.   }  
  190.   if(x!=0&&y!=0){  
  191.    m=1;  
  192.    a=0;  
  193.    while(1){  
  194.     if(data[(x-m)*8+(y-m)]==a1){  
  195.      a=1;  
  196.     }  
  197.     if(data[(x-m)*8+(y-m)]==a2){  
  198.      if(a==1){rr=1;}  
  199.      break;  
  200.     }  
  201.     if(data[(x-m)*8+(y-m)]==0){  
  202.      break;  
  203.     }  
  204.     if(x-m==0||y-m==0){  
  205.      break;  
  206.     }  
  207.     m++;  
  208.       
  209.    }  
  210.   }  
  211.     
  212.   if(y!=0){  
  213.    m=1;  
  214.    a=0;  
  215.    while(1){  
  216.     if(data[(x)*8+(y-m)]==a1){  
  217.      a=1;  
  218.     }  
  219.     if(data[(x)*8+(y-m)]==a2){  
  220.      if(a==1){rr=1;}  
  221.      break;  
  222.     }  
  223.     if(data[(x)*8+(y-m)]==0){  
  224.      break;  
  225.     }  
  226.     if(y-m==0){  
  227.      break;  
  228.     }  
  229.     m++;  
  230.       
  231.    }  
  232.   }  
  233.     
  234.   if(x!=7&&y!=0){  
  235.    m=1;  
  236.    a=0;  
  237.    while(1){  
  238.     if(data[(x+m)*8+(y-m)]==a1){  
  239.      a=1;  
  240.     }  
  241.     if(data[(x+m)*8+(y-m)]==a2){  
  242.      if(a==1){rr=1;}  
  243.      break;  
  244.     }  
  245.     if(data[(x+m)*8+(y-m)]==0){  
  246.      break;  
  247.     }  
  248.     if(x+m==7||y-m==0){  
  249.      break;  
  250.     }  
  251.     m++;  
  252.       
  253.    }  
  254.   }  
  255.     
  256.   if(x!=7){  
  257.    m=1;  
  258.    a=0;  
  259.    while(1){  
  260.     if(data[(x+m)*8+(y)]==a1){  
  261.      a=1;  
  262.     }  
  263.     if(data[(x+m)*8+(y)]==a2){  
  264.      if(a==1){rr=1;}  
  265.      break;  
  266.     }  
  267.     if(data[(x+m)*8+(y)]==0){  
  268.      break;  
  269.     }  
  270.     if(x+m==7){  
  271.      break;  
  272.     }  
  273.     m++;  
  274.       
  275.    }  
  276.   }  
  277.     
  278.   if(x!=7&&y!=7){  
  279.    m=1;  
  280.    a=0;  
  281.    while(1){  
  282.     if(data[(x+m)*8+(y+m)]==a1){  
  283.      a=1;  
  284.     }  
  285.     if(data[(x+m)*8+(y+m)]==a2){  
  286.      if(a==1){rr=1;}  
  287.      break;  
  288.     }  
  289.     if(data[(x+m)*8+(y+m)]==0){  
  290.      break;  
  291.     }  
  292.     if(x+m==7||y+m==7){  
  293.      break;  
  294.     }  
  295.     m++;  
  296.       
  297.    }  
  298.   }  
  299.     
  300.   if(y!=7){  
  301.    m=1;  
  302.    a=0;  
  303.    while(1){  
  304.     if(data[(x)*8+(y+m)]==a1){  
  305.      a=1;  
  306.     }  
  307.     if(data[(x)*8+(y+m)]==a2){  
  308.      if(a==1){rr=1;}  
  309.      break;  
  310.     }  
  311.     if(data[(x)*8+(y+m)]==0){  
  312.      break;  
  313.     }  
  314.     if(y+m==7){  
  315.      break;  
  316.     }  
  317.     m++;  
  318.       
  319.    }  
  320.   }  
  321.   if(x!=0&&y!=7){  
  322.    m=1;  
  323.    a=0;  
  324.    while(1){  
  325.     if(data[(x-m)*8+(y+m)]==a1){  
  326.      a=1;  
  327.     }  
  328.     if(data[(x-m)*8+(y+m)]==a2){  
  329.      if(a==1){rr=1;}  
  330.      break;  
  331.     }  
  332.     if(data[(x-m)*8+(y+m)]==0){  
  333.      break;  
  334.     }  
  335.     if(x-m==0||y+m==7){  
  336.      break;  
  337.     }  
  338.     m++;  
  339.       
  340.    }  
  341.   }  
  342.   if(x!=0){  
  343.    m=1;  
  344.    a=0;  
  345.    while(1){  
  346.     if(data[(x-m)*8+(y)]==a1){  
  347.      a=1;  
  348.     }  
  349.     if(data[(x-m)*8+(y)]==a2){  
  350.      if(a==1){rr=1;}  
  351.      break;  
  352.     }  
  353.     if(data[(x-m)*8+(y)]==0){  
  354.      break;  
  355.     }  
  356.     if(x-m==0){  
  357.      break;  
  358.     }  
  359.     m++;  
  360.      
  361.    }  
  362.   }  
  363.  }  
  364.  return(rr);  
  365. }  
  366.   
  367. function put(x,y){  
  368.   if(turn==0){  
  369.    a1=2;  
  370.    a2=1;  
  371.   }else{  
  372.    a1=1;  
  373.    a2=2;  
  374.   }  
  375.   if(x!=0&&y!=0){  
  376.    m=1;  
  377.    a=0;  
  378.    while(1){  
  379.     if(data[(x-m)*8+(y-m)]==a1){  
  380.      a=1;  
  381.     }  
  382.     if(data[(x-m)*8+(y-m)]==a2){  
  383.      if(a==1){lineChange(x,y,x-m,y-m);}  
  384.      break;  
  385.     }  
  386.     if(data[(x-m)*8+(y-m)]==0){  
  387.      break;  
  388.     }  
  389.     if(x-m==0||y-m==0){  
  390.      break;  
  391.     }  
  392.     m++;  
  393.       
  394.    }  
  395.   }  
  396.     
  397.   if(y!=0){  
  398.    m=1;  
  399.    a=0;  
  400.    while(1){  
  401.     if(data[(x)*8+(y-m)]==a1){  
  402.      a=1;  
  403.     }  
  404.     if(data[(x)*8+(y-m)]==a2){  
  405.      if(a==1){lineChange(x,y,x,y-m);}  
  406.      break;  
  407.     }  
  408.     if(data[(x)*8+(y-m)]==0){  
  409.      break;  
  410.     }  
  411.     if(y-m==0){  
  412.      break;  
  413.     }  
  414.     m++;  
  415.       
  416.    }  
  417.   }  
  418.     
  419.   if(x!=7&&y!=0){  
  420.    m=1;  
  421.    a=0;  
  422.    while(1){  
  423.     if(data[(x+m)*8+(y-m)]==a1){  
  424.      a=1;  
  425.     }  
  426.     if(data[(x+m)*8+(y-m)]==a2){  
  427.      if(a==1){lineChange(x,y,x+m,y-m);}  
  428.      break;  
  429.     }  
  430.     if(data[(x+m)*8+(y-m)]==0){  
  431.      break;  
  432.     }  
  433.     if(x+m==7||y-m==0){  
  434.      break;  
  435.     }  
  436.     m++;  
  437.       
  438.    }  
  439.   }  
  440.     
  441.   if(x!=7){  
  442.    m=1;  
  443.    a=0;  
  444.    while(1){  
  445.     if(data[(x+m)*8+(y)]==a1){  
  446.      a=1;  
  447.     }  
  448.     if(data[(x+m)*8+(y)]==a2){  
  449.      if(a==1){lineChange(x,y,x+m,y);}  
  450.      break;  
  451.     }  
  452.     if(data[(x+m)*8+(y)]==0){  
  453.      break;  
  454.     }  
  455.     if(x+m==7){  
  456.      break;  
  457.     }  
  458.     m++;  
  459.       
  460.    }  
  461.   }  
  462.     
  463.   if(x!=7&&y!=7){  
  464.    m=1;  
  465.    a=0;  
  466.    while(1){  
  467.     if(data[(x+m)*8+(y+m)]==a1){  
  468.      a=1;  
  469.     }  
  470.     if(data[(x+m)*8+(y+m)]==a2){  
  471.      if(a==1){lineChange(x,y,x+m,y+m);}  
  472.      break;  
  473.     }  
  474.     if(data[(x+m)*8+(y+m)]==0){  
  475.      break;  
  476.     }  
  477.     if(x+m==7||y+m==7){  
  478.      break;  
  479.     }  
  480.     m++;  
  481.       
  482.    }  
  483.   }  
  484.     
  485.   if(y!=7){  
  486.    m=1;  
  487.    a=0;  
  488.    while(1){  
  489.     if(data[(x)*8+(y+m)]==a1){  
  490.      a=1;  
  491.     }  
  492.     if(data[(x)*8+(y+m)]==a2){  
  493.      if(a==1){lineChange(x,y,x,y+m);}  
  494.      break;  
  495.     }  
  496.     if(data[(x)*8+(y+m)]==0){  
  497.      break;  
  498.     }  
  499.     if(y+m==7){  
  500.      break;  
  501.     }  
  502.     m++;  
  503.       
  504.    }  
  505.   }  
  506.   if(x!=0&&y!=7){  
  507.    m=1;  
  508.    a=0;  
  509.    while(1){  
  510.     if(data[(x-m)*8+(y+m)]==a1){  
  511.      a=1;  
  512.     }  
  513.     if(data[(x-m)*8+(y+m)]==a2){  
  514.      if(a==1){lineChange(x,y,x-m,y+m);}  
  515.      break;  
  516.     }  
  517.     if(data[(x-m)*8+(y+m)]==0){  
  518.      break;  
  519.     }  
  520.     if(x-m==0||y+m==7){  
  521.      break;  
  522.     }  
  523.     m++;  
  524.       
  525.    }  
  526.   }  
  527.   if(x!=0){  
  528.    m=1;  
  529.    a=0;  
  530.    while(1){  
  531.     if(data[(x-m)*8+(y)]==a1){  
  532.      a=1;  
  533.     }  
  534.     if(data[(x-m)*8+(y)]==a2){  
  535.      if(a==1){lineChange(x,y,x-m,y);}  
  536.      break;  
  537.     }  
  538.     if(data[(x-m)*8+(y)]==0){  
  539.      break;  
  540.     }  
  541.     if(x-m==0){  
  542.      break;  
  543.     }  
  544.     m++;  
  545.      
  546.    }  
  547.   }  
  548. }  
  549.   
  550. function lineChange(x1,y1,x2,y2){  
  551.  if(turn==0){  
  552.   a=1;  
  553.  }else{  
  554.   a=2;  
  555.  }  
  556.  mx=0  
  557.  my=0  
  558.  while(1){  
  559.   data[(x1+mx)*8+(y1+my)]=a;  
  560.   if(x2==x1+mx&&y2==y1+my){break;}  
  561.   if(x2-x1>0){mx++;}  
  562.   if(x2-x1<0){mx--;}  
  563.   if(y2-y1>0){my++;}  
  564.   if(y2-y1<0){my--;}  
  565.  }  
  566. }  
  567.   
  568. function numberOfPutable(){  
  569.  amount=0;  
  570.  for(ix=0;ix<8;ix++){  
  571.   for(iy=0;iy<8;iy++){  
  572.    if(putable(ix,iy)==1){amount++;}  
  573.   }  
  574.  }  
  575.  //send(channel_g,""+amount);  
  576.  return(amount);  
  577. }  
  578.   
  579. function turnChange(){  
  580.  if(turn==0){  
  581.   turn=1;  
  582.  }else{  
  583.   turn=0;  
  584.  }  
  585. }  
  586. matta_ok=0;  
  587. function copyArr12(){  
  588.  matta_ok=1;  
  589.  for(i=0;i<64;i++){  
  590.   data2[i]=data[i];  
  591.  }  
  592. }  
  593. function copyArr21(){  
  594.  for(i=0;i<64;i++){  
  595.    data[i]=data2[i];  
  596.  }  
  597. }  
  598. function debug(){  
  599. data[0]=2;  
  600. data[1]=2;  
  601. data[2]=2;  
  602. data[3]=2;  
  603. data[4]=2;  
  604. data[5]=2;  
  605. data[6]=2;  
  606. data[7]=2;  
  607.   
  608. data[8]=1;  
  609. data[9]=2;  
  610. data[10]=1;  
  611. data[11]=2;  
  612. data[12]=2;  
  613. data[13]=1;  
  614. data[14]=0;  
  615. data[15]=0;  
  616.   
  617. data[16]=1;  
  618. data[17]=1;  
  619. data[18]=2;  
  620. data[19]=1;  
  621. data[20]=1;  
  622. data[21]=1;  
  623. data[22]=1;  
  624. data[23]=1;  
  625.   
  626. data[24]=1;  
  627. data[25]=1;  
  628. data[26]=1;  
  629. data[27]=2;  
  630. data[28]=1;  
  631. data[29]=2;  
  632. data[30]=2;  
  633. data[31]=2;  
  634.   
  635. data[32]=1;  
  636. data[33]=1;  
  637. data[34]=2;  
  638. data[35]=1;  
  639. data[36]=2;  
  640. data[37]=2;  
  641. data[38]=2;  
  642. data[39]=2;  
  643.   
  644. data[40]=1;  
  645. data[41]=1;  
  646. data[42]=1;  
  647. data[43]=1;  
  648. data[44]=1;  
  649. data[45]=2;  
  650. data[46]=2;  
  651. data[47]=1;  
  652.   
  653. data[48]=1;  
  654. data[49]=1;  
  655. data[50]=2;  
  656. data[51]=2;  
  657. data[52]=2;  
  658. data[53]=2;  
  659. data[54]=2;  
  660. data[55]=0;  
  661.   
  662. data[56]=1;  
  663. data[57]=1;  
  664. data[58]=1;  
  665. data[59]=1;  
  666. data[60]=1;  
  667. data[61]=1;  
  668. data[62]=1;  
  669. data[63]=0;  
  670. }  

2010年3月22日月曜日

ケン○ッキーフライドチキンを作ってみた。

http://blog.livedoor.jp/knjymmt/archives/14568371.html
http://2chcopipe.blog122.fc2.com/blog-entry-3752.html
http://www.lifehacker.jp/2009/07/090728kfc.html

以上のサイトを参考にしてケン○ッキーフライドチキンを作ってみました。


ショートニングは使いませんでした。油を捨てたくなかったので。

香辛料をそろえるが面倒でした。
バジル オレガノは粉末が手に入らなくてみじん切り(?)程度のと
ガーリックはあらびきでした。

香辛料は
黒コショウ
ナツメグ
オールスパイス
バジル
オレガノ
パプリカ
チリペッパー
ガーリック
ジンジャー
タイム

を使ってみました。

しかしうまくいかず。。。
ただのから揚げになってしまいました
何かしらの香辛料の匂いはするんですが ケン○ッキーとは程遠く。。。
パウダー じゃなかったのが原因でしょうか・・・?

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)ですので、それ以下それ以上だとエラーでます。

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

はぁ。。。

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