#include "exforce.as"; #include "hspext.as"; #include "hspsock.as"; #define progname "偽春菜どつくか"; #define version "0.03"; #define myname "みしきさかな"; #define harunaport 11000; *init; str textinput; str hostname; str prevhostname; str yourname; str prevyourname; sdim textinput,1024,1; sdim extractor,3,3; dim localecho,1; minus1=-1; hostname="localhost"; yourname="名無しっス"; textinput="うひひっス"; localecho=0; screen 0,520,120,0; title progname; stbset 1; gosub *getwindowcolor; gosub *splitwindowcolors; gosub *fillappworkspace; objsize 0,0; button "接続先", *setremotehost; 0 button "名前入力", *nameconfig; 1 button "ヘルプ", *callhelp; 2 button "バージョン", *callversion; 3 button "終了", *windowclose; 4 button "ローカルエコー", *localechoonoff; 5 mmset "ファイル(&F)"; mmadd "接続先(&C)",0,0; mmadd "",0,$800; mmadd "終了(&X)",0,4; mmset "設定(&S)" mmadd "自分の名前(&N)",1,1; mmadd "",1,$800; mmadd "ローカルエコー(&L)",1,5; mmset "ヘルプ(&H)"; mmadd "ヘルプ(&H)",2,2; mmadd "",2,$800; mmadd "バージョン情報(&A)",2,3; font "MS ゴシック",14,0; objmode 2; objsize 108,24; pos 20,10; input textinput,480,24,1024; pos 150,45; color 0,0,0; print "表情:"; pos 190,42; combox surface,200,"ふつー\nしあわせー\nぎょっ!\nいじけー\nげそー\nなぜか欠番\nそですねー\nなによっ\nこまるなー"; pos 310,40; objsize 120,24; objmode 1; button "送 信",sendMessageToHaruna; statusString="\"偽春菜どつくか\" Ver." + version; gosub *echoStatusbar; gosub *loadreg; gosub *localechoapply; onexit *windowclose; objsel 6; gsel 0,1; goto *main; *localechoonoff; if localecho==1{ localecho=0; mmchk 1,2,1; statusString="ローカルエコーをオフにしたっス"; gosub *echoStatusbar; } else{ localecho=1; mmchk 1,2,0; statusString="ローカルエコーをオンにしたっス"; gosub *echoStatusbar; } goto *main; *localechoapply; if localecho==1{ mmchk 1,2,0; } if localecho==0{ mmchk 1,2,1; } return; *echoStatusbar; stbstr statusString,0; return; *setremotehost prevhostname=hostname; gsel 0; ginfo 2; xpos=prmx; ypos=prmy; xpos=xpos+10; ypos=ypos+10; if xpos < 0 : xpos=0; if ypos < 0 : ypos=0; screen 3,250,100,0,xpos,ypos,250,100; title "どつき先指定っス"; gsel 3,2; gosub *fillappworkspace; font "MS ゴシック",14,0; objmode 2; objsize 108,24; color 0,0,0; font "MS ゴシック",12,0; pos 10,10; print "ホスト名かIPアドレスを入れるっス:"; pos 20,30; font "MS ゴシック",14,0; input hostname,180,24; objmode 1; objsize 80,24; pos 30,60; button "OK" ,*remotehostsubmit; objsend 1,$f4,$01,minus1,1; pos 110,60; button "キャンセル" ,*remotehostrestore; goto *setremotehostloop; *setremotehostloop; wait 1; gosub *getactivewindow; if activewindow !=3 : goto *setremotehostloop; gsel 3,2; stick keyinput,0,1; if keyinput==32 : goto *remotehostsubmit; if keyinput==128 : goto *remotehostrestore; goto *setremotehostloop; *remotehostsubmit; gsel 3,-1; gsel 0,1; statusString="どつき先を "+hostname+" にしたっス。"; gosub *echoStatusbar; goto *main; *remotehostrestore; gsel 3,-1; gsel 0,1; hostname=prevhostname; statusString="どつき先は "+hostname+" のままっス。"; gosub *echoStatusbar; goto *main; *nameconfig; prevyourname=yourname; gsel 0; ginfo 2; xpos=prmx; ypos=prmy; xpos=xpos+10; ypos=ypos+10; if xpos < 0 : xpos=0; if ypos < 0 : ypos=0; screen 2,250,100,0,xpos,ypos,250,100; title "名を名乗れっス"; gsel 2,2; gosub *fillappworkspace; font "MS ゴシック",14,0; objmode 2; objsize 108,24; color 0,0,0; font "MS ゴシック",12,0; pos 10,10; print "自分の名前を入れるっス:"; pos 20,30; font "MS ゴシック",14,0; input yourname,180,24; objmode 1; objsize 80,24; pos 30,60; button "OK" ,*yournamesubmit; objsend 1,$f4,$01,minus1,1; pos 110,60; button "キャンセル" ,*yournamerestore; goto *setyournameloop; *yournamesubmit; gsel 2,-1; gsel 0,1; statusString="拙者は今後"+yourname+"と名乗るっス。"; gosub *echoStatusbar; goto *main; *yournamerestore gsel 2,-1; gsel 0,1; yourname=prevyourname; statusString="拙者は"+yourname+"のままっス。"; gosub *echoStatusbar; goto *main; *setyournameloop; wait 1; gosub *getactivewindow; if activewindow !=2 : goto *setyournameloop; gsel 2,2; stick keyinput,64,1; if keyinput==96 : goto *yournamesubmit; if keyinput==128 : goto *yournamerestore; goto *setyournameloop; *getactivewindow ginfo 1; activewindow=prmx; return; *callhelp; dialog "作ってねぇっス。", 0,progname+"のお手伝いさんっス"; goto *main; *callversion; dialog progname + "\n" + version + "\n\n by " + myname,0,progname+"のバージョン情報っス"; goto *main; *windowclose; gosub *savereg; end; *getwindowcolor; ;どうも効率の悪そうな部分である。多分もっと手際良く書けそうだ。 ;win.iniから取得しても良さそうだが、レジストリの方が確実だろう。 sdim appColor,16,1; sdim ShadowColor,16,1; sdim HighlightColor,16,1; sdim DarkShadowColor,16,1; ;colorsキーはデフォルトでは存在しないので注意。 ;win.ini の[colors]セクションも同様。 ;画面のプロパティでデザインをいじると生成される。 regkey 0, "Control Panel\\Colors",0; if stat!=0 : appColor="192 192 192" : ShadowColor="128 128 128" : HighlightColor="255 255 255" : DarkShadowColor="0 0 0" : return; getreg appColor, "ButtonFace", 1; if stat!=0 : appColor="192 192 192"; getreg ShadowColor, "ButtonShadow", 1; if stat!=0 : ShadowColor="128 128 128"; getreg HighlightColor, "ButtonHilight", 1; if stat!=0 : HighlightColor="255 255 255"; getreg DarkShadowColor, "ButtonDkShadow", 1; if stat!=0 : DarkShadowColor="0 0 0"; return; *splitwindowcolors; tempstr=appColor; gosub *colorextract; appColorr = extractor.0; appColorg = extractor.1; appColorb = extractor.2; int appColorr; int appColorg; int appColorb; appColorr--; appColorg--; appColorb--; ;この var-- はさりげに重要。 tempstr=ShadowColor; gosub *colorextract; ShadowColorr = extractor.0; ShadowColorg = extractor.1; ShadowColorb = extractor.2; int ShadowColorr; int ShadowColorg; int ShadowColorb; ShadowColorr--; ShadowColorg--; ShadowColorb--; tempstr=HighlightColor; gosub *colorextract; HighlightColorr = extractor.0; HighlightColorg = extractor.1; HighlightColorb = extractor.2; int HighlightColorr; int HighlightColorg; int HighlightColorb; HighlightColorr--; HighlightColorg--; HighlightColorb--; tempstr=DarkShadowColor; gosub *colorextract; DarkShadowColorr = extractor.0; DarkShadowColorg = extractor.1; DarkShadowColorb = extractor.2; int DarkShadowColorr; int DarkShadowColorg; int DarkShadowColorb; DarkShadowColorr--; DarkShadowColorg--; DarkShadowColorb--; return; *colorextract; extractor = "","",""; tempint = 0; repeat 3,0; getstr extractor.cnt, tempstr, tempint, ' '; tempint = tempint+strsize; loop; return; *fillappworkspace; color appColorr, appColorg, appColorb; boxf 0,0,dispx,dispy; return; *echoharuna if thisislocalecho==0{ statusString= hostname + " をどついてみるっス。"; gosub *echoStatusbar; wait 10; } if thisislocalecho==1{ prevhostname=hostname; hostname="localhost"; } sockopen 1, hostname, harunaport; if (stat!=0){ statusString= hostname + " にはつながらないっス。"; gosub *echoStatusbar; ; dialog "ヤバいっス! 偽春菜との通信失敗っス!",1,"エラーっス",; return; } if thisislocalecho==0{ statusString=hostname+ " につながったっス!!"; gosub *echoStatusbar; wait 50; } sockput "SEND SSTP/1.1\r\n",1; sockput "Sender: "+progname+"\r\n",1; sockput "Script: "+harunaMessage,1; sockput "\n\n",1 if thisislocalecho==0{ statusString=hostname+ " をどついてるっス。"; gosub *echoStatusbar; } str rtnstatus; sockget rtnstatus,64,1; getstr rtncode, rtnstatus,0,$20; getstr rtncode, rtnstatus,strsize; poke rtncode, 3,0; int rtncode; sockclose 0; if rtncode!=200{ statusString= "なんかエラー出たっス。" + hostname+ " をどつき損なったかもしれないっス。"; gosub *echoStatusbar; return; } if thisislocalecho==1{ hostname=prevhostname; } if thisislocalecho==0{ statusString= "無事 "+hostname+ " をどつけたっス。"; gosub *echoStatusbar; } return; *main; wait 1; stick keyinput,64,1; getkey shift,16; if keyinput==96 : if shift!=1 : goto *sendMessageToHaruna; goto *main; *sendMessageToHaruna; if surface < 0{ surface == 0; } harunaMessage="\\t\\u"+yourname+" はんからどつかれたで。\\n\\w8\\h\\s"+surface+textinput+"\\e"; gosub *echoharuna; if hostname=="localhost" { goto *sendMessageFinalize; } if hostname=="127.0.0.1" { goto *sendMessageFinalize; } if localecho==1{ if rtncode!=200 : goto *main; thisislocalecho=1; harunaMessage="\\t\\u"+hostname+" をどついたったで! \\n\\w8\\h\\s"+surface+textinput+"\\e"; gosub *echoharuna; thisislocalecho=0; } goto *sendMessageFinalize; *sendMessageFinalize; if rtncode!=200 : goto *main; gosub *cleartextinput; goto *main; *cleartextinput objprm 6,""; return; *savereg; regkey 0, "Software\\osakana.factory\\dotsukuka",1; setreg yourname, "UserName",1; setreg localecho, "LocalEcho",0; return; *loadreg; regkey 0, "Software\\osakana.factory\\dotsukuka",0; if stat != 0 : return; getreg yourname, "UserName",1; getreg localecho, "LocalEcho",0; return;