Page 3 of 3

Re: Counting Items in the DataSection?

Posted: Wed May 07, 2025 5:03 pm
by mk-soft
In the meantime, I no longer understand what it's all about.
Some things are far too complicated. Best as it says in the PB help ...

Re: Counting Items in the DataSection?

Posted: Fri Nov 07, 2025 6:55 pm
by Michael Vogel
I need to add tons of images into a datasection and catch these images, so labels are needed. But how to create an IncludeBinary using a filename similar to the label?

The result should be something like this:

Code: Select all

Label_01:
IncludeBinary Path# + "Image_01.png"
Label_02:
IncludeBinary Path# + "Image_02.png"
:
Did some tries with no success. I was generating Data.s code instead of IncludeBinary which is easier to test):

Code: Select all

#Q=#DOUBLEQUOTE$

Macro Label(part1,part2)
	
	part1#part2:
	
EndMacro
Macro Image(part1,part2)
	
	IncludeBinary part1 + #Q+part2.jpg+#Q
	
EndMacro
Macro Datax(label)
	
	Data.s "label"
	
EndMacro

#ImagePath=	"."

Macro LabelData(Index)

	;Label(Label_,MacroExpandedCount)
	Label(Label_,Index)
	;IncludeBinary #ImagePath + #Q+Index.jpg+#Q
	;Image(#ImagePath,Index)
	Datax(Index)
	Data.s #Q+Index+#Q

EndMacro

DataSection
	LabelData(ab)
	LabelData(cd)
EndDataSection

Restore ab:
Read.s a.s
Debug a

Re: Counting Items in the DataSection?

Posted: Fri Nov 07, 2025 10:12 pm
by idle
Michael Vogel wrote: Fri Nov 07, 2025 6:55 pm I need to add tons of images into a datasection and catch these images, so labels are needed. But how to create an IncludeBinary using a filename similar to the label?

The result should be something like this:

Code: Select all

Label_01:
IncludeBinary Path# + "Image_01.png"
Label_02:
IncludeBinary Path# + "Image_02.png"
:
Did some tries with no success. I was generating Data.s code instead of IncludeBinary which is easier to test):

Code: Select all

#Q=#DOUBLEQUOTE$

Macro Label(part1,part2)
	
	part1#part2:
	
EndMacro
Macro Image(part1,part2)
	
	IncludeBinary part1 + #Q+part2.jpg+#Q
	
EndMacro
Macro Datax(label)
	
	Data.s "label"
	
EndMacro

#ImagePath=	"."

Macro LabelData(Index)

	;Label(Label_,MacroExpandedCount)
	Label(Label_,Index)
	;IncludeBinary #ImagePath + #Q+Index.jpg+#Q
	;Image(#ImagePath,Index)
	Datax(Index)
	Data.s #Q+Index+#Q

EndMacro

DataSection
	LabelData(ab)
	LabelData(cd)
EndDataSection

Restore ab:
Read.s a.s
Debug a
That's where you use a packer like ezpack so you can extract a single file or multiple files or all files to memory from the pack dynamically.
viewtopic.php?t=52586

Re: Counting Items in the DataSection?

Posted: Sat Nov 08, 2025 4:33 pm
by SMaag
@Michael Vogel
I need to add tons of images into a datasection and catch these images, so labels are needed. But how to create an IncludeBinary using a filename similar to the label?
I use CodeCreation functions to do such things, especally to create Data Sections.

you need my CodeCreation Modul from
https://github.com/Maagic7/PureBasicFra ... reation.pb

Code: Select all

  ; UseModule CC
  ; 
  NewList lstFiles.s()
  Define I, code$
  
  For I = 0 To 9
    AddElement(lstFiles())
    lstFiles() = "File_" + Str(I) + ".jpg"
  Next
  
  ; CREATING the DataSection
  I=0
  CC::ClearCode()
  CC::ADD("DataSection", CC::#CC_SHR_AFTER)
  
  ForEach lstFiles()
    code$ = GetFilePart(lstFiles()) ; get only the Filename
    code$ = Left(code$, FindString(code$, ".")-1)
    code$ = code$ + ": : IncludeBinary " + Chr('"') + lstFiles() + Chr('"')
    Debug code$
    CC::ADD(code$)
  Next
  
  CC::ADD("EndDataSection", CC::#CC_SHL_BEFORE)
  
  CC::CopyToClipBoard()

This is the outout

DataSection
File_0: : IncludeBinary "File_0.jpg"
File_1: : IncludeBinary "File_1.jpg"
File_2: : IncludeBinary "File_2.jpg"
File_3: : IncludeBinary "File_3.jpg"
File_4: : IncludeBinary "File_4.jpg"
File_5: : IncludeBinary "File_5.jpg"
File_6: : IncludeBinary "File_6.jpg"
File_7: : IncludeBinary "File_7.jpg"
File_8: : IncludeBinary "File_8.jpg"
File_9: : IncludeBinary "File_9.jpg"
EndDataSection

Re: Counting Items in the DataSection?

Posted: Sun Nov 09, 2025 4:35 am
by Piero
Michael Vogel wrote: Fri Nov 07, 2025 6:55 pm I need to add tons of images into a datasection and catch these images, so labels are needed. But how to create an IncludeBinary using a filename similar to the label?

The result should be something like this:

Code: Select all

Label_01:
IncludeBinary Path# + "Image_01.png"
Label_02:
IncludeBinary Path# + "Image_02.png"

Code: Select all

; Path and index must be literal strings or constants, AND FILES MUST EXIST

Macro dq : "
EndMacro

Macro IncludeBin(z=)
   Label_#z#MacroExpandedCount: ; starts with 1
   IncludeBinary #binpath + "Image_"+dq#z#dq+MacroExpandedCount+".jpg"
EndMacro

#binpath = "/Users/Michael/Desktop/"

DataSection
   IncludeBin(00)
   IncludeBin(00)
EndDataSection

Re: Counting Items in the DataSection?

Posted: Sun Nov 09, 2025 10:22 pm
by Michael Vogel
Perfect! Thank you!

Don't think your solution can be topped...

Code: Select all

; Piero's code, I just added Data.s for testing...

Macro dq : "
EndMacro

Macro Label(counter)
	Label_#counter:
EndMacro
Macro IncludeBin(z=)
	Label(z)
	Data.s  #binpath + "Image_"+dq#z#dq+".jpg"; only for testing
	;IncludeBinary #binpath + "Image_"+dq#z#dq+".jpg"
EndMacro

#binpath = "/Users/Michael/Desktop/"

DataSection
	IncludeBin(001)
	IncludeBin(yep)
EndDataSection

; Quick Check
Restore Label(yep)
Read.s s.s
Debug s


My code will look a little bit like this...

Code: Select all

Macro dq : "
EndMacro

Macro Label(counter)
	Label_#counter:
EndMacro
Macro IncludeBin(z=)
	
	; Label(z)
	Label(MacroExpandedCount)
	
	; Data.s  #binpath + "Image_"+dq#z#dq+".jpg"
	; Data.s  #binpath + "Image_"+dq#MacroExpandedCount#dq+".jpg"
	
	; IncludeBinary #binpath + "Image_"+dq#z#dq+".jpg"
	IncludeBinary #binpath + "Image_"+dq#MacroExpandedCount#dq+".jpg"
	
EndMacro
Macro MultiInclude()
	
	IncludeBin()
	IncludeBin()
	IncludeBin()
	IncludeBin()
	IncludeBin()
	
	IncludeBin()
	IncludeBin()
	IncludeBin()
	IncludeBin()
	IncludeBin()
	
EndMacro

#binpath = "/Users/Michael/Desktop/"

DataSection
	MultiInclude()	
	MultiInclude()	
	MultiInclude()	
	MultiInclude()	
	MultiInclude()	
	MultiInclude()	
	MultiInclude()	
	MultiInclude()	
	IncludeBin()
	IncludeBin()
	IncludeBin()
EndDataSection


; Then I need 83 lines to catch the images, cool would be something like this (doesn't work of course)...
 For i=1 To 83
 	CatchImage(i,?Label(i))
 Next i


Re: Counting Items in the DataSection?

Posted: Mon Nov 10, 2025 9:49 am
by Piero
Michael Vogel wrote: Sun Nov 09, 2025 10:22 pmThen I need 83 lines to catch the images
83? Hope you mean "83" as you did with MultiInclude :wink:

Code: Select all

Macro CatchIm(z=)
   CatchImage(MacroExpandedCount,?Label_#z#MacroExpandedCount)
EndMacro

CatchIm(00)
CatchIm(00)
PS: why not use MultiIncludes with 9 items for the leading zeros? Like:
MultiInclude(0)
MultiInclude()
MultiInclude()
…until 81

Re: Counting Items in the DataSection?

Posted: Mon Nov 10, 2025 2:15 pm
by benubi
You could also zip all those image files, include the zip and then catch the images using the packer library with the new CatchPack command.

I'm not sure if the packer library would support self extracting archives out of the box but that could be an alternative especially if you'd like to dynamically change the zip content (later) without changing the main program. You could use WinRar to create the archive, in case the packer lib only supports reading from the "self-extracting archive". WinRar itself can use the zip archive commentary string at the file's end (up to 64k) to store configuration/installer settings, and this is an additional space for "meta data" you could make use of.

Re: Counting Items in the DataSection?

Posted: Mon Nov 10, 2025 4:36 pm
by Piero
Again, about leading zeros (not very easy to find on Forum…) and because it can also be useful when unpacking:

Code: Select all

n = 11
n-1
k=Len(Str(n))
For i=0 to n
   Debug "Label_"+ RSet(Str(i),k,"0") +~": : IncludeBinary \"Image_"+ RSet(Str(i),k,"0") +~".jpg\""
Next