Progi1984 - Programs & Userlibs
- Thorsten1867
- Addict
- Posts: 1372
- Joined: Wed Aug 24, 2005 4:02 pm
- Location: Germany
I download "LibXSLT", but I can't find the file "RW_LibXML2_Inc.pb" in the archive.
Translated with http://www.DeepL.com/Translator
Download of PureBasic - Modules
Download of PureBasic - Programs
[Windows 11 x64] [PB V5.7x]
Download of PureBasic - Modules
Download of PureBasic - Programs
[Windows 11 x64] [PB V5.7x]
does anyone have any examples of libcurl for changing directories and getting a list ?
I have something that works but it's just not right;
when it changes directory I get all previous content directories before it, and I really don't think it's right to have to add the address when changing directories it just feels wrong.
I have something that works but it's just not right;
Code: Select all
bad code see below for good code :)
Last edited by Inner on Mon Nov 17, 2008 8:55 am, edited 1 time in total.
Actually I think you've got a bug somewhere;
Corrupted strings in the output by using;
With a brutal lack of documentation, and enforced reconnection to change directories libcurl at least for PB doesn't seem like a preferred method right now for me, of course I could be just messing this all up, but without proper documentation it's a useless library not that has reflection on the importer of the library.
Code: Select all
ProcedureC Curl_FTP_Debug(*cp.l,type.l,*buf.l,length.l,*ctx.l)
PrintN(PeekS(*buf))
ProcedureReturn 0
EndProcedure
Code: Select all
*slist = curl_slist_append(*slist,"ls")
curl_easy_setopt(curl,#CURLOPT_QUOTE,*slist)
res = curl_easy_perform(curl)
curl_slist_free_all(slist)
Alright finally got it working there is however a serious buffer problem with;
With large directories it just falls on it's face and gives you half measures of what is actually being read in, when you view the debug output.
And yes there is a reason I'm nuking the ReceivedData string to "", because on calls to the function following it just keeps filling and filling into infinity.
The above is functional.
Code: Select all
ProcedureC RW_LibCurl_WriteFunction(*ptr, Size, NMemB, *Stream)
;retreives utf-8/ascii encoded data
Protected SizeProper.l = Size & 255
Protected NMemBProper.l = NMemB
Protected MyDataS.s
Shared ReceivedData.s
ReceivedData=""
Debug "!!! "+ReceivedData
MyDataS = PeekS(*ptr, SizeProper * NMemBProper)
ReceivedData + MyDataS
;Debug "> " + MyDataS
;Debug "# " + Str(Len(MyDataS))
;Debug "@ " + Str(Len(ReceivedData))
ProcedureReturn SizeProper * NMemBProper
EndProcedure
And yes there is a reason I'm nuking the ReceivedData string to "", because on calls to the function following it just keeps filling and filling into infinity.
Code: Select all
XIncludeFile "RW_LibCurl_Res.pb"
XIncludeFile "RW_LibCurl_Inc.pb"
;- Window Constants
;
Enumeration
#FTPMAINWINDOW
EndEnumeration
;- Gadget Constants
;
Enumeration
#GAD_FTPBROWSERLIST
#GAD_FTPLOCATION
#GAD_OK
#GAD_CANCEL
#GAD_FTPUP
EndEnumeration
#DIRECTORY=1000
Macro CurlError(value)
PeekS(curl_easy_strerror(value))
EndMacro
ProcedureC Curl_FTP_Debug(*cp.l,type.l,*buf.l,length.l,*ctx.l)
PrintN(PeekS(*buf))
ProcedureReturn 0
EndProcedure
Procedure Curl_FTP_List(curl.l,ftp_url.s,login.s, mdp.s, timeout.l = 10)
url.s = "ftp://"+login+":"+mdp+"@"+ftp_url
Debug url
If curl=0
curl = curl_easy_init()
EndIf
If curl
curl_easy_setopt(curl, #CURLOPT_URL, @url)
curl_easy_setopt(curl, #CURLOPT_TIMEOUT, timeout.l)
curl_easy_setopt(curl, #CURLOPT_CONNECTTIMEOUT, timeout.l)
curl_easy_setopt(curl, #CURLOPT_FTPLISTONLY, #True)
curl_easy_setopt(curl, #CURLOPT_DEBUGFUNCTION, @Curl_FTP_Debug())
curl_easy_setopt(curl, #CURLOPT_VERBOSE, #True)
curl_easy_setopt(curl, #CURLOPT_WRITEFUNCTION, @RW_LibCurl_WriteFunction())
res = curl_easy_perform(curl)
If res <> #False
ProcedureReturn #False;
Else
ClearGadgetItems(#GAD_FTPBROWSERLIST)
FileList.s=""
FileList.s = ReplaceString(RW_LibCurl_GetData(), Chr(13)+Chr(10),",")
For i = 1 To CountString(FileList, ",")
If GetExtensionPart(StringField(FileList, i, ",")) =""
;Debug "["+StringField(FileList, i, "-")+"]"
AddGadgetItem(#GAD_FTPBROWSERLIST,-1,"*"+Chr(10)+StringField(FileList, i, ","))
SetGadgetItemData(#GAD_FTPBROWSERLIST,i-1,#DIRECTORY)
Else
AddGadgetItem(#GAD_FTPBROWSERLIST,-1,Chr(10)+StringField(FileList, i, ","))
EndIf
Next
ProcedureReturn curl
EndIf
Else
ProcedureReturn #False
EndIf
EndProcedure
Procedure.s DirUP(string.s)
dirdepth.l=CountString(string,"/")
For i=1 To Len(string)
If Mid(string,i,1)="/"
depthlvl=depthlvl+1
Debug Mid(string,1,i)
If depthlvl=dirdepth-1
ProcedureReturn Mid(string,1,i)
EndIf
EndIf
Next
EndProcedure
Procedure Open_FTPMAINWINDOW(address.s,user.s,pass.s,dir.s)
If OpenWindow(#FTPMAINWINDOW, 404, 316, 466, 500, "FTP Browser ("+address+")", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
ListIconGadget(#GAD_FTPBROWSERLIST, 5, 35, 455, 430, "", 25, #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection)
AddGadgetColumn(#GAD_FTPBROWSERLIST, 1, "File", 300)
AddGadgetColumn(#GAD_FTPBROWSERLIST, 2, "Size", 100)
StringGadget(#GAD_FTPLOCATION, 40, 5, 415, 25, "")
ButtonGadget(#GAD_FTPUP, 5, 5, 25, 25, "Up")
ButtonGadget(#GAD_OK, 5, 470, 105, 25, "Ok")
ButtonGadget(#GAD_CANCEL, 355, 470, 105, 25, "Cancel")
EndIf
SetGadgetText(#GAD_FTPLOCATION,dir)
WindowEvent()
OpenConsole()
curl=Curl_FTP_List(0,address.s,user.s,pass.s)
Repeat
event=WaitWindowEvent()
eventtype=EventType()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case #GAD_FTPUP
dir.s=DirUP(GetGadgetText(#GAD_FTPLOCATION))
Debug dir
Curl_FTP_List(curl,address+dir+"/",user,pass)
SetGadgetText(#GAD_FTPLOCATION,dir)
Case #GAD_FTPBROWSERLIST
If eventtype=#PB_EventType_LeftDoubleClick
If GetGadgetItemData(#GAD_FTPBROWSERLIST,GetGadgetState(#GAD_FTPBROWSERLIST))=#DIRECTORY
newdir.s=GetGadgetItemText(#GAD_FTPBROWSERLIST,GetGadgetState(#GAD_FTPBROWSERLIST),1)
olddir.s=GetGadgetText(#GAD_FTPLOCATION)
dir.s=olddir+newdir+"/"
Curl_FTP_List(curl,address+dir+"/",user,pass)
SetGadgetText(#GAD_FTPLOCATION,dir)
EndIf
EndIf
EndSelect
EndSelect
Until event=#PB_Event_CloseWindow
curl_easy_cleanup(curl)
CloseConsole()
EndProcedure
Open_FTPMAINWINDOW("ftp.modland.com","anonymous","","/")
a fix;
warning may have bugs, it's entirely possible that a folder/file could start after the last #FTPEOL and continue on until the next call from libcurl to the writefunction, because we're dealing with a stream.
Code: Select all
#FTPEOL=Chr(13)+Chr(10)
ProcedureC LibCurl_WriteFunction(*ptr, Size, NMemB, *Stream)
Protected SizeProper.l = Size & 255
Protected NMemBProper.l = NMemB
rdata.s=PeekS(*ptr)
loops=CountString(rdata,#FTPEOL)
For i=1 To loops
file.s=RemoveString(StringField(rdata,i,#FTPEOL),Chr(13))
file.s=RemoveString(file,Chr(10))
PrintN(file)
Next
ProcedureReturn SizeProper * NMemBProper
EndProcedure
Code: Select all
;================================================================
; Project LibCurl
; Title BrowseDownload.pb
; Author T.J.Roughton
; Date 19/11/2008
; Notes Browse & Download
;================================================================
XIncludeFile "RW_LibCurl_Res.pb"
XIncludeFile "RW_LibCurl_Inc.pb"
;- Window Constants
;
Enumeration
#FTPMAINWINDOW
EndEnumeration
;- Gadget Constants
;
Enumeration
#GAD_FTPBROWSERLIST
#GAD_FTPLOCATION
#GAD_OK
#GAD_CANCEL
#GAD_FTPUP
#GAD_GO
#GAD_DOWNLOAD
#GAD_PROGRESS
EndEnumeration
#DIRECTORY=1000
#FTPEOL=Chr(13)+Chr(10)
Structure S_FtpFile
filename.s
stream.l
EndStructure
Global ftpfile.S_FtpFile
Macro CurlError(value)
PeekS(curl_easy_strerror(value))
EndMacro
ProcedureC Curl_FTP_Debug(*cp.l,type.l,*buf.l,length.l,*ctx.l)
PrintN(PeekS(*buf))
ProcedureReturn 0
EndProcedure
ProcedureC LibCurl_WriteFunction(*ptr, Size, NMemB, *Stream)
Protected SizeProper.l = Size & 255
Protected NMemBProper.l = NMemB
rdata.s=PeekS(*ptr)
;
; LIST
;
; nline.l=CountString(rdata,#FTPEOL)
; For i=1 To nline
; line.s=StringField(rdata,i,#FTPEOL)
; idfile.b=#True
; For id=1 To 2
; If LCase(Mid(line,id,1))="d"
; idfile=#False
; Break
; EndIf
; Next
; If idfile=#False
; ;Debug "<DIR>"+Mid(line,10,Len(line))
; Else
; ;Debug "<FILE>"+Mid(line,10,Len(line))
; EndIf
; Debug ReplaceString(line," ","#")
; Next
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Linux
iloop=CountString(rdata,Chr(10))
For i=1 To iloop
line.s=StringField(rdata,i,Chr(10))
numargs.l=CountString(line,";")+1
file.s=Trim(StringField(line,numargs,";"))
If (file<>"." And file<>"..")
idfile.b=#True
For numi=1 To numargs
WindowEvent()
flag.s=Trim(LCase(StringField(line,numi,";")))
If (FindString(flag,"type=dir",0) And file<>"")
AddGadgetItem(#GAD_FTPBROWSERLIST,-1,"*"+Chr(10)+file)
SetGadgetItemData(#GAD_FTPBROWSERLIST,CountGadgetItems(#GAD_FTPBROWSERLIST)-1,#DIRECTORY)
idfile.b=#False
ElseIf FindString(flag,"type=file",0)
filename.s=file
ElseIf FindString(flag,"size=",0)
filesize.s=RemoveString(flag,"size=",#PB_String_NoCase)
EndIf
Next
If (idfile=#True And filename<>"")
AddGadgetItem(#GAD_FTPBROWSERLIST,-1,Chr(10)+filename+Chr(10)+filesize)
EndIf
EndIf
Next
CompilerCase #PB_OS_Windows
iloop=CountString(rdata,#FTPEOL)
For i=1 To iloop
line.s=RemoveString(StringField(rdata,i,#FTPEOL),Chr(13))
numargs.l=CountString(line,";")+1
file.s=Trim(StringField(line,numargs,";"))
If (file<>"." And file<>"..")
idfile.b=#True
For numi=1 To numargs
WindowEvent()
flag.s=Trim(LCase(StringField(line,numi,";")))
If (FindString(flag,"type=dir",0) And file<>"")
AddGadgetItem(#GAD_FTPBROWSERLIST,-1,"*"+Chr(10)+file)
SetGadgetItemData(#GAD_FTPBROWSERLIST,CountGadgetItems(#GAD_FTPBROWSERLIST)-1,#DIRECTORY)
idfile.b=#False
ElseIf FindString(flag,"type=file",0)
filename.s=file
ElseIf FindString(flag,"size=",0)
filesize.s=RemoveString(flag,"size=",#PB_String_NoCase)
EndIf
Next
If (idfile=#True And filename<>"")
AddGadgetItem(#GAD_FTPBROWSERLIST,-1,Chr(10)+filename+Chr(10)+filesize)
EndIf
EndIf
Next
CompilerEndSelect
ProcedureReturn SizeProper * NMemBProper
EndProcedure
Procedure Curl_FTP_List(curl.l,ftp_url.s,dir.s,login.s, mdp.s, timeout.l = 1000)
url.s = "ftp://"+login+":"+mdp+"@"+ftp_url
If curl=0
curl = curl_easy_init()
EndIf
If curl
curl_easy_setopt(curl, #CURLOPT_URL, @url)
curl_easy_setopt(curl, #CURLOPT_TIMEOUT, timeout.l)
curl_easy_setopt(curl, #CURLOPT_CONNECTTIMEOUT, timeout.l)
;curl_easy_setopt(curl, #CURLOPT_FTPLISTONLY, #True)
curl_easy_setopt(curl, #CURLOPT_DEBUGFUNCTION, @Curl_FTP_Debug())
curl_easy_setopt(curl, #CURLOPT_VERBOSE, #True)
curl_easy_setopt(curl, #CURLOPT_WRITEFUNCTION, @LibCurl_WriteFunction())
;ftpdir.s="LIST "
ftpdir.s="MLSD "
curl_easy_setopt(curl, #CURLOPT_CUSTOMREQUEST,@ftpdir)
res = curl_easy_perform(curl)
If res <> #False
ProcedureReturn #False;
Else
ProcedureReturn curl
EndIf
Else
ProcedureReturn #False
EndIf
EndProcedure
ProcedureC.l Curl_FTP_Progress(clientp.l,total.d,dlnow.d,ultotal.d,ulnow.d)
WindowEvent()
SetGadgetAttribute(#GAD_PROGRESS,#PB_ProgressBar_Maximum,total)
SetGadgetState(#GAD_PROGRESS,dlnow)
ProcedureReturn 0
EndProcedure
ProcedureC.l FTP_WriteFile(buffer.l, size.l, nmemb.l, *Stream.S_FtpFile)
WindowEvent()
If *Stream And Not *Stream\stream
; Open file For writing
*Stream\stream = CreateFile(#PB_Any, *Stream\filename)
Debug "CreateFile()"
If Not *Stream\stream
; Failure, can't open file to write
ProcedureReturn -1
EndIf
EndIf
If IsFile(*Stream\stream)<>0
WriteData(*Stream\stream, buffer, (size & 255) * nmemb)
EndIf
ProcedureReturn (size & 255) * nmemb
EndProcedure
Procedure Curl_FTP_Download(curl.l,ftp_url.s,localfile.s,login.s, mdp.s, timeout.l = 1000)
url.s = "ftp://"+login+":"+mdp+"@"+ftp_url
ftpfile\filename=localfile ; local file
Debug url
Debug localfile
If curl
curl_easy_setopt(curl, #CURLOPT_URL, @url)
curl_easy_setopt(curl, #CURLOPT_WRITEFUNCTION, @FTP_WriteFile())
curl_easy_setopt(curl, #CURLOPT_WRITEDATA, ftpfile)
curl_easy_setopt(curl, #CURLOPT_NOPROGRESS, 0)
curl_easy_setopt(curl, #CURLOPT_PROGRESSFUNCTION,@Curl_FTP_Progress())
curl_easy_setopt(curl, #CURLOPT_VERBOSE, 0)
res = curl_easy_perform(curl)
If #CURLE_OK <> res
Debug ">"+Str(res)
EndIf
If ftpfile\stream
CloseFile(ftpfile\stream)
ftpfile\stream=0
SetGadgetState(#GAD_PROGRESS,0)
Else
Debug "!@##"
EndIf
EndIf
EndProcedure
Procedure.s DirUP(string.s)
dirdepth.l=CountString(string,"/")
For i=1 To Len(string)
If Mid(string,i,1)="/"
depthlvl=depthlvl+1
Debug Mid(string,1,i)
If depthlvl=dirdepth-1
ProcedureReturn Mid(string,1,i)
EndIf
EndIf
Next
EndProcedure
Procedure Open_FTPMAINWINDOW(address.s,user.s,pass.s,dir.s)
If OpenWindow(#FTPMAINWINDOW, 404, 316, 466, 500, "FTP Browser ("+address+")", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
ListIconGadget(#GAD_FTPBROWSERLIST, 5, 35, 455, 430, "", 25, #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection)
AddGadgetColumn(#GAD_FTPBROWSERLIST, 1, "File", 300)
AddGadgetColumn(#GAD_FTPBROWSERLIST, 2, "Size", 100)
StringGadget(#GAD_FTPLOCATION, 40, 5, 385, 25, "")
ButtonGadget(#GAD_FTPUP, 5, 5, 30, 25, "Up")
ButtonGadget(#GAD_GO, 430, 5, 30, 25, "Go")
ButtonGadget(#GAD_OK, 5, 470, 105, 25, "Ok")
ButtonGadget(#GAD_CANCEL, 355, 470, 105, 25, "Cancel")
ButtonGadget(#GAD_DOWNLOAD, 120, 470, 105, 25, "Download")
ProgressBarGadget(#GAD_PROGRESS,240,470,100,25,0,0)
EndIf
SetGadgetText(#GAD_FTPLOCATION,dir)
WindowEvent()
OpenConsole()
curl=Curl_FTP_List(0,address,dir,user,pass)
Repeat
event=WaitWindowEvent()
eventtype=EventType()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case #GAD_DOWNLOAD
If GetGadgetItemData(#GAD_FTPBROWSERLIST,GetGadgetState(#GAD_FTPBROWSERLIST))<>#DIRECTORY
file.s=GetGadgetItemText(#GAD_FTPBROWSERLIST,GetGadgetState(#GAD_FTPBROWSERLIST),1)
dir.s=GetGadgetText(#GAD_FTPLOCATION)
Curl_FTP_Download(curl,address+dir+file,file,user,pass)
EndIf
Case #GAD_GO
ClearGadgetItems(#GAD_FTPBROWSERLIST)
dir.s=GetGadgetText(#GAD_FTPLOCATION)
If dir.s="" : dir="/" : EndIf
Curl_FTP_List(curl,address+dir+"/",dir,user,pass)
Case #GAD_FTPUP
ClearGadgetItems(#GAD_FTPBROWSERLIST)
dir.s=DirUP(GetGadgetText(#GAD_FTPLOCATION))
If dir.s="" : dir="/" : EndIf
Curl_FTP_List(curl,address+dir+"/",dir,user,pass)
SetGadgetText(#GAD_FTPLOCATION,dir)
Case #GAD_FTPBROWSERLIST
If eventtype=#PB_EventType_LeftDoubleClick
If GetGadgetItemData(#GAD_FTPBROWSERLIST,GetGadgetState(#GAD_FTPBROWSERLIST))=#DIRECTORY
newdir.s=GetGadgetItemText(#GAD_FTPBROWSERLIST,GetGadgetState(#GAD_FTPBROWSERLIST),1)
olddir.s=GetGadgetText(#GAD_FTPLOCATION)
dir.s=olddir+newdir+"/"
ClearGadgetItems(#GAD_FTPBROWSERLIST)
Curl_FTP_List(curl,address+dir+"/",dir,user,pass)
SetGadgetText(#GAD_FTPLOCATION,dir)
EndIf
EndIf
EndSelect
EndSelect
Until event=#PB_Event_CloseWindow
curl_easy_cleanup(curl)
CloseConsole()
EndProcedure
Open_FTPMAINWINDOW("<your address here>","anonymous","","/")
Linux libid3.so
Add to : RW_id3lib_Inc.pb
Code: Select all
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
; INSERT THE WINDOWS STUFF HERE.
CompilerEndIf
CompilerIf #PB_Compiler_OS = #PB_OS_Linux
ImportC "libid3.so"
;- field wrappers
ID3Field_AddASCII(*field.ID3Field, string.p-ascii) As "ID3Field_AddASCII"
ID3Field_AddUNICODE(*field.ID3Field, string.p-unicode) As "ID3Field_AddUNICODE"
ID3Field_Clear(*field.ID3Field) As "ID3Field_Clear"
ID3Field_FromFile(*field.ID3Field, filename.p-ascii) As "ID3Field_FromFile"
ID3Field_GetASCII(*field.ID3Field, *buffer, maxChars.l) As "ID3Field_GetASCII"
ID3Field_GetASCIIItem(*field.ID3Field, *buffer, maxChars.l, itemNum.l) As "ID3Field_GetASCIIItem"
ID3Field_GetBINARY(*field.ID3Field, *buffer, buffLength.l) As "ID3Field_GetBINARY"
ID3Field_GetINT(*field.ID3Field) As "ID3Field_GetINT"
ID3Field_GetNumTextItems(*field.ID3Field) As "ID3Field_GetNumTextItems"
ID3Field_GetUNICODE(*field.ID3Field, *buffer, maxChars.l) As "ID3Field_GetUNICODE"
ID3Field_GetUNICODEItem(*field.ID3Field, *buffer.l, maxChars.l, itemNum.l) As "ID3Field_GetUNICODEItem"
ID3Field_SetASCII(*field.ID3Field, string.p-ascii) As "ID3Field_SetASCII"
ID3Field_SetBINARY(*field.ID3Field, *data_, size.l) As "ID3Field_SetBINARY"
ID3Field_SetINT(*field.ID3Field, data_.l) As "ID3Field_SetINT"
ID3Field_SetUNICODE(*field.ID3Field, string.p-unicode) As "ID3Field_SetUNICODE"
ID3Field_Size(*field.ID3Field) As "ID3Field_Size"
ID3Field_ToFile(*field.ID3Field, filename.p-ascii) As "ID3Field_ToFile"
;-frame wrappers
ID3Frame_Clear(*frame.ID3Frame) As "ID3Frame_Clear"
ID3Frame_Delete(*frame.ID3Frame) As "ID3Frame_Delete"
ID3Frame_GetCompression(*frame.ID3Frame) As "ID3Frame_GetCompression"
ID3Frame_GetField(*frame.ID3Frame, name.l) As "ID3Frame_GetField"
ID3Frame_GetID(*frame.ID3Frame) As "ID3Frame_GetID"
ID3Frame_New() As "ID3Frame_New"
ID3Frame_NewID(id.l) As "ID3Frame_NewID"
ID3Frame_SetCompression(*frame.ID3Frame, comp.l) As "ID3Frame_SetCompression"
ID3Frame_SetID(*frame.ID3Frame, id.l) As "ID3Frame_SetID"
ID3TagConstIterator_Delete(*iter.ID3TagConstIterator) As "ID3TagConstIterator_Delete"
ID3TagConstIterator_GetNext(*iter.ID3TagConstIterator) As "ID3TagConstIterator_GetNext"
;-tag wrappers
ID3TagIterator_Delete(*iter.ID3TagIterator) As "ID3TagIterator_Delete"
ID3TagIterator_GetNext(*iter.ID3TagIterator) As "ID3TagIterator_GetNext"
ID3Tag_AddFrame(*tag.ID3Tag, *frame.ID3Frame) As "ID3Tag_AddFrame"
ID3Tag_AddFrames(*tag.ID3Tag, *frames.ID3Frame, num.l) As "ID3Tag_AddFrames"
ID3Tag_AttachFrame(*tag.ID3Tag, *frame.ID3Frame) As "ID3Tag_AttachFrame"
ID3Tag_Clear(*tag.ID3Tag) As "ID3Tag_Clear"
ID3Tag_CreateConstIterator(*tag.ID3Tag) As "ID3Tag_CreateConstIterator"
ID3Tag_CreateIterator(*tag.ID3Tag) As "ID3Tag_CreateIterator"
ID3Tag_Delete(*tag.ID3Tag) As "ID3Tag_Delete"
ID3Tag_FindFrameWithASCII(*tag.ID3Tag, id.l, fld.l, data_.p-ascii) As "ID3Tag_FindFrameWithASCII"
ID3Tag_FindFrameWithID(*tag.ID3Tag, id.l) As "ID3Tag_FindFrameWithID"
ID3Tag_FindFrameWithINT(*tag.ID3Tag, id.l, fld.l, data_.l) As "ID3Tag_FindFrameWithINT"
ID3Tag_FindFrameWithUNICODE(*tag.ID3Tag, id.l, fld.l, data_.p-unicode) As "ID3Tag_FindFrameWithUNICODE"
ID3Tag_HasChanged(*tag.ID3Tag) As "ID3Tag_HasChanged"
ID3Tag_HasTagType(*tag.ID3Tag, tt.l) As "ID3Tag_HasTagType"
ID3Tag_Link(*tag.ID3Tag, filename.p-ascii) As "ID3Tag_Link"
ID3Tag_LinkWithFlags(*tag.ID3Tag, filename.p-ascii, flags.l) As "ID3Tag_LinkWithFlags"
ID3Tag_New() As "ID3Tag_New"
ID3Tag_NumFrames(*tag.ID3Tag) As "ID3Tag_NumFrames"
ID3Tag_Parse(*tag.ID3Tag, *header, *buffer) As "ID3Tag_Parse"
ID3Tag_RemoveFrame(*tag.ID3Tag, *frame.ID3Frame) As "ID3Tag_RemoveFrame"
ID3Tag_SetExtendedHeader(*tag.ID3Tag, ext.l) As "ID3Tag_SetExtendedHeader"
ID3Tag_SetPadding(*tag.ID3Tag, pad.l) As "ID3Tag_SetPadding"
ID3Tag_SetUnsync(*tag.ID3Tag, unsync.l) As "ID3Tag_SetUnsync"
ID3Tag_Strip(*tag.ID3Tag, ulTagFlags.l) As "ID3Tag_Strip"
ID3Tag_Update(*tag.ID3Tag) As "ID3Tag_Update"
ID3Tag_UpdateByTagType(*tag.ID3Tag, tag_type.l) As "ID3Tag_UpdateByTagType"
EndImport
CompilerEndIf
- Thorsten1867
- Addict
- Posts: 1372
- Joined: Wed Aug 24, 2005 4:02 pm
- Location: Germany
How can I download "RLibPlus"? I can't find any valid link.
Translated with http://www.DeepL.com/Translator
Download of PureBasic - Modules
Download of PureBasic - Programs
[Windows 11 x64] [PB V5.7x]
Download of PureBasic - Modules
Download of PureBasic - Programs
[Windows 11 x64] [PB V5.7x]
Wahhh ! a lot of post for my small projects !
Build LibPlus for PB 4.3 : http://partage.rootslabs.net/RLibPlus_4.3.zip
I finish moebius v1 and my website, and i answer at all theses posts and MPs.
Build LibPlus for PB 4.3 : http://partage.rootslabs.net/RLibPlus_4.3.zip
I finish moebius v1 and my website, and i answer at all theses posts and MPs.
Re: Progi1984 - Programs & Userlibs
Anybody have a valid link to the RJSON.zip file for parsing JSON?
Thanks,
Matt
Thanks,
Matt
Re: Progi1984 - Programs & Userlibs
Thanks man... however I get the usual StringExtension library not found issue with PureBasic 4.51... with 4.20 it works. Anyway it could be updated?

Matt
-
- Enthusiast
- Posts: 157
- Joined: Tue Feb 13, 2007 6:16 pm
- Location: Romania
- Contact:
Re: Progi1984 - Programs & Userlibs
i downloaded rcam and tried to run a example but the files "RCam_Res.pb" and "RCam_Inc.pb" are not included in the zip file can you please update the zip ?
Registered user of PureBasic