Command-line arguments is part of Short Circuit's Console Program Basics selection.
Scripted main
See also Program name.

For parsing command line arguments intelligently, see Parsing command-line arguments.

Example command line:

myprogram -c "alpha beta" -h "gamma"

putch:	equ	2	; CP/M syscall to print character
puts:	equ	9	; CP/M syscall to print $-terminated string
arglen:	equ	80h	; Length of argument
argmt:	equ	81h	; Argument string
fcb1:	equ	5Ch	; FCBs
fcb2:	equ	6Ch
	org	100h
	;;;	Print all argument(s) as given
	lxi	d,cmdln	; Print 'Command line: '
	mvi	c,puts
	call	5
	lda	arglen	; Retrieve the length of the argument 
	lxi	h,argmt	; Pointer to argument string
	call	plstr	
	;;;	CP/M also assumes that the first two words on the command
	;;;	line are filenames, and prepares two FCBs with the filenames
	;;;	in them. If there are no filenames, they will be blank.
	lxi	d,file1	; Print the first one
	mvi	c,puts
	call	5
	mvi	a,11	; Filenames are 8+3 characters long and padded with
	lxi	h,fcb1+1	; spaces
	call	plstr
	lxi	d,file2	; Print the second one
	mvi	c,puts
	call	5
	mvi	a,11
	lxi	h,fcb2+1
	; ... fall through - on small systems saving bytes is a virtue
	;;;	This subroutine prints a length-A string in HL.
plstr:	ana	a	; If A=0, print nothing.
	rz
	push	psw	; Save A and HL registers on the stack
	push	h	; (CP/M syscalls clobber all registers)
	mov	e,m	; Print character under HL
	mvi	c,putch
	call	5
	pop	h	; Restore A and HL registers
	pop	psw
	inx	h	; Increment string pointer
	dcr	a	; Decrement character counter
	jnz	plstr	; Print next character if not zero
	ret
cmdln:	db	'Command line: $'
file1:	db	13,10,'File 1: $'
file2:	db	13,10,'File 2: $'