#struct code '初期設定領域' Randomize OW=OwnerWnd%:ShowWnd OW,SW_HIDE'プロンプトを隠しておく '初期変数の明示領域' Dim WinX,WinY,Vtimes,Vtimes2 Dim HenD$,HenE$,bFileName$,jFileName$,sFileName$,No$ Dim KJa$,Title$,Bulid$,Version$,CR$ Dim ScT$(9),MyT$(10),MyS(9),ScN(9) Dim st,ka,ScX,SX2,ScY,SHW,ScR,ScG,ScB,MySc,MyR,MyG,MyB Dim Sleeper,SV,iv,fv,cv,cv2,FAI,Dummy,STimes,NU,CDoRe,JLSc,LCSc Dim Sogo,integer,float,LineSc,CirSc,RollSc,TextSc,MemSc,Minteger,Mfloat Dim in,iin,fa,ffa,GAS,PAS,YourV,HenA,HenB,HenC,MIEnd,MFEnd Dim J_Line_X(5),J_Line_Y(5),J_Line_dX(5),J_Line_dY(5),J_Line_Co(5) Dim SrsX,SrsY,Scs,Sss,BaseNumber,Ks Dim Lock_X(18),Lock_Y(18),Lock_dX(18),Lock_dY(18),Lock_TrX(18),Lock_TrY(18),Lock_TsX(18),Lock_TsY(18) Title$="Active Benchmark":Bulid$="Build 0.51.05.10.08.02":Version$="version 0.51" CR$="Copryright(C)2002 Hirokazu Tsukasaki":HenD$=Title$+CR$+Chr$(13)+Version$+Chr$(13)+Bulid$ HenA=27182818284:HenB=314159265:HenC=141421356 Sleeper=0:in=1000:iin=1000:fa=1000:ffa=1000:integer=0:float=0:Dummy=0:SpV=1:GAS=640:PAS=1:BaseNumber=1 'ウインドウ及びメニュー項目設定領域' Window hWnd,OW,-1,-1,480,480,Title$+" "+Version$,WS_OVERLAPPEDWINDOW,"NORMAL" '「プログラム」メニュー項目の組み立て CreateMenu hFileMenu InsertMenuItem hFileMenu,0,MF_BYPOSITION,"ベンチマークの開始(&B)",1,0,MFS_DEFAULT InsertMenuItem hFileMenu,1,MF_BYPOSITION InsertMenuItem hFileMenu,2,MF_BYPOSITION,"実践ベンチの開始(&J)",2,0,MFS_DEFAULT InsertMenuItem hFileMenu,3,MF_BYPOSITION InsertMenuItem hFileMenu,6,MF_BYPOSITION,"アプリケーションを終了(&X)",5,0,MFS_DEFAULT '「ベースファイル」メニュー項目の組み立て CreateMenu hBaseNoMenu InsertMenuItem hBaseNoMenu,0,MF_BYPOSITION,"No. +1(&[)",10,0,MFS_DEFAULT InsertMenuItem hBaseNoMenu,1,MF_BYPOSITION,"No. -1(&])",11,0,MFS_DEFAULT InsertMenuItem hBaseNoMenu,2,MF_BYPOSITION InsertMenuItem hBaseNoMenu,3,MF_BYPOSITION,"No. =1(&R)",12,0,MFS_DEFAULT '「表示」メニュー項目の組み立て CreateMenu hViewMenu InsertMenuItem hViewMenu,0,MF_BYPOSITION,"グラフ再表示(&G)",13,0,MFS_GRAYED '「情報」メニュー項目の組み立て CreateMenu hHelpMenu InsertMenuItem hHelpMenu,0,MF_BYPOSITION,"ヘルプ(&H)",16,0,MFS_GRAYED InsertMenuItem hHelpMenu,1,MF_BYPOSITION InsertMenuItem hHelpMenu,2,MF_BYPOSITION,"バージョン情報(&A)",17,0,MFS_DEFAULT 'メインメニューの組み立て CreateMenu hMainMenu InsertMenuItem hMainMenu,0,MF_BYPOSITION,"プログラム(&P)",0,hFileMenu,MFS_DEFAULT InsertMenuItem hMainMenu,1,MF_BYPOSITION,"ベースファイル(&B)",0,hBaseNoMenu,MFS_DEFAULT InsertMenuItem hMainMenu,2,MF_BYPOSITION,"表示(&V)",0,hViewMenu,MFS_DEFAULT InsertMenuItem hMainMenu,3,MF_BYPOSITION,"情報(&I)",0,hHelpMenu,MFS_DEFAULT ' SetMenu hWnd,hMainMenu ShowWnd hWnd,SW_SHOW TargetWnd hWnd '主領域'///////////////////////////////////////////////////////////////////////////////// *MAIN While 1 GetWndMsg hThisWnd,Message,wParam,lParam If Message=WM_CLOSE Then Ending() If Message=WM_COMMAND And LOWORD(wParam)>=1 And LOWORD(wParam)=1 Then Bench() If Message=WM_COMMAND And LOWORD(wParam)>=1 And LOWORD(wParam)=2 Then JBench() If Message=WM_COMMAND And LOWORD(wParam)>=1 And LOWORD(wParam)=5 Then Ending() If Message=WM_COMMAND And LOWORD(wParam)>=1 And LOWORD(wParam)=10 Then NumPlus() If Message=WM_COMMAND And LOWORD(wParam)>=1 And LOWORD(wParam)=11 Then NumMinus() If Message=WM_COMMAND And LOWORD(wParam)>=1 And LOWORD(wParam)=12 Then NumReset() If Message=WM_COMMAND And LOWORD(wParam)>=1 And LOWORD(wParam)=13 Then ReGraph() If Message=WM_COMMAND And LOWORD(wParam)>=1 And LOWORD(wParam)=17 Then Information() wend 'エラー警告////////////////////////////////////////////////////////////////////////// *ERR MsgBox hWnd,HenE$,"警告情報",MB_OK+MB_ICONINFORMATION+MB_TOPMOST,hhAns Ending() Return 'ベンチコントロール領域'/////////////////////////////////////////// Sub Bench() Ks=8:HenE$="ファイルが読めません.(base"+Str$(BaseNumber)+".ini"+")":On Error GoSub *ERR FirstRead("base",BaseNumber,Ks):bFileName$="ABench.txt" HenE$="処理に失敗しました.":On Error GoSub *ERR ShowWnd hWnd,SW_HIDE'(メインウィンドを隠す) hOWer():STimes=1:Dummy():MIEnd=0:MFEnd=0 Integer():While MIEnd=0:Wend'マルチスレッドの終了 Float():While MFEnd=0:Wend'を確認するまで待機する Print "["+TIME$+"] CPU演算ベンチマーク終了." Print "["+TIME$+"] 2D ビデオ描画テストを開始します." Text():Liner():Circler():Roller() Memoryer() integer=integer+Minteger:float=float+Mfloat FAI=float+integer Sogo=integer+float+TextSc+LineSc+CirSc+RollSc+MemSc Writer() in=1000:iin=1000:fa=1000:ffa=1000 MainTextOut(Ks) ReGraphEnabled() EndSub '実践ベンチコントロール領域'///////////////////////////////////////////// Sub JBench() Ks=1:HenE$="ファイルが読めません.(basej"+Str$(BaseNumber)+".ini"+")":On Error GoSub *ERR FirstRead("basej",BaseNumber,1):JLSc=0:bFileName$="ABJisen.txt" HenE$="処理に失敗しました.":On Error GoSub *ERR ShowWnd hWnd,SW_HIDE:hOWer() Category1():Category2() Writer2() MainTextOut(Ks) ReGraphEnabled() EndSub '-------実践ベンチサブ Sub Category1() STimes=4:Thread *SleepThread Print "["+TIME$+"] 実践カテゴリ#1":JLSc=0 While Sleeper=0 JLSc=JLSc+1:CDoRe=INT(RND()*3)+1:Cls 2 For NU=0 to 4 J_Line_X(NU)=INT(RND()*WinX):J_Line_Y(NU)=INT(RND()*WinY) J_Line_dX(NU)=INT(RND()*24):J_Line_dY(NU)=INT(RND()*18) J_Line_Co(NU)=255*INT(RND()+0.5) Next For J_Line_Co(CDoRe)=0 to 255 Line(J_Line_X(1),J_Line_Y(1))-(J_Line_X(2),J_Line_Y(2)),RGB(J_Line_Co(1),J_Line_Co(2),J_Line_Co(3)) Line -(J_Line_X(3),J_Line_Y(3)),RGB(J_Line_Co(1),J_Line_Co(2),J_Line_Co(3)) Line -(J_Line_X(4),J_Line_Y(4)),RGB(J_Line_Co(1),J_Line_Co(2),J_Line_Co(3)) JLSc=JLSc+1 If Sleeper=0 Then Else ExitWhile For NU=0 to 4 If J_Line_X(NU)<0 or J_Line_X(NU)>WinX Then J_Line_dX(NU)=(-1)*J_Line_dX(NU) If J_Line_Y(NU)<0 or J_Line_Y(NU)>WinY Then J_Line_dY(NU)=(-1)*J_Line_dY(NU) J_Line_X(NU)=J_Line_X(NU)+J_Line_dX(NU):J_Line_Y(NU)=J_Line_Y(NU)+J_Line_dY(NU) Next Next Wend Print "["+TIME$+"] #1 終了":Sleeper=0:cls 2 EndSub '--- Sub Category2() For NU=0 to 7 step 2 Lock_X(NU)=RND()*WinX:Lock_Y(NU)=RND()*WinY Lock_dX(NU)=RND()*WinX*0.001:Lock_dY(NU)=RND()*WinY*0.001 Lock_X(NU+1)=WinX*0.5:Lock_Y(NU+1)=WinY*0.5 Next STimes=4:LCSc=0:SrsX=1:SrsY=1 Thread *SleepThread Print "["+TIME$+"] 実践カテゴリ#2" While Sleeper=0 For NU=0 to 7 step 2 LCSc=LCSc+1 Lock_TsX(NU)=Lock_X(NU+1)-Lock_X(NU) Lock_TsY(NU)=Lock_Y(NU+1)-Lock_Y(NU) Lock_TrX(NU)=ABS(Lock_TsX(NU))/Lock_X(NU) Lock_TrY(NU)=ABS(Lock_TsY(NU))/Lock_Y(NU) If Lock_TsX(NU)*Lock_dX(NU)>0 Then'X座標について If Lock_dX(NU)>0 Then Lock_dX(NU)=Lock_dX(NU)+SrsX ElseIf Lock_dX(NU)<0 Then Hosei=-1 Lock_dX(NU)=Lock_dX(NU)-SrsX EndIf ElseIf Lock_TsX(NU)*Lock_dX(NU)<0 Then If Lock_dX(NU)<0 Then Lock_dX(NU)=Lock_dX(NU)+SrsX ElseIf Lock_dX(NU)>0 Then Lock_dX(NU)=Lock_dX(NU)-SrsX EndIf EndIf If Lock_TsY(NU)*Lock_dY(NU)>0 Then'Y座標について If Lock_dY(NU)>0 Then Lock_dY(NU)=Lock_dY(NU)+SrsY ElseIf Lock_dY(NU)<0 Then Lock_dY(NU)=Lock_dY(NU)-SrsY EndIf ElseIf Lock_TsY(NU)*Lock_dY(NU)<0 Then If Lock_dY(NU)<0 Then Lock_dY(NU)=Lock_dY(NU)+SrsY ElseIf Lock_dY(NU)>0 Then Lock_dY(NU)=Lock_dY(NU)-SrsY EndIf EndIf Lock_X(NU)=Lock_X(NU)+Lock_dX(NU):Lock_Y(NU)=Lock_Y(NU)+Lock_dY(NU) Circle(Lock_X(NU+10),Lock_Y(NU+10)),5,0 Circle(Lock_X(NU),Lock_Y(NU)),5,NU+1 Circle(Lock_X(7),Lock_Y(7)),5,7 Lock_X(NU+10)=Lock_X(NU):Lock_Y(NU+10)=Lock_Y(NU) Next 'cls 2 Wend Print "["+TIME$+"] #2 終了":Sleeper=0:cls 2 EndSub 'マルチスレッド領域'/////////////////////////////////////////// *SleepThread Sleep 8000*STimes Sleeper=1 End 2 *MultiInteger While Sleeper=0 Minteger=Minteger+1 inn=inn+1234:inn=inn*1000-100:inn=inn+7300:inn=inn-4800:inn=inn-Minteger Wend MIEnd=1 End 2 *MultiFloat While Sleeper=0 Mfloat=Mfloat+1 ffa=ffa*1.05:ffa=fa*123:ffa=fa/456:ffa=fa*0.987:ffa=fa*sin(Mfloat) Wend MFEnd=1 End 2 'サブ領域'////////////////////////////////////////////////////// Sub ReGraphEnabled() DeleteMenuItem hViewMenu,0,MF_BYPOSITION InsertMenuItem hViewMenu,0,MF_BYPOSITION,"グラフ再表示(&G)",13,0,MFS_DEFAULT DrawMenuBar hViewMenu EndSub '-- Sub FirstRead(ByVal sFileName As String,ByVal Number As Long,ByVal Sss As Long) No$=Str$(Number):sFileName=sFileName+No$+".ini": 'Sssに入力されるべき数値は"データ項目数-1"(0,1,2,3.....) Open sFileName For Input As #5 For st=0 to Sss Input #5,MyT$(st),MyS(st) Next Input #5,MyT$(st+1) Close #5 EndSub '--- Sub MainTextOut(ByVal Sss As Long) 'Sssに入力されるべき数値は"データ項目数-1"(0,1,2,3.....) Opener(Sss):hWnder(PAS) cls 3:ScX=10:SX2=320*Vtimes2:BSize=320 For st=0 to Sss ScY=10+64*Vtimes2*st:SHW=12*Vtimes2 ScR=255:ScG=0:ScB=0:MyR=51:MyG=150:MyB=250 TextOut ScX,ScY,ScT$(st),RGB(ScR,ScG,ScB),-1,SHW,SHW,,,ShiftJis YourV=ScN(st)/MyS(st):YourP=INT(YourV*10000)/100 MySc=BSize*Vtimes2+ScX:YourS=BSize*YourV*Vtimes2+ScX Line(ScX,ScY+SHW)-(MySc,ScY+SHW*2),RGB(MyR,MyG,MyB),bf Line(ScX,ScY+SHW*1.5)-(YourS,ScY+SHW*2.5),RGB(ScR,ScG,ScB),bf TextOut ScX+SHW,ScY+SHW*1.5,STR$(YourP)+"%",0,-1,SHW,SHW,,,ShiftJis TextOut SX2,ScY,STR$(ScN(st))+"ポイント",RGB(ScR,ScG,ScB),-1,SHW,SHW,,,ShiftJis Next ScY=10+64*Vtimes2*(st+1) TextOut ScX+SHW,ScY,MyT$(st+1),RGB(MyR,MyG,MyB),-1,SHW,SHW,,,ShiftJis EndSub '--- Sub ReGraph() If Ks=1 Then FirstRead("Basej",BaseNumber,Ks) If Ks=8 Then FirstRead("Base",BaseNumber,Ks) MainTextOut(Ks) EndSub '--- Sub Information() MsgBox hWnd,HenD$,"プログラム情報",MB_OK+MB_ICONINFORMATION+MB_TOPMOST,hhAns EndSub '--- Sub Ending() MsgBox hWnd,Title$+"を終了しますか?","確認",MB_YESNO+MB_ICONQUESTION+MB_DEFBUTTON2+MB_TOPMOST,EAns While EAns=IDYES clear:DelWnd OW:DelWnd hWnd:end Wend EndSub '--- Sub hWnder(ByVal GAS As Long) If GAS>1 Then WndPos hWnd,-1,-1,GAS,GAS*(0.8) ShowWnd hWnd,SW_SHOW EndIf If GAS=1 Then'通常はこっちになる ShowWnd hWnd,SW_SHOWMAXIMIZED EndIf TargetWnd hWnd WinX=SysMetric(SM_CXFULLSCREEN) WinY=SysMetric(SM_CYFULLSCREEN) Vtimes2=WinX/1024:PAS=GAS EndSub '--- Sub hOWer() ShowWnd OW,SW_SHOWMAXIMIZED TargetWnd OW WinX=SysMetric(SM_CXFULLSCREEN) WinY=SysMetric(SM_CYFULLSCREEN) Vtimes=WinX/1024 Sleeper=0 EndSub '--- Sub Writer()'都合上キャリッジリターンで hOWer()'アウトプットするために長くなっている Print "["+TIME$+"] データ書き出し開始." Open bFileName$ As #1 Print #1,"整数演算スコア" Print #1,integer'0 Print #1,"浮動小数点演算スコア" Print #1,float'1 Print #1,"CPU総合スコア" Print #1,FAI'2 Print #1,"テキストスコア" Print #1,TextSc'3 Print #1,"ラインスコア" Print #1,LineSc'4 Print #1,"サークルスコア" Print #1,CirSc'5 Print #1,"ロールスコア" Print #1,RollSc'6 Print #1,"メモリスコア" Print #1,MemSc'7 Print #1,"全総合スコア" Print #1,Sogo'8 Print #1,Date$+" "+TIME$ Close #1 Print "["+TIME$+"] データ書き出し終了." EndSub '--- Sub Writer2() hOWer() Print "["+TIME$+"] データ書き出し開始." Open bFileName$ As #2 Print #2,"カテゴリ#1" Print #2,JLSc'0 Print #2,"カテゴリ#2" Print #2,LCSc'1 Print #2,Date$+" "+TIME$ Close #2 EndSub '--- Sub Opener(ByVal Scs As Long) HenE$="ファイルが読めません.("+bFileName$+")":On Error GoSub *ERR TargetWnd OW Print "["+TIME$+"] スコア読み出し開始." Open bFileName$ As #3 For st=0 to Scs Input #3,ScT$(st),ScN(st) Next Close #3 Print "["+TIME$+"] スコア読み出し終了." EndSub '---////////////////////////////////////////////// Sub NumPlus() On Error GoSub *OverNumPlus BaseNumber=BaseNumber+1 FirstRead("Base",BaseNumber,Ks) NumOut(BaseNumber,5,64) EndSub '--- Sub NumMinus() BaseNumber=BaseNumber-1 If BaseNumber<1 Then BaseNumber=1 FirstRead("Base",BaseNumber,Ks) NumOut(BaseNumber,5,64) EndSub '--- *OverNumPlus BaseNumber=BaseNumber-1 FirstRead("Base",BaseNumber,Ks) NumOut(BaseNumber,2,64) GOTO *MAIN Return '--- Sub NumReset() BaseNumber=1 FirstRead("Base",BaseNumber,Ks) NumOut(BaseNumber,5,64) EndSub '--- Sub NumOut(ByVal BN As long,ByVal CO As long,ByVal SZ As long) CLS 2:Textout 10,10,Str$(BN),CO,-1,SZ,SZ,,,ShiftJis EndSub '---///////////////////////////////////////////// Sub Dummy() TargetWnd OW Print "["+TIME$+"] ダミー演算開始(8秒間)" Thread *SleepThread While Sleeper=0 Dummy=Dummy+1 Wend EndSub '--- Sub Integer() integer=0:Minteger=0 hOWer() Print "["+TIME$+"] 整数演算開始!(8秒間安静にしてください.)" Thread *SleepThread Thread *MultiInteger While Sleeper=0 integer=integer+1:in=in+1234:in=in*1000-100:in=in+7300:in=in-4800:in=in-integer Wend Print"["+TIME$+"] 終了." EndSub '--- Sub Float() float=0:Mfloat=0 hOWer() Print "["+TIME$+"] 浮動小数点演算開始!(8秒間安静にしてください.)" Thread *SleepThread Thread *MultiFloat While Sleeper=0 float=float+1:fa=fa*1.05:fa=fa*123:fa=fa/456:fa=fa*0.987:fa=fa*sin(float) Wend Print"["+TIME$+"] 終了." EndSub '--- Sub Text() TextSc=0 hOWer() Print "["+TIME$+"] テキスト描画(8秒間)" Thread *SleepThread While Sleeper=0 Print "Text てきすと TEXT テキストテスト":TextSc=TextSc+1 Wend cls 3 Print"["+TIME$+"] 終了." EndSub '--- Sub Liner() LineSc=0 hOWer() Print "["+TIME$+"] ライン描画(8秒間)" Thread *SleepThread While Sleeper=0 Line (RND()*WinX,RND()*WinY)-(RND()*WinX,RND()*WinY),RND()*7 Line -(RND()*WinX,RND()*WinY),RND()*7:LineSc=LineSc+1 Wend Print"["+TIME$+"] 終了." cls 2 EndSub '--- Sub Circler() CirSc=0 hOWer() Print "["+TIME$+"] サークル描画(8秒間)" Thread *SleepThread While Sleeper=0 Circle(RND()*WinX,RND()*WinY),10,RND()*7:Circle(RND()*WinX,RND()*WinY),20,RND()*7 CirSc=CirSc+1: Wend Print"["+TIME$+"] 終了." cls 2 EndSub '--- Sub Roller() RollSc=0 hOWer() Print"["+TIME$+"] 描画&ロール(8秒間)" Thread *SleepThread While Sleeper=0 Pset(RND()*WinX,100),RND()*7 Roll 0,1:RollSc=RollSc+1 Wend Print"["+TIME$+"] 終了." EndSub '--- Sub Memoryer() MemSc=0 hOWer() Print"["+TIME$+"] メモリ読み書き(変数受け渡し)(8秒間)" Thread *SleepThread While Sleeper=0 Swap HenA,HenB:Swap HenA,HenC:MemSc=MemSc+1 Wend Print"["+TIME$+"] 終了." EndSub