Converting PB 4.41 Program to PB 6
Posted: Thu Sep 28, 2023 10:12 pm
I found a tool online, and it happened to have PB source code with it, the original complied program supplied from 2010 works, but when I compile the software it does not. Has much changed in this code since then, that could be stopping this from working correctly, but not throwing up any errors as it runs:
Code: Select all
;/ TZX2TAP Converter
; (c) 2010 By LCD
; Written using PureBasic 4.41
; This Software is Open Source
; No WinAPI Calls used, so multiplatform-compatible
version$="0.21"
; Added: Column witdhs now saved in Preference file
directory$=GetCurrentDirectory()
Global *Buffer=AllocateMemory(65536)
Procedure.s GetFileName(Filename$); Without suffixes
len=Len(Filename$):Pos=len
For a=1 To len
If Mid(Filename$,a,1)="."
Pos=a
EndIf
Next a
ProcedureReturn Left(Filename$,Pos-1)
EndProcedure
Procedure TZX2TAP(Filename$)
Shared Report
Out$=GetFileName(Filename$)+".tap"
error=0
fileIn=ReadFile(#PB_Any,Filename$)
If fileIn And FileSize(Out$)<1
fileout=CreateFile(#PB_Any,Out$)
If fileout
ReadData(fileIn,*Buffer,10)
ID$=PeekS(*Buffer,7)
If ID$="ZXTape!" And PeekB(*Buffer+7)&$FF=$1A
Repeat
id=ReadByte(fileIn)&255
Select id
Case $10
pause=ReadWord(fileIn)&$FFFF
length=ReadWord(fileIn)&$FFFF
ReadData(fileIn,*Buffer,length)
WriteWord(fileout,length)
WriteData(fileout,*Buffer,length)
Case $11
Pilot=ReadWord(fileIn)&$FFFF
Sync0=ReadWord(fileIn)&$FFFF
Sync1=ReadWord(fileIn)&$FFFF
Pulse0=ReadWord(fileIn)&$FFFF
Pulse1=ReadWord(fileIn)&$FFFF
Tone=ReadWord(fileIn)&$FFFF
lastbits=ReadByte(fileIn)&255
pause=ReadWord(fileIn)&$FFFF
length=ReadWord(fileIn)&$FFFF+ReadByte(fileIn)<<16
If length>65535
length=65535
AddGadgetItem(Report,-1,Out$+": size over 65535 bytes cannot be saved in TAP")
EndIf
ReadData(fileIn,*Buffer,length)
WriteWord(fileout,length)
WriteData(fileout,*Buffer,length)
Case $12 To $13,$15 To $1F
error=1
error$="Unsupported!"
AddGadgetItem(Report,-1,Out$+": Unsupported block found ($"+Hex(id)+")")
Case $14
Pulse0=ReadWord(fileIn)&$FFFF
Pulse1=ReadWord(fileIn)&$FFFF
lastbits=ReadByte(fileIn)&255
pause=ReadWord(fileIn)&$FFFF
length=ReadWord(fileIn)&$FFFF+ReadByte(fileIn)<<16
If length>65535
length=65535
AddGadgetItem(Report,-1,Out$+": size over 65535 bytes cannot be saved in TAP")
EndIf
ReadData(fileIn,*Buffer,length)
WriteWord(fileout,length)
WriteData(fileout,*Buffer,length)
Case $20
ReadWord(fileIn)
Case $21,$30
length=ReadByte(fileIn)&255
ReadData(fileIn,*Buffer,length)
text$=PeekS(*Buffer,length)
Case $22 To $29
Case $2A
ReadLong(fileIn)
Case $31
pause=ReadByte(fileIn)&255
length=ReadByte(fileIn)&255
ReadData(fileIn,*Buffer,length)
text$=PeekS(*Buffer,length)
Case $32
length=ReadWord(fileIn)&$FFFF
ReadData(fileIn,*Buffer,length)
text$=PeekS(*Buffer,length)
Case $33
Infos=ReadByte(fileIn)&$FF
ReadData(fileIn,*Buffer,Infos*3)
Case $35
ReadData(fileIn,*Buffer,10)
length=ReadWord(fileIn)&$FFFF
ReadData(fileIn,*Buffer,length)
Case $5A
ReadData(fileIn,*Buffer,9)
EndSelect
Until Eof(fileIn) Or error
CloseFile(fileout)
EndIf
EndIf
CloseFile(fileIn)
EndIf
EndProcedure
CompilerSelect #PB_Compiler_OS ;{
CompilerCase #PB_OS_Linux
sys$="Tux_"
CompilerCase #PB_OS_MacOS
sys$="Mac_"
CompilerCase #PB_OS_Windows
sys$="Win_"
CompilerEndSelect ;}
a=OpenPreferences("tzx2tap.ini") ;{ Load Preferences from ini
ExaminePreferenceGroups()
PreferenceGroup("001") ;{
win_posx=ReadPreferenceLong("WinPosX",0)
win_posy=ReadPreferenceLong("WinPosY",0)
win_sizx=ReadPreferenceLong("WinSizX",1021)
win_sizy=ReadPreferenceLong("WinSizY",700)
splitterA=ReadPreferenceLong("Splitter1",200)
splitterB=ReadPreferenceLong("Splitter2",500)
directory$=ReadPreferenceString("Currentdir",directory$)
column0=ReadPreferenceLong("column0",300)
column1=ReadPreferenceLong("column1",100)
column2=ReadPreferenceLong("column2",100)
column3=ReadPreferenceLong("column3",100)
ClosePreferences() ;}
;}
window=OpenWindow(#PB_Any,win_posx,win_posy,win_sizx,win_sizy,sys$+"TZX2TAP v. "+version$+" Written in 2010 by LCD",#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_SizeGadget)
CompilerIf #PB_Compiler_OS=#PB_OS_Windows ;{
SmartWindowRefresh(window,1)
CompilerEndIf ;}
TZXDirs=ExplorerTreeGadget(#PB_Any,0,0,200,500,directory$,#PB_Explorer_AlwaysShowSelection|#PB_Explorer_NoFiles|#PB_Explorer_NoDriveRequester|#PB_Explorer_AutoSort)
TZXFiles=ExplorerListGadget(#PB_Any,200,0,700,500,directory$+"*.tzx",#PB_Explorer_AlwaysShowSelection|#PB_Explorer_MultiSelect|#PB_Explorer_GridLines|#PB_Explorer_FullRowSelect|#PB_Explorer_NoFolders|#PB_Explorer_NoParentFolder|#PB_Explorer_NoDirectoryChange|#PB_Explorer_NoDriveRequester|#PB_Explorer_AutoSort)
SetGadgetItemAttribute(TZXFiles,0,#PB_Explorer_ColumnWidth,column0,0)
SetGadgetItemAttribute(TZXFiles,0,#PB_Explorer_ColumnWidth,column1,1)
SetGadgetItemAttribute(TZXFiles,0,#PB_Explorer_ColumnWidth,column2,2)
SetGadgetItemAttribute(TZXFiles,0,#PB_Explorer_ColumnWidth,column3,3)
Report=EditorGadget(#PB_Any,0,500,920,200,#PB_Editor_ReadOnly)
splitter1=SplitterGadget(#PB_Any,0,0,920,500,TZXDirs,TZXFiles,#PB_Splitter_Vertical|#PB_Splitter_Separator)
splitter2=SplitterGadget(#PB_Any,0,0,920,700,splitter1,Report,#PB_Splitter_Separator)
ConvertButton=ButtonGadget(#PB_Any,900,0,120,29,"Convert to TAP")
Gosub resizing
SetGadgetState(splitter1,splitterA)
SetGadgetState(splitter2,splitterB)
Repeat
wwe=WaitWindowEvent()
If wwe=#PB_Event_Gadget;{
Select EventGadget()
Case TZXDirs
SetGadgetText(TZXFiles,GetGadgetText(TZXDirs))
Case ConvertButton
Gosub conversion
EndSelect ;}
ElseIf wwe=#PB_Event_SizeWindow ;{
Gosub resizing
EndIf ;}
Until wwe=#PB_Event_CloseWindow
a=CreatePreferences("tzx2tap.ini") ;{ Save Preferences
PreferenceGroup("001") ;{
WritePreferenceLong("WinPosX",WindowX(window))
WritePreferenceLong("WinPosY",WindowY(window))
WritePreferenceLong("WinSizX",WindowWidth(window))
WritePreferenceLong("WinSizY",WindowHeight(window))
WritePreferenceLong("Splitter1",GetGadgetState(splitter1))
WritePreferenceLong("Splitter2",GetGadgetState(splitter2))
WritePreferenceString("Currentdir",GetGadgetText(TZXDirs))
WritePreferenceLong("column0",GetGadgetItemAttribute(TZXFiles,0,#PB_Explorer_ColumnWidth,0))
WritePreferenceLong("column1",GetGadgetItemAttribute(TZXFiles,0,#PB_Explorer_ColumnWidth,1))
WritePreferenceLong("column2",GetGadgetItemAttribute(TZXFiles,0,#PB_Explorer_ColumnWidth,2))
WritePreferenceLong("column3",GetGadgetItemAttribute(TZXFiles,0,#PB_Explorer_ColumnWidth,3))
ClosePreferences() ;}
;}
CloseWindow(window)
End
resizing: ;{
sizex=WindowWidth(window)
sizey=WindowHeight(window)
ResizeGadget(splitter2,#PB_Ignore,#PB_Ignore,sizex-121,sizey)
ResizeGadget(ConvertButton,sizex-120,#PB_Ignore,#PB_Ignore,#PB_Ignore)
;}
conversion: ;{
ClearGadgetItems(Report)
HideGadget(TZXFiles,1)
For a=0 To CountGadgetItems(TZXFiles)-1
dir$=GetGadgetText(TZXFiles)
If GetGadgetItemState(TZXFiles,a)&#PB_Explorer_Selected
Filename$=GetGadgetItemText(TZXFiles,a,0)
ext$=LCase(GetExtensionPart(Filename$))
If ext$="tzx"
fullpath$=dir$+Filename$
b=GetFileAttributes(fullpath$)
TZX2TAP(fullpath$)
AddGadgetItem(Report,-1,Filename$)
EndIf
EndIf
Next a
HideGadget(TZXFiles,0)
Return ;}