File IOPEN.SB (8k SABR macro assembler source file)

Directory of image this file is from
This file as a plain text file

/COPYRIGHT 1970, DIGITAL EQUIPMENT CORP., MAYNARD MASS.
/8K FORTRAN LIBRARY
/IOPEN.V01

/
/	SUBROUTINES TO MANIPULATE PS/8 FILES
/

	ENTRY	IOPEN	/OPEN AN INPUT FILE
	ENTRY	OOPEN	/OPEN AN OUTPUT FILE
	ENTRY	OCLOS	/CLOSE AN OUTPUT FILE
	ENTRY	CHAIN	/CHAIN TO A PROGRAM

	OPDEF	TADI	1400
	OPDEF	ISZI	2400
	OPDEF	DCAI	3400
	OPDEF	JMPI	5400

	LAP		/LEAVE AUTOMATIC PAGING - WE NEED THE 2 LOCATIONS

IOER,	1117;0522	/"IOER" ERROR MESSAGE
IOPEN,	BLOCK 2
	TAD	ASDVM1
	JMS	SETUP	/PUT 2 WORDS OF FIRST ARGUMENT INTO "ASDEV"
	TADI	INHNDL	/DATA FIELD IS 0 HERE - GET INPUT HANDLER PAGE
	SNA
	JMP	IOERR	/NO /I GIVEN - ERROR
	DCAI	10	/STORE IN "ASPAGE"
	JMS	GFILNM	/MOVE FILE NAME INTO LOCS 00000-00003
	TAD	FLUKUP	/LOAD POINTER TO "FLUKUP" IN RUN-TIME ROUTINES
CALASN,	6202	/CIF 0
	JMS I	FASIGN	/SET DF=CURRENT AND GO LOOKUP FILE
	RETRN	IOPEN	/** FASIGN SKIPS BUT SECOND WORD IS SMALL **
IOERR,	CALL	1,ERROR	/I-O ERROR  - GIVE MESSAGE AND QUIT
	ARG	IOER

OOPEN,	BLOCK 2
	JMS	OOCOMN
	TAD	FENTER
	JMP	CALASN	/SEE "IOPEN" FOR COMMENTS

OOCOMN,	0		/COMMON SUBR BETWEEN "OOPEN" AND "OCLOS"
	TAD	OOPEN
	DCA	IOPEN
	TAD	OOPEN#
	DCA	IOPEN#	/MOVE CALLING ADDRESS TO IOPEN
	TAD	ASDVM1
	JMS	SETUP	/SET UP DEVICE NAME IN FIELD 0
	TADI	OUHNDL
	SNA
	JMP	IOERR	/NO /O GIVEN - ERROR
	DCAI	10	/STORE IN "ASPAGE"
	JMS	GFILNM	/PUT FILE NAME INTO 00000-3
	JMPI	OOCOMN

OCLOS,	BLOCK 2
	JMS	OOCOMN	/SET UP DEVICE AND FILE NAME
	TAD	OCLOS
	DCA	IOPEN
	TAD	OCLOS#
	DCA	IOPEN#	/SET UP IOPEN FOR RETURN
	TAD	CHAIN	/=7177
	DCA	OOCOMN
OCLOOP,	TAD	CHAIN#	/=1632 =^Z ON DEVICE 4 OUTPUT
	CALL	0,GENIO
	ISZ	OOCOMN
	JMP	OCLOOP	/FORCE OUT THE LAST BUFFER
	TAD	FCLOSE
	JMP	CALASN	/DO WORK AND LEAVE

SETUP,	0
	DCA	10
	TAD	IOPEN
	DCA	SETDF
SETDF,	0		/SET CALLING DATA FIELD
	TADI	IOPEN#
	DCA	GETWD#	/SAVE FIELD OF ARGUMENT
	INC	IOPEN#
	TADI	IOPEN#
	DCA	SETDF	/SAVE ADDRESS OF ARGUMENT
	INC	IOPEN#
	JMS	GETWD	/TRANSFER TWO WORDS FROM THE
	JMS	GETWD	/ARGUMENT LIST TO WHERE XR 10 POINTS
	JMPI	SETUP	/RETURN WITH DATA FIELD =0

GETWD,	0
	NOP		/SET ARGUMENT FIELD
	TADI	SETDF
	INC	SETDF
	6201		/CDF 00
	DCAI	10
	JMPI	GETWD	/DO NOT RESTORE DATA FIELD

GFILNM,	0
	CLA CMA
	JMS	SETUP	/MOVE TWO WORDS TO 00000 AND 00001
	JMS	GETWD	/MOVE THE THIRD WORD
	TAD	DA
	DCAI	10	/SUPPLY AN EXTENSION
	JMPI	GFILNM

DA,	0401		/.DA EXTENSION
INHNDL,	74
OUHNDL,	75
FASIGN,	541		/*****************
ASDVM1,	552		/		CAUTION!
FLUKUP,	567		/ALL THESE LOCATIONS ARE VERY VOLATILE!!
FENTER,	741		/WATCH OUT IF YOU REASSEMBLE THE LOADER!
FCLOSE,	757		/*****************

CHAIN,	7177		/USE "CHAIN" TO STORE CONSTANTS
	1632		/SINCE IT IS ONLY CALLED TERMINALLY
	TAD	CHAIN
	DCA	IOPEN
	TAD	CHAIN#
	DCA	IOPEN#
	JMS	GFILNM	/GET FILE NAME INTO 00000-00003
	ISZI	INHNDL	/FORCE INHNDL NONZERO SO IOPEN WONT FAIL
	TAD	SV	/CHANGE ASSUMED EXTENSION
	DCA	DA	/FROM .DA TO .SV
	TAD	(0310
	DCA	IOER	/IF IOPEN FAILS GIVE "CHER" MESSAGE
CALOPN,	CALL	1,IOPEN
	ARG	SYS	/CHAIN WORKS FROM THE SYSTEMS DEVICE ONLY
	6201
	0		/"ARG 0" POINTING TO 00000!
	TAD	(6
	6201		/SET DF TO 0
	DCAI	K2	/MODIFY "LOOKUP" INTO "CHAIN"
	DCAI	ZRONAM	/ALSO KILL LOC WHICH ZEROS FILE NAME PTR
	JMP	CALOPN	/GO BACK - THIS TIME IOPEN WILL CHAIN.

SYS,	2303		/***** 2303+2326 =4631 = "SYS"! WATCH IT!
SV,	2326
K2,	571		/**** SUPER VOLATILE LOCATION ****
ZRONAM,	557		/****     DITTO               ****

	END



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search