-TITLE UNIX DEMONSTRATION PROGRAM
*
*	MAKE SURE ERROR FILE HAS BEEN INSTALLED BY GENERATING
*	EXECUTION ERROR AND CHECKING &ERRTEXT.
*
	&ERRLIMIT = 1
	UNDEFINED()
	&ERRLIMIT = 0
*
	OUTPUT = IDENT(&ERRTEXT)
+	 'error text file (/usr/lib/spiterr) could not be opened'
*
*	HOST STRING SHOULD BE IN /usr/lib/spithost.
*
	OUTPUT = OUTPUT =
	HOST = HOST()
	OUTPUT = IDENT(HOST) 'host file (/usr/lib/spithost) is empty'
	OUTPUT = LEQ(T = 'pdp-11/model:',SUBSTR(HOST(),1,SIZE(T)))
+	'host file (/usr/lib/spithost) does not exist - see install.doc'
	OUTPUT = 'HOST STRING IS ' HOST
*
*	OBTAIN -u ARGUMENT FROM COMMAND LINE.
*
	OUTPUT = OUTPUT =
	OUTPUT = 'THE VALUE OF -u FROM COMMAND LINE = "' HOST(0) '"'
*
*	DEMONSTRATE spitbol'S ABILITY TO EXECUTE COMMAND STRINGS.
*
	OUTPUT = OUTPUT =
	OUTPUT = 'SPITBOL WILL NOW EXECUTE THE COMMAND "who"'
	OUTPUT =
	HOST(1,'who')
*
*	IF THE COMMAND EXECUTED PROPERLY THE HOST CALL WILL RETURN
*	NULL, OTHERWISE A SINGLE LETTER IS RETURNED AND IS COMPUTED
*	FROM THE ERROR CODE.
*
*	ERROR CODES 1 - 26 -> [a-z] AND 27 - 32 -> [A-F]
*
	BOGUS = 'BOGUS_COMMAND'
	OUTPUT = OUTPUT =
	OUTPUT = 'ERROR CODE FROM COMMAND "' BOGUS
+		'" IS "' (E = HOST(1,BOGUS)) '"'
	((&ALPHABET ? 'a' LEN(25)) (&ALPHABET ? 'A' LEN(25)))
+		E @ERROR
	OUTPUT = ' WHICH CORRESPONDS TO UNIX ERROR NUMBER ' ERROR
*
*	OPEN THE ERROR FILE FOR INPUT AND DEMONSTRATE SOME
*	OF THE FILE PROCESSING ARGUMENTS.
*
	INPUT(.RLINE,8,'/usr/lib/spiterr')
	OUTPUT = OUTPUT =
	OUTPUT = RLINE
*
*	READ FROM ERROR FILE ONE CHARACTER AT A TIME.
*
	INPUT(.RONE,8,' -c')
	OUTPUT = RONE
	OUTPUT = RONE
*
*	READ FROM ERROR FILE 5 CHARACTERS AT A TIME.
*
	INPUT(.RFIVE,8,' -r5')
	OUTPUT = RFIVE
*
*	FINISH OFF REST OF THIS LINE.
*
	OUTPUT = RLINE
*
*	DEMONSTRATE LOADING OF SEEK EXTERNAL FUNCTION.
*
	LOAD('SEEK(INTEGER,INTEGER,INTEGER)')
*
*	USE SEEK TO REWIND FILE.
*
	SEEK(8,0,0)
	OUTPUT = RLINE
*
*	USE SEEK TO POSITION FORWARD TO 3RD ERROR TEXT LINE.
*
	SEEK(8,53,1)
	OUTPUT = RLINE
*
*	USE SEEK TO BACK UP TO 2ND ERROR LINE.
*
	SEEK(8,-106,1)
	OUTPUT = RLINE
*
*	SEEK WILL FAIL IN THESE SITUATIONS:
*
*		CHANNEL NUMBER IS NOT I/O ASSOCIATED
*		CHANNEL NUMBER CANNOT BE OPENED
*		seek/lseek SYSTEM CALL FAILS
*
*	NOTE TO VERSION 7 USERS: THE OFFSET IS SIGN EXTENDED
*	TO 32 BITS.
*
*
*	SET UP AND READ FROM AN INPUT PIPE.
*
	OUTPUT = OUTPUT =
	INPUT(.PIPEIN,9,'!*who')
PINLUP	OUTPUT = 'READ FROM PIPE: ' PIPEIN	:S(PINLUP)
*
*	READ FROM STANDARD INPUT USING REGULAR INPUT AND
*	AN ASSOCIATED VARIABLE.
*
	INPUT(.READ_FD_0,12,' -F0')
	OUTPUT = OUTPUT =
	OUTPUT = INPUT
	OUTPUT = READ_FD_0
*
*	READ FROM STANDARD INPUT A CHARCATER AT A TIME.
*
	INPUT(.RAW_FD_0,12,' -C')
	OUTPUT = RAW_FD_0
	OUTPUT = RAW_FD_0
	OUTPUT = RAW_FD_0
	OUTPUT = RAW_FD_0
*
*	RAW MODE WRITES SUPRRESS NEW LINES.
*
	OUTPUT(.RAW_FD_1,11,' -F1 -R1')
	OUTPUT = OUTPUT =
	RAW_FD_1 = 'QUERY: '
	OUTPUT = '<response goes here>'
	OUTPUT = OUTPUT =
*
*	DEMONSTRATE ACCESSABILITY OF FILE DESCRIPTOR 2.
*
	OUTPUT(.ERROR_MSG,15,' -F2')
	ERROR_MSG = 'THIS SHOULD APPEAR ON FILE DESCRIPTOR 2'
*
*	THE EXIT FUNCTION CAN BE USED TO TERMINATE SPITBOL AND
*	EXECUTE ANOTHER COMMAND.
*
	OUTPUT = OUTPUT =
	OUTPUT = 'SPITBOL WILL NOW TERMINATE AND TRANSFER CONTROL TO "date"'
	OUTPUT =
	EXIT('date')
END
FIRST RECORD AFTER END LINE
SECOND RECORD AFTER END LINE
EOF
