cursor from datasection

Just starting out? Need help? Post your questions and find answers here.
mestnyi
Addict
Addict
Posts: 1098
Joined: Mon Nov 25, 2013 6:41 am

cursor from datasection

Post by mestnyi »

How do I load a cursor from a file and from memory?

Code: Select all

Global Window_0

Global Image_0

Global Img_0

UsePNGImageDecoder()

 ;Img_0 = CatchImage( #PB_Any, ?cross_bin, ?cross_bin_end-?cross_bin )
 Img_0 = CatchImage( #PB_Any, ?cross_cur, ?cross_cur_end-?cross_cur )
; Img_0 = CatchImage( #PB_Any, ?copy, 530 )

 Debug Img_0
 
Procedure OpenWindow_0()
  Window_0 = OpenWindow(#PB_Any, 0, 0, 600, 400, "", #PB_Window_SystemMenu)
  Image_0 = ImageGadget(#PB_Any, 150, 190, 32, 32, ImageID(Img_0))
EndProcedure

Procedure Window_0_Events(event)
  Select event
    Case #PB_Event_CloseWindow
      ProcedureReturn #False
      
    Case #PB_Event_Menu
      Select EventMenu()
      EndSelect
      
    Case #PB_Event_Gadget
      Select EventGadget()
      EndSelect
  EndSelect
  ProcedureReturn #True
EndProcedure


OpenWindow_0()

DataSection
  cross_bin: 
  IncludeBinary "/Users/as/Documents/GitHub/widget/include/cursors/Cross.cur"
  cross_bin_end:
EndDataSection

DataSection
  copy: ; memory_size - ( 530 )
  Data.q $0A1A0A0D474E5089,$524448490D000000,$1A00000010000000,$1461140000000408,$4D4167040000008C,$61FC0B8FB1000041,
         $5248632000000005,$800000267A00004D,$80000000FA000084,$EA000030750000E8,$170000983A000060,$0000003C51BA9C70,
         $87FF0044474B6202,$7009000000BFCC8F,$00C8000000735948,$ADE7FA6300C80000,$454D497407000000,$450A0F0B1308E307,
         $63100000000C6AC0,$0020000000764E61,$0002000000200000,$000C8D7E6F010000,$2854414449E90000,$1040C20A31D27DCF,
         $8B08226C529FD005,$961623685304458D,$05E8A288B1157A4A,$785858208E413C44,$AD03C2DE8803C505,$74CCDD93664D9893,
         $5C25206CCCECC7D9,$0AF51740A487B038,$E4950624ACF41B10,$0B03925602882A0F,$504520607448C0E1,$714E75682A0F7A22,
         $1EC4707FBC91940F,$EF1F26F801E80C33,$6FE840E84635C148,$47D13D78D54EC071,$5BDF86398A726F4D,$7DD0539F268C6356,
         $39B40B3759101A3E,$2EEB2D02D7DBC170,$49172CA44A415AD2,$52B82E69FF1E0AC0,$CC0D0D97E9B7299E,$046FA509CA4B09C0,
         $CB03993630382B86,$5E4840261A49AA98,$D3951E21331B30CF,$262C1B127F8F8BD3,$250000007DB05216,$6574616474584574,
         $006574616572633A,$2D38302D39313032,$35313A3131543931,$303A30302B37303A,$000000EED7F72530,$7461647458457425,
         $796669646F6D3A65,$38302D3931303200,$313A31315439312D,$3A30302B35303A35,$00007B7E35C33030,$42AE444E45490000
  Data.b $60,$82
  copy_end:
EndDataSection

DataSection
  cross_cur: 
    ; size : 4286 bytes
    Data.q $2020000100020000,$10A8000F00100000,$0028000000160000,$0040000000200000,$0000002000010000,$0000000010800000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000190000000000,$0000220000002200,$0000000000001900
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000420000001900,$0000570000005700,$0000190000004200,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$FFFF000000000000,$FFFFFFFFFFFFFFFF
    Data.q $0000FFFFFFFFFFFF,$0000220000005800,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$FFFF000000000000,$0000FF000000FFFF,$0000FFFFFFFFFF00,$0000230000005B00
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $FFFF000000000000,$0000FF000000FFFF,$0000FFFFFFFFFF00,$0000230000005B00,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$FFFF000000000000,$0000FF000000FFFF
    Data.q $0000FFFFFFFFFF00,$0000270000005D00,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000190000000000,$0000230000002200,$FFFF270000002300,$0000FF000000FFFF,$0000FFFFFFFFFF00,$00003D0000006500
    Data.q $0000230000002700,$0000220000002300,$0000000000001900,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000420000001900,$00005B0000005700
    Data.q $FFFF5C0000005B00,$0000FF000000FFFF,$0000FFFFFFFFFF00,$0000650000007500,$00005B0000005C00,$0000570000005B00
    Data.q $0000190000004200,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$FFFF000000000000,$FFFFFFFFFFFFFFFF,$FFFFFFFFFFFFFFFF,$FFFFFFFFFFFFFFFF,$0000FF000000FFFF
    Data.q $FFFFFFFFFFFFFF00,$FFFFFFFFFFFFFFFF,$FFFFFFFFFFFFFFFF,$0000FFFFFFFFFFFF,$0000220000005800,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$FFFF000000000000
    Data.q $0000FF000000FFFF,$0000FF000000FF00,$0000FF000000FF00,$0000FF000000FF00,$0000FF000000FF00,$0000FF000000FF00
    Data.q $0000FF000000FF00,$0000FFFFFFFFFF00,$0000220000005800,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$FFFF000000000000,$0000FF000000FFFF,$0000FF000000FF00
    Data.q $0000FF000000FF00,$0000FF000000FF00,$0000FF000000FF00,$0000FF000000FF00,$0000FF000000FF00,$0000FFFFFFFFFF00
    Data.q $0000190000004200,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$FFFF000000000000,$FFFFFFFFFFFFFFFF,$FFFFFFFFFFFFFFFF,$FFFFFFFFFFFFFFFF,$0000FF000000FFFF
    Data.q $FFFFFFFFFFFFFF00,$FFFFFFFFFFFFFFFF,$FFFFFFFFFFFFFFFF,$0000FFFFFFFFFFFF,$0000000000001900,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$FFFF000000000000,$0000FF000000FFFF,$0000FFFFFFFFFF00,$0000270000005D00
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $FFFF000000000000,$0000FF000000FFFF,$0000FFFFFFFFFF00,$0000230000005B00,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$FFFF000000000000,$0000FF000000FFFF
    Data.q $0000FFFFFFFFFF00,$0000230000005B00,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$FFFF000000000000,$0000FF000000FFFF,$0000FFFFFFFFFF00,$0000220000005800
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $FFFF000000000000,$0000FF000000FFFF,$0000FFFFFFFFFF00,$0000190000004200,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$FFFF000000000000,$FFFFFFFFFFFFFFFF
    Data.q $0000FFFFFFFFFFFF,$0000000000001900,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$FFFF000000000000,$FFFFFFFFFFFFFFFF,$FFFFFFFFFFFFFFFF
    Data.q $FEFFFFFFFFFFFFFF,$FCFFFF0FFCFFFF1F,$FCFFFF0FFCFFFF0F,$80FFFF0FFCFFFF0F,$00FF3F0000FF7F00,$00FF3F0000FF3F00
    Data.q $FCFF7F0000FF3F00,$FCFFFF0FFCFFFF0F,$FCFFFF0FFCFFFF0F,$FFFFFF1FFCFFFF0F,$FFFFFFFFFFFFFFFF,$FFFFFFFFFFFFFFFF
    Data.q $FFFFFFFFFFFFFFFF
    Data.b $FF,$FF,$FF,$FF,$FF,$FF
  cross_cur_end:
EndDataSection
Repeat 
  
Until WaitWindowEvent() = #PB_Event_CloseWindow 
User avatar
Mijikai
Addict
Addict
Posts: 1517
Joined: Sun Sep 11, 2016 2:17 pm

Re: cursor from datasection

Post by Mijikai »

Edit: this doesnt work with images but it shows how to set the Cursor sith SetClassLongPtr_().

If you store the cursor as image u can give this a try (Windows only):

Code: Select all

;Note:
;#GCLP_HCURSOR = -12

Procedure.i CatchCursor(Window.i,*Buffer)
  Protected img.i
  Static old.i
  If Window And *Buffer
    img = CatchImage(#PB_Any,*Buffer)
    If img
      SetClassLongPtr_(WindowID(Window),-12,ImageID(img))
      If GetLastError_() = #ERROR_SUCCESS
        If old
          FreeImage(old)
        EndIf
        old = img
        ProcedureReturn #True
      EndIf
      FreeImage(img)
    EndIf
  EndIf
  ProcedureReturn #False
EndProcedure
Last edited by Mijikai on Fri Apr 08, 2022 12:31 pm, edited 1 time in total.
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4946
Joined: Sun Apr 12, 2009 6:27 am

Re: cursor from datasection

Post by RASHAD »

Code: Select all

DataSection
  cur:
    IncludeBinary "d:\wait_r.cur"
  curend:
EndDataSection


If CreateFile(0, GetTemporaryDirectory()+"cur.bin")
  WriteData(0, ?cur, ?curend-?cur+8)
  CloseFile(0)
EndIf

OpenWindow(0,0,0,400,400,"",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
iHnd=LoadImage_(0,GetTemporaryDirectory()+"cur.bin",#IMAGE_CURSOR,32,32,$80|#LR_LOADFROMFILE)
ButtonImageGadget(0,10,10,64,64,iHnd,#PB_Image_Border)
Repeat
  Select WaitWindowEvent()
      
    Case #PB_Event_CloseWindow
      Quit = 1
      
  EndSelect 
  
Until Quit = 1
End
Egypt my love
breeze4me
Enthusiast
Enthusiast
Posts: 633
Joined: Thu Mar 09, 2006 9:24 am
Location: S. Kor

Re: cursor from datasection

Post by breeze4me »

Here is an example of loading an embedded cursor file in two ways. (Windows only)
By the way, it would be easier to include the cursor file in the resource section and use it.

Edit:
The method 2 doesn't work properly. Sorry. :oops:

Edit 2:
Fixed the method 2.

Edit 3:
Fixed the method 1.

Code: Select all

Structure ICONDIRENTRY
  bWidth.a
  bHeight.a
  bColorCount.a
  bReserved.a
  StructureUnion
    wPlanes.w
    XHotspot.w
  EndStructureUnion
  StructureUnion
    wBitCount.w
    YHotspot.w
  EndStructureUnion
  dwBytesInRes.l
  dwImageOffset.l
EndStructure

Structure ICONDIR
  idReserved.w
  idType.w
  idCount.w
  idEntries.ICONDIRENTRY[0]
EndStructure


;Method 1

Global hCur1

Define *m.ICONDIR = ?cross_cur
Define *m.ICONDIR = ?label_wait_r_cur

File$ = OpenFileRequester("Select a file", "C:\Windows\Cursors\", "Cursor (*.cur)|*.cur|All files (*.*)|*.*", 0)
If File$ And FileSize(File$) > 0
  If ReadFile(0, File$)
    *m = AllocateMemory(Lof(0))
    If *m
      ReadData(0, *m, Lof(0))
    EndIf
    CloseFile(0)
  EndIf
Else
  End
EndIf

Debug "The number of images = " + *m\idCount

If *m\idCount <= 0
  End
EndIf


Index = 0

Define *bm.ICONIMAGE = *m + *m\idEntries[Index]\dwImageOffset

If *bm\icHeader\biSize = SizeOf(BITMAPINFOHEADER) And *bm\icHeader\biCompression = #BI_RGB   ; it's an uncompressed bmp image.
  
  If *bm\icHeader\biHeight < 0   ; top-down image is not supported.
    End
  EndIf
  
  tmp.a = 256 - *m\idEntries[Index]\bHeight    ; if *m\idEntries[Index]\bHeight = 0, set EntryHeight = 256.  the others are the same values.(EntryHeight = *m\idEntries[Index]\bHeight)
  EntryHeight = 256 - tmp
  
  tmp.a = 256 - *m\idEntries[Index]\bWidth
  EntryWidth = 256 - tmp
  
  If *bm\icHeader\biSizeImage
    ColorBitmapSize = *bm\icHeader\biSizeImage
  Else
    ColorBitmapSize = ((((EntryWidth * *bm\icHeader\biBitCount) + 31) & ~31) >> 3) * EntryHeight
  EndIf
  
  If *bm\icHeader\biClrUsed > 0
    PaletteSize = 4 * *bm\icHeader\biClrUsed  ;SizeOf(RGBQUAD) = 4
  Else
    If *bm\icHeader\biBitCount < 16
      PaletteSize = 4 * Pow(2, *bm\icHeader\biBitCount)
    EndIf
  EndIf
  
  If *m\idEntries[Index]\dwBytesInRes - *bm\icHeader\biSize - PaletteSize > ColorBitmapSize
    ExistMaskData = 1
  EndIf
  
  *BitmapData = *bm + 40 + PaletteSize   ;SizeOf(BITMAPINFOHEADER) = 40
  MaskBitsSize = (((EntryWidth + 31) & ~31) >> 3) * EntryHeight
  
  If EntryHeight = Abs(*bm\icHeader\biHeight) / 2
    *bm\icHeader\biHeight / 2
  EndIf
  
  Define *bmiMask.BITMAPINFO
  Define CursorInfo.ICONINFO
  
  CursorInfo\fIcon = 0    ;create cursor
  CursorInfo\xHotspot = *m\idEntries[Index]\XHotspot
  CursorInfo\yHotspot = *m\idEntries[Index]\YHotspot
  
  hbmColor = CreateDIBSection_(0, *bm, #DIB_RGB_COLORS, @*Bits, 0, 0)
  If hbmColor
    SetDIBits_(0, hbmColor, 0, EntryHeight, *BitmapData, *bm, #DIB_RGB_COLORS)
    
    If ExistMaskData   ; *bm\icHeader\biBitCount < 16
      
      ;create mask image.
      *bmiMask = AllocateMemory(SizeOf(BITMAPINFOHEADER) + 8)
      If *bmiMask
        With *bmiMask
          \bmiHeader\biSize = 40
          \bmiHeader\biWidth = EntryWidth
          \bmiHeader\biHeight = EntryHeight
          \bmiHeader\biPlanes = 1
          \bmiHeader\biBitCount = 1
          \bmiHeader\biCompression = #BI_RGB
          \bmiHeader\biSizeImage = MaskBitsSize   ;or 0 ??
          ;\bmiHeader\biXPelsPerMeter = 0
          ;\bmiHeader\biYPelsPerMeter = 0
          \bmiHeader\biClrUsed = 0  ;or 2
          \bmiHeader\biClrImportant = 0
          
          \bmiColors[0]\rgbBlue = 0
          \bmiColors[0]\rgbGreen= 0
          \bmiColors[0]\rgbRed = 0
          \bmiColors[0]\rgbReserved = 0
          
          \bmiColors[1]\rgbBlue = 255
          \bmiColors[1]\rgbGreen= 255
          \bmiColors[1]\rgbRed = 255
          \bmiColors[1]\rgbReserved = 0
        EndWith
        
        hbmMask = CreateDIBSection_(0, *bmiMask, #DIB_RGB_COLORS, @*Bits, 0, 0)
        If hbmMask
          SetDIBits_(0, hbmMask, 0, EntryHeight, *BitmapData + ColorBitmapSize, *bmiMask, #DIB_RGB_COLORS)
          CursorInfo\hbmMask = hbmMask
        EndIf
        
        FreeMemory(*bmiMask)
      EndIf
      
    Else
      CursorInfo\hbmMask = hbmColor
    EndIf
    
    ;If *bm\icHeader\biBitCount < 16    ;PaletteSize > 0
    If *bm\icHeader\biBitCount < 24    ;PaletteSize > 0
      ImgColor = CreateImage(#PB_Any, EntryWidth, EntryHeight)
      If ImgColor
        hdcDst = StartDrawing(ImageOutput(ImgColor))
        If hdcDst
          StretchDIBits_(hdcDst, 0, 0, EntryWidth, EntryHeight, 0, 0, EntryWidth, EntryHeight, *BitmapData, *bm, #DIB_RGB_COLORS, #SRCCOPY)
          
;           hdc = CreateCompatibleDC_(hdcDst)
;           If hdc
;             old = SelectObject_(hdc, hbmColor)
;             BitBlt_(hdcDst, 0, 0, EntryWidth, EntryHeight, hdc, 0, 0, #SRCCOPY)
;             SelectObject_(hdc, old)
;             DeleteDC_(hdc)
;           EndIf
          StopDrawing()
          
          CursorInfo\hbmColor = ImageID(ImgColor)
        EndIf
      EndIf
    Else
      CursorInfo\hbmColor = hbmColor
    EndIf
    
    If CursorInfo\hbmMask ;And CursorInfo\hbmColor
      hCur1 = CreateIconIndirect_(CursorInfo)
      Debug "Cursor handle: " + hCur1
    EndIf
    
    If ImgColor And IsImage(ImgColor)
      FreeImage(ImgColor)
    EndIf
    
    DeleteObject_(hbmMask)
    DeleteObject_(hbmColor)
  EndIf
EndIf


;Method 2
; https://www.purebasic.fr/english/viewtopic.php?p=582896#p582896



If CreateImage(0, *bm\icHeader\biWidth, *bm\icHeader\biWidth, 24, #Gray)
  hdc = StartDrawing(ImageOutput(0))
  If hdc
    If hCur1
      DrawIconEx_(hdc, 0, 0, hCur1, 0, 0, 0, 0, #DI_IMAGE | #DI_MASK)
    EndIf
    StopDrawing()
  EndIf
EndIf

Procedure OpenWindow_0()
  Window_0 = OpenWindow(#PB_Any, 300, 300, 650, 400, "", #PB_Window_SystemMenu)
  Image_0 = ImageGadget(#PB_Any, 10, 50, 0, 0, 0)
  If IsImage(0)
    SetGadgetState(Image_0, ImageID(0))
  EndIf
  
  CanvasGadget(1, 200, 50, 400, 200)
  If StartDrawing(CanvasOutput(1))
    DrawingMode(#PB_2DDrawing_Default)
    Box(200, 0, 200, 200, #Black)
    StopDrawing()
  EndIf
  
  SetGadgetAttribute(1, #PB_Canvas_CustomCursor, hCur1)
EndProcedure

OpenWindow_0()

Repeat
  e = WaitWindowEvent() 
  If e = #PB_Event_Gadget And GadgetType(EventGadget()) = #PB_GadgetType_Canvas
    If EventType() = #PB_EventType_LeftButtonDown Or (EventType() = #PB_EventType_MouseMove And GetGadgetAttribute(EventGadget(), #PB_Canvas_Buttons) & #PB_Canvas_LeftButton)
      x = GetGadgetAttribute(EventGadget(), #PB_Canvas_MouseX)
      y = GetGadgetAttribute(EventGadget(), #PB_Canvas_MouseY)
      
      If StartDrawing(CanvasOutput(EventGadget()))
        Circle(x, y, 1, RGB(Random(255), Random(255), Random(255)))
        StopDrawing()
      EndIf
    EndIf
  EndIf    
Until e = #PB_Event_CloseWindow

DestroyIcon_(hCur1)


DataSection
  label_wait_r_cur:
  ;- "Z:\wait_r.cur"   Size: 8774 bytes
  ;{
  Data.q $8080000500020000, $1030000200000002, $6060000000560000, $0930000200000002, $4040000010860000, $0430000100000002, $3030000019B60000, $0330000100000002
  Data.q $202000001DE60000, $0130000000000002, $0028000021160000, $0100000000800000, $0000000100010000, $0000000008000000, $0000000000000000, $0000000000000000
  Data.q $000000FFFFFF0000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000
  Data.q $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000
  Data.q $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000
  Data.q $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000
  Data.q $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000
  Data.q $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000
  Data.q $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000
  Data.q $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000
  Data.q $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000
  Data.q $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000
  Data.q $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000
  Data.q $0000000000000000, $0000000000800100, $0000000000000000, $0000000000C00100, $0000000000000000, $0000000000F00300, $0000000000000000, $00000000003C0300
  Data.q $0000000000000000, $00000000800F0700, $0000000000000000, $0000000080030600, $0000000000000000, $0000000080030E00, $0000000000000000, $0000000000030C00
  Data.q $0000000000000000, $0000000000071C00, $0000000000000000, $0000000000061800, $0000000000000000, $00000000000E3800, $0000000000000000, $00000000000C3000
  Data.q $0000000000000000, $FFFFFF7F001C7000, $0000000000000080, $FFFFFF7F00186000, $0000000000000080, $070000780038E000, $0080000000000080, $070000780030C000
  Data.q $00C0000000000080, $070000780070C001, $00E0000000000080, $FFFFFF7F00608001, $00F0000000000080, $FFFFFF7F00E08003, $00F8000000000080, $C6CCCC1800C00003
  Data.q $00DC000000000000, $C6CCCC1800C00107, $00CE000000000000, $0633331800800106, $00C7000000000000, $063333180080030E, $80C3000000000000, $06CC0C180000030C
  Data.q $C0C1000000000000, $06CC0C180000071C, $E0C0000000000000, $0630031800000618, $70C0000000000000, $0630031800000E38, $38C0000000000000, $06C0001800000C30
  Data.q $1CC0000000000000, $06C0001800001C70, $0EC0000000000000, $0E00001C00001860, $07C0000000000000, $1C00000E000038E0, $03C0000000000000, $38000007000030C0
  Data.q $01C0000000000000, $70008003000070C0, $00C0000000000000, $E0C0C00100006000, $00C0000000000000, $C0C1E000FFFFFF00, $00C0000000000000, $80037000FFFFFF00
  Data.q $00C0000000000000, $000738000E000000, $00C0000000000000, $000618001C000000, $00C0000000000000, $0006180038000000, $00C0000000000000, $0006180070000000
  Data.q $00C0000000000000, $00061800E0000000, $00C0000000000000, $00061800C0010000, $00C0000000000000, $0006180080030000, $00C0000000000000, $0006180000070000
  Data.q $00C0000000000000, $00C61800000E0000, $00C0000000000000, $00C73800001C0000, $00C0000000000000, $8003700000380000, $00C0000000000000, $C001E00000700000
  Data.q $00C0000000000000, $E000C00100E00000, $00C0000000000000, $70C0800300C00100, $00C0000000000000, $38C0000700800300, $00C0000000000000, $1C00030E00000700
  Data.q $00C0000000000000, $0E00031C00000E00, $00C0000000000000, $06C00C1800001C00, $00C0000000000000, $06C00C1800003800, $00C0000000000000, $0633331800007000
  Data.q $00C0000000000000, $063333180000E000, $00C0000000000000, $060000180000C001, $00C0000000000000, $0600001800008003, $00C0000000000000, $0600001800000007
  Data.q $00C0000000000000, $060000180000000E, $00C0000000000000, $060000180000001C, $00C0000000000000, $0600001800000038, $00C0000000000000, $FFFFFF7F00000070
  Data.q $00C0000000000080, $FFFFFF7F000000E0, $01C0000000000080, $07000078000000C0, $03C0000000000080, $0700007800000080, $07C0000000000080, $0700007800000000
  Data.q $0EC0000000000080, $FFFFFF7F00000000, $1CC0000000000080, $FFFFFF7F00000000, $38C0000000000080, $0000000000000000, $70C0000000000000, $0000000000000000
  Data.q $E0C0000000000000, $0000000000000000, $C0C1000000000000, $0000000000000000, $80C3000000000000, $0000000000000000, $00C7000000000000, $0000000000000000
  Data.q $00CE000000000000, $0000000000000000, $00DC000000000000, $0000000000000000, $00F8000000000000, $0000000000000000, $00F0000000000000, $0000000000000000
  Data.q $00E0000000000000, $0000000000000000, $00C0000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000
  Data.q $FFFF000000000000, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF
  Data.q $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF
  Data.q $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF
  Data.q $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF
  Data.q $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF
  Data.q $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF
  Data.q $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF
  Data.q $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF
  Data.q $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF
  Data.q $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF
  Data.q $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF
  Data.q $FFFFFFFFFFFFFFFF, $FFFFFFFFFF7FFEFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFF3FFEFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFF0FFCFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFF03FCFF
  Data.q $FFFFFFFFFFFFFFFF, $FFFFFFFF7F00F8FF, $FFFFFFFFFFFFFFFF, $FFFFFFFF7F00F8FF, $FFFFFFFFFFFFFFFF, $FFFFFFFF7F00F0FF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFF00F0FF
  Data.q $FFFFFFFFFFFFFFFF, $FFFFFFFFFF00E0FF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFF01E0FF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFF01C0FF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFF03C0FF
  Data.q $FFFFFFFFFFFFFFFF, $00000080FF0380FF, $FFFFFFFFFFFFFF7F, $00000080FF0780FF, $FFFFFFFFFFFFFF7F, $00000080FF0700FF, $FF7FFFFFFFFFFF7F, $00000080FF0F00FF
  Data.q $FF3FFFFFFFFFFF7F, $00000080FF0F00FE, $FF1FFFFFFFFFFF7F, $00000080FF1F00FE, $FF0FFFFFFFFFFF7F, $00000080FF1F00FC, $FF07FFFFFFFFFF7F, $010000E0FF3F00FC
  Data.q $FF03FFFFFFFFFFFF, $010000E0FF3F00F8, $FF01FFFFFFFFFFFF, $010000E0FF7F00F8, $FF00FFFFFFFFFFFF, $010000E0FF7F00F0, $7F00FFFFFFFFFFFF, $010000E0FFFF00F0
  Data.q $3F00FFFFFFFFFFFF, $010000E0FFFF00E0, $1F00FFFFFFFFFFFF, $010000E0FFFF01E0, $0F00FFFFFFFFFFFF, $010000E0FFFF01C0, $0700FFFFFFFFFFFF, $010000E0FFFF03C0
  Data.q $0300FFFFFFFFFFFF, $010000E0FFFF0380, $0100FFFFFFFFFFFF, $010000E0FFFF0780, $0000FFFFFFFFFFFF, $030000F0FFFF0700, $0000FFFFFFFFFFFF, $070000F8FFFF0F00
  Data.q $0000FFFFFFFFFFFF, $0F0000FCFFFF0F00, $0000FFFFFFFFFFFF, $1F0000FEFFFF1F00, $0000FFFFFFFFFFFF, $3F0000FF00000000, $0000FFFFFFFFFFFF, $7F0080FF00000000
  Data.q $0000FFFFFFFFFFFF, $FF00C0FF01000000, $0000FFFFFFFFFFFF, $FF01E0FF03000000, $0000FFFFFFFFFFFF, $FF01E0FF07000000, $0000FFFFFFFFFFFF, $FF01E0FF0F000000
  Data.q $0000FFFFFFFFFFFF, $FF01E0FF1F000000, $0000FFFFFFFFFFFF, $FF01E0FF3F000000, $0000FFFFFFFFFFFF, $FF01E0FF7F000000, $0000FFFFFFFFFFFF, $FF01E0FFFF000000
  Data.q $0000FFFFFFFFFFFF, $FF01E0FFFF010000, $0000FFFFFFFFFFFF, $FF00C0FFFF030000, $0000FFFFFFFFFFFF, $7F0080FFFF070000, $0000FFFFFFFFFFFF, $3F0000FFFF0F0000
  Data.q $0000FFFFFFFFFFFF, $1F0000FEFF1F0000, $0000FFFFFFFFFFFF, $0F0000FCFF3F0000, $0000FFFFFFFFFFFF, $070000F8FF7F0000, $0000FFFFFFFFFFFF, $030000F0FFFF0000
  Data.q $0000FFFFFFFFFFFF, $010000E0FFFF0100, $0000FFFFFFFFFFFF, $010000E0FFFF0300, $0000FFFFFFFFFFFF, $010000E0FFFF0700, $0000FFFFFFFFFFFF, $010000E0FFFF0F00
  Data.q $0000FFFFFFFFFFFF, $010000E0FFFF1F00, $0000FFFFFFFFFFFF, $010000E0FFFF3F00, $0000FFFFFFFFFFFF, $010000E0FFFF7F00, $0000FFFFFFFFFFFF, $010000E0FFFFFF00
  Data.q $0000FFFFFFFFFFFF, $010000E0FFFFFF01, $0000FFFFFFFFFFFF, $010000E0FFFFFF03, $0000FFFFFFFFFFFF, $010000E0FFFFFF07, $0000FFFFFFFFFFFF, $00000080FFFFFF0F
  Data.q $0000FFFFFFFFFF7F, $00000080FFFFFF1F, $0000FFFFFFFFFF7F, $00000080FFFFFF3F, $0000FFFFFFFFFF7F, $00000080FFFFFF7F, $0000FFFFFFFFFF7F, $00000080FFFFFFFF
  Data.q $0100FFFFFFFFFF7F, $00000080FFFFFFFF, $0300FFFFFFFFFF7F, $00000080FFFFFFFF, $0700FFFFFFFFFF7F, $FFFFFFFFFFFFFFFF, $0F00FFFFFFFFFFFF, $FFFFFFFFFFFFFFFF
  Data.q $1F00FFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $3F00FFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $7F00FFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FF00FFFFFFFFFFFF, $FFFFFFFFFFFFFFFF
  Data.q $FF01FFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FF03FFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FF07FFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FF0FFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF
  Data.q $FF1FFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FF3FFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF
  Data.q $0028FFFFFFFFFFFF, $00C0000000600000, $0000000100010000, $0000000004800000, $0000000000000000, $0000000000000000, $000000FFFFFF0000, $0000000000000000
  Data.q $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000
  Data.q $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000
  Data.q $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000
  Data.q $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000
  Data.q $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000
  Data.q $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000
  Data.q $0000000000000000, $0000000000000000, $0000000000008003, $0000E00700000000, $0000000000000000, $000000000000FC06, $00003C0E00000000, $0000000000000000
  Data.q $0000000000000C0C, $00001C1C00000000, $0000000000000000, $0000000000001818, $0000383800000000, $0000000000000000, $0000FCFFFF0F3030, $FF0F707000000000
  Data.q $000000000000FCFF, $00003C00000F6060, $000FE0E000C00000, $00E0000000003C00, $0000FCFFFF0FC0C0, $FF0FC0C101F00000, $01F800000000FCFF, $0000303333038081
  Data.q $3303808303DC0000, $03CE000000003033, $000030CC0C030003, $0C03000707C70000, $86C30000000030CC, $0000303003030006, $0303000ECEC10000, $ECC0000000003030
  Data.q $000030C00003000C, $8003001C7CC00000, $38C00000000070C0, $0000E000C0010018, $E000003818C00000, $00C000000000C001, $000080C370F0FF3F, $38F0FF3F00C00000
  Data.q $00C00000000000C7, $0000000E1CE00000, $0CC0010000C00000, $00C000000000000C, $0000000C0C800300, $0C00070000C00000, $00C000000000000C, $0000000C0C000E00
  Data.q $0C001C0000C00000, $00C000000000000C, $000000CC0C003800, $1C00700000C00000, $00C00000000000CE, $000000073800E000, $7000C00100C00000, $00C0000000008003
  Data.q $0000C0C1E0008003, $C001000700C00000, $00C000000000E0C0, $000070008303000E, $0303001C00C00000, $00C0000000003000, $000030CC0C030038, $0C03007000C00000
  Data.q $00C00000000030CC, $00003000000300E0, $000300C001C00000, $03C0000000003000, $0000300000030080, $0003000007C00000, $0EC0000000003000, $0000FCFFFF0F0000
  Data.q $FF0F00001CC00000, $38C000000000FCFF, $00003C00000F0000, $000F000070C00000, $E0C0000000003C00, $0000FCFFFF0F0000, $FF0F0000C0C10000, $80C300000000FCFF
  Data.q $0000000000000000, $0000000000C70000, $00CE000000000000, $0000000000000000, $0000000000DC0000, $00F8000000000000, $0000000000000000, $0000000000F00000
  Data.q $00E0000000000000, $0000000000000000, $0000000000C00000, $0000000000000000, $0000000000000000, $0000000000000000, $FFFF000000000000, $FFFFFFFFFFFFFFFF
  Data.q $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF
  Data.q $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF
  Data.q $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF
  Data.q $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF
  Data.q $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF
  Data.q $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF
  Data.q $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFF7FFC, $FFFF1FF8FFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFF03F8, $FFFF03F0FFFFFFFF, $FFFFFFFFFFFFFFFF
  Data.q $FFFFFFFFFFFF03F0, $FFFF03E0FFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFF07E0, $FFFF07C0FFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFF030000F00FC0, $00F00F80FFFFFFFF
  Data.q $FFFFFFFFFFFF0300, $FFFF030000F01F80, $00F01F00FF3FFFFF, $FF1FFFFFFFFF0300, $FFFF030000F03F00, $00F03F00FE0FFFFF, $FE07FFFFFFFF0300, $FFFF0F0000FC7F00
  Data.q $00FC7F00FC03FFFF, $FC01FFFFFFFF0F00, $FFFF0F0000FCFF00, $00FCFF00F800FFFF, $7800FFFFFFFF0F00, $FFFF0F0000FCFF01, $00FCFF013000FFFF, $1000FFFFFFFF0F00
  Data.q $FFFF0F0000FCFF03, $00FCFF030000FFFF, $0000FFFFFFFF0F00, $FFFF1F0000FEFF07, $00FFFF070000FFFF, $0000FFFFFFFF3F00, $FFFF7F00800F0000, $C00F00000000FFFF
  Data.q $0000FFFFFFFFFF00, $FFFFFF01E01F0000, $F03F00000000FFFF, $0000FFFFFFFFFF03, $FFFFFF03F07F0000, $F0FF00000000FFFF, $0000FFFFFFFFFF03, $FFFFFF03F0FF0100
  Data.q $F0FF03000000FFFF, $0000FFFFFFFFFF03, $FFFFFF03F0FF0700, $E0FF0F000000FFFF, $0000FFFFFFFFFF01, $FFFFFF00C0FF1F00, $80FF3F000000FFFF, $0000FFFFFFFF7F00
  Data.q $FFFF3F0000FF7F00, $00FEFF000000FFFF, $0000FFFFFFFF1F00, $FFFF0F0000FCFF01, $00FCFF030000FFFF, $0000FFFFFFFF0F00, $FFFF0F0000FCFF07, $00FCFF0F0000FFFF
  Data.q $0000FFFFFFFF0F00, $FFFF0F0000FCFF1F, $00FCFF3F0000FFFF, $0000FFFFFFFF0F00, $FFFF0F0000FCFF7F, $00FCFFFF0000FFFF, $0100FFFFFFFF0F00, $FFFF030000F0FFFF
  Data.q $00F0FFFF0300FFFF, $0700FFFFFFFF0300, $FFFF030000F0FFFF, $00F0FFFF0F00FFFF, $1F00FFFFFFFF0300, $FFFF030000F0FFFF, $00F0FFFF3F00FFFF, $7F00FFFFFFFF0300
  Data.q $FFFFFFFFFFFFFFFF, $FFFFFFFFFF00FFFF, $FF01FFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFF03FFFF, $FF07FFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFF0FFFFF
  Data.q $FF1FFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFF3FFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $0028FFFFFFFFFFFF, $0080000000400000
  Data.q $0000000100010000, $0000000002000000, $0000000000000000, $0000000000000000, $000000FFFFFF0000, $0000000000000000, $0000000000000000, $0000000000000000
  Data.q $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000
  Data.q $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000
  Data.q $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $01000000000000E0, $0200000000000010, $0200000000000010, $0400000000000010
  Data.q $0400000000000020, $0800000000000020, $0880000080FFFF40, $10C000008001C040, $10A0000080FFFF80, $2190000000555580, $2188000000A94A00, $4284000000514500
  Data.q $4282000000A14200, $8481000000414100, $0480000000836000, $0F80000000063000, $00800000000C18FF, $0080000000980C02, $0080000000100404, $0080000000100408
  Data.q $0080000000100410, $0080000000900420, $0080000000180C40, $01800000000C1880, $0280000000863000, $0480000000036100, $0880000000814200, $1080000000514500
  Data.q $2080000000014000, $4080000000014000, $8080000000014000, $0081000080FFFF00, $008200008001C000, $0084000080FFFF00, $0088000000000000, $0090000000000000
  Data.q $00A0000000000000, $00C0000000000000, $0080000000000000, $0000000000000000, $FFFF000000000000, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF
  Data.q $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF
  Data.q $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF
  Data.q $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FEFFFFFFFFFFFF1F, $FCFFFFFFFFFFFF0F, $FCFFFFFFFFFFFF0F, $F8FFFFFFFFFFFF0F
  Data.q $F8FFFFFFFFFFFF1F, $F0FFFFFFFFFFFF1F, $F07FFFFF7F00003F, $E03FFFFF7F00003F, $E01FFFFF7F00007F, $C00FFFFFFF00807F, $C007FFFFFF0080FF, $8103FFFFFF0080FF
  Data.q $8101FFFFFF0080FF, $0300FFFFFF0080FF, $0300FFFFFF0080FF, $0000FFFFFF01C0FF, $0000FFFFFF03E000, $0000FFFFFF07F001, $0000FFFFFF0FF803, $0000FFFFFF0FF807
  Data.q $0000FFFFFF0FF80F, $0000FFFFFF0FF81F, $0000FFFFFF07F03F, $0000FFFFFF03E07F, $0100FFFFFF01C0FF, $0300FFFFFF0080FF, $0700FFFFFF0080FF, $0F00FFFFFF0080FF
  Data.q $1F00FFFFFF0080FF, $3F00FFFFFF0080FF, $7F00FFFFFF0080FF, $FF00FFFF7F0000FF, $FF01FFFF7F0000FF, $FF03FFFF7F0000FF, $FF07FFFFFFFFFFFF, $FF0FFFFFFFFFFFFF
  Data.q $FF1FFFFFFFFFFFFF, $FF3FFFFFFFFFFFFF, $FF7FFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $0028FFFFFFFFFFFF, $0060000000300000, $0000000100010000, $0000000001800000
  Data.q $0000000000000000, $0000000000000000, $000000FFFFFF0000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000
  Data.q $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000
  Data.q $0000000000000000, $0000000000000000, $0000000000000000, $1C00000000000000, $2200000000000000, $2200000000000000, $4400000000000000, $4400000000000000
  Data.q $880000000000FE3F, $8880000000000630, $10C100000000FE3F, $10A1000000005415, $209200000000A412, $208A000000004411, $4084000000008410, $7F80000000000C18
  Data.q $00800000000098CC, $0180000000003086, $0280000000002002, $0480000000002002, $088000000000B006, $108000000000180C, $2080000000008C18, $4080000000000411
  Data.q $808000000000A412, $0081000000000410, $0082000000000410, $008400000000FE3F, $0088000000000630, $009000000000FE3F, $00A0000000000000, $00C0000000000000
  Data.q $0080000000000000, $0000000000000000, $FFFF000000000000, $FFFF0000FFFFFFFF, $FFFF0000FFFFFFFF, $FFFF0000FFFFFFFF, $FFFF0000FFFFFFFF, $FFFF0000FFFFFFFF
  Data.q $FFFF0000FFFFFFFF, $FFFF0000FFFFFFFF, $FFFF0000FFFFFFFF, $FFFF0000FFFFFFFF, $FFFF0000FFFFFFFF, $FFFF0000FFFFFFFF, $FFFF0000FFFFFFFF, $FFFF0000FFFFFFFF
  Data.q $FFFF0000FFFFFFFF, $FFFF0000FFFFFFFF, $FFFF0000FFFFFFFF, $E3FF0000FFFFFFFF, $C1FF0000FFFFFFFF, $C1FF0000FFFFFFFF, $83FF0000FFFFFFFF, $83FF0000FFFFFFFF
  Data.q $07FF0000FFFF01C0, $077F0000FFFF01C0, $0F3E0000FFFF01C0, $0F1E0000FFFF03E0, $1F0C0000FFFF03E0, $1F040000FFFF03E0, $3F000000FFFF03E0, $00000000FFFF03E0
  Data.q $00000000FFFF0730, $00000000FFFF0F78, $01000000FFFF1FFC, $03000000FFFF1FFC, $07000000FFFF0FF8, $0F000000FFFF07F0, $1F000000FFFF03E0, $3F000000FFFF03E0
  Data.q $7F000000FFFF03E0, $FF000000FFFF03E0, $FF010000FFFF03E0, $FF030000FFFF01C0, $FF070000FFFF01C0, $FF0F0000FFFF01C0, $FF1F0000FFFFFFFF, $FF3F0000FFFFFFFF
  Data.q $FF7F0000FFFFFFFF, $FFFF0000FFFFFFFF, $00280000FFFFFFFF, $0040000000200000, $0000000100010000, $0000000000800000, $0000000000000000, $0000000000000000
  Data.q $000000FFFFFF0000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $4F02000080010000
  Data.q $8F04000C4C0200FC, $05C900A8868400FC, $0692008804A90048, $41800030E3830018, $06810030838000A0, $0484004804820098, $0F90000804880008, $0FC0000C0CA000FC
  Data.q $FFFF0000008000FC, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $30FCFFFF7FFEFFFF
  Data.q $70F8FF0330FCFF03, $F830FF077878FF03, $F801FF07F810FF07, $3E00FF0F1C00FF07, $F800FF0F7C00FF1F, $F803FF07F801FF07, $F00FFF07F807FF07, $F03FFF03F01FFF03
  Data.a $03, $FF, $7F, $FF, $FF, $FF
  label_wait_r_cur_End:
  ;}
  
  cross_cur:
  ; size : 4286 bytes
  Data.q $2020000100020000,$10A8000F00100000,$0028000000160000,$0040000000200000,$0000002000010000,$0000000010800000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000190000000000,$0000220000002200,$0000000000001900
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000420000001900,$0000570000005700,$0000190000004200,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$FFFF000000000000,$FFFFFFFFFFFFFFFF
  Data.q $0000FFFFFFFFFFFF,$0000220000005800,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$FFFF000000000000,$0000FF000000FFFF,$0000FFFFFFFFFF00,$0000230000005B00
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $FFFF000000000000,$0000FF000000FFFF,$0000FFFFFFFFFF00,$0000230000005B00,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$FFFF000000000000,$0000FF000000FFFF
  Data.q $0000FFFFFFFFFF00,$0000270000005D00,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000190000000000,$0000230000002200,$FFFF270000002300,$0000FF000000FFFF,$0000FFFFFFFFFF00,$00003D0000006500
  Data.q $0000230000002700,$0000220000002300,$0000000000001900,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000420000001900,$00005B0000005700
  Data.q $FFFF5C0000005B00,$0000FF000000FFFF,$0000FFFFFFFFFF00,$0000650000007500,$00005B0000005C00,$0000570000005B00
  Data.q $0000190000004200,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$FFFF000000000000,$FFFFFFFFFFFFFFFF,$FFFFFFFFFFFFFFFF,$FFFFFFFFFFFFFFFF,$0000FF000000FFFF
  Data.q $FFFFFFFFFFFFFF00,$FFFFFFFFFFFFFFFF,$FFFFFFFFFFFFFFFF,$0000FFFFFFFFFFFF,$0000220000005800,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$FFFF000000000000
  Data.q $0000FF000000FFFF,$0000FF000000FF00,$0000FF000000FF00,$0000FF000000FF00,$0000FF000000FF00,$0000FF000000FF00
  Data.q $0000FF000000FF00,$0000FFFFFFFFFF00,$0000220000005800,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$FFFF000000000000,$0000FF000000FFFF,$0000FF000000FF00
  Data.q $0000FF000000FF00,$0000FF000000FF00,$0000FF000000FF00,$0000FF000000FF00,$0000FF000000FF00,$0000FFFFFFFFFF00
  Data.q $0000190000004200,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$FFFF000000000000,$FFFFFFFFFFFFFFFF,$FFFFFFFFFFFFFFFF,$FFFFFFFFFFFFFFFF,$0000FF000000FFFF
  Data.q $FFFFFFFFFFFFFF00,$FFFFFFFFFFFFFFFF,$FFFFFFFFFFFFFFFF,$0000FFFFFFFFFFFF,$0000000000001900,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$FFFF000000000000,$0000FF000000FFFF,$0000FFFFFFFFFF00,$0000270000005D00
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $FFFF000000000000,$0000FF000000FFFF,$0000FFFFFFFFFF00,$0000230000005B00,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$FFFF000000000000,$0000FF000000FFFF
  Data.q $0000FFFFFFFFFF00,$0000230000005B00,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$FFFF000000000000,$0000FF000000FFFF,$0000FFFFFFFFFF00,$0000220000005800
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $FFFF000000000000,$0000FF000000FFFF,$0000FFFFFFFFFF00,$0000190000004200,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$FFFF000000000000,$FFFFFFFFFFFFFFFF
  Data.q $0000FFFFFFFFFFFF,$0000000000001900,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$FFFF000000000000,$FFFFFFFFFFFFFFFF,$FFFFFFFFFFFFFFFF
  Data.q $FEFFFFFFFFFFFFFF,$FCFFFF0FFCFFFF1F,$FCFFFF0FFCFFFF0F,$80FFFF0FFCFFFF0F,$00FF3F0000FF7F00,$00FF3F0000FF3F00
  Data.q $FCFF7F0000FF3F00,$FCFFFF0FFCFFFF0F,$FCFFFF0FFCFFFF0F,$FFFFFF1FFCFFFF0F,$FFFFFFFFFFFFFFFF,$FFFFFFFFFFFFFFFF
  Data.q $FFFFFFFFFFFFFFFF
  Data.b $FF,$FF,$FF,$FF,$FF,$FF
  cross_cur_end:
EndDataSection


Old version.

Code: Select all

; https://docs.microsoft.com/en-us/previous-versions/ms997538(v=msdn.10)
; https://docs.fileformat.com/image/ico/
; https://en.wikipedia.org/wiki/ICO_(file_format)
; https://www.daubnet.com/en/file-format-cur

Structure ICONDIRENTRY
  bWidth.a
  bHeight.a
  bColorCount.a
  bReserved.a
  StructureUnion
    wPlanes.w
    XHotspot.w
  EndStructureUnion
  StructureUnion
    wBitCount.w
    YHotspot.w
  EndStructureUnion
  dwBytesInRes.l
  dwImageOffset.l
EndStructure

Structure ICONDIR
  idReserved.w
  idType.w
  idCount.w
  idEntries.ICONDIRENTRY[1]
EndStructure

*m.ICONDIR = ?cross_cur
*bm.ICONIMAGE = *m + SizeOf(ICONDIR)

Global hCur1, hCur2

;Method 1

; https://stackoverflow.com/questions/41533158/create-32-bit-color-icon-programmatically
; https://stackoverflow.com/questions/16472538/changing-taskbar-icon-programmatically-win32-c/16473172#16473172
If *bm\icHeader\biBitCount = 32
  ColorBitmapSize = *m\idEntries[0]\bWidth * *m\idEntries[0]\bHeight * 4
  MaskBitmapHeight = *bm\icHeader\biHeight / 2
  MaskBitmapSize = *bm\icHeader\biSizeImage - ColorBitmapSize
  bpp = (MaskBitmapSize * 8) / (*m\idEntries[0]\bWidth * MaskBitmapHeight)
  
  CursorInfo.ICONINFO\fIcon = 0                   ;create cursor
  CursorInfo\xHotspot = *m\idEntries[0]\XHotspot
  CursorInfo\yHotspot = *m\idEntries[0]\YHotspot
  
  *BitmapData = *bm + *bm\icHeader\biSize    ;= SizeOf(BITMAPINFOHEADER) = 40
  
  CursorInfo\hbmColor = CreateBitmap_(*m\idEntries[0]\bWidth, *m\idEntries[0]\bHeight, 1, *bm\icHeader\biBitCount, *BitmapData)
  If CursorInfo\hbmColor
    CursorInfo\hbmMask = CreateBitmap_(*m\idEntries[0]\bWidth, MaskBitmapHeight, 1, bpp, *BitmapData + ColorBitmapSize)
    If CursorInfo\hbmMask
      hCur1 = CreateIconIndirect_(CursorInfo)
      DeleteObject_(CursorInfo\hbmMask)
    EndIf
    DeleteObject_(CursorInfo\hbmColor)
  EndIf
EndIf



;Method 2
hCur2 = CreateIconFromResource_(*m + *m\idEntries[0]\dwImageOffset, *m\idEntries[0]\dwBytesInRes, 1, $30000)

Debug hCur1
Debug hCur2

If CreateImage(0, *m\idEntries[0]\bWidth, *m\idEntries[0]\bHeight, 32)
  hdc = StartDrawing(ImageOutput(0))
  If hdc
    DrawIconEx_(hdc, 0, 0, hCur1, 0, 0, 0, 0, #DI_IMAGE)
    StopDrawing()
  EndIf
EndIf

If CreateImage(1, *m\idEntries[0]\bWidth, *m\idEntries[0]\bHeight, 32)
  hdc = StartDrawing(ImageOutput(1))
  If hdc
    DrawIconEx_(hdc, 0, 0, hCur2, 0, 0, 0, 0, #DI_IMAGE)
    StopDrawing()
  EndIf
EndIf

Procedure OpenWindow_0()
  Window_0 = OpenWindow(#PB_Any, 300, 300, 400, 400, "", #PB_Window_SystemMenu)
  Image_0 = ImageGadget(#PB_Any, 50, 50, 32, 32, ImageID(0))
  Image_1 = ImageGadget(#PB_Any, 50, 200, 32, 32, ImageID(1))
  
  CanvasGadget(1, 100, 50, 100, 100)
  CanvasGadget(2, 100, 200, 100, 100)
  SetGadgetAttribute(1, #PB_Canvas_CustomCursor, hCur1)
  SetGadgetAttribute(2, #PB_Canvas_CustomCursor, hCur2)
EndProcedure

Procedure Window_0_Events(event)
  Select event
    Case #PB_Event_CloseWindow
      ProcedureReturn #False
      
    Case #PB_Event_Menu
      Select EventMenu()
      EndSelect
      
    Case #PB_Event_Gadget
      Select EventGadget()
      EndSelect
  EndSelect
  ProcedureReturn #True
EndProcedure

OpenWindow_0()

Repeat
  e = WaitWindowEvent() 
  If e = #PB_Event_Gadget And GadgetType(EventGadget()) = #PB_GadgetType_Canvas
    If EventType() = #PB_EventType_LeftButtonDown Or (EventType() = #PB_EventType_MouseMove And GetGadgetAttribute(EventGadget(), #PB_Canvas_Buttons) & #PB_Canvas_LeftButton)
      x = GetGadgetAttribute(EventGadget(), #PB_Canvas_MouseX)
      y = GetGadgetAttribute(EventGadget(), #PB_Canvas_MouseY)
      
      If StartDrawing(CanvasOutput(EventGadget()))
        Circle(x, y, 1, RGB(Random(255), Random(255), Random(255)))
        StopDrawing()
      EndIf
    EndIf
  EndIf    
Until e = #PB_Event_CloseWindow


DestroyCursor_(hCur1)
DestroyCursor_(hCur2)


DataSection
  cross_cur: 
  ; size : 4286 bytes
  Data.q $2020000100020000,$10A8000F00100000,$0028000000160000,$0040000000200000,$0000002000010000,$0000000010800000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000190000000000,$0000220000002200,$0000000000001900
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000420000001900,$0000570000005700,$0000190000004200,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$FFFF000000000000,$FFFFFFFFFFFFFFFF
  Data.q $0000FFFFFFFFFFFF,$0000220000005800,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$FFFF000000000000,$0000FF000000FFFF,$0000FFFFFFFFFF00,$0000230000005B00
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $FFFF000000000000,$0000FF000000FFFF,$0000FFFFFFFFFF00,$0000230000005B00,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$FFFF000000000000,$0000FF000000FFFF
  Data.q $0000FFFFFFFFFF00,$0000270000005D00,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000190000000000,$0000230000002200,$FFFF270000002300,$0000FF000000FFFF,$0000FFFFFFFFFF00,$00003D0000006500
  Data.q $0000230000002700,$0000220000002300,$0000000000001900,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000420000001900,$00005B0000005700
  Data.q $FFFF5C0000005B00,$0000FF000000FFFF,$0000FFFFFFFFFF00,$0000650000007500,$00005B0000005C00,$0000570000005B00
  Data.q $0000190000004200,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$FFFF000000000000,$FFFFFFFFFFFFFFFF,$FFFFFFFFFFFFFFFF,$FFFFFFFFFFFFFFFF,$0000FF000000FFFF
  Data.q $FFFFFFFFFFFFFF00,$FFFFFFFFFFFFFFFF,$FFFFFFFFFFFFFFFF,$0000FFFFFFFFFFFF,$0000220000005800,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$FFFF000000000000
  Data.q $0000FF000000FFFF,$0000FF000000FF00,$0000FF000000FF00,$0000FF000000FF00,$0000FF000000FF00,$0000FF000000FF00
  Data.q $0000FF000000FF00,$0000FFFFFFFFFF00,$0000220000005800,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$FFFF000000000000,$0000FF000000FFFF,$0000FF000000FF00
  Data.q $0000FF000000FF00,$0000FF000000FF00,$0000FF000000FF00,$0000FF000000FF00,$0000FF000000FF00,$0000FFFFFFFFFF00
  Data.q $0000190000004200,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$FFFF000000000000,$FFFFFFFFFFFFFFFF,$FFFFFFFFFFFFFFFF,$FFFFFFFFFFFFFFFF,$0000FF000000FFFF
  Data.q $FFFFFFFFFFFFFF00,$FFFFFFFFFFFFFFFF,$FFFFFFFFFFFFFFFF,$0000FFFFFFFFFFFF,$0000000000001900,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$FFFF000000000000,$0000FF000000FFFF,$0000FFFFFFFFFF00,$0000270000005D00
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $FFFF000000000000,$0000FF000000FFFF,$0000FFFFFFFFFF00,$0000230000005B00,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$FFFF000000000000,$0000FF000000FFFF
  Data.q $0000FFFFFFFFFF00,$0000230000005B00,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$FFFF000000000000,$0000FF000000FFFF,$0000FFFFFFFFFF00,$0000220000005800
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $FFFF000000000000,$0000FF000000FFFF,$0000FFFFFFFFFF00,$0000190000004200,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$FFFF000000000000,$FFFFFFFFFFFFFFFF
  Data.q $0000FFFFFFFFFFFF,$0000000000001900,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
  Data.q $0000000000000000,$0000000000000000,$0000000000000000,$FFFF000000000000,$FFFFFFFFFFFFFFFF,$FFFFFFFFFFFFFFFF
  Data.q $FEFFFFFFFFFFFFFF,$FCFFFF0FFCFFFF1F,$FCFFFF0FFCFFFF0F,$80FFFF0FFCFFFF0F,$00FF3F0000FF7F00,$00FF3F0000FF3F00
  Data.q $FCFF7F0000FF3F00,$FCFFFF0FFCFFFF0F,$FCFFFF0FFCFFFF0F,$FFFFFF1FFCFFFF0F,$FFFFFFFFFFFFFFFF,$FFFFFFFFFFFFFFFF
  Data.q $FFFFFFFFFFFFFFFF
  Data.b $FF,$FF,$FF,$FF,$FF,$FF
  cross_cur_end:
EndDataSection
To read from a file, simply do the following.

Code: Select all

hCur = LoadCursorFromFile_("your filename.cur")
Last edited by breeze4me on Wed Apr 13, 2022 3:19 pm, edited 9 times in total.
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4946
Joined: Sun Apr 12, 2009 6:27 am

Re: cursor from datasection

Post by RASHAD »

Hi breeze4me
Unfortunately your both methods wont work with Windows original cursors
Like wait_r.cur
Beside CreateIconFromResource_() and CreateIconFromResourceEx_() have some kind of troubles with Windows 11
I recommend to not use any of it
Egypt my love
breeze4me
Enthusiast
Enthusiast
Posts: 633
Joined: Thu Mar 09, 2006 9:24 am
Location: S. Kor

Re: cursor from datasection

Post by breeze4me »

RASHAD wrote: Thu Apr 07, 2022 7:08 am Hi breeze4me
Unfortunately your both methods wont work with Windows original cursors
Like wait_r.cur
Beside CreateIconFromResource_() and CreateIconFromResourceEx_() have some kind of troubles with Windows 11
I recommend to not use any of it
Support for anything other than 32-bit images and for multiple images is not implemented. :mrgreen:
I will take a look at the possibility of the support.
breeze4me
Enthusiast
Enthusiast
Posts: 633
Joined: Thu Mar 09, 2006 9:24 am
Location: S. Kor

Re: cursor from datasection

Post by breeze4me »

It seems to work well with Windows 11 x64 on VirtualBox.

Code: Select all

Structure ICONDIRENTRY
  bWidth.a
  bHeight.a
  bColorCount.a
  bReserved.a
  StructureUnion
    wPlanes.w
    XHotspot.w
  EndStructureUnion
  StructureUnion
    wBitCount.w
    YHotspot.w
  EndStructureUnion
  dwBytesInRes.l
  dwImageOffset.l
EndStructure

Structure ICONDIR
  idReserved.w
  idType.w
  idCount.w
  idEntries.ICONDIRENTRY[0]
EndStructure

*m.ICONDIR = ?label_wait_r_cur

Global Dim hCur(0)

Debug "The number of images = " + *m\idCount

ReDim hCur(*m\idCount - 1)

For i = 0 To *m\idCount - 1
  hCur(i) = CreateIconFromResourceEx_(*m + *m\idEntries[i]\dwImageOffset, *m\idEntries[i]\dwBytesInRes, 1, $30000, 0, 0, 0)
  Debug hCur(i)
Next

Procedure OpenWindow_0()
  Window_0 = OpenWindow(#PB_Any, 300, 300, 560, 120, "", #PB_Window_SystemMenu)
  CanvasGadget(0, 10, 10, 100, 100)
  CanvasGadget(1, 120, 10, 100, 100)
  CanvasGadget(2, 230, 10, 100, 100)
  CanvasGadget(3, 340, 10, 100, 100)
  CanvasGadget(4, 450, 10, 100, 100)
  For i = 0 To ArraySize(hCur())
    SetGadgetAttribute(i, #PB_Canvas_CustomCursor, hCur(i))
  Next
EndProcedure

OpenWindow_0()

Repeat
  e = WaitWindowEvent() 
Until e = #PB_Event_CloseWindow

For i = 0 To *m\idCount - 1
  DestroyCursor_(hCur(i))
Next

DataSection
  label_wait_r_cur:
  ;- "Z:\wait_r.cur"   Size: 8774 bytes
  ;{
  Data.q $8080000500020000, $1030000200000002, $6060000000560000, $0930000200000002, $4040000010860000, $0430000100000002, $3030000019B60000, $0330000100000002
  Data.q $202000001DE60000, $0130000000000002, $0028000021160000, $0100000000800000, $0000000100010000, $0000000008000000, $0000000000000000, $0000000000000000
  Data.q $000000FFFFFF0000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000
  Data.q $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000
  Data.q $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000
  Data.q $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000
  Data.q $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000
  Data.q $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000
  Data.q $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000
  Data.q $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000
  Data.q $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000
  Data.q $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000
  Data.q $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000
  Data.q $0000000000000000, $0000000000800100, $0000000000000000, $0000000000C00100, $0000000000000000, $0000000000F00300, $0000000000000000, $00000000003C0300
  Data.q $0000000000000000, $00000000800F0700, $0000000000000000, $0000000080030600, $0000000000000000, $0000000080030E00, $0000000000000000, $0000000000030C00
  Data.q $0000000000000000, $0000000000071C00, $0000000000000000, $0000000000061800, $0000000000000000, $00000000000E3800, $0000000000000000, $00000000000C3000
  Data.q $0000000000000000, $FFFFFF7F001C7000, $0000000000000080, $FFFFFF7F00186000, $0000000000000080, $070000780038E000, $0080000000000080, $070000780030C000
  Data.q $00C0000000000080, $070000780070C001, $00E0000000000080, $FFFFFF7F00608001, $00F0000000000080, $FFFFFF7F00E08003, $00F8000000000080, $C6CCCC1800C00003
  Data.q $00DC000000000000, $C6CCCC1800C00107, $00CE000000000000, $0633331800800106, $00C7000000000000, $063333180080030E, $80C3000000000000, $06CC0C180000030C
  Data.q $C0C1000000000000, $06CC0C180000071C, $E0C0000000000000, $0630031800000618, $70C0000000000000, $0630031800000E38, $38C0000000000000, $06C0001800000C30
  Data.q $1CC0000000000000, $06C0001800001C70, $0EC0000000000000, $0E00001C00001860, $07C0000000000000, $1C00000E000038E0, $03C0000000000000, $38000007000030C0
  Data.q $01C0000000000000, $70008003000070C0, $00C0000000000000, $E0C0C00100006000, $00C0000000000000, $C0C1E000FFFFFF00, $00C0000000000000, $80037000FFFFFF00
  Data.q $00C0000000000000, $000738000E000000, $00C0000000000000, $000618001C000000, $00C0000000000000, $0006180038000000, $00C0000000000000, $0006180070000000
  Data.q $00C0000000000000, $00061800E0000000, $00C0000000000000, $00061800C0010000, $00C0000000000000, $0006180080030000, $00C0000000000000, $0006180000070000
  Data.q $00C0000000000000, $00C61800000E0000, $00C0000000000000, $00C73800001C0000, $00C0000000000000, $8003700000380000, $00C0000000000000, $C001E00000700000
  Data.q $00C0000000000000, $E000C00100E00000, $00C0000000000000, $70C0800300C00100, $00C0000000000000, $38C0000700800300, $00C0000000000000, $1C00030E00000700
  Data.q $00C0000000000000, $0E00031C00000E00, $00C0000000000000, $06C00C1800001C00, $00C0000000000000, $06C00C1800003800, $00C0000000000000, $0633331800007000
  Data.q $00C0000000000000, $063333180000E000, $00C0000000000000, $060000180000C001, $00C0000000000000, $0600001800008003, $00C0000000000000, $0600001800000007
  Data.q $00C0000000000000, $060000180000000E, $00C0000000000000, $060000180000001C, $00C0000000000000, $0600001800000038, $00C0000000000000, $FFFFFF7F00000070
  Data.q $00C0000000000080, $FFFFFF7F000000E0, $01C0000000000080, $07000078000000C0, $03C0000000000080, $0700007800000080, $07C0000000000080, $0700007800000000
  Data.q $0EC0000000000080, $FFFFFF7F00000000, $1CC0000000000080, $FFFFFF7F00000000, $38C0000000000080, $0000000000000000, $70C0000000000000, $0000000000000000
  Data.q $E0C0000000000000, $0000000000000000, $C0C1000000000000, $0000000000000000, $80C3000000000000, $0000000000000000, $00C7000000000000, $0000000000000000
  Data.q $00CE000000000000, $0000000000000000, $00DC000000000000, $0000000000000000, $00F8000000000000, $0000000000000000, $00F0000000000000, $0000000000000000
  Data.q $00E0000000000000, $0000000000000000, $00C0000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000
  Data.q $FFFF000000000000, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF
  Data.q $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF
  Data.q $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF
  Data.q $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF
  Data.q $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF
  Data.q $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF
  Data.q $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF
  Data.q $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF
  Data.q $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF
  Data.q $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF
  Data.q $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF
  Data.q $FFFFFFFFFFFFFFFF, $FFFFFFFFFF7FFEFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFF3FFEFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFF0FFCFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFF03FCFF
  Data.q $FFFFFFFFFFFFFFFF, $FFFFFFFF7F00F8FF, $FFFFFFFFFFFFFFFF, $FFFFFFFF7F00F8FF, $FFFFFFFFFFFFFFFF, $FFFFFFFF7F00F0FF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFF00F0FF
  Data.q $FFFFFFFFFFFFFFFF, $FFFFFFFFFF00E0FF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFF01E0FF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFF01C0FF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFF03C0FF
  Data.q $FFFFFFFFFFFFFFFF, $00000080FF0380FF, $FFFFFFFFFFFFFF7F, $00000080FF0780FF, $FFFFFFFFFFFFFF7F, $00000080FF0700FF, $FF7FFFFFFFFFFF7F, $00000080FF0F00FF
  Data.q $FF3FFFFFFFFFFF7F, $00000080FF0F00FE, $FF1FFFFFFFFFFF7F, $00000080FF1F00FE, $FF0FFFFFFFFFFF7F, $00000080FF1F00FC, $FF07FFFFFFFFFF7F, $010000E0FF3F00FC
  Data.q $FF03FFFFFFFFFFFF, $010000E0FF3F00F8, $FF01FFFFFFFFFFFF, $010000E0FF7F00F8, $FF00FFFFFFFFFFFF, $010000E0FF7F00F0, $7F00FFFFFFFFFFFF, $010000E0FFFF00F0
  Data.q $3F00FFFFFFFFFFFF, $010000E0FFFF00E0, $1F00FFFFFFFFFFFF, $010000E0FFFF01E0, $0F00FFFFFFFFFFFF, $010000E0FFFF01C0, $0700FFFFFFFFFFFF, $010000E0FFFF03C0
  Data.q $0300FFFFFFFFFFFF, $010000E0FFFF0380, $0100FFFFFFFFFFFF, $010000E0FFFF0780, $0000FFFFFFFFFFFF, $030000F0FFFF0700, $0000FFFFFFFFFFFF, $070000F8FFFF0F00
  Data.q $0000FFFFFFFFFFFF, $0F0000FCFFFF0F00, $0000FFFFFFFFFFFF, $1F0000FEFFFF1F00, $0000FFFFFFFFFFFF, $3F0000FF00000000, $0000FFFFFFFFFFFF, $7F0080FF00000000
  Data.q $0000FFFFFFFFFFFF, $FF00C0FF01000000, $0000FFFFFFFFFFFF, $FF01E0FF03000000, $0000FFFFFFFFFFFF, $FF01E0FF07000000, $0000FFFFFFFFFFFF, $FF01E0FF0F000000
  Data.q $0000FFFFFFFFFFFF, $FF01E0FF1F000000, $0000FFFFFFFFFFFF, $FF01E0FF3F000000, $0000FFFFFFFFFFFF, $FF01E0FF7F000000, $0000FFFFFFFFFFFF, $FF01E0FFFF000000
  Data.q $0000FFFFFFFFFFFF, $FF01E0FFFF010000, $0000FFFFFFFFFFFF, $FF00C0FFFF030000, $0000FFFFFFFFFFFF, $7F0080FFFF070000, $0000FFFFFFFFFFFF, $3F0000FFFF0F0000
  Data.q $0000FFFFFFFFFFFF, $1F0000FEFF1F0000, $0000FFFFFFFFFFFF, $0F0000FCFF3F0000, $0000FFFFFFFFFFFF, $070000F8FF7F0000, $0000FFFFFFFFFFFF, $030000F0FFFF0000
  Data.q $0000FFFFFFFFFFFF, $010000E0FFFF0100, $0000FFFFFFFFFFFF, $010000E0FFFF0300, $0000FFFFFFFFFFFF, $010000E0FFFF0700, $0000FFFFFFFFFFFF, $010000E0FFFF0F00
  Data.q $0000FFFFFFFFFFFF, $010000E0FFFF1F00, $0000FFFFFFFFFFFF, $010000E0FFFF3F00, $0000FFFFFFFFFFFF, $010000E0FFFF7F00, $0000FFFFFFFFFFFF, $010000E0FFFFFF00
  Data.q $0000FFFFFFFFFFFF, $010000E0FFFFFF01, $0000FFFFFFFFFFFF, $010000E0FFFFFF03, $0000FFFFFFFFFFFF, $010000E0FFFFFF07, $0000FFFFFFFFFFFF, $00000080FFFFFF0F
  Data.q $0000FFFFFFFFFF7F, $00000080FFFFFF1F, $0000FFFFFFFFFF7F, $00000080FFFFFF3F, $0000FFFFFFFFFF7F, $00000080FFFFFF7F, $0000FFFFFFFFFF7F, $00000080FFFFFFFF
  Data.q $0100FFFFFFFFFF7F, $00000080FFFFFFFF, $0300FFFFFFFFFF7F, $00000080FFFFFFFF, $0700FFFFFFFFFF7F, $FFFFFFFFFFFFFFFF, $0F00FFFFFFFFFFFF, $FFFFFFFFFFFFFFFF
  Data.q $1F00FFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $3F00FFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $7F00FFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FF00FFFFFFFFFFFF, $FFFFFFFFFFFFFFFF
  Data.q $FF01FFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FF03FFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FF07FFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FF0FFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF
  Data.q $FF1FFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FF3FFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF
  Data.q $0028FFFFFFFFFFFF, $00C0000000600000, $0000000100010000, $0000000004800000, $0000000000000000, $0000000000000000, $000000FFFFFF0000, $0000000000000000
  Data.q $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000
  Data.q $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000
  Data.q $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000
  Data.q $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000
  Data.q $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000
  Data.q $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000
  Data.q $0000000000000000, $0000000000000000, $0000000000008003, $0000E00700000000, $0000000000000000, $000000000000FC06, $00003C0E00000000, $0000000000000000
  Data.q $0000000000000C0C, $00001C1C00000000, $0000000000000000, $0000000000001818, $0000383800000000, $0000000000000000, $0000FCFFFF0F3030, $FF0F707000000000
  Data.q $000000000000FCFF, $00003C00000F6060, $000FE0E000C00000, $00E0000000003C00, $0000FCFFFF0FC0C0, $FF0FC0C101F00000, $01F800000000FCFF, $0000303333038081
  Data.q $3303808303DC0000, $03CE000000003033, $000030CC0C030003, $0C03000707C70000, $86C30000000030CC, $0000303003030006, $0303000ECEC10000, $ECC0000000003030
  Data.q $000030C00003000C, $8003001C7CC00000, $38C00000000070C0, $0000E000C0010018, $E000003818C00000, $00C000000000C001, $000080C370F0FF3F, $38F0FF3F00C00000
  Data.q $00C00000000000C7, $0000000E1CE00000, $0CC0010000C00000, $00C000000000000C, $0000000C0C800300, $0C00070000C00000, $00C000000000000C, $0000000C0C000E00
  Data.q $0C001C0000C00000, $00C000000000000C, $000000CC0C003800, $1C00700000C00000, $00C00000000000CE, $000000073800E000, $7000C00100C00000, $00C0000000008003
  Data.q $0000C0C1E0008003, $C001000700C00000, $00C000000000E0C0, $000070008303000E, $0303001C00C00000, $00C0000000003000, $000030CC0C030038, $0C03007000C00000
  Data.q $00C00000000030CC, $00003000000300E0, $000300C001C00000, $03C0000000003000, $0000300000030080, $0003000007C00000, $0EC0000000003000, $0000FCFFFF0F0000
  Data.q $FF0F00001CC00000, $38C000000000FCFF, $00003C00000F0000, $000F000070C00000, $E0C0000000003C00, $0000FCFFFF0F0000, $FF0F0000C0C10000, $80C300000000FCFF
  Data.q $0000000000000000, $0000000000C70000, $00CE000000000000, $0000000000000000, $0000000000DC0000, $00F8000000000000, $0000000000000000, $0000000000F00000
  Data.q $00E0000000000000, $0000000000000000, $0000000000C00000, $0000000000000000, $0000000000000000, $0000000000000000, $FFFF000000000000, $FFFFFFFFFFFFFFFF
  Data.q $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF
  Data.q $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF
  Data.q $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF
  Data.q $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF
  Data.q $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF
  Data.q $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF
  Data.q $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFF7FFC, $FFFF1FF8FFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFF03F8, $FFFF03F0FFFFFFFF, $FFFFFFFFFFFFFFFF
  Data.q $FFFFFFFFFFFF03F0, $FFFF03E0FFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFF07E0, $FFFF07C0FFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFF030000F00FC0, $00F00F80FFFFFFFF
  Data.q $FFFFFFFFFFFF0300, $FFFF030000F01F80, $00F01F00FF3FFFFF, $FF1FFFFFFFFF0300, $FFFF030000F03F00, $00F03F00FE0FFFFF, $FE07FFFFFFFF0300, $FFFF0F0000FC7F00
  Data.q $00FC7F00FC03FFFF, $FC01FFFFFFFF0F00, $FFFF0F0000FCFF00, $00FCFF00F800FFFF, $7800FFFFFFFF0F00, $FFFF0F0000FCFF01, $00FCFF013000FFFF, $1000FFFFFFFF0F00
  Data.q $FFFF0F0000FCFF03, $00FCFF030000FFFF, $0000FFFFFFFF0F00, $FFFF1F0000FEFF07, $00FFFF070000FFFF, $0000FFFFFFFF3F00, $FFFF7F00800F0000, $C00F00000000FFFF
  Data.q $0000FFFFFFFFFF00, $FFFFFF01E01F0000, $F03F00000000FFFF, $0000FFFFFFFFFF03, $FFFFFF03F07F0000, $F0FF00000000FFFF, $0000FFFFFFFFFF03, $FFFFFF03F0FF0100
  Data.q $F0FF03000000FFFF, $0000FFFFFFFFFF03, $FFFFFF03F0FF0700, $E0FF0F000000FFFF, $0000FFFFFFFFFF01, $FFFFFF00C0FF1F00, $80FF3F000000FFFF, $0000FFFFFFFF7F00
  Data.q $FFFF3F0000FF7F00, $00FEFF000000FFFF, $0000FFFFFFFF1F00, $FFFF0F0000FCFF01, $00FCFF030000FFFF, $0000FFFFFFFF0F00, $FFFF0F0000FCFF07, $00FCFF0F0000FFFF
  Data.q $0000FFFFFFFF0F00, $FFFF0F0000FCFF1F, $00FCFF3F0000FFFF, $0000FFFFFFFF0F00, $FFFF0F0000FCFF7F, $00FCFFFF0000FFFF, $0100FFFFFFFF0F00, $FFFF030000F0FFFF
  Data.q $00F0FFFF0300FFFF, $0700FFFFFFFF0300, $FFFF030000F0FFFF, $00F0FFFF0F00FFFF, $1F00FFFFFFFF0300, $FFFF030000F0FFFF, $00F0FFFF3F00FFFF, $7F00FFFFFFFF0300
  Data.q $FFFFFFFFFFFFFFFF, $FFFFFFFFFF00FFFF, $FF01FFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFF03FFFF, $FF07FFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFF0FFFFF
  Data.q $FF1FFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFF3FFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $0028FFFFFFFFFFFF, $0080000000400000
  Data.q $0000000100010000, $0000000002000000, $0000000000000000, $0000000000000000, $000000FFFFFF0000, $0000000000000000, $0000000000000000, $0000000000000000
  Data.q $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000
  Data.q $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000
  Data.q $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $01000000000000E0, $0200000000000010, $0200000000000010, $0400000000000010
  Data.q $0400000000000020, $0800000000000020, $0880000080FFFF40, $10C000008001C040, $10A0000080FFFF80, $2190000000555580, $2188000000A94A00, $4284000000514500
  Data.q $4282000000A14200, $8481000000414100, $0480000000836000, $0F80000000063000, $00800000000C18FF, $0080000000980C02, $0080000000100404, $0080000000100408
  Data.q $0080000000100410, $0080000000900420, $0080000000180C40, $01800000000C1880, $0280000000863000, $0480000000036100, $0880000000814200, $1080000000514500
  Data.q $2080000000014000, $4080000000014000, $8080000000014000, $0081000080FFFF00, $008200008001C000, $0084000080FFFF00, $0088000000000000, $0090000000000000
  Data.q $00A0000000000000, $00C0000000000000, $0080000000000000, $0000000000000000, $FFFF000000000000, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF
  Data.q $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF
  Data.q $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF
  Data.q $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FEFFFFFFFFFFFF1F, $FCFFFFFFFFFFFF0F, $FCFFFFFFFFFFFF0F, $F8FFFFFFFFFFFF0F
  Data.q $F8FFFFFFFFFFFF1F, $F0FFFFFFFFFFFF1F, $F07FFFFF7F00003F, $E03FFFFF7F00003F, $E01FFFFF7F00007F, $C00FFFFFFF00807F, $C007FFFFFF0080FF, $8103FFFFFF0080FF
  Data.q $8101FFFFFF0080FF, $0300FFFFFF0080FF, $0300FFFFFF0080FF, $0000FFFFFF01C0FF, $0000FFFFFF03E000, $0000FFFFFF07F001, $0000FFFFFF0FF803, $0000FFFFFF0FF807
  Data.q $0000FFFFFF0FF80F, $0000FFFFFF0FF81F, $0000FFFFFF07F03F, $0000FFFFFF03E07F, $0100FFFFFF01C0FF, $0300FFFFFF0080FF, $0700FFFFFF0080FF, $0F00FFFFFF0080FF
  Data.q $1F00FFFFFF0080FF, $3F00FFFFFF0080FF, $7F00FFFFFF0080FF, $FF00FFFF7F0000FF, $FF01FFFF7F0000FF, $FF03FFFF7F0000FF, $FF07FFFFFFFFFFFF, $FF0FFFFFFFFFFFFF
  Data.q $FF1FFFFFFFFFFFFF, $FF3FFFFFFFFFFFFF, $FF7FFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $0028FFFFFFFFFFFF, $0060000000300000, $0000000100010000, $0000000001800000
  Data.q $0000000000000000, $0000000000000000, $000000FFFFFF0000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000
  Data.q $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000
  Data.q $0000000000000000, $0000000000000000, $0000000000000000, $1C00000000000000, $2200000000000000, $2200000000000000, $4400000000000000, $4400000000000000
  Data.q $880000000000FE3F, $8880000000000630, $10C100000000FE3F, $10A1000000005415, $209200000000A412, $208A000000004411, $4084000000008410, $7F80000000000C18
  Data.q $00800000000098CC, $0180000000003086, $0280000000002002, $0480000000002002, $088000000000B006, $108000000000180C, $2080000000008C18, $4080000000000411
  Data.q $808000000000A412, $0081000000000410, $0082000000000410, $008400000000FE3F, $0088000000000630, $009000000000FE3F, $00A0000000000000, $00C0000000000000
  Data.q $0080000000000000, $0000000000000000, $FFFF000000000000, $FFFF0000FFFFFFFF, $FFFF0000FFFFFFFF, $FFFF0000FFFFFFFF, $FFFF0000FFFFFFFF, $FFFF0000FFFFFFFF
  Data.q $FFFF0000FFFFFFFF, $FFFF0000FFFFFFFF, $FFFF0000FFFFFFFF, $FFFF0000FFFFFFFF, $FFFF0000FFFFFFFF, $FFFF0000FFFFFFFF, $FFFF0000FFFFFFFF, $FFFF0000FFFFFFFF
  Data.q $FFFF0000FFFFFFFF, $FFFF0000FFFFFFFF, $FFFF0000FFFFFFFF, $E3FF0000FFFFFFFF, $C1FF0000FFFFFFFF, $C1FF0000FFFFFFFF, $83FF0000FFFFFFFF, $83FF0000FFFFFFFF
  Data.q $07FF0000FFFF01C0, $077F0000FFFF01C0, $0F3E0000FFFF01C0, $0F1E0000FFFF03E0, $1F0C0000FFFF03E0, $1F040000FFFF03E0, $3F000000FFFF03E0, $00000000FFFF03E0
  Data.q $00000000FFFF0730, $00000000FFFF0F78, $01000000FFFF1FFC, $03000000FFFF1FFC, $07000000FFFF0FF8, $0F000000FFFF07F0, $1F000000FFFF03E0, $3F000000FFFF03E0
  Data.q $7F000000FFFF03E0, $FF000000FFFF03E0, $FF010000FFFF03E0, $FF030000FFFF01C0, $FF070000FFFF01C0, $FF0F0000FFFF01C0, $FF1F0000FFFFFFFF, $FF3F0000FFFFFFFF
  Data.q $FF7F0000FFFFFFFF, $FFFF0000FFFFFFFF, $00280000FFFFFFFF, $0040000000200000, $0000000100010000, $0000000000800000, $0000000000000000, $0000000000000000
  Data.q $000000FFFFFF0000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $4F02000080010000
  Data.q $8F04000C4C0200FC, $05C900A8868400FC, $0692008804A90048, $41800030E3830018, $06810030838000A0, $0484004804820098, $0F90000804880008, $0FC0000C0CA000FC
  Data.q $FFFF0000008000FC, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $FFFFFFFFFFFFFFFF, $30FCFFFF7FFEFFFF
  Data.q $70F8FF0330FCFF03, $F830FF077878FF03, $F801FF07F810FF07, $3E00FF0F1C00FF07, $F800FF0F7C00FF1F, $F803FF07F801FF07, $F00FFF07F807FF07, $F03FFF03F01FFF03
  Data.a $03, $FF, $7F, $FF, $FF, $FF
  ;}
EndDataSection
User avatar
Mijikai
Addict
Addict
Posts: 1517
Joined: Sun Sep 11, 2016 2:17 pm

Re: cursor from datasection

Post by Mijikai »

After looking at it again CreateIconFromResource_() should indeed be enough.

Code: Select all

;Catches an Icon or Cursor with the specified ZeroIndex from Memory
EnableExplicit
 
Procedure.i CatchIcon(*Buffer,Index.i,Cursor.i = #False)
  ProcedureReturn CreateIconFromResource_(*Buffer + PeekL(*Buffer + (Index << 4) + 18),PeekL(*Buffer + (Index << 4) + 14),Cursor,$030000) 
EndProcedure

Debug CatchIcon(?dummy,0,1)

End

DataSection
  dummy:
  IncludeBinary "test.cur"
EndDataSection
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4946
Joined: Sun Apr 12, 2009 6:27 am

Re: cursor from datasection

Post by RASHAD »

Well
@breeze4me more knowledge to archive
@Mijikai won the race he is the man of Cursor :D
Egypt my love
mestnyi
Addict
Addict
Posts: 1098
Joined: Mon Nov 25, 2013 6:41 am

Re: cursor from datasection

Post by mestnyi »

Mijikai wrote: Wed Apr 06, 2022 6:58 pm If you store the cursor as image
Will the used memory be more or less in this case?
How can I open it and save it as image using Purebasic?
mestnyi
Addict
Addict
Posts: 1098
Joined: Mon Nov 25, 2013 6:41 am

Re: cursor from datasection

Post by mestnyi »

RASHAD wrote: Wed Apr 06, 2022 10:00 pm
I understand that with your code you can create a cursor image.
Only I need cross-platform.
mestnyi
Addict
Addict
Posts: 1098
Joined: Mon Nov 25, 2013 6:41 am

Re: cursor from datasection

Post by mestnyi »

breeze4me wrote: Thu Apr 07, 2022 5:32 am By the way, it would be easier to include the cursor file in the resource section and use it.
Is this possible for all OS?
mestnyi
Addict
Addict
Posts: 1098
Joined: Mon Nov 25, 2013 6:41 am

Re: cursor from datasection

Post by mestnyi »

Previously, using Bin2Data, I placed it in the data section and loaded it as an image, but now it doesn’t work like that, I don’t understand why.
breeze4me
Enthusiast
Enthusiast
Posts: 633
Joined: Thu Mar 09, 2006 9:24 am
Location: S. Kor

Re: cursor from datasection

Post by breeze4me »

mestnyi wrote: Fri Apr 08, 2022 9:13 am
breeze4me wrote: Thu Apr 07, 2022 5:32 am By the way, it would be easier to include the cursor file in the resource section and use it.
Is this possible for all OS?
As far as I know, that's not going to work.
If you want to use MS's .cur file in another OS, it would be better to extract the images from the file(similar to what I did in Method 1) and create a custom cursor. Images contained in the .cur file are in bmp or png format. Or simply use a png image as the image for a custom cursor.
User avatar
Shardik
Addict
Addict
Posts: 2058
Joined: Thu Apr 21, 2005 2:38 pm
Location: Germany

Re: cursor from datasection

Post by Shardik »

The following code is a cross-platform example. It demonstrates how to load a PNG image file and change the cursor to this image. Of course you may also use the PNG file to generate Data lines in a DataSection and use CatchImage() instead of LoadImage() as in my example.

I have tested my example code successfully with these operating systems:
  • Linux Mint 19.3 x64 'Tricia' with Cinnamon with GTK 2 and GTK 3 and PB 5.73 x64 and PB 6.00 x64 Beta 6 (Asm and C backend)
  • MacOS 10.6.8 'Snow Leopard' with PB 5.62 x86 and x64
  • MacOS 10.13.6 'High Sierra' with PB 5.73 x64 and PB 6.00 x64 Beta 6 (Asm and C backend)
  • Windows 7 SP1 x64 with PB 5.73 x86 and x64
You should be aware that the behaviour of the custom cursor is different: on Linux and Windows the custom cursor is only displayed inside of the window. As soon as the custom cursor leaves the inner window, it changes back to the default cursor and when entering the inner window again it changes back to the custom cursor. On MacOS the custom cursor is displayed on the whole desktop and doesn't change when leaving the inner window.

Code: Select all

EnableExplicit

UsePNGImageDecoder()

CompilerIf #PB_Compiler_OS = #PB_OS_Linux
  ImportC ""
    gtk_widget_get_window(*Widget.GtkWidget)
  EndImport
CompilerEndIf

Procedure ChangeCursorToPNGImage(WindowID.I, ImageID.I)
  Protected CustomCursor.I

  CompilerSelect #PB_Compiler_OS
    CompilerCase #PB_OS_Linux
      CustomCursor = gdk_cursor_new_from_pixbuf_(gdk_display_get_default_(),
        ImageID(ImageID), 0, 0)
      gdk_window_set_cursor_(gtk_widget_get_window(WindowID(WindowID)),
        CustomCursor)
    CompilerCase #PB_OS_MacOS
      Protected Hotspot.NSPoint
      
      Hotspot\x = 1
      Hotspot\y = 1
      CustomCursor = CocoaMessage(0, 0, "NSCursor alloc")
      CocoaMessage(0, CustomCursor,
        "initWithImage:", ImageID(ImageID),
        "hotSpot:@", @Hotspot)
      CocoaMessage(0, CustomCursor, "set")
    CompilerCase #PB_OS_Windows
      Protected Cursor.ICONINFO

      Cursor\fIcon = #False
      Cursor\xHotspot = 1
      Cursor\yHotspot = 1
      Cursor\hbmColor = ImageID(ImageID)
      Cursor\hbmMask = ImageID(ImageID)
      CustomCursor = CreateIconIndirect_(Cursor)
      SetClassLongPtr_(WindowID(WindowID), #GCL_HCURSOR, CustomCursor)
  CompilerEndSelect
EndProcedure

If LoadImage(0, #PB_Compiler_Home + "examples/sources/Data/world.png") = 0
  MessageRequester("Error",
    "Loading of image World.png failed!",
    #PB_MessageRequester_Error)
  End
EndIf

OpenWindow(0, 200, 100, 290, 120, "Display custom cursor")
ButtonGadget(0, WindowWidth(0) / 2 - 120, 40, 240, 25,
  "Change cursor to PNG image")

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      Break
    Case #PB_Event_Gadget
      If EventGadget() = 0 And EventType() = #PB_EventType_LeftClick
        ChangeCursorToPNGImage(0, 0)
        DisableGadget(0, #True)
      EndIf
  EndSelect
ForEver
Post Reply