File: DPF0.PA of Tape: OS8/OS8-Latest/new-1
(Source file text) 

/DPF0 V40 PAGE 0 & 1 FOR USER
/
/
/
/
/
/
/
/
/COPYRIGHT  (C)  1979   BY DATAPLAN GMBH, LAUDA, BRD
/
/
/
/
/
/
/
/
/
/
/THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
/AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DATAPLAN GMBH.
/DATAPLAN GMBH ASSUMES NO RESPONSIBILITY FOR ANY ERRORS THAT MAY APPEAR
/IN THIS DOCUMENT.
/
/THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
/UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
/(WITH INCLUSION OF DATAPLAN'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
/SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DATAPLAN.
/
/DATAPLAN GMBH ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY
/OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY DATAPLAN.
/
/
/
/
/
/
/
/
/
/
/W.V.D.MARK, DP, ZUERICH, JAN-79
/THIS IS TO BE ASSEMBLED WITH YOUR ROUTINES IN THE
/FIELD OF YOUR CHOICE. (U=	XX). IT OCCUPIES
/PAGE 0 AND 1 OF THAT FIELD, BUT LEAVES A LOT OF
/LOCATIONS FREE FOR YOUR APPLICATION.
/
/	.R PAL8
/	*USER<DPF0,USER
/
/THE RESULTING BINARY SHOULD BE INCORPORATED IN DPF
/AS FOLLOWS:

/	.R ABSLDR
/	*SYS:DPF.SV/I
/	*USER.BN/P$		/P NOT ALLOWED IF 16K MACHINE AND
/	.SAVE SYS:DPFU.SV	/USER CODE LOADING HIGHER THAN 4777

	/DEFINITIONS FOR DPF VERSION 2.01
	/DPF= D A T A P L A N   F O C A L

	L=	00	/LIBRARY FIELD
	P=	10	/INTERPRETER, FPP FIELD
	T=	20	/TEXT AND PDL FIELD
	U=	30	/USER FIELD ####MODIFY FOR YOUR CONVENIENCE#####

	IFZERO U-30 <
	FLDCUR=	CLA CLL CML IAC RAL>
	IFZERO U-40 <
	FLDCUR=	CLA IAC RTL>
	IFZERO U-50 <
	FLDCUR=	CLA CLL CMA RTL>
	IFZERO U-60 <
	FLDCUR=	CLA CLL CMA RAL>
	IFZERO U-70 <
	FLDCUR=	CLA CMA>


	ZPUSHA=	25
	ZPOPA=	21
	ZPUSHJ=	127
	ZPOPJ=	150
	ZPUSHF=	71
	ZPOPF=	112

	XIDLE=	2600
	ERROL=	2735
	SORTB=	1130
	XSQRT=	5600
	FIELD P%10
NOPUNCH

	*XSQRT+100

FNTABL=.
	2533	/ABS
	2650	/SGN
	2632	/OS8
	2636	/ITR
	2630	/RAN
	2572	/ATN
	2624	/EXP
	2625	/LOG
	2654	/SIN	/LIST OF CODED FUNCTION NAMES
	2575	/COS
	2702	/SQT
	1140	/IN
	2672	/OUT
	2604	/(F)IND
ENPUNCH			/** EXAMPLE **
	*.
	2631	/NEW	0324	/T
NOPUNCH
	0325	/U
	0326	/V
	0327	/W
	0330	/X
	0331	/Y
	0332	/Z
	-1	/ENDS TABLE

/	FUNCTIONS T,U,V,W,Y,Z NOT ASSIGNED (FREE FOR USER)
/	FOR CODING NAME, USE OCTAL CHARS WITH 200 BIT SET
/	AND CALCULATE THE FOLLOWING EXPRESSION:
/
/	X=CHAR1
/	IF CHAR2 THEN: X=X*2+CHAR2
/	IF CHAR3 THEN: X=X*2+CHAR3
/	THEN REPLACE A FREE SLOT BY THIS VALUE
	*XSQRT+126

FNTABF=.
	CDF L
NOP/	XABS	/ABS	-ABSOLUTE VALUE
	CDF L
NOP/	XSGN	/SGN	-REAL SIGN FUNCTION
	CDF L
NOP/	XOS8	/OS8	-OS8=1,MULTI8=0 FUNCTION
	CDF P
NOP/	XINT	/ITR	-INTEGER PART
	CDF P
NOP/	FRAN	/RAN	-RANDOM NUMBER
	CDF P
NOP/	ARTN	/ATN	-
	CDF P
NOP/	FEXP	/EXP	-EXPO FUNCTIONS
	CDF P
NOP/	FLOG	/LOG	-
	CDF P
NOP/	FSIN	/SIN	-TRIG FUNCTIONS
	CDF P
NOP/	FCOS	/COS	-
	CDF P
NOP/	XSQRT	/SQT	-SQUARE ROOT
	CDF P
NOP/	FIN	/INP	-CHAR INPUT
	CDF P
NOP/	FOUT	/OUT	-CHAR OUTPUT
	CDF P
NOP/	FIND	/IND	-FIND A CHAR
ENPUNCH			/** EXAMPLE **
	*.
	CDF U	/CDF P
	XNEW	/ERCALL	/T
NOPUNCH
	CDF P
NOP/	ERCALL	/U
	CDF P
NOP/	ERCALL	/V
	CDF P
NOP/	ERCALL	/W
	CDF L
NOP/	XCOM	/(F)X:ARRAY
	CDF P
NOP/	ERCALL	/Y
	CDF P
NOP/	ERCALL	/Z

/	THIS TABLE IS 2 TIMES LONGER THAN 'FNTABL'
/	INSERT THE FIELD AND ADRESS OF YOUR FUNCTION
/	IN THE APPROPRIATE FREE SLOT (CORRESPONDING
/	TO THE ONE SELECTED IN 'FNTABL'). BE SURE TO
/	LOAD A 'DPF0' SECTION IN THE FIELD YOU ARE
/	USING. SEE 'DPF0' FOR MORE INFO.
/	DEFINITION OF ADDRESSES IN DPF AND THEIR USE:
/	=============================================
/	CDF P
/	UPUSHJ		/CONVERT FLAC TO INTEGER IN AC
	  XINTEG=7360
/	MQA

/	CDF P
/	UPUSHJ		/RETURN FIRST LETTER OF COMMAND
	  TERMER=566	/AND GO TO END OF COMMAND
/	MQA

/	CDF P
/	UPUSHJ		/MOVE PAST CHARACTER AND EVALUATE
	  EVALC=1605	/EXPRESSION ENDING IN R-PAR OR CR
/			/AND LEAVE RESULT IN FLAC AND FLARG

/	CDF P
/	UPUSHJ		/NEGATE FLAC
	  MMINSK=3405

/	CDF P
/	UPUSHJ		/MOVE PAST CHARACTER
	  MGETC=2205

/	CDF L
/	UPUSHJ		/EVALUATE NEXT FUNCTION ARGUMENT
	  ARG=2246
/	RETURN 1	/NO MORE ARGUMENTS
/	RETURN 2	/NEXT ARGUMENT EVALUATED

/	CDF P
/	UPUSHF		/PUT ZERO BLOCK ON PDL
	  FLTZER=7167

/	CDF P
/	UPUSHF		/PUT F 1.0 ON PDL
	  FLTONE=2376

/	CDF P
/	UPOPF		/PUT BLOCK FROM PDL IN FLAC
	  FLAC=44
/------------------------------------------------
/	CDF U		/MAKE SURE THIS FIELD
/	CIF P
/	USORTJ		/JUMP VIA LISTS ON CHAR
/	  CLIST-1	/CLIST IS CHARACTER LIST
/	  GLIST-CLIST	/GLIST IS JUMP TO LIST
/			/CLIST AND GLIST IN FIELD U%10
/	UWAIT		/CHECK KEYBOARD FOR
			/^C,^O,^P,^S,^Q
/	UERROR		/GIVE ERROR MESSAGE AND RESET DPF
/	  MESS		/2 LETTER MESSAGE CODED BY TECO MACRO:
/^O^T-1&37*20UY^T-1&17+QY==^D	 [PRINTS MESS]
/PDL INSTRUCTIONS AND EXAMPLES
/===============================

/	PDL= PUSH DOWN LIST = STACK = LAST IN - FIRST OUT LIST
/
	/LOCAL FIELD SATELLITES FOR ALL POPS EXCEPT
	/POPJ MUST BE AS FOLLOWS:
	/XPOPU,	0
	/	MQL
	/	FLDCUR	
	/	CIF T	(WHERE T IS FIELD OF POP SUBS.)
	/	JMS I .+1
	/	ZPOPU
	/!!!!!
	/POPJ IS THE ONLY POPU THAT NEEDS ANOTHER SATELLITE!
	/XPOPJ,	CIF CDF T
	/	JMP I .+1	/JMP!!
	/	ZPOPJ
	/
	/BY THE WAY: THE DATA FIELD IS ALWAYS RESET TO CURRENT
	/THIS CAN BE USEFUL
	/CALLS IN A PROGRAM WILL LOOK LIKE THIS:
/.............................................
/	VAL
/	UPUSHA		/PUT VAL IN PDL
/
/	AC=>PDL
/	AC=>MQ
/.............................................
/	UPOPA		/GET VAL FROM PDL
/
/	AC=>MQ
/	PDL=>AC
/.............................................
/	CDF X
/	UPUSHJ		/RECURSIVE JUMP TO X.ADDR (15 BIT)
/	  ADDR
/LOCA,
/	U.LOCA=>PDL
/	X.ADDR=>PC	/PC=PROGRAM COUNTER
/	AC=>AC
/	AC=>MQ
/.............................................
/	VAL
/	UPOPJ		/RECURSIVE RETURN VIA PDL
/
/	PDL=>U.LOCA
/	U.LOCA+VAL=>PC
/	0=>AC
/	MQ=>MQ
/.............................................
/	CDF X
/	UPUSHF		/STORE BLOCK(4) ON PDL
/	  ADDR
/
/	4 WORDS AT X.ADDR=>PDL
/	AC=>AC
/	AC=>MQ
/.............................................
/	CDF X
/	UPOPF		/RETRIEVE BLOCK(4) FROM PDL
/	  ADDR
/
/	4 WORDS FROM PDL=>X.ADDR
/	AC=>AC
/	AC=>MQ
/.............................................
/	#### USER PAGE ZERO ####
/	FREE FOR USER USE:
/	0-17
/	40-177

ENPUNCH
	FIELD U%10
	*20

UPOPA=	JMS I	.	/FOR FIELD T POPS
	XPOPA
UPUSHA=	JMS I	.
	XPUSHA
UPUSHJ=	JMS I	.
	XPUSHJ
UPOPJ=	JMP I	.
	XPOPJ
UPUSHF=	JMS I	.
	XPUSHF
UPOPF=	JMS I	.
	XPOPF

UWAIT=	JMS I	.
	XWAIT
UERROR=	JMS I	.
	XERROR
USORTJ=	JMS I	.
	SORTB
	NOP	/RESERVED FOR FUTURE EXPANSION
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP

	PAGE
	/PAGE 1 USED FOR LOCAL FIELD SATELLITES ETC

XPUSHA,	0
	MQL
	FLDCUR
	CIF T
	JMS I	.+1
		ZPUSHA

XPOPA,	0
	MQL
	FLDCUR
	CIF T
	JMS I	.+1
		ZPOPA

XPUSHF,	0
	MQL
	FLDCUR
	CIF T
	JMS I	.+1
		ZPUSHF

XPOPF,	0
	MQL
	FLDCUR
	CIF T
	JMS I	.+1
		ZPOPF

XPUSHJ,	0
	MQL
	FLDCUR
	CIF T
	JMS I	.+1
		ZPUSHJ

XPOPJ,	CIF CDF T
	JMP I	.+1
		ZPOPJ
XWAIT,	0
	CDF U		/MAKE SURE
	CIF L
	JMS I	(XIDLE
	JMP I	XWAIT

XERROR,	0
	CDF U
	CLA CMA CLL
	TAD I	XERROR
	CIF CDF L
	JMP I	(ERROL+3

/YOU MAY FILL THIS PAGE WITH ODD STUFF.
	PAGE