[6082] スクリーンセーバーその他 投稿者:snowboya 投稿日:06/08/26(土) 18:19
こんにちは。
HSP3でスクリーンセーバーを作ったのですが、
インストールしてみると、何度も起動するような状態になり、うまくいきません。
あるサイトで、やはりHSP3で作成したスクリーンセーバーが同じような状態になっていたというのを見て、
その方は「重複起動を避ける」ことで応急処置をしたそうなのですが、僕にはやり方がわかりません。
どなたか、うまい対処法をご存知の方がいらしたら教えてください。
ちなみに、その方も僕も、OSは98です。

それからもう一点なのですが、
スクリーンセーバー起動時に一度小さいウインドウが表示されるのですが、
それを表示しないですむ方法はないでしょうか。
こちらは、特に大きな悩みというわけではありませんが…。

[6087] Re: スクリーンセーバーその他 投稿者:矢野 投稿日:06/08/27(日) 10:36
> それからもう一点なのですが、
> スクリーンセーバー起動時に一度小さいウインドウが表示されるのですが、
> それを表示しないですむ方法はないでしょうか。
> こちらは、特に大きな悩みというわけではありませんが…。

後半の悩みについてですが、
exeファイルを作成するとき、

「起動時にメインウィンドゥを非表示にする」にチェックを入れて
ください。これで、小さなウィンドゥは表示されなくなります。

[6090] Re^2: スクリーンセーバーその他 投稿者:snowboya 投稿日:06/08/27(日) 16:23
やってみます。ありがとうございます。

[6078] 入力ボックスの文字の大きさ 投稿者:hitochan 投稿日:06/08/23(水) 19:17
mesboxやinput命令で作成した入力ボックスの中の
文字の大きさってどのようにすれば、
かえられるんでしょうか。
教えてください。

[6079] Re: 入力ボックスの文字の大きさ 投稿者:Kpan 投稿日:06/08/23(水) 20:49 <URL>
mes命令などと同じです。

[6080] Re^2: 入力ボックスの文字の大きさ 投稿者:hitochan 投稿日:06/08/24(木) 17:11
> mes命令などと同じです。
お返事
ありがとうございました。

[6075] HSPでコネクションモニターを作りたいのですが・・・ 投稿者:tuna 投稿日:06/08/22(火) 17:46
こんにちは。
長い間悩んでいるのでこの掲示板で質問することにしました。

HSPでnetstatのような、TCPやUDPの接続を表示させるプログラムを作りたいのですが、調べてみても、netstat.exeを使う以外に方法は見つかりませんでした。
HSPでこのようなプログラムを作成するにはどうすれば良いのでしょうか?

[6076] Re: HSPでコネクションモニターを作りたいのですが・・・ 投稿者:GENKI 投稿日:06/08/23(水) 00:00
> HSPでnetstatのような、TCPやUDPの接続を表示させるプログラムを作りたいのですが、
> 調べてみても、netstat.exeを使う以外に方法は見つかりませんでした。
> HSPでこのようなプログラムを作成するにはどうすれば良いのでしょうか?

 通信関係の知識がないのでよく分かりませんが、とりあえず「TCP UDP HSP」で
ググってみたらプラグインがいくつか出て来ました。
これらだけではダメなんでしょうか?

[6077] Re^2: HSPでコネクションモニターを作りたいのですが・・・ 投稿者:tuna 投稿日:06/08/23(水) 09:34
それらのプラグインでは接続状況を表示させることができませんでした。し
かし、探している最中に、IP Helper APIというWin32API関数を呼び出すこ
とによって実現することが分かりました。
Win32APIは初めてなのでよく分かりませんが、とりあえずこの方法でやっ
てみます。
返信ありがとうございました。

[6073] システムエラー 投稿者:カズキング 投稿日:06/08/21(月) 20:48
なぜか突然動作しなくなりました。
症状:
 ・notemaxが参照できない
 ・strlen()が実行できない
  (これについてはエラーNo.6が表示される。
   宣言総変数数を見る限り、strlen()が変数として数えられてるとしか思えず・・・。
   つまり、「パラメータの文字列」=「配列No.」でエラー。)
HSPを再インストールしたり、
めもりーくりーなー(クロノス・クラウンさん)でメモリ掃除をしても直らず・・・。
もうOSの再インストールしか手がないと思うけど、
バックアップの量が多いのでその手はとりあえず保留してます。

今回の場合noteinfo()、peek()で代用できるんですが、やっぱりOSを再インストールしたほうがいいですよね?
症状がかなり深刻そうなので。

[6074] Re: システムエラー 投稿者:Kpan 投稿日:06/08/21(月) 23:08
HSPの一部命令の挙動だけで、パソコン自体の不具合というのは
少々突拍子な考えかと。。。(^^;

エディタの[HSP]→[HSP拡張マクロを使用する]を有効にしてくだ
さい。notemaxはマクロ定義なので、コンパイル時にnoteinfo関数
に置き換えられます。

//
notesel a
noteload "readme.txt"
mes "全体の行数: "+noteinfo (0)
mes "文字列の長さ: "+strlen (a)+" バイト
//

[6051] no textureって・・・ 投稿者:kk 投稿日:06/08/17(木) 20:13
はじめまして。
市販のHSP入門書で勉強している者です。
メタセコイアで自作した3Dモデル(X形式)をHSPで表示させたいのですが、ダイアログに「no texture」という表示が出てしまい、そのまま「OK」をクリックすると「1システムエラー」という
表示が出てしまいます。付属CDーROMの3Dモデルはちゃんと読み込むんですけど。
ちなみにプラグインはHGIMG3で試しています。それと表示させたいモデルにはテクスチャは使用していません。
どうしたらうまくいくのか、どなたかご教授していただけないでしょうか?

[6058] Re: no textureって・・・ 投稿者:naznyark 投稿日:06/08/19(土) 01:03
> ちなみにプラグインはHGIMG3で試しています。それと表示させたいモデルにはテクスチャは使用していません。

・正しく対象のファイルを読み込んでいるかを確認する。
・本当にテクスチャを使っていないモデルなのかを確認する。
・ x ファイルをテキストエディタで開いて中を調べてみる。
(x ファイルの中身はテキスト形式のデータです)

[6065] Re^2: no textureって・・・ 投稿者:kk 投稿日:06/08/20(日) 09:25
返答していただいて有難うございます。とりあえず、テキストエディタで中を調べてみます。それから・・・

誠にもうしわけありませんが、自分のこの行為はマルチポストというものにあたってしまうため、この掲示板への書き込みは今後ひかえさせていただきます。質問に応じてくださった方、管理者の方、本当に申し訳ありません。

[6067] Re^3: no textureって・・・ 投稿者:GENKI 投稿日:06/08/20(日) 19:07
> 誠にもうしわけありませんが、自分のこの行為はマルチポストというものに
> あたってしまうため、この掲示板への書き込みは今後ひかえさせていただきます。

 なにもそこまでしなくても…。
知らなかったんなら次から気をつけてもらえればいいだけの話ですし。
今後も普通に使ってください。(^ ^;

[6071] Re^4: no textureって・・・ 投稿者:kk 投稿日:06/08/20(日) 23:14
解決しました。
皆さん有難うございました。

[6061] ウィンドウのハンドル 投稿者:ド素人 投稿日:06/08/20(日) 01:55
初歩的な質問ですみません
APIのGetPixel関数を使って指定したウィンドウの座標の色を取得したいのですが
指定したいウィンドウのハンドルを調べるにはどうしたら良いのでしょうか?


#uselib "user32.dll"
#cfunc GetDC "GetDC" int
#uselib "gdi32.dll"
#cfunc GetPixel "GetPixel" int, int, int

rgb = GetPixel(GetDC(『ココ』), x, y)
mes strf("Hex RGB: %x", rgb)

[6070] Re: ウィンドウのハンドル 投稿者:774 投稿日:06/08/20(日) 22:25
hspで作ったウィンドウなら
つ hwnd

[6064] getstrにおける区切り文字 投稿者:暇な航海者 投稿日:06/08/20(日) 07:06
getstrに挙動について疑問があるので投稿させていただきました。

この命令は区切り文字を指定できて便利なのですが2文字以上続く
区切り文字、具体的に言いますとスペース使ってデータの隙間を
埋めている場合などではうまく文字列を切り出してくれません。
今のところ以下のように読み飛ばしているのですが、見た目にも
麗しくなくプログラム的にも無駄なことをしているような気がします。
ただ切り出す部分をgetstrを使わず全てpeek文で書くと遅くなるかなと
不安を抱いております。
これ以外でうまい解決方法ございましたらお知恵を拝借できるでしょうか。



col="SUZUKA 2006 08 20"
kpos=0

getstr ps,col,kpos,$20:Ships_ID(TotalNum)=ps:kpos+=strsize
while peek(col,kpos)=$20:kpos++:wend

getstr ps,col,kpos,$20:YYYY(TotalNum)=int(ps):kpos+=strsize
while peek(col,kpos)=$20:kpos++:wend
;以下項目分だけ続きます
;注)colは本来ネット上から取得するデータなので自分で編集しておくことはできません。

[6069] Re: getstrにおける区切り文字 投稿者:LonelyWolf 投稿日:06/08/20(日) 21:15
区切り文字が続いた場合に読み飛ばす仕様ではないので
仕方がありません。簡単にやろうと思えば暇な航海者さんの
なさっているように読み飛ばすしかないのではないでしょうか。

モジュールやマクロで命令のようにしてしまえば、
少しはすっきりするかもしれません。

今回の場合は逆に煩雑になってしまいそうなので紹介だけに
とどめておきますが、複雑な文字列処理の場合、
正規表現を用いるとすっきりすることがあります。

[6049] gmode 7でマスク画像がずれる 投稿者:多聞 投稿日:06/08/17(木) 13:07
はじめまして。

gmode7のアルファブレンドで抜いた画像を動かしたいとおもったのですが、
800*200の元画像を左、マスク用画像を右に並べて000.jpgという画像を作成し
(アドベンチャーゲームのメッセージウィンドウの外枠のような画像です)、
以下のようなスクリプトを組んでみると、こちらではうまくできたのですが、

buffer 1:picload "000.jpg"
screen 0,800,600,0:cls 4
gmode 7:pos 0,0:gcopy 1,0,0,800,600

以下のようにpos 0,0をpos 10,0に変更して動かそうとしたら、
マスク画像の位置がずれてしまってうまくアルファブレンドが
できませんでした。
(マスク画像の表示位置がpos 10,0のときpos 20,0になっているようにみえます)

buffer 1:picload "000.jpg"
screen 0,800,600,0:cls 4
gmode 7:pos 10,0:gcopy 1,0,0,800,600

これはバグなんでしょうか?

[6052] Re: gmode 7でマスク画像がずれる 投稿者:tks 投稿日:06/08/18(金) 01:12
> 以下のようにpos 0,0をpos 10,0に変更して動かそうとしたら、
> マスク画像の位置がずれてしまってうまくアルファブレンドが
> できませんでした。
> (マスク画像の表示位置がpos 10,0のときpos 20,0になっているよ
> うにみえます)
>
> buffer 1:picload "000.jpg"
> screen 0,800,600,0:cls 4
> gmode 7:pos 10,0:gcopy 1,0,0,800,600

ワード検索で過去ログを"gmode 7"で検索してみてください。
恐らく[5438]や[5439]と同じ現象かと。([5438]は私ですが。
Kさんに返信し忘れてるし。すみません。)

http://smile.poosan.net/perl-bin/hsp/ver3/hsp3.cgi?print+200604/06050027.txt
が参考になるかと。

[6053] Re^2: gmode 7でマスク画像がずれる 投稿者:tks 投稿日:06/08/18(金) 01:14
> ワード検索で過去ログを"gmode 7"で検索してみてください。

過去ログ4です。

[6054] Re^3: gmode 7でマスク画像がずれる 投稿者:多聞 投稿日:06/08/18(金) 01:45
>tksさん

ご返答ありがとうございます。
バグなのか私のミスなのかが知りたかったのですが、
やはりバグだったのですね…
(過去ログ検索はしたのですが、該当の書き込みを発見できておりませんでした。お手数をとらせて申し訳ありませんでした)

これはバグトラッキングシステムの方には反映なされないのでしょうか?
アドベンチャーゲームでキャラクターを描画する際等に多用する可能性が
高い処理なので、バグとして報告しておいたほうが良いと思うのですが…

[6062] Re^4: gmode 7でマスク画像がずれる 投稿者:多聞 投稿日:06/08/20(日) 04:20
返答がないようなので、該当の現象を、tksさん、Kさんに無断で
バグトラッキングシステムの方に報告をいたしました。

何か問題がありましたら、お手数ですが削除修正のほどよろしくお願いします。

[6066] Re^5: gmode 7でマスク画像がずれる 投稿者:tks 投稿日:06/08/20(日) 17:08
どうやってバグトラックに書いたらいいかなぁと考えて
いたら返信が遅れました。

> 返答がないようなので、該当の現象を、tksさん、Kさんに無断で
> バグトラッキングシステムの方に報告をいたしました。

ありがとうございました。

[6063] Re^5: gmode 7でマスク画像がずれる 投稿者:KIMU (元K) 投稿日:06/08/20(日) 05:28
どうも KIMU に名前を変えた K です

>何か問題がありましたら、お手数ですが削除修正のほどよろしくお願いします。
特に問題なし
多分単純な計算ミスだろうからすぐに直るだろうと思って
(自分はDX使ってて実際には使用してないからってのもある・・・)
そのままにしてた(^^;

[6068] Re^6: gmode 7でマスク画像がずれる 投稿者:多聞 投稿日:06/08/20(日) 19:33
>KIMUさん
>tksさん

勝手に動いてしまって済みませんでした。

できれば基本機能のみで作りたいという思いがありまして…
どうぞよろしくお願いいたします。

[6055] gzoomについて 投稿者:初心者 投稿日:06/08/18(金) 21:49
gzoomで透明色は使えないのでしょうか?

[6056] Re: gzoomについて 投稿者:GENKI 投稿日:06/08/18(金) 22:15
 非常によく見かける質問ですね。
まずは掲示板の過去ログ検索、googleによる検索を週感づけることをオススメします。


> gzoomで透明色は使えないのでしょうか?

 gzoomに透明色は適用できません。
gzoomで拡大した画像をgcopyで透明色付きコピーすることで同じような結果が
得られます。



----------
蛇足です。今後の参考にどうぞ。
http://quasiquote.org/hspwiki/%bd%e9%bf%b4%bc%d4%b8%fe%a4%b1%a5%a2%a5%c9%a5%d0%a5%a4%a5%b9
http://quasiquote.org/hspwiki/%bc%c1%cc%e4%a4%ce%bb%c5%ca%fd

[6057] Re^2: gzoomについて 投稿者:naznyark 投稿日:06/08/19(土) 00:55
grotate 命令を使うという手もあります。

[6016] フォルダの容量 投稿者:D-S-K 投稿日:06/08/10(木) 10:48
 指定したフォルダの容量を取得することってできますか?
 現在バックアップツールを作っていて、バックアップ元フォルダ
とバックアップ先ディスクの容量比較をする必要があるのですが、マ
ニュアルを見てもそれらしい命令が見つからなかったので質問させて
もらいました。

[6018] Re: フォルダの容量 投稿者:Mizki_F 投稿日:06/08/10(木) 15:23
dirlistでファイル一覧を取得してexistでファイルサイズを調べ上げる
のが手っ取り早いです。
ただ、サブフォルダがある場合やファイルの数が多い場合は、かなり
処理時間がかかってしまいますが…

#module
#deffunc DirectryListAll var fileListAll,var parentDir,local subDir,local folderList,local n_max
chdir parentDir
folderList=""
dirlist folderList,"*.*",5
notesel folderList
n_max=notemax
repeat n_max
if n_max<1 : break
noteget _subDir,cnt
_subDir=parentDir+_subDir+"\\"
noteadd _subDir,cnt,1
loop
fileListAll+=folderList
repeat n_max
if n_max<1 : break
notesel folderList
noteget _subDir,cnt
subDir = _subDir
chdir subDir
DirectryListAll fileListAll,subDir
chdir parentDir
loop
;------------------
dirlist fileList,"*.*",1
notesel fileList
n_max=notemax
repeat n_max
if n_max<1 : break
notesel fileList
noteget _subDir,cnt
_subDir=parentDir+_subDir
noteadd _subDir,cnt,1
exist _subDir : if strsize>-1 : fileSizeAll+=strsize
loop
fileListAll+=fileList
return fileSizeAll
#global

#include "hspext.as"
sdim tempDir,260
selfolder tempDir,""
if stat : end
fileListAll="" : tempDir+="\\"
DirectryListAll fileListAll,tempDir : fileSizeAll=stat
notesel fileListAll
a=strlen(tempDir)
repeat notemax
noteget temp,cnt
temp=strmid(temp,a,260)
noteadd temp,cnt,1
loop
mesbox fileListAll,480,400,0
mes ""+fileSizeAll+" byte"
stop

[6023] Re^2: フォルダの容量 投稿者:D-S-K 投稿日:06/08/11(金) 22:00
> dirlistでファイル一覧を取得してexistでファイルサイズを調べ上げ

> のが手っ取り早いです。
> ただ、サブフォルダがある場合やファイルの数が多い場合は、かなり
> 処理時間がかかってしまいますが…


やはりその手しかないですか。
それも一応考えたんですが、手間がかかりすぎるなあ、と思ったので。
拡張プラグインで手軽にできそうな物を探してみることにします。

サンプルソースまで書いていただき、ありがとうございました。

[6024] Re^3: フォルダの容量 投稿者:さくら 投稿日:06/08/11(金) 22:33
> > dirlistでファイル一覧を取得してexistでファイルサイズを調べ上げ
> る
> > のが手っ取り早いです。
> > ただ、サブフォルダがある場合やファイルの数が多い場合は、かなり
> > 処理時間がかかってしまいますが…
>
>
> やはりその手しかないですか。

COMを使えば、少し速いです。参考として下さい。3桁毎のカンマ編集を
しなければ、さらに簡単になります。

;▼サイズを取得する対象フォルダを指定する
#include "hspext.as"
sdim sFile,260
selfolder sFile,""
if stat : end

newcom objFS, "Scripting.FileSystemObject"

;▼存在の確認
objexFile=objFS("FolderExists", sFile)
if objexFile==0 {
dialog "フォルダは存在しません。 結果="+objexFile
delcom objFS
stop
}
objFol=objFS("GetFolder", sFile)
newcom regEx,"VBScript.RegExp"
regEx("Pattern") = "^(.*?)(...)(...)$"
regEx("Global") = 1
destSize=objFol("size")
;▼destSizeを3桁毎のカンマ付きに編集
comres stra
regEx->"Replace" destSize,"$1,$2,$3"
fname=objFol("Name")
ShowFolderSize=fname+" "+stra+" byte 使用しています。"
pos 10,10 : mes ""+ShowFolderSize

delcom objFol
delcom regEx
if vartype(objFS)==6 {
if varuse(objFS)==1 : delcom objFS
}
stop

[6042] Re^4: フォルダの容量 投稿者:fk 投稿日:06/08/16(水) 14:50
 今更なんですが、フォルダーをC:¥を指定すると必ず

destSize=objFol("size")

のところで、エラー37が出ます。

2台のパソコンで試しました。

[6043] Re^5: フォルダの容量 投稿者:さくら 投稿日:06/08/16(水) 20:56
>  今更なんですが、フォルダーをC:¥を指定すると必ず
>
> destSize=objFol("size")
>
> のところで、エラー37が出ます。
>
> 2台のパソコンで試しました。

何故エラーとなるか判りますか?

c:\\とした場合は、それは、フォルダではなくドライブだからです。
objFol=objFS("GetFolder", sFile)では、フォルダの容量取得をしている
ので、ドライブ(全ディスク容量)取得できないためにエラーとなっています。
ただ、存在の確認の objexFile=objFS("FolderExists", sFile) 部分では、
ドライブもフォルダであると識別しているようです。

結論から言えば、APIのGetDriveType関数で媒体の判定をします。
この関数の戻り値(stat)により、'1'が返された場合は、ドライブなしと判定
でき、この時は、フォルダの容量を取得させます。
また、'3'の場合は、ハードディスクとなるので、この場合は、
APIのGetDiskFreeSpaceEx関数を利用してディスクの容量を取得するルーチン
を作る必要があります。

フォルダだけを対象(限定)として、ドライブの容量取得をさせないとすれば、
単純に、少しインチキくさいですが、
newcom objFS, "Scripting.FileSystemObject"の前で

if strlen(sFile)<=3 {
dialog "ドライブの容量は取得できません。"
end
}
とかすれば回避できそうです。

[6044] Re^6: フォルダの容量 投稿者:fk 投稿日:06/08/17(木) 08:41
早速のお返事ありがとうございました。
フォルダーとドライブの違いはわかりますが、
c:\\ 以外のドライブを指定してやると問題なく
動作するんですが、なぜでしょうか。

[6028] はじめて!二日 投稿者:やきいも 投稿日:06/08/14(月) 09:22
昨日からはじめてる!初心者なんですが!
うまくなるコツなどをおしえてください

[6041] Re: はじめて!二日 投稿者:GENKI 投稿日:06/08/15(火) 21:57
付属マニュアルの「初心者のためのHSP入門」をまずはやってみること。

推奨サイトや講座系サイトを活用するとか。
http://hsp.tv/play/link.html

自分にあった書籍を探すのもいいですね。
http://hsp.tv/make/hspbook.html


> うまくなるコツなどをおしえてください

 昨日今日ですごいプログラム組めるようにはなりません。
(例外として過去に別の言語を使っていると覚える期間も短いようです。)
ゆっくりのんびりこつこつ気長にやっていくことですね。
あれもしたいこれもしたいは分かるけど、できるとことから
一つ一つ身に付けていくのが一番早い方法だと思います。

[6037] Re: はじめて!二日 投稿者:りすと 投稿日:06/08/14(月) 22:22
HSP関連のHPには初心者を対象とした講座がいくつかあるので
そのようなサイトに行ってみるのがいいでしょうね

HSPセンター
http://hspcenter.com/

HSP BIGINNER'S CLUB
http://www.rinku.zaq.ne.jp/ultimate/

[6036] Re: はじめて!二日 投稿者:774 投稿日:06/08/14(月) 19:47
「昨日からはじめてる!初心者なんですが!
 うまくなるコツなどをおしえてください」
・・・なんて質問をしないこと、かな?w

質問をし、回答を待ってる暇があるんなら
いろんなサイトやヘルプを読んだり、
「初心者」の知ってる範囲でもいろいろ作ったりできるからね

[6038] コンテスト 投稿者:やきいも 投稿日:06/08/15(火) 10:02
コンテストの作品をやってみたいのですが!
どうもできないのですが
なんででしょうか?

[6039] Re: コンテスト 投稿者:Irisawa 投稿日:06/08/15(火) 10:22
> コンテストの作品をやってみたいのですが!
> どうもできないのですが
> なんででしょうか?

「どうもできない」といわれても他人に分かるわけがありません。
そういうのは人に聞くことではなく自分で考えるものでは?
何が原因なのか分かっていないのが原因のような気が。

何がどうできないのかなどそういったことは自分が一番分かっている
ことだと思います。

[6040] Re^2: コンテスト 投稿者:やきいも 投稿日:06/08/15(火) 11:33
わかりました!
解凍しないといけないんですね!
いまからやってみます

[6030] [要望]ラベルからジャンプして来る命令(@hspb3wish) 投稿者:kz3 投稿日:06/08/14(月) 10:30 <URL>
このスレッドはhspb3wishで広く意見を聞かせて頂きたい要望として移動したものです。

digitさん(仮)の引用>
> 指定したラベルからその場所にジャンプするgofrom命令(仮)が欲しいです。
> この命令が加わることによる利点はソースの一部分をデバッグする時に
> デバッグしたいラベルにgotoして帰って来たい場所のラベルからgofromで戻ってきます。
> その結果デバッグしたいソースをいじらずにデバッグできます。

なお、この投稿の削除キーは「cmdwish」です。

[6031] Re: [要望]ラベルからジャンプして来る命令(@hspb3wish) 投稿者:kz3 投稿日:06/08/14(月) 10:31 <URL>
> その結果デバッグしたいソースをいじらずにデバッグできます

デバッグというのはバグを取り除く作業です。
ソースにバグがあればソースを直さずにバグは取れません。

またバグというのはそれまで実行されてきた処理の結果で起こるものなので、
「デバッグしたいラベルにgotoして」という一部の処理を飛ばすようなことをして、
着地したラベル以降を処理しても、正しい結果は得られないと思いますよ。

この削除キーも「cmdwish」です。

[6033] Re^2: [要望]ラベルからジャンプして来る命令(@hspb3wish) 投稿者:kz3 投稿日:06/08/14(月) 10:38 <URL>
digitさん(仮)の引用>
> 僕はこの命令をJavaのJUNITみたいな事がしたいと思って提案しました。
> 本当はJUNITみたいな事がしたいのですがそれだと作者様の負担になるかもしれないと思い代替案としてです。
> デバッグという言い方は適切ではなかったかもしれませんね
> 僕がしたいのは動作確認とも言えます。
> もちろんJUNITでテストしてもバグはとりませんがとても役にたちます。

利用例の引用>
// samp.hsp
*L1
a=3
b=3

*L2
c=a*b

*L3
mes c
stop

// sampb.hsp
repeat 10,1
a=cnt
repeat 10,1
b=cnt

goto *L2
gofrom *L3

logmes "c="+c+" a="+a+" b="+b
loop
loop
stop
#include "smp.hsp"

> これを
> このように動作して欲しいです

// samp.hsp
*L1
a=3
b=3

*L2
c=a*b

*L3
goto *L4
mes c
stop

// sampb.hsp
repeat 3,1
a=cnt
repeat 3,1
b=cnt

goto *L2
*L4

logmes "c="+c+" a="+a+" b="+b
loop
loop
stop
#include "smp.hsp"

> よりスパゲッティプログラムになるだろう とか
> ラベルの所にgoto埋め込めばいいだけじゃない?とか反論もお待ちしています。

この削除キーも「cmdwish」です。(長すぎたな...)

[6034] Re^3: [要望]ラベルからジャンプして来る命令(@hspb3wish) 投稿者:kz3 投稿日:06/08/14(月) 11:05 <URL>
>多分、意見を集めるのは掲示板のほうがいいと思ったので、
>(これから返事を確認せずに)HSP3掲示板の方にスレッドを作っておきます。
>(ここでリプライがたくさんつくようなことがいいのかどうか分からないので)

javaは使ったことないので良く分かりませんが、
gofrom命令で指定したラベル以降は処理をせずに、gofrom命令を書いた次の行に(あたかもラベルから)飛んでくる、ということでしょうか。

もうちょっと利用例と代替例を簡略化するとこういうことですか?

;利用例:

goto *L2
gofrom *L3 ; こう書く
mes "bye"
stop

*L2
mes "*L2"
*L3
mes "*L3" ; 処理されなくていい?
stop

;代替:

goto *L2
*gofrom_end
mes "bye"
stop

*L2
mes "*L2"
*L3
goto *gofrom_end
mes "*L3"
stop

あとはjavaやJUNITが分かる人に任せます...。

この削除キーは「cmdwish」ではありません。

[6035] Re^4: [要望]ラベルからジャンプして来る命令(@hspb3wish) 投稿者:りすと 投稿日:06/08/14(月) 19:14
> あとはjavaやJUNITが分かる人に任せます...。
こんばんわdigit at px-c,net改めりすとです
僕もJUNITは本読みながら使っただけなんで
わからなくても結構ですよ
ラベルから飛んで来るだけで
JUNITを代替できるわけないし・・・

[6015] CGIをつくりたいのですが 投稿者:oniku 投稿日:06/08/10(木) 10:04
HSPではじめるCGIプログラミングという本を開いて数ページの
ところでつまずいてしまったのですが、

#runtime "hsp3cl"

mes "Content-type: text/html\n"
mes "Hello,World!"

stop

と書いた---.asファイルを作成し、オブジェクトの作成をすると
---.ax と---.as.iの2つファイルが生成されまして、
その---.axをAn HTTP Deamonのcgi-binフォルダに入れ
サーバーを起動し、IEでURLにhttp://127.0.0.1/cgi-bin/---.
axと入力してみましたが、「ページが見つかりません」と表示されま
す。

どうかご教授ください。

[6027] Re: CGIをつくりたいのですが 投稿者:シリル 投稿日:06/08/14(月) 01:43 <URL>
おそらく拡張子がaxのファイルではなくexeファイルを使用しないと動かないと思いますよ。
An HTTPDの場合標準で、exeファイルを実行できるような設定になっているので、
***.exeと指定すれば普通に動くと思います。

あと、ソースですがヘッダーの出力は改行が2ついります。
mes "Content-type: text/html\n\n"
としてください。

[6026] 今更のアイコン変更サンプル。 投稿者:秋房 投稿日:06/08/13(日) 21:41
/*PEヘッダーなんか知らない。...[記事修正1]*/

#uselib "msvcrt"
#cfunc memcmp "memcmp" int,int,int

sdim eNam :eNam = "hsptmp.exe"
sdim iNam :iNam = "hsptmp.ico"
sdim eBuf :
sdim nIco :
dim eSiz :
dim iSiz ;Only 0x2fe(766)
dim sKey,3 :sKey(0)=0x00000028,0x00000020,0x00000040
/* ExeFileCheck */
exist eNam :eSiz = strsize :alloc eBuf,eSiz
bload "hsptmp.exe",eBuf
/* IcoFileCheck */
exist iNam :iSiz = strsize-0x16 :alloc nIco,iSiz
/* SearchMemory */
For ii,eSiz,0,- 1
if memcmp(varptr(eBuf)+ii,varptr(sKey),10)=0 {_break}
await
Next
/* LoadIconData */
bload iNam,Nico,Isiz,0x16
/* ChangeIconDa.*/
bsave eNam,Nico,Isiz,ii

/*前回の修正品。...*/
sdim Fnam /* ExeFileName */ :sdim Inam /* IcoFileName */
sdim ss /* */
dim pp /* FilePointer */ : dim Stab,10 /* .rsrc */
dim Sdir, 4 /* Resource */ : dim Sdat, 2 /* Address */
dim Nico /* NewIconData */ : dim Isiz /* IconSize */
dim Oico /* */ : dim Ihed, 6 /* IconHeader */
/**/
Screen 0,152,120,,0,0 :Cls 1
Objsize 152,20 :Button Gosub ".EXE(HSP)-ICON-CHANG",*CHANGE
Stop
*CHANGE
Color 0xc3,0xc3,0xc6 :Boxf :Color 255
/* GetFileName */
Dialog "exe",16 :If (stat) {Enam = refstr}
Else {en = 1 :Gosub *ERROR :Return}
Dialog "ico",16 :If (stat) {Inam = refstr}
Else {en = 2 :Gosub *ERROR :Return}
Exist(Inam)
Isiz = strsize
If (Isiz > 0x2fe) {en = 3 :Gosub *ERROR :Return}
If (Isiz > 0x016) {Isiz -= 0x16}
Alloc Nico,Isiz :Alloc Oico,Isiz
/* Search.rsrc */
Bload Enam,ii,4,0x3c :pp = ii+0xf8
Repeat -1 :Bload Enam,ss,8,pp
If ss = "" {en = 4 :Gosub *ERROR :REturn}
If ss = ".rsrc" {Bload Enam,Stab,40,pp :Break}
pp += 40
Await
Loop
pp = Stab(5)
/* Search.rsrc Type */
Repeat -1 :Bload Enam,Sdir,16,pp
ii = wpeek(Sdir,12)+wpeek(Sdir,14)
pp += 16
/* SearchType Data */
Repeat ii :Bload Enam,Sdat,8,pp :pp += 8 :Await :Loop
If Sdat(1)&0x80000000 {}
Else {pp = (Sdat(1)&0x7fffffff)+Stab(5) :Break}
Await
loop
/* Address Offset */
Bload Enam,Sdat,16,pp
/* LoadNewIcon Data */
Bload Inam,Nico,Isiz,0x16
/* LoadOldIcon Data */
Bload Enam,Oico,Isiz,(Sdat(0)-Stab(3)+Stab(5))
/* ChangeIcon Data */
Bsave Enam,Nico,Isiz,(Sdat(0)-Stab(3)+Stab(5))
/* SaveOldIcon Data */
Ihed(0) = 0x00010000,0x20200001,0x00000004
Ihed(3) = 0x02e80000,0x00160000,0x00000000
Bsave "original.ico",Ihed,0x16
Bsave "original.ico",Oico,Isiz,0x16
Return
*ERROR
Switch en
Case 1 :ss = "[EXE FileName is ?]" :Swbreak
Case 2 :ss = "[ICO FileName is ?]" :Swbreak
Case 3 :ss = "[ICO 32 x 32 c16 ?]" :Swbreak
Case 4 :ss = "[Not Exist .rsrc ?]" :Swbreak
Swend
Pos ,22 :Mes ss
Return

[6006] wmaファイル 投稿者:hitochan 投稿日:06/08/08(火) 22:29
wmaファイルを演奏するプログラムで、
mmload "ongaku.wma",0,0
mmplay 0
としても何も起きません。
何が原因と考えられますか?
教えてください。

[6007] Re: wmaファイル 投稿者:かきしす 投稿日:06/08/09(水) 13:18
> wmaファイルを演奏するプログラムで、
> mmload "ongaku.wma",0,0
> mmplay 0
> としても何も起きません。
> 何が原因と考えられますか?
> 教えてください。

ファイル名が間違っているとか、
パスを指定してない(あるいは間違っている)とか、
PCのボリュームが最低(あるいはミュート)になっているとか・・・

ありがちなのはパスですか。

[6010] Re^2: wmaファイル 投稿者:hitochan 投稿日:06/08/09(水) 19:02
すいません。
midファイルやwavファイルなら、
演奏できるんですが、
やはりwmaファイルは無理
みたいです。
パスなどは全て確認してみましたが・・・。

[6011] Re^3: wmaファイル 投稿者:かきしす 投稿日:06/08/09(水) 22:39
> すいません。
> midファイルやwavファイルなら、
> 演奏できるんですが、
> やはりwmaファイルは無理
> みたいです。
> パスなどは全て確認してみましたが・・・。

ウチの環境では問題なく再生できますね・・・。
そのwmaファイル自体が壊れている、なんて事は無いですか?
他のプレイヤーで再生できましたか?

[6014] Re^4: wmaファイル 投稿者:hitochan 投稿日:06/08/10(木) 07:20
> 他のプレイヤーで再生できましたか?

Windows Media Player では演奏できましたが、
Connect Player というものではエラーがでました。
もうひとつのiTunes では「保護されたWMAフォーマット
であるため演奏できません。」
とでてきました。

[6017] Re^5: wmaファイル 投稿者:かきしす 投稿日:06/08/10(木) 14:24
あまり詳しくないので断定的なことは言えませんが、
保護のかかったWMAを再生できないプレイヤーは結構あり、
多分HSPも再生できないんじゃないかと思います。

『WMA 保護 解除』をキーワードに検索すると
結構色々ヒットしますので、調べてみてください。

[6025] Re^6: wmaファイル 投稿者:hitochan 投稿日:06/08/13(日) 14:16
分かりました^^
ありがとうございました。
早速調べてみます^^

[6019] HSPについて 投稿者:初心者? 投稿日:06/08/11(金) 13:51
私は現在、HSPというプログラム言語を使おうか迷っています。
というのも、この言語を使ってプログラミングしている友人がいるのですが、「難しいからやめた方が良い」と言われました。
本当にそうなのでしょうか?
ちなみに、友人からの薦めではJavaを使った方が良いと言われました。

[6022] Re: HSPについて 投稿者:Irisawa 投稿日:06/08/11(金) 21:48
> 私は現在、HSPというプログラム言語を使おうか迷っています。

HSPは正確にはプログラミング言語ではありません。
プログラミングツール(セット)というのでしょうか。
(分類上はオーサリングツールなどと同じようなジャンルです)

http://ja.wikipedia.org/wiki/Hot_Soup_Processor
http://d.hatena.ne.jp/keyword/Hot%20Soup%20Processor

> というのも、この言語を使ってプログラミングしている友人がいる
> のですが、「難しいからやめた方が良い」と言われました。
> 本当にそうなのでしょうか?
> ちなみに、友人からの薦めではJavaを使った方が良いと言われました。

恐らくJavaの方が難しいでしょう。
根本としてC/C++言語の基本的知識がないと組むこともできないと
思います。
HSPはBASICをベースとした言語仕様を持っていますが完全BASICでも
ありません。

BASIC並の手軽さは抜群に優れていてよほど無茶なことをしなければ
決してそんなに遅くもなくなんといっても日本発祥のツールですので
日本語の文献などが非常に豊富です。
(Javaは中間言語なのにとにかく遅くて重いためJavaでしかできない
ことをやる場合くらいしか使えないかも)

[6020] Re: HSPについて 投稿者:SHI 投稿日:06/08/11(金) 18:33
> 私は現在、HSPというプログラム言語を使おうか迷っています。
> というのも、この言語を使ってプログラミングしている友人がいるのですが、「難しいからやめた方が良い」と言われました。
> 本当にそうなのでしょうか?
> ちなみに、友人からの薦めではJavaを使った方が良いと言われました。

難しいかどうかは人それぞれです。
とりあえず自分で試してみてはいかがでしょう。

[6021] Re^2: HSPについて 投稿者:mamax 投稿日:06/08/11(金) 18:57
一度使用してみることをお勧めします。

[6013] モジュールを使うとファイルサイズが大きくなる? 投稿者:Mizki_F 投稿日:06/08/10(木) 01:54
(Wiki向けのネタだと思うんですが、Wikiの使い方がさっぱりわか
 らないのでこちらに書いておきます。)

以前2.6用に作ったモジュールを3.0に移植した際にファイルサイズ
がいきなり大きくなったので、不審に思いちょっと実験をしてみま
した。

テスト1:gosubを使った場合→start.axのサイズ=334byte

a=10 : b=5 : gosub *func1 : mes result
a=10 : b=5 : gosub *func2 : mes result
a=10 : b=5 : gosub *func3 : mes result
stop

*func1
result=a+b
return
*func2
result=a-b
return
*func3
result=a*b
return


テスト2:#moduleを1つ使った場合→start.axのサイズ=472byte

#module
#deffunc func1 var a,var b
result=a+b
return result
#deffunc func2 var a,var b
result=a-b
return result
#deffunc func3 var a,var b
result=a*b
return result
#global

a=10 : b=5
func1 a,b : mes stat
func2 a,b : mes stat
func3 a,b : mes stat
stop


テスト3:#moduleを複数使った場合→start.axのサイズ=496byte

#module
#deffunc func1 var a,var b
result=a+b
return result
#global
#module
#deffunc func2 var a,var b
result=a-b
return result
#global
#module
#deffunc func3 var a,var b
result=a*b
return result
#global

a=10 : b=5
func1 a,b : mes stat
func2 a,b : mes stat
func3 a,b : mes stat
stop


HSPコンテストのショート部門向けに作る場合などはgosubを使う方
が容量を抑えられそうです。
使い勝手はモジュールの方が断然良いですが。

[6008] ver3.0ではERROR 投稿者:sun big to 投稿日:06/08/09(水) 14:48
*j
rnd a,10
mes a
wait 5
goto*j

ver2.6では出来るのですが
ver3.0ではERRORになります
どこが違うのですか
 御教授宜しくお願いします

[6009] Re: ver3.0ではERROR 投稿者:かつ 投稿日:06/08/09(水) 15:23
> *j
> rnd a,10
> mes a
> wait 5
> goto*j
>
> ver2.6では出来るのですが
> ver3.0ではERRORになります
> どこが違うのですか
>  御教授宜しくお願いします

ver3.0では、2行目を a=rnd(10) とすると動きますよ。

[6012] Re^2: ver3.0ではERROR 投稿者:sun big to 投稿日:06/08/10(木) 01:07

> ver3.0では、2行目を a=rnd(10) とすると動きますよ。

 ありがとうございました

[6003] ある期間の時間の取得 投稿者:Sany 投稿日:06/08/07(月) 22:03
はじめまして、Sanyと申します。
早速ですが質問です。
計算ゲームを作成しているのですが
計算にかかった全体の時間を求めるには
どのようにスクリプトをくめば良いのでしょうか。
計算問題はrandomizeでパターンを初期化しrnd命令で
作成しています。
基礎的な質問ですが、よろしくお願いします。

[6004] Re: ある期間の時間の取得 投稿者:naznyark 投稿日:06/08/08(火) 02:14
> 計算にかかった全体の時間を求めるには
> どのようにスクリプトをくめば良いのでしょうか。

処理開始前の時間を取得

処理

処理終了後の時間を取得

処理前後の時間の差を計算

[6005] Re^2: ある期間の時間の取得 投稿者:Sany 投稿日:06/08/08(火) 07:07
> > 計算にかかった全体の時間を求めるには
> > どのようにスクリプトをくめば良いのでしょうか。
>
> 処理開始前の時間を取得
> ↓
> 処理
> ↓
> 処理終了後の時間を取得
> ↓
> 処理前後の時間の差を計算


御返信ありがとうございます。
時間差取得スクリプトとして作ってみました。

*main
screen 0,200,100
a=gettime(6)
randomize
time=rnd(500)
wait time
b=gettime(6)
c=b-a
mes ""+c+"秒"
stop

これですと、秒しか取得できないので
もっと手を加えていきます。
これで解決しました。
わかりやすい御回答をありがとうございました。

[5951] OS名とバージョン番号 投稿者:ちたん 投稿日:06/07/23(日) 18:22
 sysinfo(0) の OS 名とバージョン番号って
OS によってどんな文字列が返ってくるのですか?
"WindowsNT ver5.0"
OS が Win2K しかなくて判断できないです(TT)。
16ビット系だと、
"Windows ver4.x"
みたいに返ってくるのですかね。
自分の中で「おそらく」なので確信が欲しいです。
お願いします。

[5956] Re: OS名とバージョン番号 投稿者:Irisawa 投稿日:06/07/24(月) 10:43
>  sysinfo(0) の OS 名とバージョン番号って
> OS によってどんな文字列が返ってくるのですか?
> "WindowsNT ver5.0"
> OS が Win2K しかなくて判断できないです(TT)。

OSの正式なバージョン番号を返しますので

Win95=Windows ver4.00
Win98/SE=Windows ver4.10
WinME=Windows ver4.90
WinNT4.0=WindowsNT ver4.0
Win2K=WindowsNT ver5.0
WinXP=WindowsNT ver5.1
Win2K3=WindowsNT ver5.2
WinVista=WindowsNT ver6.0

のような感じです。
(表記は微妙に異なるかも)

> 16ビット系だと、

そもそも、HSP2.x/3.xは32bitアプリなのでWin95/WinNT4.0以降でしか
動作しませんよ。
(なお、HSP3.xはWin98/Win2K以降を対象にしており、Win95/WinNT4.0
ではOSの仕様上、実行そのものや動作に制限があったりします)

> "Windows ver4.x"
> みたいに返ってくるのですかね。
> 自分の中で「おそらく」なので確信が欲しいです。
> お願いします。

Win3.1/WinNT4.0以前はバージョン番号をそのまま表記していたので
16bit実行ファイルを作成できるCコンパイラなどでこのGetVersion()
などを使用した場合に返ってくる値でOKだと思います。
Win95/Win2Kを製品名で変更したのはマーケティング上の事情です。

# PC業界においてはver4.0は非常に不吉な数字のようで売れない、
# 評判が悪いなどの習慣があり、隠したかったようです。
# (実際に結局はWin95は知名度はあるけれど評判は悪い)
# また、発売年度を強調することで知名度を上げようとするねらいも?
# (少なくても日本では成功した?)
# Win2Kはそもそも、Win9xとWinNTを統合する目的で開発しており、
# 別にWinNT5.0が開発されていました。
# でも、統合バージョンの開発の遅れからWinNT5.0をWin2Kに名称変更
# して販売し、統合バージョンはその後に別販売することにしてそれ
# までの間のつなぎとして急遽WinMEを最後のWin9xとして開発・投入し
# 統合バージョンはWinXPとして販売されました。
# WinMEは非常にやっつけ仕事でいい加減に開発したようでそのせいで
# 不具合が多く、不安定になっています。

これ以降、製品名に発売年度(または次年度)を付けるようになるのが
習慣化しましたが。

[6002] Re^2: OS名とバージョン番号 投稿者:ちたん 投稿日:06/08/07(月) 19:14
レスおくれてすみません。
これでノドにつかえていたものが解けました(^ヮ^)。
ありがとうございました。

[5955] Re: OS名とバージョン番号 投稿者:LonelyWolf 投稿日:06/07/23(日) 20:36
>  sysinfo(0) の OS 名とバージョン番号って
> OS によってどんな文字列が返ってくるのですか?
> "WindowsNT ver5.0"
> OS が Win2K しかなくて判断できないです(TT)。
> 16ビット系だと、
> "Windows ver4.x"
> みたいに返ってくるのですかね。
> 自分の中で「おそらく」なので確信が欲しいです。
> お願いします。
Kpanさんの紹介されたサイトも参考の上、
この掲示板のワード検索から、過去ログ3で
sysinfoで検索して下さい。

[5954] Re^2: OS名とバージョン番号 投稿者:Kpan 投稿日:06/07/23(日) 20:20
参考になるか分かりませんが、ちょくとさんのページを
チェックしてください。

http://yokohama.cool.ne.jp/chokuto/advanced/version.html

[6001] 文書の印刷について。 投稿者:@神無月 投稿日:06/08/07(月) 19:03
今作っているエディタに印刷機能をつけたいんですが
どう記述すればいいかわかりません。。。
過去ログも見てみたんですが、参考になるものがなくて・・・
どうにかならないでしょうか?

[6000] SCILEXER.DLLで自分好みのエディタを作りませんか。 投稿者:秋房 投稿日:06/08/07(月) 00:58
/*SCILEXER.DLLの簡単な使い方。...難しい事は知らない*/

#include "user32.as"
#include "kernel32.as"

#define SC_CASE_LOWER 2
#define SC_CASE_MIXED 0
#define SC_CASE_UPPER 1
#define SCE_B_ASM 14
#define SCE_B_COMMENT 1
#define SCE_B_CONSTANT 13
#define SCE_B_DATE 8
#define SCE_B_DEFAULT 0
#define SCE_B_IDENTIFIER 7
#define SCE_B_KEYWORD 3
#define SCE_B_KEYWORD2 10
#define SCE_B_KEYWORD3 11
#define SCE_B_KEYWORD4 12
#define SCE_B_NUMBER 2
#define SCE_B_OPERATOR 6
#define SCE_B_PREPROCESSOR 5
#define SCE_B_STRING 4
#define SCE_B_STRINGEOL 9
#define SCI_ADDTEXT 2001
#define SCI_BRACEBADLIGHT 2352
#define SCI_BRACEHIGHLIGHT 2351
#define SCI_BRACEMATCH 2353
#define SCI_CANPASTE 2173
#define SCI_CANREDO 2016
#define SCI_CANUNDO 2174
#define SCI_CLEAR 2180
#define SCI_CLEARALL 2004
#define SCI_COLOURISE 4003
#define SCI_COPY 2178
#define SCI_CUT 2177
#define SCI_EMPTYUNDOBUFFER 2175
#define SCI_FINDTEXT 2150
#define SCI_GETCARETLINEBACK 2097
#define SCI_GETCARETLINEVISIBLE 2095
#define SCI_GETCHARAT 2007
#define SCI_GETCOLUMN 2129
#define SCI_GETCURRENTPOS 2008
#define SCI_GETINDENT 2123
#define SCI_GETINDENTATIONGUIDES 2133
#define SCI_GETLENGTH 2006
#define SCI_GETLEXER 4002
#define SCI_GETLINECOUNT 2154
#define SCI_GETLINEINDENTATION 2127
#define SCI_GETMARGINWIDTHN 2243
#define SCI_GETMODIFY 2159
#define SCI_GETSEARCHFLAGS 2199
#define SCI_GETSELECTIONEND 2145
#define SCI_GETSELECTIONSTART 2143
#define SCI_GETTARGETEND 2193
#define SCI_GETTARGETSTART 2191
#define SCI_GETTEXT 2182
#define SCI_GETTEXTLENGTH 2183
#define SCI_GETUSETABS 2125
#define SCI_GETVIEWEOL 2355
#define SCI_GETVIEWWS 2020
#define SCI_GETWRAPMODE 2269
#define SCI_GETZOOM 2374
#define SCI_GOTOLINE 2024
#define SCI_GOTOPOS 2025
#define SCI_INSERTTEXT 2003
#define SCI_LINEFROMPOSITION 2166
#define SCI_PASTE 2179
#define SCI_POSITIONFROMLINE 2167
#define SCI_REDO 2011
#define SCI_REPLACETARGET 2194
#define SCI_REPLACETARGETRE 2195
#define SCI_SCROLLCARET 2169
#define SCI_SEARCHINTARGET 2197
#define SCI_SELECTALL 2013
#define SCI_SETCARETFORE 2069
#define SCI_SETCARETLINEBACK 2098
#define SCI_SETCARETLINEVISIBLE 2096
#define SCI_SETCURRENTPOS 2141
#define SCI_SETINDENT 2122
#define SCI_SETINDENTATIONGUIDES 2132
#define SCI_SETKEYWORDS 4005
#define SCI_SETLEXER 4001
#define SCI_SETLEXERLANGUAGE 4006
#define SCI_SETLINEINDENTATION 2126
#define SCI_SETMARGINWIDTHN 2242
#define SCI_SETPROPERTY 4004
#define SCI_SETSAVEPOINT 2014
#define SCI_SETSEARCHFLAGS 2198
#define SCI_SETSELBACK 2068
#define SCI_SETSELECTIONEND 2144
#define SCI_SETSELECTIONSTART 2142
#define SCI_SETSELFORE 2067
#define SCI_SETTARGETEND 2192
#define SCI_SETTARGETSTART 2190
#define SCI_SETTEXT 2181
#define SCI_SETUSETABS 2124
#define SCI_SETVIEWEOL 2356
#define SCI_SETVIEWWS 2021
#define SCI_SETWRAPMODE 2268
#define SCI_SETZOOM 2373
#define SCI_STYLESETBACK 2052
#define SCI_STYLESETBOLD 2053
#define SCI_STYLESETCASE 2060
#define SCI_STYLESETFONT 2056
#define SCI_STYLESETFORE 2051
#define SCI_STYLESETITALIC 2054
#define SCI_STYLESETSIZE 2055
#define SCI_TARGETFROMSELECTION 2287
#define SCI_UNDO 2176
#define SCI_USEPOPUP 2371
#define SCI_ZOOMIN 2333
#define SCI_ZOOMOUT 2334
#define SCLEX_CPP 3
#define SCLEX_HTML 4
#define SCLEX_NULL 1
#define SCLEX_PERL 6
#define SCLEX_PYTHON 2
#define SCLEX_SQL 7
#define SCLEX_VB 8
#define SCLEX_XML 5
#define SCN_UPDATEUI 2007

#define ctype RGB(%1=0,%2=0,%3=0) (%1 << 16)+(%2 << 8)+%3

LoadLibrary "SCILEXER.DLL"

CreateWindowEX 0x200,"Scintilla",0,0x50000000,0,0,640,240,hwnd,1000,0,0
hSci = stat
hFnt = msmincho
hKey = "screen buffer mes"
hKey1 = "if else"
; SendMessage hSci,SCI_SETCARETLINEVISIBLE,1,0
SendMessage hSci,SCI_SETCARETLINEBACK,RGB(200,255,200),0

; SendMessage hSci,SCI_SETMARGINWIDTHN,0,36
SendMessage hSci,SCI_STYLESETFONT,32,varptr(hFnt)
SendMessage hSci,SCI_STYLESETSIZE,32,16

SendMessage hSci,SCI_SETLEXER,SCLEX_VB,0
SendMessage hSci,SCI_SETKEYWORDS,0,varptr(hKey)
SendMessage hSci,SCI_STYLESETFONT,SCE_B_KEYWORD,varptr(hFnt)
SendMessage hSci,SCI_STYLESETSIZE,SCE_B_KEYWORD,16
SendMessage hSci,SCI_STYLESETFORE,SCE_B_KEYWORD,RGB(0,0,255)

SendMessage hSci,SCI_SETKEYWORDS,1,varptr(hKey1)
SendMessage hSci,SCI_STYLESETFONT,SCE_B_KEYWORD2,varptr(hFnt)
SendMessage hSci,SCI_STYLESETSIZE,SCE_B_KEYWORD2,16
SendMessage hSci,SCI_STYLESETFORE,SCE_B_KEYWORD2,RGB(150,0,150)
SendMessage hSci,SCI_STYLESETBOLD,SCE_B_KEYWORD2,1
SendMessage hSci,SCI_STYLESETCASE,SCE_B_KEYWORD2,SC_CASE_UPPER

SendMessage hSci,SCI_STYLESETFORE,SCE_B_OPERATOR,RGB(120,0,0)
SendMessage hSci,SCI_STYLESETFORE,SCE_B_PREPROCESSOR,0x90090

SendMessage hSci,SCI_STYLESETFONT,SCE_B_COMMENT,varptr(hFnt)
SendMessage hSci,SCI_STYLESETSIZE,SCE_B_COMMENT,16
SendMessage hSci,SCI_STYLESETITALIC,SCE_B_COMMENT,1
SendMessage hSci,SCI_STYLESETFORE,SCE_B_COMMENT,RGB(255,0,255)
SendMessage hSci,SCI_STYLESETBACK,SCE_B_COMMENT,0x00ff00

SendMessage hSci,SCI_STYLESETFORE,SCE_B_STRING,RGB(130,0,0)
SendMessage hSci,SCI_STYLESETSIZE,SCE_B_STRING,16
SendMessage hSci,SCI_STYLESETFORE,SCE_B_IDENTIFIER,0
SendMessage hSci,SCI_STYLESETFORE,SCE_B_NUMBER,RGB(0,0,0)
SendMessage hSci,SCI_STYLESETFORE,SCE_B_DATE,RGB(128,128,0)

SendMessage hSci,SCI_STYLESETFORE,34,RGB(0,0,255)
SendMessage hSci,SCI_STYLESETBACK,34,RGB(255,255,0)
SendMessage hSci,SCI_STYLESETFORE,35,RGB(255,0,0)

SendMessage hSci,SCI_SETMARGINWIDTHN,0,36
SendMessage hSci,SCI_SETCARETLINEVISIBLE,1,0
SendMessage hSci,SCI_SETINDENTATIONGUIDES,1,0
; SendMessage hSci,SCI_SETVIEWEOL,1,0

ss = "screen\nbuffer\nif\nelse\n'--- ダウンロードは下記です。 ---\n\n"
ss += "http://scintilla.sourceforge.net/SciTE.html\n"
ss += "http://scintilla.sourceforge.net/ScintillaDownload.html\n\n\n\n"
SendMessage hSci,SCI_SETTEXT,0,varptr(ss)

[5972] ドメインからIPアドレスを得るには 投稿者:TASHIRO 投稿日:06/07/28(金) 22:19
コマンドプロンプトでいう"NSLOOKUP"のようなことをしたいのですが
行き詰ってしまいました。

ドメインからIPアドレスを得るにはどうすればいいのでしょうか?

[5973] Re: ドメインからIPアドレスを得るには 投稿者:asuka 投稿日:06/07/29(土) 19:17
> コマンドプロンプトでいう"NSLOOKUP"のようなことをしたいのですが
> 行き詰ってしまいました。
>
> ドメインからIPアドレスを得るにはどうすればいいのでしょうか?

API(winsock)のgethostbynameを使うか、プラグインpcbnetのhostbynameを使えばいいです。
前者はwinsockの知識が必要なので、後者の方がカンタンです。

[5997] Re^2: ドメインからIPアドレスを得るには 投稿者:TASHIRO 投稿日:06/08/03(木) 23:23
ご返答ありがとうございます。
プラグインpcbnetで試してみたいと思います。
このたびはありがとうございました。

> > コマンドプロンプトでいう"NSLOOKUP"のようなことをしたいのですが
> > 行き詰ってしまいました。
> >
> > ドメインからIPアドレスを得るにはどうすればいいのでしょうか?
>
> API(winsock)のgethostbynameを使うか、プラグインpcbnetのhostbynameを使えばいいです。
> 前者はwinsockの知識が必要なので、後者の方がカンタンです。

[5975] ユーザ定義命令の中のgoto 投稿者:bee 投稿日:06/07/29(土) 21:14
こんばんは。質問させていただきます。

ユーザ定義命令内で次のようなボタンの使い方をすると
「サブルーチン外のreturnは無効です」のエラーが出ます。
gotoをreturnしてはいけないのは知っていますが、buttonで
飛ぶとエラーが出て、gotoで飛ぶとエラーは出ないので、
ユーザ定義命令内をボタンジャンプ後に脱出という方法は
HSPの仕組み上使えないのかなと思い質問しました。
もしかしたらgotoのほうも警告が出ないだけで問題はあるのかも
しれませんが、だとするとユーザ定義命令の中でのボタンジャンプ
やgotoはそもそも使うべきではないのでしょうか。
どうかご指導お願いします。よろしくお願いいたします。

#module
#deffunc testfunc
button "GO", *FINISH
stop
*FINISH
mes "finish"
return
#global

testfunc
stop

[5996] Re: ユーザ定義命令の中のgoto 投稿者:bee 投稿日:06/08/03(木) 22:51
ちょっと時間かかりましたが、みなさんの回答をヒントになんとか解決いたしました。
ありがとうございました。

#deffunc内でbutton gotoを使うと、飛んだ先で引数のarray sary(文字列型一次元配列)が破壊される(?)ため、
button gosubで飛ぶ方法に変えました。
フラグを導入し、button gosubは普通のgosubと違い直下に戻ってこないので(ここはまだ理解不能)、
命令の脱出判定をループ内に設けreturnするようにしました。

flag = 0
button gosub "OK", *FINISH

*MAIN_LOOP
await 10 : if (ginfo_act == -1) { goto *MAIN_LOOP }
if flag { return }

*FINISH
flag = 1
return

button goto/gosubについてはまだ理解しきれないところもありますが、とりあえず今回の質問はこれで終わります。
みなさんご協力どうもありがとうございました。

[5981] Re: ユーザ定義命令の中のgoto 投稿者:bee 投稿日:06/07/30(日) 23:00
皆さんごめんなさい。
私の説明不足で誤解を与えてしまったようです。

*FINISH の後ろの return は #deffunc のための return です。
ボタン操作だけでこの命令を脱出しようとしたら、偶然この形になってしまいました。

で、button goto で *FINISH に行くとエラーになり、下のサンプルのように 普通の goto で行くと
エラーがでないのです。この2つの goto は別物なのでしょうか?

#module
#deffunc testfunc
*MAIN_LOOP
await 10 : if (ginfo_act == -1) { goto *MAIN_LOOP }
getkey key, 1
if key { goto *FINISH }
goto *MAIN_LOOP
*FINISH
return
#global

質問を要約しますと、
(1) ボタン操作だけで #deffunc 内の処理を抜けるのは無理か
(2) 普通の goto で出来るのは問題ないのか

です。たびたび申し訳ありませんが、ご教授お願いいたします。
Irisawaさんのお答えが最初の質問に対する答えになっているとしたらごめんなさい。

[5982] Re^2: ユーザ定義命令の中のgoto 投稿者:kz3 投稿日:06/07/30(日) 23:41
>button goto で *FINISH に行くとエラーになり、下のサンプルのように 
>普通の goto で行くとエラーがでないのです。この2つの goto は別物なのでしょうか?

別ものです。

[5978] Re: ユーザ定義命令の中のgoto 投稿者:矢野 投稿日:06/07/29(土) 21:58
> こんばんは。質問させていただきます。
>
> ユーザ定義命令内で次のようなボタンの使い方をすると
> 「サブルーチン外のreturnは無効です」のエラーが出ます。
> gotoをreturnしてはいけないのは知っていますが、buttonで
> 飛ぶとエラーが出て、gotoで飛ぶとエラーは出ないので、
> ユーザ定義命令内をボタンジャンプ後に脱出という方法は
> HSPの仕組み上使えないのかなと思い質問しました。
> もしかしたらgotoのほうも警告が出ないだけで問題はあるのかも
> しれませんが、だとするとユーザ定義命令の中でのボタンジャンプ
> やgotoはそもそも使うべきではないのでしょうか。
> どうかご指導お願いします。よろしくお願いいたします。
>
> #module
> #deffunc testfunc
> button "GO", *FINISH
> stop
> *FINISH
> mes "finish"
> return
> #global
>
> testfunc
> stop

return命令は、gosub命令でメインルーチンからサブルーチンに
移動し、サブルーチン終了後メインルーチンに復帰するときに
使用する命令です。

上のスクリプトにおいて、次のように修正すると問題なく処理できます。
help Browser でbutton命令の書き方を確認してください。

button "GO", *FINISH → button gosub "GO", *FINISH

[5979] Re^2: ユーザ定義命令の中のgoto 投稿者:矢野 投稿日:06/07/29(土) 22:26
> > ユーザ定義命令内で次のようなボタンの使い方をすると
> > 「サブルーチン外のreturnは無効です」のエラーが出ます。

ユーザ定義命令だったのですね。
それを見落として、的はずれの回答をしてしまいました。

irisawaさんの回答が正解のようです。

[5977] Re: ユーザ定義命令の中のgoto 投稿者:Irisawa 投稿日:06/07/29(土) 21:56
> ユーザ定義命令内で次のようなボタンの使い方をすると
> 「サブルーチン外のreturnは無効です」のエラーが出ます。
> gotoをreturnしてはいけないのは知っていますが、buttonで
> 飛ぶとエラーが出て、gotoで飛ぶとエラーは出ないので、
> ユーザ定義命令内をボタンジャンプ後に脱出という方法は
> HSPの仕組み上使えないのかなと思い質問しました。
> もしかしたらgotoのほうも警告が出ないだけで問題はあるのかも
> しれませんが、だとするとユーザ定義命令の中でのボタンジャンプ
> やgotoはそもそも使うべきではないのでしょうか。
> どうかご指導お願いします。よろしくお願いいたします。

HSP3ではgotoするとsublevを初期化してしまうようなのでreturn
できなくなります。
いろいろ、これは問題がありますが現状仕様のようです。
あと、ユーザー定義命令/関数内部でstopは使用しないようにしてくだ
さい。

[5976] Re: ユーザ定義命令の中のgoto 投稿者:カズキング 投稿日:06/07/29(土) 21:44
そもそも「goto」の意味を間違えています。
「goto」は一方通行の命令です。
これはbasic時代から変わっていません。
そして、「button」はボタンを押すとgotoで指定ラベルへ飛べる命令です。
つまり、「gotoを使うとreturnする場所がない」ということです。
「return」したいのであれば「gosub」を使いましょう。

[5967] Startup failed. とは 投稿者:白岩 康平 投稿日:06/07/28(金) 13:18
 表記のエラーメッセージは、何を意味しているのですか。
マニュアルも検索してみたのですが、探し方が悪いのか
見つかりません。

 御教授宜しくお願いします。

[5971] Re: Startup failed. とは 投稿者:Irisawa 投稿日:06/07/28(金) 21:54
>  表記のエラーメッセージは、何を意味しているのですか。
> マニュアルも検索してみたのですが、探し方が悪いのか
> 見つかりません。

start.axをpackfileに入れずにEXEにしたとか、start.axのない状態で
HSPデバッグランタイムを直接実行した場合などに表示されます。
(つまり、start.axが見つからないという意味です)

また、直接は関係ないのですがHSPではアイコンリソースを1つしか
入れられず、ResourceHackerなどで複数入れると強制終了したと思い
ます。

[5992] Re^2: Startup failed. とは 投稿者:白岩 康平 投稿日:06/08/03(木) 00:36
 irisawaさん、ありがとうございます。亀res で申し訳ありません。いろ
いろ試しているうちに、遅くなってしまいました。
 実は、hsp3.0に同梱されていた「hsed3le.exe 」でスクリプトを読み込
み、f6で実行するとこの減少が起きます。また、あるホルダでは、どのスク
リプトを実行しても、特定のスクリプトが実行されます。これは、どうやら
hsptmpやhsptmp.iなどが影響しているようです。
 何かファイルが足りないのか、ほかのソフトが邪魔しているのか、原因
がわかりません。スクリプトエディタの設定の問題でしょうか?ちなみに、
2台のパソコンで同じような現象が起きています。使用環境は、1台は、xpホ
ームエディション、1台がxpプロエディションです。また、「hsed3.exe」で
も結果は同じでした。
 start.axはh> start.axをpackfileに入れずにEXEにしたとか、start
.axのない状態で
> HSPデバッグランタイムを直接実行した場合などに表示されます。
> (つまり、start.axが見つからないという意味です)
>
> また、直接は関係ないのですがHSPではアイコンリソースを1つしか
> 入れられず、ResourceHackerなどで複数入れると強制終了したと思い
> ます。

 irisawaさん、ありがとうございます。亀res で申し訳ありません。いろ
いろ試しているうちに、遅くなってしまいました。
 実は、hsp3.0に同梱されていた「hsed3le.exe 」でスクリプトを読み込
み、f6で実行するとこの減少が起きます。また、あるホルダでは、どのスク
リプトを実行しても、特定のスクリプトが実行されます。これは、どうやら
hsptmpやhsptmp.iなどが影響しているようです。
 何かファイルが足りないのか、ほかのソフトが邪魔しているのか、原因
がわかりません。スクリプトエディタの設定の問題でしょうか?ちなみに、
2台のパソコンで同じような現象が起きています。使用環境は、1台は、xpホ
ームエディション、1台がxpプロエディションです。また、「hsed3.exe」で
も結果は同じでした。h> start.axをpackfileに入れずにEXEにしたとか
、start.axのない状態で
> HSPデバッグランタイムを直接実行した場合などに表示されます。
> (つまり、start.axが見つからないという意味です)
>
> また、直接は関係ないのですがHSPではアイコンリソースを1つしか
> 入れられず、ResourceHackerなどで複数入れると強制終了したと思い
> ます。

 irisawaさん、ありがとうございます。亀res で申し訳ありません。いろ
いろ試しているうちに、遅くなってしまいました。
 実は、hsp3.0に同梱されていた「hsed3le.exe 」でスクリプトを読み込
み、f6で実行するとこの減少が起きます。また、あるホルダでは、どのスク
リプトを実行しても、特定のスクリプトが実行されます。これは、どうやら
hsptmpやhsptmp.iなどが影響しているようです。
 何かファイルが足りないのか、ほかのソフトが邪魔しているのか、原因
がわかりません。スクリプトエディタの設定の問題でしょうか?ちなみに、
2台のパソコンで同じような現象が起きています。使用環境は、1台は、xpホ
ームエディション、1台がxpプロエディションです。また、「hsed3.exe」で
も結果は同じでした。h> start.axをpackfileに入れずにEXEにしたとか
、start.axのない状態で
> HSPデバッグランタイムを直接実行した場合などに表示されます。
> (つまり、start.axが見つからないという意味です)
>
> また、直接は関係ないのですがHSPではアイコンリソースを1つしか
> 入れられず、ResourceHackerなどで複数入れると強制終了したと思い
> ます。

 irisawaさん、ありがとうございます。亀res で申し訳ありません。いろ
いろ試しているうちに、遅くなってしまいました。
 実は、hsp3.0に同梱されていた「hsed3le.exe 」でスクリプトを読み込
み、f6で実行するとこの減少が起きます。また、あるホルダでは、どのスク
リプトを実行しても、特定のスクリプトが実行されます。これは、どうやら
hsptmpやhsptmp.iなどが影響しているようです。
 何かファイルが足りないのか、ほかのソフトが邪魔しているのか、原因
がわかりません。スクリプトエディタの設定の問題でしょうか?ちなみに、
2台のパソコンで同じような現象が起きています。使用環境は、1台は、xpホ
ームエディション、1台がxpプロエディションです。また、「hsed3.exe」で
も結果は同じでした。start.axはhsptv フォルダにあります。

[5993] Re^3: Startup failed. とは 投稿者:白岩 康平 投稿日:06/08/03(木) 00:45
 すみません。操作ミスで何度も同じ文を入力してしまいました。
 お見苦しく申し訳ありません。

[5994] Re^4: Startup failed. とは 投稿者:naznyark 投稿日:06/08/03(木) 01:35
> f6で実行すると
F6『実行』でなく f5『コンパイル + 実行』をしてください。

『コンパイル + 実行』
現在エディタで編集中のソース

(コンパイル作業)

ソースを元に start.ax ファイル(+他のファイル)を作成

start.ax ファイルの内容に基づきプログラムが実行される。

『実行』
編集中のソースと関係なく現在のカレントフォルダにある start.ax
ファイルの内容に基づきプログラムが実行される。

[5995] Re^5: Startup failed. とは 投稿者:白岩 康平 投稿日:06/08/03(木) 09:30
 うまくいきました。ありがとうございます。
 1年余りもほうりっぱなしにしていたので、カビでも生えてしまったかと思いました。私は何を勘違いしていたんでしょうね。大変お騒がせしました。

[5968] Re: Startup failed. とは 投稿者:kz3 投稿日:06/07/28(金) 14:35
スタートアップに失敗した、実行開始に失敗した、という意味になります。

[5970] Re^2: Startup failed. とは 投稿者:hiroki 投稿日:06/07/28(金) 17:01
パックファイルのファイル名に全角を使用し、
それをアクセスしたときにこのエラーが出た
ことがあります。

[5969] Re^2: Startup failed. とは 投稿者:kz3 投稿日:06/07/28(金) 14:38
>Startup failed. とは 
スタートアップに失敗した、実行開始に失敗した、という意味になります。

# No.5968の記事は削除キー未設定のため削除できませんでした...
# 削除お願いします。

[5984] ChdirのError12を避ける方法を教えて下さい。 投稿者:KUNKUN 投稿日:06/07/31(月) 00:29
初めまして
今、指定したディレクトリ以下の全てのサブディレクトリ名を取得
するスクリプトを書いています。
selfolderでフォルダ選択ダイアログを表示させて任意の選択したデ
ィレクトリへchdirで移動し、dialistでサブディレクトリ名を取得す
るという手順をフォルダ数分繰り返す流れです。
この場合、ドライブ内の全てのフォルダのリストを得ようとして、"
C:\System Volume Information\"にchdirで入ろうとすると当然Error
12ダイアログが開いてそこでストップしてしまいます。chdir命令を
実行する前に"System Volume Information"のようなアクセスを拒否
するディレクトリかどうかを判別してchdir命令を回避する方法がな
いでしょうか?
ご教授のほどよろしくお願いします。

[5988] Re: ChdirのError12を避ける方法を教えて下さい。 投稿者:hiroki 投稿日:06/07/31(月) 10:09
    ; こんなのはダメなんでしょうか?
; 僕はこれでことたりてます。
; *erに行かないエラーもありますが・・・。

onerror gosub *er

; 処理


chdir dir
if ern=12 {
ern=0
; 処理
}


; 処理


*er
if err=12 : ern=12 ; こうしないと、いつまでたっても err が 12 のまま
return

[5989] Re^2: (訂正)ChdirのError12を避ける方法を教えて下さい。 投稿者:hiroki 投稿日:06/07/31(月) 12:57

> *er
> if err=12 : ern=12 ; こうしないと、いつまでたっても err が 12 のまま
> return



*er
if err=12 {
ern=12
} else {
; 処理
}
return

[5991] Re^3: (訂正)ChdirのError12を避ける方法を教えて下さい。 投稿者:KUNKUN 投稿日:06/07/31(月) 23:05
onerrorという命令があるとは知りませんでした。ものの見事にエラー回避
できました。もっと調べてから投稿すべきでした。申し訳ありませんでした

[5986] Re: ChdirのError12を避ける方法を教えて下さい。 投稿者:Mizki_F 投稿日:06/07/31(月) 05:39
GetFileAttributesを使ってファイルやフォルダの属性を調べることができます。
FILE_ATTRIBUTE_SYSTEM属性を持つ場合にchdirを回避するようにすれば対応でき
るのではないでしょうか。

[5990] Re^2: ChdirのError12を避ける方法を教えて下さい。 投稿者:KUNKUN 投稿日:06/07/31(月) 23:02
http://www.kct.ne.jp/~okuda/tips/tips15.html
のサンプルスクリプトを参考すればディレクトリのシステムフォルダ属性を得ることが出来そうです。ありがとうございました。

[5965] DLLファイル 投稿者:sword 投稿日:06/07/27(木) 11:47
DLLファイルが、足り無いんですけど、どうすれば入手できますか。

[5966] Re: DLLファイル 投稿者:Irisawa 投稿日:06/07/27(木) 11:58
> DLLファイルが、足り無いんですけど、どうすれば入手できますか。

単に足りないと言われても何が足りないのか書かないと誰にも答えら
れませんよ。

[5961] エラーメッセージについて 投稿者:ロッカー 投稿日:06/07/25(火) 22:20
はじめまして。

HSP,手軽にGUIが構築できるのでとても重宝しています。
さて、次のようなエラーメッセージが出るのですが、
この(1)というのは何を意味するのでしょうか?

内部エラーが発生しました(1)

HSPヘルプのキーワード検索で、errと入力すると、
「HSP のエラーコードです。エラーコードとメッセージの対応については、別途マニュアルを参照してください。」
とありますが、マニュアルを見ても見つけられませんでした・・・

そなたかご教授ください!

[5962] Re: エラーメッセージについて 投稿者:Irisawa 投稿日:06/07/26(水) 00:02
> HSPヘルプのキーワード検索で、errと入力すると、
> 「HSP のエラーコードです。エラーコードとメッセージの対応に
> ついては、別途マニュアルを参照してください。」
> とありますが、マニュアルを見ても見つけられませんでした・・・

HSPプログラムガイドの「4.HSPの基本動作概念 」の
「エラーメッセージ」に書いてあります。

[5963] Re^2: エラーメッセージについて 投稿者:ロッカー 投稿日:06/07/27(木) 00:51
Irisawa様

ありがとうございます!これですね。このエラー番号はエラーコードのことだったんですね。でもこれじゃあ、こちらのせいじゃなさそうですね。。。

1 "システムエラーが発生しました"

通常は表示されないエラーです。ファイルが破損している場合や、
予期しない事態が起こった時に表示されます。

[5964] Re^3: エラーメッセージについて 投稿者:Irisawa 投稿日:06/07/27(木) 02:00
> ありがとうございます!これですね。
> このエラー番号はエラーコードのことだったんですね。
> でもこれじゃあ、こちらのせいじゃなさそうですね。。。

確かに結構分かりづらいみたいで、難しいようですがデバッグ時
(スクリプトソースから直接コンパイル&実行=デバッグ用ランタイムで
実行した時)のみ正式なエラーメッセージが表示され、packfileを埋め
込んでEXEにするとエラーメッセージが「内部エラー(error No)」と
なってしまい、混乱の元なんですよね。
まあ、これはそもそもエラーメッセージはデバッグして表示されない
ようにするのが一番好ましいのですが...。
あと、EXEにすると行番号などのデバッグ情報は含まれないのでそれらも
表示されません。

> 1 "システムエラーが発生しました"

error No1はNULLポインタを直接操作した場合などOSレベルで問題の
ある記述(HSPで把握しきれない部分)やHSPインタプリタ自体の不具合に
よる発生がほとんどです。
HSP3.xxはまだいろいろ不安定でよくerror 1をだしたりします。
あと、HSPシステムで必須のファイルが足りないなどで発生することも
あります。
使用しているHSP拡張ランタイムやモジュールなどの相性や不具合で
発生することもあるので実際の原因を完全に把握することは難しい
です。
エラーのでる最小限のスクリプトを使用して検証を行いどこでエラーに
なっているのかをしっかりと確認してください。

# プログラムというのはエラーのでている行が問題とは限らず、別の
# 行の記述が原因で他の場所でエラーになることもあります。
# HSPの場合は表示される行番号自体がずれたりしますのであまり宛に
# なりません。

[5958] split関数の自作について... 投稿者:貝猫 投稿日:06/07/25(火) 11:15
初めまして。貝猫と申します。

他の言語ではよく見られる関数に、指定した文字列を区切り文字として、別の文字列を分割する(perlでいうsplit関数)ものがあるのですが、HSPだと区切り文字がカンマに限られてしまうみたいですね。

それで他の文字でも区切れるようにしようと関数を定義してみたのですが、エラーが出てしまいます。

「#Error 18 in line 0(hspdef.as)
 --> 代入できない変数名を指定しています」
と表示されます。

予約語一覧で調べてはみたものの・・・思い当たらず、行き詰ってしまいました。
以下のようなコードなのですが・・・よろしければ、問題点の指摘をお願い致します。


#include "hspda.as"

#defcfunc split str cont,str cut;contにsplitしたい文字列、cutに区切り文字を取得
str cont2 = ""
cont += "%%";文末を認識するための文字列を付加
repeat
if strmid(cont,cnt,2)="%%" : break
if strmid(cont,cnt,1)=cut : cont2 += "," : else : cont2 += strmid(cont,cnt,1)
loop
csvnote content,cont2
return content
stop

[5959] Re: split関数の自作について... 投稿者:あんすこえむ 投稿日:06/07/25(火) 17:43
まず文法的な問題点。
(1) #include "hspda.as" より return content までを#moduleと#globalで括る。
(2) str cont2 = "" の strは要らない(エラー18の原因)。
(3) 文字列(str)で受けるとcont+="%%"のような操作はNG。
別名(例えばstr pconf)で受けて、cont=pconf+"%%" とかにする。
(4) csvnoteに与える変数contentは、文字列型で初期化しておく。

アルゴリズム上の問題点。
(1) 文字列長をstrlen関数で得てRepeat-loopすれば、"%%"は不要。
(2) 区切り文字を","に置き換える方法だと、個々の文字列に","を
含められない。終端の"%%"も同様。

任意の区切り文字で文字列を抜き出す命令としてgetstr があります。
Helpを調べてみてください。

[5960] Re^2: split関数の自作について... 投稿者:貝猫 投稿日:06/07/25(火) 19:57
ご指導ありがとうございます!
早速試してみます!

[5916] 実行用ランタイムファイルが見つかりません? 投稿者:しなちく 投稿日:06/07/17(月) 01:36
過去ログで同じ質問がありましたが、レスがひとつも付いていないので未解決トピックだと思いますが、私もスクリプトエディッタで編集後に「HSP実行」をしても、「実行用ランタイムファイルが見つかりません」となり、お手上げです。
どなたか、解決策をご存知の方、宜しくお願いします。
OS:WinXpPro
HSP:HSP3.1b4

[5917] Re: 実行用ランタイムファイルが見つかりません? 投稿者:naznyark 投稿日:06/07/17(月) 02:28
情報が少なすぎます。

とりあえず適当なドライブの直下に半角英数で test という名のディレクトリを作り
その中に hsed3.exe, hsp3.exe, hspcmp.dll の3つのファイルをコピーして
HSPスクリプトエディタが起動していない状態で
hsed3.exe を実行 -> (何もスクリプトがない状態で)F5(コンパイル+実行) を試してみてください。
これで同様のエラーが出るなら私にはよくわからない状況です。

[5920] Re^2: 実行用ランタイムファイルが見つかりません? 投稿者:しなちく 投稿日:06/07/17(月) 22:54
> とりあえず適当なドライブの直下に半角英数で test という名のディレクトリを作り
> その中に hsed3.exe, hsp3.exe, hspcmp.dll の3つのファイルをコピーして
> HSPスクリプトエディタが起動していない状態で
> hsed3.exe を実行 -> (何もスクリプトがない状態で)F5(コンパイル+実行) を試してみてください。
ご指示通りにしましたら、正しく実行中の無地ウィンドウが表示され、デバッグウィンドウも表示されます。これはいったいどういうこと・・・?
当初、ダウンロードした3.0ではインストーラーパッケージだったので、デフォルトのまま「\Program Files\hsp30」に全て落とし込んだのですが、もしかしたらディレクトリにスペースが含まれるとダメということでしょうか?
下手にいじくると怖いので、今はそのまま「\test」に3つのファイルを入れて、実行確認ができた状態のままにしてあります。
やはり、新しいディレクトリに移動した方がよいのでしょうか?
ご助言の程宜しくお願いします。

[5921] Re^3: 実行用ランタイムファイルが見つかりません? 投稿者:naznyark 投稿日:06/07/18(火) 02:04
> やはり、新しいディレクトリに移動した方がよいのでしょうか?
試しにやってみてそれで問題が解決するならそれでよいと思います。

> もしかしたらディレクトリにスペースが含まれるとダメということでしょうか?
そういうことはないと思います。


それよりも 3.0 と 3.1b4 のどちらの話ですか?

> OS:WinXpPro
> HSP:HSP3.1b4

> 当初、ダウンロードした3.0ではインストーラーパッケージだったので、

情報が少ないと答えられることでも答えようがありません。
問題が生じたときは状況をできるだけ詳しく説明したほうが適切な回答を得られやすいです。

[5922] Re^4: 実行用ランタイムファイルが見つかりません? 投稿者:しなちく 投稿日:06/07/18(火) 03:45
> それよりも 3.0 と 3.1b4 のどちらの話ですか?
説明の要領が悪くて申し訳ありません。
現在の最新の状態が
> > HSP:HSP3.1b4
ということで
> > 当初、ダウンロードした3.0ではインストーラーパッケージだったので、
というのは、元々3.0のバージョンをインストールしたところへ新たに3.1b4を上書きインストール(解凍)した、という経緯です。

どのような情報を挙げれば適切な助言が得られるのか良く分からないのですが、ディレクトリ内部のファイル名を全部書き出したらよいのでしょうか。

流れとしては、以前2.61のバージョンを任意のディレクトリで展開していて、そこでは全く問題がなかったのですが、3.0がリリースされたときにダウンロードしたものはアーカイブではなくてインストーラーだったので、解凍を実行したときにデフォルトのままok、okとクリックしていったら勝手に\Program files\hsp30というディレクトリが作成されて、そこにインストールされました。
その時点で既に現象はあったのですが、そのうちバージョンアップで改善されるだろうと気長に待っていたところ、3.1b4リリースされて、それを上書きインストールしても現象が改善されず、仕方なく質問させていただいたというわけです。

なんどかアンインストールしたり、インストールしなおしたりしているのですが、エディッタを起動してF5を押すと「実行用ランタイムファイルが見つかりません」となってしまいます。
パスが通っていないのか、それともディレクトリの場所がまずいのか・・・。
とりあえず、testとしたディレクトリに、解凍されて展開されたフォルダやファイルの全てを移動するとこの現象が再び出てしまうので、余計なものが入っているからのような気がしています。
それを突き止められれば、そのファイルを削除するだけでいけそうな気がするのですが・・・。
(夜が明けそうですが)もう少し、頑張ってみます。

[5939] Re^5: 実行用ランタイムファイルが見つかりません? 投稿者:naznyark 投稿日:06/07/20(木) 01:25
> 余計なものが入っているからのような気がしています。
> それを突き止められれば、そのファイルを削除するだけでいけそうな気がするのですが・・・。

HSP3のインストールフォルダ(hsed3.exe のあるフォルダ)内に
半角英数で hsp3 という名前のディレクトリか、
同じく hsp3 というファイル名の拡張子無しのファイルがあると
ランタイム(hsp3.exe)を認識してくれないようです。

おそらくこれかこれに類する事柄が原因になっているのではないかと思います。
(特定の名前(hsp3 以外にあるのかは不明)のフォルダかファイルが
インストールフォルダ内にあると動作に支障が出る?)

※ちょっと修正

[5950] Re^6: 実行用ランタイムファイルが見つかりません? 投稿者:しなちく 投稿日:06/07/23(日) 14:13
> HSP3のインストールフォルダ(hsed3.exe のあるフォルダ)内に
> 半角英数で hsp3 という名前のディレクトリか、
> 同じく hsp3 というファイル名の拡張子無しのファイルがあると
> ランタイム(hsp3.exe)を認識してくれないようです。
ビンゴでした!
私の環境には\hsp30の直下にhsp3というフォルダが確かに存在してまして
、その中にはc言語用のファイル?らしきものが何個かありました。
hspのプログラミングには直接関係なさそうなので、フォルダごと削除して
みたら、ちゃんと動くようになりました。
本当に、本当に、本当に、ありがとうございました。
おかげさまで今はすごく快調です。

[5946] 文字コピー 投稿者:Roll 投稿日:06/07/21(金) 23:33
拡張プラグインを使わずに、
任意の文字列をクリップボードにコピーする方法はありますか?

[5949] Re: 文字コピー 投稿者:Roll 投稿日:06/07/22(土) 14:19
> 拡張プラグインを使わずに、
> 任意の文字列をクリップボードにコピーする方法はありますか?

いろんな方法があるんですね〜。
標準命令だけで考えていましたが。
やはりメッセージやAPIなどが絡んできますね。
とにかく、ありがとうございました。

[5948] Re: 文字コピー 投稿者:t.hamaguti 投稿日:06/07/22(土) 02:06
> 拡張プラグインを使わずに、
> 任意の文字列をクリップボードにコピーする方法はありますか?
こっそりエディットコントロールを作って、テキストを選択して
コピーコマンドを実行という方法はいかがでしょう?

// エディットコントロールをこっそり作成
s = "Hot\nSoup\nProcessor"
pos -100, -100
mesbox s
wEdit = objinfo(stat, 2)

// EM_SETSELでテキストを選択
sendmsg wEdit, $b1, 0, -1
// WM_COPYでクリップボードにテキストをコピー
sendmsg wEdit, $301, 0, 0

stop

[5947] Re: 文字コピー 投稿者:Steep 投稿日:06/07/22(土) 00:14
> 拡張プラグインを使わずに、
> 任意の文字列をクリップボードにコピーする方法はありますか?

Win32 APIを直接呼び出せば可能。
参考程度にclipset互換のモジュール作ってみた。

#module mod_clipboard

#uselib "kernel32.dll"
#cfunc GlobalAlloc "GlobalAlloc" int, int
#func GlobalLock "GlobalLock" int
#func GlobalUnlock "GlobalUnlock" int

#uselib "user32.dll"
#func OpenClipboard "OpenClipboard" int
#func EmptyClipboard "EmptyClipboard"
#func SetClipboardData "SetClipboardData" int, int
#func CloseClipboard "CloseClipboard"

#const GHND $00000042
#const CF_TEXT $00000001

#deffunc clipsetx str data
len = strlen(data)
hglobal = GlobalAlloc(GHND, len+1)
GlobalLock hglobal
dupptr clip, stat, len, vartype("str")
clip = data
GlobalUnlock hglobal

OpenClipboard hwnd
EmptyClipboard
SetClipboardData CF_TEXT, hglobal
CloseClipboard

return 0

#global

clipsetx "Hot Soup Processor"

[5944] 掲示板の名称変更 投稿者:スポポビッチ 投稿日:06/07/21(金) 12:59
HSPTV掲示板も出来て随分経ったのでこっちの掲示板を以前のように
「β掲示板」と名称変更し主にβ版の動作報告などに利用してもらうのはどうだろうか?

そういうような考えでいるので未だこっちで自分のプログラムについて質問している人はHSPTV掲示板を利用してもらいたい。

[5883] (削除) 投稿者:(削除) 投稿日:06/07/11(火) 13:42
(削除されました)

[5884] Re: notegetが上手く使えません 投稿者:kz3 投稿日:06/07/11(火) 14:12 <URL>
> input UserChoi3,XX,XX,3
> noteget CardInfo3,UsersChoi3
> mes CardInfo3
> とした時だけ、どうして1行目の見出しが表示されるのでしょう? 

変数の初期値が0だからです。

[5885] Re^2: notegetが上手く使えません 投稿者:umasika 投稿日:06/07/11(火) 15:00
> > input UserChoi3,XX,XX,3
> > noteget CardInfo3,UsersChoi3
> > mes CardInfo3
> > とした時だけ、どうして1行目の見出しが表示されるのでしょう? 
>
> 変数の初期値が0だからです。


有難うございます。

button "計算",*calc
stop

と言うのを一番最後に置いていたのですが、
noteget XXXXXXの前に持って来たら正常に動きました。
初期値がそのまま入ってたんですね。
それに気付かず他の命令を使った複雑怪奇な処理に着手しようとしていました。 orz

[5893] 今度はcsvstrが動きません 投稿者:umasika 投稿日:06/07/12(水) 16:41
お陰さまで、csvファイルから必要な行を変数に入れる事が出来ました。

CardInfoXX

という変数を定義して中身を見るために

mes CardInfoXX とやると

「001風の谷のウマシカ,攻撃力100,200,500,特徴=頭悪い」

の様な感じで表示されます。


そのまま
csvstr NewHairetsu,CardInfoXX

と言うスクリプトを足しました。こうすると、

NewHairetu(0)=001風の谷のウマシカ
NewHairetu(1)=攻撃力100
NewHairetu(2)=・・・・・・・・・・・・以下略

と同じになると思っています。

それで

mes NewHairetsu(0)

とやって実行すると

001風の谷のウマシカ

と表示される筈ですが、出ません・・。

念のためにsdimの記述を先に置いたりして、色んな事をやってみると
「0」だけ表示されたりします。デバッグウインドウを見ると
NewHairetsuの中身は空っぽの様です。????


もちろん最初の行に
#include "hspda.as"と書いてありますし、スクリプトと同じディレクトリに
hspda.asをコピーしてあります。

後は、そんなに間違える所は無いと思うのですが・・。どーしてでしょう。
トホホ

[5894] Re: 今度はcsvstrが動きません 投稿者:kz3 投稿日:06/07/12(水) 16:48 <URL>
現象が確認できる最小のコードを教えてください。( 環境も )

ちなみにHSPTVの掲示板でもcsvstr絡みのスレッドがあるので、そちらも参考にしてみてください。

[5895] Re^2: 今度はcsvstrが動きません 投稿者:umasika 投稿日:06/07/12(水) 19:41
有難うございました。

HSPTVの掲示板のcsvstr絡みのスレッドを見てみました。
こちらの環境はWin200Pro+HSP3.0です。
物理的なメモリーモジュールは1024M積んでいるので、
動画でも扱わない限り、動作が遅くなったりエラーが出る事はありません。

私の場合csvstr以外の場所の記述でケアレスミスをしている可能性があるので
もう一度短いサンプルコードを作り直して実際に動かしてみました。

何故か今度はちゃんと動いてしまいました。しかし本チャン用のと、
どこが違うかわかりません。同じに作ってあるのに・・。もう一回見直してみます。
でもWin2000でcsvstrはヤバイんでしょうか・・。

とりあえずcsvstrの構文の前に、sdimの宣言が無いと動かない点が
納得できないのですが、こんなもんなんでしょうか?
マニュアルのcsvstrの説明を読んだ限りでは、こんなもの必要ない気もします。
そもそもcsvstrを使った時点で、放っといても文字列型になるのですよね。
デフォルトの文字数を定義して、うんぬんと言うのも、巨大なテキストを扱う時の話では・・。
取り込んでいるcsvファイルは全体で42KBしか有りません。

うーん。再現性の無いトラブルに見舞われているのか、自分が凡ミスを繰り返しているだけなのか
ハッキリしません。この後も安定しないようなら、他の命令で代替えした方がイイのかな・・。

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

#include "hspda.as"



mes "調べたいカードのNo.を半角数字で入力してください。\n

mes "カードNo."
input UserChoiced_1,25,20,3

mes "カードNo."
input UserChoiced_2,25,20,3



;ボタンを表示してユーザーに押して貰う
button "調べる",*Look
stop



*Look



;CardList.csvをCardListに読み込む。
;因みにこのテキストファイルは実際にExcel等で開いたり閉じたりして
;使っているものなので、不正に解釈されそうな記号等は、
;可能な限りコンテンツの文字列から取り除いてあります。

notesel CardList
noteload "CardList.csv",



;ユーザーが選んでいるカードの情報を変数に入れる

noteget CardInfo_1,UserChoiced_1
noteget CardInfo_2,UserChoiced_2




;csvstrのスクリプトの前に、念のためにこれから作る配列変数について宣言。
;これがないと実行した時に「無効な配列」というエラーメッセージが出る。
;でも、マニュアルのcsvstrの項を読んだ限りでは、こんなのいらない気もしています。

sdim CelsOut_1,16,7
sdim CelsOut_2,16,7



;CardInfo_Xのセルを配列変数に入れる

csvstr CelsOut_1,CardInfo_1
csvstr CelsOut_2,CardInfo_2



;ここで動作テスト

;テスト1
mes CardInfo_1
;テスト2
mes CardInfo_2
;ここまでのテスト結果はいつも正常


;この先が何だか時々ヘン。これはチャンと動いていますけど・・。
;テスト3
mes CelsOut_1(0)
;テスト4
mes CelsOut_2(0)


stop

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

[5896] Re^3: 今度はcsvstrが動きません 投稿者:K 投稿日:06/07/12(水) 22:39
>> ;でも、マニュアルのcsvstrの項を読んだ限りでは、こんなのいらない気もしています。

マニュアルから
>p1で指定される配列変数は、必ず文字列型の配列変数である必要があります。
>配列変数に確保されている文字数や配列の限界を越えた部分は無視されます。
>(エラーになったり、データが破壊されることはありません)
実際の動作は文字数は超えても代入されるし、要素が足りない場合は
「,」が無視されてそのまま全部代入される

csvstr命令では確保も拡張もされません

>sdim CelsOut_1,16,7

「001風の谷のウマシカ」
半角で16文字を越えてませんか?
もっと余裕をもった方いいと思う
(でも文字数無視して代入されるからいんだろうか・・・良くないよなぁ・・・)

後、3.0aでやってみたけど何か変・・・
5895のやつで
sdim CelsOut_2,16,10 の次に
mes CelsOut_1 を追加すると、15文字までしか取り出せない
(CelsOut_2の方も何故か14文字に・・・)

で、色々やった結果 buttonが押された後に wait 10(awaitではない)ぐらい入れて
csvstr を使った後に objsel で入力フォーカスを動かす(なぜかは不明)

HSPobjと相性が悪い感じ・・・(環境依存かもしれないけど)

csvstr CelsOut_1,CardInfo_1
objsel
csvstr CelsOut_2,CardInfo_2

ってやると下のが機能しない(フォーカス移動はstop前でいい)

[5898] Re^4: 今度はcsvstrが動きません 投稿者:K 投稿日:06/07/12(水) 23:33
> > で、色々やった結果 buttonが押された後に wait 10(awaitではない)ぐらい入れて
> > csvstr を使った後に objsel で入力フォーカスを動かす(なぜかは不明)

これは、2回以降の "調べる" を押した時に
csvstr が機能しなくなるのを、防げただけなので役に立つかは
分かりません。

[5899] すごい勘違いをしていたかも知れません 投稿者:umasika 投稿日:06/07/13(木) 01:45
有難うございました。


>配列変数に確保されている文字数や配列の限界
というのは自分で定義するものなのですね。
HSPの仕様上の限界の事だろうと思っていましたが、
完璧な勘違いでした。sdimやdimはそのためにあるのですね。

ただsdim宣言をした上でも、
>越えた分は無視されます
以上の事が起きているので、混乱していましたが、とにかく
「切りの良い所で16バイトにしていおいて後で数えよう」という発想はヤメます。


あ、もしかしたらsdimの方の説明にある「自動拡張」というのは、
配列全体の最初から最後までの文字量の事で、個別の変数の量とは無関係なのかな?。

あ、あ、sdimで定義するのは個別の変数(セル)の長さではなく、データレコード全体の事なんだ。
だからマニュアルには「sdim a,5000」なんて豪華な予約数字が入ってるんですよ・・きっと。

自動拡張できると言ってもデータレコード全体で、デフォルトが16バイトなんて、ケチな指定をしたから、不安定になったんですよ。きっと・・。

あれ?じゃあ、csvstrの説明にある
>配列変数に確保されている文字数や配列の限界
っていうのも、一つ一つの変数じゃなくて、配列に含まれる全ての変数を足したモノの話? ですか?
じゃあ「越えた分が無視される」というのは、配列に含まれる変数の個数の事とか?

Kさんが試して下さった14文字や15文字で切れてしまう現象の、説明にはならないけど、これはやっぱり「データレコード全体で16バイト」
という極端にケチな指定のせい。かも? かな?

そんな気がする。これでダメだったら、csvnoteの方も試してみます。


ところで、ツール系のサンプルコードって、あんまり無いですね。
画像系のは多いけど・・。一つ一つの説明は読んでも、組合せ方が
イマイチわからない・・。PerlやC++に詳しい人から見たら、当たり前の事なのかな??

[5900] Re: すごい勘違いをしていたかも知れません 投稿者:naznyark 投稿日:06/07/13(木) 02:11
> 「切りの良い所で16バイトにしていおいて後で数えよう」という発想はヤメます。

> あ、もしかしたらsdimの方の説明にある「自動拡張」というのは、
> 配列全体の最初から最後までの文字量の事で、個別の変数の量とは無関係なのかな?。
>
> あ、あ、sdimで定義するのは個別の変数(セル)の長さではなく、データレコード全体の事なんだ。
> だからマニュアルには「sdim a,5000」なんて豪華な予約数字が入ってるんですよ・・きっと。
>

sdim でのデフォルト文字数は配列の場合は要素一つあたりの数値です。
(ちなみに最低値は 64 でそれ以下の数値を指定しても64バイト確保されます。)
(例)
sdim test, 128, 10 とすると
test(0) (128文字) , test(1) (128文字) , ... , test(9) (128文字)
と合計 128 * 10 = 1280 バイト分のバッファが確保されます。
(ただしメモリの中ではそれぞれの要素に対するバッファは連続していません)

そして自動拡張は要素一つごとに行われます。
(上の例に続いて)
test(1) = (256文字の文字列) とすると
デフォルト値より長い文字列ですので test(1) のバッファのみ
自動拡張されます。(他の要素のバッファサイズには影響ありません。)


それと私の環境でも csvstr は動作が安定していないようです。
HSPTVの掲示板の記事などを参考にして csvstr を使わずに処理したほうが良さそうです。

#module
#deffunc df_csvstr array _p1, var _p2
_ai=0
_si=0
repeat
getstr _p1(_ai), _p2, _si, ','
if (strsize) {
_ai++
_si+=strsize
} else {
break
}
loop
return
#global

[5901] Re^2: すごい勘違いをしていたかも知れません 投稿者:umasika 投稿日:06/07/13(木) 05:54
あい、わかりました。csvstrはあきらめます。ありがとうございました。
諸先輩方が相次いでヤラているものに関わって、時間を無駄にしても仕方無いですね。他の方法を考えます。
仮に今動いても、環境や条件が変わると、どうなるかわからないし、少なくとも次期バージョンの正式リリースまで、こいつは封印ですね。

[5905] Re^3: すごい勘違いをしていたかも知れません 投稿者:GENKI 投稿日:06/07/13(木) 19:37
> あい、わかりました。csvstrはあきらめます。ありがとうございました。

 csvstrが不安定なら自作するまでです。それほど難しいことはやってませんし。
せっかくnaznyarkさんが自作csvstrのスクリを貼り付けてくれてるんでそれを使ってもよいのでは。

[5912] ご安心を 投稿者:風の谷のumasika 投稿日:06/07/14(金) 19:35
> せっかくnaznyarkさんが自作csvstrのスクリを貼り付けてくれてるんでそれを使ってもよいのでは。

あ。そういう意味ですか。やっと分かりました。今、マニュアルの「モジュール機能ガイド」の所を読んでいます。(爆)
お二人とも有難うございます。

「モジュール機能ガイド(中上級者向け)」の冒頭には「初心者がこんな所を読んでも、どーせわからんからヤメテおけ」
といった様な事が、婉曲な表現で書かれていますが、嫌がらせに屈する事無く、読み進んでいます。
最初から付いているcsvstrは諦めましたが、いずれにしても制作自体は断念していないのでご安心を。

[5913] Re: ご安心を 投稿者:GENKI 投稿日:06/07/14(金) 21:28

> いずれにしても制作自体は断念していないのでご安心を。

 安心しましたー。
これ1つのためにソフト作成を諦めるのはもったいないーっと思ってたので。
作成がんばってください。


 ちなみにモジュールは自分で作るのはちょっと大変ですが、
使うだけに関しては簡単です。
スクリプトの始めにモジュールを書いて、その後自分のプログラム本体を書くだけ。
モジュールで作った命令は普通のHSPの命令と同じに使えます。

たとえば、naznyarkさんのサンプルだとそのままcsvstrと同じ文法で使えます。
;--------------------------------------------
;##########################
;ここからモジュール
#module
#deffunc df_csvstr array _p1, var _p2
_ai=0
_si=0
repeat
getstr _p1(_ai), _p2, _si, ','
if (strsize) {
_ai++
_si+=strsize
} else {
break
}
loop
return
#global
;モジュールここまで
;##########################

;##########################
;ここからプログラム本文
sdim aa,256
sdim bb,256,10

aa = "123,456,789,12564"
df_csvstr bb,aa ;モジュールで作った命令を使う
repeat 4
mes bb(cnt)
loop
stop

;--------------------------------------------
モジュールで作った命令の使い方はたいてい作者が書いたマニュアルに載ってる。



ちなみにこんなのもUPしたのでよかったらどうぞ。
http://hspwiki.nm.land.to/?String%2FCSV%B7%C1%BC%B0%A5%C7%A1%BC%A5%BF%A4%CE%C6%C9%A4%DF%B9%FE%A4%DF

[5926] ()の使い方について 投稿者:風の谷のウマシカ 投稿日:06/07/18(火) 23:54
お陰さまで制作の方はボチボチ進んでいます。
csvstrの問題はnaznyarkさんのモジュールを使わせて戴いて上手く
クリアできました。とりあえず私のケースでは、操作対象のtxtファイルの中身が全部把握できているので、構文がやさしい方を使わせて戴きました。
他の所でも色々と頭を抱えているので、問題の切り分けに時間がかかり、
ご報告が遅れて失礼しました。

GENKIさんがwikiにアップされたモジュールも拝見しました。
表計算ソフトの関数や演算は、一般的なアプリケーションのユーザーに
とって、最も身近なCUIの一つだと思います。
EXCELから入って言語に興味を持つ人は、csv命令が不安定だと、
入門してイキナリ地雷を踏む羽目になるので、こういったモジュールが
wikiで公開される意味は、とても大きいと思います。

折角なので、ただ使わせて戴くだけでなく、中身も理解して
おきたいのですが、一気には無理ぽいですね。とりあえず資料が
見つけられなくて困った所を、どなたか教えて戴けないでしょうか。



;;;;;;;;質問( )の使い方について;;;;;;;


naznyarkさんのモジュールに

if (strsize) {

というのがありますよね。

if strsize!0 {

と言う意味に理解していますが、合っていますか?


それと、こういう( )の使い方に関する資料って、どこを見れば
紹介されているでしょう?
( )は演算の優先順位を指定する時に使われたり、配列の要素を
指定する時にも使われたりするので、私の場合、色々な
サンプルスクリプトを見ている時に、躓きの元になりやすいです。
上の様な使い方って、添付マニュアルには載っていませんよね?

[5927] Re: ()の使い方について 投稿者:GENKI 投稿日:06/07/19(水) 01:14
> GENKIさんがwikiにアップされたモジュールも拝見しました。

必要に応じてってことで。



> naznyarkさんのモジュールに
> if (strsize) {
> というのがありますよね。
> if strsize!0 {
> と言う意味に理解していますが、合っていますか?

 HSPのifの条件文は真は0以外の値、偽りは0としているようです。
なので上のほうの条件文の書き方でも特に問題ありません。
ただ、なれないうちは明確なスクリプトを書いたほうがいいと思うので
下側の書き方をしたほうがいいでしょうね。


 カッコについていえば

> if (strsize) {


if strsize {
でもokです。
条件式内でのカッコは数学のカッコと同じような扱いです。なのでこの場合なくてもいい。
カッコをつけてるのはカッコの付け忘れ防止のための習慣だと思います。


> それと、こういう( )の使い方に関する資料って、どこを見れば
> 紹介されているでしょう?

 カッコの扱いはCなどのほかの言語とほぼ同じです。
Excelも同じですね。
もっと身近なところでいえば数学と同じです。
f(x,y) = a*x + b*y   ;関数のイメージ
x = a * (b + c)     ;計算や条件式でのカッコ
配列で括弧を使うときもだいたい似たようなものです。
数学苦手な人や習ってない人もおおぜいいるのでこの説明もどうかなと思いますが…まあこんなとこです。
ただ数学と違って中カッコ({〜})や大カッコ([〜])は使用しません。


 ちなみに括弧の使い方は、「プログラミングマニュアル1・基本仕様ガイド (hspprog.htm) 」にも載ってます。
それと、HSP開発Wikiの資料です。
http://hspwiki.nm.land.to/?%BF%BF%B5%B6%C3%CD%A5%DE%A5%B9%A5%BF%A1%BC
http://hspwiki.nm.land.to/?%BE%AE%A5%EF%A5%B6%2F%A5%D3%A5%C3%A5%C8%C1%E0%BA%EE#y480a09f


あ、質問内容変えるなら新規がよかったかも。

[5929] お礼 投稿者:風の谷のウマシカ 投稿日:06/07/19(水) 18:27
有難うございました。
0はFALSEで、0以外なら強引に(と自分には思える)TRUE扱いなんですね。

(  )の問題じゃなくて、主に条件文の問題だったのか・・。


>質問内容変えるなら新規がよかったかも。

そうですね。(  )がわからないのか、条件文がわからないのか、
何がわからないか、わからない状態だとツリーの適切な立て方も迷ったりして・・。悲
時々「質問が曖昧で、何がわからないか、わからないから、どう答えたら良いかわからない」
というスレを見かけますが、そういう質問しちゃう人の、気持はわかる。
(ちょっと日本語の構文が高度(?)ですか、ついて来れてますか? (汗)
(あ、カッコのネストがヘン。これもエラーになりそう・・。)

適切な質問の仕方を考える事は、問題の捉え方を考える事にもなるので、がんばります。
また宜しくお願いします。

[5938] Re: お礼 投稿者:naznyark 投稿日:06/07/20(木) 01:02
> if (strsize) {
> というのがありますよね。
> if strsize!0 {
> と言う意味に理解していますが、合っていますか?

GENKIさんの説明もありましたし、疑問は解決したようですが私なりに説明しておきます。(長いです)


まず次の2つの記述の違いについて説明します。
・if strsize ; (a)
・if strsize!0 ; (b)

(a) (b) の違いを知るためには次の事柄を理解してください。

1 if 命令の動作
if 命令の構文は次のようなものです
if 条件式
条件式の値が非 0 ( 0 以外)のときそれ以降の命令が実行されます。

2 式の値
式が変数や定数だけのときはその内容の値そのものが式の値に、
式が数式の場合は計算をした結果の答えの値が式の値になります。

3 比較演算子( ! = < <= > >= )
比較演算子は四則演算子( + - * / )などと同様に
2つの値の間で計算を行って答えの値を求めるものです。
( ! 演算子は2つの値が等しければ 0、等しくなければ非 0 (値が数値の場合は 1)
が答えの値になる計算を行う演算子です。)

以上の 1 2 3 を踏まえて (a) (b) は内部的には次のように処理されています。

・if strsize ; (a)
strsize の内容の値を調べて値が非 0 のとき以降の命令を実行します。

・if strsize!0 ; (b)
まず strsize!0 という計算を行います。
その計算の結果の値を調べて値が非 0 のとき以降の命令を実行します。

結果的には同じ動作になりますが (a) のほうが計算を行わない分処理が早くなります。
(理論上の話で実際のところはほとんど差はありません。)


続いて次の2つの記述の違いについて説明します。
ただしこの違いは私の個人的な考え方に基づく記述上の違いであって
プログラムの動作としては全く同じものということになります。
・if strsize ; (a)
・if (strsize) ; (a')

4 ()
()は数式内での計算順序を指定するものですが計算順序に影響しないところに
余分につけてもプログラムは問題なく動作します。
(例) 次の記述は全て同じ動作になります。
a=5+10 a=(5+10) a=(5)+(10) a=((5)+(10))
もっともわざわざ a=(((((5+10))))) のような記述をして()の数があわないことによる
エラーを出しやすくするのはバカバカしいので普通はやらないことです。

(以降は私の個人的な考え方です)
4 の説明を読むとプログラムの動作的には (a') のような記述をする意味が
無いように思うかもしれませんが意味はあります。
それはプログラムの読み手に向けた意味です。

私はHSPプログラムを記述するうえで自分の私的な決まりとして
・if の条件式が比較演算子を含まないときは条件式を()で囲む
というようにしています(もっともやっていないときも多いですが・・・)。

こうした決まりを設けておくとデバッグなどで後からプログラムを読み返したときに
その意味するところがわかりやすくなります。

(例 1) 上記の決まりなしで記述したプログラム
if a ; a の値が 0 か非 0 かを判断している
if b=10 ; b の値が 10 かどうかを判断している
if c-100 ; c-100 の値が 0 か非 0 かを判断している?・・・、
いや、c=100 のタイプミスなのでは?・・・。

(例 2) 上記の決まりに基づいて記述したプログラム
if (a) ; a の値が 0 か非 0 かを判断している
if b=10 ; b の値が 10 かどうかを判断している
if c-100 ; c=100 のタイプミスの可能性が高い
if (c-100) ; c-100 の値が 0 か非 0 かを判断している

こうした考え方をもとにして私は (a') のような記述をしています。
(もっともこうした私的な決まりに基づく記述は他人にとっては
かえって読みにくくなることがあるので多用すべきものではありません。)

[5943] Re^2: お礼 投稿者:風の谷のウマシカ 投稿日:06/07/20(木) 18:30
ありがとうございます。

そう言えば、コンピューターの基本は
電流0・・・・・OFF
電流あり・・・・ON(少しくらい波形が乱れて電流の値が増減してもONはON)
ですね。こっちの決まりの方がプリミティブなのかも知れませんね。

表計算やデータベースのアプリケーションで比較演算子の無い条件文を入れると
エラーになりますが、あっちはTRUEかFALSEの2値しか出て来ませんね。

(結論)
同じifでも「ONかOFFかを問うif」と「TRUEかFALSEかを問うif」は違う。
「HSPのifはONかOFFを問うif」

と考えたらスッキリ爽快ですね。

[5911] 最初の質問の再掲(誤って消してしまいました 投稿者:風の谷のumasika 投稿日:06/07/14(金) 19:33
notegetが上手く使えません umasika


はじめまして。プログラミングもHSPも初心者です。3日ほど前からいじり始めています。
最初のうち、私は絵心も無いので勉強するならPerlでいいかな? と思っていましたが、添付のオンラインマニュアルの親切さはHSPがピカイチですね。
素晴らしいです。独学で進むなら断然HSPですね。

それで今、あるカードゲームのユーティリティを作り始めています。と言っても、ゲーム本体のSaveデータをイジル用なものは合法・違法を問わず
作れないので、自分で集めたカード情報のcsv形式のデータベースから、カードの能力を調べたり集計できる様にする簡単なものです。既にカードの
データベースがあるので、notepad命令やcsv命令を使えば、すぐできると思っていましたができません。なんででしょう・・。ソースコードは以下の
ような感じです。


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;ユーザーが調べたいカードのゲーム内におけるID番号を入力してもらう。

mes "調べたいカードの番号を半角数字で入力してください。"

input UserChoi1,XX,XX,3
input UserChoi2,XX,XX,3
input UserChoi3,XX,XX,3

;この調子でテキストボックスを約20個程並べました。


;自分で作ったCardList.txtをCardListに読み込む

notesel CardList
noteload "CardList.txt",

;CardList.txtはそれぞれの列がコンマ区切りになっています。一行目は見出し行なので無視。2行目以下はゲーム内のID番号順にカード情報をソート済みなので、各行のインデックスとカードの正式IDが一致するようにしてあります。

;ユーザーが選んだカードの情報を読み込む

noteget CardInfo1,UsersChoi1
noteget CardInfo2,UsersChoi2
noteget CardInfo3,UsersChoi3

;ユーザーがテキストボックスに入れた数字を、そのままカードリストのインデックスに使おうと思いました。そのためテキストボックスの数と同じだけ、noteget命令を並べました。


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


ここからcsv命令を使って「CardInfoXXX」の各セル(Excel風に言う所の)を配列にする計画です。しかし、ここで問題発生。「CardInfoXXX」に
ちゃんと情報が入っている事を確かめる為に、

mes CardInfo3

とやっても4行目の内容は表示されず、一行目の見出し行が表示されてしまいます。

notegetの記述を疑って


mes CardInfo3

とやりますと、ちゃんと4行目が表示されました。もしかしたらnotegetの2番目のパラメーターに変数は使えない? いやいや色々なサンプルコードを見ると、
よくa=idxなんて変数をインデックスに使っていますよね。

ではテキストボックスから拾ってnotegetのパラメーターに使っているUsersChoiXに問題があるかと思い、下記の様に試しました。

mes UserChoi1+UserChoi2

インデックスなんて足算して、どうするんだというツッコミは無しで、とにかくこれでテキストボックスに入力した値の足算ができる事がわかりました。
つまりUserChoi1もUserChoi2も、ちゃんと値が入っていて、足算ができるくらいだから、数値型になっていると思います。

では

noteget CardInfo3,UsersChoi3
mes CardInfo3

とした時だけ、どうして1行目の見出しが表示されるのでしょう? どなたか、教えてもらえないでしょうか?

[5940] 127.0.0.1 投稿者:HSP半年の人 投稿日:06/07/20(木) 15:59
いま、HSPsock命令について勉強しているところ(サンプルで)なのですが、接続先のIPアドレスを127.0.0.1から、別の物に変えると
エラーが出ます。この127.0.0.1というものに何か意味があるのですか?

[5941] Re: 127.0.0.1 投稿者:sys 投稿日:06/07/20(木) 17:37
> いま、HSPsock命令について勉強しているところ(サンプルで)なのですが、接続先のIPアドレスを127.0.0.1から、別の物に変えると
> エラーが出ます。この127.0.0.1というものに何か意味があるのですか?

http://e-words.jp/w/E383ABE383BCE38397E38390E38383E382AFE382A2E38389E383ACE382B9.html

[5942] ありがとうございました。 投稿者:HSP半年の人 投稿日:06/07/20(木) 17:51
ありがとうございました!!!わかりました。

[5930] xnoteselもヘン? 投稿者:風の谷のウマシカ 投稿日:06/07/19(水) 18:30
複数のインプットボックスを並べ、ユーザーに必要事項を入力してもらおうとしています。
インプットボックス間で、ユーザーの入力内容に重複があったら、チェックして警告メッセージを出しすたるに、
xnoteselやxnoteaddを利用する積りですが、この2つが上手く動きません。使い方が間違っているのでしょうか?

ちなみに環境はWindows2000+HSP3.0aで、hspda.asはカレントディレクトリにコピー済み。
別のツリー「No.5883」で同じhspdaに含まれるcsvstrが上手く動かなくて、お騒がせしたのと同じ環境です。



直接関係あるところだけサンプルにします。こんな感じで使っています。

;;;;;;;;;;;;;;;;;;;;;サンプル;;;;;;;;;;;;;;;;;;;;
#include "hspda.as"

a="りんご"
b="みかん"
c="みかん"
d="いちご"

xnotesel FlootList

xnoteadd a
xnoteadd b
xnoteadd c
xnoteadd d

mes notemax
stop
;;;;;;;;;;;;;;;;;;;;;ここまで;;;;;;;;;;;;;;;;;;;;;

これで「3」と表示されたら成功ですよね。
書き方は合っていると思うんですが・・。noteselとnoteaddに変えたら「4」だったから・・。


でも上記のスクリブトを実行すると"xnoteadd a"のところでシステムエラーが出て先へ進みません。
デバッグウインドウを見ると、変数FlootListが「型:int」「内容:-243079038」になっています。何コレ?

[5931] Re: xnoteselもヘン? 投稿者:osakana 投稿日:06/07/19(水) 19:08
> xnoteselやxnoteaddを利用する積りですが、この2つが上手く動きません。

> ;;;;;;;;;;;;;;;;;;;;;サンプル;;;;;;;;;;;;;;;;;;;;
> #include "hspda.as"
>
> a="りんご"
> b="みかん"
> c="みかん"
> d="いちご"
>
> xnotesel FlootList
>
> xnoteadd a
> xnoteadd b
> xnoteadd c
> xnoteadd d
>
> mes notemax
> stop

//--------------------
#include "hspda.as"

a="りんご"
b="みかん"
c="みかん"
d="いちご"

FlootList=""
xnotesel FlootList,1000

xnoteadd a
xnoteadd b
xnoteadd c
xnoteadd d

notesel FlootList
mes notemax
noteunsel

stop
//--------------------

FlootList変数をあらかじめ文字列方にしたら動きました。
notemax は notesel 専用だと思ったので、
いったん notesel に指定してみました。

[5932] 動きました 投稿者:風の谷のウマシカ 投稿日:06/07/19(水) 19:35
本当だ。動きました。

>FlootList="" こ、こんな技がー!
 この行を外しただけで動かなくなりますね。

>xnotesel FlootList,1000
 の「1000」を外してもダメですね。「12文字しかないのに」とか
 言ってたらダメなんでしょうね。

>notesel FlootList
これも仰る通りですね。


これが上級者の技か・・。
マニュアルだけ何度も読み返して「なんでintなんだよう!」と
泣き叫んでいましたが、それじゃダメなんですね。感動しました。
有難うございました。

[5935] Re: 動きました 投稿者:osakana 投稿日:06/07/19(水) 19:57
> >xnotesel FlootList,1000 
>  の「1000」を外してもダメですね。「12文字しかないのに」とか
>  言ってたらダメなんでしょうね。
あれ?
気分的に1000にしただけなので、この文字数なら外しても動きますよ。
あと全角文字は2バイトなので、正確には24文字分ありますです。
(NULLも数えるんだっけかな?)

[5936] Re^2: 動きました 投稿者:風の谷のウマシカ 投稿日:06/07/19(水) 20:03
今度は「1000バイト」を消しても動きました。
さっき、動かなかったのは操作ミス? もう再現できません。
でも謎の「int」が「FlootList=""」で解決するくらいですから、
本チャン用はいずれにしても多めに取っておいた方が良さそうですね。
2バイト文字の件は了解しました。有難うございました。

[5919] こんなことできますか? 投稿者:HSP半年の人 投稿日:06/07/17(月) 15:56
HSPのsock命令でオンラインゲームを作ることはできますか?
できるとしたら、どんなことから始めればよいですか。
できるだけ簡単にお願いします。

[5925] Re: こんなことできますか? 投稿者:Steep 投稿日:06/07/18(火) 20:19
> HSPのsock命令でオンラインゲームを作ることはできますか?

作れます。

> できるとしたら、どんなことから始めればよいですか。
> できるだけ簡単にお願いします。

hspsockの命令とはどういうものかを勉強することから始めて下さい。

[5928] Re^2: こんなことできますか? 投稿者:HSP半年の人 投稿日:06/07/19(水) 06:42
ありがとうございました。

[5923] 変数宣言 投稿者:tachi 投稿日:06/07/18(火) 19:57
HSPを勉強中です。
HSPには、VBのような「Option Explicit」の
ようなものはないのでしょうか?
プログラミングをしていてエラーになり何でエラーなのかが
見つけにくいです。
皆さんは、エラーにならないように何か工夫をされてますか?

[5924] Re: 変数宣言 投稿者:Steep 投稿日:06/07/18(火) 20:14
> HSPを勉強中です。
> HSPには、VBのような「Option Explicit」の
> ようなものはないのでしょうか?
> プログラミングをしていてエラーになり何でエラーなのかが
> 見つけにくいです。

ありません。スペルミスでも問答無用で変数として扱われます。

> 皆さんは、エラーにならないように何か工夫をされてますか?

私は工夫というようなことは特にしていません。
変数が怪しいなと思ったらデバッグウィンドウを表示させて確認しています。

[5902] 教えてください、、、