[#1]
FileRequester'y czyli kłopot z bąbelkami....
FileRequester z biblioteki 'arp.library' nigdy mi się nie podobał.
Dopiero ten z 'req.library' uznałem za wzorowy przykład programowania.
Oba jednak mają pewne wady,więc dla moich zastosowań najlepiej napisać włase okno
wyboru pliku.
Przydziliłem w RAM listę jednokierunkową dla nazw pobieranych z funkcji
Examine() i ExNext() ale otrzymane nazwy nie są w kolejności alfabetycznej....?
Napisałem sortowanie bąbelkowe na blokach listy jednokierunkowej
podmieniając same tylko wskaźniki w blokach pamięci przydzielonych na nazwy.
Metoda ta dla posortowania np.400 nazw działa zbyt wono....
Najwięcej czasu marnuje procedura porównująca nazwy.
Jak mam ją przyspieszyć???
Oto kod:
;-----------------------------------------------------
;CPU MC68000 (68k)
;System: Amiga 500 (OS v1.3/Kickstart v34)
;Assembler: DevPac (v3.02b/HiSoft)
;Procedura sortowania tekstu. (Algorytm-Bąbelkowy)
;Działanie:
;Porównywane są dwa ciągi tekstowe pierwszy wskazywany
;rejestrem A0 i drugi wskazywany przez A1 wynikiem
;działania procedury jest zwracany stan rejestru D0
;jeśli D0 = 0 to rej.A0 zawiera tekst nadrzędny do
;tekstu wskazywanego rej. A1
;Testy: OK! Działa...
Start_Test: lea TXT_01,a0
lea TXT_02,a1
bsr BubleSort
beq.s BezPodmiany
nop
nop ;reszta kodu....
nop
BezPodmiany: rts
;WEJSCIE: A0 = Adres początku pierwszego tekstu zakończonego na 0.
;
; A1 = Adres początku kolejnego tekstu zakończonego na 0.
;
;WYJSCIE: D0 = 0 jeśli teksty nie wymagają podmiany.
; (wystarczy testowanie znacznika Z )
BubleSort: movem.l d1-d2/a0-a1,-(sp)
BS_PP2: move.b (a0)+,d0
beq.s BS_PP1
bsr.s LowCase
move.b d0,d1
move.b (a1)+,d0
beq.s BS_PP0
bsr.s LowCase
move.b d0,d2
cmp.b d1,d2
beq.s BS_PP2
bpl.s BS_PP1
BS_PP0: moveq #-1,d0 ;ciągi tekstowe wymagają podmiany
bra.s BS_PP3
BS_PP1: moveq #0,d0 ;ciągi tekstowe nie wymagają podmiany
BS_PP3: movem.l (sp)+,d1-d2/a0-a1
rts
;Zamienia na małe litery rej. D0.B
LowCase: cmp.b #'A',d0
blt.s NoLowCase
cmp.b #'Z',d0
bgt.s NoLowCase
add.b #32,d0
NoLowCase: rts
TXT_01: dc.b 'zzz',0
TXT_02: dc.b 'aaa',0
;---------------------------------------------------