tag:blogger.com,1999:blog-6487386938385883872024-03-06T08:32:47.570+09:00HSP3のスクリプトを垂れ流すブログ日々学習のために書いたHSP3のスクリプトを垂れ流します。
コーディングスタイルなど全て我流ですが、自分のために書いているものですのでお許しください。<a href="http://rpen.blogspot.com/2007/04/test.html">はじめにお読みください</a>ellerhttp://www.blogger.com/profile/07429654819789962794noreply@blogger.comBlogger113125tag:blogger.com,1999:blog-648738693838588387.post-84006258964709045542009-06-28T13:35:00.004+09:002009-06-28T18:47:17.482+09:00花火ゲーム(やわらかライセンス)2009<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-s6Rlm_Q7IF73Be_AaHhr5guM-5n9CTNkgANTXpVEN4Smz0YgWEVaaABUT0O2SBlGachhDs7Dx0RKZvMqkObsqk5i7rp-4pjGgkJecF_kiJhwSAHqV_qRHX43YnoctzGd16_thyphenhyphenwNqTQ/s1600-h/hanabiga2008.png"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-s6Rlm_Q7IF73Be_AaHhr5guM-5n9CTNkgANTXpVEN4Smz0YgWEVaaABUT0O2SBlGachhDs7Dx0RKZvMqkObsqk5i7rp-4pjGgkJecF_kiJhwSAHqV_qRHX43YnoctzGd16_thyphenhyphenwNqTQ/s320/hanabiga2008.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5190775910273696146" /></a><a href="http://d.hatena.ne.jp/o_mega/" target="_blank">( ゜ワ゜)ノ</a>さん原案、eller改造のミニゲーム。<br /><br /><a href="http://rpen.blogspot.com/2008/04/blog-post.html">2008年版</a>から若干改良され、コンボ機能が付きました。連続してHANABIを取るとスコアアップ!高機能を目指したスリリングな展開を楽しめます。<br style="clear:both;" /><br /><code class="hsp3"><span class="hsp3_comment">/* HANABIGA @ やわらかライセンス by eller 2009/06/28<br /> * ===============================================<br /> * HANABIGAからの改造個所:<br /> * コンボの導入<br /> * SAKURAGAからの改造個所:<br /> * "さくら" → "たまや" // "かぎや"でも良い<br /> * キャラクタの移動動作変更(ちょい簡単に)<br /> * 背景色など色合い変更<br /> * ゲームオーバー中はキャラクタを生成しないように<br /> * キャラクタ接触時にどかーん<br /> * ゲームオーバー時にどかーん<br /> * redraw 0 と redraw 1 を入れ替え<br /> * randomize追加<br /> * 640 → ginfo_winx など<br /> */</span><br /><br /><span class="hsp3_comment">//#runtime "hsplet3"</span><br /><span class="hsp3_preprocessor">#include</span> <span class="hsp3_string">"hspmath.as"</span><br /><span class="hsp3_preprocessor">#packopt</span> name <span class="hsp3_string">"hanabiga"</span><br /><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">FRAME_WAIT</span> <span class="hsp3_number">16</span><br /><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">PLAYER_SPEED</span> <span class="hsp3_number">3.0</span><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">PLAYER_SP_REDUCE</span> <span class="hsp3_number">0.8</span><br /><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">CHAR_MAX</span> <span class="hsp3_number">256</span><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">HANABI_MAX</span> <span class="hsp3_number">8</span><br /><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">CHAR_TYPE_NONE</span> <span class="hsp3_number">0</span><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">CHAR_TYPE_SA</span> <span class="hsp3_number">1</span><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">CHAR_TYPE_KU</span> <span class="hsp3_number">2</span><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">CHAR_TYPE_RA</span> <span class="hsp3_number">3</span><br /><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">CHAR_FACE_SA</span> <span class="hsp3_string">"た"</span><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">CHAR_FACE_KU</span> <span class="hsp3_string">"ま"</span><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">CHAR_FACE_RA</span> <span class="hsp3_string">"や"</span><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">CHAR_FACE_HANABI</span> <span class="hsp3_string">"・"</span><br /><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">HANABI_PARTS_NUM</span> <span class="hsp3_number">14</span><br /><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">CHAR_ROT_SP</span> <span class="hsp3_number">0.05</span><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">CHAR_ROT_MOVE</span> <span class="hsp3_number">0.8</span><br /><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">CHAR_SIZE</span> <span class="hsp3_number">16.0</span><br /><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">COMBO_TIME_MAX</span> <span class="hsp3_number">60</span><br /><br /><span class="hsp3_comment">// 準備</span><br /><span class="hsp3_comment">; screen 0, 480, 320</span><br /> <span class="hsp3_command">title</span> <span class="hsp3_string">"HANABIGA 2009"</span><br /> <span class="hsp3_command">font</span> <span class="hsp3_string">"MS ゴシック"</span> ,<span class="hsp3_number">16</span>,<span class="hsp3_number">1</span><br /> <span class="hsp3_command">randomize</span><br /><br /> player_x = <span class="hsp3_function">double</span>(<span class="hsp3_sysval">ginfo_winx</span> / <span class="hsp3_number">2</span>)<br /> player_y = <span class="hsp3_function">double</span>(<span class="hsp3_sysval">ginfo_winy</span> / <span class="hsp3_number">2</span>)<br /> player_vx = <span class="hsp3_number">0.0</span><br /> player_vy = <span class="hsp3_number">0.0</span><br /><br /> <span class="hsp3_command">dim</span> char_type,<span class="hsp3_macro">CHAR_MAX</span><br /> <span class="hsp3_command">ddim</span> char_x,<span class="hsp3_macro">CHAR_MAX</span><br /> <span class="hsp3_command">ddim</span> char_y,<span class="hsp3_macro">CHAR_MAX</span><br /> <span class="hsp3_command">ddim</span> char_vx,<span class="hsp3_macro">CHAR_MAX</span><br /> <span class="hsp3_command">ddim</span> char_vy,<span class="hsp3_macro">CHAR_MAX</span><br /> <span class="hsp3_command">dim</span> char_timer,<span class="hsp3_macro">CHAR_MAX</span><br /><br /> <span class="hsp3_command">ddim</span> hanabi_x,<span class="hsp3_macro">HANABI_MAX</span><br /> <span class="hsp3_command">ddim</span> hanabi_y,<span class="hsp3_macro">HANABI_MAX</span><br /> <span class="hsp3_command">dim</span> hanabi_radius,<span class="hsp3_macro">HANABI_MAX</span><br /> <span class="hsp3_command">dim</span> hanabi_life,<span class="hsp3_macro">HANABI_MAX</span><br /> <span class="hsp3_command">dim</span> hanabi_life_max,<span class="hsp3_macro">HANABI_MAX</span><br /> <span class="hsp3_command">dim</span> hanabi_r,<span class="hsp3_macro">HANABI_MAX</span><br /> <span class="hsp3_command">dim</span> hanabi_g,<span class="hsp3_macro">HANABI_MAX</span><br /> <span class="hsp3_command">dim</span> hanabi_b,<span class="hsp3_macro">HANABI_MAX</span><br /><br /> <span class="hsp3_command">buffer</span> <span class="hsp3_number">1</span>,<span class="hsp3_number">640</span>,<span class="hsp3_number">480</span><br /> <span class="hsp3_command">repeat</span> <span class="hsp3_number">40</span><br /> <span class="hsp3_command">color</span> <span class="hsp3_sysval">cnt</span>, <span class="hsp3_number">0</span>, <span class="hsp3_sysval">cnt</span> * <span class="hsp3_number">2</span><br /> <span class="hsp3_command">boxf</span> <span class="hsp3_number">0</span> , <span class="hsp3_sysval">cnt</span> * <span class="hsp3_sysval">ginfo_winy</span> / <span class="hsp3_number">40</span> , <span class="hsp3_sysval">ginfo_winx</span> , (<span class="hsp3_sysval">cnt</span> + <span class="hsp3_number">1</span>) * <span class="hsp3_sysval">ginfo_winy</span> / <span class="hsp3_number">40</span><br /> <span class="hsp3_command">loop</span><br /><br /> <span class="hsp3_command">gsel</span> <span class="hsp3_number">0</span><br /> <span class="hsp3_command">gmode</span> <span class="hsp3_number">3</span>,,,<span class="hsp3_number">64</span><br /><br /><span class="hsp3_comment">// メイン処理</span><br /><br /><span class="hsp3_command">repeat</span><br /> <span class="hsp3_comment">// INIT</span><br /> <span class="hsp3_command">gosub</span> <span class="hsp3_label">*initpl</span><br /> <span class="hsp3_comment">// タイトル</span><br /> <span class="hsp3_command">repeat</span><br /> <span class="hsp3_command">redraw</span> <span class="hsp3_number">0</span><br /> <span class="hsp3_command">gosub</span> <span class="hsp3_label">*clearscreen</span><br /> <span class="hsp3_command">gosub</span> <span class="hsp3_label">*movehanabi</span><br /> <span class="hsp3_command">gosub</span> <span class="hsp3_label">*movechar</span><br /> <span class="hsp3_command">gosub</span> <span class="hsp3_label">*collision</span><br /> <span class="hsp3_command">if</span>(player_life > <span class="hsp3_number">0</span>){<br /> <span class="hsp3_command">gosub</span> <span class="hsp3_label">*moveplayer</span><br /><br /> a = <span class="hsp3_number">10</span> - (player_score / <span class="hsp3_number">5</span>) \ <span class="hsp3_number">10</span><br /> <span class="hsp3_command">if</span>( a < <span class="hsp3_number">2</span> ) : a = <span class="hsp3_number">1</span><br /> <span class="hsp3_command">if</span>(player_timer \ a == <span class="hsp3_number">0</span>) : <span class="hsp3_command">gosub</span> <span class="hsp3_label">*addchar</span><br /> }<span class="hsp3_command">else</span>{<br /> <span class="hsp3_command">gosub</span> <span class="hsp3_label">*burstall</span><br /> <span class="hsp3_command">color</span> <span class="hsp3_number">255</span>, <span class="hsp3_number">255</span>, <span class="hsp3_number">255</span><br /> <span class="hsp3_command">pos</span> (<span class="hsp3_sysval">ginfo_winx</span> - <span class="hsp3_number">198</span>)/ <span class="hsp3_number">2</span>, (<span class="hsp3_sysval">ginfo_winy</span> - <span class="hsp3_number">16</span>) / <span class="hsp3_number">2</span><br /> <span class="hsp3_command">mes</span> <span class="hsp3_string">"H A N A B I O W A T A"</span><br /><br /> <span class="hsp3_command">stick</span> inp<br /> <span class="hsp3_command">if</span>(inp & <span class="hsp3_number">16</span>) : <span class="hsp3_command">break</span><br /> }<br /><br /> <span class="hsp3_command">gosub</span> <span class="hsp3_label">*showstatus</span><br /><br /> <span class="hsp3_command">redraw</span> <span class="hsp3_number">1</span><br /> <span class="hsp3_command">await</span> <span class="hsp3_macro">FRAME_WAIT</span><br /> <span class="hsp3_command">loop</span><br /><span class="hsp3_command">loop</span><br /><br /><br /><br /><br /><span class="hsp3_label">*initpl</span><br /> player_x = <span class="hsp3_function">double</span>(<span class="hsp3_sysval">ginfo_winx</span> / <span class="hsp3_number">2</span>)<br /> player_y = <span class="hsp3_function">double</span>(<span class="hsp3_sysval">ginfo_winy</span> / <span class="hsp3_number">2</span>)<br /> player_vx = <span class="hsp3_number">0.0</span><br /> player_vy = <span class="hsp3_number">0.0</span><br /> player_life = <span class="hsp3_number">1</span><br /> player_chain_type = <span class="hsp3_macro">CHAR_TYPE_SA</span><br /> player_score = <span class="hsp3_number">0</span><br /> player_combo = <span class="hsp3_number">0</span><br /><br /> combo_time = <span class="hsp3_number">0</span><br /><br /> scroll_vx = <span class="hsp3_number">0.01</span><br /> scroll_vy = -<span class="hsp3_number">2.0</span><br /><br /> <span class="hsp3_command">repeat</span> <span class="hsp3_macro">CHAR_MAX</span><br /> char_type(<span class="hsp3_sysval">cnt</span>) = <span class="hsp3_macro">CHAR_TYPE_NONE</span><br /> <span class="hsp3_command">loop</span><br /> <span class="hsp3_command">return</span><br /><br /><span class="hsp3_label">*clearscreen</span><br /> <span class="hsp3_command">pos</span> <span class="hsp3_number">0</span>,<span class="hsp3_number">0</span><br /> <span class="hsp3_command">gcopy</span> <span class="hsp3_number">1</span>,<span class="hsp3_number">0</span>,<span class="hsp3_number">0</span>,<span class="hsp3_sysval">ginfo_winx</span>, <span class="hsp3_sysval">ginfo_winy</span><br /> <span class="hsp3_command">return</span><br /><br /><span class="hsp3_label">*moveplayer</span><br /> <span class="hsp3_command">stick</span> inp,<span class="hsp3_number">255</span><br /><br /> <span class="hsp3_command">if</span>(inp & <span class="hsp3_number">1</span>) : player_vx -= <span class="hsp3_macro">PLAYER_SPEED</span><br /> <span class="hsp3_command">if</span>(inp & <span class="hsp3_number">2</span>) : player_vy -= <span class="hsp3_macro">PLAYER_SPEED</span><br /> <span class="hsp3_command">if</span>(inp & <span class="hsp3_number">4</span>) : player_vx += <span class="hsp3_macro">PLAYER_SPEED</span><br /> <span class="hsp3_command">if</span>(inp & <span class="hsp3_number">8</span>) : player_vy += <span class="hsp3_macro">PLAYER_SPEED</span><br /> player_timer++<br /><br /> player_vx *= <span class="hsp3_macro">PLAYER_SP_REDUCE</span><br /> player_vy *= <span class="hsp3_macro">PLAYER_SP_REDUCE</span><br /><br /> player_x = <span class="hsp3_function">limitf</span>(player_x + player_vx, <span class="hsp3_number">0.0</span>, <span class="hsp3_sysval">ginfo_winx</span> - <span class="hsp3_macro">CHAR_SIZE</span>)<br /> player_y = <span class="hsp3_function">limitf</span>(player_y + player_vy, <span class="hsp3_number">0.0</span>, <span class="hsp3_sysval">ginfo_winy</span> - <span class="hsp3_macro">CHAR_SIZE</span>)<br /> <br /> <span class="hsp3_command">color</span> <span class="hsp3_number">255</span><br /> <span class="hsp3_command">pos</span> player_x,player_y<br /> <span class="hsp3_command">if</span>( player_chain_type == <span class="hsp3_macro">CHAR_TYPE_SA</span> ){<br /> <span class="hsp3_command">mes</span> <span class="hsp3_macro">CHAR_FACE_SA</span><br /> } <span class="hsp3_command">else</span> : <span class="hsp3_command">if</span>( player_chain_type == <span class="hsp3_macro">CHAR_TYPE_KU</span> ){<br /> <span class="hsp3_command">mes</span> <span class="hsp3_macro">CHAR_FACE_KU</span><br /> } <span class="hsp3_command">else</span> : <span class="hsp3_command">if</span>( player_chain_type == <span class="hsp3_macro">CHAR_TYPE_RA</span> ){<br /> <span class="hsp3_command">mes</span> <span class="hsp3_macro">CHAR_FACE_RA</span><br /> }<br /><br /> <span class="hsp3_command">if</span> (combo_time > <span class="hsp3_number">0</span>) : combo_time-- : <span class="hsp3_command">else</span> : player_combo = <span class="hsp3_number">0</span><br /> <span class="hsp3_command">return</span><br /><br /><span class="hsp3_label">*collision</span><br /> <span class="hsp3_command">repeat</span> <span class="hsp3_macro">CHAR_MAX</span><br /> <span class="hsp3_command">if</span>( char_type(<span class="hsp3_sysval">cnt</span>) == <span class="hsp3_macro">CHAR_TYPE_NONE</span> ) : <span class="hsp3_command">continue</span><br /><br /> dx = player_x - char_x(<span class="hsp3_sysval">cnt</span>)<br /> dy = player_y - char_y(<span class="hsp3_sysval">cnt</span>)<br /> <span class="hsp3_command">if</span>( <span class="hsp3_function">abs</span>(dx) < <span class="hsp3_macro">CHAR_SIZE</span> & <span class="hsp3_function">abs</span>(dy) < <span class="hsp3_macro">CHAR_SIZE</span> ) {<br /> <span class="hsp3_command">if</span>( char_type(<span class="hsp3_sysval">cnt</span>) == player_chain_type ){<br /> player_chain_type++<br /> <span class="hsp3_command">if</span>(player_chain_type > <span class="hsp3_macro">CHAR_TYPE_RA</span>){<br /> player_chain_type = <span class="hsp3_macro">CHAR_TYPE_SA</span><br /> }<br /><br /> <span class="hsp3_command">if</span> (combo_time > <span class="hsp3_number">0</span>) {<br /> player_combo++<br /> }<br /> player_score += <span class="hsp3_number">10</span> + player_combo<br /> combo_time = <span class="hsp3_macro">COMBO_TIME_MAX</span><br /> }<span class="hsp3_command">else</span>{<br /> player_life--<br /> }<br /> char_type(<span class="hsp3_sysval">cnt</span>) == <span class="hsp3_macro">CHAR_TYPE_NONE</span><br /> x = char_x(<span class="hsp3_sysval">cnt</span>)<br /> y = char_y(<span class="hsp3_sysval">cnt</span>)<br /> <span class="hsp3_command">gosub</span> <span class="hsp3_label">*addhanabi</span><br /> }<br /> <span class="hsp3_command">loop</span><br /> <span class="hsp3_command">return</span><br /><br /><span class="hsp3_label">*movechar</span><br /> <span class="hsp3_command">color</span> <span class="hsp3_number">255</span>,<span class="hsp3_number">128</span><br /> <span class="hsp3_command">repeat</span> <span class="hsp3_macro">CHAR_MAX</span><br /> <span class="hsp3_command">if</span>( char_type(<span class="hsp3_sysval">cnt</span>) == <span class="hsp3_macro">CHAR_TYPE_NONE</span> ) : <span class="hsp3_command">continue</span><br /><br /> <span class="hsp3_command">pos</span> char_x(<span class="hsp3_sysval">cnt</span>) , char_y(<span class="hsp3_sysval">cnt</span>) <br /> char_x(<span class="hsp3_sysval">cnt</span>) += char_vx(<span class="hsp3_sysval">cnt</span>)<br /> char_y(<span class="hsp3_sysval">cnt</span>) += char_vy(<span class="hsp3_sysval">cnt</span>)<br /><br /> char_timer(<span class="hsp3_sysval">cnt</span>)++<br /> char_x(<span class="hsp3_sysval">cnt</span>) += <span class="hsp3_macro">CHAR_ROT_MOVE</span> * <span class="hsp3_function">sin</span>(<span class="hsp3_function">double</span>(<span class="hsp3_macro">CHAR_ROT_SP</span> * char_timer(<span class="hsp3_sysval">cnt</span>)))<br /> char_y(<span class="hsp3_sysval">cnt</span>) += <span class="hsp3_macro">CHAR_ROT_MOVE</span> <span class="hsp3_comment">;* cos(double(CHAR_ROT_SP * char_timer(cnt)))</span><br /><br /> <span class="hsp3_command">if</span>( char_y(<span class="hsp3_sysval">cnt</span>) < -<span class="hsp3_number">16.0</span> ) : char_type(<span class="hsp3_sysval">cnt</span>) = <span class="hsp3_macro">CHAR_TYPE_NONE</span><br /><br /> <span class="hsp3_command">if</span>( char_type(<span class="hsp3_sysval">cnt</span>) == <span class="hsp3_macro">CHAR_TYPE_SA</span> ){<br /> <span class="hsp3_command">mes</span> <span class="hsp3_macro">CHAR_FACE_SA</span><br /> } <span class="hsp3_command">else</span> : <span class="hsp3_command">if</span>( char_type(<span class="hsp3_sysval">cnt</span>) == <span class="hsp3_macro">CHAR_TYPE_KU</span> ){<br /> <span class="hsp3_command">mes</span> <span class="hsp3_macro">CHAR_FACE_KU</span><br /> } <span class="hsp3_command">else</span> : <span class="hsp3_command">if</span>( char_type(<span class="hsp3_sysval">cnt</span>) == <span class="hsp3_macro">CHAR_TYPE_RA</span> ){<br /> <span class="hsp3_command">mes</span> <span class="hsp3_macro">CHAR_FACE_RA</span><br /> }<br /> <span class="hsp3_command">loop</span><br /> <span class="hsp3_command">return</span><br /><br /><span class="hsp3_label">*addchar</span><br /> <span class="hsp3_command">repeat</span> <span class="hsp3_macro">CHAR_MAX</span><br /> <span class="hsp3_command">if</span>( char_type(<span class="hsp3_sysval">cnt</span>) != <span class="hsp3_macro">CHAR_TYPE_NONE</span> ) : <span class="hsp3_command">continue</span><br /><br /> char_type(<span class="hsp3_sysval">cnt</span>) = <span class="hsp3_number">1</span> + <span class="hsp3_function">rnd</span>(<span class="hsp3_number">3</span>)<br /> char_x(<span class="hsp3_sysval">cnt</span>) = <span class="hsp3_function">double</span>(<span class="hsp3_function">rnd</span>(<span class="hsp3_number">800</span>) - <span class="hsp3_number">80</span>)<br /> char_y(<span class="hsp3_sysval">cnt</span>) = <span class="hsp3_number">20.0</span> + <span class="hsp3_sysval">ginfo_winy</span><br /> char_vx(<span class="hsp3_sysval">cnt</span>) = scroll_vx<br /> char_vy(<span class="hsp3_sysval">cnt</span>) = scroll_vy<br /> char_timer(<span class="hsp3_sysval">cnt</span>) = <span class="hsp3_function">rnd</span>(<span class="hsp3_number">256</span>)<br /> <span class="hsp3_command">break</span><br /> <span class="hsp3_command">loop</span><br /> <span class="hsp3_command">return</span><br /><br /><span class="hsp3_label">*showstatus</span><br /> <span class="hsp3_command">pos</span> <span class="hsp3_sysval">ginfo_winx</span> - <span class="hsp3_number">160</span> , <span class="hsp3_sysval">ginfo_winy</span> - <span class="hsp3_number">40</span><br /> <span class="hsp3_command">color</span> <span class="hsp3_number">255</span>, <span class="hsp3_number">255</span>, <span class="hsp3_number">255</span><br /> <span class="hsp3_command">mes</span> <span class="hsp3_function">strf</span>(<span class="hsp3_string">"SCORE : %8d"</span>, player_score)<br /> <span class="hsp3_command">mes</span> <span class="hsp3_function">strf</span>(<span class="hsp3_string">"COMBO : %8d"</span>, player_combo)<br /> <span class="hsp3_command">return</span><br /><br /><br /><span class="hsp3_preprocessor">#const</span> <span class="hsp3_macro">HANABI_CST</span> <span class="hsp3_number">2.0</span> * <span class="hsp3_command">M_PI</span> / <span class="hsp3_macro">HANABI_PARTS_NUM</span><br /><span class="hsp3_label">*movehanabi</span><br /> <span class="hsp3_command">repeat</span> <span class="hsp3_macro">HANABI_MAX</span><br /> <span class="hsp3_command">if</span>( hanabi_life(<span class="hsp3_sysval">cnt</span>) <= <span class="hsp3_number">0</span> ) : <span class="hsp3_command">continue</span><br /><br /> hanabi_life(<span class="hsp3_sysval">cnt</span>)--<br /> <span class="hsp3_command">color</span> hanabi_r(<span class="hsp3_sysval">cnt</span>), hanabi_g(<span class="hsp3_sysval">cnt</span>), hanabi_b(<span class="hsp3_sysval">cnt</span>)<br /> <span class="hsp3_comment">; hanabi_y(up_cnt)++</span><br /> up_cnt = <span class="hsp3_sysval">cnt</span><br /> r = <span class="hsp3_function">cos</span>(<span class="hsp3_command">M_PI</span> * hanabi_life(<span class="hsp3_sysval">cnt</span>) / hanabi_life_max(<span class="hsp3_sysval">cnt</span>) / <span class="hsp3_number">2.0</span>) * hanabi_radius(<span class="hsp3_sysval">cnt</span>)<br /> <span class="hsp3_command">repeat</span> <span class="hsp3_macro">HANABI_PARTS_NUM</span><br /> <span class="hsp3_command">pos</span> hanabi_x(up_cnt) + <span class="hsp3_function">cos</span>(<span class="hsp3_macro">HANABI_CST</span> * <span class="hsp3_sysval">cnt</span>) * r, hanabi_y(up_cnt) + <span class="hsp3_function">sin</span>(<span class="hsp3_macro">HANABI_CST</span> * <span class="hsp3_sysval">cnt</span>) * r<br /> <span class="hsp3_command">mes</span> <span class="hsp3_macro">CHAR_FACE_HANABI</span><br /> <span class="hsp3_command">loop</span><br /> <span class="hsp3_command">loop</span><br /> <span class="hsp3_command">return</span><br /><br /><span class="hsp3_label">*addhanabi</span><br /> result = <span class="hsp3_number">0</span><br /> <span class="hsp3_command">repeat</span> <span class="hsp3_macro">HANABI_MAX</span><br /> <span class="hsp3_command">if</span>( hanabi_life(<span class="hsp3_sysval">cnt</span>) > <span class="hsp3_number">0</span> ) : <span class="hsp3_command">continue</span><br /><br /> hanabi_x(<span class="hsp3_sysval">cnt</span>) = x<br /> hanabi_y(<span class="hsp3_sysval">cnt</span>) = y<br /><br /> size = <span class="hsp3_number">10</span> + <span class="hsp3_function">rnd</span>(<span class="hsp3_number">12</span>)<br /> hanabi_life_max(<span class="hsp3_sysval">cnt</span>) = size<br /> hanabi_life(<span class="hsp3_sysval">cnt</span>) = size<br /> hanabi_radius(<span class="hsp3_sysval">cnt</span>) = size * <span class="hsp3_number">3</span><br /><br /> <span class="hsp3_command">hsvcolor</span> <span class="hsp3_function">rnd</span>(<span class="hsp3_number">192</span>), <span class="hsp3_number">255</span>, <span class="hsp3_number">255</span><br /> hanabi_r(<span class="hsp3_sysval">cnt</span>) = <span class="hsp3_sysval">ginfo_r</span><br /> hanabi_g(<span class="hsp3_sysval">cnt</span>) = <span class="hsp3_sysval">ginfo_g</span><br /> hanabi_b(<span class="hsp3_sysval">cnt</span>) = <span class="hsp3_sysval">ginfo_b</span><br /><br /> result = <span class="hsp3_number">1</span><br /> <span class="hsp3_command">break</span><br /> <span class="hsp3_command">loop</span><br /> <span class="hsp3_command">return</span> result<br /><br /><span class="hsp3_label">*burstall</span><br /> <span class="hsp3_command">repeat</span> <span class="hsp3_macro">CHAR_MAX</span><br /> <span class="hsp3_command">if</span>( char_type(<span class="hsp3_sysval">cnt</span>) = <span class="hsp3_macro">CHAR_TYPE_NONE</span> ) : <span class="hsp3_command">continue</span><br /><br /> x = char_x(<span class="hsp3_sysval">cnt</span>)<br /> y = char_y(<span class="hsp3_sysval">cnt</span>)<br /> <span class="hsp3_command">gosub</span> <span class="hsp3_label">*addhanabi</span><br /> <span class="hsp3_command">if</span> <span class="hsp3_sysval">stat</span> : char_type(<span class="hsp3_sysval">cnt</span>) = <span class="hsp3_macro">CHAR_TYPE_NONE</span><br /> <span class="hsp3_command">loop</span><br /> <span class="hsp3_command">return</span><br /></code>ellerhttp://www.blogger.com/profile/07429654819789962794noreply@blogger.com0tag:blogger.com,1999:blog-648738693838588387.post-25990089942152824672008-06-07T10:15:00.002+09:002008-06-07T10:20:47.550+09:00Online HSP Document Libraryをワンキーヘルプとして使うちょいネタ。<br />このスクリプトをから作成できる実行ファイルを既存のhelpman.exeと置き換えることで、Online HSP Document Libraryをワンキーヘルプとして利用できます。<br />実行ファイルの作成はctrl+F9の「実行ファイル自動作成」を利用してください。<br /><br /><code class="hsp3"><span class="hsp3_preprocessor">#packopt</span> name <span class="hsp3_string">"helpman"</span><br /><span class="hsp3_preprocessor">#packopt</span> hide <span class="hsp3_number">1</span><br /> <span class="hsp3_command">exec</span> <span class="hsp3_string">"http://www.onionsoft.net/hsp/ref/ohdl.cgi?cmd=hdsrch&arg="</span>+<span class="hsp3_sysval">dir_cmdline</span>, <span class="hsp3_number">16</span><br /> <span class="hsp3_command">end</span></code>ellerhttp://www.blogger.com/profile/07429654819789962794noreply@blogger.com1tag:blogger.com,1999:blog-648738693838588387.post-13555959673516726792008-05-17T00:06:00.006+09:002008-05-22T05:32:16.984+09:00自力型変換(int⇔str)整数値と文字列を相互に変換します。HSPでは特に気にせず利用できる機能ですが、自力でやると結構面白いものです。<br /><br />数値の桁数を計算するためにHSPMathのlog10関数を使用。おまけとしてTrim関数がついてます。<br /><br /><ins>2008.05.17 memcpyをなくすことで計量化</ins><br /><code class="hsp3"><span class="hsp3_comment">// 自力で型変換</span><br /><span class="hsp3_comment">// 2008.05.17 計量化</span><br /><span class="hsp3_preprocessor">#module</span><br /><span class="hsp3_preprocessor">#include</span> <span class="hsp3_string">"hspmath.as"</span><br /><span class="hsp3_comment">// 文字列の始めと終わりにある半角スペースを除去</span><br /><span class="hsp3_preprocessor">#defcfunc</span> <span class="hsp3_function">Trim</span> str s, local target, local target_length, local result<br /> target = s<br /> target_length = <span class="hsp3_function">strlen</span>( target )<br /> <span class="hsp3_command">repeat</span> target_length<br /> start_idx = <span class="hsp3_sysval">cnt</span><br /> <span class="hsp3_command">if</span> <span class="hsp3_function">peek</span>( target, start_idx ) != <span class="hsp3_stringcode">' '</span> : <span class="hsp3_command">break</span><br /> <span class="hsp3_command">loop</span><br /> <span class="hsp3_command">repeat</span> target_length, <span class="hsp3_number">1</span><br /> end_idx = target_length - <span class="hsp3_sysval">cnt</span><br /> <span class="hsp3_command">if</span> <span class="hsp3_function">peek</span>( target, end_idx ) != <span class="hsp3_stringcode">' '</span> : <span class="hsp3_command">break</span><br /> <span class="hsp3_command">loop</span><br /> result = <span class="hsp3_function">strmid</span>( target, start_idx, end_idx + <span class="hsp3_number">1</span> - start_idx )<br /> <span class="hsp3_command">return</span> result<br /><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_preprocessor">ctype</span> <span class="hsp3_macro">not_digit</span>(<span class="hsp3_number">%1</span>) ((<span class="hsp3_number">%1</span>) < <span class="hsp3_stringcode">'0'</span> | <span class="hsp3_stringcode">'9'</span> < (<span class="hsp3_number">%1</span>))<br /><br /><span class="hsp3_comment">// 文字列を整数値に変換</span><br /><span class="hsp3_preprocessor">#defcfunc</span> <span class="hsp3_function">str2int</span> str s, local target, local result, local target_length<br /> result = <span class="hsp3_number">0</span><br /> target = <span class="hsp3_function">Trim</span>( s )<br /> <span class="hsp3_command">if</span> <span class="hsp3_function">peek</span>( target ) = <span class="hsp3_stringcode">'-'</span> : sign = -<span class="hsp3_number">1</span> : <span class="hsp3_command">else</span> : sign = <span class="hsp3_number">1</span><br /> <span class="hsp3_command">if</span> <span class="hsp3_function">peek</span>( target ) = <span class="hsp3_stringcode">'-'</span> | <span class="hsp3_function">peek</span>( target ) = <span class="hsp3_stringcode">'+'</span> {<br /> target = <span class="hsp3_function">strmid</span>( target, <span class="hsp3_number">1</span>, <span class="hsp3_function">strlen</span>( target ) - <span class="hsp3_number">1</span> )<br /> }<br /> target_length = <span class="hsp3_function">strlen</span>( target )<br /><br /> <span class="hsp3_macro">for</span> i, iStart, target_length<br /> <span class="hsp3_command">if</span> <span class="hsp3_macro">not_digit</span>( <span class="hsp3_function">peek</span>( target, i ) ) : <span class="hsp3_macro">_break</span><br /> result = result * <span class="hsp3_number">10</span> + <span class="hsp3_function">peek</span>( target, i ) - <span class="hsp3_stringcode">'0'</span><br /> <span class="hsp3_macro">next</span><br /> <span class="hsp3_command">return</span> result * sign<br /><br /><span class="hsp3_comment">// 整数値を文字列に変換</span><br /><span class="hsp3_preprocessor">#defcfunc</span> <span class="hsp3_function">int2str</span> int p, local target, local result, local result_length<br /> <span class="hsp3_command">if</span> p = <span class="hsp3_number">0</span> : <span class="hsp3_command">return</span> <span class="hsp3_string">"0"</span><br /><br /> target = <span class="hsp3_function">abs</span>( p )<br /> result_length = <span class="hsp3_number">1</span> + <span class="hsp3_function">log10</span>( target ) + ( p < <span class="hsp3_number">0</span> )<br /> <span class="hsp3_command">sdim</span> result, result_length + <span class="hsp3_number">1</span><br /> <span class="hsp3_command">repeat</span> <span class="hsp3_number">1</span> + <span class="hsp3_function">log10</span>( target ), <span class="hsp3_number">1</span><br /> <span class="hsp3_command">poke</span> result, result_length - <span class="hsp3_sysval">cnt</span>, ( target \ <span class="hsp3_number">10</span> ) + <span class="hsp3_stringcode">'0'</span><br /> target /= <span class="hsp3_number">10</span><br /> <span class="hsp3_command">loop</span><br /> <span class="hsp3_command">if</span> p < <span class="hsp3_number">0</span> {<br /> <span class="hsp3_command">poke</span> result, <span class="hsp3_number">0</span>, <span class="hsp3_stringcode">'-'</span><br /> }<br /> <span class="hsp3_command">return</span> result<br /><span class="hsp3_preprocessor">#global</span></code>ellerhttp://www.blogger.com/profile/07429654819789962794noreply@blogger.com0tag:blogger.com,1999:blog-648738693838588387.post-84813908736037561622008-04-19T11:20:00.002+09:002008-04-19T11:23:49.610+09:00花火ゲーム(やわらかライセンス)<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-s6Rlm_Q7IF73Be_AaHhr5guM-5n9CTNkgANTXpVEN4Smz0YgWEVaaABUT0O2SBlGachhDs7Dx0RKZvMqkObsqk5i7rp-4pjGgkJecF_kiJhwSAHqV_qRHX43YnoctzGd16_thyphenhyphenwNqTQ/s1600-h/hanabiga2008.png"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-s6Rlm_Q7IF73Be_AaHhr5guM-5n9CTNkgANTXpVEN4Smz0YgWEVaaABUT0O2SBlGachhDs7Dx0RKZvMqkObsqk5i7rp-4pjGgkJecF_kiJhwSAHqV_qRHX43YnoctzGd16_thyphenhyphenwNqTQ/s320/hanabiga2008.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5190775910273696146" /></a><a href="http://d.hatena.ne.jp/o_mega/" target="_blank">( ゜ワ゜)ノ</a>さん原案、eller改造のミニゲーム。<br /><br />このスクリプトはやわらかライセンスのもとで、自由に改造・配布が可能です。<br /><br /><br style="clear:both;" /><code class="hsp3"><span class="hsp3_comment">/* HANABIGA @ やわらかライセンス by eller 2008/04/19<br /> * ===============================================<br /> * SAKURAGAからの改造個所:<br /> * "さくら" → "たまや" // "かぎや"でも良い<br /> * キャラクタの移動動作変更(ちょい簡単に)<br /> * 背景色など色合い変更<br /> * ゲームオーバー中はキャラクタを生成しないように<br /> * キャラクタ接触時にどかーん<br /> * ゲームオーバー時にどかーん<br /> * redraw 0 と redraw 1 を入れ替え<br /> * randomize追加<br /> * 640 → ginfo_winx など<br /> */</span><br /><br /><span class="hsp3_comment">//#runtime "hsplet3"</span><br /><span class="hsp3_preprocessor">#include</span> <span class="hsp3_string">"hspmath.as"</span><br /><span class="hsp3_preprocessor">#packopt</span> name <span class="hsp3_string">"hanabiga"</span><br /><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">FRAME_WAIT</span> <span class="hsp3_number">16</span><br /><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">PLAYER_SPEED</span> <span class="hsp3_number">3.0</span><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">PLAYER_SP_REDUCE</span> <span class="hsp3_number">0.8</span><br /><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">CHAR_MAX</span> <span class="hsp3_number">256</span><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">HANABI_MAX</span> <span class="hsp3_number">8</span><br /><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">CHAR_TYPE_NONE</span> <span class="hsp3_number">0</span><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">CHAR_TYPE_SA</span> <span class="hsp3_number">1</span><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">CHAR_TYPE_KU</span> <span class="hsp3_number">2</span><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">CHAR_TYPE_RA</span> <span class="hsp3_number">3</span><br /><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">CHAR_FACE_SA</span> <span class="hsp3_string">"た"</span><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">CHAR_FACE_KU</span> <span class="hsp3_string">"ま"</span><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">CHAR_FACE_RA</span> <span class="hsp3_string">"や"</span><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">CHAR_FACE_HANABI</span> <span class="hsp3_string">"・"</span><br /><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">HANABI_PARTS_NUM</span> <span class="hsp3_number">14</span><br /><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">CHAR_ROT_SP</span> <span class="hsp3_number">0.05</span><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">CHAR_ROT_MOVE</span> <span class="hsp3_number">0.8</span><br /><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">CHAR_SIZE</span> <span class="hsp3_number">16.0</span><br /><br /><span class="hsp3_comment">// 準備</span><br /><span class="hsp3_comment">; screen 0, 480, 320</span><br /> <span class="hsp3_command">title</span> <span class="hsp3_string">"SAKURAGA 2008"</span><br /> <span class="hsp3_command">font</span> <span class="hsp3_string">"MS ゴシック"</span> ,<span class="hsp3_number">16</span>,<span class="hsp3_number">1</span><br /> <span class="hsp3_command">randomize</span><br /><br /> player_x = <span class="hsp3_function">double</span>(<span class="hsp3_sysval">ginfo_winx</span> / <span class="hsp3_number">2</span>)<br /> player_y = <span class="hsp3_function">double</span>(<span class="hsp3_sysval">ginfo_winy</span> / <span class="hsp3_number">2</span>)<br /> player_vx = <span class="hsp3_number">0.0</span><br /> player_vy = <span class="hsp3_number">0.0</span><br /><br /> <span class="hsp3_command">dim</span> char_type,<span class="hsp3_macro">CHAR_MAX</span><br /> <span class="hsp3_command">ddim</span> char_x,<span class="hsp3_macro">CHAR_MAX</span><br /> <span class="hsp3_command">ddim</span> char_y,<span class="hsp3_macro">CHAR_MAX</span><br /> <span class="hsp3_command">ddim</span> char_vx,<span class="hsp3_macro">CHAR_MAX</span><br /> <span class="hsp3_command">ddim</span> char_vy,<span class="hsp3_macro">CHAR_MAX</span><br /> <span class="hsp3_command">dim</span> char_timer,<span class="hsp3_macro">CHAR_MAX</span><br /><br /> <span class="hsp3_command">ddim</span> hanabi_x,<span class="hsp3_macro">HANABI_MAX</span><br /> <span class="hsp3_command">ddim</span> hanabi_y,<span class="hsp3_macro">HANABI_MAX</span><br /> <span class="hsp3_command">dim</span> hanabi_radius,<span class="hsp3_macro">HANABI_MAX</span><br /> <span class="hsp3_command">dim</span> hanabi_life,<span class="hsp3_macro">HANABI_MAX</span><br /> <span class="hsp3_command">dim</span> hanabi_life_max,<span class="hsp3_macro">HANABI_MAX</span><br /> <span class="hsp3_command">dim</span> hanabi_r,<span class="hsp3_macro">HANABI_MAX</span><br /> <span class="hsp3_command">dim</span> hanabi_g,<span class="hsp3_macro">HANABI_MAX</span><br /> <span class="hsp3_command">dim</span> hanabi_b,<span class="hsp3_macro">HANABI_MAX</span><br /><br /> <span class="hsp3_command">buffer</span> <span class="hsp3_number">1</span>,<span class="hsp3_number">640</span>,<span class="hsp3_number">480</span><br /> <span class="hsp3_command">repeat</span> <span class="hsp3_number">40</span><br /> <span class="hsp3_command">color</span> <span class="hsp3_sysval">cnt</span>, <span class="hsp3_number">0</span>, <span class="hsp3_sysval">cnt</span> * <span class="hsp3_number">2</span><br /> <span class="hsp3_command">boxf</span> <span class="hsp3_number">0</span> , <span class="hsp3_sysval">cnt</span> * <span class="hsp3_sysval">ginfo_winy</span> / <span class="hsp3_number">40</span> , <span class="hsp3_sysval">ginfo_winx</span> , (<span class="hsp3_sysval">cnt</span> + <span class="hsp3_number">1</span>) * <span class="hsp3_sysval">ginfo_winy</span> / <span class="hsp3_number">40</span><br /> <span class="hsp3_command">loop</span><br /><br /> <span class="hsp3_command">gsel</span> <span class="hsp3_number">0</span><br /> <span class="hsp3_command">gmode</span> <span class="hsp3_number">3</span>,,,<span class="hsp3_number">64</span><br /><br /><span class="hsp3_comment">// メイン処理</span><br /><br /><span class="hsp3_command">repeat</span><br /> <span class="hsp3_comment">// INIT</span><br /> <span class="hsp3_command">gosub</span> <span class="hsp3_label">*initpl</span><br /> <span class="hsp3_comment">// タイトル</span><br /> <span class="hsp3_command">repeat</span><br /> <span class="hsp3_command">redraw</span> <span class="hsp3_number">0</span><br /> <span class="hsp3_command">gosub</span> <span class="hsp3_label">*clearscreen</span><br /> <span class="hsp3_command">gosub</span> <span class="hsp3_label">*movehanabi</span><br /> <span class="hsp3_command">gosub</span> <span class="hsp3_label">*movechar</span><br /> <span class="hsp3_command">gosub</span> <span class="hsp3_label">*collision</span><br /> <span class="hsp3_command">if</span>(player_life > <span class="hsp3_number">0</span>){<br /> <span class="hsp3_command">gosub</span> <span class="hsp3_label">*moveplayer</span><br /><br /> a = <span class="hsp3_number">10</span> - (player_score / <span class="hsp3_number">5</span>) \ <span class="hsp3_number">10</span><br /> <span class="hsp3_command">if</span>( a < <span class="hsp3_number">2</span> ) : a = <span class="hsp3_number">1</span><br /> <span class="hsp3_command">if</span>(player_timer \ a == <span class="hsp3_number">0</span>) : <span class="hsp3_command">gosub</span> <span class="hsp3_label">*addchar</span><br /> }<span class="hsp3_command">else</span>{<br /> <span class="hsp3_command">gosub</span> <span class="hsp3_label">*burstall</span><br /> <span class="hsp3_command">color</span> <span class="hsp3_number">255</span>, <span class="hsp3_number">255</span>, <span class="hsp3_number">255</span><br /> <span class="hsp3_command">pos</span> (<span class="hsp3_sysval">ginfo_winx</span> - <span class="hsp3_number">198</span>)/ <span class="hsp3_number">2</span>, (<span class="hsp3_sysval">ginfo_winy</span> - <span class="hsp3_number">16</span>) / <span class="hsp3_number">2</span><br /> <span class="hsp3_command">mes</span> <span class="hsp3_string">"H A N A B I O W A T A"</span><br /><br /> <span class="hsp3_command">stick</span> inp<br /> <span class="hsp3_command">if</span>(inp & <span class="hsp3_number">16</span>) : <span class="hsp3_command">break</span><br /> }<br /><br /> <span class="hsp3_command">gosub</span> <span class="hsp3_label">*showstatus</span><br /><br /> <span class="hsp3_command">redraw</span> <span class="hsp3_number">1</span><br /> <span class="hsp3_command">await</span> <span class="hsp3_macro">FRAME_WAIT</span><br /> <span class="hsp3_command">loop</span><br /><span class="hsp3_command">loop</span><br /><br /><br /><br /><br /><span class="hsp3_label">*initpl</span><br /> player_x = <span class="hsp3_function">double</span>(<span class="hsp3_sysval">ginfo_winx</span> / <span class="hsp3_number">2</span>)<br /> player_y = <span class="hsp3_function">double</span>(<span class="hsp3_sysval">ginfo_winy</span> / <span class="hsp3_number">2</span>)<br /> player_vx = <span class="hsp3_number">0.0</span><br /> player_vy = <span class="hsp3_number">0.0</span><br /> player_life = <span class="hsp3_number">1</span><br /> player_chain_type = <span class="hsp3_macro">CHAR_TYPE_SA</span><br /> player_score = <span class="hsp3_number">0</span><br /><br /> scroll_vx = <span class="hsp3_number">0.01</span><br /> scroll_vy = -<span class="hsp3_number">2.0</span><br /><br /> <span class="hsp3_command">repeat</span> <span class="hsp3_macro">CHAR_MAX</span><br /> char_type(<span class="hsp3_sysval">cnt</span>) = <span class="hsp3_macro">CHAR_TYPE_NONE</span><br /> <span class="hsp3_command">loop</span><br /> <span class="hsp3_command">return</span><br /><br /><span class="hsp3_label">*clearscreen</span><br /> <span class="hsp3_command">pos</span> <span class="hsp3_number">0</span>,<span class="hsp3_number">0</span><br /> <span class="hsp3_command">gcopy</span> <span class="hsp3_number">1</span>,<span class="hsp3_number">0</span>,<span class="hsp3_number">0</span>,<span class="hsp3_sysval">ginfo_winx</span>, <span class="hsp3_sysval">ginfo_winy</span><br /> <span class="hsp3_command">return</span><br /><br /><span class="hsp3_label">*moveplayer</span><br /> <span class="hsp3_command">stick</span> inp,<span class="hsp3_number">255</span><br /><br /> <span class="hsp3_command">if</span>(inp & <span class="hsp3_number">1</span>) : player_vx -= <span class="hsp3_macro">PLAYER_SPEED</span><br /> <span class="hsp3_command">if</span>(inp & <span class="hsp3_number">2</span>) : player_vy -= <span class="hsp3_macro">PLAYER_SPEED</span><br /> <span class="hsp3_command">if</span>(inp & <span class="hsp3_number">4</span>) : player_vx += <span class="hsp3_macro">PLAYER_SPEED</span><br /> <span class="hsp3_command">if</span>(inp & <span class="hsp3_number">8</span>) : player_vy += <span class="hsp3_macro">PLAYER_SPEED</span><br /> player_timer++<br /><br /> player_vx *= <span class="hsp3_macro">PLAYER_SP_REDUCE</span><br /> player_vy *= <span class="hsp3_macro">PLAYER_SP_REDUCE</span><br /><br /> player_x = <span class="hsp3_function">limitf</span>(player_x + player_vx, <span class="hsp3_number">0.0</span>, <span class="hsp3_sysval">ginfo_winx</span> - <span class="hsp3_macro">CHAR_SIZE</span>)<br /> player_y = <span class="hsp3_function">limitf</span>(player_y + player_vy, <span class="hsp3_number">0.0</span>, <span class="hsp3_sysval">ginfo_winy</span> - <span class="hsp3_macro">CHAR_SIZE</span>)<br /> <br /> <span class="hsp3_command">color</span> <span class="hsp3_number">255</span><br /> <span class="hsp3_command">pos</span> player_x,player_y<br /> <span class="hsp3_command">if</span>( player_chain_type == <span class="hsp3_macro">CHAR_TYPE_SA</span> ){<br /> <span class="hsp3_command">mes</span> <span class="hsp3_macro">CHAR_FACE_SA</span><br /> } <span class="hsp3_command">else</span> : <span class="hsp3_command">if</span>( player_chain_type == <span class="hsp3_macro">CHAR_TYPE_KU</span> ){<br /> <span class="hsp3_command">mes</span> <span class="hsp3_macro">CHAR_FACE_KU</span><br /> } <span class="hsp3_command">else</span> : <span class="hsp3_command">if</span>( player_chain_type == <span class="hsp3_macro">CHAR_TYPE_RA</span> ){<br /> <span class="hsp3_command">mes</span> <span class="hsp3_macro">CHAR_FACE_RA</span><br /> }<br /> <span class="hsp3_command">return</span><br /><br /><span class="hsp3_label">*collision</span><br /> <span class="hsp3_command">repeat</span> <span class="hsp3_macro">CHAR_MAX</span><br /> <span class="hsp3_command">if</span>( char_type(<span class="hsp3_sysval">cnt</span>) == <span class="hsp3_macro">CHAR_TYPE_NONE</span> ) : <span class="hsp3_command">continue</span><br /><br /> dx = player_x - char_x(<span class="hsp3_sysval">cnt</span>)<br /> dy = player_y - char_y(<span class="hsp3_sysval">cnt</span>)<br /> <span class="hsp3_command">if</span>( <span class="hsp3_function">abs</span>(dx) < <span class="hsp3_macro">CHAR_SIZE</span> & <span class="hsp3_function">abs</span>(dy) < <span class="hsp3_macro">CHAR_SIZE</span> ) {<br /> <span class="hsp3_command">if</span>( char_type(<span class="hsp3_sysval">cnt</span>) == player_chain_type ){<br /> player_chain_type++<br /> <span class="hsp3_command">if</span>(player_chain_type > <span class="hsp3_macro">CHAR_TYPE_RA</span>){<br /> player_chain_type = <span class="hsp3_macro">CHAR_TYPE_SA</span><br /> }<br /><br /> player_score++<br /> }<span class="hsp3_command">else</span>{<br /> player_life--<br /> }<br /> char_type(<span class="hsp3_sysval">cnt</span>) == <span class="hsp3_macro">CHAR_TYPE_NONE</span><br /> x = char_x(<span class="hsp3_sysval">cnt</span>)<br /> y = char_y(<span class="hsp3_sysval">cnt</span>)<br /> <span class="hsp3_command">gosub</span> <span class="hsp3_label">*addhanabi</span><br /> }<br /> <span class="hsp3_command">loop</span><br /> <span class="hsp3_command">return</span><br /><br /><span class="hsp3_label">*movechar</span><br /> <span class="hsp3_command">color</span> <span class="hsp3_number">255</span>,<span class="hsp3_number">128</span><br /> <span class="hsp3_command">repeat</span> <span class="hsp3_macro">CHAR_MAX</span><br /> <span class="hsp3_command">if</span>( char_type(<span class="hsp3_sysval">cnt</span>) == <span class="hsp3_macro">CHAR_TYPE_NONE</span> ) : <span class="hsp3_command">continue</span><br /><br /> <span class="hsp3_command">pos</span> char_x(<span class="hsp3_sysval">cnt</span>) , char_y(<span class="hsp3_sysval">cnt</span>) <br /> char_x(<span class="hsp3_sysval">cnt</span>) += char_vx(<span class="hsp3_sysval">cnt</span>)<br /> char_y(<span class="hsp3_sysval">cnt</span>) += char_vy(<span class="hsp3_sysval">cnt</span>)<br /><br /> char_timer(<span class="hsp3_sysval">cnt</span>)++<br /> char_x(<span class="hsp3_sysval">cnt</span>) += <span class="hsp3_macro">CHAR_ROT_MOVE</span> * <span class="hsp3_function">sin</span>(<span class="hsp3_function">double</span>(<span class="hsp3_macro">CHAR_ROT_SP</span> * char_timer(<span class="hsp3_sysval">cnt</span>)))<br /> char_y(<span class="hsp3_sysval">cnt</span>) += <span class="hsp3_macro">CHAR_ROT_MOVE</span> <span class="hsp3_comment">;* cos(double(CHAR_ROT_SP * char_timer(cnt)))</span><br /><br /> <span class="hsp3_command">if</span>( char_y(<span class="hsp3_sysval">cnt</span>) < -<span class="hsp3_number">16.0</span> ) : char_type(<span class="hsp3_sysval">cnt</span>) = <span class="hsp3_macro">CHAR_TYPE_NONE</span><br /><br /> <span class="hsp3_command">if</span>( char_type(<span class="hsp3_sysval">cnt</span>) == <span class="hsp3_macro">CHAR_TYPE_SA</span> ){<br /> <span class="hsp3_command">mes</span> <span class="hsp3_macro">CHAR_FACE_SA</span><br /> } <span class="hsp3_command">else</span> : <span class="hsp3_command">if</span>( char_type(<span class="hsp3_sysval">cnt</span>) == <span class="hsp3_macro">CHAR_TYPE_KU</span> ){<br /> <span class="hsp3_command">mes</span> <span class="hsp3_macro">CHAR_FACE_KU</span><br /> } <span class="hsp3_command">else</span> : <span class="hsp3_command">if</span>( char_type(<span class="hsp3_sysval">cnt</span>) == <span class="hsp3_macro">CHAR_TYPE_RA</span> ){<br /> <span class="hsp3_command">mes</span> <span class="hsp3_macro">CHAR_FACE_RA</span><br /> }<br /> <span class="hsp3_command">loop</span><br /> <span class="hsp3_command">return</span><br /><br /><span class="hsp3_label">*addchar</span><br /> <span class="hsp3_command">repeat</span> <span class="hsp3_macro">CHAR_MAX</span><br /> <span class="hsp3_command">if</span>( char_type(<span class="hsp3_sysval">cnt</span>) != <span class="hsp3_macro">CHAR_TYPE_NONE</span> ) : <span class="hsp3_command">continue</span><br /><br /> char_type(<span class="hsp3_sysval">cnt</span>) = <span class="hsp3_number">1</span> + <span class="hsp3_function">rnd</span>(<span class="hsp3_number">3</span>)<br /> char_x(<span class="hsp3_sysval">cnt</span>) = <span class="hsp3_function">double</span>(<span class="hsp3_function">rnd</span>(<span class="hsp3_number">800</span>) - <span class="hsp3_number">80</span>)<br /> char_y(<span class="hsp3_sysval">cnt</span>) = <span class="hsp3_number">20.0</span> + <span class="hsp3_sysval">ginfo_winy</span><br /> char_vx(<span class="hsp3_sysval">cnt</span>) = scroll_vx<br /> char_vy(<span class="hsp3_sysval">cnt</span>) = scroll_vy<br /> char_timer(<span class="hsp3_sysval">cnt</span>) = <span class="hsp3_function">rnd</span>(<span class="hsp3_number">256</span>)<br /> <span class="hsp3_command">break</span><br /> <span class="hsp3_command">loop</span><br /> <span class="hsp3_command">return</span><br /><br /><span class="hsp3_label">*showstatus</span><br /> <span class="hsp3_command">pos</span> <span class="hsp3_sysval">ginfo_winx</span> - <span class="hsp3_number">120</span> , <span class="hsp3_sysval">ginfo_winy</span> - <span class="hsp3_number">20</span><br /> <span class="hsp3_command">color</span> <span class="hsp3_number">255</span>, <span class="hsp3_number">255</span>, <span class="hsp3_number">255</span><br /> <span class="hsp3_command">mes</span> <span class="hsp3_string">"SCORE : "</span> + player_score<br /> <br /> <span class="hsp3_command">return</span><br /><br /><br /><span class="hsp3_preprocessor">#const</span> <span class="hsp3_macro">HANABI_CST</span> <span class="hsp3_number">2.0</span> * <span class="hsp3_command">M_PI</span> / <span class="hsp3_macro">HANABI_PARTS_NUM</span><br /><span class="hsp3_label">*movehanabi</span><br /> <span class="hsp3_command">repeat</span> <span class="hsp3_macro">HANABI_MAX</span><br /> <span class="hsp3_command">if</span>( hanabi_life(<span class="hsp3_sysval">cnt</span>) <= <span class="hsp3_number">0</span> ) : <span class="hsp3_command">continue</span><br /><br /> hanabi_life(<span class="hsp3_sysval">cnt</span>)--<br /> <span class="hsp3_command">color</span> hanabi_r(<span class="hsp3_sysval">cnt</span>), hanabi_g(<span class="hsp3_sysval">cnt</span>), hanabi_b(<span class="hsp3_sysval">cnt</span>)<br /> <span class="hsp3_comment">; hanabi_y(up_cnt)++</span><br /> up_cnt = <span class="hsp3_sysval">cnt</span><br /> r = <span class="hsp3_function">cos</span>(<span class="hsp3_command">M_PI</span> * hanabi_life(<span class="hsp3_sysval">cnt</span>) / hanabi_life_max(<span class="hsp3_sysval">cnt</span>) / <span class="hsp3_number">2.0</span>) * hanabi_radius(<span class="hsp3_sysval">cnt</span>)<br /> <span class="hsp3_command">repeat</span> <span class="hsp3_macro">HANABI_PARTS_NUM</span><br /> <span class="hsp3_command">pos</span> hanabi_x(up_cnt) + <span class="hsp3_function">cos</span>(<span class="hsp3_macro">HANABI_CST</span> * <span class="hsp3_sysval">cnt</span>) * r, hanabi_y(up_cnt) + <span class="hsp3_function">sin</span>(<span class="hsp3_macro">HANABI_CST</span> * <span class="hsp3_sysval">cnt</span>) * r<br /> <span class="hsp3_command">mes</span> <span class="hsp3_macro">CHAR_FACE_HANABI</span><br /> <span class="hsp3_command">loop</span><br /> <span class="hsp3_command">loop</span><br /> <span class="hsp3_command">return</span><br /><br /><span class="hsp3_label">*addhanabi</span><br /> result = <span class="hsp3_number">0</span><br /> <span class="hsp3_command">repeat</span> <span class="hsp3_macro">HANABI_MAX</span><br /> <span class="hsp3_command">if</span>( hanabi_life(<span class="hsp3_sysval">cnt</span>) > <span class="hsp3_number">0</span> ) : <span class="hsp3_command">continue</span><br /><br /> hanabi_x(<span class="hsp3_sysval">cnt</span>) = x<br /> hanabi_y(<span class="hsp3_sysval">cnt</span>) = y<br /><br /> size = <span class="hsp3_number">10</span> + <span class="hsp3_function">rnd</span>(<span class="hsp3_number">12</span>)<br /> hanabi_life_max(<span class="hsp3_sysval">cnt</span>) = size<br /> hanabi_life(<span class="hsp3_sysval">cnt</span>) = size<br /> hanabi_radius(<span class="hsp3_sysval">cnt</span>) = size * <span class="hsp3_number">3</span><br /><br /> <span class="hsp3_command">hsvcolor</span> <span class="hsp3_function">rnd</span>(<span class="hsp3_number">192</span>), <span class="hsp3_number">255</span>, <span class="hsp3_number">255</span><br /> hanabi_r(<span class="hsp3_sysval">cnt</span>) = <span class="hsp3_sysval">ginfo_r</span><br /> hanabi_g(<span class="hsp3_sysval">cnt</span>) = <span class="hsp3_sysval">ginfo_g</span><br /> hanabi_b(<span class="hsp3_sysval">cnt</span>) = <span class="hsp3_sysval">ginfo_b</span><br /><br /> result = <span class="hsp3_number">1</span><br /> <span class="hsp3_command">break</span><br /> <span class="hsp3_command">loop</span><br /> <span class="hsp3_command">return</span> result<br /><br /><span class="hsp3_label">*burstall</span><br /> <span class="hsp3_command">repeat</span> <span class="hsp3_macro">CHAR_MAX</span><br /> <span class="hsp3_command">if</span>( char_type(<span class="hsp3_sysval">cnt</span>) = <span class="hsp3_macro">CHAR_TYPE_NONE</span> ) : <span class="hsp3_command">continue</span><br /><br /> x = char_x(<span class="hsp3_sysval">cnt</span>)<br /> y = char_y(<span class="hsp3_sysval">cnt</span>)<br /> <span class="hsp3_command">gosub</span> <span class="hsp3_label">*addhanabi</span><br /> <span class="hsp3_command">if</span> <span class="hsp3_sysval">stat</span> : char_type(<span class="hsp3_sysval">cnt</span>) = <span class="hsp3_macro">CHAR_TYPE_NONE</span><br /> <span class="hsp3_command">loop</span><br /> <span class="hsp3_command">return</span><br /></code>ellerhttp://www.blogger.com/profile/07429654819789962794noreply@blogger.com0tag:blogger.com,1999:blog-648738693838588387.post-58637777084434327002008-03-29T23:17:00.003+09:002008-03-30T18:43:08.838+09:00文字列のセンタリングどう書く?orgより。<br />文字列の長さに応じて、ifで分岐しています。もっとスマートに記述できないものでしょうか?<br /><br /><code class="hsp3"><span class="hsp3_comment">/*<br /> どう書く?org より<br /> 文字列のセンタリング<br /> http://ja.doukaku.org/87/<br />*/</span><br /><br /><span class="hsp3_preprocessor">#runtime</span> <span class="hsp3_string">"hsp3cl"</span><br /><span class="hsp3_preprocessor">#module</span><br /><span class="hsp3_preprocessor">#defcfunc</span> <span class="hsp3_function">spaces</span> int len<br /> <span class="hsp3_command">if</span> len <= <span class="hsp3_number">0</span> : <span class="hsp3_command">return</span> <span class="hsp3_string">""</span><br /><br /> <span class="hsp3_command">sdim</span> s, len + <span class="hsp3_number">1</span><br /> <span class="hsp3_command">repeat</span> len<br /> <span class="hsp3_command">poke</span> s, <span class="hsp3_sysval">cnt</span>, <span class="hsp3_stringcode">' '</span><br /> <span class="hsp3_command">loop</span><br /> <span class="hsp3_command">return</span> s<br /><br /><span class="hsp3_preprocessor">#defcfunc</span> <span class="hsp3_function">centered_text</span> str target, int len<br /> <span class="hsp3_command">if</span> len <= <span class="hsp3_number">0</span> : <span class="hsp3_command">return</span> <span class="hsp3_string">""</span><br /><br /> target_length = <span class="hsp3_function">strlen</span>(target)<br /> result = target<br /> <span class="hsp3_command">if</span> target_length < len {<br /> result = <span class="hsp3_function">spaces</span>((len - target_length)/<span class="hsp3_number">2</span>) + target + <span class="hsp3_function">spaces</span>((len - target_length + <span class="hsp3_number">1</span>)/<span class="hsp3_number">2</span>)<br /> } <span class="hsp3_command">else</span> : <span class="hsp3_command">if</span> target_length > len {<br /> result = <span class="hsp3_function">strmid</span>(result, (target_length - len)/<span class="hsp3_number">2</span>, len)<br /> }<br /> <span class="hsp3_command">return</span> result<br /><span class="hsp3_preprocessor">#global</span><br /><br /> s = <span class="hsp3_string">"*"</span><br /> <span class="hsp3_command">repeat</span> <span class="hsp3_number">10</span><br /> <span class="hsp3_command">mes</span> <span class="hsp3_function">centered_text</span>(s, <span class="hsp3_number">15</span>)<br /> s += <span class="hsp3_string">" *"</span><br /> <span class="hsp3_command">loop</span><br /> <span class="hsp3_command">stop</span></code><br /><br />追記。<br />ifによる条件分岐をlimit関数に置き換えました。<br /><br /><code class="hsp3"><span class="hsp3_comment">/*<br /> どう書く?org より<br /> 文字列のセンタリング<br /> http://ja.doukaku.org/87/<br />*/</span><br /><span class="hsp3_preprocessor">#runtime</span> <span class="hsp3_string">"hsp3cl"</span><br /><br /><span class="hsp3_preprocessor">#module</span><br /><span class="hsp3_preprocessor">#defcfunc</span> <span class="hsp3_function">centered_text</span> str _source, int len<br /> <span class="hsp3_command">if</span> len <= <span class="hsp3_number">0</span> : <span class="hsp3_command">return</span> <span class="hsp3_string">""</span><br /> source = _source<br /><br /> source_strlen = <span class="hsp3_function">strlen</span>(source)<br /> <span class="hsp3_command">sdim</span> result, len + <span class="hsp3_number">1</span><br /> <span class="hsp3_command">memset</span> result, <span class="hsp3_stringcode">' '</span>, len<br /> <span class="hsp3_command">poke</span> result, <span class="hsp3_function">limit</span>((len - source_strlen)/<span class="hsp3_number">2</span>, <span class="hsp3_number">0</span>, len/<span class="hsp3_number">2</span>), <span class="hsp3_function">strmid</span>(source, <span class="hsp3_function">limit</span>((source_strlen - len)/<span class="hsp3_number">2</span>, <span class="hsp3_number">0</span>, source_strlen), len)<br /> <span class="hsp3_command">return</span> result<br /><span class="hsp3_preprocessor">#global</span><br /><br /> s = <span class="hsp3_string">"*"</span><br /> <span class="hsp3_command">repeat</span> <span class="hsp3_number">10</span><br /> <span class="hsp3_command">mes</span> <span class="hsp3_function">centered_text</span>(s, <span class="hsp3_number">15</span>)<br /> s += <span class="hsp3_string">" *"</span><br /> <span class="hsp3_command">loop</span><br /> <span class="hsp3_command">stop</span></code>ellerhttp://www.blogger.com/profile/07429654819789962794noreply@blogger.com0tag:blogger.com,1999:blog-648738693838588387.post-46339169082279900402008-03-18T22:48:00.008+09:002008-03-18T22:56:28.274+09:00HSP入門者向け講座リンク集 更新クロノス・クラウンにて<a href="http://crocro.com/pc/write/hsp_ug/link.html">HSP入門者向け講座リンク集</a>が更新されました。HSP関連サイトを横断的に検索できるサービスも追加されています。<br /><br />なお、当ブログは難易度中~高と評価されています。<br /><br /><span style="font-weight:bold;">関連</span><ul><li><a href="http://crocro.com/news/20080316183006.html">http://crocro.com/news/20080316183006.html</a></li></ul>ellerhttp://www.blogger.com/profile/07429654819789962794noreply@blogger.com0tag:blogger.com,1999:blog-648738693838588387.post-34050378889851043142008-03-06T10:52:00.003+09:002008-03-18T22:55:22.857+09:00はてなスターを設置しました動作確認用のテスト投稿です。ellerhttp://www.blogger.com/profile/07429654819789962794noreply@blogger.com0tag:blogger.com,1999:blog-648738693838588387.post-39131378730726226922008-03-01T19:12:00.007+09:002008-03-01T19:29:20.926+09:00日数計算・曜日計算<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgduz2VCjkjOrSn6UJT5ATgTtCMT4Fhx3_HytZ5SHXR4UHGzPHFqpfdMuHN_nKcdxShyphenhyphenxRkozwmx3uSVNg9WE_KB8ZtJeoQhsYV_V7Tb2MoCy1TEOYg46zuy7FGusQZS0BSmFD3USVxTTM/s1600-h/day.png"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgduz2VCjkjOrSn6UJT5ATgTtCMT4Fhx3_HytZ5SHXR4UHGzPHFqpfdMuHN_nKcdxShyphenhyphenxRkozwmx3uSVNg9WE_KB8ZtJeoQhsYV_V7Tb2MoCy1TEOYg46zuy7FGusQZS0BSmFD3USVxTTM/s320/day.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5172715151070728786" /></a>COMを利用した、日付を扱うモジュールです。<br /><br />指定した日の曜日を算出する関数と、指定した2つの日の差(日数)を算出する関数を含んでいます。<br />日数算出は「あと何日あるか」を算出するので、このサンプルプログラムのように「全部で何日か」を計算する場合は1を足す必要があります。<br style="clear:both" /><br /><code class="hsp3"><span class="hsp3_comment">/*<br /> 日付を扱うライブラリになりそうなもの。<br /> ※ 注意!パラメータチェック&エラーチェック処理未実装!<br /><br /> 参考:http://tsu.sakura.ne.jp/article/note/eid512.html<br />*/</span><br /><br /><span class="hsp3_preprocessor">#module</span><br /><span class="hsp3_comment">// ミリ秒を日に変換</span><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_preprocessor">ctype</span> <span class="hsp3_macro">cnvMsec2Day</span>(<span class="hsp3_number">%1</span>) <span class="hsp3_function">int</span>((<span class="hsp3_number">%1</span>)/<span class="hsp3_number">86400000</span>) <span class="hsp3_comment">// 86400000 = 1000*60*60*24</span><br /><span class="hsp3_comment">// javascript数式の計算</span><br /><span class="hsp3_preprocessor">#defcfunc</span> <span class="hsp3_function">jsEval</span> str jsExp<br /> <span class="hsp3_command">if</span> <span class="hsp3_function">vartype</span>(mssc) != <span class="hsp3_function">vartype</span>(<span class="hsp3_string">"comobj"</span>) {<br /> <span class="hsp3_command">newcom</span> mssc, <span class="hsp3_string">"MSScriptControl.ScriptControl"</span><br /> <span class="hsp3_command">comres</span> result<br /> mssc(<span class="hsp3_string">"Language"</span>) = <span class="hsp3_string">"JScript"</span><br /> }<br /> mssc -> <span class="hsp3_string">"Eval"</span> jsExp<br /> <span class="hsp3_command">return</span> result<br /><span class="hsp3_comment">// 曜日を返す(0~6)</span><br /><span class="hsp3_preprocessor">#defcfunc</span> <span class="hsp3_function">getDayOf</span> int y, int m, int d<br /> <span class="hsp3_command">return</span> <span class="hsp3_function">int</span>(<span class="hsp3_function">jsEval</span>(<span class="hsp3_string">"(new Date("</span> + y + <span class="hsp3_string">","</span> + (m - <span class="hsp3_number">1</span>) + <span class="hsp3_string">","</span> + d + <span class="hsp3_string">")).getDay();"</span>))<br /><span class="hsp3_comment">// 時間差を日数で返す</span><br /><span class="hsp3_preprocessor">#defcfunc</span> <span class="hsp3_function">getSub</span> int y1, int m1, int d1, int y2, int m2, int d2<br /> <span class="hsp3_command">return</span> <span class="hsp3_macro">cnvMsec2Day</span>(<span class="hsp3_function">jsEval</span>(<span class="hsp3_string">"Date.UTC("</span> + y2 + <span class="hsp3_string">","</span> + (m2 - <span class="hsp3_number">1</span>) + <span class="hsp3_string">","</span> + d2 + <span class="hsp3_string">") - Date.UTC("</span> + y1 + <span class="hsp3_string">","</span> + (m1 - <span class="hsp3_number">1</span>) + <span class="hsp3_string">","</span> + d1 + <span class="hsp3_string">");"</span>))<br /><span class="hsp3_preprocessor">#global</span><br /><br /><span class="hsp3_comment">// モジュールここまで</span><br /> day = <span class="hsp3_string">"日"</span>, <span class="hsp3_string">"月"</span>, <span class="hsp3_string">"火"</span>, <span class="hsp3_string">"水"</span>, <span class="hsp3_string">"木"</span>, <span class="hsp3_string">"金"</span>, <span class="hsp3_string">"土"</span><br /> <span class="hsp3_command">mes</span> <span class="hsp3_string">"今年は"</span> + (<span class="hsp3_number">1</span> + <span class="hsp3_function">getSub</span>( <span class="hsp3_function">gettime</span>(<span class="hsp3_number">0</span>), <span class="hsp3_number">1</span>, <span class="hsp3_number">1</span>, <span class="hsp3_function">gettime</span>(<span class="hsp3_number">0</span>), <span class="hsp3_number">12</span>, <span class="hsp3_number">31</span> )) + <span class="hsp3_string">"日間です"</span><br /> <span class="hsp3_command">mes</span> <span class="hsp3_string">"今日は"</span> + day( <span class="hsp3_function">getDayOf</span>( <span class="hsp3_function">gettime</span>(<span class="hsp3_number">0</span>), <span class="hsp3_function">gettime</span>(<span class="hsp3_number">1</span>), <span class="hsp3_function">gettime</span>(<span class="hsp3_number">3</span>) ) ) + <span class="hsp3_string">"曜日です"</span><br /> <span class="hsp3_command">stop</span><br /></code>ellerhttp://www.blogger.com/profile/07429654819789962794noreply@blogger.com0tag:blogger.com,1999:blog-648738693838588387.post-34398052861542455442008-02-12T13:49:00.001+09:002008-02-15T01:11:52.684+09:00アンドゥや再生ができるペイントツールGoFのCommandパターンにヒントを得て作成。<br />描画した履歴を文字列型配列変数に記録しておき、必要に応じて取り出します。<br />今回は単純な文字列型配列変数ではなく、スタックのモジュールを用意してみました。<br /><br />bregexp.dll(bregonig.dll)および月影ともさんのbregexp.hspが必要です。<br /><code class="hsp3"><span class="hsp3_comment">// 文字列用スタック</span><br /><span class="hsp3_preprocessor">#module</span> string_stack stack, max<br /><span class="hsp3_preprocessor">#modinit</span><br /> max = <span class="hsp3_number">0</span><br /> <span class="hsp3_command">sdim</span> stack, <span class="hsp3_number">32</span>, <span class="hsp3_number">10</span><br /> <span class="hsp3_command">return</span><br /><span class="hsp3_preprocessor">#deffunc</span> <span class="hsp3_command">new_sstack</span> array v<br /> <span class="hsp3_command">newmod</span> v, string_stack@<br /> <span class="hsp3_command">return</span><br /><span class="hsp3_preprocessor">#modfunc</span> <span class="hsp3_command">push</span> str s<br /> stack(max) = s<br /> max++<br /> <span class="hsp3_command">return</span><br /><span class="hsp3_preprocessor">#defcfunc</span> <span class="hsp3_function">pop</span> modvar string_stack@<br /> <span class="hsp3_command">if</span> max == <span class="hsp3_number">0</span> {<br /> <span class="hsp3_command">logmes</span> <span class="hsp3_string">"引数の値が異常です。"</span><br /> <span class="hsp3_command">return</span> <span class="hsp3_string">""</span><br /> }<br /> max--<br /> <span class="hsp3_command">return</span> stack(max)<br /><span class="hsp3_preprocessor">#defcfunc</span> <span class="hsp3_function">get_length</span> modvar string_stack@<br /> <span class="hsp3_command">return</span> max<br /><span class="hsp3_preprocessor">#defcfunc</span> <span class="hsp3_function">get_last</span> modvar string_stack@<br /> <span class="hsp3_command">return</span> stack(max-<span class="hsp3_number">1</span>)<br /><span class="hsp3_preprocessor">#defcfunc</span> <span class="hsp3_function">get_at</span> modvar string_stack@, int index<br /> <span class="hsp3_command">if</span> index < <span class="hsp3_number">0</span> || max <= index {<br /> <span class="hsp3_command">logmes</span> <span class="hsp3_string">"引数の値が異常です。"</span><br /> <span class="hsp3_command">return</span> <span class="hsp3_string">""</span><br /> }<br /> <span class="hsp3_command">return</span> stack(index)<br /><span class="hsp3_preprocessor">#modfunc</span> <span class="hsp3_command">clear_stack</span><br /> max = <span class="hsp3_number">0</span><br /> <span class="hsp3_command">return</span><br /><span class="hsp3_preprocessor">#global</span><br /><br /><span class="hsp3_comment">// 矩形の塗りつぶし</span><br /><span class="hsp3_comment">// http://rpen.blogspot.com/2007/11/blog-post.html</span><br /><span class="hsp3_preprocessor">#include</span> <span class="hsp3_string">"gdi32.as"</span><br /><span class="hsp3_preprocessor">#module</span><br /><span class="hsp3_preprocessor">#const</span> <span class="hsp3_macro">FLOODFILLSURFACE</span> <span class="hsp3_number">1</span><br /><span class="hsp3_preprocessor">#deffunc</span> <span class="hsp3_command">fill</span> int x, int y<br /> current_color = <span class="hsp3_sysval">ginfo_r</span>, <span class="hsp3_sysval">ginfo_g</span>, <span class="hsp3_sysval">ginfo_b</span><br /> <span class="hsp3_command">CreateSolidBrush</span> (<span class="hsp3_sysval">ginfo_b</span> << <span class="hsp3_number">16</span>) | (<span class="hsp3_sysval">ginfo_g</span> << <span class="hsp3_number">8</span>) | <span class="hsp3_sysval">ginfo_r</span><br /> <span class="hsp3_command">if</span> <span class="hsp3_sysval">stat</span> {<br /> hBrush = <span class="hsp3_sysval">stat</span><br /> } <span class="hsp3_command">else</span> {<br /> <span class="hsp3_command">dialog</span> <span class="hsp3_string">"ブラシの生成に失敗しました。プログラムを終了します。"</span>, <span class="hsp3_number">1</span><br /> <span class="hsp3_command">end</span><br /> }<br /> <span class="hsp3_command">SelectObject</span> <span class="hsp3_sysval">hDC</span>, hBrush<br /> <span class="hsp3_command">pget</span> x, y<br /> <span class="hsp3_command">ExtFloodFill</span> <span class="hsp3_sysval">hdc</span>, x, y, (<span class="hsp3_sysval">ginfo_b</span> << <span class="hsp3_number">16</span>) | (<span class="hsp3_sysval">ginfo_g</span> << <span class="hsp3_number">8</span>) | <span class="hsp3_sysval">ginfo_r</span>, <span class="hsp3_macro">FLOODFILLSURFACE</span><br /> <span class="hsp3_command">DeleteObject</span> hBrush<br /> <span class="hsp3_command">color</span> current_color(<span class="hsp3_number">0</span>), current_color(<span class="hsp3_number">1</span>), current_color(<span class="hsp3_number">2</span>)<br /> <span class="hsp3_command">return</span><br /><span class="hsp3_preprocessor">#global</span><br /><br /><span class="hsp3_comment">// 命令を解析して描画するモジュール</span><br /><span class="hsp3_preprocessor">#include</span> <span class="hsp3_string">"bregexp.hsp"</span><br /><span class="hsp3_preprocessor">#module</span> drawer<br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_preprocessor">ctype</span> <span class="hsp3_macro">result</span>(<span class="hsp3_number">%1</span>) <span class="hsp3_function">int</span>(_result(<span class="hsp3_number">%1</span>))<br /><span class="hsp3_preprocessor">#deffunc</span> <span class="hsp3_command">draw</span> str _cmd<br /> cmd = _cmd<br /> <span class="hsp3_command">BSplit</span> _result, cmd, <span class="hsp3_string">"m/[ ,]+/"</span><br /> <span class="hsp3_macro">switch</span> _result(<span class="hsp3_number">0</span>)<br /> <span class="hsp3_macro">case</span> <span class="hsp3_string">"moveTo"</span> : <span class="hsp3_command">pos</span> <span class="hsp3_macro">result</span>(<span class="hsp3_number">1</span>), <span class="hsp3_macro">result</span>(<span class="hsp3_number">2</span>) : <span class="hsp3_macro">swbreak</span><br /> <span class="hsp3_macro">case</span> <span class="hsp3_string">"lineTo"</span> : <span class="hsp3_command">line</span> <span class="hsp3_macro">result</span>(<span class="hsp3_number">1</span>), <span class="hsp3_macro">result</span>(<span class="hsp3_number">2</span>) : <span class="hsp3_macro">swbreak</span><br /> <span class="hsp3_macro">case</span> <span class="hsp3_string">"color"</span> : <span class="hsp3_command">color</span> <span class="hsp3_macro">result</span>(<span class="hsp3_number">1</span>), <span class="hsp3_macro">result</span>(<span class="hsp3_number">2</span>), <span class="hsp3_macro">result</span>(<span class="hsp3_number">3</span>) : <span class="hsp3_macro">swbreak</span><br /> <span class="hsp3_macro">case</span> <span class="hsp3_string">"fill"</span> : <span class="hsp3_command">fill</span> <span class="hsp3_macro">result</span>(<span class="hsp3_number">1</span>), <span class="hsp3_macro">result</span>(<span class="hsp3_number">2</span>) : <span class="hsp3_command">redraw</span> <span class="hsp3_number">1</span> : <span class="hsp3_macro">swbreak</span><br /> <span class="hsp3_macro">default</span> : <span class="hsp3_command">logmes</span> <span class="hsp3_string">"未知の命令です"</span> : <span class="hsp3_macro">swbreak</span><br /> <span class="hsp3_macro">swend</span><br /> <span class="hsp3_command">return</span><br /><span class="hsp3_preprocessor">#deffunc</span> <span class="hsp3_command">draw_all</span> array cmds, int wait_time<br /> <span class="hsp3_command">redraw</span> <span class="hsp3_number">0</span><br /> <span class="hsp3_command">color</span> <span class="hsp3_number">255</span>, <span class="hsp3_number">255</span>, <span class="hsp3_number">255</span> : <span class="hsp3_command">boxf</span><br /> <span class="hsp3_command">color</span><br /> <span class="hsp3_command">repeat</span> <span class="hsp3_function">get_length</span>(cmds)<br /> <span class="hsp3_command">draw</span> <span class="hsp3_function">get_at</span>(cmds, <span class="hsp3_sysval">cnt</span>)<br /> <span class="hsp3_command">if</span> wait_time {<br /> <span class="hsp3_command">redraw</span> <span class="hsp3_number">1</span><br /> <span class="hsp3_command">wait</span> wait_time<br /> <span class="hsp3_command">redraw</span> <span class="hsp3_number">0</span><br /> }<br /> <span class="hsp3_command">loop</span><br /> <span class="hsp3_command">redraw</span> <span class="hsp3_number">1</span><br /> <span class="hsp3_command">return</span><br /><span class="hsp3_preprocessor">#global</span><br /><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">push_and_do</span>(<span class="hsp3_number">%1</span>,<span class="hsp3_number">%2</span>) <span class="hsp3_command">push</span> <span class="hsp3_number">%1</span>, <span class="hsp3_number">%2</span> : <span class="hsp3_command">draw</span> <span class="hsp3_number">%2</span><br /><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">WM_MOUSEMOVE</span> <span class="hsp3_number">$00000200</span><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">WM_LBUTTONDOWN</span> <span class="hsp3_number">$00000201</span><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">WM_LBUTTONUP</span> <span class="hsp3_number">$00000202</span><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">WM_RBUTTONDOWN</span> <span class="hsp3_number">$00000204</span><br /><br /><span class="hsp3_label">*init</span><br /> <span class="hsp3_command">title</span> <span class="hsp3_string">"左ドラッグで線を描画 / 右クリックで塗りつぶし"</span><br /> <span class="hsp3_command">oncmd</span> <span class="hsp3_command">gosub</span> <span class="hsp3_label">*onLButtonDown</span>, <span class="hsp3_macro">WM_LBUTTONDOWN</span><br /> <span class="hsp3_command">oncmd</span> <span class="hsp3_command">gosub</span> <span class="hsp3_label">*onRButtonDown</span>, <span class="hsp3_macro">WM_RBUTTONDOWN</span><br /> <span class="hsp3_command">oncmd</span> <span class="hsp3_command">gosub</span> <span class="hsp3_label">*onLButtonUp</span>, <span class="hsp3_macro">WM_LBUTTONUP</span><br /> <span class="hsp3_command">oncmd</span> <span class="hsp3_command">gosub</span> <span class="hsp3_label">*onMouseMove</span>, <span class="hsp3_macro">WM_MOUSEMOVE</span><br /><br /> <span class="hsp3_command">objsize</span> <span class="hsp3_number">80</span><br /> <span class="hsp3_command">button</span> <span class="hsp3_command">gosub</span> <span class="hsp3_string">"color change"</span>, <span class="hsp3_label">*color_change</span><br /> <span class="hsp3_command">button</span> <span class="hsp3_command">gosub</span> <span class="hsp3_string">"redraw slowly"</span>, <span class="hsp3_label">*all_draw_slowly</span><br /> <span class="hsp3_command">button</span> <span class="hsp3_command">gosub</span> <span class="hsp3_string">"clear"</span>, <span class="hsp3_label">*clear</span><br /> <span class="hsp3_command">button</span> <span class="hsp3_command">gosub</span> <span class="hsp3_string">"undo"</span>, <span class="hsp3_label">*undo</span><br /> <span class="hsp3_command">new_sstack</span> cmds<br /> <span class="hsp3_command">stop</span><br /><br /><span class="hsp3_comment">// 色の変更</span><br /><span class="hsp3_label">*color_change</span><br /> <span class="hsp3_command">hsvcolor</span> <span class="hsp3_function">rnd</span>(<span class="hsp3_number">192</span>), <span class="hsp3_number">255</span>, <span class="hsp3_number">255</span><br /> <span class="hsp3_macro">push_and_do</span> cmds, <span class="hsp3_string">"color "</span> + <span class="hsp3_sysval">ginfo_r</span> + <span class="hsp3_string">","</span> + <span class="hsp3_sysval">ginfo_g</span> + <span class="hsp3_string">","</span> + <span class="hsp3_sysval">ginfo_b</span><br /> <span class="hsp3_command">return</span><br /><span class="hsp3_comment">// 全消去</span><br /><span class="hsp3_label">*clear</span><br /> <span class="hsp3_command">clear_stack</span> cmds<br /> <span class="hsp3_command">draw_all</span> cmds, <span class="hsp3_number">0</span><br /> <span class="hsp3_command">return</span><br /><span class="hsp3_comment">// アンドゥ</span><br /><span class="hsp3_label">*undo</span><br /> tmp = <span class="hsp3_function">pop</span>(cmds)<br /> <span class="hsp3_command">draw_all</span> cmds, <span class="hsp3_number">0</span><br /> <span class="hsp3_command">return</span><br /><span class="hsp3_comment">// すべて描画</span><br /><span class="hsp3_label">*all_draw</span><br /> <span class="hsp3_command">draw_all</span> cmds, <span class="hsp3_number">0</span><br /> <span class="hsp3_command">return</span><br /><span class="hsp3_comment">// ゆっくりとすべて描画</span><br /><span class="hsp3_label">*all_draw_slowly</span><br /> <span class="hsp3_command">oncmd</span> <span class="hsp3_number">0</span><br /> <span class="hsp3_command">gosub</span> <span class="hsp3_label">*invalidate_buttons</span><br /> <span class="hsp3_command">draw_all</span> cmds, <span class="hsp3_number">4</span><br /> <span class="hsp3_command">gosub</span> <span class="hsp3_label">*validate_buttons</span><br /> <span class="hsp3_command">oncmd</span> <span class="hsp3_number">1</span><br /> <span class="hsp3_command">return</span><br /><span class="hsp3_comment">// 左ドラッグ開始</span><br /><span class="hsp3_label">*onLButtonDown</span><br /> dragging = <span class="hsp3_number">1</span><br /> <span class="hsp3_macro">push_and_do</span> cmds, <span class="hsp3_string">"moveTo "</span> + <span class="hsp3_sysval">mousex</span> + <span class="hsp3_string">","</span> + <span class="hsp3_sysval">mousey</span><br /> <span class="hsp3_command">return</span><br /><span class="hsp3_comment">// 左ドラッグ終了</span><br /><span class="hsp3_label">*onLButtonUp</span><br /> dragging = <span class="hsp3_number">0</span><br /> <span class="hsp3_command">return</span><br /><span class="hsp3_comment">// 左ドラッグ中</span><br /><span class="hsp3_label">*onMouseMove</span><br /> <span class="hsp3_command">if</span> dragging {<br /> <span class="hsp3_macro">push_and_do</span> cmds, <span class="hsp3_string">"lineTo "</span> + <span class="hsp3_sysval">mousex</span> + <span class="hsp3_string">","</span> + <span class="hsp3_sysval">mousey</span><br /> }<br /> <span class="hsp3_command">return</span><br /><span class="hsp3_comment">// 右クリック</span><br /><span class="hsp3_label">*onRButtonDown</span><br /> <span class="hsp3_command">if</span> dragging == <span class="hsp3_number">0</span> {<br /> <span class="hsp3_macro">push_and_do</span> cmds, <span class="hsp3_string">"fill "</span> + <span class="hsp3_sysval">mousex</span> + <span class="hsp3_string">","</span> + <span class="hsp3_sysval">mousey</span><br /> }<br /> <span class="hsp3_command">return</span><br /><br /><span class="hsp3_preprocessor">#include</span> <span class="hsp3_string">"obj.as"</span><br /><span class="hsp3_label">*invalidate_buttons</span><br /> <span class="hsp3_command">repeat</span> <span class="hsp3_number">4</span><br /> <span class="hsp3_command">objgray</span> <span class="hsp3_sysval">cnt</span>, <span class="hsp3_number">0</span><br /> <span class="hsp3_command">loop</span><br /> <span class="hsp3_command">return</span><br /><span class="hsp3_label">*validate_buttons</span><br /> <span class="hsp3_command">repeat</span> <span class="hsp3_number">4</span><br /> <span class="hsp3_command">objgray</span> <span class="hsp3_sysval">cnt</span>, <span class="hsp3_number">1</span><br /> <span class="hsp3_command">loop</span><br /> <span class="hsp3_command">return</span></code>ellerhttp://www.blogger.com/profile/07429654819789962794noreply@blogger.com0tag:blogger.com,1999:blog-648738693838588387.post-1176103516288721492008-02-09T09:36:00.000+09:002008-02-09T13:18:43.795+09:00リストビューのソート<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3uQE50LqDWvUHF5XanA98fLwAXn6Vl0WSwuxJMEH2BQzC3CwB-LsRRsUdgkMKSmLEW6wGbA6M69KY4-R697svowxOF0_vAbLE6H1Kctyd55xNwhbq4Ei4rH8eFK9ajrvFI2xr8OlWx-M/s1600-h/listview.png"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3uQE50LqDWvUHF5XanA98fLwAXn6Vl0WSwuxJMEH2BQzC3CwB-LsRRsUdgkMKSmLEW6wGbA6M69KY4-R697svowxOF0_vAbLE6H1Kctyd55xNwhbq4Ei4rH8eFK9ajrvFI2xr8OlWx-M/s320/listview.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5164783895974922546" /></a>リストビューのアイテムをLVM_SORTITEMSEXメッセージを使ってソートします。ちょくとさんのコールバック関数DLL「hscallbk.dll」が必要です。<br />リストビューのモジュールとしてもそこそこ利用できるかもしれません。<br /><br />エクスプローラのように、「ヘッダ部分をクリックすると並び変わる」ようにもできるでしょう。(参考:<a href="http://hsp.tv/play/pforum.php?mode=pastwch&num=2749">http://hsp.tv/play/pforum.php?mode=pastwch&num=2749</a>)<br /><br /><br />LVM_SORTITEMSEXメッセージの日本語情報は意外と少ないので、気が向いたら<a href="http://hspdev-wiki.net/?%A5%EA%A5%B9%A5%C8%A5%D3%A5%E5%A1%BC%A4%A4%A4%ED%A4%A4%A4%ED">開発Wikiにフィードバックします</a>。<br style="clear:both;" /><code class="hsp3"><span class="hsp3_comment">// 参考資料:</span><br /><span class="hsp3_comment">// リストビューを作成してみる</span><br /><span class="hsp3_comment">// http://yokohama.cool.ne.jp/chokuto/urawaza/listview1.html</span><br /><span class="hsp3_comment">// Windows32 API Constance 検索</span><br /><span class="hsp3_comment">// http://hspnext.com/tool/hsptool04.htm</span><br /><span class="hsp3_comment">// MSDN - LVM_SORTITEMSEX</span><br /><span class="hsp3_comment">// http://msdn2.microsoft.com/ja-jp/library/bb761055(en-us).aspx</span><br /><span class="hsp3_preprocessor">#module</span> mod_listview<br /><span class="hsp3_preprocessor">#include</span> <span class="hsp3_string">"hscallbk.as"</span><br /><span class="hsp3_preprocessor">#uselib</span> <span class="hsp3_string">""</span><br /><span class="hsp3_preprocessor">#func</span> <span class="hsp3_command">sort_items</span> <span class="hsp3_string">""</span> int, int, int<br /><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">LVM_SETITEM</span> <span class="hsp3_number">$00001006</span><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">LVM_INSERTITEM</span> <span class="hsp3_number">$00001007</span><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">LVM_INSERTCOLUMN</span> <span class="hsp3_number">$0000101B</span><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">LVM_SORTITEMSEX</span> <span class="hsp3_number">$00001051</span><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">LVM_GETITEMTEXTA</span> <span class="hsp3_number">$0000102D</span><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">LVS_REPORT</span> <span class="hsp3_number">$00000001</span><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">WS_EX_NOPARENTNOTIFY</span> <span class="hsp3_number">$00000004</span><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">WS_VISIBLE</span> <span class="hsp3_number">$10000000</span><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">WS_CHILD</span> <span class="hsp3_number">$40000000</span><br /><br /><span class="hsp3_preprocessor">#deffunc</span> <span class="hsp3_command">make_listview</span><br /> <span class="hsp3_command">if</span> <span class="hsp3_function">vartype</span>(proc) != <span class="hsp3_function">vartype</span>(<span class="hsp3_string">"callback"</span>) : <span class="hsp3_command">gosub</span> <span class="hsp3_label">*init</span><br /> <span class="hsp3_command">winobj</span> <span class="hsp3_string">"SysListView32"</span>, <span class="hsp3_string">"ListView"</span>, <span class="hsp3_macro">WS_EX_NOPARENTNOTIFY</span>, <span class="hsp3_macro">WS_VISIBLE</span> | <span class="hsp3_macro">WS_CHILD</span> | <span class="hsp3_macro">LVS_REPORT</span>, -<span class="hsp3_number">1</span>, -<span class="hsp3_number">1</span><br /> <span class="hsp3_command">return</span> <span class="hsp3_sysval">stat</span><br /><span class="hsp3_label">*init</span><br /> <span class="hsp3_command">setcallbk</span> proc, <span class="hsp3_command">sort_items</span>, <span class="hsp3_label">*sort_flag</span><br /> <span class="hsp3_command">sdim</span> name, <span class="hsp3_number">64</span>, <span class="hsp3_number">2</span><br /> <span class="hsp3_command">dim</span> lvcolumn, <span class="hsp3_number">8</span><br /> <span class="hsp3_command">dim</span> lvitem, <span class="hsp3_number">6</span><br /> lvcolumn.<span class="hsp3_number">0</span> = <span class="hsp3_number">0x000F</span><br /> lvcolumn.<span class="hsp3_number">2</span> = <span class="hsp3_number">100</span><br /> lvitem.<span class="hsp3_number">0</span> = <span class="hsp3_number">0x0001</span><br /> lvitem.<span class="hsp3_number">6</span> = <span class="hsp3_number">64</span><br /> <span class="hsp3_command">return</span><br /><br /><span class="hsp3_preprocessor">#deffunc</span> <span class="hsp3_command">add_column</span> int id_list, str column_name, int index<br /> <span class="hsp3_command">if</span>(index < <span class="hsp3_number">0</span> | id_list < <span class="hsp3_number">0</span>) {<br /> <span class="hsp3_command">logmes</span> <span class="hsp3_string">"パラメータが不正です。"</span><br /> <span class="hsp3_command">return</span> -<span class="hsp3_number">1</span><br /> }<br /> name = column_name<br /> lvcolumn.<span class="hsp3_number">3</span> = <span class="hsp3_function">varptr</span>(name)<br /> <span class="hsp3_command">sendmsg</span> <span class="hsp3_macro">objinfo_hwnd</span>(id_list), <span class="hsp3_macro">LVM_INSERTCOLUMN</span>, index, <span class="hsp3_function">varptr</span>(lvcolumn)<br /> <span class="hsp3_command">return</span> <span class="hsp3_sysval">stat</span><br /><br /><span class="hsp3_preprocessor">#deffunc</span> <span class="hsp3_command">add_item</span> int id_list, array item, int index<br /> <span class="hsp3_command">if</span>(index < <span class="hsp3_number">0</span> | id_list < <span class="hsp3_number">0</span>) {<br /> <span class="hsp3_command">logmes</span> <span class="hsp3_string">"パラメータが不正です。"</span><br /> <span class="hsp3_command">return</span> -<span class="hsp3_number">1</span><br /> }<br /> <span class="hsp3_command">if</span> <span class="hsp3_function">vartype</span>(item) != <span class="hsp3_function">vartype</span>(<span class="hsp3_string">"str"</span>) {<br /> <span class="hsp3_command">logmes</span> <span class="hsp3_string">"配列変数の型が不正です。文字列型の変数を渡してください。"</span><br /> <span class="hsp3_command">return</span> -<span class="hsp3_number">1</span><br /> }<br /> <span class="hsp3_comment">// アイテムの作成</span><br /> lvitem.<span class="hsp3_number">1</span> = index<br /> lvitem.<span class="hsp3_number">2</span> = <span class="hsp3_number">0</span><br /> lvitem.<span class="hsp3_number">5</span> = <span class="hsp3_function">varptr</span>(item)<br /> <span class="hsp3_command">sendmsg</span> <span class="hsp3_macro">objinfo_hwnd</span>(id_list), <span class="hsp3_macro">LVM_INSERTITEM</span>, <span class="hsp3_number">0</span>, <span class="hsp3_function">varptr</span>(lvitem)<br /><br /> <span class="hsp3_comment">// サブアイテムの作成</span><br /> <span class="hsp3_command">repeat</span> <span class="hsp3_function">length</span>(item) - <span class="hsp3_number">1</span>, <span class="hsp3_number">1</span><br /> lvitem.<span class="hsp3_number">2</span> = <span class="hsp3_sysval">cnt</span><br /> lvitem.<span class="hsp3_number">5</span> = <span class="hsp3_function">varptr</span>(item(<span class="hsp3_sysval">cnt</span>))<br /> <span class="hsp3_command">sendmsg</span> <span class="hsp3_macro">objinfo_hwnd</span>(id_list), <span class="hsp3_macro">LVM_SETITEM</span>, <span class="hsp3_number">0</span>, <span class="hsp3_function">varptr</span>(lvitem)<br /> <span class="hsp3_command">loop</span><br /> <span class="hsp3_command">return</span> <span class="hsp3_sysval">stat</span><br /><br /><span class="hsp3_preprocessor">#deffunc</span> <span class="hsp3_command">sort</span> int id_list, int column, int vtype, int sortmode<br /> <span class="hsp3_command">if</span>(column < <span class="hsp3_number">0</span> | id_list < <span class="hsp3_number">0</span> | vtype < <span class="hsp3_number">0</span>) {<br /> <span class="hsp3_command">logmes</span> <span class="hsp3_string">"パラメータが不正です。"</span><br /> <span class="hsp3_command">return</span> -<span class="hsp3_number">1</span><br /> }<br /> lvitem.<span class="hsp3_number">2</span> = column<br /> var_type = vtype<br /> <span class="hsp3_command">sendmsg</span> <span class="hsp3_macro">objinfo_hwnd</span>(id_list), <span class="hsp3_macro">LVM_SORTITEMSEX</span>, sortmode, <span class="hsp3_function">varptr</span>(proc)<br /> <span class="hsp3_command">return</span><br /><br /><span class="hsp3_preprocessor">#defcfunc</span> <span class="hsp3_preprocessor">local</span> <span class="hsp3_function">compareAsInt</span> int id_list, int index1, int index2, int sortmode<br /> <span class="hsp3_command">gosub</span> <span class="hsp3_label">*startCompare</span><br /> <span class="hsp3_command">return</span> <span class="hsp3_function">int</span>(name(sortmode & <span class="hsp3_number">1</span>)) - <span class="hsp3_function">int</span>(name((sortmode & <span class="hsp3_number">1</span>) ^ <span class="hsp3_number">1</span>))<br /><br /><span class="hsp3_preprocessor">#defcfunc</span> <span class="hsp3_preprocessor">local</span> <span class="hsp3_function">compareAsStr</span> int id_list, int index1, int index2, int sortmode<br /> <span class="hsp3_command">gosub</span> <span class="hsp3_label">*startCompare</span><br /> <span class="hsp3_command">return</span> name(sortmode & <span class="hsp3_number">1</span>) ! name((sortmode & <span class="hsp3_number">1</span>) ^ <span class="hsp3_number">1</span>)<br /> <span class="hsp3_command">return</span><br /><br /><span class="hsp3_label">*startCompare</span><br /> lvitem.<span class="hsp3_number">5</span> = <span class="hsp3_function">varptr</span>(name(<span class="hsp3_number">0</span>))<br /> <span class="hsp3_command">sendmsg</span> <span class="hsp3_macro">objinfo_hwnd</span>(id_list), <span class="hsp3_macro">LVM_GETITEMTEXTA</span>, index1, <span class="hsp3_function">varptr</span>(lvitem)<br /> lvitem.<span class="hsp3_number">5</span> = <span class="hsp3_function">varptr</span>(name(<span class="hsp3_number">1</span>))<br /> <span class="hsp3_command">sendmsg</span> <span class="hsp3_macro">objinfo_hwnd</span>(id_list), <span class="hsp3_macro">LVM_GETITEMTEXTA</span>, index2, <span class="hsp3_function">varptr</span>(lvitem)<br /> <span class="hsp3_command">return</span><br /><br /><span class="hsp3_comment">// サブアイテム(ファイルサイズ)でソート</span><br /><span class="hsp3_comment">// 第3引数が0なら昇順、1なら降順</span><br /><span class="hsp3_label">*sort_flag</span><br /> <span class="hsp3_command">if</span> var_type == <span class="hsp3_function">vartype</span>(<span class="hsp3_string">"int"</span>) {<br /> <span class="hsp3_command">return</span> <span class="hsp3_function">compareAsInt</span>@mod_listview(id_list, <span class="hsp3_function">callbkarg</span>(<span class="hsp3_number">0</span>), <span class="hsp3_function">callbkarg</span>(<span class="hsp3_number">1</span>), <span class="hsp3_function">callbkarg</span>(<span class="hsp3_number">2</span>))<br /> } <span class="hsp3_command">else</span> : <span class="hsp3_command">if</span> var_type == <span class="hsp3_function">vartype</span>(<span class="hsp3_string">"str"</span>) {<br /> <span class="hsp3_command">return</span> <span class="hsp3_function">compareAsStr</span>@mod_listview(id_list, <span class="hsp3_function">callbkarg</span>(<span class="hsp3_number">0</span>), <span class="hsp3_function">callbkarg</span>(<span class="hsp3_number">1</span>), <span class="hsp3_function">callbkarg</span>(<span class="hsp3_number">2</span>))<br /> }<br /> <span class="hsp3_command">return</span> <span class="hsp3_number">0</span><br /><br /><span class="hsp3_preprocessor">#global</span> <span class="hsp3_comment">// end of mod_listview</span><br /><br /><br /><span class="hsp3_comment">// 疑似的な「ファイル」の数</span><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">NUM_FILES</span> <span class="hsp3_number">10</span><br /><br /> <span class="hsp3_command">randomize</span><br /> <span class="hsp3_command">gosub</span> <span class="hsp3_label">*createGuiObjects</span><br /> <span class="hsp3_command">stop</span><br /><br /><span class="hsp3_comment">// ボタンクリックによって呼び出されるサブルーチン</span><br /><span class="hsp3_label">*sort_asc_by_name</span><br /> <span class="hsp3_command">sort</span> id_list, <span class="hsp3_number">0</span>, <span class="hsp3_function">vartype</span>(<span class="hsp3_string">"str"</span>), <span class="hsp3_number">0</span><br /> <span class="hsp3_command">return</span><br /><span class="hsp3_label">*sort_desc_by_name</span><br /> <span class="hsp3_command">sort</span> id_list, <span class="hsp3_number">0</span>, <span class="hsp3_function">vartype</span>(<span class="hsp3_string">"str"</span>), <span class="hsp3_number">1</span><br /> <span class="hsp3_command">return</span><br /><span class="hsp3_label">*sort_asc_by_size</span><br /> <span class="hsp3_command">sort</span> id_list, <span class="hsp3_number">1</span>, <span class="hsp3_function">vartype</span>(<span class="hsp3_string">"int"</span>), <span class="hsp3_number">0</span><br /> <span class="hsp3_command">return</span><br /><span class="hsp3_label">*sort_desc_by_size</span><br /> <span class="hsp3_command">sort</span> id_list, <span class="hsp3_number">1</span>, <span class="hsp3_function">vartype</span>(<span class="hsp3_string">"int"</span>), <span class="hsp3_number">1</span><br /> <span class="hsp3_command">return</span><br /><br /><span class="hsp3_comment">// ボタンとリストビューの作成</span><br /><span class="hsp3_label">*createGuiObjects</span><br /> <span class="hsp3_comment">// ボタンを作成</span><br /> <span class="hsp3_command">objsize</span> <span class="hsp3_sysval">ginfo_winx</span> / <span class="hsp3_number">4</span>, <span class="hsp3_number">32</span><br /> <span class="hsp3_command">pos</span> <span class="hsp3_number">0</span>, <span class="hsp3_number">0</span> : <span class="hsp3_command">button</span> <span class="hsp3_command">gosub</span> <span class="hsp3_string">"ファイル名で昇順にソート"</span>, <span class="hsp3_label">*sort_asc_by_name</span><br /> <span class="hsp3_command">pos</span> <span class="hsp3_sysval">ginfo_winx</span> / <span class="hsp3_number">4</span>, <span class="hsp3_number">0</span> : <span class="hsp3_command">button</span> <span class="hsp3_command">gosub</span> <span class="hsp3_string">"ファイル名で降順にソート"</span>, <span class="hsp3_label">*sort_desc_by_name</span><br /> <span class="hsp3_command">pos</span> <span class="hsp3_sysval">ginfo_winx</span> / <span class="hsp3_number">2</span>, <span class="hsp3_number">0</span> : <span class="hsp3_command">button</span> <span class="hsp3_command">gosub</span> <span class="hsp3_string">"ファイルサイズで昇順にソート"</span>, <span class="hsp3_label">*sort_asc_by_size</span><br /> <span class="hsp3_command">pos</span> <span class="hsp3_sysval">ginfo_winx</span> * <span class="hsp3_number">3</span> / <span class="hsp3_number">4</span>, <span class="hsp3_number">0</span> : <span class="hsp3_command">button</span> <span class="hsp3_command">gosub</span> <span class="hsp3_string">"ファイルサイズで降順にソート"</span>, <span class="hsp3_label">*sort_desc_by_size</span><br /><br /> <span class="hsp3_comment">// リストビューコントロール作成</span><br /> <span class="hsp3_command">pos</span> <span class="hsp3_number">0</span>, <span class="hsp3_number">32</span> : <span class="hsp3_command">objsize</span> <span class="hsp3_sysval">ginfo_winx</span>, <span class="hsp3_sysval">ginfo_winy</span> - <span class="hsp3_number">32</span><br /> <span class="hsp3_command">make_listview</span> : id_list = <span class="hsp3_sysval">stat</span><br /><br /> <span class="hsp3_comment">// カラムを追加</span><br /> column_name = <span class="hsp3_string">"ファイル名"</span>, <span class="hsp3_string">"ファイルサイズ"</span><br /> <span class="hsp3_command">repeat</span> <span class="hsp3_number">2</span><br /> <span class="hsp3_command">add_column</span> id_list, column_name(<span class="hsp3_sysval">cnt</span>), <span class="hsp3_sysval">cnt</span><br /> <span class="hsp3_command">if</span> <span class="hsp3_sysval">stat</span> == -<span class="hsp3_number">1</span> {<br /> <span class="hsp3_command">dialog</span> <span class="hsp3_string">"カラムの追加に失敗"</span>, <span class="hsp3_number">1</span><br /> <span class="hsp3_command">end</span><br /> }<br /> <span class="hsp3_command">loop</span><br /><br /> <span class="hsp3_comment">// アイテム・サブアイテムの追加</span><br /> <span class="hsp3_command">sdim</span> item_name, <span class="hsp3_number">64</span>, <span class="hsp3_number">2</span><br /> <span class="hsp3_command">repeat</span> <span class="hsp3_macro">NUM_FILES</span><br /> item_name = <span class="hsp3_string">"ファイル"</span> + <span class="hsp3_sysval">cnt</span>, <span class="hsp3_string">""</span> + <span class="hsp3_function">rnd</span>(<span class="hsp3_number">1000</span>) + <span class="hsp3_string">" KB"</span><br /> <span class="hsp3_command">add_item</span> id_list, item_name, <span class="hsp3_sysval">cnt</span><br /> <span class="hsp3_command">if</span> <span class="hsp3_sysval">stat</span> == -<span class="hsp3_number">1</span> {<br /> <span class="hsp3_command">dialog</span> <span class="hsp3_string">"アイテムの追加に失敗"</span>, <span class="hsp3_number">1</span><br /> <span class="hsp3_command">end</span><br /> }<br /> <span class="hsp3_command">loop</span><br /> <span class="hsp3_command">return</span><br /></code>ellerhttp://www.blogger.com/profile/07429654819789962794noreply@blogger.com0tag:blogger.com,1999:blog-648738693838588387.post-16944792531709737162008-02-05T09:44:00.002+09:002008-05-03T08:34:20.244+09:00正規表現でHTMLの見出しを抽出する<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX_avAgaozc0e3fBsUY0U4iPnJt7fMwqrUT3LD-RCTO06vAp616Ljif4rVPMDO89qmHPf8KmZI2tbBRNKCJTQ63fjvDCHD1_nhVE3_cKwc3VMVeZ3GZWDK2r5N99kB9ViHQYmvJuD1oQk/s1600-h/oniguruma.png"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX_avAgaozc0e3fBsUY0U4iPnJt7fMwqrUT3LD-RCTO06vAp616Ljif4rVPMDO89qmHPf8KmZI2tbBRNKCJTQ63fjvDCHD1_nhVE3_cKwc3VMVeZ3GZWDK2r5N99kB9ViHQYmvJuD1oQk/s320/oniguruma.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5163290638925318434" /></a>bregonig.dllを使いたくて「ヘッダファイル作ろうかなー」と考えていたら既に<a href="http://tu-sa.net/">月影とも</a>さん(と<a href="http://d.hatena.ne.jp/Nekota/">猫太</a>さん)が作成されていました。<br />COMによる正規表現は何かと不便なので、今後重宝しそうです。<br /><ins>リンク先を変更。[08/05/03]</ins><br /><br style="clear:both;" /><code class="hsp3"><span class="hsp3_comment">// つーさのくーかん「物置 > HSP3 > BREGEXP.hsp」</span><br /><span class="hsp3_comment">// http://tu-sa.net/0360</span><br /><br /><span class="hsp3_preprocessor">#runtime</span> <span class="hsp3_string">"hsp3cl"</span><br /><span class="hsp3_preprocessor">#include</span> <span class="hsp3_string">"bregexp.hsp"</span><br /> <span class="hsp3_command">dialog</span> <span class="hsp3_string">"htm;*.html"</span>, <span class="hsp3_number">16</span>, <span class="hsp3_string">"見出しを抽出するHTMLファイル"</span><br /> <span class="hsp3_command">if</span> <span class="hsp3_sysval">stat</span> == <span class="hsp3_number">0</span> : <span class="hsp3_command">end</span><br /><br /> <span class="hsp3_command">notesel</span> file<br /> <span class="hsp3_command">noteload</span> <span class="hsp3_sysval">refstr</span><br /> position = <span class="hsp3_number">0</span><br /> margin_left = <span class="hsp3_string">"-"</span>, <span class="hsp3_string">"--"</span>, <span class="hsp3_string">"---"</span>, <span class="hsp3_string">"----"</span>, <span class="hsp3_string">"-----"</span>, <span class="hsp3_string">"------"</span><br /> <span class="hsp3_command">repeat</span><br /> result = <span class="hsp3_function">BMatch</span>(file, position, <span class="hsp3_string">"m#<[hH]([1-6])[^>]*>(.*)</[hH]\\1>#k"</span>)<br /> <span class="hsp3_command">if</span> result == -<span class="hsp3_number">1</span> : <span class="hsp3_command">break</span><br /><br /> <span class="hsp3_command">mes</span> margin_left(<span class="hsp3_function">int</span>(<span class="hsp3_function">BMGetStr</span>(<span class="hsp3_number">1</span>))-<span class="hsp3_number">1</span>) + <span class="hsp3_function">BMGetStr</span>(<span class="hsp3_number">2</span>)<br /> position += <span class="hsp3_function">BMGetNextPos</span>()<br /> <span class="hsp3_command">loop</span><br /> <span class="hsp3_command">stop</span></code>ellerhttp://www.blogger.com/profile/07429654819789962794noreply@blogger.com0tag:blogger.com,1999:blog-648738693838588387.post-83355496853885113702008-01-28T08:59:00.000+09:002008-01-28T09:05:13.705+09:00サイトのサムネイルを表示する<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOgu3NciKxDdMHb9RYVtvucWvis18ovmcKQ4sF-NlWjA04Jg18SfxhOopfDSey-MshGn_84QmnFFrYkUXwHnZP2VGmmqbgVRbfI2nFuju1ygVwq3ErrtOeR6rx5WhEj1efPlrOAC7gAD8/s1600-h/small.png"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOgu3NciKxDdMHb9RYVtvucWvis18ovmcKQ4sF-NlWjA04Jg18SfxhOopfDSey-MshGn_84QmnFFrYkUXwHnZP2VGmmqbgVRbfI2nFuju1ygVwq3ErrtOeR6rx5WhEj1efPlrOAC7gAD8/s320/small.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5160311112737900818" /></a>サイトのサムネイルを作成・表示するAPI「<a href="http://img.simpleapi.net/">ThumbnailAPI</a>」を利用します。<br />ネットの接続などはスクリプトから明示的には行っていません。imgload命令の内部で使用しているCOMが自動で行ってくれているようです。<br style="clear:both" /><code class="hsp3"><span class="hsp3_preprocessor">#include</span> <span class="hsp3_string">"mod_img.as"</span><br /> <span class="hsp3_command">imgload</span> <span class="hsp3_string">"http://img.simpleapi.net/small/http://www.forest.impress.co.jp/"</span><br /> <span class="hsp3_command">stop</span></code>ellerhttp://www.blogger.com/profile/07429654819789962794noreply@blogger.com0tag:blogger.com,1999:blog-648738693838588387.post-17488768849312253552008-01-24T05:37:00.000+09:002008-01-24T08:32:51.981+09:00複数行文字列の行数を取得する(2)FUJIさんのご指摘を受けて、HSP標準のnotemaxとほぼ同等の動作をするモジュール。<br /><br />参考:<a href="http://rpen.blogspot.com/2008/01/blog-post_23.html">複数行文字列の行数を取得する</a><br /><br /><code class="hsp3"><span class="hsp3_comment">// 行数取得モジュール</span><br /><span class="hsp3_comment">// 変数の型チェックは行っていないので注意</span><br /><span class="hsp3_preprocessor">#module</span><br /><span class="hsp3_comment">// instr()を利用した行数の取得</span><br /><span class="hsp3_preprocessor">#defcfunc</span> <span class="hsp3_function">get_lines_num1</span> var p1<br /> result = <span class="hsp3_number">0</span><br /> <span class="hsp3_command">repeat</span> <span class="hsp3_function">strlen</span>(p1)<br /> result++<br /> ins = <span class="hsp3_function">instr</span>(p1, <span class="hsp3_sysval">cnt</span>, <span class="hsp3_string">"\n"</span>)<br /> <span class="hsp3_command">if</span> ins == -<span class="hsp3_number">1</span> : <span class="hsp3_command">break</span><br /> <span class="hsp3_command">continue</span> <span class="hsp3_sysval">cnt</span> + ins + <span class="hsp3_number">2</span><br /> <span class="hsp3_command">loop</span><br /> <span class="hsp3_command">return</span> result<br /><span class="hsp3_comment">// 正規表現を利用した行数の取得</span><br /><span class="hsp3_preprocessor">#defcfunc</span> <span class="hsp3_function">get_lines_num2</span> var p1<br /> <span class="hsp3_command">if</span> <span class="hsp3_function">vartype</span>(com_regexp) != <span class="hsp3_function">vartype</span>(<span class="hsp3_string">"comobj"</span>) {<br /> <span class="hsp3_comment">// comオブジェクト型変数の初期化</span><br /> <span class="hsp3_command">newcom</span> com_regexp, <span class="hsp3_string">"VBScript.RegExp"</span><br /> <span class="hsp3_command">comres</span> com_result<br /> com_regexp(<span class="hsp3_string">"Pattern"</span>) = <span class="hsp3_string">"\\r\\n"</span><br /> com_regexp(<span class="hsp3_string">"Global"</span>) = <span class="hsp3_number">1</span><br /> }<br /> com_regexp-><span class="hsp3_string">"Execute"</span> p1<br /> result = com_result(<span class="hsp3_string">"Count"</span>) + <span class="hsp3_number">1</span> <span class="hsp3_comment">// 行数 = 改行の個数 + 1</span><br /> s = <span class="hsp3_function">strmid</span>(p1, -<span class="hsp3_number">1</span>, <span class="hsp3_number">2</span>)<br /> <span class="hsp3_command">if</span> s == <span class="hsp3_string">"\n"</span> | s == <span class="hsp3_string">""</span> : result-- <span class="hsp3_comment">// 最後が空行ならその行をカウントしない</span><br /> <span class="hsp3_command">return</span> result<br /><span class="hsp3_comment">// notemaxを利用した行数の取得</span><br /><span class="hsp3_preprocessor">#defcfunc</span> <span class="hsp3_function">get_lines_num3</span> var p1<br /> <span class="hsp3_command">notesel</span> p1<br /> result = <span class="hsp3_sysval">notemax</span><br /> <span class="hsp3_command">noteunsel</span><br /> <span class="hsp3_command">return</span> result<br /><span class="hsp3_preprocessor">#global</span><br /> <span class="hsp3_command">sdim</span> s, <span class="hsp3_number">32</span>, <span class="hsp3_number">3</span><br /> s(<span class="hsp3_number">0</span>) = <span class="hsp3_string">"Hot\nSoup\nProcessor"</span><br /> s(<span class="hsp3_number">1</span>) = <span class="hsp3_string">"sample\nstrings\n"</span><br /> s(<span class="hsp3_number">2</span>) = <span class="hsp3_string">""</span><br /> <span class="hsp3_command">foreach</span> s<br /> <span class="hsp3_command">mes</span> <span class="hsp3_function">get_lines_num1</span>(s(<span class="hsp3_sysval">cnt</span>))<br /> <span class="hsp3_command">mes</span> <span class="hsp3_function">get_lines_num2</span>(s(<span class="hsp3_sysval">cnt</span>))<br /> <span class="hsp3_command">mes</span> <span class="hsp3_function">get_lines_num3</span>(s(<span class="hsp3_sysval">cnt</span>))<br /> <span class="hsp3_command">mes</span> <span class="hsp3_string">"***"</span><br /> <span class="hsp3_command">loop</span><br /> <span class="hsp3_command">stop</span></code>ellerhttp://www.blogger.com/profile/07429654819789962794noreply@blogger.com4tag:blogger.com,1999:blog-648738693838588387.post-36369853922433229742008-01-23T22:57:00.000+09:002008-01-23T23:00:25.798+09:00複数行文字列の行数を取得するnotemaxのように複数行文字列の行数を取得します。<br />正規表現版はパターンを"(\\r\\n)+"に変更することで、空行を無視するようにもできます。<br /><code class="hsp3"><span class="hsp3_preprocessor">#module</span><br /><span class="hsp3_comment">// instr()を利用した行数の取得</span><br /><span class="hsp3_preprocessor">#defcfunc</span> <span class="hsp3_function">get_lines_num</span> var p1<br /> result = <span class="hsp3_number">0</span><br /> <span class="hsp3_command">repeat</span><br /> result++<br /> ins = <span class="hsp3_function">instr</span>(p1, <span class="hsp3_sysval">cnt</span>, <span class="hsp3_string">"\n"</span>)<br /> <span class="hsp3_command">if</span> ins == -<span class="hsp3_number">1</span> : <span class="hsp3_command">break</span><br /> <span class="hsp3_command">continue</span> <span class="hsp3_sysval">cnt</span> + ins + <span class="hsp3_number">2</span><br /> <span class="hsp3_command">loop</span><br /> <span class="hsp3_command">return</span> result<br /><span class="hsp3_comment">// 正規表現を利用した行数の取得</span><br /><span class="hsp3_preprocessor">#defcfunc</span> <span class="hsp3_function">get_lines_num2</span> var p1<br /> <span class="hsp3_command">if</span> <span class="hsp3_function">vartype</span>(com_regexp) != <span class="hsp3_function">vartype</span>(<span class="hsp3_string">"comobj"</span>) {<br /> <span class="hsp3_comment">// comオブジェクト型変数の初期化</span><br /> <span class="hsp3_command">newcom</span> com_regexp, <span class="hsp3_string">"VBScript.RegExp"</span><br /> <span class="hsp3_command">comres</span> com_result<br /> com_regexp(<span class="hsp3_string">"Pattern"</span>) = <span class="hsp3_string">"\\r\\n"</span><br /> com_regexp(<span class="hsp3_string">"Global"</span>) = <span class="hsp3_number">1</span><br /> }<br /> com_regexp-><span class="hsp3_string">"Execute"</span> p1<br /> <span class="hsp3_command">return</span> com_result(<span class="hsp3_string">"Count"</span>) + <span class="hsp3_number">1</span> <span class="hsp3_comment">// 行数 = 改行の個数 + 1</span><br /><span class="hsp3_preprocessor">#global</span><br /><br /> s = <span class="hsp3_string">"Hot\nSoup\nProcessor\n\n"</span><br /> <span class="hsp3_command">mes</span> <span class="hsp3_function">get_lines_num</span>(s)<br /> <span class="hsp3_command">mes</span> <span class="hsp3_function">get_lines_num2</span>(s)<br /> <span class="hsp3_command">stop</span></code>ellerhttp://www.blogger.com/profile/07429654819789962794noreply@blogger.com0tag:blogger.com,1999:blog-648738693838588387.post-82148605231423285432008-01-17T12:42:00.000+09:002008-01-24T08:34:40.749+09:00「ふっかつのじゅもん」っぽい暗号<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIX5cqm_f0ghbtFhm3l_jJ-XgHrlA8z9qKE-DH5_0kxmLu4_BxPLWG6PzJBI1JUSBLMYAp1Vk3UhEifXbsAfRSzpWCUgQyuwZlfR1NgaIOSvtYu8K4PS_MkFTybtSMZGD_C9AMBdHo9Rc/s1600-h/spell.png"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIX5cqm_f0ghbtFhm3l_jJ-XgHrlA8z9qKE-DH5_0kxmLu4_BxPLWG6PzJBI1JUSBLMYAp1Vk3UhEifXbsAfRSzpWCUgQyuwZlfR1NgaIOSvtYu8K4PS_MkFTybtSMZGD_C9AMBdHo9Rc/s320/spell.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5156340209656123650" /></a>昔のゲームに出てきそうなひらがな(64種)による暗号です。<br />ひらがな1文字(16ビット)で6ビットの情報が表現できますので、情報量は16/6=約2.7倍になります。妙にビット演算が多いので、単純な目的の割に複雑なスクリプトになっています。<br /><br />カタカナも取り入れれば7ビットの情報が表現できるはずです。また、<del>半角カタカナを使えば情報量を8/6=約1.3倍に抑えられます</del><ins>半角カタカナは濁点・半濁点の表現に1ビット要するので一概には言えません</ins>。<br />復元時にinstrによる線形検索を行っているなど、速度上の課題はまだまだあるでしょう。<br style="clear:both;"/><code class="hsp3"><span class="hsp3_comment">// 文字列型暗号作成スクリプト</span><br /><br /><span class="hsp3_comment">// 参考:テキストボックスの編集監視</span><br /><span class="hsp3_comment">// http://lhsp.s206.xrea.com/hsp_object2.html#4</span><br /><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_preprocessor">ctype</span> <span class="hsp3_macro">HIWORD</span>(<span class="hsp3_number">%1</span>) (<span class="hsp3_number">%1</span> >> <span class="hsp3_number">16</span> & <span class="hsp3_number">0xFFFF</span>)<br /><span class="hsp3_preprocessor">#module</span><br /><span class="hsp3_preprocessor">#include</span> <span class="hsp3_string">"hspmath.as"</span><br /><span class="hsp3_preprocessor">#const</span> <span class="hsp3_macro">SPELL_KEY</span> <span class="hsp3_number">0</span><br /><span class="hsp3_comment">// モジュールの初期化</span><br /><span class="hsp3_preprocessor">#deffunc</span> <span class="hsp3_command">init_spell</span><br /> <span class="hsp3_comment">// 文字列型暗号の素 64文字</span><br /> <span class="hsp3_command">sdim</span> base, <span class="hsp3_number">64</span> * <span class="hsp3_number">2</span> + <span class="hsp3_number">1</span><br /> base = <span class="hsp3_string">"あいうえおかきくけこがぎぐげごさしすせそざじずぜぞ"</span> <span class="hsp3_comment">// 25文字</span><br /> base += <span class="hsp3_string">"たちつてとだぢづでどなにぬねのはひふへほばびぶべぼ"</span> <span class="hsp3_comment">// 25 + 25 = 50文字</span><br /> base += <span class="hsp3_string">"まみむめもやゆよらりるれろん"</span> <span class="hsp3_comment">// 50 + 14 = 64文字</span><br /> <span class="hsp3_command">return</span><br /><br /><span class="hsp3_comment">// 指定した位置(ビット)から6ビットを取り出すマクロ</span><br /><span class="hsp3_comment">// バッファオーバーフローに注意</span><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_preprocessor">ctype</span> <span class="hsp3_macro">peek6</span>(<span class="hsp3_number">%1</span>, <span class="hsp3_number">%2</span>=<span class="hsp3_number">0</span>) ((((<span class="hsp3_function">peek</span>(<span class="hsp3_number">%1</span>, (<span class="hsp3_number">%2</span>) / <span class="hsp3_number">8</span>) << <span class="hsp3_number">8</span>) | <span class="hsp3_function">peek</span>(<span class="hsp3_number">%1</span>, <span class="hsp3_number">1</span> + (<span class="hsp3_number">%2</span>) / <span class="hsp3_number">8</span>)) >> (<span class="hsp3_number">10</span> - (<span class="hsp3_number">%2</span>) \ <span class="hsp3_number">8</span>)) & <span class="hsp3_number">0x3F</span>)<br /><br /><span class="hsp3_comment">// 指定した位置(ビット)から6ビット書き込む命令</span><br /><span class="hsp3_comment">// バッファオーバーフローに注意</span><br /><span class="hsp3_preprocessor">#deffunc</span> <span class="hsp3_command">poke6</span> var target, int index, int value<br /> i = (<span class="hsp3_function">peek</span>(target, index / <span class="hsp3_number">8</span>) << <span class="hsp3_number">8</span>) | <span class="hsp3_function">peek</span>(target, index / <span class="hsp3_number">8</span> + <span class="hsp3_number">1</span>)<br /> i ^= <span class="hsp3_macro">peek6</span>(target, index) << (<span class="hsp3_number">10</span> - (index \ <span class="hsp3_number">8</span>))<br /> i |= (value & <span class="hsp3_number">0x3F</span>) << (<span class="hsp3_number">10</span> - (index \ <span class="hsp3_number">8</span>))<br /> <span class="hsp3_command">poke</span> target, index / <span class="hsp3_number">8</span>, (i >> <span class="hsp3_number">8</span>) & <span class="hsp3_number">0xFF</span><br /> <span class="hsp3_command">poke</span> target, index / <span class="hsp3_number">8</span> + <span class="hsp3_number">1</span>, i & <span class="hsp3_number">0xFF</span><br /> <span class="hsp3_command">return</span><br /><br /><span class="hsp3_comment">// パスワードから通常の文字列データへ変換</span><br /><span class="hsp3_preprocessor">#deffunc</span> <span class="hsp3_command">spell2str</span> var result, str _before<br /> before = _before<br /> len = <span class="hsp3_function">strlen</span>(before)<br /> <span class="hsp3_command">randomize</span> <span class="hsp3_macro">SPELL_KEY</span><br /> <span class="hsp3_command">repeat</span> len / <span class="hsp3_number">2</span><br /> code = (<span class="hsp3_function">instr</span>(base, <span class="hsp3_number">0</span>, <span class="hsp3_function">strmid</span>(before, <span class="hsp3_sysval">cnt</span> * <span class="hsp3_number">2</span>, <span class="hsp3_number">2</span>)) / <span class="hsp3_number">2</span>) ^ <span class="hsp3_function">rnd</span>(<span class="hsp3_number">0x40</span>)<br /> <span class="hsp3_command">poke6</span> result, <span class="hsp3_sysval">cnt</span> * <span class="hsp3_number">6</span>, code<br /> <span class="hsp3_command">loop</span><br /> <span class="hsp3_command">poke</span> result, <span class="hsp3_function">int</span>(<span class="hsp3_function">ceil</span>(<span class="hsp3_number">8.0</span> * len / <span class="hsp3_number">6.0</span>)), <span class="hsp3_number">0</span><br /> <span class="hsp3_command">return</span><br /><br /><span class="hsp3_comment">// 通常の文字列データからパスワードに変換</span><br /><span class="hsp3_preprocessor">#deffunc</span> <span class="hsp3_command">str2spell</span> var result, str _before<br /> before = _before<br /> <span class="hsp3_command">randomize</span> <span class="hsp3_macro">SPELL_KEY</span><br /> <span class="hsp3_comment">// 対象となる文字列から6ビットずつ切りだし、ひらがなに変換</span><br /> <span class="hsp3_macro">for</span> i, <span class="hsp3_number">0</span>, <span class="hsp3_function">strlen</span>(before) * <span class="hsp3_number">8</span>, <span class="hsp3_number">6</span><br /> <span class="hsp3_comment">// XOR演算によって より暗号っぽく</span><br /> <span class="hsp3_command">wpoke</span> result, i / <span class="hsp3_number">3</span>, <span class="hsp3_function">wpeek</span>(base, (<span class="hsp3_macro">peek6</span>(before, i) ^ <span class="hsp3_function">rnd</span>(<span class="hsp3_number">0x40</span>)) * <span class="hsp3_number">2</span>)<br /> <span class="hsp3_macro">next</span><br /> <span class="hsp3_command">poke</span> result, i / <span class="hsp3_number">3</span>, <span class="hsp3_number">0</span><br /> <span class="hsp3_command">return</span><br /><span class="hsp3_preprocessor">#global</span><br /> <span class="hsp3_command">init_spell</span><br /><br /><br /> <span class="hsp3_command">screen</span> <span class="hsp3_number">0</span>, <span class="hsp3_number">240</span>, <span class="hsp3_number">200</span><br /> <span class="hsp3_comment">// 元の文字を代入する文字列型変数</span><br /> <span class="hsp3_command">sdim</span> before, <span class="hsp3_number">512</span><br /> <span class="hsp3_comment">// 文字列型暗号が代入される文字列型変数</span><br /> <span class="hsp3_command">sdim</span> result, <span class="hsp3_number">1536</span><br /> <span class="hsp3_comment">// テキストボックス作成</span><br /> <span class="hsp3_command">mesbox</span> before, <span class="hsp3_sysval">ginfo_winx</span>, <span class="hsp3_sysval">ginfo_winy</span> / <span class="hsp3_number">2</span>, , <span class="hsp3_number">250</span><br /> hInput = <span class="hsp3_macro">objinfo_hwnd</span>(<span class="hsp3_sysval">stat</span>)<br /> <span class="hsp3_command">mesbox</span> result, <span class="hsp3_sysval">ginfo_winx</span>, <span class="hsp3_sysval">ginfo_winy</span> / <span class="hsp3_number">2</span><br /> idResult = <span class="hsp3_sysval">stat</span><br /> <span class="hsp3_command">sendmsg</span> <span class="hsp3_macro">objinfo_hwnd</span>(idResult), <span class="hsp3_number">$CF</span>, <span class="hsp3_number">1</span> <span class="hsp3_comment">// 編集無効</span><br /><br /> <span class="hsp3_command">oncmd</span> <span class="hsp3_command">gosub</span> <span class="hsp3_label">*command</span>, <span class="hsp3_number">0x0111</span> <span class="hsp3_comment">// WM_COMMAND</span><br /> <span class="hsp3_command">stop</span><br /><br /><span class="hsp3_comment">// テキストボックスの編集を監視する</span><br /><span class="hsp3_label">*command</span><br /> <span class="hsp3_command">if</span> <span class="hsp3_sysval">lparam</span> == hInput {<br /> <span class="hsp3_command">if</span> <span class="hsp3_macro">HIWORD</span> (<span class="hsp3_sysval">wparam</span>) = <span class="hsp3_number">0x300</span> {<br /> <span class="hsp3_comment">// 編集された場合は文字列型暗号を作って表示</span><br /> <span class="hsp3_command">str2spell</span> result, before<br /> <span class="hsp3_command">objprm</span> idResult, result<br /><span class="hsp3_comment">/* // この行の"/*"を消すとタイトルに復元した文字列を表示<br /> sdim s, 512<br /> spell2str s, result<br /> title s<br />//*/</span><br /> }<br /> }<br /> <span class="hsp3_command">return</span></code>ellerhttp://www.blogger.com/profile/07429654819789962794noreply@blogger.com0tag:blogger.com,1999:blog-648738693838588387.post-80071715699564090972008-01-13T08:34:00.000+09:002008-01-13T10:03:22.713+09:00数式の分解<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1uhCMNUr8AXCL4IeqmPY_Mbr_p2C6IWZeVhKyb3xZUc6wJiOfOnbhRHG_lbNNWf5t7R0EAC2DaEBrQta0up6oQOaDNdchXBpXXbL3bQs-YL-YIUsC2Phx-IKWw-zNfcWhD44xcYP0TSA/s1600-h/exp.png"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1uhCMNUr8AXCL4IeqmPY_Mbr_p2C6IWZeVhKyb3xZUc6wJiOfOnbhRHG_lbNNWf5t7R0EAC2DaEBrQta0up6oQOaDNdchXBpXXbL3bQs-YL-YIUsC2Phx-IKWw-zNfcWhD44xcYP0TSA/s320/exp.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5154737984991252706" /></a>正規表現を使って数式を分解し、文字列型配列変数に代入します。<br />日本語が使えないのが難点です。<br /><br /><br />関連:<a href="http://rpen.blogspot.com/2007/05/blog-post_12.html">インタプリンタ電卓もどき</a><br style="clear:both;" /><code class="hsp3"><span class="hsp3_preprocessor">#runtime</span> <span class="hsp3_string">"hsp3cl"</span><br /><span class="hsp3_preprocessor">#module</span><br /><span class="hsp3_comment">// 正規表現を利用した数式の分解</span><br /><span class="hsp3_comment">// 英数字およびアンダースコア・半角丸かっこと各種演算子のみ使用可能(日本語は無視)</span><br /><span class="hsp3_preprocessor">#deffunc</span> <span class="hsp3_command">split_calc</span> array result, str exp<br /> <span class="hsp3_command">newcom</span> oReg, <span class="hsp3_string">"VBScript.RegExp"</span><br /> <span class="hsp3_command">comres</span> oMatches<br /> oReg(<span class="hsp3_string">"Global"</span>) = <span class="hsp3_number">1</span><br /><br /> oReg(<span class="hsp3_string">"Pattern"</span>) = <span class="hsp3_string">"[0-9\\.]+|\\+|-|\\*|/|%|=|\\w*\\(|\\)|\\w+"</span><br /> oReg -> <span class="hsp3_string">"Execute"</span> exp<br /><br /> <span class="hsp3_command">sdim</span> result, <span class="hsp3_number">16</span>, oMatches(<span class="hsp3_string">"Count"</span>)<br /> bracket_l = <span class="hsp3_number">0</span> : bracket_r = <span class="hsp3_number">0</span><br /> <span class="hsp3_command">repeat</span> oMatches(<span class="hsp3_string">"Count"</span>)<br /> oMatch = oMatches(<span class="hsp3_string">"Item"</span>, <span class="hsp3_sysval">cnt</span>)<br /> result(<span class="hsp3_sysval">cnt</span>) = oMatch(<span class="hsp3_string">"Value"</span>)<br /> s = <span class="hsp3_function">strmid</span>(result(<span class="hsp3_sysval">cnt</span>), -<span class="hsp3_number">1</span>, <span class="hsp3_number">1</span>)<br /> <span class="hsp3_command">if</span> s == <span class="hsp3_string">"("</span> : bracket_l++ : <span class="hsp3_command">else</span> : <span class="hsp3_command">if</span> s == <span class="hsp3_string">")"</span> : bracket_r++<br /> <span class="hsp3_command">loop</span><br /> <span class="hsp3_command">return</span> bracket_l != bracket_r<br /><span class="hsp3_preprocessor">#global</span><br /><br /> exp = <span class="hsp3_string">"s(r) = r * r * 3.14"</span><br /> <span class="hsp3_command">mes</span> exp + <span class="hsp3_string">"\n"</span><br /><br /> <span class="hsp3_comment">// 数式を分解</span><br /> <span class="hsp3_command">split_calc</span> result, exp<br /> <span class="hsp3_command">if</span> <span class="hsp3_sysval">stat</span> : <span class="hsp3_command">mes</span> <span class="hsp3_string">"括弧の数が不正です。"</span><br /><br /> <span class="hsp3_comment">// 結果の表示</span><br /> <span class="hsp3_command">foreach</span> result<br /> <span class="hsp3_command">mes</span> result(<span class="hsp3_sysval">cnt</span>)<br /> <span class="hsp3_command">loop</span><br /> <span class="hsp3_command">stop</span><br /></code>ellerhttp://www.blogger.com/profile/07429654819789962794noreply@blogger.com0tag:blogger.com,1999:blog-648738693838588387.post-86197891011451870092008-01-12T09:06:00.000+09:002008-01-12T09:10:22.843+09:00Googleマップを利用する<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGhHPvNS5JikOhhOFsM0Y4HQXuK1Rq-H2C9DZH4eqQMFnR5F6cn5kfNfNgymsU-A7NOV6WHQzcfdK4-iQbfPt1QO1XQviKAw-k4Rp0Yvw3x_QRehu-UGyS2J7dCOqdODximJJRkR6t9D8/s1600-h/map.png"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGhHPvNS5JikOhhOFsM0Y4HQXuK1Rq-H2C9DZH4eqQMFnR5F6cn5kfNfNgymsU-A7NOV6WHQzcfdK4-iQbfPt1QO1XQviKAw-k4Rp0Yvw3x_QRehu-UGyS2J7dCOqdODximJJRkR6t9D8/s320/map.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5154375270708138194" /></a>経度と緯度を指定して、付近の地図を表示します。<br style="clear:both;" /><code class="hsp3"><span class="hsp3_comment">// 経度と緯度を指定して、GoogleMapを表示する</span><br /><span class="hsp3_preprocessor">#const</span> <span class="hsp3_macro">COMBOX_HEIGHT</span> <span class="hsp3_number">20</span><br /> <span class="hsp3_command">axobj</span> ie, <span class="hsp3_string">"Shell.Explorer.2"</span>, <span class="hsp3_sysval">ginfo_winx</span>, <span class="hsp3_sysval">ginfo_winy</span> - <span class="hsp3_macro">COMBOX_HEIGHT</span><br /> <span class="hsp3_command">if</span> <span class="hsp3_sysval">stat</span> == -<span class="hsp3_number">1</span> {<br /> <span class="hsp3_command">dialog</span> <span class="hsp3_string">"ActiveXコントロールの配置に失敗しました。"</span>, <span class="hsp3_number">1</span><br /> <span class="hsp3_command">end</span><br /> }<br /><br /> <span class="hsp3_command">sdim</span> places, <span class="hsp3_number">60</span><br /> places = <span class="hsp3_string">"札幌ドーム\n東京ドーム\n原爆ドーム"</span><br /> <span class="hsp3_comment">// 緯度と経度…Geocodingにて検索</span><br /> ll(<span class="hsp3_number">0</span>, <span class="hsp3_number">0</span>) = <span class="hsp3_number">43.014605</span>, <span class="hsp3_number">141.410877</span> <span class="hsp3_comment">// 札幌ドーム</span><br /> ll(<span class="hsp3_number">0</span>, <span class="hsp3_number">1</span>) = <span class="hsp3_number">35.705637</span>, <span class="hsp3_number">139.751892</span> <span class="hsp3_comment">// 東京ドーム</span><br /> ll(<span class="hsp3_number">0</span>, <span class="hsp3_number">2</span>) = <span class="hsp3_number">34.395483</span>, <span class="hsp3_number">132.453592</span> <span class="hsp3_comment">// 原爆ドーム</span><br /><br /> <span class="hsp3_command">objsize</span> <span class="hsp3_sysval">ginfo_winx</span>, <span class="hsp3_macro">COMBOX_HEIGHT</span><br /> <span class="hsp3_command">combox</span> selected, <span class="hsp3_number">100</span>, places<br /> hcombox = <span class="hsp3_macro">objinfo_hwnd</span>(<span class="hsp3_sysval">stat</span>)<br /><br /> <span class="hsp3_command">oncmd</span> <span class="hsp3_command">gosub</span> <span class="hsp3_label">*on_selected</span>, <span class="hsp3_number">0x0111</span><br /> <span class="hsp3_command">gosub</span> <span class="hsp3_label">*jump</span><br /> <span class="hsp3_command">stop</span><br /><br /><span class="hsp3_comment">// 指定場所へのジャンプ</span><br /><span class="hsp3_label">*jump</span><br /> url = <span class="hsp3_string">"http://maps.google.co.jp/?ie=UTF8&z=17&om=1&ll="</span> + ll(<span class="hsp3_number">0</span>, selected) + <span class="hsp3_string">","</span> + ll(<span class="hsp3_number">1</span>, selected) + <span class="hsp3_string">"&output=embed&s=AARTsJqzARj-Z8VnW5pkPMLMmZbqrJcYpw"</span><br /> ie -> <span class="hsp3_string">"Navigate"</span> url<br /> <span class="hsp3_command">return</span><br /><br /><span class="hsp3_comment">// コンボボックスが変更された場合にジャンプ</span><br /><span class="hsp3_label">*on_selected</span><br /> <span class="hsp3_command">if</span> (<span class="hsp3_sysval">lparam</span> == hcombox)&(<span class="hsp3_sysval">wparam</span> & <span class="hsp3_number">0x10000</span> != <span class="hsp3_number">0</span>) {<br /> <span class="hsp3_command">gosub</span> <span class="hsp3_label">*jump</span><br /> }<br /> <span class="hsp3_command">return</span></code>ellerhttp://www.blogger.com/profile/07429654819789962794noreply@blogger.com0tag:blogger.com,1999:blog-648738693838588387.post-45840993916648806012008-01-08T11:20:00.000+09:002008-01-09T10:23:28.888+09:00Footy2の「イベントの監視」機能を利用するhscallbk.dllを利用したイベントの監視。<br />ステータスバーに捕まえたイベントを報告します。<br /><br />切り取りやアンドゥなどのショートカットキー(ctrl+A,C,V,X,Y,Z)をonkeyで実装しています。<br /><code class="hsp3"><span class="hsp3_preprocessor">#include</span> <span class="hsp3_string">"Footy2.as"</span><br /><span class="hsp3_preprocessor">#include</span> <span class="hsp3_string">"hscallbk.as"</span><br /><span class="hsp3_preprocessor">#include</span> <span class="hsp3_string">"user32.as"</span><br /><span class="hsp3_preprocessor">#func</span> <span class="hsp3_command">Focus</span> <span class="hsp3_string">""</span> int, int, int, int<br /><span class="hsp3_preprocessor">#func</span> <span class="hsp3_command">MoveCaret</span> <span class="hsp3_string">""</span> int, int, int, int<br /><span class="hsp3_preprocessor">#func</span> <span class="hsp3_command">TextModified</span> <span class="hsp3_string">""</span> int, int, int<br /><span class="hsp3_preprocessor">#func</span> <span class="hsp3_command">InsertModeChanged</span> <span class="hsp3_string">""</span> int, int, int<br /><br /><span class="hsp3_label">*init</span><br /> <span class="hsp3_command">gosub</span> <span class="hsp3_label">*createGUIObjects</span><br /> <span class="hsp3_command">gosub</span> <span class="hsp3_label">*setCallBackFunctions</span><br /> <span class="hsp3_command">onkey</span> <span class="hsp3_command">gosub</span> <span class="hsp3_label">*onPushKey</span><br /> <span class="hsp3_command">stop</span><br /><br /><span class="hsp3_label">*createGUIObjects</span><br /> <span class="hsp3_comment">// ステータスバー作成</span><br /> <span class="hsp3_comment">// 参考:http://lhsp.s206.xrea.com/hsp_object8.html</span><br /> <span class="hsp3_comment">// :http://yokohama.cool.ne.jp/chokuto/urawaza/statusbar.html</span><br /> <span class="hsp3_command">winobj</span> <span class="hsp3_string">"msctls_statusbar32"</span>, <span class="hsp3_string">"ready"</span>, , <span class="hsp3_number">$50000000</span><br /> statusbar_id = <span class="hsp3_sysval">stat</span><br /> <span class="hsp3_command">if</span> statusbar_id == -<span class="hsp3_number">1</span> {<br /> <span class="hsp3_command">dialog</span> <span class="hsp3_string">"ウィンドウオブジェクトが正常に生成されませんでした"</span>, <span class="hsp3_number">1</span><br /> <span class="hsp3_command">end</span><br /> }<br /> <span class="hsp3_comment">// ステータスバーの高さを取得</span><br /> <span class="hsp3_command">dim</span> rect, <span class="hsp3_number">4</span><br /> <span class="hsp3_command">GetWindowRect</span> <span class="hsp3_macro">objinfo_hwnd</span>(statusbar_id), <span class="hsp3_function">varptr</span>(rect)<br /> <span class="hsp3_command">if</span> <span class="hsp3_sysval">stat</span> == <span class="hsp3_number">0</span> {<br /> <span class="hsp3_command">dialog</span> <span class="hsp3_string">"ステータスバーの座標取得に失敗しました"</span>, <span class="hsp3_number">1</span><br /> <span class="hsp3_command">end</span><br /> }<br /> statusbar_height = rect(<span class="hsp3_number">3</span>) - rect(<span class="hsp3_number">1</span>)<br /><br /> <span class="hsp3_comment">// Footyエディタコントロール設置</span><br /> <span class="hsp3_command">Footy2Create</span> <span class="hsp3_sysval">hwnd</span>, <span class="hsp3_number">0</span>, <span class="hsp3_number">0</span>, <span class="hsp3_sysval">ginfo_winx</span>, <span class="hsp3_sysval">ginfo_winy</span> - statusbar_height, <span class="hsp3_number">0</span><br /> footy_id = <span class="hsp3_sysval">stat</span><br /> <span class="hsp3_command">if</span> footy_id < <span class="hsp3_number">0</span> {<br /> <span class="hsp3_command">dialog</span> <span class="hsp3_string">"Error : type "</span> + <span class="hsp3_sysval">stat</span>, <span class="hsp3_number">1</span><br /> <span class="hsp3_command">end</span><br /> }<br /> <span class="hsp3_command">return</span><br /><br /><span class="hsp3_comment">// コールバック関数の登録</span><br /><span class="hsp3_label">*setCallBackFunctions</span><br /> <span class="hsp3_command">setcallbk</span> proc_Focus, <span class="hsp3_command">Focus</span>, <span class="hsp3_label">*onFocus</span><br /> <span class="hsp3_command">setcallbk</span> proc_MoveCaret, <span class="hsp3_command">MoveCaret</span>, <span class="hsp3_label">*onMoveCaret</span><br /> <span class="hsp3_command">setcallbk</span> proc_TextModified, <span class="hsp3_command">TextModified</span>, <span class="hsp3_label">*onTextModified</span><br /> <span class="hsp3_command">setcallbk</span> proc_InsertModeChanged, <span class="hsp3_command">InsertModeChanged</span>, <span class="hsp3_label">*onInsertModeChanged</span><br /> <span class="hsp3_command">Footy2SetFuncFocus</span> footy_id, <span class="hsp3_function">varptr</span>(proc_Focus), <span class="hsp3_number">0</span><br /> <span class="hsp3_command">Footy2SetFuncMoveCaret</span> footy_id, <span class="hsp3_function">varptr</span>(proc_MoveCaret), <span class="hsp3_number">0</span><br /> <span class="hsp3_command">Footy2SetFuncTextModified</span> footy_id, <span class="hsp3_function">varptr</span>(proc_TextModified), <span class="hsp3_number">0</span><br /> <span class="hsp3_command">Footy2SetFuncInsertModeChanged</span> footy_id, <span class="hsp3_function">varptr</span>(proc_InsertModeChanged), <span class="hsp3_number">0</span><br /> <span class="hsp3_command">return</span><br /><br /><span class="hsp3_comment">// フォーカスを得た/失った</span><br /><span class="hsp3_label">*onFocus</span><br /> <span class="hsp3_command">if</span> <span class="hsp3_function">callbkarg</span>(<span class="hsp3_number">3</span>) & <span class="hsp3_number">$FF</span> {<br /> message = <span class="hsp3_string">"Footyコントロールがフォーカスを得ました"</span><br /> } <span class="hsp3_command">else</span> {<br /> message = <span class="hsp3_string">"Footyコントロールがフォーカスを失いました"</span><br /> }<br /> <span class="hsp3_command">sendmsg</span> <span class="hsp3_macro">objinfo_hwnd</span>(statusbar_id), <span class="hsp3_number">$401</span>, <span class="hsp3_number">0</span>, message<br /> <span class="hsp3_command">return</span><br /><br /><span class="hsp3_comment">// キャレットが移動した</span><br /><span class="hsp3_label">*onMoveCaret</span><br /> <span class="hsp3_command">sendmsg</span> <span class="hsp3_macro">objinfo_hwnd</span>(statusbar_id), <span class="hsp3_number">$401</span>, <span class="hsp3_number">0</span>, <span class="hsp3_string">"キャレット位置が変更されました("</span> + <span class="hsp3_function">callbkarg</span>(<span class="hsp3_number">2</span>) + <span class="hsp3_string">":"</span> + <span class="hsp3_function">callbkarg</span>(<span class="hsp3_number">3</span>) + <span class="hsp3_string">")"</span><br /> <span class="hsp3_command">return</span><br /><br /><span class="hsp3_comment">// テキストが編集された</span><br /><span class="hsp3_label">*onTextModified</span><br /> <span class="hsp3_macro">switch</span> <span class="hsp3_function">callbkarg</span>(<span class="hsp3_number">2</span>)<br /> <span class="hsp3_macro">case</span> <span class="hsp3_macro">MODIFIED_CAUSE_CHAR</span><br /> message = <span class="hsp3_string">"文字が入力されました(IMEオフ)"</span><br /> <span class="hsp3_macro">swbreak</span><br /> <span class="hsp3_macro">case</span> <span class="hsp3_macro">MODIFIED_CAUSE_IME</span><br /> message = <span class="hsp3_string">"文字が入力されました(IMEオン)"</span><br /> <span class="hsp3_macro">swbreak</span><br /> <span class="hsp3_macro">case</span> <span class="hsp3_macro">MODIFIED_CAUSE_DELETE</span><br /> message = <span class="hsp3_string">"Deleteキーが押されました"</span><br /> <span class="hsp3_macro">swbreak</span><br /> <span class="hsp3_macro">case</span> <span class="hsp3_macro">MODIFIED_CAUSE_BACKSPACE</span><br /> message = <span class="hsp3_string">"BackSpaceキーが押されました"</span><br /> <span class="hsp3_macro">swbreak</span><br /> <span class="hsp3_macro">case</span> <span class="hsp3_macro">MODIFIED_CAUSE_ENTER</span><br /> message = <span class="hsp3_string">"Enterキーが押されました"</span><br /> <span class="hsp3_macro">swbreak</span><br /> <span class="hsp3_macro">case</span> <span class="hsp3_macro">MODIFIED_CAUSE_UNDO</span><br /> message = <span class="hsp3_string">"元に戻す処理が実行されました"</span><br /> <span class="hsp3_macro">swbreak</span><br /> <span class="hsp3_macro">case</span> <span class="hsp3_macro">MODIFIED_CAUSE_REDO</span><br /> message = <span class="hsp3_string">"やり直し処理が実行されました"</span><br /> <span class="hsp3_macro">swbreak</span><br /> <span class="hsp3_macro">case</span> <span class="hsp3_macro">MODIFIED_CAUSE_CUT</span><br /> message = <span class="hsp3_string">"切り取り処理が行われました"</span><br /> <span class="hsp3_macro">swbreak</span><br /> <span class="hsp3_macro">case</span> <span class="hsp3_macro">MODIFIED_CAUSE_PASTE</span><br /> message = <span class="hsp3_string">"貼り付け処理が行われました"</span><br /> <span class="hsp3_macro">swbreak</span><br /> <span class="hsp3_macro">case</span> <span class="hsp3_macro">MODIFIED_CAUSE_INDENT</span><br /> message = <span class="hsp3_string">"インデント処理が行われました"</span><br /> <span class="hsp3_macro">swbreak</span><br /> <span class="hsp3_macro">case</span> <span class="hsp3_macro">MODIFIED_CAUSE_UNINDENT</span><br /> message = <span class="hsp3_string">"逆インデント処理が行われました"</span><br /> <span class="hsp3_macro">swbreak</span><br /> <span class="hsp3_macro">case</span> <span class="hsp3_macro">MODIFIED_CAUSE_TAB</span><br /> message = <span class="hsp3_string">"タブキーが押されました"</span><br /> <span class="hsp3_macro">swbreak</span><br /> <span class="hsp3_macro">default</span><br /> message = <span class="hsp3_string">"テキストが編集されました(UNKNOWN)"</span><br /> <span class="hsp3_macro">swbreak</span><br /> <span class="hsp3_macro">swend</span><br /> <span class="hsp3_command">sendmsg</span> <span class="hsp3_macro">objinfo_hwnd</span>(statusbar_id), <span class="hsp3_number">$401</span>, <span class="hsp3_number">0</span>, message<br /> <span class="hsp3_command">return</span><br /><br /><span class="hsp3_comment">// 挿入/上書モードの変更</span><br /><span class="hsp3_label">*onInsertModeChanged</span><br /> <span class="hsp3_command">if</span> <span class="hsp3_function">callbkarg</span>(<span class="hsp3_number">2</span>) & <span class="hsp3_number">$FF</span> {<br /> message = <span class="hsp3_string">"挿入モードに変更されました"</span><br /> } <span class="hsp3_command">else</span> {<br /> message = <span class="hsp3_string">"上書モードに変更されました"</span><br /> }<br /> <span class="hsp3_command">sendmsg</span> <span class="hsp3_macro">objinfo_hwnd</span>(statusbar_id), <span class="hsp3_number">$401</span>, <span class="hsp3_number">0</span>, message<br /> <span class="hsp3_command">return</span><br /><br /><span class="hsp3_comment">// ショートカットキー</span><br /><span class="hsp3_label">*onPushKey</span><br /> keycode = <span class="hsp3_sysval">iparam</span><br /> <span class="hsp3_command">getkey</span> ctrl, <span class="hsp3_number">17</span><br /> <span class="hsp3_command">if</span> ctrl {<br /> <span class="hsp3_macro">switch</span> keycode<br /> <span class="hsp3_macro">case</span> <span class="hsp3_stringcode">'A'</span><br /> <span class="hsp3_macro">Footy2SelectAll</span> footy_id<br /> <span class="hsp3_macro">swbreak</span><br /> <span class="hsp3_macro">case</span> <span class="hsp3_stringcode">'C'</span><br /> <span class="hsp3_command">Footy2Copy</span> footy_id<br /> <span class="hsp3_macro">swbreak</span><br /> <span class="hsp3_macro">case</span> <span class="hsp3_stringcode">'V'</span><br /> <span class="hsp3_command">Footy2Paste</span> footy_id<br /> <span class="hsp3_macro">swbreak</span><br /> <span class="hsp3_macro">case</span> <span class="hsp3_stringcode">'X'</span><br /> <span class="hsp3_command">Footy2Cut</span> footy_id<br /> <span class="hsp3_macro">swbreak</span><br /> <span class="hsp3_macro">case</span> <span class="hsp3_stringcode">'Y'</span><br /> <span class="hsp3_command">Footy2Redo</span> footy_id<br /> <span class="hsp3_macro">swbreak</span><br /> <span class="hsp3_macro">case</span> <span class="hsp3_stringcode">'Z'</span><br /> <span class="hsp3_command">Footy2Undo</span> footy_id<br /> <span class="hsp3_macro">swbreak</span><br /> <span class="hsp3_macro">swend</span><br /> }<br /> <span class="hsp3_command">return</span></code><br /><br /><br />アクセラレータキーを利用したスクリプトがこちら。<br />ウィンドウの最大化にも対応しています。<br /><code class="hsp3"><span class="hsp3_comment">// アクセラレータキーを使用</span><br /><span class="hsp3_comment">// Footy2付属のC++サンプルとほぼ同等</span><br /><span class="hsp3_preprocessor">#include</span> <span class="hsp3_string">"Footy2.as"</span><br /><span class="hsp3_preprocessor">#include</span> <span class="hsp3_string">"hscallbk.as"</span><br /><span class="hsp3_preprocessor">#include</span> <span class="hsp3_string">"user32.as"</span><br /><span class="hsp3_preprocessor">#func</span> <span class="hsp3_command">Focus</span> <span class="hsp3_string">""</span> int, int, int, int<br /><span class="hsp3_preprocessor">#func</span> <span class="hsp3_command">MoveCaret</span> <span class="hsp3_string">""</span> int, int, int, int<br /><span class="hsp3_preprocessor">#func</span> <span class="hsp3_command">TextModified</span> <span class="hsp3_string">""</span> int, int, int<br /><span class="hsp3_preprocessor">#func</span> <span class="hsp3_command">InsertModeChanged</span> <span class="hsp3_string">""</span> int, int, int<br /><br /><span class="hsp3_preprocessor">#const</span> <span class="hsp3_macro">FVIRTKEY</span> <span class="hsp3_number">0x0001</span><br /><span class="hsp3_preprocessor">#const</span> <span class="hsp3_macro">FNOINVERT</span> <span class="hsp3_number">0x0002</span><br /><span class="hsp3_preprocessor">#const</span> <span class="hsp3_macro">FSHIFT</span> <span class="hsp3_number">0x0004</span><br /><span class="hsp3_preprocessor">#const</span> <span class="hsp3_macro">FCONTROL</span> <span class="hsp3_number">0x0008</span><br /><span class="hsp3_preprocessor">#const</span> <span class="hsp3_macro">FALT</span> <span class="hsp3_number">0x0010</span><br /><br /><span class="hsp3_preprocessor">#const</span> <span class="hsp3_macro">WM_SIZE</span> <span class="hsp3_number">0x0005</span><br /><span class="hsp3_preprocessor">#const</span> <span class="hsp3_macro">WM_COMMAND</span> <span class="hsp3_number">0x0111</span><br /><br /><span class="hsp3_preprocessor">#enum</span> <span class="hsp3_macro">IDM_UNDO</span> = <span class="hsp3_number">1</span><br /><span class="hsp3_preprocessor">#enum</span> <span class="hsp3_macro">IDM_REDO</span><br /><span class="hsp3_preprocessor">#enum</span> <span class="hsp3_macro">IDM_CUT</span><br /><span class="hsp3_preprocessor">#enum</span> <span class="hsp3_macro">IDM_COPY</span><br /><span class="hsp3_preprocessor">#enum</span> <span class="hsp3_macro">IDM_PASTE</span><br /><span class="hsp3_preprocessor">#enum</span> <span class="hsp3_macro">IDM_SELECTALL</span><br /><br /><span class="hsp3_comment">// 初期化作業</span><br /><span class="hsp3_label">*init</span><br /> <span class="hsp3_command">gosub</span> <span class="hsp3_label">*createGUIObjects</span><br /> <span class="hsp3_command">gosub</span> <span class="hsp3_label">*createAccelTable</span><br /> <span class="hsp3_command">gosub</span> <span class="hsp3_label">*setCallBackFunctions</span><br /> <span class="hsp3_command">oncmd</span> <span class="hsp3_command">gosub</span> <span class="hsp3_label">*on_resize</span>, <span class="hsp3_macro">WM_SIZE</span><br /> <span class="hsp3_command">oncmd</span> <span class="hsp3_command">gosub</span> <span class="hsp3_label">*on_command</span>, <span class="hsp3_macro">WM_COMMAND</span><br /> <span class="hsp3_command">onexit</span> <span class="hsp3_command">goto</span> <span class="hsp3_label">*on_exit</span><br /> <span class="hsp3_command">dim</span> msg, <span class="hsp3_number">7</span><br /> <span class="hsp3_command">Footy2SetFocus</span> footy_id<br /><br /><span class="hsp3_comment">// メッセージループ</span><br /><span class="hsp3_label">*msg_loop</span><br /> <span class="hsp3_macro">GetMessage</span> <span class="hsp3_function">varptr</span>(msg), <span class="hsp3_number">0</span>, <span class="hsp3_number">0</span>, <span class="hsp3_number">0</span><br /> ret = <span class="hsp3_sysval">stat</span><br /> <span class="hsp3_command">if</span> (ret == <span class="hsp3_number">0</span>)|(ret == -<span class="hsp3_number">1</span>) {<br /> <span class="hsp3_command">goto</span> <span class="hsp3_label">*on_exit</span><br /> }<br /> <span class="hsp3_command">TranslateAccelerator</span> <span class="hsp3_sysval">hwnd</span>, haccel, <span class="hsp3_function">varptr</span>(msg)<br /> <span class="hsp3_command">if</span> <span class="hsp3_sysval">stat</span> == <span class="hsp3_number">0</span> {<br /> <span class="hsp3_command">TranslateMessage</span> <span class="hsp3_function">varptr</span>(msg)<br /> <span class="hsp3_macro">DispatchMessage</span> <span class="hsp3_function">varptr</span>(msg)<br /> }<br /> <span class="hsp3_command">goto</span> <span class="hsp3_label">*msg_loop</span><br /><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">WS_MAXIMIZEBOX</span> <span class="hsp3_number">0x00010000</span><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">WS_SIZEBOX</span> <span class="hsp3_number">0x00040000</span><br /><span class="hsp3_label">*createGUIObjects</span><br /> <span class="hsp3_comment">// ウィンドウ初期化</span><br /> <span class="hsp3_command">screen</span> <span class="hsp3_number">0</span>, <span class="hsp3_sysval">ginfo_dispx</span>, <span class="hsp3_sysval">ginfo_dispy</span><br /> <span class="hsp3_macro">GetWindowLong</span> <span class="hsp3_sysval">hwnd</span>, -<span class="hsp3_number">16</span><br /> <span class="hsp3_macro">SetWindowLong</span> <span class="hsp3_sysval">hwnd</span>, -<span class="hsp3_number">16</span>, <span class="hsp3_sysval">stat</span> | <span class="hsp3_macro">WS_MAXIMIZEBOX</span> | <span class="hsp3_macro">WS_SIZEBOX</span><br /> <span class="hsp3_command">title</span> <span class="hsp3_string">"Footy2サンプル on Footy2 ver."</span> + <span class="hsp3_function">GetFooty2Ver</span>()<br /> <span class="hsp3_command">width</span> <span class="hsp3_number">640</span>, <span class="hsp3_number">480</span><br /><br /> <span class="hsp3_comment">// ステータスバー作成</span><br /> <span class="hsp3_comment">// 参考:http://lhsp.s206.xrea.com/hsp_object8.html</span><br /> <span class="hsp3_comment">// :http://yokohama.cool.ne.jp/chokuto/urawaza/statusbar.html</span><br /> <span class="hsp3_command">winobj</span> <span class="hsp3_string">"msctls_statusbar32"</span>, <span class="hsp3_string">"ready"</span>, , <span class="hsp3_number">$50000000</span><br /> statusbar_id = <span class="hsp3_sysval">stat</span><br /> <span class="hsp3_command">if</span> statusbar_id == -<span class="hsp3_number">1</span> {<br /> <span class="hsp3_command">dialog</span> <span class="hsp3_string">"ウィンドウオブジェクトが正常に生成されませんでした"</span>, <span class="hsp3_number">1</span><br /> <span class="hsp3_command">end</span><br /> }<br /><br /> <span class="hsp3_comment">// ステータスバーの高さを取得</span><br /> <span class="hsp3_command">dim</span> rect, <span class="hsp3_number">4</span><br /> <span class="hsp3_command">GetWindowRect</span> <span class="hsp3_macro">objinfo_hwnd</span>(statusbar_id), <span class="hsp3_function">varptr</span>(rect)<br /> <span class="hsp3_command">if</span> <span class="hsp3_sysval">stat</span> == <span class="hsp3_number">0</span> {<br /> <span class="hsp3_command">dialog</span> <span class="hsp3_string">"ステータスバーの座標取得に失敗しました"</span>, <span class="hsp3_number">1</span><br /> <span class="hsp3_command">end</span><br /> }<br /> statusbar_height = rect(<span class="hsp3_number">3</span>) - rect(<span class="hsp3_number">1</span>)<br /><br /> <span class="hsp3_comment">// Footyエディタコントロール設置</span><br /> <span class="hsp3_command">Footy2Create</span> <span class="hsp3_sysval">hwnd</span>, <span class="hsp3_number">0</span>, <span class="hsp3_number">0</span>, <span class="hsp3_sysval">ginfo_winx</span>, <span class="hsp3_sysval">ginfo_winy</span> - statusbar_height, <span class="hsp3_number">0</span><br /> footy_id = <span class="hsp3_sysval">stat</span><br /> <span class="hsp3_command">if</span> footy_id < <span class="hsp3_number">0</span> {<br /> <span class="hsp3_command">dialog</span> <span class="hsp3_string">"Error : type "</span> + <span class="hsp3_sysval">stat</span>, <span class="hsp3_number">1</span><br /> <span class="hsp3_command">end</span><br /> }<br /> <span class="hsp3_command">return</span><br /><br /><span class="hsp3_comment">// アクセラレータテーブルの作成</span><br /><span class="hsp3_comment">// 参考:「アクセラレータ - HSP開発wiki」</span><br /><span class="hsp3_comment">// http://hspdev-wiki.net/?%A5%A2%A5%AF%A5%BB%A5%E9%A5%EC%A1%BC%A5%BF</span><br /><span class="hsp3_label">*createAccelTable</span><br /> <span class="hsp3_command">sdim</span> accel, <span class="hsp3_number">6</span>*<span class="hsp3_number">6</span><br /><br /> key = <span class="hsp3_stringcode">'Z'</span>, <span class="hsp3_stringcode">'Y'</span>, <span class="hsp3_stringcode">'X'</span>, <span class="hsp3_stringcode">'C'</span>, <span class="hsp3_stringcode">'V'</span>, <span class="hsp3_stringcode">'A'</span><br /> <span class="hsp3_command">repeat</span> <span class="hsp3_number">6</span><br /> <span class="hsp3_command">poke</span> accel, <span class="hsp3_sysval">cnt</span>*<span class="hsp3_number">6</span>+<span class="hsp3_number">0</span>, <span class="hsp3_macro">FCONTROL</span> | <span class="hsp3_macro">FVIRTKEY</span><br /> <span class="hsp3_command">wpoke</span> accel, <span class="hsp3_sysval">cnt</span>*<span class="hsp3_number">6</span>+<span class="hsp3_number">2</span>, key(<span class="hsp3_sysval">cnt</span>)<br /> <span class="hsp3_command">wpoke</span> accel, <span class="hsp3_sysval">cnt</span>*<span class="hsp3_number">6</span>+<span class="hsp3_number">4</span>, <span class="hsp3_sysval">cnt</span>+<span class="hsp3_number">1</span><br /> <span class="hsp3_command">loop</span><br /><br /> <span class="hsp3_macro">CreateAcceleratorTable</span> <span class="hsp3_function">varptr</span>(accel), <span class="hsp3_number">6</span><br /> haccel = <span class="hsp3_sysval">stat</span><br /> <span class="hsp3_command">if</span> haccel == <span class="hsp3_number">0</span> {<br /> <span class="hsp3_command">dialog</span> <span class="hsp3_string">"アクセラレータテーブル作成に失敗しました"</span>, <span class="hsp3_number">1</span><br /> }<br /> <span class="hsp3_command">return</span><br /><br /><span class="hsp3_comment">// コールバック関数の登録</span><br /><span class="hsp3_label">*setCallBackFunctions</span><br /> <span class="hsp3_command">setcallbk</span> proc_Focus, <span class="hsp3_command">Focus</span>, <span class="hsp3_label">*onFocus</span><br /> <span class="hsp3_command">setcallbk</span> proc_MoveCaret, <span class="hsp3_command">MoveCaret</span>, <span class="hsp3_label">*onMoveCaret</span><br /> <span class="hsp3_command">setcallbk</span> proc_TextModified, <span class="hsp3_command">TextModified</span>, <span class="hsp3_label">*onTextModified</span><br /> <span class="hsp3_command">setcallbk</span> proc_InsertModeChanged, <span class="hsp3_command">InsertModeChanged</span>, <span class="hsp3_label">*onInsertModeChanged</span><br /> <span class="hsp3_command">Footy2SetFuncFocus</span> footy_id, <span class="hsp3_function">varptr</span>(proc_Focus), <span class="hsp3_number">0</span><br /> <span class="hsp3_command">Footy2SetFuncMoveCaret</span> footy_id, <span class="hsp3_function">varptr</span>(proc_MoveCaret), <span class="hsp3_number">0</span><br /> <span class="hsp3_command">Footy2SetFuncTextModified</span> footy_id, <span class="hsp3_function">varptr</span>(proc_TextModified), <span class="hsp3_number">0</span><br /> <span class="hsp3_command">Footy2SetFuncInsertModeChanged</span> footy_id, <span class="hsp3_function">varptr</span>(proc_InsertModeChanged), <span class="hsp3_number">0</span><br /> <span class="hsp3_command">return</span><br /><br /><span class="hsp3_comment">// フォーカスを得た/失った</span><br /><span class="hsp3_label">*onFocus</span><br /> <span class="hsp3_command">if</span> <span class="hsp3_function">callbkarg</span>(<span class="hsp3_number">3</span>) & <span class="hsp3_number">$FF</span> {<br /> message = <span class="hsp3_string">"Footyコントロールがフォーカスを得ました"</span><br /> } <span class="hsp3_command">else</span> {<br /> message = <span class="hsp3_string">"Footyコントロールがフォーカスを失いました"</span><br /> }<br /> <span class="hsp3_command">sendmsg</span> <span class="hsp3_macro">objinfo_hwnd</span>(statusbar_id), <span class="hsp3_number">$401</span>, <span class="hsp3_number">0</span>, message<br /> <span class="hsp3_command">return</span><br /><br /><span class="hsp3_comment">// キャレットが移動した</span><br /><span class="hsp3_label">*onMoveCaret</span><br /> <span class="hsp3_command">sendmsg</span> <span class="hsp3_macro">objinfo_hwnd</span>(statusbar_id), <span class="hsp3_number">$401</span>, <span class="hsp3_number">0</span>, <span class="hsp3_string">"キャレット位置が変更されました("</span> + <span class="hsp3_function">callbkarg</span>(<span class="hsp3_number">2</span>) + <span class="hsp3_string">":"</span> + <span class="hsp3_function">callbkarg</span>(<span class="hsp3_number">3</span>) + <span class="hsp3_string">")"</span><br /> <span class="hsp3_command">return</span><br /><br /><span class="hsp3_comment">// テキストが編集された</span><br /><span class="hsp3_label">*onTextModified</span><br /> <span class="hsp3_macro">switch</span> <span class="hsp3_function">callbkarg</span>(<span class="hsp3_number">2</span>)<br /> <span class="hsp3_macro">case</span> <span class="hsp3_macro">MODIFIED_CAUSE_CHAR</span><br /> message = <span class="hsp3_string">"文字が入力されました(IMEオフ)"</span><br /> <span class="hsp3_macro">swbreak</span><br /> <span class="hsp3_macro">case</span> <span class="hsp3_macro">MODIFIED_CAUSE_IME</span><br /> message = <span class="hsp3_string">"文字が入力されました(IMEオン)"</span><br /> <span class="hsp3_macro">swbreak</span><br /> <span class="hsp3_macro">case</span> <span class="hsp3_macro">MODIFIED_CAUSE_DELETE</span><br /> message = <span class="hsp3_string">"Deleteキーが押されました"</span><br /> <span class="hsp3_macro">swbreak</span><br /> <span class="hsp3_macro">case</span> <span class="hsp3_macro">MODIFIED_CAUSE_BACKSPACE</span><br /> message = <span class="hsp3_string">"BackSpaceキーが押されました"</span><br /> <span class="hsp3_macro">swbreak</span><br /> <span class="hsp3_macro">case</span> <span class="hsp3_macro">MODIFIED_CAUSE_ENTER</span><br /> message = <span class="hsp3_string">"Enterキーが押されました"</span><br /> <span class="hsp3_macro">swbreak</span><br /> <span class="hsp3_macro">case</span> <span class="hsp3_macro">MODIFIED_CAUSE_UNDO</span><br /> message = <span class="hsp3_string">"元に戻す処理が実行されました"</span><br /> <span class="hsp3_macro">swbreak</span><br /> <span class="hsp3_macro">case</span> <span class="hsp3_macro">MODIFIED_CAUSE_REDO</span><br /> message = <span class="hsp3_string">"やり直し処理が実行されました"</span><br /> <span class="hsp3_macro">swbreak</span><br /> <span class="hsp3_macro">case</span> <span class="hsp3_macro">MODIFIED_CAUSE_CUT</span><br /> message = <span class="hsp3_string">"切り取り処理が行われました"</span><br /> <span class="hsp3_macro">swbreak</span><br /> <span class="hsp3_macro">case</span> <span class="hsp3_macro">MODIFIED_CAUSE_PASTE</span><br /> message = <span class="hsp3_string">"貼り付け処理が行われました"</span><br /> <span class="hsp3_macro">swbreak</span><br /> <span class="hsp3_macro">case</span> <span class="hsp3_macro">MODIFIED_CAUSE_INDENT</span><br /> message = <span class="hsp3_string">"インデント処理が行われました"</span><br /> <span class="hsp3_macro">swbreak</span><br /> <span class="hsp3_macro">case</span> <span class="hsp3_macro">MODIFIED_CAUSE_UNINDENT</span><br /> message = <span class="hsp3_string">"逆インデント処理が行われました"</span><br /> <span class="hsp3_macro">swbreak</span><br /> <span class="hsp3_macro">case</span> <span class="hsp3_macro">MODIFIED_CAUSE_TAB</span><br /> message = <span class="hsp3_string">"タブキーが押されました"</span><br /> <span class="hsp3_macro">swbreak</span><br /> <span class="hsp3_macro">default</span><br /> message = <span class="hsp3_string">"テキストが編集されました(UNKNOWN)"</span><br /> <span class="hsp3_macro">swbreak</span><br /> <span class="hsp3_macro">swend</span><br /> <span class="hsp3_command">sendmsg</span> <span class="hsp3_macro">objinfo_hwnd</span>(statusbar_id), <span class="hsp3_number">$401</span>, <span class="hsp3_number">0</span>, message<br /> <span class="hsp3_command">return</span><br /><br /><span class="hsp3_comment">// 挿入/上書モードの変更</span><br /><span class="hsp3_label">*onInsertModeChanged</span><br /> <span class="hsp3_command">if</span> <span class="hsp3_function">callbkarg</span>(<span class="hsp3_number">2</span>) & <span class="hsp3_number">$FF</span> {<br /> message = <span class="hsp3_string">"挿入モードに変更されました"</span><br /> } <span class="hsp3_command">else</span> {<br /> message = <span class="hsp3_string">"上書モードに変更されました"</span><br /> }<br /> <span class="hsp3_command">sendmsg</span> <span class="hsp3_macro">objinfo_hwnd</span>(statusbar_id), <span class="hsp3_number">$401</span>, <span class="hsp3_number">0</span>, message<br /> <span class="hsp3_command">return</span><br /><br /><span class="hsp3_comment">// WM_COMMANDメッセージを受け取った</span><br /><span class="hsp3_label">*on_command</span><br /> <span class="hsp3_macro">switch</span> <span class="hsp3_sysval">wparam</span> & <span class="hsp3_number">$FFFF</span><br /> <span class="hsp3_macro">case</span> <span class="hsp3_macro">IDM_UNDO</span><br /> <span class="hsp3_command">Footy2Undo</span> footy_id<br /> <span class="hsp3_macro">swbreak</span><br /> <span class="hsp3_macro">case</span> <span class="hsp3_macro">IDM_REDO</span><br /> <span class="hsp3_command">Footy2Redo</span> footy_id<br /> <span class="hsp3_macro">swbreak</span><br /> <span class="hsp3_macro">case</span> <span class="hsp3_macro">IDM_CUT</span><br /> <span class="hsp3_command">Footy2Cut</span> footy_id<br /> <span class="hsp3_macro">swbreak</span><br /> <span class="hsp3_macro">case</span> <span class="hsp3_macro">IDM_COPY</span><br /> <span class="hsp3_command">Footy2Copy</span> footy_id<br /> <span class="hsp3_macro">swbreak</span><br /> <span class="hsp3_macro">case</span> <span class="hsp3_macro">IDM_PASTE</span><br /> <span class="hsp3_command">Footy2Paste</span> footy_id<br /> <span class="hsp3_macro">swbreak</span><br /> <span class="hsp3_macro">case</span> <span class="hsp3_macro">IDM_SELECTALL</span><br /> <span class="hsp3_macro">Footy2SelectAll</span> footy_id<br /> <span class="hsp3_macro">swbreak</span><br /> <span class="hsp3_macro">swend</span><br /> <span class="hsp3_command">return</span><br /><br /><span class="hsp3_comment">// WM_SIZEメッセージを受け取った</span><br /><span class="hsp3_preprocessor">#const</span> <span class="hsp3_macro">SIZE_RESTORED</span> <span class="hsp3_number">0</span><br /><span class="hsp3_preprocessor">#const</span> <span class="hsp3_macro">SIZE_MAXIMIZED</span> <span class="hsp3_number">2</span><br /><span class="hsp3_label">*on_resize</span><br /> <span class="hsp3_command">if</span> (<span class="hsp3_sysval">wparam</span> == <span class="hsp3_macro">SIZE_RESTORED</span>) | (<span class="hsp3_sysval">wparam</span> == <span class="hsp3_macro">SIZE_MAXIMIZED</span>) {<br /> <span class="hsp3_command">Footy2Move</span> footy_id, <span class="hsp3_number">0</span>, <span class="hsp3_number">0</span>, <span class="hsp3_sysval">ginfo_winx</span>, <span class="hsp3_sysval">ginfo_winy</span> - statusbar_height<br /> <span class="hsp3_command">sendmsg</span> <span class="hsp3_macro">objinfo_hwnd</span>(id_statusbar), <span class="hsp3_macro">WM_SIZE</span>, <span class="hsp3_macro">SIZE_RESTORED</span>, <span class="hsp3_number">0</span><br /> }<br /> <span class="hsp3_command">return</span> <span class="hsp3_number">0</span><br /><br /><span class="hsp3_comment">// アクセラレータテーブルの削除</span><br /><span class="hsp3_label">*destroyAccelTable</span><br /> <span class="hsp3_command">if</span> haccel != <span class="hsp3_number">0</span> {<br /> <span class="hsp3_command">DestroyAcceleratorTable</span> haccel<br /> }<br /> <span class="hsp3_command">return</span><br /><br /><span class="hsp3_comment">// 終了時処理</span><br /><span class="hsp3_label">*on_exit</span><br /> <span class="hsp3_command">gosub</span> <span class="hsp3_label">*destroyAccelTable</span><br /> <span class="hsp3_command">end</span></code>ellerhttp://www.blogger.com/profile/07429654819789962794noreply@blogger.com0tag:blogger.com,1999:blog-648738693838588387.post-16425740051224791412008-01-08T10:21:00.000+09:002008-01-08T10:29:50.458+09:00Footy2.as正式版を公開しましたすべての命令・関数・マクロと定数を記述したHSP3向けヘッダファイルを<a href="http://www.hpp.be:8080/trac/Footy">Footy2のプロジェクトページ</a>からダウンロードできます。(コールバック関数の利用はhscallbk.dllが必要です)<br /><br />リポジトリブラウザ→trunk→HSPとリンクを辿ってダウンロードしてください。ellerhttp://www.blogger.com/profile/07429654819789962794noreply@blogger.com2tag:blogger.com,1999:blog-648738693838588387.post-22426531641392091412008-01-07T09:47:00.000+09:002008-01-07T17:43:08.999+09:00APIを利用して英語を日本語に翻訳するモジュール<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhu8Eb6_mibEDx5E8mXazWD8_9CJSW8KFITRNUk8U8X68YtGlO6amqFqd54NRmj3o6Cp8x4HJJjQN6m9jOuchFZqqp6cKxL7sAB_fM7UPek7xj-IY3HhS_MNJNXDb5i3T5bUJI5z1ZefA/s1600-h/eng2jp.png"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhu8Eb6_mibEDx5E8mXazWD8_9CJSW8KFITRNUk8U8X68YtGlO6amqFqd54NRmj3o6Cp8x4HJJjQN6m9jOuchFZqqp6cKxL7sAB_fM7UPek7xj-IY3HhS_MNJNXDb5i3T5bUJI5z1ZefA/s320/eng2jp.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5152530294491697346" /></a>英語を日本語に翻訳します。<br />ネットに接続するため、少し時間がかかります。<br style="clear:both;" /><code class="hsp3"><span class="hsp3_comment">// 英語->日本語変換サンプル</span><br /><span class="hsp3_comment">// 翻訳APIを使用</span><br /><span class="hsp3_comment">// http://muumoo.jp/news/2007/05/09/0translationapi.html</span><br /><span class="hsp3_comment">// 参考:mod_rss.as</span><br /><br /><span class="hsp3_preprocessor">#module</span> mod_translate<br /><span class="hsp3_preprocessor">#deffunc</span> <span class="hsp3_command">rss2load_init</span>@mod_translate<br /> <span class="hsp3_command">newcom</span> oDom,<span class="hsp3_string">"Microsoft.XMLDOM"</span><br /> oDom(<span class="hsp3_string">"async"</span>) = <span class="hsp3_string">"FALSE"</span><br /> <span class="hsp3_command">comres</span> elm_desc<br /> <span class="hsp3_command">return</span><br /><br /><span class="hsp3_preprocessor">#deffunc</span> <span class="hsp3_command">rss2load</span>@mod_translate array desc, str url, int p_max<br /> oDom-><span class="hsp3_string">"load"</span> url<br /> oRoot = oDom(<span class="hsp3_string">"documentElement"</span>)<br /> <span class="hsp3_command">if</span> <span class="hsp3_function">varuse</span>(oRoot) == <span class="hsp3_number">0</span> : <span class="hsp3_command">return</span> <span class="hsp3_number">1</span><br /> <span class="hsp3_command">if</span> oRoot(<span class="hsp3_string">"tagName"</span>) != <span class="hsp3_string">"rss"</span> : <span class="hsp3_command">return</span> <span class="hsp3_number">2</span><br /><br /> maxnum = p_max<br /> <span class="hsp3_command">if</span> maxnum <= <span class="hsp3_number">0</span> : maxnum = <span class="hsp3_number">5</span><br /><br /> oDom-><span class="hsp3_string">"getElementsByTagName"</span> <span class="hsp3_string">"description"</span><br /> max = <span class="hsp3_function">limit</span>(elm_desc(<span class="hsp3_string">"length"</span>), <span class="hsp3_number">1</span>, maxnum)<br /><br /> <span class="hsp3_command">sdim</span> desc, <span class="hsp3_number">64</span>, max<br /> <span class="hsp3_command">repeat</span> max<br /> node = elm_desc(<span class="hsp3_string">"item"</span>, <span class="hsp3_sysval">cnt</span>)<br /> node2 = node(<span class="hsp3_string">"firstChild"</span>)<br /> desc(<span class="hsp3_sysval">cnt</span>) = node2(<span class="hsp3_string">"nodeValue"</span>)<br /> <span class="hsp3_command">loop</span><br /><br /> <span class="hsp3_command">return</span> <span class="hsp3_number">0</span><br /><br /><span class="hsp3_preprocessor">#deffunc</span> <span class="hsp3_command">rss2load_clean</span> <span class="hsp3_command">onexit</span><br /> <span class="hsp3_command">if</span> <span class="hsp3_function">vartype</span>(oRoot) == <span class="hsp3_function">vartype</span>(<span class="hsp3_string">"comobj"</span>) {<br /> <span class="hsp3_command">delcom</span> node : <span class="hsp3_command">delcom</span> node2 : <span class="hsp3_command">delcom</span> oRoot<br /> }<br /> <span class="hsp3_command">delcom</span> elm_desc : <span class="hsp3_command">delcom</span> oDom<br /> <span class="hsp3_command">return</span><br /><br /><span class="hsp3_comment">// 英文を和訳します。変換に成功するとstatに0が代入され、第1引数の変数に変換結果が代入されます。</span><br /><span class="hsp3_comment">// 変換に失敗するとstatに1が代入されます。</span><br /><span class="hsp3_preprocessor">#deffunc</span> <span class="hsp3_command">eng2jp</span> var result, str before, local after<br /> <span class="hsp3_command">rss2load</span> after, <span class="hsp3_string">"http://pipes.yahoo.com/poolmmjp/ej_translation_api?_render=rss&text="</span> + before<br /> <span class="hsp3_command">if</span> (<span class="hsp3_sysval">stat</span> == <span class="hsp3_number">0</span>)&(<span class="hsp3_function">length</span>(after) == <span class="hsp3_number">2</span>) {<br /> <span class="hsp3_comment">// after(0)にはAPIの説明が代入されている</span><br /> result = after(<span class="hsp3_number">1</span>)<br /> <span class="hsp3_command">return</span> <span class="hsp3_number">0</span><br /> } <span class="hsp3_command">else</span> {<br /> <span class="hsp3_command">return</span> <span class="hsp3_number">1</span><br /> }<br /><span class="hsp3_preprocessor">#global</span><br /> <span class="hsp3_command">rss2load_init</span>@mod_translate<br /><span class="hsp3_comment">// モジュールここまで</span><br /><br /> target = <span class="hsp3_string">"Good morning! How are you today?"</span>, <span class="hsp3_string">"I'm fine, thank you. And you?"</span>, <span class="hsp3_string">"So so."</span><br /> <span class="hsp3_command">foreach</span> target<br /> <span class="hsp3_command">mes</span> target(<span class="hsp3_sysval">cnt</span>)<br /> <span class="hsp3_command">eng2jp</span> result, target(<span class="hsp3_sysval">cnt</span>)<br /> <span class="hsp3_command">if</span> <span class="hsp3_sysval">stat</span> == <span class="hsp3_number">0</span> : <span class="hsp3_command">mes</span> <span class="hsp3_string">"-> "</span> + result<br /> <span class="hsp3_command">loop</span><br /> <span class="hsp3_command">stop</span></code>ellerhttp://www.blogger.com/profile/07429654819789962794noreply@blogger.com2tag:blogger.com,1999:blog-648738693838588387.post-61060530241501851432008-01-05T09:45:00.000+09:002008-01-05T10:24:29.169+09:00ツリービュー2<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRhQQdkEzldxCRJvGXcoO50eFaomZ5gHZP37hUXrUt7rw0sleNcCM9VFzmNNvevj25EqDXABIdOWmuR7W_0MVzxObIpnqNqYHyN5IfU7P4f2x_27B_9OyMl3Ug59GH9hzJfasi-3wtl3c/s1600-h/tview.png"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRhQQdkEzldxCRJvGXcoO50eFaomZ5gHZP37hUXrUt7rw0sleNcCM9VFzmNNvevj25EqDXABIdOWmuR7W_0MVzxObIpnqNqYHyN5IfU7P4f2x_27B_9OyMl3Ug59GH9hzJfasi-3wtl3c/s320/tview.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5151789541482156210" /></a>Fujiさんのブログにある<a href="http://www.fujidig.com/2007/12/modvar-tree.html">モジュール変数でツリー</a>を利用したスクリプト。<br />このモジュールで作成したツリーを渡すことで、ツリービューを作成するモジュールです。<br /><br />ツリー作成モジュールは上記ブログからの引用(一部削除)です。<br style="clear:both;" /><code class="hsp3"><span class="hsp3_comment">// 参考</span><br /><span class="hsp3_comment">// http://yokohama.cool.ne.jp/chokuto/urawaza/treeview1.html</span><br /><span class="hsp3_comment">// http://www.fujidig.com/2007/12/modvar-tree.html</span><br /><br /><span class="hsp3_preprocessor">#module</span> m_tree children, content<br /><span class="hsp3_preprocessor">#modfunc</span> <span class="hsp3_command">set_tree_content</span> str _content<br /> content = _content<br /> <span class="hsp3_command">return</span><br /><br /><span class="hsp3_preprocessor">#defcfunc</span> <span class="hsp3_function">getaptr</span>@m_tree var p1, local hspctx, local vptr<br /> <span class="hsp3_command">mref</span> hspctx, <span class="hsp3_number">68</span><br /> <span class="hsp3_command">dupptr</span> vptr, hspctx.<span class="hsp3_number">207</span>, <span class="hsp3_number">8</span>, <span class="hsp3_number">4</span><br /> <span class="hsp3_command">return</span> vptr.<span class="hsp3_number">1</span><br /><br /><span class="hsp3_preprocessor">#modinit</span> str _content<br /> <span class="hsp3_command">set_tree_content</span> <span class="hsp3_sysval">thismod</span>, _content<br /> <span class="hsp3_command">dimtype</span> children, <span class="hsp3_number">5</span>, <span class="hsp3_number">1</span><br /> <span class="hsp3_command">return</span> <span class="hsp3_function">getaptr</span>( <span class="hsp3_sysval">thismod</span> )<br /><br /><span class="hsp3_preprocessor">#deffunc</span> <span class="hsp3_command">_new_tree</span> array tree, str _content<br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_preprocessor">global</span> <span class="hsp3_macro">new_tree</span>( <span class="hsp3_number">%1</span>, <span class="hsp3_number">%2</span> = <span class="hsp3_string">""</span> ) <span class="hsp3_command">_new_tree</span> <span class="hsp3_number">%1</span>,<span class="hsp3_number">%2</span><br /> <span class="hsp3_command">newmod</span> tree, m_tree, _content<br /> <span class="hsp3_command">return</span> <span class="hsp3_sysval">stat</span><br /><br /><span class="hsp3_preprocessor">#defcfunc</span> <span class="hsp3_function">get_tree_content</span> modvar m_tree@<br /> <span class="hsp3_command">return</span> content<br /><br /><span class="hsp3_preprocessor">#defcfunc</span> <span class="hsp3_function">get_tree_num_children</span> modvar m_tree@<br /> <span class="hsp3_command">return</span> <span class="hsp3_function">length</span>( children )<br /><br /><span class="hsp3_preprocessor">#modfunc</span> <span class="hsp3_command">get_tree_child</span> int index, var result<br /> <span class="hsp3_command">if</span>( index < <span class="hsp3_number">0</span> || index >= <span class="hsp3_function">length</span>( children ) ) : <span class="hsp3_command">return</span> <span class="hsp3_number">1</span><br /> <span class="hsp3_command">if</span>( <span class="hsp3_function">varuse</span>( children.index ) == <span class="hsp3_number">0</span> ) : <span class="hsp3_command">return</span> <span class="hsp3_number">1</span><br /> result = children.index<br /> <span class="hsp3_command">return</span> <span class="hsp3_number">0</span><br /><br /><span class="hsp3_preprocessor">#modfunc</span> <span class="hsp3_command">add_tree_child</span> var child<br /> <span class="hsp3_macro">new_tree</span> children<br /> children.<span class="hsp3_sysval">stat</span> = child<br /> <span class="hsp3_command">return</span><br /><br /><span class="hsp3_preprocessor">#modfunc</span> <span class="hsp3_command">_show_tree</span> str indent<br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_preprocessor">global</span> <span class="hsp3_macro">show_tree</span>( <span class="hsp3_number">%1</span>, <span class="hsp3_number">%2</span> = <span class="hsp3_string">""</span> ) <span class="hsp3_command">_show_tree</span> <span class="hsp3_number">%1</span>, <span class="hsp3_number">%2</span><br /> <span class="hsp3_command">mes</span> indent + content<br /> <span class="hsp3_command">foreach</span> children<br /> <span class="hsp3_command">if</span>( <span class="hsp3_function">varuse</span>( children.<span class="hsp3_sysval">cnt</span> ) ) {<br /> <span class="hsp3_macro">show_tree</span> children.<span class="hsp3_sysval">cnt</span>, indent + <span class="hsp3_string">" "</span><br /> }<br /> <span class="hsp3_command">loop</span><br /> <span class="hsp3_command">return</span><br /><br /><span class="hsp3_preprocessor">#global</span><br /><span class="hsp3_comment">// ここまで引用</span><br /><br /><span class="hsp3_preprocessor">#include</span> <span class="hsp3_string">"user32.as"</span><br /><span class="hsp3_preprocessor">#include</span> <span class="hsp3_string">"comctl32.as"</span><br /><span class="hsp3_preprocessor">#module</span> m_treeview h_treeview<br /><span class="hsp3_preprocessor">#const</span> <span class="hsp3_macro">TVIF_TEXT</span> <span class="hsp3_number">0x00000001</span><br /><span class="hsp3_preprocessor">#const</span> <span class="hsp3_macro">TVI_LAST</span> <span class="hsp3_number">0xFFFF0002</span><br /><span class="hsp3_preprocessor">#const</span> <span class="hsp3_macro">TVM_INSERTITEM</span> <span class="hsp3_number">0x00001100</span><br /><br /><span class="hsp3_comment">// ノードを再帰的に追加</span><br /><span class="hsp3_preprocessor">#modfunc</span> <span class="hsp3_command">add_node</span>@m_treeview var _node, int h_parent, local node, local h_node<br /> node = _node : <span class="hsp3_command">dim</span> tvins, <span class="hsp3_number">12</span><br /> bufText = <span class="hsp3_function">get_tree_content</span>(node)<br /> tvins = h_parent, <span class="hsp3_macro">TVI_LAST</span>, <span class="hsp3_macro">TVIF_TEXT</span><br /> tvins(<span class="hsp3_number">6</span>) = <span class="hsp3_function">varptr</span>(bufText), <span class="hsp3_function">strlen</span>(bufText)<br /> <span class="hsp3_command">sendmsg</span> h_treeview, <span class="hsp3_macro">TVM_INSERTITEM</span>, <span class="hsp3_number">0</span>, <span class="hsp3_function">varptr</span>(tvins)<br /> h_node = <span class="hsp3_sysval">stat</span><br /><br /> <span class="hsp3_comment">// 子ノードの追加</span><br /> <span class="hsp3_command">repeat</span> <span class="hsp3_function">get_tree_num_children</span>(node)<br /> <span class="hsp3_command">get_tree_child</span> node, <span class="hsp3_sysval">cnt</span>, child<br /> <span class="hsp3_command">if</span> <span class="hsp3_sysval">stat</span> : <span class="hsp3_command">continue</span><br /> <span class="hsp3_command">add_node</span>@m_treeview <span class="hsp3_sysval">thismod</span>, child, h_node<br /> <span class="hsp3_command">loop</span><br /> <span class="hsp3_command">return</span> h_node<br /><br /><span class="hsp3_comment">// ツリービューの作成</span><br /><span class="hsp3_comment">// statにはツリービューのハンドルが返る</span><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_preprocessor">global</span> <span class="hsp3_macro">make_treeview</span>(<span class="hsp3_number">%1</span>, <span class="hsp3_number">%2</span>, <span class="hsp3_number">%3</span>, <span class="hsp3_number">%4</span>) <span class="hsp3_command">newmod</span> <span class="hsp3_number">%1</span>, m_treeview, <span class="hsp3_number">%2</span>, <span class="hsp3_number">%3</span>, <span class="hsp3_number">%4</span><br /><span class="hsp3_preprocessor">#modinit</span> var root, int _width, int _height<br /> <span class="hsp3_comment">// コモンコントロールライブラリ初期化(無くても動作する?)</span><br /> initCCEx = <span class="hsp3_number">8</span>, <span class="hsp3_number">0x00000002</span><br /> <span class="hsp3_command">InitCommonControlsEx</span> <span class="hsp3_function">varptr</span>(initCCEx)<br /> <span class="hsp3_command">if</span> <span class="hsp3_sysval">stat</span> == <span class="hsp3_number">0</span> : <span class="hsp3_command">return</span> -<span class="hsp3_number">1</span><br /><br /> <span class="hsp3_comment">// コントロールの作成</span><br /> style = <span class="hsp3_number">0x40000000</span> | <span class="hsp3_number">0x10000000</span> | <span class="hsp3_number">0x0001</span> | <span class="hsp3_number">0x0002</span> | <span class="hsp3_number">0x0200</span><br /> <span class="hsp3_macro">CreateWindowEx</span> <span class="hsp3_number">0</span>, <span class="hsp3_string">"SysTreeView32"</span>, <span class="hsp3_string">""</span>, style, <span class="hsp3_sysval">ginfo_cx</span>, <span class="hsp3_sysval">ginfo_cy</span>, _width, _height, <span class="hsp3_sysval">hwnd</span>, <span class="hsp3_number">0</span>, <span class="hsp3_number">0</span>, <span class="hsp3_number">0</span><br /> h_treeview = <span class="hsp3_sysval">stat</span><br /> <span class="hsp3_command">if</span> h_treeview == <span class="hsp3_number">0</span> : <span class="hsp3_command">return</span> -<span class="hsp3_number">1</span><br /><br /> <span class="hsp3_command">add_node</span>@m_treeview <span class="hsp3_sysval">thismod</span>, root, <span class="hsp3_number">0</span><br /> <span class="hsp3_command">return</span> h_treeview<br /><span class="hsp3_preprocessor">#global</span><br /><br /> <span class="hsp3_comment">// ツリーの作成(引用)</span><br /> <span class="hsp3_macro">new_tree</span> tree, <span class="hsp3_string">"root"</span><br /><br /> <span class="hsp3_macro">new_tree</span> tree_1, <span class="hsp3_string">"1"</span><br /> <span class="hsp3_command">add_tree_child</span> tree, tree_1<br /><br /> <span class="hsp3_macro">new_tree</span> tree_2, <span class="hsp3_string">"2"</span><br /> <span class="hsp3_command">add_tree_child</span> tree, tree_2<br /><br /> <span class="hsp3_macro">new_tree</span> tree_2_1, <span class="hsp3_string">"2-1"</span><br /> <span class="hsp3_command">add_tree_child</span> tree_2, tree_2_1<br /><br /> <span class="hsp3_macro">new_tree</span> tree_2_1_1, <span class="hsp3_string">"2-1-1"</span><br /> <span class="hsp3_command">add_tree_child</span> tree_2_1, tree_2_1_1<br /><br /> <span class="hsp3_macro">new_tree</span> tree_2_2, <span class="hsp3_string">"2-2"</span><br /> <span class="hsp3_command">add_tree_child</span> tree_2, tree_2_2<br /><br /> <span class="hsp3_comment">// ツリービューを作成</span><br /> <span class="hsp3_command">cls</span> <span class="hsp3_number">1</span><br /> <span class="hsp3_macro">make_treeview</span> treeview, tree, <span class="hsp3_number">100</span>, <span class="hsp3_sysval">ginfo_winy</span><br /> <span class="hsp3_command">if</span> <span class="hsp3_sysval">stat</span> == -<span class="hsp3_number">1</span> {<br /> <span class="hsp3_command">dialog</span> <span class="hsp3_string">"ツリービューの作成に失敗しました。"</span>, <span class="hsp3_number">1</span><br /> <span class="hsp3_command">end</span><br /> }<br /> <span class="hsp3_comment">// ツリーを表示</span><br /> <span class="hsp3_command">pos</span> <span class="hsp3_number">100</span>, <span class="hsp3_number">0</span><br /> <span class="hsp3_macro">show_tree</span> tree<br /><br /> <span class="hsp3_command">stop</span></code>ellerhttp://www.blogger.com/profile/07429654819789962794noreply@blogger.com0tag:blogger.com,1999:blog-648738693838588387.post-36568650798844908692008-01-03T10:19:00.000+09:002008-01-03T10:25:52.747+09:00IEコンポのジャンプ先URLを取得する<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2prNTkFoqPI0ajR5-2U8kUbApxpNhMDcWk0XFYIVglfqu1-K4FjlOceWDC2iKG5aNEORZ7T9JGII3WCJ8LUEI7e5PSfmr_QYsJRGKoBafWIStPvRkK8AY7rheGNOHAYegGXa_eVO-Org/s1600-h/ie.png"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2prNTkFoqPI0ajR5-2U8kUbApxpNhMDcWk0XFYIVglfqu1-K4FjlOceWDC2iKG5aNEORZ7T9JGII3WCJ8LUEI7e5PSfmr_QYsJRGKoBafWIStPvRkK8AY7rheGNOHAYegGXa_eVO-Org/s320/ie.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5151054225901211810" /></a>HHXソースコード解析によるスクリプト。<br />リンクをクリックしたときにそのジャンプ先URLを取得します。HHXではこのURLを解析して様々な処理を行っています。<br /><br />広告による読み込み(Javascript)に対しても反応してしまうようです。<br style="clear:both;" /><code class="hsp3"><span class="hsp3_comment">// 他のファイルにジャンプする時いちいち確認するブラウザのサンプル</span><br /><span class="hsp3_comment">// 主にhhx.hspから引用</span><br /><span class="hsp3_preprocessor">#include</span> <span class="hsp3_string">"user32.as"</span><br /><span class="hsp3_comment">// ie event</span><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">DIID_DWebBrowserEvents2</span> <span class="hsp3_string">"{34A715A0-6587-11D0-924A-0020AFC7AC4D}"</span><br /><span class="hsp3_comment">// exdispid.h</span><br /><span class="hsp3_preprocessor">#define</span> <span class="hsp3_macro">DISPID_BEFORENAVIGATE2</span> <span class="hsp3_number">250</span> <span class="hsp3_comment">// hyperlink clicked on</span><br /><br /><span class="hsp3_preprocessor">#packopt</span> hide <span class="hsp3_number">1</span><br /> <span class="hsp3_comment">// ウィンドウ最大化を可能にする</span><br /> <span class="hsp3_comment">// 参考 -> http://lhsp.s206.xrea.com/hsp_window.html</span><br /> <span class="hsp3_command">screen</span> <span class="hsp3_number">0</span>, <span class="hsp3_sysval">ginfo_dispx</span>, <span class="hsp3_sysval">ginfo_dispy</span>, <span class="hsp3_macro">screen_hide</span><br /> <span class="hsp3_macro">GetWindowLong</span> <span class="hsp3_sysval">hwnd</span>, -<span class="hsp3_number">16</span><br /> <span class="hsp3_macro">SetWindowLong</span> <span class="hsp3_sysval">hwnd</span>, -<span class="hsp3_number">16</span>, <span class="hsp3_sysval">stat</span> | <span class="hsp3_number">$10000</span> | <span class="hsp3_number">$40000</span><br /><br /> <span class="hsp3_comment">// ActiveXコントロール(IEコンポーネント)の配置</span><br /> <span class="hsp3_command">axobj</span> ieBrowser, <span class="hsp3_string">"Shell.Explorer.2"</span><br /> idIE = <span class="hsp3_sysval">stat</span><br /> <span class="hsp3_command">if</span> idIE == -<span class="hsp3_number">1</span> {<br /> <span class="hsp3_command">dialog</span> <span class="hsp3_string">"ActiveXコントロールの配置に失敗しました。"</span>, <span class="hsp3_number">1</span><br /> <span class="hsp3_command">end</span><br /> }<br /><br /> ieBrowser-><span class="hsp3_string">"Navigate"</span> <span class="hsp3_string">"http://www.yahoo.co.jp/"</span><br /><br /> <span class="hsp3_comment">// 割り込み設定</span><br /> <span class="hsp3_command">comevent</span> ieEvent, ieBrowser, <span class="hsp3_macro">DIID_DWebBrowserEvents2</span>, <span class="hsp3_label">*event_ie</span><br /> <span class="hsp3_command">oncmd</span> <span class="hsp3_command">gosub</span> <span class="hsp3_label">*event_resize</span>, <span class="hsp3_number">0x0005</span><br /> <span class="hsp3_command">onexit</span> <span class="hsp3_command">goto</span> <span class="hsp3_label">*exit</span><br /><br /> <span class="hsp3_command">width</span> <span class="hsp3_number">640</span>, <span class="hsp3_number">480</span><br /> <span class="hsp3_command">gsel</span> <span class="hsp3_number">0</span>, <span class="hsp3_number">1</span><br /> <span class="hsp3_command">stop</span><br /><br /><span class="hsp3_comment">// COMイベント発生時のジャンプ先</span><br /><span class="hsp3_label">*event_ie</span><br /> <span class="hsp3_command">if</span> <span class="hsp3_function">comevdisp</span>(ieEvent) == <span class="hsp3_macro">DISPID_BEFORENAVIGATE2</span> {<br /> <span class="hsp3_comment">// URLを取得</span><br /> <span class="hsp3_command">comevarg</span> newurl, ieEvent, <span class="hsp3_number">1</span>, <span class="hsp3_number">1</span><br /> <span class="hsp3_command">dialog</span> newurl + <span class="hsp3_string">"\nを開こうとしています。開きますか?"</span>, <span class="hsp3_number">2</span><br /> <span class="hsp3_command">if</span> <span class="hsp3_sysval">stat</span> == <span class="hsp3_number">7</span> {<br /> <span class="hsp3_comment">// 「いいえ」の場合はNAVIGATEをキャンセル</span><br /> <span class="hsp3_command">comevarg</span> Cancel, ieEvent, <span class="hsp3_number">6</span>, <span class="hsp3_number">2</span><br /> Cancel(<span class="hsp3_string">"val"</span>) = <span class="hsp3_number">1</span><br /> <span class="hsp3_command">delcom</span> Cancel<br /> }<br /> }<br /> <span class="hsp3_command">return</span><br /><br /><span class="hsp3_comment">// ウィンドウのリサイズ</span><br /><span class="hsp3_label">*event_resize</span><br /> <span class="hsp3_command">MoveWindow</span> <span class="hsp3_function">objinfo</span>(idIE, <span class="hsp3_number">2</span>), <span class="hsp3_number">0</span>, <span class="hsp3_number">0</span>, <span class="hsp3_sysval">ginfo_winx</span>, <span class="hsp3_sysval">ginfo_winy</span>, <span class="hsp3_number">1</span><br /> <span class="hsp3_command">return</span><br /><br /><span class="hsp3_comment">// プログラムの終了処理</span><br /><span class="hsp3_label">*exit</span><br /> <span class="hsp3_command">oncmd</span> <span class="hsp3_number">0</span> : <span class="hsp3_command">onexit</span> <span class="hsp3_number">0</span><br /> <span class="hsp3_command">delcom</span> ieEvent<br /> <span class="hsp3_command">delcom</span> ieBrowser<br /> <span class="hsp3_command">end</span></code>ellerhttp://www.blogger.com/profile/07429654819789962794noreply@blogger.com2tag:blogger.com,1999:blog-648738693838588387.post-76819207435238843602008-01-02T11:55:00.001+09:002008-01-02T11:59:41.210+09:00RPG風メッセージウィンドウの描画<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1AW2cTte_x7YsAyJxqp69qrKnrN1_soeekDTIfjXUGd96zzjVxpMoJhXRITOtzOyAC2ck92vQYuxE2R3Cp5qExCUnPobqTAvXu_XumxGW5GQhLSge10-IhG9ngPIheItdhH-XntGgLLg/s1600-h/original_win.png"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1AW2cTte_x7YsAyJxqp69qrKnrN1_soeekDTIfjXUGd96zzjVxpMoJhXRITOtzOyAC2ck92vQYuxE2R3Cp5qExCUnPobqTAvXu_XumxGW5GQhLSge10-IhG9ngPIheItdhH-XntGgLLg/s320/original_win.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5150707531846111378" /></a>ツクールなどでよくありそうなデザインのウィンドウを描画します。三角関数とhsvcolorを組み合わせることで、きれいなグラデーションが表現できます。<br />白と黒の線で囲むことで、どんな背景でもある程度の見易さを確保するよう努めています。<br style="clear:both;" /><code class="hsp3"><span class="hsp3_preprocessor">#module</span><br /><span class="hsp3_preprocessor">#include</span> <span class="hsp3_string">"hspmath.as"</span><br /><span class="hsp3_preprocessor">#deffunc</span> <span class="hsp3_command">line_box</span> int x, int y, int _w, int _h, local w, local h<br /> w = _w - <span class="hsp3_number">1</span> : h = _h - <span class="hsp3_number">1</span><br /> <span class="hsp3_command">line</span> x+w, y, x, y : <span class="hsp3_command">line</span> x+w, y+h<br /> <span class="hsp3_command">line</span> x, y+h : <span class="hsp3_command">line</span> x, y<br /> <span class="hsp3_command">return</span><br /><span class="hsp3_preprocessor">#deffunc</span> <span class="hsp3_command">draw_win</span> int x, int y, int _w, int _h, local w, local h<br /> w = _w - <span class="hsp3_number">1</span> : h = _h - <span class="hsp3_number">1</span><br /> <span class="hsp3_command">repeat</span> <span class="hsp3_number">10</span><br /> angle = <span class="hsp3_command">M_PI</span> * <span class="hsp3_sysval">cnt</span>/<span class="hsp3_number">20</span>, <span class="hsp3_command">M_PI</span> * (<span class="hsp3_number">1</span>+<span class="hsp3_sysval">cnt</span>)/<span class="hsp3_number">20</span><br /> <span class="hsp3_command">hsvcolor</span> <span class="hsp3_number">130</span>, <span class="hsp3_number">255</span>, <span class="hsp3_number">255</span>-<span class="hsp3_number">2</span>*<span class="hsp3_sysval">cnt</span>*<span class="hsp3_sysval">cnt</span><br /> <span class="hsp3_command">boxf</span> x+<span class="hsp3_function">sin</span>(angle)*w, y, x+<span class="hsp3_function">sin</span>(angle(<span class="hsp3_number">1</span>))*w, y+h<br /> <span class="hsp3_command">loop</span><br /> <span class="hsp3_command">color</span> : <span class="hsp3_command">line_box</span> x, y, _w, _h<br /> <span class="hsp3_command">color</span> <span class="hsp3_number">255</span>, <span class="hsp3_number">255</span>, <span class="hsp3_number">255</span> : <span class="hsp3_command">line_box</span> x+<span class="hsp3_number">1</span>, y+<span class="hsp3_number">1</span>, _w-<span class="hsp3_number">2</span>, _h-<span class="hsp3_number">2</span><br /> <span class="hsp3_command">return</span><br /><span class="hsp3_preprocessor">#global</span><br /> <span class="hsp3_command">redraw</span> <span class="hsp3_number">0</span><br /> <span class="hsp3_command">draw_win</span> <span class="hsp3_number">0</span>, <span class="hsp3_number">0</span>, <span class="hsp3_number">240</span>, <span class="hsp3_number">200</span><br /> <span class="hsp3_command">redraw</span> <span class="hsp3_number">1</span><br /> <span class="hsp3_command">stop</span></code>ellerhttp://www.blogger.com/profile/07429654819789962794noreply@blogger.com0tag:blogger.com,1999:blog-648738693838588387.post-70705228848695627432008-01-02T08:01:00.000+09:002008-01-02T16:58:13.660+09:00lstrlenAとstrlenの速度比較<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_lhu0_URBpI-gPwNarMMjFD6YO10NGMOBY7MWNFoYOTNF5rMHTg7m9HDwgJCIFaxt4gQhGl-_zMD1GWLfx8VcR0szbMWsKnQj9TKjaCztSMlAa_ygw9xB9km9DK96gd_whfwDfnFJXps/s1600-h/lstrlen.png"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_lhu0_URBpI-gPwNarMMjFD6YO10NGMOBY7MWNFoYOTNF5rMHTg7m9HDwgJCIFaxt4gQhGl-_zMD1GWLfx8VcR0szbMWsKnQj9TKjaCztSMlAa_ygw9xB9km9DK96gd_whfwDfnFJXps/s320/lstrlen.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5150647505383182466" /></a>今回の条件ではlstrlenAよりもstrlenの方が高速な模様。<br /><br /><ins datetime="2008-01-02T17:00:00+09:00">※別の書き方ではlstrlenAの方が速くなります。むしろそちらの書き方の方が普通と考えられます。m(_ _;)m</ins><br style="clear:both;" /><code class="hsp3"><span class="hsp3_comment">// lstrlenAとstrlenの速度比較</span><br /><br /><span class="hsp3_preprocessor">#uselib</span> <span class="hsp3_string">"kernel32.dll"</span><br /><span class="hsp3_preprocessor">#cfunc</span> <span class="hsp3_function">lstrlenA</span> <span class="hsp3_string">"lstrlenA"</span> sptr<br /><br /><span class="hsp3_preprocessor">#uselib</span> <span class="hsp3_string">"winmm.dll"</span><br /><span class="hsp3_preprocessor">#cfunc</span> <span class="hsp3_function">timeGetTime</span> <span class="hsp3_string">"timeGetTime"</span><br /><br /><span class="hsp3_preprocessor">#const</span> <span class="hsp3_macro">trial_times</span> <span class="hsp3_number">1000</span><br /><br /> <span class="hsp3_command">font</span> <span class="hsp3_sysval">msgothic</span>, <span class="hsp3_number">14</span><br /> <span class="hsp3_command">repeat</span> <span class="hsp3_number">3</span>, <span class="hsp3_number">1</span><br /> trial_strlen = <span class="hsp3_sysval">cnt</span> * <span class="hsp3_sysval">cnt</span> * <span class="hsp3_sysval">cnt</span> * <span class="hsp3_number">1000</span><br /> <span class="hsp3_command">sdim</span> trial_string, trial_strlen + <span class="hsp3_number">1</span><br /> <span class="hsp3_command">memset</span> trial_string, <span class="hsp3_stringcode">'a'</span>, trial_strlen<br /><br /> <span class="hsp3_comment">// lstrlenAの速度計測</span><br /> time(<span class="hsp3_number">0</span>) = <span class="hsp3_function">timeGetTime</span>()<br /> <span class="hsp3_command">repeat</span> <span class="hsp3_macro">trial_times</span><br /> tmp = <span class="hsp3_function">strlen</span>(trial_string)<br /> <span class="hsp3_command">loop</span><br /> time(<span class="hsp3_number">0</span>) = <span class="hsp3_function">timeGetTime</span>() - time(<span class="hsp3_number">0</span>)<br /><br /> <span class="hsp3_comment">// strlenの速度計測</span><br /> time(<span class="hsp3_number">1</span>) = <span class="hsp3_function">timeGetTime</span>()<br /> <span class="hsp3_command">repeat</span> <span class="hsp3_macro">trial_times</span><br /> tmp = <span class="hsp3_function">lstrlenA</span>(trial_string)<br /> <span class="hsp3_command">loop</span><br /> time(<span class="hsp3_number">1</span>) = <span class="hsp3_function">timeGetTime</span>() - time(<span class="hsp3_number">1</span>)<br /><br /> <span class="hsp3_command">mes</span> <span class="hsp3_function">strf</span>(<span class="hsp3_string">"文字列長(%dbytes)の場合:"</span>, trial_strlen)<br /> <span class="hsp3_command">mes</span> <span class="hsp3_function">strf</span>(<span class="hsp3_string">" strlen :%d[msec]"</span>, time(<span class="hsp3_number">0</span>))<br /> <span class="hsp3_command">mes</span> <span class="hsp3_function">strf</span>(<span class="hsp3_string">" lstrlenA:%d[msec]"</span>, time(<span class="hsp3_number">1</span>))<br /> <span class="hsp3_command">mes</span> <span class="hsp3_string">""</span><br /> <span class="hsp3_command">loop</span><br /> <span class="hsp3_command">stop</span></code>ellerhttp://www.blogger.com/profile/07429654819789962794noreply@blogger.com6tag:blogger.com,1999:blog-648738693838588387.post-68619110351406335092007-12-28T16:52:00.000+09:002007-12-28T16:58:53.935+09:00レジストリを読み出す(advapi32)advapi32を利用したレジストリ読み出し。HSP3標準エディタの「起動時のカレントディレクトリ」を読み出します。<br /><br />事前にデータの大きさを知ることができる分、hspextよりも便利かもしれません。<br />ここでは利用していませんが、エラーの原因を詳しく追及することもできます。<code class="hsp3"><span class="hsp3_comment">// 参考(というか丸写し)</span><br /><span class="hsp3_comment">// ちょくとのページ:レジストリに保存してみる</span><br /><span class="hsp3_comment">// http://yokohama.cool.ne.jp/chokuto/urawaza/registry.html</span><br /><br /><span class="hsp3_preprocessor">#uselib</span> <span class="hsp3_string">"advapi32.dll"</span><br /><span class="hsp3_preprocessor">#func</span> <span class="hsp3_preprocessor">global</span> <span class="hsp3_command">RegCloseKey</span> <span class="hsp3_string">"RegCloseKey"</span> sptr<br /><span class="hsp3_preprocessor">#func</span> <span class="hsp3_preprocessor">global</span> <span class="hsp3_command">RegOpenKeyExA</span> <span class="hsp3_string">"RegOpenKeyExA"</span> sptr,sptr,sptr,sptr,sptr<br /><span class="hsp3_preprocessor">#func</span> <span class="hsp3_preprocessor">global</span> <span class="hsp3_command">RegQueryValueExA</span> <span class="hsp3_string">"RegQueryValueExA"</span> sptr,sptr,sptr,sptr,sptr,sptr<br /><br /><span class="hsp3_preprocessor">#const</span> <span class="hsp3_macro">HKEY_CURRENT_USER</span> <span class="hsp3_number">0x80000001</span><br /><span class="hsp3_preprocessor">#const</span> <span class="hsp3_macro">KEY_QUERY_VALUE</span> <span class="hsp3_number">0x0001</span><br /><br /> <span class="hsp3_comment">// レジストリキーをオープン</span><br /> name = <span class="hsp3_string">"Software\\OnionSoftware\\hsed3"</span><br /> <span class="hsp3_command">RegOpenKeyExA</span> <span class="hsp3_macro">HKEY_CURRENT_USER</span>, name, <span class="hsp3_number">0</span>, <span class="hsp3_macro">KEY_QUERY_VALUE</span>, <span class="hsp3_function">varptr</span>(hkey)<br /> <span class="hsp3_command">if</span> <span class="hsp3_sysval">stat</span> != <span class="hsp3_number">0</span> {<br /> <span class="hsp3_command">dialog</span> <span class="hsp3_string">"キーをオープンできません。"</span>, <span class="hsp3_number">1</span><br /> <span class="hsp3_command">end</span><br /> }<br /><br /> <span class="hsp3_comment">// データのサイズを取得</span><br /> <span class="hsp3_command">RegQueryValueExA</span> hkey, <span class="hsp3_string">"startdir"</span>, <span class="hsp3_number">0</span>, <span class="hsp3_number">0</span>, <span class="hsp3_number">0</span>, <span class="hsp3_function">varptr</span>(size) <br /> <span class="hsp3_command">if</span> <span class="hsp3_sysval">stat</span> != <span class="hsp3_number">0</span> {<br /> <span class="hsp3_command">mes</span> <span class="hsp3_string">"データサイズを取得できませんでした。"</span><br /> } <span class="hsp3_command">else</span> {<br /> <span class="hsp3_command">mes</span> <span class="hsp3_function">strf</span>(<span class="hsp3_string">"データサイズは%dバイトです。"</span>, size)<br /><br /> <span class="hsp3_comment">// 文字列データを取得</span><br /> <span class="hsp3_command">sdim</span> result, size<br /> <span class="hsp3_command">RegQueryValueExA</span> hkey, <span class="hsp3_string">"startdir"</span>, <span class="hsp3_number">0</span>, <span class="hsp3_number">0</span>, <span class="hsp3_function">varptr</span>(result), <span class="hsp3_function">varptr</span>(size) <br /> <span class="hsp3_command">if</span> <span class="hsp3_sysval">stat</span> != <span class="hsp3_number">0</span> {<br /> <span class="hsp3_command">mes</span> <span class="hsp3_string">"データを取得できませんでした。"</span><br /> } <span class="hsp3_command">else</span> {<br /> <span class="hsp3_command">mes</span> result<br /> }<br /> }<br /><br /> <span class="hsp3_comment">// レジストリキーのハンドルをクローズ</span><br /> <span class="hsp3_command">RegCloseKey</span> hkey<br /> <span class="hsp3_command">stop</span><br /></code><ul><li><a href="http://rpen.blogspot.com/2007/12/hspext.html">レジストリを読み出す(hspext)</a></li></ul>ellerhttp://www.blogger.com/profile/07429654819789962794noreply@blogger.com0