Ich habe mich doch selber drüber hergemachtund mein möglichstes versucht, das Ding wieder zum laufen zu bekommen. Habe den Code für PB 5.21 angepasst. Hier ist er
Code: Alles auswählen
Enumeration
#STARTGADGET
#MAIN
#FILES
#DOWN
#UP
#DELE
#LOGOUT
#ABOUT
#REFRESH
#RENAME
#CHMOD
#LOG
#Text_0
#Text_1
#Text_2
#Text_3
#SERVER
#PORT
#USER
#PASS
#LOGIN
#PROGRESS_INFO
#PROGRESS
#CMD
#STOPGADGET
#Text_00
#Text_10
#Text_20
#Text_30
#Text_40
#Text_50
#USER_READ
#GROUP_READ
#WORLD_READ
#USER_WRITE
#GROUP_WRITE
#WORLD_WRITE
#USER_RUN
#GROUP_RUN
#WORLD_RUN
#NUMERIC
#WORDS
#OK
EndEnumeration
LoadImage(1, "BIN\file.ico")
LoadImage(2, "BIN\folder.ico")
InitNetwork()
Global EOL.s
EOL.s = Chr(13)+Chr(10)
Procedure.s Open_Chmod(chmod.s)
If OpenWindow(1, 0, 0, 320, 240,"CHMOD", #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_ScreenCentered )
TextGadget(#Text_00, 10, 40, 80, 20, "Owner:")
TextGadget(#Text_10, 10, 70, 80, 20, "Group:")
TextGadget(#Text_20, 10, 100, 80, 20, "World:")
TextGadget(#Text_30, 120, 10, 50, 20, "Read", #PB_Text_Center)
TextGadget(#Text_40, 190, 10, 50, 20, "Write", #PB_Text_Center)
TextGadget(#Text_50, 260, 10, 50, 20, "Run", #PB_Text_Center)
CheckBoxGadget(#USER_READ, 140, 40, 20, 20, "")
CheckBoxGadget(#GROUP_READ, 140, 70, 20, 20, "")
CheckBoxGadget(#WORLD_READ, 140, 100, 20, 20, "")
CheckBoxGadget(#USER_WRITE, 210, 40, 20, 20, "")
CheckBoxGadget(#GROUP_WRITE, 210, 70, 20, 20, "")
CheckBoxGadget(#WORLD_WRITE, 210, 100, 20, 20, "")
CheckBoxGadget(#USER_RUN, 280, 40, 20, 20, "")
CheckBoxGadget(#GROUP_RUN, 280, 70, 20, 20, "")
CheckBoxGadget(#WORLD_RUN, 280, 100, 20, 20, "")
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
StringGadget(#NUMERIC, 10, 150, 300, 20, "000", #ESB_DISABLE_RIGHT)
If chmod = ""
StringGadget(#WORDS, 10, 180, 300, 20, "----------", #ESB_DISABLE_RIGHT)
Else
StringGadget(#WORDS, 10, 180, 300, 20, chmod, #ESB_DISABLE_RIGHT)
EndIf
CompilerElse
StringGadget(#NUMERIC, 10, 150, 300, 20, "000")
If chmod = ""
StringGadget(#WORDS, 10, 180, 300, 20, "----------")
Else
StringGadget(#WORDS, 10, 180, 300, 20, chmod)
EndIf
CompilerEndIf
ButtonGadget(#OK, 10, 210, 300, 20, "OK")
Repeat
If WindowID(0)
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Q = 1
Case #PB_Event_Gadget
Case #OK
chmod = GetGadgetText(#NUMERIC)
Q = 1
If GID >= #USER_READ And GID <= #WORLD_RUN
User1.s = Str(GetGadgetState(#USER_READ)*4+GetGadgetState(#USER_WRITE)*2+GetGadgetState(#USER_RUN)*1)
Group1.s = Str(GetGadgetState(#GROUP_READ)*4+GetGadgetState(#GROUP_WRITE)*2+GetGadgetState(#GROUP_RUN)*1)
World1.s = Str(GetGadgetState(#WORLD_READ)*4+GetGadgetState(#WORLD_WRITE)*2+GetGadgetState(#WORLD_RUN)*1)
SetGadgetText(#NUMERIC, User1+Group1+World1)
Num.s = GetGadgetText(#NUMERIC)
User2.l = Val(Mid(Num, 1, 1))
Group2.l = Val(Mid(Num, 2, 1))
World2.l = Val(Mid(Num, 3, 1))
Txt.s = GetGadgetText(#WORDS)
If User2 & 4
PokeB(@Txt+1, 'r')
Else
PokeB(@Txt+1, '-')
EndIf
If User2 & 2
PokeB(@Txt+2, 'w')
Else
PokeB(@Txt+2, '-')
EndIf
If User2 & 1
PokeB(@Txt+3, 'x')
Else
PokeB(@Txt+3, '-')
EndIf
If Group2 & 4
PokeB(@Txt+4, 'r')
Else
PokeB(@Txt+4, '-')
EndIf
If Group2 & 2
PokeB(@Txt+5, 'w')
Else
PokeB(@Txt+5, '-')
EndIf
If Group2 & 1
PokeB(@Txt+6, 'x')
Else
PokeB(@Txt+6, '-')
EndIf
If World2 & 4
PokeB(@Txt+7, 'r')
Else
PokeB(@Txt+7, '-')
EndIf
If World2 & 2
PokeB(@Txt+8, 'w')
Else
PokeB(@Txt+8, '-')
EndIf
If World2 & 1
PokeB(@Txt+9, 'x')
Else
PokeB(@Txt+9, '-')
EndIf
SetGadgetText(#WORDS, Txt)
ElseIf GID = #NUMERIC
Num.s = GetGadgetText(#NUMERIC)
User2.l = Val(Mid(Num, 1, 1))
Group2.l = Val(Mid(Num, 2, 1))
World2.l = Val(Mid(Num, 3, 1))
SetGadgetState(#USER_READ , User2 & 4)
SetGadgetState(#USER_WRITE , User2 & 2)
SetGadgetState(#USER_RUN , User2 & 1)
SetGadgetState(#GROUP_READ , Group2 & 4)
SetGadgetState(#GROUP_WRITE, Group2 & 2)
SetGadgetState(#GROUP_RUN , Group2 & 1)
SetGadgetState(#WORLD_READ , World2 & 4)
SetGadgetState(#WORLD_WRITE, World2 & 2)
SetGadgetState(#WORLD_RUN , World2 & 1)
Txt.s = GetGadgetText(#WORDS)
If User2 & 4
PokeB(@Txt+1, 'r')
Else
PokeB(@Txt+1, '-')
EndIf
If User2 & 2
PokeB(@Txt+2, 'w')
Else
PokeB(@Txt+2, '-')
EndIf
If User2 & 1
PokeB(@Txt+3, 'x')
Else
PokeB(@Txt+3, '-')
EndIf
If Group2 & 4
PokeB(@Txt+4, 'r')
Else
PokeB(@Txt+4, '-')
EndIf
If Group2 & 2
PokeB(@Txt+5, 'w')
Else
PokeB(@Txt+5, '-')
EndIf
If Group2 & 1
PokeB(@Txt+6, 'x')
Else
PokeB(@Txt+6, '-')
EndIf
If World2 & 4
PokeB(@Txt+7, 'r')
Else
PokeB(@Txt+7, '-')
EndIf
If World2 & 2
PokeB(@Txt+8, 'w')
Else
PokeB(@Txt+8, '-')
EndIf
If World2 & 1
PokeB(@Txt+9, 'x')
Else
PokeB(@Txt+9, '-')
EndIf
SetGadgetText(#WORDS, Txt)
Else
Word.s = GetGadgetText(#WORDS)
User1.s = Mid(Word, 2, 3)
Group1.s = Mid(Word, 5, 3)
World1.s = Mid(Word, 8, 3)
If Mid(User1, 1, 1) = "r" : SetGadgetState(#USER_READ , 1) : Else : SetGadgetState(#USER_READ , 0) : EndIf
If Mid(User1, 2, 1) = "w" : SetGadgetState(#USER_WRITE , 1) : Else : SetGadgetState(#USER_WRITE , 0) : EndIf
If Mid(User1, 3, 1) = "x" Or Mid(User1, 3, 1) = "s" : SetGadgetState(#USER_RUN , 1) : Else : SetGadgetState(#USER_RUN , 0) : EndIf
If Mid(Group1, 1, 1) = "r" : SetGadgetState(#GROUP_READ , 1) : Else : SetGadgetState(#GROUP_READ , 0) : EndIf
If Mid(Group1, 2, 1) = "w" : SetGadgetState(#GROUP_WRITE , 1) : Else : SetGadgetState(#GROUP_WRITE , 0) : EndIf
If Mid(Group1, 3, 1) = "x" Or Mid(Group1, 3, 1) = "s" : SetGadgetState(#GROUP_RUN , 1) : Else : SetGadgetState(#GROUP_RUN , 0) : EndIf
If Mid(World1, 1, 1) = "r" : SetGadgetState(#WORLD_READ , 1) : Else : SetGadgetState(#WORLD_READ , 0) : EndIf
If Mid(World1, 2, 1) = "w" : SetGadgetState(#WORLD_WRITE , 1) : Else : SetGadgetState(#WORLD_WRITE , 0) : EndIf
If Mid(World1, 3, 1) = "x" Or Mid(World1, 3, 1) = "s" : SetGadgetState(#WORLD_RUN , 1) : Else : SetGadgetState(#WORLD_RUN , 0) : EndIf
EndIf
EndSelect
Else
SetActiveWindow(1)
HideWindow(0,1)
EndIf
Until Q = 1
CloseWindow(1)
HideWindow(0,0)
EndIf
ProcedureReturn chmod
EndProcedure
Procedure.s PassiveIP(Text.s)
s = FindString(Text, "(", 1)+1
l = FindString(Text, ")", s)-s
Host.s = Mid(Text, s, l)
IP.s = StringField(Host, 1, ",")+"."+StringField(Host, 2, ",")+"."+StringField(Host, 3, ",")+"."+StringField(Host, 4, ",")
ProcedureReturn IP.s
EndProcedure
Procedure.l PassivePort(Text.s)
s = FindString(Text, "(", 1)+1
l = FindString(Text, ")", s)-s
Host.s = Mid(Text, s, l)
Port = Val(StringField(Host, 5, ","))*256+Val(StringField(Host, 6, ","))
ProcedureReturn Port
EndProcedure
Procedure.s Wait(ConnectionID, Timeout)
Delay(50)
*Buffer = AllocateMemory(16000)
t = ElapsedMilliseconds()
While NetworkClientEvent(ConnectionID) <> 2 And ElapsedMilliseconds()-t < Timeout : Delay(10): Wend
If ElapsedMilliseconds()-t < Timeout
Size = ReceiveNetworkData(ConnectionID, *Buffer, 16000)
Text.s = PeekS(*Buffer)
FreeMemory(*Buffer)
SetGadgetText(#PROGRESS_INFO, Text)
ProcedureReturn Text
EndIf
EndProcedure
Procedure Wait2(ConnectionID, *Buffer, Size, Timeout)
Delay(50)
t = ElapsedMilliseconds()
While NetworkClientEvent(ConnectionID) = 0 And ElapsedMilliseconds()-t < Timeout : Delay(1) : Wend
If ElapsedMilliseconds()-t < Timeout
CurSize = ReceiveNetworkData(ConnectionID, *Buffer, Size)
While CurSize < Size
If NetworkClientEvent(ConnectionID) = 2
CurSize + ReceiveNetworkData(ConnectionID, *Buffer+CurSize, Size-CurSize)
EndIf
Wend
ProcedureReturn CurSize-1
EndIf
EndProcedure
Procedure SendNetworkString2(ConnectionID, String.s)
SetGadgetText(#PROGRESS_INFO, String.s)
SendNetworkString(ConnectionID, String.s)
EndProcedure
Procedure FTP_Connect(Server.s, Port, Name.s, Pass.s)
ConnectionID = OpenNetworkConnection(Server, Port)
If ConnectionID
Text.s = Wait(ConnectionID, 5000)
If Left(Text, 3) = "220"
SendNetworkString2(ConnectionID, "USER "+Name.s+EOL)
Text.s = Wait(ConnectionID, 5000)
If Left(Text, 3) = "331"
SendNetworkString2(ConnectionID, "PASS "+Pass.s+EOL)
Text.s = Wait(ConnectionID, 5000)
If Left(Text, 3) = "230"
SendNetworkString2(ConnectionID, "TYPE A"+EOL)
Wait(ConnectionID, 5000)
ProcedureReturn ConnectionID
EndIf
EndIf
EndIf
CloseNetworkConnection(ConnectionID)
EndIf
EndProcedure
Procedure FTP_SetCurrentDirectory(ConnectionID, Path.s)
If ConnectionID
SendNetworkString2(ConnectionID, "CWD "+Path.s+EOL)
Text.s = Wait(ConnectionID, 5000)
If Left(Text, 3) = "250"
SendNetworkString2(ConnectionID, "PWD"+EOL)
Text.s = Wait(ConnectionID, 5000)
If Left(Text, 3) = "257"
ProcedureReturn 1
EndIf
EndIf
EndIf
EndProcedure
Procedure.s FTP_List(ConnectionID)
If ConnectionID
SendNetworkString2(ConnectionID, "TYPE A"+EOL)
Text.s = Wait(ConnectionID, 5000)
If Left(Text, 3) = "200"
SendNetworkString2(ConnectionID, "PASV"+EOL)
Text.s = Wait(ConnectionID, 5000)
If Left(Text, 3) = "227"
Passive = OpenNetworkConnection(PassiveIP(Text.s), PassivePort(Text.s))
If Passive
SendNetworkString2(ConnectionID, "LIST"+EOL)
Text.s = Wait(ConnectionID, 5000)
If Left(Text, 3) = "150"
Text.s = Wait(ConnectionID, 5000)
Delay(10)
Result.s = Wait(Passive, 5000)
CloseNetworkConnection(Passive)
Text.s = Wait(ConnectionID, 5000)
ProcedureReturn Result
EndIf
CloseNetworkConnection(Passive)
Else
EndIf
EndIf
EndIf
EndIf
EndProcedure
Procedure.s FTP_NameList(ConnectionID)
If ConnectionID
SendNetworkString2(ConnectionID, "TYPE A"+EOL)
Text.s = Wait(ConnectionID, 8000)
If Left(Text, 3) = "200"
SendNetworkString2(ConnectionID, "PASV"+EOL)
Text.s = Wait(ConnectionID, 8000)
If Left(Text, 3) = "227"
Passive = OpenNetworkConnection(PassiveIP(Text.s), PassivePort(Text.s))
If Passive
SendNetworkString2(ConnectionID, "NLST"+EOL)
Delay(300)
Text.s = Wait(ConnectionID, 8000)
If Left(Text, 3) = "150"
Text.s = Wait(ConnectionID, 8000)
Delay(100)
Result.s = Wait(Passive, 8000)
CloseNetworkConnection(Passive)
Text.s = Wait(ConnectionID, 8000)
ProcedureReturn Result
EndIf
CloseNetworkConnection(Passive)
EndIf
EndIf
EndIf
EndIf
EndProcedure
Procedure.l FTP_DownloadFile(ConnectionID, SFile.s, DFile.s)
If ConnectionID
SendNetworkString2(ConnectionID, "TYPE I"+EOL)
Text.s = Wait(ConnectionID, 5000)
If Left(Text, 3) = "200"
SendNetworkString2(ConnectionID, "PASV"+EOL)
Text.s = Wait(ConnectionID, 5000)
If Left(Text, 3) = "227"
Passive = OpenNetworkConnection(PassiveIP(Text.s), PassivePort(Text.s))
If Passive
SendNetworkString2(ConnectionID, "RETR "+SFile+EOL)
Delay(100)
Text.s = Wait(ConnectionID, 5000)
s = FindString(Text, "(", 1)+1
l = FindString(Text, " ", s)-s
Size = Val(Mid(Text, s, l))
If Left(Text, 3) = "150"
*Buffer = AllocateMemory(1024)
Text = ""
s = 0
If CreateFile(0, DFile)
While s < Size
Size2 = ReceiveNetworkData(Passive, *Buffer, 1024)
If Size2 > 0
s + Size2
WriteData(0,*Buffer, Size2)
SetGadgetState(#PROGRESS, Int((100/Size)*s))
WindowEvent()
EndIf
Wend
CloseFile(0)
EndIf
FreeMemory(*Buffer)
CloseNetworkConnection(Passive)
Text.s = Wait(ConnectionID, 5000)
WindowEvent()
ProcedureReturn 1
EndIf
CloseNetworkConnection(Passive)
EndIf
EndIf
EndIf
EndIf
EndProcedure
Procedure.l FTP_UploadFile(ConnectionID, SFile.s, DFile.s)
If ConnectionID
SendNetworkString2(ConnectionID, "TYPE I"+EOL)
Text.s = Wait(ConnectionID, 5000)
If Left(Text, 3) = "200"
SendNetworkString2(ConnectionID, "PASV"+EOL)
Text.s = Wait(ConnectionID, 5000)
If Left(Text, 3) = "227"
Passive = OpenNetworkConnection(PassiveIP(Text.s), PassivePort(Text.s))
If Passive
SendNetworkString2(ConnectionID, "STOR "+DFile+EOL)
Delay(100)
Text.s = Wait(ConnectionID, 5000)
If Left(Text, 3) = "150"
*Buffer = AllocateMemory(FileSize(SFile))
SetGadgetState(#PROGRESS, 25)
WindowEvent()
If ReadFile(0, SFile)
ReadData(0,*Buffer, FileSize(SFile))
CloseFile(0)
SetGadgetState(#PROGRESS, 50)
WindowEvent()
EndIf
SendNetworkData(Passive, *Buffer, FileSize(SFile))
SetGadgetState(#PROGRESS, 75)
WindowEvent()
FreeMemory(*Buffer)
CloseNetworkConnection(Passive)
SetGadgetState(#PROGRESS, 100)
WindowEvent()
Text.s = Wait(ConnectionID, 5000)
WindowEvent()
ProcedureReturn 1
EndIf
CloseNetworkConnection(Passive)
EndIf
EndIf
EndIf
EndIf
EndProcedure
Procedure FTP_DeleteDirectory(ConnectionID, Dir.s)
If ConnectionID
SendNetworkString2(ConnectionID, "RMD "+Dir+EOL)
Text.s = Wait(ConnectionID, 5000)
If Left(Text, 3) = "250"
ProcedureReturn 1
EndIf
EndIf
EndProcedure
Procedure FTP_CHMOD(ConnectionID, File.s, Rights.s)
If ConnectionID
SendNetworkString2(ConnectionID, "SITE chmod "+Rights+" "+File+EOL)
Text.s = Wait(ConnectionID, 5000)
EndIf
EndProcedure
Procedure FTP_CMD(ConnectionID, CMD.s)
If ConnectionID
SendNetworkString2(ConnectionID, CMD.s+EOL)
Text.s = Wait(ConnectionID, 5000)
If Left(Text, 3) = "500"
SendNetworkString2(ConnectionID, "SITE "+CMD.s+EOL)
Text.s = Wait(ConnectionID, 5000)
If Left(Text, 3) = "500"
ProcedureReturn 1
EndIf
Else
ProcedureReturn 1
EndIf
EndIf
EndProcedure
Procedure FTP_Rename(ConnectionID, FromName.s, ToName.s)
If ConnectionID
SendNetworkString2(ConnectionID, "RNFR "+FromName+EOL)
Text.s = Wait(ConnectionID, 5000)
If Left(Text, 3) = "350"
SendNetworkString2(ConnectionID, "RNTO "+ToName+EOL)
Text.s = Wait(ConnectionID, 5000)
If Left(Text, 3) = "250"
ProcedureReturn 1
EndIf
EndIf
EndIf
EndProcedure
Procedure FTP_Delete_File(ConnectionID, File.s)
If ConnectionID
SendNetworkString2(ConnectionID, "DELE "+File+EOL)
Text.s = Wait(ConnectionID, 5000)
If Left(Text, 3) = "250"
ProcedureReturn 1
EndIf
EndIf
EndProcedure
Procedure FTP_CreateDirectory(ConnectionID, Dir.s)
If ConnectionID
SendNetworkString2(ConnectionID, "MKD "+Dir+EOL)
Text.s = Wait(ConnectionID, 5000)
If Left(Text, 3) = "257"
ProcedureReturn 1
EndIf
EndIf
EndProcedure
Procedure FTP_DirectoryUp(ConnectionID)
If ConnectionID
SendNetworkString2(ConnectionID, "CDUP"+EOL)
Text.s = Wait(ConnectionID, 5000)
If Left(Text, 3) = "250"
ProcedureReturn 1
EndIf
EndIf
EndProcedure
Procedure FTP_NoEvent(ConnectionID)
If ConnectionID
SendNetworkString2(ConnectionID, "NOOP"+EOL)
Text.s = Wait(ConnectionID, 5000)
EndIf
EndProcedure
Procedure FTP_Quit(ConnectionID)
If ConnectionID
SendNetworkString2(ConnectionID, "PASV"+EOL)
Text.s = Wait(ConnectionID, 5000)
If Left(Text, 3) = "221"
ProcedureReturn 1
EndIf
EndIf
EndProcedure
;-Program
NewList CurrentDirectory.s()
Global Username.s, Password.s, Server.s, Port.l
Procedure UpdateFiles(ConnectionID)
ClearGadgetItems(#FILES)
Files.s = RemoveString(FTP_List(ConnectionID), Chr(13))
Debug Files.s
While FindString(Files, " ", 0) : Files = ReplaceString(Files, " ", " ") : Wend
For k=1 To CountString(Files, Chr(10))
Line.s = StringField(Files, k, Chr(10))
If Trim(Line) <> ""
If Left(StringField(Line, 1, " "), 1) = "d"
AddGadgetItem(#FILES, -1, StringField(Line, 9, " ")+Chr(10)+StrF(Val(StringField(Line, 5, " "))/1024)+Chr(10)+StringField(Line, 1, " "), ImageID(2))
Else
AddGadgetItem(#FILES, -1, StringField(Line, 9, " ")+Chr(10)+StrF(Val(StringField(Line, 5, " "))/1024)+Chr(10)+StringField(Line, 1, " "), ImageID(1))
EndIf
EndIf
Next
EndProcedure
Procedure SetDirectory(ConnectionID, Dir.s)
NewList CurrentDirectory.s()
Select Trim(Dir)
Case "."
ClearList(CurrentDirectory())
FTP_SetCurrentDirectory(ConnectionID, "/")
Case ".."
LastElement(CurrentDirectory())
DeleteElement(CurrentDirectory())
ForEach CurrentDirectory()
CurDir.s + "/" + CurrentDirectory()
Next
If CurDir = "" : CurDir = "/" : EndIf
FTP_SetCurrentDirectory(ConnectionID, CurDir)
Default
LastElement(CurrentDirectory())
AddElement(CurrentDirectory())
CurrentDirectory() = Dir
ForEach CurrentDirectory()
CurDir.s + "/" + CurrentDirectory()
Next
FTP_SetCurrentDirectory(ConnectionID, CurDir)
EndSelect
UpdateFiles(ConnectionID)
EndProcedure
Procedure Decode(*Text, Size)
For k=0 To Size-1
PokeB(*Text+k, PeekB(*Text+k)+k)
Next
EndProcedure
Procedure Encode(*Text, Size)
For k=0 To Size-1
PokeB(*Text+k, PeekB(*Text+k)-k)
Next
EndProcedure
Procedure LoadPreferences()
If OpenPreferences("pref.ini")
PreferenceGroup("CONNECTION")
Username = ReadPreferenceString("USER", "Guest")
Password = ReadPreferenceString("PASS", "Gtcpp")
Server = ReadPreferenceString("SERVER", "ftp.host.com")
Port = ReadPreferenceLong("PORT", 21)
Decode(@Password, Len(Password))
ClosePreferences()
EndIf
EndProcedure
Procedure SavePreferences()
CreatePreferences("pref.ini")
PreferenceGroup("CONNECTION")
Encode(@Password, Len(Password))
WritePreferenceString("USER", Username)
WritePreferenceString("PASS", Password)
WritePreferenceString("SERVER", Server)
WritePreferenceLong("PORT", Port)
Decode(@Password, Len(Password))
ClosePreferences()
EndProcedure
LoadPreferences()
#WindowWidth = 640
#WindowHeight = 480
UseJPEGImageDecoder()
LoadImage(0, "BIN\Logo.jpg")
OpenWindow(0, 0, 0, 640, 480, "Bradan FTP Client",#PB_Window_BorderLess | #PB_Window_ScreenCentered )
ImageGadget(0, 0, 0, 640, 480, ImageID(0))
t = ElapsedMilliseconds()
Repeat : Delay(10) : WindowEvent() : Until ElapsedMilliseconds()-t > 1500
FreeImage(0)
CloseWindow(0)
If OpenWindow(0, 0, 0, #WindowWidth, #WindowHeight+40,"Bradan FTP", #PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_TitleBar )
ProgressBarGadget(#PROGRESS, #WindowWidth/2, #WindowHeight, #WindowWidth/2, 20, 0, 100)
TextGadget(#PROGRESS_INFO, 0, #WindowHeight, #WindowWidth/2, 40, "Progressinformation")
;CloseGadgetList()
ContainerGadget(#LOG, 0, 0, 640, 480, #PB_Container_Flat)
TextGadget(#Text_0, (#WindowWidth/2)-200, (#WindowHeight/2)-60, 100, 20, "FTP-Server:")
TextGadget(#Text_1, (#WindowWidth/2)-200, (#WindowHeight/2)-30, 100, 20, "Port:")
TextGadget(#Text_2, (#WindowWidth/2)-200, (#WindowHeight/2) , 100, 20, "Username:")
TextGadget(#Text_3, (#WindowWidth/2)-200, (#WindowHeight/2)+30, 100, 20, "Password:")
StringGadget(#SERVER, (#WindowWidth/2)-100, (#WindowHeight/2)-60, 300, 20, Server, #PB_String_BorderLess)
StringGadget(#PORT, (#WindowWidth/2)-100, (#WindowHeight/2)-30, 300, 20, Str(Port), #PB_String_BorderLess)
StringGadget(#USER, (#WindowWidth/2)-100, (#WindowHeight/2) , 300, 20, Username, #PB_String_BorderLess)
StringGadget(#PASS, (#WindowWidth/2)-100, (#WindowHeight/2)+30, 300, 20, Password, #PB_String_Password | #PB_String_BorderLess)
ButtonGadget(#LOGIN, (#WindowWidth/2)-200, (#WindowHeight/2)+70, 400, 30, "Login", #PB_Button_Default)
CloseGadgetList()
ContainerGadget(#MAIN, 0, 0, 640, 480, #PB_Container_Flat)
ListIconGadget(#FILES, 9, 9, 460, 460, "Name", 200, #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection)
AddGadgetColumn(#FILES, 2, "Size (kilobytes)", 100)
AddGadgetColumn(#FILES, 3, "Rights", 100)
ButtonGadget(#DOWN, 479, 9, 150, 28, "Download")
ButtonGadget(#UP, 479, 39, 150, 28, "Upload")
ButtonGadget(#DELE, 479, 69, 150, 28, "Delete")
ButtonGadget(#LOGOUT, 479, 439, 150, 28, "Logout")
ButtonGadget(#ABOUT, 479, 409, 150, 28, "About...")
ButtonGadget(#REFRESH, 479, 99, 150, 28, "Refresh")
ButtonGadget(#RENAME, 479, 129, 150, 28, "Rename")
ButtonGadget(#CHMOD, 479, 159, 150, 28, "Change rights")
ButtonGadget(#CMD, 479, 189, 150, 28, "Command")
CloseGadgetList()
HideGadget(#MAIN, 1)
Repeat
Event = WindowEvent()
If ConnectionID <> 0
HideGadget(#LOG, 1)
HideGadget(#MAIN, 0)
If ElapsedMilliseconds()-NoEventTime >= 8000
SetGadgetState(#PROGRESS, 0)
FTP_NoEvent(ConnectionID)
NoEventTime = ElapsedMilliseconds()
EndIf
Else
HideGadget(#LOG, 0)
HideGadget(#MAIN, 1)
EndIf
Select Event
Case #PB_Event_CloseWindow
Quit = 1
Case #PB_Event_Gadget
Select EventGadget()
Case #CMD
command.s = InputRequester("Command", "Run this command:", "")
If command
If FTP_CMD(ConnectionID, command)
UpdateFiles(ConnectionID)
EndIf
EndIf
Case #CHMOD
chmod.s = GetGadgetItemText(#FILES, GetGadgetState(#FILES), 2)
File.s = GetGadgetItemText(#FILES, GetGadgetState(#FILES), 0)
chmod = Open_Chmod(chmod.s)
FTP_CHMOD(ConnectionID, File, chmod)
UpdateFiles(ConnectionID)
Case #LOGIN
ConnectionID = FTP_Connect(Server, Port, Username.s, Password.s)
If ConnectionID
Debug ConnectionID
UpdateFiles(ConnectionID)
NoEventTime = ElapsedMilliseconds()
EndIf
Case #FILES
If EventType() = #PB_EventType_LeftDoubleClick
File.s = GetGadgetItemText(#FILES, GetGadgetState(#FILES), 0)
Rights.s = GetGadgetItemText(#FILES, GetGadgetState(#FILES), 2)
If Left(Rights, 1) = "d"
SetDirectory(ConnectionID, File)
EndIf
EndIf
Case #DOWN
File.s = GetGadgetItemText(#FILES, GetGadgetState(#FILES), 0)
If File <> ""
FTP_DownloadFile(ConnectionID, File, SaveFileRequester("Download as...", "", "All Files|*.*", 1))
UpdateFiles(ConnectionID)
EndIf
NoEventTime = ElapsedMilliseconds()
Case #UP
File.s = OpenFileRequester("Upload ...", "", "All Files|*.*", 1)
If File <> ""
FTP_UploadFile(ConnectionID, File, GetFilePart(File))
UpdateFiles(ConnectionID)
EndIf
NoEventTime = ElapsedMilliseconds()
Case #DELE
File.s = GetGadgetItemText(#FILES, GetGadgetState(#FILES), 0)
FTP_Delete_File(ConnectionID, GetFilePart(File))
UpdateFiles(ConnectionID)
NoEventTime = ElapsedMilliseconds()
Case #REFRESH
UpdateFiles(ConnectionID)
NoEventTime = ElapsedMilliseconds()
Case #ABOUT
MessageRequester("About...", "Created by Daniel B."+Chr(10)+"http://www.bradan.net/")
Case #LOGOUT
If ConnectionID : FTP_Quit(ConnectionID) : ConnectionID = 0 : EndIf
Case #RENAME
File.s = GetGadgetItemText(#FILES, GetGadgetState(#FILES), 0)
ToName.s = InputRequester("Rename to...", "New filename:", ToName.s)
If File And ToName.s <> File And ToName.s <> ""
FTP_Rename(ConnectionID, File.s, ToName.s)
UpdateFiles(ConnectionID)
EndIf
Default
Server = GetGadgetText(#SERVER)
Port = Val(GetGadgetText(#PORT))
Username = GetGadgetText(#USER)
Password = GetGadgetText(#PASS)
EndSelect
Case #PB_Event_Repaint
Default
Delay(10)
EndSelect
Until Quit = 1
EndIf
FreeImage(1)
FreeImage(2)
If ConnectionID
FTP_Quit(ConnectionID)
EndIf
SavePreferences()
; IDE Options = PureBasic 3.93 Beta 1 (Linux)
; CursorPosition = 625
; FirstLine = 611
; Folding = ----H
; Executable = /root/Linux/purebasic/Eigene_Programme/Bradan FTP/Bradan FTP
Schön wäre, wenn er denn auch vollständig funktionieren würde und da brauche ich euer Hilfe. Die Verbindung zu Server passiv funktioniert schonmal, nur listet er nichts auf im Gadget.
Nach aufruf des Loginbutton ruft er die Procedur Updatefiles auf, geht dann zu Procedur FTP_List und
hängen bleibt.
Habe schon das Timeout verlängert und mit größeren Buffer versucht, jedoch ohne Erfolg.
Zum Code gehören noch 2 Ico´s und eine Grafik , falls einer sie braucht zum testen, dann lade ich sie irgendwo rauf.