*
* CHGDISK: Change the disk between load and execution
*
* Copyright 1983-2005 Dave Dunfield
* All rights reserved.
*
* DIRECTORY STRUCTURE
	ORG	0
DPREFIX	RMB	8
DNAME	RMB	8
DTYPE	RMB	3
DDADR	RMB	2		DISK ADDRESS
DRADR	RMB	2		RUN ADDRESS
DATTR	RMB	1		FILE ATTRIBUTES
* ATTRIBUTE DEFINITIONS
RPERM	EQU	%10000000	READ PERMISSION
WPERM	EQU	%01000000	WRITE PERMISSSION
EPERM	EQU	%00100000	EXECUTE PERMISSION
DPERM	EQU	%00010000	DELETE PERMISSION
* RETURN CODES
RCPRO	EQU	3		PROTECTION VIOLATION
*
	ORG	OSUTIL-512
*
CHGDISK	CMPA	#'?'		HELP REQUEST?
	BNE	MAIN		NO, START IT UP
	SSR	25		MESSAGE
	FCCZ	'Use: CHGDISK [<command string>]'
ABORT	RTS
MAIN	SSR	4		COMMAND SUPPLIED?
	BNE	CMDSUP		YES
	SSR	88		CLEAR DOS DISK BUFFERS
	SSR	25		OUTPUT MESSAGE
	FCCZ	'Insert command disk, and enter command:'
	SSR	1		GET INPUT LINE
	SSR	4		IS IT ENTERED?
	BEQ	ABORT		NO, EXIT
* WE HAVE COMMAND TO EXECUTE
CMDSUP	SSR	12		GET COMMAND NAME
	LDD	#'EX'		FIRST TO OF 'EXE'
	STD	,X		SET TYPE
	STA	2,X		SET LAST 'E'
	SSR	69		LOOKUP IN DIRECTORY
	BNE	ABORT		ERROR
	LDA	DATTR,X		GET FILE ATTRIBUTES
	BITA	#EPERM		ALLOWED TO EXECUTE?
	BNE	EXEOK		OK TO EXECUTE
	SSR	45		ISSUE PROTECTION ERROR
	RTS
* LOAD IN FILE & EXECUTE
EXEOK	LDD	DDADR,X		GET DISK ADDRESS
	LDX	DRADR,X		GET RUN ADDRESS
	STX	>EXEADR		SAVE ADDRESS
	SSR	78		LOAD IN FILE
* WE HAVE FILE IN RAM, PROMPT FOR DISK CHANGE, AND EXECUTE
	SSR	88		CLEAR DOS DISK BUFFERS
	SSR	24		ISSUE MESSAGE
	FCCZ	'Insert disks for command execution, press <return>:'
CHKRET	SSR	34		GET CHAR
	CMPA	#$0D		CR?
	BNE	CHKRET		NO, WAIT FOR IT
	SSR	22		NEW LINE
	JMP	[EXEADR]	EXECUTE COMMAND
* MISC LOCAL VARIABLES
EXEADR	RMB	2		EXECUTION ADDRESS OF COMMAND
