<< Previous Message Main Index Next Message >>
<< Previous Message in Thread This Month Next Message in Thread >>
Date   : Sun, 02 Feb 1986 21:55:00 MST
From   : Keith Petersen <W8SDZ@SIMTEL20.ARPA>
Subject: Chaining programs by using a $$$.SUB file

The following program, MAKESUB2.ASM, illustrates how to create a
$$$.SUB file.  It is intended to show how you can do this from within
your own machine-language program.  In this illustration, only one
command, "DIR", is done.  The program code would of course have to be
more complex if more than one command must be written to the submit
file.  As mentioned before, the commands must be written one to each
128-byte record, in reverse order.

--Keith Petersen
Arpa:   W8SDZ@SIMTEL20.ARPA
GEmail: W8SDZ
uucp:   {ihnp4,allegra,cmcl2,dual,decvax,mcnc,mcvax,vax135}!seismo!w8sdz

--cut here--
;
;		MAKESUB.ASM
;	     (revised 4/28/80)
;
;11/04/79 FIRST WRITTEN BY KEITH PETERSEN
;	  AND BOB MATHIAS.
;
;04/28/80 UPDATED FOR MORE EFFICIENT CODING BY
;	  CLAYTON HIBBERT AND KEITH PETERSEN.
;
;THIS PROGRAM DEMONSTRATES HOW ONE CP/M COM
;PROGRAM CAN EXECUTE ANOTHER COM PROGRAM.
;THE SECRET IS IN CREATING A FILE CALLED
;"$$$.SUB" WHICH CONTAINS THE COMMAND TO
;EXECUTE THE NEXT PROGRAM. AFTER DOING THAT,
;A JMP TO WARM BOOT (0000H) WILL CAUSE CP/M
;TO DO A SUBMIT OF THAT COMMAND.
;
;
DRNAME	EQU	4	;ADDR. WHERE DRIVE NAME IS
BDOS	EQU	5
FCB	EQU	5CH
FCBEX	EQU	FCB+12
FCBNR	EQU	FCB+32
BUFF	EQU	80H	;CP/M DEFAULT BUFFER
MAKE	EQU	22
WRITE	EQU	21
CLOSE	EQU	16
;
	ORG	100H
;
	LXI	H,FILNAM ;POINT TO FILENAME
	LXI	D,FCB	;POINT TO FCB
	MVI	B,13	 ;LENGTH OF FILENAME
	CALL	MOVER	;MOVE IT TO FCB
;
;	GO MAKE THE FILE
;
	XRA	A
	STA	FCBNR	;SET RECORD NUMBER TO ZERO
	LXI	D,FCB	;POINT TO NAME
	MVI	C,MAKE	;MAKE FILE
	CALL	BDOS
;
;	GET THE NAME TO PUT IN FILE
;
	LXI	H,COMNAM ;POINT TO COMMAND STRING
	LXI	D,BUFF	;POINT TO FCB
	MVI	B,NAMLEN ;LENGTH OF MOVE
	CALL	MOVER	;MOVE NAME INTO BUFFER
;
;	WRITE FILE NAME TO DISK
;
	LXI	D,FCB	;POINT TO NAME
	MVI	C,WRITE	;WRITE RECORD
	CALL	BDOS
;	
;	NOW CLOSE THE FILE ON DISK
;
	LXI	D,FCB	;POINT TO NAME
	MVI	C,CLOSE	;CLOSE FILE
	CALL	BDOS
;
;	INSURE THE DISK WE WANT TO SUBMIT ON
;
	XRA	A	;GET A ZERO
	STA	DRNAME	;SET CP/M FOR DRIVE A:
	JMP	0	;REBOOT
;
;MOVE (B) BYTES FROM (HL) TO (DE)
;
MOVER:	MOV	A,M	;GET BYTE FROM SOURCE
	STAX	D	;STORE AT DESTINATION
	INX	H	;INCREMENT SOURCE ADR
	INX	D	;INCREMENT DESTINATION ADR
	DCR	B	;DECREMENT MOVE COUNTER
	JNZ	MOVER	;NOT DONE, DO MORE	
	RET
;
FILNAM	DB	1	;DRIVE NAME 1=A
	DB	'$$$     SUB' ;NAME OF SUBMIT FILE
	DB	0	;SET EXTENT NR TO ZERO
;
COMNAM	DB	NAMLEN -2 AND 0FFH ; ACTUAL LENGTH OF COMMAND
	DB	'DIR'	;PUT COMMAND HERE
	DB	0	;END WITH ZERO
NAMLEN	EQU	$-COMNAM ;LENGTH OF NAME
;
	END
<< Previous Message Main Index Next Message >>
<< Previous Message in Thread This Month Next Message in Thread >>