Case#cut
While Joyb(0)>0
wx=WMouseX:wy=WMouseY
WJam3
drawrect{oldx,oldy,wx,wy,drawcol}
VWait:drawrect{oldx,oldy,wx,wy,drawcol}
Wend
WJam0
If wx<oldx Then Exchange wx,oldx
If wy<oldy Then Exchange wy,oldy
If wx=oldx OR wy=oldy Then Goto cute
GetaShape0,oldx,oldy,wx-oldx,wy-oldy
MakeCookie0
sw=ShapeWidth(0)
sh=ShapeHeight(0)
rx=sw/2:ry=sh/2
Handle0,rx,ry
frontpen=-1
cute:
End Select
Return
.
.intuicodes
Select ev
._mbut
Case$8
If EventWindow=#palwin
res=palhit{WMouseX,WMouseY}
If res>-1
drawcol=res
status{"col="+Str$(drawcol),1}
Use Window #palwin
EndIf
EndIf
Case$40
._gads
Select GadgetHit
Case #up
Case #down
Case #left
Case #right
Case #tobuffer
Case #frombuffer
Case #insertframe
Case #deleteframe
Case #playanim
Case #save
Case #load :Gosub loadpic
Case #freihand :drawmod=#freihand
Case #bogen
Case #linie :drawmod=#linie
Case #rechteck :drawmod=#rechteck
Case #ellipse :drawmod=#ellipse
Case #text
Case #lupe:If GadgetStatus(0,#lupe)Then Gosub openlup Else Gosub closelup
Case #cut :drawmod=#cut
Case #rotier
Case #flipx
Case #flipy
Case #clear
;Use BitMap0:Cls backcol
Use Window #picwin:WCls
Case #undo
Case #info
End Select
drwstatus{drawmod}
Case$400
._keys
ev$=LCase$(Inkey$)
Select ev$
Case Chr$(27):exit=1 ;QUIT
Case "p"
If palstatus=0
uwin=Used Window
openpal{}
drawpal{}
Activate #picwin: Use Window #picwin
Else
CloseWindow #palwin:palstatus=0
Use Window uwin
EndIf
; status{"Palette not implemented",7}
; Delay_50
; drwstatus{drawmod}
End Select
End Select
Return
.
.loadpic
FindScreen0,"board"
g$=ASLFileRequest$("name of picture to load",pa$,fi$,pat$)
If g$<>""
If ILBMInfo(g$)
FlushEvents$400000
VWait12
CloseWindow #picwin
VWait12
Free BitMap0
VWait12
CloseScreen #picwin
VWait12
newscreen{ILBMWidth,ILBMHeight,ILBMDepth,ILBMViewMode}
LoadBitMap0,g$,#picwin:ShowPalette #picwin
EndIf
EndIf
Return
.
.openlup
Use Screen #picwin
Window #zoomwin,w/2,14,w/2,h-14-45,$800,"",0,0
WCls 1
; BitMap 1,320,256,d
; BitMap 2,320,256,d
Return
.updatelup:
; Use BitMap 1: BitMapOutput1 ;do actual zooming!
; x=xm-azoom3 : y=ym-bzoom3 ;subtract zoom width/height
; If x<0 Then x=0 ;check for off screen
; If y<0 Then y=0
; If x>w-azoom Then x=w-azoom
; If y>h-bzoom Then y=h-bzoom
; Use BitMap0
; Scroll x,y,azoom,bzoom,0,0,0 ;grab the block
; azoom2.w=azoom+8 ;increase to make
; If azoom>320 Then azoom=320 ; sure window will be full
; ????? 1,2,0,0,azoom2,bzoom ;do X4
; Use Window 0
; BitMaptoWindow 2,2,0,0,0,0,windwmod,windh ;copy zoom into window
; windw.w=w/2
; windh.w=h
; windwmod.w=windw-(windw MOD zoom)
; azoom.w=(windw)/4
; bzoom.w=(windh)/4
; azoom3=azoom ASR 1
; bzoom3=bzoom ASR 1
Return
Ich hatte eine Weile zurück mal das ShowBoardsMUI re-implementiert, war aber damals in Stocken gekommen wegen der unverständlichen Vorgehensweise bei mehrspaltigen Listen. Dies ist nun mittlerweile (endlich) gelöst, denke ich mal.
Meine Neuerstellung ist noch nicht fertig; das Projekt lag ja auch 3 Jahre still...
Hier jedenfalls eine BETA.
Hinweis: Drucken (Print) geht nicht. Report (letztendlich) auch nicht. Die showboards-Datei in T: gibt es aber schonmal.
Nun, warum mache ich das? Ganz einfach:
ShowBoardsMUI wird nicht mehr weiterentwickelt und ist auch schon nicht mehr kompatibel zu neueren Versionen der boards.library.
Impressionen:
Heute wollte ich endlich, wie schon lange geplant, ein paar Fonts rippen von Games.
Am Ende stellte sich raus, daß es Arbeit macht, die einzelnen Buchstaben zu separieren.
Da dachte ich mir: warum nicht ein Tool schreiben, das mir diese Arbeit abnimmt?
Das lief zufriedenstellend.
Eine Funktion zur (Neu-)Verteilung auf eine BMap habe ich schon, in meinem ShapeExtractor-Tool. Nur noch zusammenbauen und wir haben den verregneten Samstag sinnvoll verschwendet.
Und zwar hatte ich mal letztes Jahr in einem Forum einen PROFILER für Blitzbasic2 angedeutet. Der war im Prinzip damals schon fertig, ich mußte nur noch die Zeitmessung dazubauen. Da half mir dann noname/haujobb aus.
Wieauchimmer, ich habe es jetzt (mit den gegenwärtigen Spezifikationen) fertig.
Über die Distribution muß ich noch nachdenken, ist ja kein OpenSource aber kosten soll es natürlich auch nix.
Vielleicht ein Precompile-Include oder so.
Was tut es?
Es stellt einfache Methoden zur Verfügung, benutzte Prozeduren zu zählen und die darin verbrachte Zeit zu messen.
(man muß natürlich die für das Profiling selbst benutzte Zeit im Auge behalten).
Dafür fügt man in jede zu überwachende Prozedur einen "Entry" und am Ende einen "Exit" Aufruf ein.
Am Ende kann man (bisher) ein paar Statistiken ausgeben:
Schaut mal unten auf das Beispiel, das ist kurz und verständlich.
Da ist natürlich eine GUI geplant, und statistische Auswertungen und und und.
Ist vielleicht ganz sinnvoll?
Code:
;
;test of stat/debug/ profiler possibilities
;
;by frank b., germany
;
;the symbols have obscure names to not interfere
; with others, as this is supposed to be "invisible",
; like an include or something
;
;todo: add timer stuff to really measure somethin
; add memdump/save instead of array()
; add gui
;history
; done timing support
; seems like we are shipping this version!
; 08.DEC.2019
Ich habe mal ein simples Beispiel vorbereitet, das einzelne Teile aus einem String herauslöst. Man kann das z.B. benutzen als Argumentparser, Wortzähler usw..
Es nutzt hier nur Leerzeichen als Trenner, man kann das aber natürlich anpassen auf ganze Strings von Worttrennern, wenn man will.
Ich hab' endlich den Imagebutton für das 5-Sterne-System in OBST runderneuert; jetzt funktioniert es.
Wird demnächst eingebaut. Es erfordert zur Zeit noch einen dirty HW-Zugriff auf den MouseButton, aber das fixe ich noch; da gibt es Timingprobleme oder so mit der Echtzeitabfrage via MUI.
Wird dann alsbald eingebaut.
Zur Info:
Es ist ein 5-Sterne-Voting-Button, der auch dragging erlaubt; er gibt 0-5 oder Fail=-1 zurück, als Resultat.
Er ist angedacht, um bei OBST jedes Game zu bewerten (wird im PAKs Ordner des Spiels gespeichert). Da ist bisher ein doofer CycleButton.
Hier ein exe als Beispiel zum Testen, bitte vom CLI starten wegen der Ausgabe!!
MultiColor bekomme ich nicht vernünftig hin; die Farben sind immer falsch, auch wenn es funktioniert. Ich habe hier aber noch MUI3.8, ob das mit 3.9 besser ist oder ggfls. mit NBitmap.mui, das probiere ich noch.