Progi1984 - Programs & Userlibs

Applications, Games, Tools, User libs and useful stuff coded in PureBasic
User avatar
Thorsten1867
Addict
Addict
Posts: 1372
Joined: Wed Aug 24, 2005 4:02 pm
Location: Germany

Post by Thorsten1867 »

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]
User avatar
Inner
PureBasic Expert
PureBasic Expert
Posts: 714
Joined: Fri Apr 25, 2003 4:47 pm
Location: New Zealand

Post by Inner »

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;

Code: Select all

bad code see below for good code :)
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.
Last edited by Inner on Mon Nov 17, 2008 8:55 am, edited 1 time in total.
User avatar
Inner
PureBasic Expert
PureBasic Expert
Posts: 714
Joined: Fri Apr 25, 2003 4:47 pm
Location: New Zealand

Post by Inner »

Actually I think you've got a bug somewhere;

Code: Select all

ProcedureC Curl_FTP_Debug(*cp.l,type.l,*buf.l,length.l,*ctx.l)
  PrintN(PeekS(*buf))
  ProcedureReturn 0
EndProcedure
Corrupted strings in the output by using;

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)
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.
User avatar
Inner
PureBasic Expert
PureBasic Expert
Posts: 714
Joined: Fri Apr 25, 2003 4:47 pm
Location: New Zealand

Post by Inner »

Alright finally got it working there is however a serious buffer problem with;

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
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.

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","","/")
The above is functional.
User avatar
Inner
PureBasic Expert
PureBasic Expert
Posts: 714
Joined: Fri Apr 25, 2003 4:47 pm
Location: New Zealand

Post by Inner »

a fix;

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
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.
User avatar
Inner
PureBasic Expert
PureBasic Expert
Posts: 714
Joined: Fri Apr 25, 2003 4:47 pm
Location: New Zealand

Post by Inner »

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","","/")
User avatar
Inner
PureBasic Expert
PureBasic Expert
Posts: 714
Joined: Fri Apr 25, 2003 4:47 pm
Location: New Zealand

Linux libid3.so

Post by Inner »

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
User avatar
Thorsten1867
Addict
Addict
Posts: 1372
Joined: Wed Aug 24, 2005 4:02 pm
Location: Germany

Post by Thorsten1867 »

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]
User avatar
Progi1984
Addict
Addict
Posts: 806
Joined: Fri Feb 25, 2005 1:01 am
Location: France > Rennes
Contact:

Post by Progi1984 »

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.
Matt
Enthusiast
Enthusiast
Posts: 447
Joined: Sat May 21, 2005 1:08 am
Location: USA

Re: Progi1984 - Programs & Userlibs

Post by Matt »

Anybody have a valid link to the RJSON.zip file for parsing JSON?

Thanks,

Matt
User avatar
Progi1984
Addict
Addict
Posts: 806
Joined: Fri Feb 25, 2005 1:01 am
Location: France > Rennes
Contact:

Re: Progi1984 - Programs & Userlibs

Post by Progi1984 »

Matt
Enthusiast
Enthusiast
Posts: 447
Joined: Sat May 21, 2005 1:08 am
Location: USA

Re: Progi1984 - Programs & Userlibs

Post by Matt »

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? :D

Matt
quasiperfect
Enthusiast
Enthusiast
Posts: 157
Joined: Tue Feb 13, 2007 6:16 pm
Location: Romania
Contact:

Re: Progi1984 - Programs & Userlibs

Post by quasiperfect »

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
Post Reply