


;***********************************************************
;*                                                         *
;*      Tape-Directory    (c) Juergen Weber 9/1986         *
;*                                                         *
;***********************************************************



ORG	#A000
WBUFF:EQU	43900


LD	SP,#C000
CALL	SYMBOL
START:CALL	DRUOFF
CALL	INKOFF
CALL	TITEL
CALL	SCREEN
ANFANG:LD	A,1
LD	(BNZ),A
LD	(NEWFLA),A
CALL	#BC6E	; MOTOR STARTEN 
CATA:CALL	BLOCK
JP	NC,ERROR	; ESC ODER FEHLER
LD	A,(FB)
INC	A	; 1.  BLOCK ?
CALL	Z,NEWFILE
LD	HL,BNZ
LD	A,(BLOCKN)	; STIMMT BLOCKNUMMER ?
CP	(HL)
JR	NZ,ANFANG
INC	(HL)
CALL	FILEN
JR	NC,ANFANG
CALL	GAFILE
JP	NZ,AUSGA	; GANZES FILE GELESEN
JR	CATA


NEWFIL:LD	HL,FNAME
LD	BC,16
LD	DE,NAME
LDIR
LD	A,#FF	;FLAG FUER FILE
LD	(NEWFLA),A
LD	HL,0
LD	(LEN),HL
LD	HL,(BEGIN)
LD	(STADR),HL
LD	HL,BNZ
LD	(HL),1
RET


BLOCK:
LD	DE,0
LD	HL,399
CALL	#BBC0	; MOVE 0,399
LD	A,"R"
CALL	#BBFC	; TAG:?"R"
CALL	BLOCON
PUSH	AF
LD	DE,0
LD	HL,399
CALL	#BBC0
LD	A,32
CALL	#BBFC
POP	AF
RET


BLOCON:
LD	HL,HEADER
LD	DE,28
LD	A,#2C	; HEADER
CALL	#BCA1
RET	NC
LD	HL,#40	;DATENPUFFER
LD	DE,(LENBLO)
LD	A,#16	; DATEN
JP	#BCA1


ERROR:OR	A
JR	Z,BREAK
LD	A,67
LD	(ERR),A
LD	A,(NEWFLA)
CP	#FF
JP	Z,AUSGA
LD	A,(BLOCKN)
CP	1
JP	Z,AUSGA
JP	ANFANG


BREAK:CALL	#BC71
JP	START

FILEN:XOR	A
LD	HL,NAME	; STIMMT NAME
LD	BC,16
LD	DE,FNAME
LETTER:LD	A,(DE)
INC	DE
CPI
RET	NZ
JP	PE,LETTER
SCF
RET	; ALLES O.K.



GAFILE:LD	DE,(LENBLO)
LD	HL,(LEN)
ADD	HL,DE	; FILELAENGE AKTUALISIEREN
LD	(LEN),HL
LD	A,(LASTBL)
OR	A	; WENN LETZT. BL.
RET	; DANN 255

SCREEN:LD	A,2
CALL	#BC0E	;MODE 2
CALL	INKOFF
LD	B,58
CALL	BLANK
CALL	COPYAU
LD	B,67
CALL	BLANK
CALL	ORTAU
LD	A,(DRUFLA)
LD	(DRUCK-1),A
LD	HL,STRIN1	;"TAPE-DIRECKTOR"
CALL	ZEICH
LD	HL,WBUFF	;CASSETTENNAME
CALL	ZEICH
LD	HL,LINEF
CALL	ZEICH
LD	HL,STRIN2	; ITEMS
CALL	ZEICH
LD	HL,#4F18
LD	DE,7
CALL	#BB66	; WINDOW

JP	INKON


ZEICH:LD	A,(HL)
OR	A
RET	Z
INC	HL
CALL	BUCHST
JR	ZEICH


TITEL:LD	A,2
CALL	#BC0E	;MODE 2
LD	HL,TAPEST
CALL	ZEICH
LD	HL,JURGEN
CALL	COPYAU
CALL	INKON
LD	HL,#A0A
CALL	#BB75	;LOCATE
LD	HL,FRASTR	;"CASSETTENAME"
CALL	ZEICH
CALL	CLIN
CALL	INPUT
EINSPR:LD	HL,#190F
CALL	#BB75
LD	HL,STRIN3	;"PRINTER Y/N"
CALL	ZEICH
CALL	CLIN
LD	B,#C9
CALL	#BB18
OR	32
CP	"y"
LD	A,"n"
JR	NZ,DRUNOT
CALL	ONLINE
JR	NC,EINSPR
LD	B,0
LD	A,"y"
DRUNOT:LD	HL,DRUFLA
LD	(HL),B
CALL	#BB5A	;"j" ODER "n" AUSGEBEN
LD	HL,INSCAS	; "Insert cassette"
CALL	ZEICH
CALL	CLIN
JP	#BB18

DRUFLA:DEFS	1

AUSGA:CALL	#BC71	; MOTOR STOP
XOR	A
LD	(NEWFLA),A	;ENDE VON FILE ANZEIGEN 
LD	A,(BLOCKN)
LD	(LASTBL),A
XOR	A
LD	(BLOCKN),A	; NAME BRAUCHT 0
CALL	BLNSET
LD	B,5
CALL	BLANK
LD	HL,FNAME
CALL	ZEICH	; FILENAME
LD	B,3
CALL	BLANK
CALL	TYPE
LD	HL,ERR
LD	A,(HL)
CP	67
LD	(HL),0	; ERRORFLAG LOESCHEN
JP	Z,ERRMEL
LD	HL,STADR	; ANFANGSADRESSE
CALL	ZWBYTE
LD	B,5
CALL	BLANK
LD	HL,LEN	; FILELAENGE
CALL	ZWBYTE
LD	B,6
CALL	BLANK
LD	HL,AUTOST	; AUTOSTART
CALL	ZWBYTE
LD	B,9
CALL	BLANK
LD	HL,LASTBL
CALL	BYTE	; BLOCKZAHL
LD	HL,LINEF
CALL	ZEICH
JP	ANFANG

ERRMEL:LD	HL,ERRSTR
CALL	ZEICH
JP	ANFANG

ZWBYTE:INC	HL	; HIGHBYTE
CALL	BYTE
DEC	HL	; LOWBYTE


BYTE:XOR	A
RLD	; OBERES NIBBLE VON (HL) NACH A
CALL	NIBBLE	; UNTERES NACH OBEN
XOR	A
RLD

NIBBLE:CP	10
JR	NC,GROSS
ADD	A,48
JP	BUCHST
GROSS:ADD	A,55
JP	BUCHST



BLANK:LD	A,32
CALL	BUCHST
DJNZ	BLANK
RET



BLNSET:LD	HL,FNAME
LD	BC,17
XOR	A
LOOP3:CPI
RET	PO	; FERTIG
JR	NZ,LOOP3
DEC	HL
LD	(HL),32
INC	HL
JR	LOOP3



TYPE:LD	A,(TYP)
CP	22	; ASCII
JR	Z,WEIT1
ADD	A,36
JR	WEIT2
WEIT1:LD	A,42	; '*'
WEIT2:CALL	BUCHST
LD	B,4
JP	BLANK

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

INKOFF:; ** 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


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"  
NEWFLA:DEFS	1
GELB:DEFB	166,144,130,90,142,202
DEFB	216,196,210,220,206,202,220,0


INPUT:
CALL	CURON	;CURSOR AN
LD	HL,WBUFF
LD	C,0	;WORTZAEHLER  
LOOP:;
CALL	#BB06	;AUF BUCHSTABEN WARTEN
CP	252	;ESC
JR	NZ,WEITER
RST	0
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   


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

DEFM	"Printer (y/n)?"
DEFB	0
PROFF:DEFM	"Printer is OFF LINE !"
DEFB	7,0
STADR:DEFW	0
BNZ:DEFB	0
NAME:DEFS	16
LEN:DEFW	0
TAPEST:DEFB	10,10,10
STRIN1:DEFB	13,10,10
DEFM	"     TAPE - DIRECTORY :"
DEFB	32,0
STRIN2:DEFB	13,10
DEFM	"     FILENAME          TYP   START    LENGTHT   AUTOSTART    BLOCKS"
DEFB	13,10
LINEF:DEFB	13,10,0
ERRSTR:DEFM	"damaged"
DEFB	13,10,0
FRASTR:DEFB	13,10
DEFM	"Name of cassette (or ESC) ? "
DEFB	0
STRIN3:DEFM	"Printer (y/n) ? "
DEFB	0
INSCAS:DEFB	13,10,10
DEFM	"Insert the cassette to be read and press PLAY, then"
DEFM	" press any key."
DEFB	0
ERR:DEFB	0
HEADER:; FILEHEADER
FNAME:DEFS	16	; FILENAME
BLOCKN:DEFB	0	; BLOCKNUMMER
LASTBL:DEFB	0	; FLAG F. LETZTEN BLOCK
TYP:DEFB	0	; FILETYP
LENBLO:DEFW	0	; BLOCKLAENGE
BEGIN:DEFW	0	; STARTADRESSE
FB:DEFS	3
AUTOST:DEFW	0	; AUTOSTART
SYMB:EQU	$

W	0	; STARTADRESSE FB: