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
EndProcedureAnd 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
- 
				quasiperfect
 - 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
						