






;**********************************************************
;*                                                        *
;*     Discdirectory    (c) Juergen Weber 9/1986          *
;*                                                        *
;**********************************************************



ORG	#A000



WBUFF:EQU	#8801
BUFFER:EQU	#8000
UEBER:EQU	#9F00
AMSDOS:EQU	#AC00

CALL	SYMBOL	;ue DEFINIEREN

LD	C,7
LD	HL,AMSDOS+#500	;AMSDOS INITIALISIEREN
CALL	#BCCE	; KL INIT BACK

LD	A,#FF
LD	(#BE78),A	;MESSAGE OFF

ANFANG:LD	SP,#C000
CALL	INKON
CALL	TITEL
JR	NC,EINS	;EINZELNES FILE 

; *** CAT ***
CALL	TSTDRI
CALL	INKOFF

CALL	SREAD

CALL	AUSWERT
EINS:LD	HL,LINEF
CALL	ZEICH
CALL	DRUOFF	; WEGEN MELDUNGEN
LD	B,25
CALL	BLANK
LD	HL,ENDKEY
CALL	ZEICH
CALL	CLIN
CALL	#BB18
JP	ANFANG



ORTAU:LD	HL,GELB
JR	COPYAU+3

COPYAU:LD	HL,JURGEN
LD	A,(HL)
OR	A
RET	Z
RRCA
CALL	BUCHST
INC	HL
JR	COPYAU+3

DRUOFF:LD	HL,DRUCK-1
LD	(HL),#C9
RET


YMAX:DEFS	1

UGRENZ:LD	C,255
LD	HL,#103

BLTEST:INC	C
INC	L
PUSH	HL
PUSH	BC
CALL	READ
POP	BC
POP	HL
CP	32
JR	NZ,BLTEST
LD	A,C
LD	(YMAX),A

ABHIER:LD	HL,GIVNAM
CALL	ZEICH
LD	HL,#0104
CALL	#BB75	;LOCATE
CALL	CURON	;CUR ON

CALL	INKON

LD	D,1
LD	E,D

MOVCUR:CALL	CLIN	;D=X
CALL	#BB18	; E=Y
CP	#E0
JR	Z,COPY	;C=YMAX
CP	#F0
JR	C,MOVCUR
CP	#FC
JR	NC,MOVCUR
AND	3	;NUR BIT 0+1
OR	A
JR	NZ,CC1
LD	A,E	;Y-ZAEHLER 
CP	1
JR	Z,MOVCUR
DEC	E
LD	A,11
CALL	#BB5A	;CURSOR HOCH

CC1:CP	1
JR	NZ,CC2
LD	A,(YMAX)
CP	E
JR	Z,MOVCUR
INC	E
LD	A,10
CALL	#BB5A	;CURSOR UNTEN

CC2:CP	2
JR	NZ,CC3
LD	A,D
CP	1
JR	Z,MOVCUR
SUB	20	;SPALTE ZURUECK
LD	D,A
LD	A,8
CALL	BEWEG	;CURSOR LINKS

CC3:CP	3
JR	NZ,MOVCUR
LD	A,D
CP	61
JR	Z,MOVCUR

ADD	A,20
LD	D,A
LD	A,9
CALL	BEWEG
JR	MOVCUR


BEWEG:PUSH	BC
DI
CALL	#BB84
LD	B,20
BEW:CALL	#BB5A
DI
DJNZ	BEW
POP	BC
EI
RET

COPY:CALL	CUROFF	;CUSOR OFF
CALL	#BB78	;GETCUR
DEC	H
LD	(CURS),HL
LD	HL,#1418
CALL	#BB75	;LOCATE
LD	A,18
CALL	#BB5A	;BIS ZEILENENDE LOESCHEN
LD	HL,UEBER
LD	(WBU),HL
CALL	BUCH
LD	(HL),0	;ABSCHLUSS
LD	HL,UEBER
LD	A,32	;WIRKLICH NAME? 
CP	(HL)
JP	Z,ABHIER
LD	DE,WBUFF
LD	BC,13
LDIR
RET


TEIL:CALL	TSTDRI
CALL	INKOFF
LD	DE,BUFFER
CALL	#BC9B	;CLS:CAT
CALL	UGRENZ
CALL	EINSPR
JP	AUSWERT


INKOFF:RET	; ** INKS AUF GLEICHE FARBE **
LD	BC,#101
XOR	A
PUSH	BC
CALL	#BC32
POP	BC	; INK 0,1:INK 1,1
LD	A,1
CALL	#BC32
LD	A,2	; MODE 2  
CALL	#BC0E
SCF
RET

INKON:XOR	A
LD	BC,#101
CALL	#BC32
LD	BC,#1818	; INK 0,1:INK 1,24
LD	A,1
JP	#BC32

CURON:PUSH	AF
PUSH	HL
PUSH	DE
PUSH	BC
LD	A,235	;INTERRUPT EINREIHEN
LD	(COUNTE),A
LD	A,#FF
LD	(COUNTE+1),A	;ERSTER DURCHGANG CRS ON
LD	HL,FREI
LD	DE,ROUTIN
LD	BC,#81FF
CALL	#BCD7
POP	BC
POP	DE
POP	HL
POP	AF
RET

CUROFF:PUSH	HL
PUSH	DE
PUSH	AF
LD	HL,FREI
CALL	#BCDD	;INTERRUPT AUSREIHEN
CALL	#BB84	;CURSOR OFF
POP	AF
POP	DE
POP	HL
RET


ROUTIN:DI
PUSH	AF
PUSH	HL
LD	HL,COUNTE
INC	(HL)	;ZEITZAEHLER
JR	NZ,NOCHNI
LD	(HL),235
CALL	#BB81	;CURSOR ON
LD	A,(COUNTE+1)
CPL	;A WIRD FF
LD	(COUNTE+1),A
OR	A	;0=OFF
JR	NZ,NOCHNI
CALL	#BB84	;CURSOR OFF
NOCHNI:POP	HL
POP	AF
EI
RET

FREI:DEFM	"(C) 1986 Jurgen Weber "
COUNTE:EQU	FREI+20


TITEL:LD	A,2
CALL	#BC0E	; MODE 2

LD	HL,INSERT	; "NEXT DISC"
CALL	ZEICH
CALL	CLIN
CALL	#BB06

CALL	TSTDRI	;DISKETTE EINGELEGT
LD	HL,WHOLDI
CALL	ZEICH
CALL	CLIN
CALL	#BB06
OR	32	;LOWER$
CP	"s"
JP	Z,TEIL	;LIEST EINZELNES FILE

CALL	CLIN	;CLEAR INPUT
LD	HL,#A0A
CALL	#BB75
LD	HL,FRASTR	; "DISCNAME"
CALL	ZEICH
CALL	CLIN
CALL	INPUT
LD	HL,#FF
CALL	#BB75
EINSPR:LD	HL,STRIN1	;"DRUCKER J/N?"
CALL	ZEICH
CALL	CLIN
LD	B,#C9
CALL	#BB18	;TASTE WARTEN
OR	32	; LOWER$
CP	"y"
JR	NZ,$+9	;NICHT "y"
CALL	ONLINE
JR	NC,EINSPR
LD	B,0
LD	HL,DRUCK-1
LD	(HL),B
RET

TSTDRI:LD	A,2
RST	#18
DEFW	FARADR
LD	A,(#BE4C)
AND	32
JP	NZ,#BB6C	; CLS UND FERTIG
LD	HL,INSDIS	;"You must insert a disc"
CALL	ZEICH
LD	B,2
CALL	DELAY
JR	TSTDRI

FARADR:DEFW	#C630
DEFB	7

JURGEN:DEFB	80,134	;"(C) 1986 Jurgen Weber"
DEFM	"R@brpl@"
DEFB	148,235,228,206,202,220
DEFB	64,174,202,196,202,228
DEFB	0	;"SHA-Gelbingen"  
GELB:DEFB	166,144,130,90,142,202
DEFB	216,196,210,220,206,202,220,0

SREAD:RST	#18
DEFW	LOGIN

LD	A,(AMSDOS+#1A0)	;SEKTORNUMMER
LD	C,A
LD	D,0	; TRACKNUMMER DATEN
CP	#41	;CP/M
JR	NZ,$+4
LD	D,2	;DATEN

LD	HL,BUFFER
LD	B,4	;4 SEKTOREN
LD	E,0	;DRIVE 0
SEKTOR:PUSH	DE	;TRACK DRIVE
PUSH	BC
PUSH	HL
RST	#18
DEFW	RDSECT
POP	HL
POP	BC
INC	C
LD	DE,512
ADD	HL,DE
POP	DE
DJNZ	SEKTOR

LD	DE,BUFFER
LD	HL,WBUFF
LD	(WBU),HL

FILE:LD	HL,(WBU)
PUSH	DE
LD	A,(DE)	; USERNUMMER
CP	16
JR	NC,NXTFILE	;GELOESCHT
INC	DE	;ZEIGT NUN AUF FILENAME
LD	B,8	;NAME
CALL	DIREC
LD	A,"."
LD	(HL),A
INC	HL
LD	B,3	; EXTENTION
CALL	DIREC
INC	DE	; RECORDS
INC	DE
INC	DE
LD	A,(DE)
BIT	7,A
JR	NZ,NXTFILE	;ES FOLGT WEITERER EINTRAG
LD	(HL),A
INC	HL
LD	(WBU),HL
LD	(HL),#FF	; ZEIGT ENDE AN

NXTFILE:POP	HL	;BUFFER
LD	DE,32
ADD	HL,DE	;HL=HL+32
EX	DE,HL	;BUFFER NACH DE
PUSH	DE
XOR	A
LD	H,D
LD	L,E
LD	DE,BUFFER+2048
SBC	HL,DE
LD	A,H
OR	L
POP	DE
JR	NZ,FILE	; NOCH NICHT DE=BUFFERENDE+1
RET

DIREC:LD	A,(DE)	;BUCHST AUS BUFFER
AND	127	;BIT 7 LOESCHEN
LD	(HL),A	;NACH WORDBUFFER
INC	HL
INC	DE
DJNZ	DIREC
RET

LOGIN:DEFW	#C56C
DEFB	7
RDSECT:DEFW	#C666
DEFB	7

BUCH:LD	B,12	; VOM SCHIRM LESEN
PUSH	BC
LD	HL,(CURS)
INC	H
LD	(CURS),HL
CALL	READ
LD	HL,(WBU)
LD	(HL),A	; EINZELNE BUCHSTABEN
INC	HL	; IN BUFFER
LD	(WBU),HL
POP	BC
DJNZ	BUCH+2
RET


READ:CALL	#BB75	; LOCATE
JP	#BB60	; RD CHAR

INPUT:
CALL	CURON	;CURSOR AN
LD	HL,UEBER
LD	C,0	;WORTZAEHLER  
LOOP:;
CALL	#BB06	;AUF BUCHSTABEN WARTEN
CP	252	;ESC
JR	NZ,WEITER
CALL	#B900
JP	#C064
WEITER:CP	127;>127
JR	Z,DELETE
JR	NC,LOOP	;GROESSER 127
CP	13	;ENTER
JR	NZ,STEUER
LD	(HL),0	;NULL ALS ABSCHLUSS
JP	CUROFF	;CURSOR AUS

STEUER:CP	31;STEUERZEICHEN
JR	C,LOOP;WERDEN NICHT AKZEPTIERT
LD	B,A
LD	A,C
CP	50
JR	NC,LOOP	;SCHON 50 BUCHSTABEN
LD	A,B
LD	(HL),A	;BUCHSTABEN SPEICHERN
INC	HL
INC	C;ZAEHLER +1
CALL	#BB5A	;BUCHSTABEN DRUCKEN
JR	LOOP	;NAECHSTER


DELETE:
LD	A,C
OR	A
JR	Z,LOOP;EINGEGEBEN 
DEC	HL
DEC	C
LD	A,8;CURSOR BACK
CALL	#BB5A
LD	A,32
CALL	#BB5A;BLANK
LD	A,8	;CURSOR BACK
CALL	#BB5A
JR	LOOP


CLIN:CALL	#BB09	;CLEAR INPUT 
JR	C,CLIN
RET

UE:DEFB	#66,0,#66,#66	;ue
DEFB	#66,#66,#3E,0

SYMBOL:LD	DE,"u"+128
LD	HL,SYMB
CALL	#BBAB;TXT SET MATRIX TABLE
LD	A,"u"+128
LD	HL,UE
JP	#BBA8;TXT SET MATRIX   

AUSWER:CALL	INKOFF

LD	B,58
CALL	BLANK
CALL	COPYAU	;COPYRIGHTMELDUNG
LD	B,67
CALL	BLANK
CALL	ORTAU
LD	HL,STRING	; UEBERSCHRIFT
CALL	ZEICH
LD	HL,UEBER	;DISCNAME
CALL	ZEICH
LD	HL,STRIN2; ITEMNAMEN
CALL	ZEICH
LD	HL,#4F18	;X-WERTE
LD	DE,7	;WINDOW 1,80,7,25        
CALL	#BB66	;TXT WIN ENABEL

CALL	INKON

LD	HL,WBUFF
EINAME:LD	A,(HL)
CP	#FF
RET	Z
LD	(WBU),HL
LD	B,12	; FILENAME 12 ZEICHEN LANG
PUSH	HL
PUSH	BC
PUSH	HL
LD	DE,12
ADD	HL,DE
LD	A,(HL)
LD	(RECORDS),A
POP	HL
LD	DE,BUFFER
CALL	#BC77	;DISC IN OPEN
JP	NC,ANFANG
PUSH	HL	; ZEIGT AUF HEADERWERTE
CALL	#BC7D	;DISC IN ABANDON
POP	HL
LD	DE,HEADER
LD	BC,28	; KOPIEREN
LDIR
CALL	AUSGA
POP	BC	; B ENTHAELT 12
POP	HL	; ENTHAELT ANFANG DES LETZTEN
; NAMENS
LD	C,B	;NACHSTER NAME
INC	C
LD	B,0	;BEGINNT 13 WEITER
ADD	HL,BC

PUSH	HL
CALL	#BB09	;BREAK TESTEN
CP	252
JR	NZ,$+14
CALL	CURON	;CURSOR ON
CALL	CLIN	;CLEAR INPUT
CALL	#BB06	;2 TASTENDRUCK
CALL	CUROFF	;CURSOR OFF
POP	HL
CP	252	;NOCH MAL BREAK
RET	Z
JR	EINAME

AUSGA:;


BL1:LD	B,5
CALL	BLANK	; 5 BLANKS
CALL	FNAUS	; FILENAME
LD	B,7
CALL	BLANK	; 7 BLANKS
CALL	TYPE	; FILETYPE ALS SYMBOL
LD	HL,START
CALL	ZWBYTE; LADEADRESSE
LD	HL,(LEN)
LD	A,H	; WENN ASCII
OR	L
JR	Z,EXIT	; DANN FERTIG
LD	B,5
CALL	BLANK	; 5 BLANKS
LD	HL,LEN
CALL	ZWBYTE	; FILELAENGE
LD	B,6
CALL	BLANK	; 6 BLANKS
LD	HL,AUTOST
CALL	ZWBYTE	; AUTOSTART
LD	B,13
CALL	BLANK	; 13 BLANKS
LD	A,(TYP)
AND	1; GESCHUETZT
LD	A,89;"Y"  
JR	NZ,W3
LD	A,78;"N"
W3:CALL	BUCHST	; 'Y' ODER 'N' AUSGEBEN
EXIT:LD	HL,LINEF	; CRLF
JP	ZEICH


FNAUS:LD	HL,(WBU)	; FILENAME AUS BUFFER 
LD	B,12	; AUSGEBEN
SCHLEI:LD	A,(HL)	; DA NAME IM BUFFER (AKTUELLER 
CALL	BUCHST	; DIRECTORYNAME) NICHT GLEICH
INC	HL	; NAME IM HEADER SEIN MUSS
DJNZ	SCHLEI
RET


ZWBYTE:INC	HL	; HIGHBYTE
CALL	BYTE
DEC	HL	; LOWBYTE


BYTE:XOR	A
RLD	; OBERES NIBBLE
CALL	NIBBLE
XOR	A
RLD	; UNTERES NIBBLE


NIBBLE:CP	10
JR	NC,GROSS
ADD	A,48	; '0'-'9'
JP	BUCHST
GROSS:ADD	A,55	; 'A'-'F'
JP	BUCHST


BLANK:LD	A,32	;BLANKS AUSGEBEN
CALL	BUCHST
DJNZ	BLANK
RET

TYPE:LD	A,(TYP)	; TYPKENNBYTE
BIT	4,A
JR	NZ,WEIT1	; *
ADD	A,36
JR	WEIT2
WEIT1:LD	A,42	;'*'
CALL	LAENGE
WEIT2:CALL	BUCHST
LD	B,4
JP	BLANK	; UND NOCH 4 BLANKS

LAENGE:LD	HL,0
PUSH	AF
LD	DE,128
LD	A,(RECORDS)
LD	B,A
REC:ADD	HL,DE	; LAENGE=RECORDS*128
DJNZ	REC
LD	(LEN),HL
POP	AF
RET

ZEICH:LD	A,(HL)	; EIN ZEICHEN AUF
OR	A	; SCHIRM ODER DRUCKER
RET	Z	; AUSGEBEN
INC	HL
CALL	BUCHST
JR	ZEICH


BUCHST:CALL	#BB5A	; SCHIRM
RET	;WIRD VERAENDERT

DRUCK:CALL	#BD2B	; AUSGABE AUF DRUCKER
JR	NC,DRUCK	; OFF LINE
RET

ONLINE:XOR	A	;PRINT #8,CHR$(0)
CALL	#BD2B
RET	C
LD	B,40
CALL	BLANK
LD	HL,PROFF
CALL	ZEICH
OR	A
LD	B,3
DELAY:LD	HL,0
DEC	HL
LD	A,H
OR	L
JR	NZ,DELAY+3
DJNZ	DELAY
LD	A,17
JP	#BB5A


; VERSCHIEDENE STRINGS

INSDIS:DEFB	13,10
DEFM	"You must insert a disc into drive A !"
DEFB	7,13,10,0
WHOLDI:DEFB	31,10,5
DEFM	"Show (w)hole disc or (s)ingle file ?"
DEFB	13,10,0
GIVNAM:DEFB	31,20,24
DEFM	"Move cursor onto Filename then press COPY"
DEFB	7,0
FRASTR:DEFM	"Discname (or ESC) ? "
DEFB	0
STRIN1:DEFB	31,30,20
DEFM	"Printer (y/n)?"
DEFB	0
PROFF:DEFM	"Printer is OFF LINE !"
DEFB	7,0
INSERT:DEFB	31,10,7
DEFM	"Insert the disc to be read then press any key"
DEFB	7,13,10,0
ENDKEY:
DEFM	"Press any key to continue"
DEFB	7,0
STRING:DEFB	13,10
DEFM	"     DISC - DIRECTORY : "
DEFB	0
STRIN2:DEFB	13,10,10
DEFM	"     FILENAME.EXT      T"
DEFM	"YP   START    LENGHT    AUTOSTART    PROTECTED"
DEFB	13,10
LINEF:DEFB	13,10,0
WBU:DEFW	0	; ZEIGT AUF BUCHSTABEN IM FILENAME
CURS:DEFW	0	; ZEIGT AUF CURSORPOSITION
RECORD:DEFS	1	;ENTHAELT RECORDS

HEADER:DEFS	1	;USERNUMMER(NICHT AUSGEGEBEN)
FNAME:DEFS	11	; FILENAME
BLOCKN:DEFS	6	; 6 BEI DISK NICHT BENUTZTE BYTES
TYP:DEFS	1	; FILETYP
DEFS	2
START:DEFS	2	; LADEADRESSE
DEFS	1
LEN:DEFS	2	; FILELAENGE
AUTOST:DEFS	2; AUTOSTART
SYMB:EQU	$


éS	2; AUTOSTARTÚSYMB:EQU	$ÛÜ                        