HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2022
0121
ABConkeyについて7解決


ABC

リンク

2022/1/21(Fri) 14:49:03|NO.95131

onkey命令について教えて下さい。
昔HSP3.5で作ったプログラムがHSP3.6ではエラー43となりました。
再現するスクリプトは下記になります。起動後適当なキーを2回押すとエラーします。

onkey gosubのあとreturnしていなかったり色々まずいことは
今ならわかるのですが、
なぜHSP3.6ではエラーとなりHSP3.5では動いたのでしょうか?
エラー43とはなにものでしょうか?

また、[onkey *j2]を[onkey gosub *j2]にすると、
エラーは起きなくなります。
ですがキーを押し続けてsubrevが増えすぎたてもエラーとなりません。
これも原因が知りたいです。


*start mes "start" onkey gosub *j1 stop *j1 onkey 0 mes "j1" onkey *j2 stop *j2 onkey 0 mes "j2" goto *start stop



この記事に返信する


zrs90(5さい)

リンク

2022/1/21(Fri) 17:40:59|NO.95133

スマホ投稿+他力本願で申し訳ないですが...

3.5 → 3.6 になって、何らかの処理が変わったと
思われます。

エラー43 (※本当に出た。) は、エラーメッセージ自体
マニュアルに、表記がないので、なんとも言えません。

最期の質問の修正したスクリプトですが
ウチの場合(Windows7)
goto *start の直前に、title ""+sublev
を入れ実行、510辺りで、上がらなくなったので
キーを何回か離したり、押していたら
一瞬、別のエラーを出して
プログラム自体が落ちました。

参考になりそうな過去版を上げておきます。
(掲示板下の検索で、onkey で検索した一部です。)

http://hsp.tv/play/pforum.php?mode=pastwch&num=40600

http://hsp.tv/play/pforum.php?mode=pastwch&num=82468

http://hsp.tv/play/pforum.php?mode=all&num=93661



沢渡

リンク

2022/1/21(Fri) 19:00:12|NO.95134

OpenHSPのエラーコード定数の定義部分を見ても、
43に相当する部分だけぽっかり空欄になっていますね。
https://github.com/onitama/OpenHSP/blob/eddc647733e82657757055b66fd8c2dbf17898b8/src/hsp3/hsp3debug.h
そういえば3.6開発途中で「今後は割り込みサブルーチンの中では
stopやwaitやawait等を禁止命令にする」というアナウンスがあって、
すぐに取りやめになっていたのを思い出しましたが、
それの絡みで色々弄った結果仕様が変わったのでしょうか?

>また、[onkey *j2]を[onkey gosub *j2]にすると、
>エラーは起きなくなります。
>ですがキーを押し続けてsubrevが増えすぎたてもエラーとなりません。
>これも原因が知りたいです。
試したところ、subrevが1000を超えたあたりで、エラー9(ネストが深すぎます)ではなく
エラー29(スタック領域のオーバーフロー)が発生しました。
これも内部で仕様が変わり、システムに不具合が発生するまで
サブルーチンネストが続けられるようになった…?

後者については「延々とreturnもなくgosubを続ける」という不味いことを
していなければ出くわさない現象ですし、
前者についても「goto系の割り込みの際にはループやサブルーチンのネストが
全てリセットされる」という仕様との絡みから「やっては不味い」コードですから、
これがエラーになるのも(納得しがたいとはいえ)正しい挙動のように思いますので、
あまり問題は無いのではないかなと思います。



zrs90(5さい)

リンク

2022/1/21(Fri) 19:36:45|NO.95136

沢渡さん へ
詳細な解説に、openhspまで調べて頂き
ありがとうございます。

スレッド主さんの、一番上の質問の補足ですが
3.6の、history.txt を見たところ
3.6β2〜3 辺りの不具合修正/エラーチェック追加
...によって、3.6では、(ちゃんと)エラーになる様に
なった(?)ようです。



ABC

リンク

2022/1/24(Mon) 10:18:34|NO.95172

返信遅れてすみません。

zrs90(5さい)さん
沢渡さん
お二人とも回答ありがとうございました。
エラー43はサブルーチンの使い方が悪いという意味で捉えようと思います。
「延々とreturnもなくgosubを続ける」ことも起こさないように注意して
作成しくつもりですが、なんらかのエラーとなって欲しいところです。



ABC

リンク

2022/1/24(Mon) 10:19:10|NO.95173

解決とします。



おにたま(管理人)

リンク

2022/4/22(Fri) 21:35:04|NO.96095

返信が遅くなり申し訳ありません。
エラー43については、メッセージが本来出ない想定のもので、
これが出るのはHSP側の不具合となります。
onkey gosubやbutton gosubでサブルーチンジャンプした先(コールバックルーチン)内から、
さらにonkey gotoやbutton gotoが発生した際に出ていたのですが、
HSP3.7β2ではエラーが出ないように修正される予定です。

ただ、サブルーチンジャンプした先で割り込みジャンプ系の処理が発生した場合は、
サブルーチンのスタックがリセットされますので良い構造ではありません。
そもそもサブルーチンジャンプの先ではreturnで戻ることが望ましいです。



zrs90(5さい)

リンク

2022/4/22(Fri) 22:04:05|NO.96098

別スレッドの エラー43 の件も
含めてになりますが、おにたま さん
ご返信、ありがとうございました。

最近、別スレッドで エラー43 を質問された
qwertyさんご自身が、最近も掲示板を利用
されてますので、こちらだけにして置きます。

ABC さんが、見ておられると良いのですが...



ONION software Copyright 1997-2023(c) All rights reserved.