GRWINOW ASM;************************************ ;******[[[[[[[[[[[[[[[[[[[[[[[[[[****** ;******[ [****** ;******[ Window Tool [****** ;******[ [****** ;******[ `arsten Wegener [****** ;******[ [****** ;******[ Stand 19.02.91 [****** ;******[[[[[[[[[[[[[[[[[[[[[[[[[[****** ;******[ produced by GallWare [****** ;******[[[[[[[[[[[[[[[[[[[[[[[[[[****** ;************************************** ;************************************** ORG 0 SUB EQU 0F003H Buffer EQU 0B700H Ground EQU 0FFFFH HEAP DEFW Ground UsrTabAdr DEFW HeapTabAdr DEFW Offset DEI;ppOϙppOϙpprOϙpp Oϙppϑ pϐppπ ppτ ppτppτpppO  όOHppOOBBFOpp pppOǓpp ψOOϐette ;Eingangsparameter ; AF :=Adr.d.Dateinamen ; HL :=Obere Datenadr. f}r Men}s ; DE :=Untere Sperradr. f}r Men}daten ; BC :=Adr. f}r eine Pointertabbelle ; 2 Byte je Men},die bei MenuA ; verwendet werden ;R}ckgabewerte ; HL :=Untere Adr. des Datenfeldes ; A :=Fehlernr. ; CY --> Fehler ; BC :=Tabbellenende ; DE :=Tabbellenl{nge Laden CALL Lade ;Kassette->Speicher RET C ;Abbruch BRK PUSH BC ;Adr.f.PtrTab LD D,B LD E,C LD HL,(Anfang);Anf.der Daten INC HL ;von der Kass. Julia LD C,(HL) ;Gr.des letzten INC HL ;Men}s LD B,(HL) EX DE,HL DEC DE DEC DE LD (HL),E ;Eintrag in Tab INC HL LD (HL),D INC HL INC DE INC DE EX DE,HL ADD HL,BC ;vorhergehendes PUSH HL ;Men} DEC HL ;Schon alle Men} LD C,L ;erfa~t ? LD B,H LD HL,(EndAdr) OR A SBC HL,BC POP HL JR NC,Julia ;Vertauschen aller Eintr{ge in der Tab. LD H,D LD L,E POP DE ;Tabellenanf. PUSH HL ;TabEnde+1 LD B,H LD C,L OR A SBC HL,DE PUSH HL ;TabL{nge LD A,L SRL A ;/2 SRL A LD H,B ;HL:=TabEnde+1 LD L,C LD B,A ;Zahl der Ver- ;tauschungen ;Vertauschen zweier Worte MARK DEC HL LD A,M EX AF INC DE LD A,(DE) LD M,A EX AF LD (DE),A DEC HL DEC DE LD A,M EX AF LD A,(DE) LD M,A EX AF LD (DE),A INC DE INC DE DJNZ MARK ;Vertauschen beendet POP DE POP BC LD HL,(Anfang) DEC HL XOR A RET Lade PUSH BC ;Retten der Register PUSH DE PUSH HL PUSH AF LD HL,Buffer LD (IX+05H),L LD (IX+06H),H CALL SUB ;Warte auf DEFB 0AH ;ersten Block XOR A WaitForNextFileName LD A,001H CALL BlockLesen POP HL ;--> Dateiname JP C,Break PUSH HL LD DE,Buffer LD BC,00B01H;B=Vergleichsl{nge NextChar LD A,(DE) OR A ;Dummy-Test JR NZ,NoSpace LD A,020H NoSpace CP (HL) JR Z,NextCharAdr ADD (HL) ;Dummy=Space CP 020H JR Z,NextCharAdr SUB (HL) INC C ;falscher Buchstabe NextCharAdr INC DE INC HL CALL 0F003H DEFB 024H ;OCHR DJNZ NextChar CALL 0F003H DEFB 02CH ;CR/LF DEC C ;C=1 wenn ohne ;Fehler ! JR NZ,WaitForNextFileName LD A,(0B710H) ;ARGN CP 02 JR NZ,WaitForNextFileName POP HL;--> Dateiname LD HL,(0B713H) LD DE,(0B711H) OR A SBC HL,DE LD B,H LD C,L ;BC:=Dateigr|~e POP HL POP DE PUSH DE PUSH HL OR A SBC HL,DE;Platz f}r HEAP OR A SBC HL,BC;Test HEAP>DATEI JR C,NoMemory POP HL PUSH HL LD (EndAdr),HL SBC HL,BC;Adr.f.Dateianfang INC HL LD (Anfang),HL LD D,H LD E,L LD A,01 NextBlock CALL OutBlNr LD A,(IX+2) INC A JR Z,EOF PUSH DE CALL BlockLesen POP DE JR C,Break LD BC,80H LD HL,(EndAdr) OR A SBC HL,DE SBC HL,BC JR C,LetzterBlock LD HL,Buffer LDIR JR NextBlock LetzterBlock ADD HL,BC ;Negat.d.SBC LD C,L LD HL,Buffer LDIR EOF CALL SUB DEFB 0BH XOR A ;alles O.K. JR POP3+1 Break CALL SUB DEFB 0BH ;CLOSE LD A,3 ;Fehlernr. POP3 SCF POP HL POP DE POP BC RET NoMemory CALL SUB DEFB 0BH ;CLOSE LD A,2 ;zu wenig Spei. JR POP3 OutBlNr PUSH AF LD A,25 CALL SUB DEFB 24H ;OCHR POP AF CALL 0F003H DEFB 01CH ;AHEX LD A,'>' CALL 0F003H DEFB 024H RET BlockLesen LD H,A JR Z,SchonGelesen NochmalLesen CALL 0F003H;BRK-Test DEFB 02AH RET C CALL 0F003H;MBI DEFB 005H SchonGelesen LD A,(IX+02H) JR NC,ReadingOK BadBlock CALL 0F003H DEFB 01CH ;AHEX CALL 0F003H DEFB 023H DEFM '*' DEFB 8 defb 8 defb 8 DEFB 000H LD A,H DEC A JR NZ,NochmalLesen CALL 0F003H;CR/LF DEFB 02CH JR NochmalLesen ReadingOK CP H RET Z CP 0FFH JR NZ,BadBlock LD L,H DEC L JR Z,BadBlock RET ;___________________End_of_Load_________ ;Verwaltung der SystemEPROMs ;Achtung:Es wird bis FFFF RAM angenommen SYSon PUSH AF IN A,(88H) OR 1 OUT (88H),A POP AF RET SYSoff PUSH AF IN A,(88H) AND 0FEH OUT (88H),A POP AF RET ;_________________ Verdichte ;Verdichten eines Spei- SET 7,H LD A,M;cherbereiches der L{nge DEC A ;von B Byte und der An- LD C,A;fangsadr. HL. DE zeigt ;wo das Ergebnis abge- ;legt werden soll (DE ;wird decrementiert !). Compress LD A,(HL) CP C ;? (HL-1)=(HL) LD (DE),A LD C,A;f}r n{chsten Zyklus INC HL DEC DE JR Z,Susi;(HL-1)=(HL) DJNZ Compress RET Susi PUSH DE LD DE,0;Z{hler f.Wiederholung ;des Byte A LD C,B;BC:=B LD B,0 Weiter CPI INC DE JR NZ,Michaela JP PE,Weiter ;BC>0,A=(HL) INC DE INC HL Michaela DEC HL DEC DE LD B,C;B:=BC LD C,E;Z{hlerstand POP DE ;HEAP-Adr. LD A,C;Wiederholungszahl LD (DE),A;sichern DEC DE XOR A ;B=0 ? --> RET CP B JR NZ,Verdichte ;Achtung:Es wird bis FFFF RAM angenommen SYSon PUSH AF IN A,(88H) OR 1 OUT (88H),A POP AF RET SYSoff PUSH AF IN A,(88H) AND 0FEH OUT (88H),A POP AF RET ;_________________ Verdichte ;Verdichten eines Spei- SET 7,H LD A,M;cherbereiches der L{nge DEC A ;von B Byte und der An- LD C,A;fangsadr. HL. DE zeigt ;wo das Ergebnis abge- ;legt werden soll (DE ;wird decrementiert !). Compress LD A,(HL) CP C ;? (HL-1)=(HL) LD (DE),A LD C,A;f}r n{chsten Zyklus INC HL DEC DE JR Z,Susi;(HL-1)=(HL) DJNZ Compress RET Susi PUSH DE LD DE,0;Z{hler f.Wiederholung ;des Byte A LD C,B;BC:=B LD B,0 Weiter CPI INC DE JR NZ,Michaela JP PE,Weiter ;BC>0,A=(HL) INC DE INC HL Michaela DEC HL DEC DE LD B,C;B:=BC LD C,E;Z{hlerstand POP DE ;HEAP-Adr. LD A,C;Wiederholungszahl LD (DE),A;sichern DEC DE XOR A ;B=0 ? --> RET CP B JR NZ,Verdichte ;Achtung:Es wird bis FFFF RAM angenommen SYSon PUSH AF IN A,(88H) OR 1 OUT (88H),A POP AF RET SYSoff PUSH AF IN A,(88H) AND 0FEH OUT (88H),A POP AF RET ;_________________ Verdichte ;Verdichten eines Spei- SET 7,H LD A,M;cherbereiches der L{nge DEC A ;von B Byte und der An- LD C,A;fangsadr. HL. DE zeigt ;wo das Ergebnis abge- ;legt werden soll (DE ;wird decrementiert !). Compress LD A,(HL) CP C ;? (HL-1)=(HL) LD (DE),A LD C,A;f}r n{chsten Zyklus INC HL DEC DE JR Z,Susi;(HL-1)=(HL) DJNZ Compress RET Susi PUSH DE LD DE,0;Z{hler f.Wiederholung ;des Byte A LD C,B;BC:=B LD B,0 Weiter CPI INC DE JR NZ,Michaela JP PE,Weiter ;BC>0,A=(HL) INC DE INC HL Michaela DEC HL DEC DE LD B,C;B:=BC LD C,E;Z{hlerstand POP DE ;HEAP-Adr. LD A,C;Wiederholungszahl LD (DE),A;sichern DEC DE XOR A ;B=0 ? --> RET CP B JR NZ,Verdichte