Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Embedding and Extracting MANY files !
#11
(11-14-2025, 08:53 PM)bplus Wrote: https://qb64phoenix.com/forum/showthread...0#pid36610

Oh I was remembering loading and embedding multiple image files. I don't know a file is a file, just a bunch of ones and zeros, no?


  Yes a file is just a file.  What I was trying to avoid was just the tedium of typing out over 100 EMBED statements.  Dav had a great idea which gave me this.

Code: (Select All)

Data "gm34.isc","lgm29.isc","gm39.isc","gm30.isc","gp60.isc","lgm56.isc","gm81.isc","lgp46.isc"
Data "lgm21.isc","lgm61.isc","lgp49.isc","lgm51.isc","gm10.isc","gm101.isc","lgm88.isc","gm29.isc"
Data "lgp67.isc","lgm04.isc","gm02.isc","gm08.isc","gm53.isc","gm07.isc","gp46.isc","lgm20.isc"
Data "./","gm06.isc","lgm108.isc","gm47.isc","gm117.isc","gp39.isc","gp82.isc","lgm30.isc","gm20.isc"
Data "lgm82.isc","lgm12.isc","lgm34.isc","lgm02.isc","gp40.isc","lgm11.isc","lgm67.isc","gm13.isc"
Data "gm11.isc","gm25.isc","gp37.isc","gm33.isc","lgm16.isc","lgm74.isc","lgm31.isc","lgp43.isc"
Data "gm31.isc","lgm101.isc","gm28.isc","gm12.isc","lgp39.isc","lgm49.isc","gm19.isc","lgm01.isc"
Data "gm97.isc","lgm09.isc","gm88.isc","gm74.isc","gm67.isc","lgm109.isc","gp67.isc","gm63.isc"
Data "gm09.isc","lgm35.isc","lgm37.isc","gm82.isc","lgp37.isc","gp49.isc","lgm15.isc","gm56.isc"
Data "lgm26.isc","lgm14.isc","lgm57.isc","gm109.isc","gm26.isc","gm21.isc","lgm06.isc","lgm28.isc"
Data "lgm27.isc","lgm13.isc","lgm03.isc","lgm25.isc","lgm63.isc","gm14.isc","gm04.isc","gm37.isc"
Data "gm05.isc","gm60.isc","lgp60.isc","gm15.isc","gm03.isc","../","gm77.isc","lgm72.isc","gm51.isc"
Data "lgm53.isc","gp42.isc","lgm22.isc","gp43.isc","gm87.isc","lgm47.isc","gm48.isc","gm72.isc"
Data "lgm07.isc","lgp42.isc","lgp36.isc","gm27.isc","lgm08.isc","gm61.isc","gm18.isc","lgm77.isc"
Data "lgm33.isc","gm23.isc","lgm23.isc","gm108.isc","lgm81.isc","gm22.isc","gm49.isc","gm35.isc"
Data "lgm97.isc","lgm60.isc","lgm117.isc","lgp82.isc","gm16.isc","lgm10.isc","gm57.isc","lgm87.isc"
Data "lgm05.isc","lgm39.isc","gm01.isc","lgp40.isc","lgm19.isc","gp36.isc","lgm18.isc"
Data "0000"


$Embed:'./isc/gm34.isc','iscHandle1'
$Embed:'./isc/lgm29.isc','iscHandle2'
$Embed:'./isc/gm39.isc','iscHandle3'
$Embed:'./isc/gm30.isc','iscHandle4'
$Embed:'./isc/gp60.isc','iscHandle5'
$Embed:'./isc/lgm56.isc','iscHandle6'
$Embed:'./isc/gm81.isc','iscHandle7'
$Embed:'./isc/lgp46.isc','iscHandle8'
$Embed:'./isc/lgm21.isc','iscHandle9'
$Embed:'./isc/lgm61.isc','iscHandle10'
$Embed:'./isc/lgp49.isc','iscHandle11'
$Embed:'./isc/lgm51.isc','iscHandle12'
$Embed:'./isc/gm10.isc','iscHandle13'
$Embed:'./isc/gm101.isc','iscHandle14'
$Embed:'./isc/lgm88.isc','iscHandle15'
$Embed:'./isc/gm29.isc','iscHandle16'
$Embed:'./isc/lgp67.isc','iscHandle17'
$Embed:'./isc/lgm04.isc','iscHandle18'
$Embed:'./isc/gm02.isc','iscHandle19'
$Embed:'./isc/gm08.isc','iscHandle20'
$Embed:'./isc/gm53.isc','iscHandle21'
$Embed:'./isc/gm07.isc','iscHandle22'
$Embed:'./isc/gp46.isc','iscHandle23'
$Embed:'./isc/lgm20.isc','iscHandle24'
$Embed:'./isc/gm06.isc','iscHandle25'
$Embed:'./isc/lgm108.isc','iscHandle26'
$Embed:'./isc/gm47.isc','iscHandle27'
$Embed:'./isc/gm117.isc','iscHandle28'
$Embed:'./isc/gp39.isc','iscHandle29'
$Embed:'./isc/gp82.isc','iscHandle30'
$Embed:'./isc/lgm30.isc','iscHandle31'
$Embed:'./isc/gm20.isc','iscHandle32'
$Embed:'./isc/lgm82.isc','iscHandle33'
$Embed:'./isc/lgm12.isc','iscHandle34'
$Embed:'./isc/lgm34.isc','iscHandle35'
$Embed:'./isc/lgm02.isc','iscHandle36'
$Embed:'./isc/gp40.isc','iscHandle37'
$Embed:'./isc/lgm11.isc','iscHandle38'
$Embed:'./isc/lgm67.isc','iscHandle39'
$Embed:'./isc/gm13.isc','iscHandle40'
$Embed:'./isc/gm11.isc','iscHandle41'
$Embed:'./isc/gm25.isc','iscHandle42'
$Embed:'./isc/gp37.isc','iscHandle43'
$Embed:'./isc/gm33.isc','iscHandle44'
$Embed:'./isc/lgm16.isc','iscHandle45'
$Embed:'./isc/lgm74.isc','iscHandle46'
$Embed:'./isc/lgm31.isc','iscHandle47'
$Embed:'./isc/lgp43.isc','iscHandle48'
$Embed:'./isc/gm31.isc','iscHandle49'
$Embed:'./isc/lgm101.isc','iscHandle50'
$Embed:'./isc/gm28.isc','iscHandle51'
$Embed:'./isc/gm12.isc','iscHandle52'
$Embed:'./isc/lgp39.isc','iscHandle53'
$Embed:'./isc/lgm49.isc','iscHandle54'
$Embed:'./isc/gm19.isc','iscHandle55'
$Embed:'./isc/lgm01.isc','iscHandle56'
$Embed:'./isc/gm97.isc','iscHandle57'
$Embed:'./isc/lgm09.isc','iscHandle58'
$Embed:'./isc/gm88.isc','iscHandle59'
$Embed:'./isc/gm74.isc','iscHandle60'
$Embed:'./isc/gm67.isc','iscHandle61'
$Embed:'./isc/lgm109.isc','iscHandle62'
$Embed:'./isc/gp67.isc','iscHandle63'
$Embed:'./isc/gm63.isc','iscHandle64'
$Embed:'./isc/gm09.isc','iscHandle65'
$Embed:'./isc/lgm35.isc','iscHandle66'
$Embed:'./isc/lgm37.isc','iscHandle67'
$Embed:'./isc/gm82.isc','iscHandle68'
$Embed:'./isc/lgp37.isc','iscHandle69'
$Embed:'./isc/gp49.isc','iscHandle70'
$Embed:'./isc/lgm15.isc','iscHandle71'
$Embed:'./isc/gm56.isc','iscHandle72'
$Embed:'./isc/lgm26.isc','iscHandle73'
$Embed:'./isc/lgm14.isc','iscHandle74'
$Embed:'./isc/lgm57.isc','iscHandle75'
$Embed:'./isc/gm109.isc','iscHandle76'
$Embed:'./isc/gm26.isc','iscHandle77'
$Embed:'./isc/gm21.isc','iscHandle78'
$Embed:'./isc/lgm06.isc','iscHandle79'
$Embed:'./isc/lgm28.isc','iscHandle80'
$Embed:'./isc/lgm27.isc','iscHandle81'
$Embed:'./isc/lgm13.isc','iscHandle82'
$Embed:'./isc/lgm03.isc','iscHandle83'
$Embed:'./isc/lgm25.isc','iscHandle84'
$Embed:'./isc/lgm63.isc','iscHandle85'
$Embed:'./isc/gm14.isc','iscHandle86'
$Embed:'./isc/gm04.isc','iscHandle87'
$Embed:'./isc/gm37.isc','iscHandle88'
$Embed:'./isc/gm05.isc','iscHandle89'
$Embed:'./isc/gm60.isc','iscHandle90'
$Embed:'./isc/lgp60.isc','iscHandle91'
$Embed:'./isc/gm15.isc','iscHandle92'
$Embed:'./isc/gm03.isc','iscHandle93'
$Embed:'./isc/gm77.isc','iscHandle94'
$Embed:'./isc/lgm72.isc','iscHandle95'
$Embed:'./isc/gm51.isc','iscHandle96'
$Embed:'./isc/lgm53.isc','iscHandle97'
$Embed:'./isc/gp42.isc','iscHandle98'
$Embed:'./isc/lgm22.isc','iscHandle99'
$Embed:'./isc/gp43.isc','iscHandle100'
$Embed:'./isc/gm87.isc','iscHandle101'
$Embed:'./isc/lgm47.isc','iscHandle102'
$Embed:'./isc/gm48.isc','iscHandle103'
$Embed:'./isc/gm72.isc','iscHandle104'
$Embed:'./isc/lgm07.isc','iscHandle105'
$Embed:'./isc/lgp42.isc','iscHandle106'
$Embed:'./isc/lgp36.isc','iscHandle107'
$Embed:'./isc/gm27.isc','iscHandle108'
$Embed:'./isc/lgm08.isc','iscHandle109'
$Embed:'./isc/gm61.isc','iscHandle110'
$Embed:'./isc/gm18.isc','iscHandle111'
$Embed:'./isc/lgm77.isc','iscHandle112'
$Embed:'./isc/lgm33.isc','iscHandle113'
$Embed:'./isc/gm23.isc','iscHandle114'
$Embed:'./isc/lgm23.isc','iscHandle115'
$Embed:'./isc/gm108.isc','iscHandle116'
$Embed:'./isc/lgm81.isc','iscHandle117'
$Embed:'./isc/gm22.isc','iscHandle118'
$Embed:'./isc/gm49.isc','iscHandle119'
$Embed:'./isc/gm35.isc','iscHandle120'
$Embed:'./isc/lgm97.isc','iscHandle121'
$Embed:'./isc/lgm60.isc','iscHandle122'
$Embed:'./isc/lgm117.isc','iscHandle123'
$Embed:'./isc/lgp82.isc','iscHandle124'
$Embed:'./isc/gm16.isc','iscHandle125'
$Embed:'./isc/lgm10.isc','iscHandle126'
$Embed:'./isc/gm57.isc','iscHandle127'
$Embed:'./isc/lgm87.isc','iscHandle128'
$Embed:'./isc/lgm05.isc','iscHandle129'
$Embed:'./isc/lgm39.isc','iscHandle130'
$Embed:'./isc/gm01.isc','iscHandle131'
$Embed:'./isc/lgp40.isc','iscHandle132'
$Embed:'./isc/lgm19.isc','iscHandle133'
$Embed:'./isc/gp36.isc','iscHandle134'
$Embed:'./isc/lgm18.isc','iscHandle135'

$Embed:'./mid2vgm.elf','MID2VGM'
$Embed:'./vgm2zsm','MID2ZSM'


FROM RUNNING THIS:

Code: (Select All)

ChDir _StartDir$

If _FileExists("isc.bi") Then Kill "isc.bi"

Open "isc.bi" For Output As #2

f$ = _Files$("isc/*.*") 'wherever the files are located

D$ = "DATA "
f$ = _Files$("isc/*.*") 'wherever the files are located
Do While Len(f$) > 0
    D$ = D$ + Chr$(34) + f$ + Chr$(34) + " ,"
    f$ = _Files$
    If Len(f$) = 0 Or Len(D$) > 100 Then
        D$ = Left$(D$, Len(D$) - 1)
        Print #2, D$
        D$ = "DATA "
    End If
Loop
If D$ = "DATA " Then
    D$ = "DATA " + Chr$(34) + "0000" + Chr$(34)
Else
    D$ = D$ + Chr$(34) + "0000" + Chr$(34)
End If
Print #2, D$
Print #2, ""
Print #2, ""

iscIndx = 1
slash$ = "/"
f$ = _Files$("isc/*.*") 'wherever the files are located
Do While Len(f$) > 0
    If Left$(f$, 1) <> "." Then
        f$ = "./isc" + slash$ + f$
        handle$ = "iscHandle" + _Trim$(Str$(iscIndx))
        Print #2, "$EMBED:'"; f$; "','"; handle$; "'"
        iscIndx = iscIndx + 1
    End If
    f$ = _Files$
Loop

Close 2

Problem solved.   Pretty straigtforward from here to do the extractions.   The whole point of this exercise is to have one distributable executable that will do the job that right now requires the installation of PHP, A PHP program from on Github Repo and the mid2vgm program from another,   Then knitting the chain together with bash or powershell (depending on platform !) 

I'm trying to make things easier for other X16 Developers at the expense of a little tedium from me.    I already have the bash script thing working for the conversion !

PHP install will still be required but that's still a lot simpler thing to ask of an end user than the alternative !
Reply
#12
This way works not as expected (can not extract embeded files to harddrive from EXE). QB64PE requires a quoted literal string to unpack the file to disk. Cannot use a variable! 

Code: (Select All)

ff = FreeFile
Open "to_source.txt" For Output As ff

e$ = _Files$("*.*")
ReDim As String handles(0)
ReDim As String fileNames(0)

Do While Len(e$) > 0
    e$ = _Files$
    Print e$
    count = count + 1
    If count > 1 And Len(e$) > 0 Then
        handle$ = "h" + _Trim$(Str$(count))
        ReDim _Preserve handles(count) As String
        ReDim _Preserve fileNames(count) As String
        handles(count) = handle$
        fileNames(count) = e$
        Print #ff, "'$Embed " + e$ + " ' ," + handle$
    End If
Loop

'write to text file filenames and handles for you

Print #ff, "DATA" + Str$(count) 'total files in exe
For FilesAndHandles = 1 To count - 1
    If FilesAndHandles > 2 Then
        call$ = Chr$(34) + fileNames(FilesAndHandles) + Chr$(34) + ", " + Chr$(34) + handles(FilesAndHandles) + Chr$(34)
        Print #ff, "DATA " + call$
    End If
Next

Print #ff, "Read records" 'read first record (total files embeded in exe)
Print #ff, "For F = 1 to records"
Print #ff, "Read FileName$, FileHandle$"
Print #ff, " file$ = _Embedded$(filehandle$)"
Print #ff, "_WriteFile " + Chr$(34) + "copy " + Chr$(34) + " filename$" + Chr$(34) + ", file$"
Print #ff, "next F"
Print #ff, "Close ff"


Attached Files Thumbnail(s)
   


Reply
#13
But i have idea Smile


Reply
#14
(11-14-2025, 10:25 PM)Petr Wrote: This way works not as expected (can not extract embeded files to harddrive from EXE). QB64PE requires a quoted literal string to unpack the file to disk. Cannot use a variable! 

Code: (Select All)

ff = FreeFile
Open "to_source.txt" For Output As ff

e$ = _Files$("*.*")
ReDim As String handles(0)
ReDim As String fileNames(0)

Do While Len(e$) > 0
    e$ = _Files$
    Print e$
    count = count + 1
    If count > 1 And Len(e$) > 0 Then
        handle$ = "h" + _Trim$(Str$(count))
        ReDim _Preserve handles(count) As String
        ReDim _Preserve fileNames(count) As String
        handles(count) = handle$
        fileNames(count) = e$
        Print #ff, "'$Embed " + e$ + " ' ," + handle$
    End If
Loop

'write to text file filenames and handles for you

Print #ff, "DATA" + Str$(count) 'total files in exe
For FilesAndHandles = 1 To count - 1
    If FilesAndHandles > 2 Then
        call$ = Chr$(34) + fileNames(FilesAndHandles) + Chr$(34) + ", " + Chr$(34) + handles(FilesAndHandles) + Chr$(34)
        Print #ff, "DATA " + call$
    End If
Next

Print #ff, "Read records" 'read first record (total files embeded in exe)
Print #ff, "For F = 1 to records"
Print #ff, "Read FileName$, FileHandle$"
Print #ff, " file$ = _Embedded$(filehandle$)"
Print #ff, "_WriteFile " + Chr$(34) + "copy " + Chr$(34) + " filename$" + Chr$(34) + ", file$"
Print #ff, "next F"
Print #ff, "Close ff"

  I didn't really look at the code to closely,  This part I've actually done plenty of times.   Doesn't sound right that you can't use a variable.   I often use string variables as filenames for file I/O ?
The whole point of my ask here was to avoid typing out a bunch of embeds.   Writing the code to generate that code is really what I needed and I think it will turn out fine.   I really do appreciate the attention this has recieved.    Simple file I/O operations are well within my skill set to figure out though !.    Writefile is probably the easiest way to do this code but it wouldn't be hard to do it with PUT either !
Reply
#15
It was a struggle. I finally got it running, but what surprised me was that when I forgot to call _Embedded$, it created 2-byte files on disk.

Then I realized it. So this builds a BAS file and dumps the files in the folder into it. Some of the files the resulting program doesn't see it, I don't know where the problem is again. No DATA blocks are needed, it's just written straight in the literal version. I don't understand this "treatment". Really not. Why not varibles?

Code: (Select All)

ff = FreeFile
Open "to_source.bas" For Output As ff

e$ = _Files$("*.*")
ReDim As String handles(0)
ReDim As String fileNames(0)

Do While Len(e$) > 0
    e$ = _Files$
    Print e$
    count = count + 1
    If count > 1 And Len(e$) > 0 Then
        handle$ = "h" + _Trim$(Str$(count))
        ReDim _Preserve handles(count) As String
        ReDim _Preserve fileNames(count) As String
        handles(count) = handle$
        fileNames(count) = e$
        Print #ff, "$Embed '" + _Trim$(e$) + "' ," + "'" + handle$ + "'"

    End If
Loop

'write to text file filenames and handles for you
For FilesAndHandles = 2 To count - 1
    'Print #ff, "S = _Sndopen (" + Chr$(34) + handles(FilesAndHandles) + Chr$(34) + "," + Chr$(34) + " memory" + Chr$(34) + ") "
    Print #ff, "File$ = _Embedded$ (" + Chr$(34) + handles(FilesAndHandles) + Chr$(34) + ")"
    Print #ff, "_WriteFile " + Chr$(34) + "copy" + fileNames(FilesAndHandles) + Chr$(34) + ", file$"
Next

Close ff


Reply
#16
(11-14-2025, 11:37 PM)Petr Wrote: It was a struggle. I finally got it running, but what surprised me was that when I forgot to call _Embedded$, it created 2-byte files on disk.

Then I realized it. So this builds a BAS file and dumps the files in the folder into it. Some of the files the resulting program doesn't see it, I don't know where the problem is again. No DATA blocks are needed, it's just written straight in the literal version. I don't understand this "treatment". Really not. Why not varibles?

Code: (Select All)

ff = FreeFile
Open "to_source.bas" For Output As ff

e$ = _Files$("*.*")
ReDim As String handles(0)
ReDim As String fileNames(0)

Do While Len(e$) > 0
    e$ = _Files$
    Print e$
    count = count + 1
    If count > 1 And Len(e$) > 0 Then
        handle$ = "h" + _Trim$(Str$(count))
        ReDim _Preserve handles(count) As String
        ReDim _Preserve fileNames(count) As String
        handles(count) = handle$
        fileNames(count) = e$
        Print #ff, "$Embed '" + _Trim$(e$) + "' ," + "'" + handle$ + "'"

    End If
Loop

'write to text file filenames and handles for you
For FilesAndHandles = 2 To count - 1
    'Print #ff, "S = _Sndopen (" + Chr$(34) + handles(FilesAndHandles) + Chr$(34) + "," + Chr$(34) + " memory" + Chr$(34) + ") "
    Print #ff, "File$ = _Embedded$ (" + Chr$(34) + handles(FilesAndHandles) + Chr$(34) + ")"
    Print #ff, "_WriteFile " + Chr$(34) + "copy" + fileNames(FilesAndHandles) + Chr$(34) + ", file$"
Next

Close ff

I'm planning on using the data to recreate the original filenames.   I have the handles suffixed with a numerical value so I should be able to write them all out in a loop 1 by 1.   I've been working on 4 different projects so at the moment this one is a bit on the back burner but I try to think ahead when doing my preps.     AGAIN, This is just automating a process that I've already gotten working a different way.    I basically want a way to distribute the whole package without another developer having to reproduce every step I did to get the process working !
Reply
#17
Okay. I understand. But I was also interested in this topic, so I was digging into it. However, I would approach it differently, in my own way. I have my own file archiver written in QB64PE. It can pack multiple files into a single binary PMF2 file. It doesn't support subdirectories (it might take them, I haven't tried that), but I could work around that. But it's a complicated procedure. Then you don't need to write anything about the files in the source code at all. Just about the one that contains everything. More about it here: https://qb64phoenix.com/forum/showthread.php?tid=1533


Reply
#18
(11-15-2025, 12:39 AM)Petr Wrote: Okay. I understand. But I was also interested in this topic, so I was digging into it. However, I would approach it differently, in my own way. I have my own file archiver written in QB64PE. It can pack multiple files into a single binary PMF2 file. It doesn't support subdirectories (it might take them, I haven't tried that), but I could work around that. But it's a complicated procedure. Then you don't need to write anything about the files in the source code at all. Just about the one that contains everything. More about it here: https://qb64phoenix.com/forum/showthread.php?tid=1533
You were write about something I wasn't getting.  _EMBEDDED handle must be a literal string.   So I did more code to write other code and got this.   Still Using my DATA block I generated along with this !

Code: (Select All)

SUB WRITE_ISC_FILES
Dim OutFile$, filedata$
RESTORE ISCDATA

READ Outfile$
filedata$= _EMBEDDED$("iscHandle1")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle2")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle3")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle4")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle5")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle6")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle7")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle8")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle9")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle10")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle11")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle12")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle13")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle14")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle15")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle16")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle17")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle18")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle19")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle20")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle21")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle22")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle23")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle24")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle25")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle26")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle27")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle28")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle29")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle30")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle31")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle32")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle33")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle34")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle35")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle36")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle37")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle38")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle39")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle40")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle41")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle42")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle43")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle44")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle45")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle46")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle47")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle48")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle49")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle50")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle51")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle52")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle53")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle54")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle55")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle56")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle57")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle58")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle59")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle60")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle61")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle62")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle63")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle64")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle65")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle66")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle67")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle68")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle69")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle70")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle71")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle72")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle73")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle74")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle75")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle76")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle77")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle78")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle79")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle80")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle81")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle82")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle83")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle84")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle85")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle86")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle87")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle88")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle89")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle90")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle91")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle92")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle93")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle94")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle95")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle96")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle97")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle98")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle99")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle100")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle101")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle102")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle103")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle104")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle105")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle106")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle107")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle108")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle109")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle110")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle111")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle112")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle113")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle114")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle115")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle116")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle117")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle118")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle119")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle120")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle121")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle122")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle123")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle124")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle125")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle126")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle127")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle128")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle129")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle130")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle131")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle132")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle133")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle134")
_WRITEFILE Outfile$, filedata$
READ Outfile$
filedata$= _EMBEDDED$("iscHandle135")
_WRITEFILE Outfile$, filedata$
END SUB
Reply
#19
(11-15-2025, 12:39 AM)Petr Wrote: Okay. I understand. But I was also interested in this topic, so I was digging into it. However, I would approach it differently, in my own way. I have my own file archiver written in QB64PE. It can pack multiple files into a single binary PMF2 file. It doesn't support subdirectories (it might take them, I haven't tried that), but I could work around that. But it's a complicated procedure. Then you don't need to write anything about the files in the source code at all. Just about the one that contains everything. More about it here: https://qb64phoenix.com/forum/showthread.php?tid=1533


Got this working on Linux Smile   perfectly (main program is MIDI2ZSM.BAS)

I have some conditionals in the source for a Windows build but it's after midnight and I'll get the Windows build going tomorrow evening
(might work as is ,   but I usually don't get things right the first time !) 

Used this code to write out a *.bi and a *.bm with both the EMBEDS and a SUB to write them back to disc.

Code: (Select All)

ChDir _StartDir$

If _FileExists("isc.bi") Then Kill "isc.bi"

Open "isc.bi" For Output As #2
Print #2, "ISCDATA:"

f$ = _Files$("isc/*.*") 'wherever the files are located

D$ = "DATA "
f$ = _Files$("isc/*.*") 'wherever the files are located
Do While Len(f$) > 0
    If Left$(f$, 1) <> "." Then
        D$ = D$ + Chr$(34) + f$ + Chr$(34) + " ,"
        If Len(f$) = 0 Or Len(D$) > 100 Then
            D$ = Left$(D$, Len(D$) - 1)
            Print #2, D$
            D$ = "DATA "
        End If
    End If
    f$ = _Files$
Loop

D$ = D$ + Chr$(34) + "0000" + Chr$(34)

Print #2, D$
Print #2, ""
Print #2, ""

iscIndx = 1
slash$ = "/"
f$ = _Files$("isc/*.*") 'wherever the files are located
Do While Len(f$) > 0
    If Left$(f$, 1) <> "." Then
        f$ = "./isc" + slash$ + f$
        handle$ = "iscHandle" + _Trim$(Str$(iscIndx))
        Print #2, "$EMBED:'"; f$; "','"; handle$; "'"
        iscIndx = iscIndx + 1
    End If
    f$ = _Files$
Loop

Print #2, ""
Print #2, ""
Close #2

If _FileExists("isc.bm") Then Kill "isc.bm"
Open "isc.bm" For Output As #2

Print #2, "SUB WRITE_ISC_FILES"

Print #2, ""
Print #2, "DIM filedata$, Outfile$"
Print #2, ""
Print #2, "RESTORE ISCDATA"
Print #2, ""


iscIndx = 1
slash$ = "/"
f$ = _Files$("isc/*.*") 'wherever the files are located
Do While Len(f$) > 0
    If Left$(f$, 1) <> "." Then
        handle$ = "iscHandle" + _Trim$(Str$(iscIndx))
        Print #2, "READ Outfile$"
        Print #2, "filedata$= _EMBEDDED$(" + Chr$(34) + handle$ + Chr$(34) + ")"
        Print #2, "_WRITEFILE Outfile$, filedata$"
        iscIndx = iscIndx + 1
    End If
    f$ = _Files$
Loop

Print #2, "END SUB"


Close 2






HERE IT IS (and already compiled for Linux)

.zip   MIDI2ZSM.zip (Size: 906.76 KB / Downloads: 14)
Reply
#20
The zip file contains an EXE file of 24 KB in size. Windows Defender is screaming like crazy. It says it's a trojan. That's why I gave up trying to unpack the ZIP file.


Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  More info about Random Access files PhilOfPerth 28 830 02-25-2026, 01:50 PM
Last Post: ahenry3068
  program that stitches together a bunch of image files into one giant poster? madscijr 15 2,285 10-24-2024, 06:08 PM
Last Post: madscijr
  Linux HTTP WEB Server Issues - Large Files Fail old_coder 0 442 03-27-2024, 08:33 PM
Last Post: old_coder
  Making the content list of files inside a Zip ? euklides 13 2,324 02-08-2024, 03:52 PM
Last Post: euklides
  Indexed files PhilOfPerth 19 3,515 11-05-2023, 11:31 PM
Last Post: PhilOfPerth

Forum Jump:


Users browsing this thread: