BBC BASIC for Windows
« Just a spinning "BB4W" graphic »

Welcome Guest. Please Login or Register.
Apr 5th, 2018, 10:18pm



ATTENTION MEMBERS: Conforums will be closing it doors and discontinuing its service on April 15, 2018.
Ad-Free has been deactivated. Outstanding Ad-Free credits will be reimbursed to respective payment methods.

If you require a dump of the post on your message board, please come to the support board and request it.


Thank you Conforums members.

BBC BASIC for Windows Resources
Online BBC BASIC for Windows documentation
BBC BASIC for Windows Beginners' Tutorial
BBC BASIC Home Page
BBC BASIC on Rosetta Code
BBC BASIC discussion group
BBC BASIC for Windows Programmers' Reference

« Previous Topic | Next Topic »
Pages: 1  Notify Send Topic Print
 thread  Author  Topic: Just a spinning "BB4W" graphic  (Read 531 times)
David Williams
Developer

member is offline

Avatar

meh


PM

Gender: Male
Posts: 452
xx Just a spinning "BB4W" graphic
« Thread started on: Nov 28th, 2016, 11:59pm »

Copy, paste, run...

Code:
      *FLOAT 64
      *ESC OFF
      PROCFixWindowSize
      scrW%=512:scrH%=512:VDU23,22,scrW%;scrH%;8,16,16,0:OFF
      GA$="GlobalAlloc":GF$="GlobalFree"
      PROCInitGLIB(g{},p{})
      ON CLOSE PROCCleanup:QUIT
      ON ERROR PROCCleanup:OSCLI"REFRESH ON":REPORT:PRINT ERL:END
      www$="http://www.proggies.uk/temp/"
      bg%=FNLoadFromNet(www$+"bb4w_2048x2048.jpg",@tmp$+"bb4w_2048x2048.jpg")
      bgW%=2048:bgH%=2048
      glib%=FNLoadFromNet(www$+"glib_480x128.gif",@tmp$+"glib_480x128.gif")
      glibW%=480:glibH%=128
      SYS p.CopyToAlphaChannel%,glib%,glibW%,glibH%,3
      *REFRESH OFF
      REPEAT
        SYS"GetTickCount" TO T%
        angle=360*SIN(T%/11500)*SIN(T%/13200+1.45)
        scale=0.36+ABS(SIN(T%/2000)*SIN(T%/2750+2.0))
        SYSp.Clr%,g{},0
        SYSp.PlotRotateScaleBilinear%,g{},bg%,bgW%,bgH%, \
        \ 8*scrW%,8*scrH%,angle*&10000,scale*&10000
        SYSp.PlotAlphaBlend%,g{},glib%,glibW%,glibH%,(scrW%-480)/2,scrH%-128-32
        PROCDisplay(TRUE)
      UNTIL0
      END
      DEFFNLoadFromNet(url$,file$)
      LOCAL A%,file%
      file%=OPENIN(file$)
      IF file%=0 THEN
        PROCurldownload(url$, file$)
      ENDIF
      CLOSE#file%
      A%=FNLoadImg(file$,-1)
      =A%
      DEFPROCInitGLIB( RETURN b{}, RETURN p{} )
      LOCALS%,Z%
      DIMb{a%,w%,h%}
      DIMp{Clr%,PlotAlphaBlend%,CopyToAlphaChannel%,PlotRotateScaleBilinear%,clipBm%,dibs%}
      PROC`cds(b.a%,p.dibs%)
      b.w%=@vdu%!208:b.h%=@vdu%!212:Z%=FN`ga(4096,TRUE):S%=FN`ga(4096,TRUE)
      $S%="608B5C2424C703FFFFFFFF8B7C24383B7C24280F8DC70000008B74243C3B74242C0F8DB9"
      $S%+="0000008B4C24308B54243483F9007D03F7D99083FA007D03F7DA90F7D93BF90F8E970000"
      $S%+="00F7DA3BF20F8E8D000000F7D9F7DAC70300000000C7430400000000C7430800000000C7"
      $S%+="430C00000000894B10895314897B1889731C8BEF03E93B6C24287E0E2B6C2428296B10C7"
      $S%+="4304FFFFFFFF83FF007D14297B0C017B10C7431800000000C74304FFFFFFFF8BEE03EA3B"
      $S%+="6C242C7E0E2B6C242C296B14C74304FFFFFFFF83FE007D14297308017314C7431C000000"
      $S%+="00C74304FFFFFFFF61C21C0060"
      p.clipBm%=FN`m(S%,0,0)
      $S%="608B6C24248B4424288B7D008B4D040FAF4D08FCF3AB61C2080000"
      p.Clr%=FN`m(S%,0,0)
      $S%="608BEC81EC800000008B75248BC4FF7538FF7534FF7530FF752CFF7608FF760450E85FFE"
      $S%+="FFFFF70424FFFFFFFF0F85690000008B552C89542434C1642434020FAF5424080354240C"
      $S%+="C1E2020355288B7E04897C2438C1642438020FAF7C241C037C2418C1E702033E8B5C2410"
      $S%+="33C98B048AA9000000FF740F3D000000FF722725FFFFFF0089048F83C1013BCB7CE00354"
      $S%+="2434037C2438FF4C241475D081C48000000061C218008BF0C1EE180FB66C8A020FB6448F"
      $S%+="022BE80FAFEEC1FD0803C588448F020FB66C8A010FB6448F012BE80FAFEEC1FD0803C588"
      $S%+="448F010FB62C8A0FB6048F2BE80FAFEEC1FD0803C588048FC6448F030083C1013BCB0F8C"
      $S%+="6EFFFFFF03542434037C2438FF4C24140F855AFFFFFF81C48000000061C2180060"
      p.PlotAlphaBlend%=FN`m(S%,33,p.clipBm%)
      $S%="60837C2430040F83530000008B7424280FAF74242C8B7C242433D2837C2430010F843D00"
      $S%+="0000837C2430020F8446000000837C2430030F846C0000008B5C243481E3FF000000C644"
      $S%+="970300F70497FFFFFF007404885C970383C2013BD67CE761C2140033DB8A1C97885C9703"
      $S%+="83C2013BD67CF261C21400BD555505000FB604970FB65C97010FB64C970203C303C10FAF"
      $S%+="C50500000800C1E8148844970383C2013BD67CD861C214000FB604970FB65C97010FB64C"
      $S%+="970269C0F1D2010069DB5A64090069C9B4C8040003C303C1C1E81483D0008844970383C2"
      $S%+="013BD67CCB61C2140000"
      p.CopyToAlphaChannel%=FN`m(S%,0,0)
      $S%="680000B0416A0068DCA54C4168F8C1631ADB44242CDC3424D9FBDC4C2408DB1424D9C9DC"
      $S%+="4C2408DB542404DA742430DB5C240CDA742430DB5C2408595D0F6F2C24585BF7DB0FC4EB"
      $S%+="010FC4E803C1F90CC1FD0C8BC10FAF44240CC1F8109933C22BC28BD88BC50FAF442410C1"
      $S%+="F8109933C22BC203C30FAF442420C1E81083C0068B5C24048B5B043BC372028BC3894424"
      $S%+="1C8BC10FAF442410C1F8109933C22BC28BD88BC50FAF44240CC1F8109933C22BC203C30F"
      $S%+="AF442420C1E81083C0068B5C24048B5B083BC372028BC3894424208BF08B4424188BDEF7"
      $S%+="DB8D1CD88B6C24048B4D082BCEC1E1040BDB790233DB3BD972028BD983E3F08BFB2BD80F"
      $S%+="C4E3010FC4E303C1EF040FAF7D04C1E702037D0033C033DB0FBA64240C00F566D1D80FBA"
      $S%+="64241000F566D1DB0FEFD20FC4D0000FC4D302B8100000000F6ED80F70DBCC8B6C241C8B"
      $S%+="4424148BDDF7DB8D1CD88B4C24048B49042BCDC1E1040BDB790233DB3BD972028BD983E3"
      $S%+="F08BCB2BD80FC4E3000FC4E302897C2418C1E90203F90F6FC40FF5C50FFAC20FC5D8010F"
      $S%+="C5C8030FBFDB0FBFC98B44240C8B542410D1E8D1EA03D803CA8B54241083C1010FBAE11F"
      $S%+="0F94C0D0D03BD10F94C4D0D4C1E0108B54240C83C3010FBAE31F0F94C0D0D03BD30F94C4"
      $S%+="D0D4A9010101010F85B700000083E90183EB010FAFCA03CB8B5C24088D1C8BB9FF000000"
      $S%+="0F6EC90F70C9330F71D0080F70C0A00FEFC10F70F0110F70C0AF0FD5F00FEFC0A9030103"
      $S%+="01750A0F70FE000F60030FE4C7A901030301750E0F70FE550F604B040FE4CF0FFDC1A903"
      $S%+="010103750E0F70FEAA0F600C930FE4CF0FFDC1A901030103750F0F70FEFF0F604C93040F"
      $S%+="E4CF0FFDC183C1010F6EC90F70C9000F70F0FF0F6FF90F71D6080FF9FE0F60370F71D608"
      $S%+="0FD5FE0FDDC70F71D0080F67C00F7E070FFDE383C70483ED010F85D7FEFFFF8B7C24188B"
      $S%+="5C24048B5B04C1E30203FBB8100000000F6EC00F70C0330FFDE04E0F8572FEFFFF0F77C2"
      $S%+="200000"
      p.PlotRotateScaleBilinear%=FN`m(S%,0,0)
      Z%=FN`ga(4096,TRUE)
      ENDPROC
      DEFPROCDisplay(W%):PRIVATEI%:IFI%=0 I%=FNSYS_NameToAddress("InvalidateRect")
      SYSI%,@hwnd%,0,0:IFW%PROC`w
      *REFRESH
      ENDPROC
      DEFFNLoadImg(p$,A%):LOCALK%,X%,Y%,W%,H%,M%:X%=0:Y%=0:K%=FN`l(p$,X%,Y%,0)
      IFK%=0ERROR100,"LoadImg failed"
      A%=FN`g(K%,A%,W%,H%):SYS"DeleteObject",K%:SYS"RtlMoveMemory",A%,A%+54,4*W%*H%
      =A%
      DEFPROCCleanup:PROC`n(3,0):ENDPROC
      DEFFN`m(S%,O%,M%):LOCALA%,I%:A%=FN`ga(LEN$S%,TRUE):FORI%=0TOLEN$S%DIV2-1
        A%?I%=EVAL("&"+MID$($S%,2*I%+1,2)):NEXT
      IFO%>0PROC`d(A%,O%,M%)
      =A%
      DEFPROC`cds(RETURN A%, RETURN B%):LOCALH%,O%
      DIMB%19:!B%=44:B%!4=@vdu%!208:B%!8=@vdu%!212:B%!12=&200001
      SYS"CreateDIBSection",@memhdc%,B%,0,^A%,0,0TOH%:IFH%=0ERROR100,"`cds failed"
      SYS"SelectObject",@memhdc%,H%TOO%:SYS"DeleteObject",O%:CLS
      ENDPROC
      DEFPROC`w:PRIVATEB%,G%,I%,S%,W%:LOCALL%,P%,T%:IFS%=0 S%=FNSYS_NameToAddress("Sleep")
      IFB%=0SYS"timeBeginPeriod",1:B%=1
      IFI%=0PROC`7(I%,G%)
      L%=0:P%=^T%:REPEAT:L%=T%:SYSS%,1:SYSG%,I%,P%:UNTILT%<L%:ENDPROC
      DEFPROC`7(RETURN I%,RETURN G%):LOCALD%,E%,J%,K%,L%
      SYS"LoadLibrary","DDRAW.DLL"TOD%:IFD%=0 ERROR100,"`7 failed"
      SYS"GetProcAddress",D%,"DirectDrawCreateEx"TOE%:DIMJ%19,L%95:J%=J%+3AND-4
      L%=L%+3AND-4:!J%=&15E65EC0:J%!4=&11D23B9C:J%!8=&60002FB9:J%!12=&5BEA9797
      SYSE%,0,^K%,J%,0:L%=!K%:I%=K%:G%=L%!64
      ENDPROC
      DEFFN`l(f$,RETURN X%,RETURN Y%,R%)
      LOCALi{},b{},x%,y%,H%,C%,P%,O%,Q%,T%
      DIMi{a%,b%,c%,d%},T% LOCAL 513
      i.a%=&7BF80980:i.b%=&101ABF32:i.c%=&AA00BB8B:i.d%=&AB0C3000
      SYS"MultiByteToWideChar",0,0,f$,-1,T%,256
      SYS"LoadLibrary","OLEAUT32.DLL"TOO%
      SYS"GetProcAddress",O%,"OleLoadPicturePath"TOQ%:IFQ%=0 THEN=0
      SYSQ%,T%,0,0,0,i{},^P%:IFP%=0 THEN=0
      SYS!(!P%+12),P%,^H%:IFH%=0 THEN=0
      DIMb{T%,W%,H%,B%,P{l&,h&},p{l&,h&},s%}:SYS"GetObject",H%,DIM(b{}),b{}
      x%=b.W%:y%=b.H%:IFX%=0 X%=x%
      IFY%=0 Y%=y%
      IFR%THEN
        IFX%/Y%>x%/y% X%=Y%*x%/y%ELSEY%=X%*y%/x%
      ENDIF
      SYS"CopyImage",H%,0,X%,Y%,0TOC%:SYS"DeleteObject",H%:SYS!(!P%+8),P%:=C%
      DEFFN`g(h%,RETURN D%,RETURN W%,RETURN H%):LOCALB%,S%,R%:DIMB%LOCAL26
      B%=B%+3AND-4:SYS"GetObject",h%,24,B%TOR%
      IFR%=0 ERROR100,"GetObject failed"
      W%=B%!4:H%=B%!8:S%=54+4*W%*H%:IFD%=0DIMD% S%+7:D%=D%+7AND-8
      IFD%=-1 D%=FN`ga(54+4*W%*H%,TRUE)
      $$D%=STRING$(53,CHR$0)
      !D%=19778:D%!2=S%:D%!10=54:D%!14=40:D%!18=W%:D%!22=H%:D%!26=&200001
      SYS"GetDIBits",@memhdc%,h%,0,H%,D%+54,D%+14,0TOR%
      IFR%<>H% ERROR100,"GetDIBits failed"
      =D%
      DEFPROC`n(O%,H%)
      LOCALI%,M%
      M%=20
      PRIVATED%
      IFD%=0THEN
        D%=FN`ga(4*M%,FALSE)
        IFD%=0THENERROR100,GA$+" failed"
        FORI%=0TOM%-1
          D%!(4*I%)=0
        NEXT
      ENDIF
      CASEO%OF
        WHEN1:
          I%=0
          WHILED%!(4*I%)<>0ANDI%<M%
            I%+=1
          ENDWHILE
          D%!(4*I%)=H%
        WHEN2:
          I%=0
          WHILED%!(4*I%)<>H%ANDI%<M%
            I%+=1
          ENDWHILE
          IFI%<M%THEN
            SYSGF$,H%
            D%!(4*I%)=0
          ENDIF
        WHEN3:
          FORI%=0TOM%-1
            IFD%!(4*I%)<>0THEN
              SYSGF$,D%!(4*I%)
            ENDIF
            D%!(4*I%)=0
          NEXT
          SYSGF$,D%
          D%=0
      ENDCASE
      ENDPROC
      DEFFNSYS_NameToAddress(f$):LOCALP%:DIMP%LOCAL5:[OPT 0:CALL f$:]:=P%!-4+P%
      DEFPROC`d(B%,O%,C%):LOCALD%,P%:D%=C%-B%-O%-5:P%=B%+O%+1:!P%=D%:ENDPROC
      DEFFN`ga(S%,F%)
      LOCALA%
      SYSGA$,64,S%TOA%
      IFF%THENPROC`n(1,A%)
      =A%
      DEFPROCFixWindowSize:LOCALW%:SYS"GetWindowLong",@hwnd%,-16TOW%
      SYS"SetWindowLong",@hwnd%,-16,W%AND&FFFAFFFF
      ENDPROC
      DEFPROCurldownload(url$,file$)
      LOCALurlmon%,res%
      SYS"LoadLibrary","urlmon.dll"TOurlmon%
      SYS"GetProcAddress",urlmon%,"URLDownloadToFileA"TO`URLDownloadToFile`
      SYS`URLDownloadToFile`,0,url$,file$,0,0TOres%
      SYS"FreeLibrary",urlmon%
      IFres%ERROR100,"Couldn'tdownload"+url$
      ENDPROC
 
« Last Edit: Nov 29th, 2016, 12:06am by David Williams » User IP Logged

michael
Senior Member
ImageImageImageImage


member is offline

Avatar




PM


Posts: 335
xx Re: Just a spinning "BB4W" graphic
« Reply #1 on: Nov 29th, 2016, 04:12am »

That's pretty cool.
User IP Logged

I like making program generators and like reinventing the wheel
David Williams
Developer

member is offline

Avatar

meh


PM

Gender: Male
Posts: 452
xx Re: Just a spinning "BB4W" graphic
« Reply #2 on: Nov 29th, 2016, 07:23am »

on Nov 29th, 2016, 04:12am, michael wrote:
That's pretty cool.


Thanks. If you replace PROCDisplay(TRUE) with PROCDisplay(0) then it will probably run more smoothly, but the program will gobble up a lot more CPU time.

The bitmap rotation routine 'PlotRotateScaleBilinear' (which, as its name suggests performs bilinear filtering) is actually Richard's work. A superb bit of code!

---

Here's an updated version which some might find more visually interesting:

Code:
      REM Version 2.0 // 29-Nov-2016
      *FLOAT 64
      *ESC OFF
      PROCFixWindowSize
      scrW%=512:scrH%=512:VDU23,22,scrW%;scrH%;8,16,16,0:OFF
      GA$="GlobalAlloc":GF$="GlobalFree"
      PROCInitGLIB(g{},p{})
      ON CLOSE PROCCleanup:QUIT
      ON ERROR PROCCleanup:OSCLI"REFRESH ON":REPORT:PRINT ERL:END
      www$="http://www.proggies.uk/temp/"
      bg%=FNLoadFromNet(www$,"bb4w_2048x2048.jpg"):bgW%=2048:bgH%=2048
      glib%=FNLoadFromNet(www$,"glib_480x128.gif"):glibW%=480:glibH%=128
      SYS p.CopyToAlphaChannel%,glib%,glibW%,glibH%,5
      SYS p.SetGlobalAlpha%,bg%,bgW%,bgH%,4
      SYS p.PremultiplyAlpha%,bg%,bgW%,bgH%
      GetTickCount%=FNSYS_NameToAddress("GetTickCount")
      *REFRESH OFF
      SYSp.BPlot%,g{},glib%,glibW%,glibH%,(scrW%-480)/2,(scrH%-128)/2
      REPEAT
        SYSGetTickCount%TOT%
        angle=360*SIN(T%/11500)*SIN(T%/13200+1.45)
        scale=0.36+ABS(SIN(T%/2000)*SIN(T%/2750+2.0))
        SYSp.PlotRotateScaleBilinear%,g{},bg%,bgW%,bgH%, \
        \ 8*scrW%,8*scrH%,angle*&10000,scale*&10000
        PROCDisplay(0)
        WAIT 1
      UNTIL0
      END
      DEFPROCInitGLIB( RETURN b{}, RETURN p{} )
      LOCALS%,Z%
      DIMb{a%,w%,h%}
      DIMp{CopyToAlphaChannel%,PlotRotateScaleBilinear%,PremultiplyAlpha%,SetGlobalAlpha%,\
      \BPlot%,clipBm%,dibs%}
      PROC`cds(b.a%,p.dibs%)
      b.w%=@vdu%!208:b.h%=@vdu%!212:Z%=FN`ga(4096,TRUE):S%=FN`ga(4096,TRUE)
      $S%="608B5C2424C703FFFFFFFF8B7C24383B7C24280F8DC70000008B74243C3B74242C0F8DB9"
      $S%+="0000008B4C24308B54243483F9007D03F7D99083FA007D03F7DA90F7D93BF90F8E970000"
      $S%+="00F7DA3BF20F8E8D000000F7D9F7DAC70300000000C7430400000000C7430800000000C7"
      $S%+="430C00000000894B10895314897B1889731C8BEF03E93B6C24287E0E2B6C2428296B10C7"
      $S%+="4304FFFFFFFF83FF007D14297B0C017B10C7431800000000C74304FFFFFFFF8BEE03EA3B"
      $S%+="6C242C7E0E2B6C242C296B14C74304FFFFFFFF83FE007D14297308017314C7431C000000"
      $S%+="00C74304FFFFFFFF61C21C0060"
      p.clipBm%=FN`m(S%,0,0)
      $S%="60837C2430040F83530000008B7424280FAF74242C8B7C242433D2837C2430010F843D00"
      $S%+="0000837C2430020F8446000000837C2430030F846C0000008B5C243481E3FF000000C644"
      $S%+="970300F70497FFFFFF007404885C970383C2013BD67CE761C2140033DB8A1C97885C9703"
      $S%+="83C2013BD67CF261C21400BD555505000FB604970FB65C97010FB64C970203C303C10FAF"
      $S%+="C50500000800C1E8148844970383C2013BD67CD861C214000FB604970FB65C97010FB64C"
      $S%+="970269C0F1D2010069DB5A64090069C9B4C8040003C303C1C1E81483D0008844970383C2"
      $S%+="013BD67CCB61C2140000"
      p.CopyToAlphaChannel%=FN`m(S%,0,0)
      $S%="680000B0416A0068DCA54C4168F8C1631ADB44242CDC3424D9FBDC4C2408DB1424D9C9DC"
      $S%+="4C2408DB542404DA742430DB5C240CDA742430DB5C2408595D0F6F2C24585BF7DB0FC4EB"
      $S%+="010FC4E803C1F90CC1FD0C8BC10FAF44240CC1F8109933C22BC28BD88BC50FAF442410C1"
      $S%+="F8109933C22BC203C30FAF442420C1E81083C0068B5C24048B5B043BC372028BC3894424"
      $S%+="1C8BC10FAF442410C1F8109933C22BC28BD88BC50FAF44240CC1F8109933C22BC203C30F"
      $S%+="AF442420C1E81083C0068B5C24048B5B083BC372028BC3894424208BF08B4424188BDEF7"
      $S%+="DB8D1CD88B6C24048B4D082BCEC1E1040BDB790233DB3BD972028BD983E3F08BFB2BD80F"
      $S%+="C4E3010FC4E303C1EF040FAF7D04C1E702037D0033C033DB0FBA64240C00F566D1D80FBA"
      $S%+="64241000F566D1DB0FEFD20FC4D0000FC4D302B8100000000F6ED80F70DBCC8B6C241C8B"
      $S%+="4424148BDDF7DB8D1CD88B4C24048B49042BCDC1E1040BDB790233DB3BD972028BD983E3"
      $S%+="F08BCB2BD80FC4E3000FC4E302897C2418C1E90203F90F6FC40FF5C50FFAC20FC5D8010F"
      $S%+="C5C8030FBFDB0FBFC98B44240C8B542410D1E8D1EA03D803CA8B54241083C1010FBAE11F"
      $S%+="0F94C0D0D03BD10F94C4D0D4C1E0108B54240C83C3010FBAE31F0F94C0D0D03BD30F94C4"
      $S%+="D0D4A9010101010F85B700000083E90183EB010FAFCA03CB8B5C24088D1C8BB9FF000000"
      $S%+="0F6EC90F70C9330F71D0080F70C0A00FEFC10F70F0110F70C0AF0FD5F00FEFC0A9030103"
      $S%+="01750A0F70FE000F60030FE4C7A901030301750E0F70FE550F604B040FE4CF0FFDC1A903"
      $S%+="010103750E0F70FEAA0F600C930FE4CF0FFDC1A901030103750F0F70FEFF0F604C93040F"
      $S%+="E4CF0FFDC183C1010F6EC90F70C9000F70F0FF0F6FF90F71D6080FF9FE0F60370F71D608"
      $S%+="0FD5FE0FDDC70F71D0080F67C00F7E070FFDE383C70483ED010F85D7FEFFFF8B7C24188B"
      $S%+="5C24048B5B04C1E30203FBB8100000000F6EC00F70C0330FFDE04E0F8572FEFFFF0F77C2"
      $S%+="200000"
      p.PlotRotateScaleBilinear%=FN`m(S%,0,0)
      $S%="609BDBE38B44242433FF8B7424280FAF74242C0FB61CB8530FB65CB801530FB65CB80253"
      $S%+="0FB65CB8035368FF000000DB442404DA3424DB442408D8C9DB5C2408DB44240CD8C9DB5C"
      $S%+="240CDB442410DEC9DB5C24108B5C24088B4C240C8B542410885CB802884CB8018814B883"
      $S%+="C414473BFE7CA061C20C0000"
      p.PremultiplyAlpha%=FN`m(S%,0,0)
      $S%="608BEC8B5D248B453083F8007D0233C03DFF0000007E05B8FF0000008B4D280FAF4D2C33"
      $S%+="D288449303423BD17CF761C2100000"
      p.SetGlobalAlpha%=FN`m(S%,0,0)
      $S%="608BEC81EC800000008B75248BC4FF7538FF7534FF7530FF752CFF7608FF760450E85FFE"
      $S%+="FFFFF70424FFFFFFFF0F85570000008B552C89542434C1642434020FAF5424080354240C"
      $S%+="C1E2020355288B7E04897C2438C1642438020FAF7C241C037C2418C1E702033E8BF28B5C"
      $S%+="24108B4424348B5424388B6C241456578BCBFCF3A55F5E03F003FA4D7FF081C480000000"
      $S%+="61C218008B"
      p.BPlot% = FN`m(S%, 33, p.clipBm%)
      Z%=FN`ga(4096,TRUE)
      ENDPROC
      DEFPROCDisplay(W%):PRIVATEI%:IFI%=0 I%=FNSYS_NameToAddress("InvalidateRect")
      SYSI%,@hwnd%,0,0
      *REFRESH
      ENDPROC
      DEFFNLoadImg(p$,A%):LOCALK%,X%,Y%,W%,H%,M%:X%=0:Y%=0:K%=FN`l(p$,X%,Y%,0)
      IFK%=0ERROR100,"LoadImg failed"
      A%=FN`g(K%,A%,W%,H%):SYS"DeleteObject",K%:SYS"RtlMoveMemory",A%,A%+54,4*W%*H%
      =A%
      DEFPROCCleanup:PROC`n(3,0):ENDPROC
      DEFFN`m(S%,O%,M%):LOCALA%,I%:A%=FN`ga(LEN$S%,TRUE):FORI%=0TOLEN$S%DIV2-1
        A%?I%=EVAL("&"+MID$($S%,2*I%+1,2)):NEXT
      IFO%>0PROC`d(A%,O%,M%)
      =A%
      DEFPROC`cds(RETURN A%, RETURN B%):LOCALH%,O%
      DIMB%19:!B%=44:B%!4=@vdu%!208:B%!8=@vdu%!212:B%!12=&200001
      SYS"CreateDIBSection",@memhdc%,B%,0,^A%,0,0TOH%:IFH%=0ERROR100,"`cds failed"
      SYS"SelectObject",@memhdc%,H%TOO%:SYS"DeleteObject",O%:CLS
      ENDPROC
      DEFFN`l(f$,RETURN X%,RETURN Y%,R%)
      LOCALi{},b{},x%,y%,H%,C%,P%,O%,Q%,T%
      DIMi{a%,b%,c%,d%},T% LOCAL 513
      i.a%=&7BF80980:i.b%=&101ABF32:i.c%=&AA00BB8B:i.d%=&AB0C3000
      SYS"MultiByteToWideChar",0,0,f$,-1,T%,256
      SYS"LoadLibrary","OLEAUT32.DLL"TOO%
      SYS"GetProcAddress",O%,"OleLoadPicturePath"TOQ%:IFQ%=0 THEN=0
      SYSQ%,T%,0,0,0,i{},^P%:IFP%=0 THEN=0
      SYS!(!P%+12),P%,^H%:IFH%=0 THEN=0
      DIMb{T%,W%,H%,B%,P{l&,h&},p{l&,h&},s%}:SYS"GetObject",H%,DIM(b{}),b{}
      x%=b.W%:y%=b.H%:IFX%=0 X%=x%
      IFY%=0 Y%=y%
      IFR%THEN
        IFX%/Y%>x%/y% X%=Y%*x%/y%ELSEY%=X%*y%/x%
      ENDIF
      SYS"CopyImage",H%,0,X%,Y%,0TOC%:SYS"DeleteObject",H%:SYS!(!P%+8),P%:=C%
      DEFFN`g(h%,RETURN D%,RETURN W%,RETURN H%):LOCALB%,S%,R%:DIMB%LOCAL26
      B%=B%+3AND-4:SYS"GetObject",h%,24,B%TOR%
      IFR%=0 ERROR100,"GetObject failed"
      W%=B%!4:H%=B%!8:S%=54+4*W%*H%:IFD%=0DIMD% S%+7:D%=D%+7AND-8
      IFD%=-1 D%=FN`ga(54+4*W%*H%,TRUE)
      $$D%=STRING$(53,CHR$0)
      !D%=19778:D%!2=S%:D%!10=54:D%!14=40:D%!18=W%:D%!22=H%:D%!26=&200001
      SYS"GetDIBits",@memhdc%,h%,0,H%,D%+54,D%+14,0TOR%
      IFR%<>H% ERROR100,"GetDIBits failed"
      =D%
      DEFPROC`n(O%,H%)
      LOCALI%,M%
      M%=20
      PRIVATED%
      IFD%=0THEN
        D%=FN`ga(4*M%,FALSE)
        IFD%=0THENERROR100,GA$+" failed"
        FORI%=0TOM%-1
          D%!(4*I%)=0
        NEXT
      ENDIF
      CASEO%OF
        WHEN1:
          I%=0
          WHILED%!(4*I%)<>0ANDI%<M%
            I%+=1
          ENDWHILE
          D%!(4*I%)=H%
        WHEN2:
          I%=0
          WHILED%!(4*I%)<>H%ANDI%<M%
            I%+=1
          ENDWHILE
          IFI%<M%THEN
            SYSGF$,H%
            D%!(4*I%)=0
          ENDIF
        WHEN3:
          FORI%=0TOM%-1
            IFD%!(4*I%)<>0THEN
              SYSGF$,D%!(4*I%)
            ENDIF
            D%!(4*I%)=0
          NEXT
          SYSGF$,D%
          D%=0
      ENDCASE
      ENDPROC
      DEFFNSYS_NameToAddress(f$):LOCALP%:DIMP%LOCAL5:[OPT 0:CALL f$:]:=P%!-4+P%
      DEFPROC`d(B%,O%,C%):LOCALD%,P%:D%=C%-B%-O%-5:P%=B%+O%+1:!P%=D%:ENDPROC
      DEFFN`ga(S%,F%)
      LOCALA%
      SYSGA$,64,S%TOA%
      IFF%THENPROC`n(1,A%)
      =A%
      DEFPROCFixWindowSize:LOCALW%:SYS"GetWindowLong",@hwnd%,-16TOW%
      SYS"SetWindowLong",@hwnd%,-16,W%AND&FFFAFFFF
      ENDPROC
      DEFFNLoadFromNet(url$,file$):LOCALA%,F%:F%=OPENIN(@tmp$+file$)
      IF F%=0 PROCurldownload(url$+file$,@tmp$+file$)
      CLOSE#F%
      A%=FNLoadImg(@tmp$+file$,-1):=A%
      DEFPROCurldownload(url$,file$)
      LOCALurlmon%,res%
      SYS"LoadLibrary","urlmon.dll"TOurlmon%
      SYS"GetProcAddress",urlmon%,"URLDownloadToFileA"TO`URLDownloadToFile`
      SYS`URLDownloadToFile`,0,url$,file$,0,0TOres%
      SYS"FreeLibrary",urlmon%
      IFres%ERROR100,"Couldn't download "+url$
      ENDPROC
 



David.
--
« Last Edit: Nov 29th, 2016, 08:23am by David Williams » User IP Logged

David Williams
Developer

member is offline

Avatar

meh


PM

Gender: Male
Posts: 452
xx Re: Just a spinning "BB4W" graphic
« Reply #3 on: Nov 29th, 2016, 10:36am »

Here's a full-screen version (uses DirectX 9) - zipped EXE only:

http://www.proggies.uk/temp/blurryrotatingbb4wdx9fs.zip (right-click then 'Save As...')


You will probably need to give Windows permission to run the program. I scanned it with 'F-Secure SAFE' prior to uploading the file.


David.
--
User IP Logged

michael
Senior Member
ImageImageImageImage


member is offline

Avatar




PM


Posts: 335
question Re: Just a spinning "BB4W" graphic
« Reply #4 on: Nov 29th, 2016, 1:47pm »

What is this:

$S%

It poses as a string $ but has %

Is it isolating the numbers and letters?



User IP Logged

I like making program generators and like reinventing the wheel
Zaphod
Guest
xx Re: Just a spinning "BB4W" graphic
« Reply #5 on: Nov 29th, 2016, 4:26pm »

The answer is here!
http://bbcbasic.co.uk/bbcwin/manual/bbcwin2.html#dollar
User IP Logged

Pages: 1  Notify Send Topic Print
« Previous Topic | Next Topic »

| |

This forum powered for FREE by Conforums ©
Terms of Service | Privacy Policy | Conforums Support | Parental Controls