Hier mal der gesamte Code. Teil zwei ab Zeile 100 macht die Probleme. Genauer gesagt Zeile 103 (Dem Code-Tag täte eine Numerierung vorn dran ganz gut.):
Code: Alles auswählen
EnableExplicit
;Consts
#ProgressUpdateInterval = 100 ;ms
;Structures
Structure Pointer
*p
EndStructure
Structure URLParts
*p
Protocol.s
List SubdomainsBackwards.s()
Domain.s
TLD.s
Path.s
Parameters.s
AllTogetherForSearch.s
EndStructure
;Handles
Define *HandleWindowMain, *HandleEditorURLInput, *HandleListIconOutput
Define *HandleButtonInputToOutput, *HandleTextInputToOutputProgress
Define *HandleButtonClipboardToInput
;Vars
Define.i EventID, ProgressCounterChar, ProgressCounterURL, InputStringLength
Define.i LastTimestamp, ListNumberOfElements, x, y
Define.s URLInputList$, URL$, Cache$, OldStatusInputToOutputProgress$
Define *Char.Character, *LastChar.Character
Dim *URLList(1)
NewList URLPartsList.URLParts()
Procedure Msg(Msg$,Type.a = 1)
Define Type$
If Not Type : Type$ = "Error" : Else : Type$ = "Message" : EndIf
MessageRequester(Type$, Type$+": " + Msg$, 0)
If Not Type : End : EndIf
EndProcedure
Procedure ChkCreated(*Handle, Type$, Action$ = "create", Addition$ = "")
If Not *Handle : Msg("Couldnt " + Action$ + " " + Type$ + " " + Addition$, 0) : End : EndIf
EndProcedure
Macro ListAdd(List,Value) : AddElement(List) : List = Value : EndMacro
Macro ListAddS(List,Value) : AddElement(List) : List\s = Value : EndMacro
Macro ListAddP(List,Value) : AddElement(List) : List\p = Value : EndMacro
*HandleWindowMain = OpenWindow(#PB_Any, 0, 0,700, 400, "URLTool", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_ScreenCentered)
ChkCreated(*HandleWindowMain,"Window")
*HandleEditorURLInput = EditorGadget(#PB_Any, 5, 5, 600, 150)
*HandleButtonClipboardToInput = ButtonGadget(#PB_Any, 620, 10, 70, 60, "Take URLs from Clipboard", #PB_Button_MultiLine )
*HandleButtonInputToOutput = ButtonGadget(#PB_Any, 5, 167, 30, 30, "V", #PB_Button_MultiLine)
*HandleTextInputToOutputProgress = TextGadget(#PB_Any, 50, 175, 555, 20, "",#PB_Text_Border)
*HandleListIconOutput = ListIconGadget(#PB_Any, 5, 210, 600, 185, "URL", 595)
Repeat
EventID = WaitWindowEvent()
If EventWindow() = *HandleWindowMain And EventID = #PB_Event_Gadget
If EventGadget() = *HandleButtonClipboardToInput
SetGadgetText(*HandleEditorURLInput, GetClipboardText())
EndIf
If EventGadget() = *HandleButtonInputToOutput
;Read URLs
URLInputList$ = GetGadgetText(*HandleEditorURLInput)
InputStringLength = Len(URLInputList$)
*Char = @URLInputList$
*LastChar = @URLInputList$
FreeArray(*URLList())
Dim *URLList(1000)
*URLList(0) = *Char
LastTimestamp = ElapsedMilliseconds()
ProgressCounterChar = 0
ProgressCounterURL = 0
Repeat
ProgressCounterChar + 1
If *Char\c = 10 Or *Char\c = 13
*Char\c = 0
ElseIf *LastChar\c = 0
ProgressCounterURL + 1
If (ProgressCounterURL + 1) % 1000 = 0 : ReDim *URLList(ProgressCounterChar + 1) : EndIf
*URLList(ProgressCounterURL) = *Char
EndIf
*LastChar = *Char
*Char + SizeOf(Character)
If (ElapsedMilliseconds() - LastTimestamp) > #ProgressUpdateInterval
SetGadgetText(*HandleTextInputToOutputProgress, "Read URLs: " + Str(ProgressCounterURL) + " - " + Str((ProgressCounterChar * 100) / InputStringLength) + "%")
LastTimestamp = ElapsedMilliseconds()
EndIf
Until *Char\c = 0
ReDim *URLList(ProgressCounterURL + 1)
SetGadgetText(*HandleTextInputToOutputProgress, "Read URLs: " + Str(ProgressCounterURL + 1) + " - " + Str((ProgressCounterChar * 100) / InputStringLength) + "%")
OldStatusInputToOutputProgress$ = GetGadgetText(*HandleTextInputToOutputProgress)
;Parse URLs
For x = 0 To ProgressCounterURL - 1
Repeat
URL$ = PeekS(*URLList(x))
If Len(URL$) : AddElement(URLPartsList()) : Else : Break : EndIf
URLPartsList()\p = *URLList(x)
URLPartsList()\Protocol = GetURLPart(URL$, #PB_URL_Protocol)
Cache$ = GetURLPart(URL$, #PB_URL_Site)
For y = CountString(Cache$,".") + 1 To 1 Step -1
If Not URLPartsList()\TLD
URLPartsList()\TLD = StringField(Cache$, y, ".")
ElseIf Not URLPartsList()\Domain
URLPartsList()\Domain = StringField(Cache$, y, ".")
Else
ListAdd(URLPartsList()\SubdomainsBackwards(), StringField(Cache$, y, "."))
EndIf
Next
URLPartsList()\Parameters = GetURLPart(URL$, #PB_URL_Parameters)
URLPartsList()\Path = GetURLPart(URL$, #PB_URL_Path)
ForEach URLPartsList()\SubdomainsBackwards()
Cache$ = URLPartsList()\SubdomainsBackwards() + Cache$
Next
URLPartsList()\AllTogetherForSearch = URLPartsList()\Domain + URLPartsList()\TLD + Cache$ + URLPartsList()\Protocol + URLPartsList()\Path + URLPartsList()\Parameters
If (ElapsedMilliseconds() - LastTimestamp) > #ProgressUpdateInterval
SetGadgetText(*HandleTextInputToOutputProgress, OldStatusInputToOutputProgress$ + " -- Parsed URLs: " + Str(x + 1) + " - " + Str(((x + 1) * 100) / ProgressCounterURL - 1) + "%")
LastTimestamp = ElapsedMilliseconds()
EndIf
Until #True
Next
SetGadgetText(*HandleTextInputToOutputProgress, OldStatusInputToOutputProgress$ + " -- Parsed URLs: " + Str(x + 1) + " - " + Str(((x + 1) * 100) / ProgressCounterURL - 1) + "%")
OldStatusInputToOutputProgress$ = GetGadgetText(*HandleTextInputToOutputProgress)
;Sort URLs
SortStructuredList(URLPartsList(), #PB_Sort_NoCase | #PB_Sort_Ascending, OffsetOf(URLParts\AllTogetherForSearch), #PB_Sort_String)
SetGadgetText(*HandleTextInputToOutputProgress, OldStatusInputToOutputProgress$ + " -- Sorted")
; ProgressCounterURL = 0
; ListNumberOfElements = ListSize(InputList())
; ForEach InputList()
; ProgressCounterURL + 1
; ; AddGadgetItem(*HandleListIconOutput, 0, PeekS(InputList()\p))
; s$ + PeekS(InputList()\p) + #CRLF$
; If (ElapsedMilliseconds() - LastTimestamp) > 100
; SetGadgetText(*HandleTextInputToOutputProgress2, Str((ProgressCounterURL * 100) / ListNumberOfElements) + "%")
; LastTimestamp = ElapsedMilliseconds()
; EndIf
; Next
; SetGadgetText(*HandleListIconOutput,s$)
; SetGadgetText(*HandleTextInputToOutputProgress2, "100%")
;
; SetGadgetText(*HandleTextInputToOutputProgress, "")
; SetGadgetText(*HandleTextInputToOutputProgress2, "")
EndIf
EndIf
Until EventID = #PB_Event_CloseWindow