;XDPATCH.MAC
;
;QUELLCODE FUER XD.COM-PATCH
;BASISVERSION VON XD.COM : 3.1
;PATCHVERSION : 3.15
;STAND : 05.01.89
;AUTOR : ROBERT STEINDL

.Z80
ASEG

; ADRESSEN IM XD.COM-FILE

PATAREA	EQU	0D00H			; ENDE VON XD.COM
PATCH1	EQU	0105H			; BEGINN DER MELDUNGEN
PATCH2	EQU	0511H			; MITTEN IM ANFANGSTEST
PATCH3	EQU	0386H			; DISK SPACE ROUTINE
XD_GO	EQU	04F8H			; EIGENTLICHER ANFANG VON XD.COM
XD_GO_2	EQU	0519H			; WEITER MIT DRIVE-TEST
SHOWDSK	EQU	0AAEH			; ANZEIGEN DER AKTIVEN DRIVES

;BDOS-ROUTINEN

BDOS	EQU	0005H			; BDOS CALL
WRMBOOT	EQU	0000H			; CP/M WARMSTART
PRT_STR	EQU	09H			; PRINT STRING
GETVER	EQU	0CH			; RETURN VERSION NUMBER
SETDMA	EQU	01AH			; SET DMA ADDRESS
CURDISK	EQU	019H			; RETURN CURRENT DISK
GETFREE	EQU	02EH			; GET FREE DISK SPACE

;CPM-ADRESSEN

FCB	EQU	05CH			; LAGE DES FCB


	ORG	0100H

	JP	PTC_A


	ORG	PATCH1

	DB	'suchen ...',0DH
	DB	'sortieren ...  ',0DH
	DB	09,09,'V 3.15   05.01.89   '

	ORG	PATCH2

	JP	PTC_B

	ORG	PATAREA

PTC_A:	LD	C,GETVER		; VERSIONSNUMMER
	CALL	BDOS			; HOLEN
	LD	A,030H			; CP/M 3.X ?
	CP	L
	JR	NC,PTC_A_EX		; NEIN, DANN RAUS
	LD	HL,PATCH3		; AUSSPRUNG PATCHEN
	LD	DE,PTC_CAP		; NEUE ROUTINE FUER CP/M 3
	LD	A,0C3H			; OPCODE FUER 'JP'
	LD	(HL),A
	INC	HL
	LD	(HL),E
	INC	HL
	LD	(HL),D			; DRIN ISSES
PTC_A_EX:
	JP	XD_GO			; WEITER IM ORIGINAL

PTC_CAP:LD	C,SETDMA
	LD	DE,PTC_SPC		; DMA PASSEND SETZEN
	CALL	BDOS
	LD	C,CURDISK		; AKTUELLES LAUFWERK HOLEN
	CALL	BDOS
	LD	E,A			; DRIVE IN E
	LD	C,GETFREE		; GET FREE DISK SPACE
	CALL	BDOS
	LD	HL,(PTC_SPC)		; LOW UND MED BYTE
	LD	A,(PTC_SPC+2)		; HIGH BYTE
	LD	C,A			; IN C
	LD	B,03			; ALLES DURCH 8 TEILEN,
PTC_LOOP:
	XOR	A			; SCHLIESSLICH SIND'S JA
	RR	C			; 128-BYTE-RECORDS
	RR	H
	RR	L
	DJNZ	PTC_LOOP
	RET				; UND DAS WARS DANN


PTC_B:	LD	A,(FCB+1)		; ERSTER BUCHSTABE FILENAME
	CP	'/'			; AKTIVE DRIVES ANZEIGEN ?
	JR	NZ,PTC_B_2		; NEIN, DANN WEITER MIT '?'
	CALL	TEST_1			; EINZIGES ZEICHEN ?
	JP	Z,SHOWDSK		; JA, DANN ZEIGEN DER DRIVES
	JR	PTC_B_EX		; SONST RAUS
PTC_B_2:CP	'?'			; HILFE ?
	JR	NZ,PTC_B_EX		; NEIN, DANN RAUS
	CALL	TEST_1			; EINZIGES ZEICHEN ?
	JR	Z,PTC_B_H		; JA, DANN HILFSTEXT
PTC_B_EX:
	LD	A,(FCB)
	JP	XD_GO_2			; WEITER IM ORIGINAL	

PTC_B_H:LD	DE,HELP
	LD	C,PRT_STR
	CALL	BDOS
	LD	C,WRMBOOT
	JP	BDOS			; NACH HILFE IS SCHLUSS

HELP:	DB	0DH,0AH,0AH,'AUFRUF:',0DH,0AH,0AH
	DB	'XD                         Directory des aktuellen Drives'
	DB	0DH,0AH
	DB	'XD D:                      Directory des Drives D:'
	DB	0DH,0AH
	DB	'XD D:FILENAME.EXT          Directory Drive D:, enstprechend'
	DB	0DH,0AH
	DB	'                                     der Maske FILENAME.EXT'
	DB	0DH,0AH
	DB	'                                     (Wildcards erlaubt)'
	DB	0DH,0AH
	DB	'XD D:FILENAME.EXT S        Attribute setzen, Files loeschen'
	DB	0DH,0AH
	DB	'XD /                       Anzeige aller aktiven Drives'
	DB	0DH,0AH
	DB	'XD ?                       Dieser Hilfstext'
	DB	0DH,0AH,0AH
	DB	'$'			; STRINGENDE


TEST_1:	LD	A,(FCB+2)
	CP	' '			; ZWEITES ZEICHEN BLANK ?
	RET	NZ			; NEIN, DANN IS ES WAS ANDERES
	LD	A,(FCB+9)		; ERSTES ZEICHEN EXTENSION
	CP	' '			; ANGEGEBEN ?
	RET				; AUSWERTUNG OBEN


PTC_SPC:DS	3			; 3 BYTE FUER DISK SPACE

        END
