トピック
しんいち stgf1080

スマイルボタンで起動した時のプロジェクト

BIGしか持ってなくて恐縮ですがおじゃまします。 スマイルボタンで起動した時のカレントプロジェクトについて確認させて下さい。 BIGではそのプログラムを置いてるプロジェクトがカレントプロジェクトになるようですが、3号でも同様でしょうか? 同様の場合、それは以前のバージョンから変わらずでしょうか? 背景: お絵かきツール(SBGED)を改造して、新たに作った"SYS_S1"プロジェクトに置いて使ってるのですが、絵のセーブ場所が必ず"SYS_S1"になってしまうのが不便だと思ってます。因みに[SYS]のツールだと作業中のプロジェクトにセーブされます。 ご教授よろしくお願いします。
4そうだね
未プレイ
返信[1]
親投稿
MIKI ifconfig
>3号でも同様でしょうか? 同様です >以前のバージョンから変わらずでしょうか? 少なくとも 3.3.2 はそうでしたね。 おちゃめさんがどのスロットから起動されたかを判定するコードを公開しています。 https://miiverse.nintendo.net/posts/AYIHAAAEAACHVRTs1c4kFA これで 4 が返ってきたらスマイルツール経由です。 その場合 files "project/file" などでよそのプロジェクト内にアクセスできるので好きな project を選べばいいでしょう。 なおプロジェクト一覧は files "//" で取得できます。
6そうだね
プレイ済み
返信[2]
親投稿
自分もそれで困ってたからMIKIさんのを見直せるようにこめのこ+共感()
0そうだね
プレイ済み
返信[3]
親投稿
MIKI ifconfig
私> files "project/file" などで load とか save でも使えるって意味でした。 仕様的には、たとえばスマイルツールに登録したプログラムに load "grp0:foo" とか書いてある場合に期待通り動くためには、カレントプロジェクトはそのプログラムのある場所でなければならないので、妥当な仕様だと思います。 問題のひとつは、スマイルツールを起動する直前のプロジェクトがどこかわからないことですよね。 テキスト画面の一番下に表示されている [プロジェクト]OK がそれである蓋然性が高いので、それを chkchr() で拾ってくるという意見がありました。(URL失念)
2そうだね
プレイ済み
返信[4]
親投稿
しんいち stgf1080
#ためになる情報盛りだくさんで鼻血出そう^^; #さすが3号コミュ。SLOT4。まるで裏技^^; 前からこういう仕様だったんですねorz 改善の見込み薄だなぁ。互換性問題出るだろうし。 #私は初期仕様検討の思慮不足だと考えてます。 例えばプロジェクト"PJ1"のプログラム"PR1"(内容:SAVE "TXT:T1")をSLOT1にロードして、プロジェクト"PJ2"でRUN 1すると、当然"PJ2"にT1セーブされますよね。それがSLOT4だとしても"PJ1"にセーブされていい訳がない。と考えます。 #これを私は妥当とは言いたくない。 #言いたくないんだけどなぁ。今更かぁ。。。 多分今までの歴史?の中でも議論あったんでしょうね。 まぁ、FILES "//"とかで何とかやりくりしようと思います(CHKCHRは何だか歯がゆいね^^;)。
1そうだね
未プレイ
返信[5]
親投稿
MIKI ifconfig
>仕様検討の思慮不足だと考えてます なるほど。 ではしんいちさんの思慮深い仕様をご提示いただけますか?
0そうだね
プレイ済み
返信[6]
親投稿
しんいち stgf1080
#おっとプレッシャー^^; 私が今の仕様を知る前に勝手に思い込んでいたのは、カレントプロジェクトは常にDirectモードで見えている、作業中のプロジェクトがカレント。です。 仮にスマイルボタンで起動したプログラムにLOAD "GRP4:DEFSP.GRP"とあって、そのファイルの無いプロジェクトで実行してファイル無いよエラーになったとしても、それはファイルの無いプロジェクトで実行した私、もしくはそのプログラムにプロジェクト名を含めて記述していなかった私が悪い。と考えます。 「いやいやそんなんじゃこんなとき困るじゃん」とかあればご指摘頂きたいところです。
0そうだね
未プレイ
返信[7]
親投稿
どの仕様が良いかはともかくとしてプロジェクトの仕組みはわかりにくさを感じる部分はありますよね〜。 僕もツールを作ってますが、たしかにそのツールをスマイルボタンから起動した場合、そのツールで作ったファイルがツールの置いてあるプロジェクトになるのは不便に感じる事がありますね。 ただゲームのランチャーなどの場合は、カレントが切り替わった方がいい部分はあるんでしょうし、どっちもどっちな感じもあったり…。 ただMIKIさんも言われているようにスマイルツールを起動した直前のプロジェクトがCHKCHRを使うなどの裏技のような事をしないと得られないのは不便です。裏技だと100%確実ともいえない部分が残るので、それも気になりますしね…。 他にもスマイルツールからならカレントを自由に切り替える事が出来るとか、そういう機能があれば色々とやりやすい面もあるのかなと思いますね。
2そうだね
プレイ済み
返信[8]
親投稿
しんいち stgf1080
思慮不足ってのはSmileBoomさんに対して失礼だったかも知れませんね。よくよく考えた末の今の仕様かもしれないし。 #むしろ何も考えず「作業中のプロジェクトが #常にカレント」って思ってた私、浅はかか^^; あぁ~気になるなぁ、今の仕様になった理由。
0そうだね
未プレイ
返信[9]
親投稿
マギー M191246
SYSのプログラムを改造されているから そう感じられているのかも知れませんけど プチコン側からすると、スマイルボタンから 呼び出すプログラムは、どのプログラムも 区別がないので MIKIさんが、おっしゃられているとおり むしろ自然なことではないでしょうか。 ツールにからめて言うとしたら 例えば、 そのツールにタイトルロゴがあったとして その画像をGRPで保存しているなら、 その読み込み先は、そのツールが はいっているプロジェクトである方が 都合がいい気がします。
0そうだね
プレイ済み
返信[10]
親投稿
ΖΕΧ ZEX256
SLOTによって動作を変えるような仕様は私も大変不便に感じております。 この様な仕様に変更されたのは2年くらい前だったと記憶しています。 その時は、社長さんがMiiverseでこの仕様で良いか皆に訊いていたのですが、その当時ファイルアクセスの制限に詳しい人は殆どおらず(質問していたのはコータさんくらいだったかな)、仕様変更がされてしまいました。 そのときのやり取りは、Miiverse下の「リニューアル前の投稿を見る」から過去を辿って探すしか無いですね(検索できないって本当不便)
2そうだね
プレイ済み
返信[11]
親投稿
ΖΕΧ ZEX256
自分もZEX_BIN作ったとき、このよく判らないファイルアクセス制限には大変苦労しました。 https://miiverse.nintendo.net/posts/AYMHAAADAAB2V0fHHkxF8Q あと、参考になるか判りませんがEXEC使って他SLOTから実行したら回避できないかなぁ https://miiverse.nintendo.net/posts/AYMHAAADAAB2V0fK4PQbuw
0そうだね
プレイ済み
返信[12]
親投稿
しんいち stgf1080
マギーさん> ふむふむ、今の仕様が自然という考えもあるんですね。興味深いです。 ZEXさん> おぉ、過去仕様変更されたことあったんですね。であれば、やはり今の仕様にした理由が何かあるということか(これはもう、サポートに問い合わせてみようかしら)。 私もEXECと別SLOT利用で回避できないか色々考えましたが、結局解決には至りませんでした。 #過去ログ漁ってみます。
0そうだね
未プレイ
返信[13]
親投稿
MIKI ifconfig
ZEXさん 社長の話興味深いですね。 時期的におそらくは私も見ていたでのしょうけど、当時は興味が薄くて聞き流してしまっていたと思います。残念。 しんいちさん ツール起動直前にいたプロジェクトを返す関数があれば、あとはツール側のがんばりでどうにかなるような気がしますがどうでしょう?
2そうだね
プレイ済み
返信[14]
親投稿
僕もスマイルツールを起動した時のプロジェクトを取得する命令があればなんとかなりそうな気もする…。あとついでなのでどのスロットから起動されたかを調べる命令があってもいいかも。(これはやり方自体はあるので必須ではないけど) ……ただ要望ってほとんど採用されてないイメージがあるんで、そういう面ではあまり期待してない…。今バージョンに限っては、今まであった博士によるバグや要望募集の投稿すらないし…。
1そうだね
プレイ済み
返信[15]
親投稿
しんいち stgf1080
MIKIさん> そういう関数あれば解決ですね(^o^) 私が思い付いたアイデアは、カレントプロジェクトのシステム変数CRNTPRJ$(例えばね)を用意して、PROJECT命令でカレントプロジェクトを変更した時はCRNTPRJ$も変更される、です。 で、下記プログラム思い付いたんだけど VAR CRNTPRJ$ DEF CD PJ$ PROJECT PJ$ PROJECT OUT CRNTPRJ$ END プチコン起動したら毎回最初にこのプログラム実行するようにして、以後PROJECTの代わりにCDと打つようにする。う~ん、苦しいな^^;やっぱり正式対応して欲しい。 #今気付いたけどプログラム中にPROJECT #書けてるねぇ^^;DEFでDirect実行なら良いのか? でんぺんさん> システム変数PRGSLOTって使えないのかな? (すみません未確認)
0そうだね
未プレイ
返信[16]
親投稿
おちゃめ ochame_nako
しんいちさん グローバル変数もスロットによって異なるためそのプログラムを活かすにはそのプログラムが動作するスロットが必要になります。 私のSLOT関数等を使って常時監視してもいいのですがそんな面倒なことをするくらいならば動作させるプログラムの先頭にCLIPBOARD PROJECT()と記述すれば良いです。 これならば他所でクリップボードを使用してない限りは大丈夫です。 そして、スマイルツールとして登録している別プロジェクトのプログラムにはこのように記述すれば無事にカレントプロジェクトのGRPが読み込めます。 FN$="読み込むGRPのファイル名" C$=CLIPBOARD() F$="GRP0:"+C$+"/"*(C$!="")+FN$
0そうだね
プレイ済み
返信[17]
親投稿
おちゃめ ochame_nako
書き忘れましたが最後にLOAD F$で読み込めます。
0そうだね
プレイ済み
返信[18]
親投稿
しんいち stgf1080
CLIPBOARDって手もありましたね。 >グローバル変数もスロットによって異なる というのは勉強不足でよく分かってませんm(__)m それも含めてこの手のこと(プロジェクトとかスロットとかユーザ関数を別スロットで使うとかDirectモードで使うとか)は最近になって気になり出して、只今勉強中です。 先のプログラムはPROJECT命令がシステム変数扱ったらこんな感じかなっていう思い付きで、やっぱりプログラムスロット消費しちゃう時点で嬉しくないんですよね^^; #そしてちょっと試したら、スロット0なら動くけど #スロット3ならエラーで、COMMON付けたら #スロット3でも動くのか、とかを今更確認してる #くらいの知識レベルです。私^^; なんか上手い仕様でSmileBoomさん正式対応してくれないかなぁ。
0そうだね
未プレイ
返信[19]
親投稿
しんいち stgf1080
#説明って難しい^^; 先に示してたプログラムは、これで解決してやろう、っていう本命ではなくて、PROJECT命令の仕様案を、思い付きでプログラムで書いてみたものでした。
0そうだね
未プレイ
返信[20]
親投稿
PRGSLOTって起動されたスロットを調べるためにということですか? PRGSLOTはPRG命令の対象スロットなのでちょっと用途が違うような気がします…。まあでも起動スロットに関しては、過去にBACKTRACEを使った方法やおちゃめさんの関数などいくつか方法はある感じなので、無くても平気だけどどうせ拡張するならついでに用意して欲しい、ぐらいな感覚です。 グローバル変数はプログラム実行時に初期化されるので、プログラム間で値を渡したいときにクリップボードを利用した事はありますね。でもスロットが違うならグローバル変数維持出来たんでしたっけ? だったらそっちを使った方が良かったのかなぁ…?
0そうだね
プレイ済み
返信[21]
親投稿
しんいち stgf1080
PRGSLOT適当なこと言っちゃってすみません。 #しかしためになるなぁ3号コミュ。感謝)^o^( グローバル変数スロット間で受け渡せるというのは、SLOT3でもCOMMOM DEFにしたら動いたことが、そういうことになるのかなぁ?(また見当違いなこと言ってるかも知れません。後でちゃんと調べてみます)
0そうだね
未プレイ
返信[22]
親投稿
しんいち stgf1080
#やっぱり見当違いだった^^; COMMON DEFにしたからってグローバル変数の値維持できませんね。おっしゃる通りプログラム実行した時点でグローバル変数初期化されますし。 試しててちょっと解ってきました。 DirectモードってSLOT0と考えれば良いみたいですね。 #だからCOMMON DEFにしたらSLOT3でも #動いたんだな。動きはしたけどDirectモードで #?CRNTPRJ$としてもSLOT0からSLOT3の #グローバル変数の参照になるので見えないと。 やはり現状の仕様でカレントプロジェクト問題何とかするには、自分の環境限定にはなってしまうけどCLIPBOARD使うってのも良さそうですね。あと、KEYも思い付いた(どっちでも一緒か)。 #自分の環境限定というのは、それ前提で #プログラム作ったら、公開しても他の環境では #動かないという意味です。
0そうだね
未プレイ
返信[23]
親投稿
やっぱりグローバル変数の維持は難しそうでしたかー…。なるほど。 ということは全てに共有出来るものはクリップボードがベストみたいですね。(たしかにKEYも書き換わりますが) ……と話がそれてしまった気もしますが、結局言いたいのはスマイルツールを起動したときのプロジェクト取得命令が欲しいという事でした!
1そうだね
プレイ済み
返信[24]
親投稿
ΖΕΧ ZEX256
SLOT 4ではCOMMON DEF使えなかった気がする
1そうだね
プレイ済み
返信[25]
親投稿
しんいち stgf1080
COMMONでそんなことが(これも初耳情報)。 CLIPBOARD使った場合のカレントプロジェクト対処方法まとめておきますね(本命じゃないけど)。 1).下記プログラムをSLOT3とかに置いとく。 COMMON DEF CD PJ$ PROJECT PJ$ PROJECT OUT PJ$ CLIPBOARD PJ$ END 2).RUN 3実行し、以後PROJECTの代わりにCD使う。 3).スマイルボタンに登録したプログラムでカレントプロジェクト参照したい場合、CLIPBOARD()で取得する。 こう書いてみるとやっぱり面倒くさいね。TOP MENUからプロジェクト変更したらダメだろうし。
0そうだね
未プレイ
返信[26]
親投稿
しんいち stgf1080
現状の仕様で現実的なのは、やっぱりFILES "//"かなぁ(先のCD案は面倒くさ過ぎるのでボツ)。 ということで、最終的に採用しようとしている方法まとめておきます。 1)スロット判別して4か5(スマイルボタン)なら 2)FILES "//"で取得したプロジェクト一覧と 3)CHKCHRでコンソールから取得した最後のプロンプト"[プロジェクト]OK"を比較して 4)一致したものをカレントプロジェクトの初期値としておく。 5)必ずしもカレントプロジェクトじゃない場合も考慮して、プロジェクト一覧からも選択できるようにする。 こんな感じかなぁ。 因みに過去ログ漁るのは断念して、サポートに問い合わせちゃいました^^; 回答ありましたら別途ご報告しますね。 色々とご教授頂きまして本当にありがとうございました。大変勉強になりました。 #今日3/28の22:00頃に一旦閉じようと思います。
0そうだね
未プレイ
返信[27]
親投稿
そういえば僕は3でカレントプロジェクトを求めたものを利用した事はありますがFILESのプロジェクト一覧と比較してませんでしたねー…。 FILESとも比較した方がプロジェクトの存在を確認出来ますね。まあとりあえずは今のままにしておくかもですが頭の中には入れておこう(^^; サポートから良い返事が来るといいですねー。
0そうだね
プレイ済み
返信[28]
親投稿
しんいち stgf1080
閉じま~す。時々BIGの方も覗いてくださいね。
1そうだね
未プレイ