DataMuseum.dk

Presents historical artifacts from the history of:

Philips Data Systems

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Philips Data Systems

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦f2f32db77⟧

    Length: 10968 (0x2ad8)
    Notes: pts_type(SC)
    Names: »DEGENE.SC«

Derivation

└─⟦5c22ed822⟧ Bits:30009675 Philips computer tape "600209"
    └─⟦this⟧ »DEN10/DEGENE.SC« 
└─⟦79fbed147⟧ Bits:30009697 Philips computer tape "600414"
    └─⟦this⟧ »S:DE/DEGENE.SC« 
└─⟦bf903a231⟧ Bits:30009665 Philips computer tape "600109"
    └─⟦this⟧ »DEN10/DEGENE.SC« 

PTS(SC)

	IDENT	DEGENE	REL 10.0 80-04-11 
			UPD 80-11-06/DALI
			UPD 80-10-28/DALI
			UPD 80-08-22/DALI
			UPD 80-04-10/DALI
* 
************************************************************************
* 
*      SUBMODULE TO THE DATA-ENTRY PACKAGE FOR PTS6800
* 
*      AFTER ENTERING AN ELEMENT IN THE PICTURE THIS MODULE 
*      CHECKS IF THERE IS A "FGEN-STRING" ATTACHED TO THAT
*      ELEMENT AND IF SO EXECUTES THE GENERATION. 
* 
*      GENERATION CAN BE DONE TO: 
*          - AN ELEMENT IN THE PICTURE
*          - AN USER-VARIABLE 
* 
************************************************************************
* 
	DDUM	DEDDIV
	PDIV 
* 
* 
*****  ENTRIES  ***** 
* 
	ENTRY	DEGEN
* 
* 
*****  EXTERNALS  ***** 
* 
	EXT	GETGEN 
	EXT	MSKOUT 
	EXT	TYPET
 EXT EMPTYT 
 EXT DENVAL 
 EXT GETFWD 
 EXT ADJUST 
	EXT	CMPIND	COMPARE INDEX 
 EXT DEFIND FIELD  ADRESS ROUTINE 
* 
 INCLUDE DELITT 
	EJECT
* 
* 
*****  INTERNAL WORK-FORMATS  ***** 
* 
WFORM	FTABLE	WF1,WF2,WF3,WF4
* 
WF1	FRMT
	FCOPY	USEV(BIN10)
	FMEND
* 
WF2	FRMT
	FCTL	X'C0',X.PSEU1,X.PSEU2,X.WB10,BIN10
	FMEND
* 
WF3	FRMT
	FMEL	'+TTTTTTTTTTTTTTTTTTTT9',BCDI21(W1) 
	FMEND
* 
WF4	FRMT
	FCOPY	SYSV(BIN10)
	FMEND
	EJECT
* 
************************************************************************
* 
*      MAIN-ROUTINE FOR GENERATION
* 
************************************************************************
* 
DEGEN	PROC
A000
	MOVE	BCD2A,='0'	CLEAR ERROR INDICATOR
	CLEAR	BOOL1	CLEAR CURRENT-INDICATOR
	CLEAR	BOOL4	CLEAR DUPL-INDICATOR 
	GETABX	DEBINW3	GET CURRENT-FIELD NR
 CLEAR ME COND GEN FLAG 
	B	EXGEN	"PERF" EXGEN 
A250
	CBE	BIN1,W0,A900	NO DUPL FOUND ? 
	SET	BOOL1	INDICATE CHANGED CURRENT 
 CALL GETFWD,DEBINW4,0,BIN1,BIN4 MAKE DUPL
 CALL ADJUST,DEBINW4 ITEM CURRENT 
	BERR	A900	OUT OF FORMAT ?
	SET	BOOL4	INDICATE DUPL
	CALL	GETGEN,BPOOL(W1),BIN11,BIN12,BIN13
	BNOK	A900
	CALL	GETFWD,DEBINW4,0,DEBINW3,BIN4 MAKE ORIGINATE
	CALL	ADJUST,DEBINW4 FIELD CURRENT AGAIN
	CLEAR	BOOL1
 B  EXGEN 
 EJECT
* 
* 
*****  FORMAT-ERROR DETECTED  ***** 
* 
*****  RETURN TO CALLING MODULE  *****
* 
A900
	TBF	BOOL1,A910	"CURRENT-FIELD" CURRENT ? 
 CALL GETFWD,DEBINW4,0,DEBINW3,BIN4 MAKE CURRENT
 CALL ADJUST,DEBINW4 FIELD CURRENT
A910
 ADD BCD2A,BCD2A
 CLEAR ME COND GEN FLAG 
	RET
	EJECT
* 
************************************************************************
* 
*      SUBROUTINE FOR EXAMINATION AND EXECUTION OF THE GEN-STRING 
* 
************************************************************************
* 
EXGEN 
B000
	SUB	BIN12,W1	ADJUST DISPL. 
	ADD	BIN13,BIN12	DISPL FOR LAST BYTE IN BIN13 
* 
	MOVE	BIN1,W0	CLEAR DUPL-FIELD-NR 
	EJECT
* 
* 
*****  GET RESULT-FIELD  *****
* 
B050
	ADD	BIN12,W1	INCREASE DISPL. 
	CBG	BIN12,BIN13,A250	END 0F STRING ? 
* 
B055
	MOVE	BIN7,W0	CLEAR RESULT-FIELD-NR...
	MOVE	BIN6,W0	...AND RESET TYPE-INDEX 
 MOVE STR6B,=C'DUFM'
 MATCH STR6B,BIN6,W4,BPOOL(BIN11),BIN12,W1
 IB BIN6,B070,B070,B065 
 B B070 
 EJECT
* 
* HANDLE CONDITIONAL GENERATION 
* 
B065
 MOVE DEBINW1,W0 SET INPUTLENGTH = 0
 SUB BIN13,BIN12 PUT DISP INTO BIN13
 PERF DENVAL,W2 
 GETABX DEBINW3 MAKE ORIGINATE FIELD
			CURRENT AGAIN
 CLEAR DOOLB
 BNZ A250 
 SET ME COND GEN FLAG 
 XCOPY BIN12,W1,W1,BIN3,W1
 MOVE BIN3,W0 
 XCOPY BIN3,W1,W1,BPOOL(BIN11),BIN12
 MOVE BIN13,=X'3F'
 CALL MSKOUT,BIN13,BIN3 
 ADD BIN13,BIN12
 B B050 
B070
	BNOK	A250	FORMAT ERROR ? 
* 
* 
	ADD	BIN12,W1	INCREASE DISPL. 
 PERF DEFIND,BIN7,BIN4 GET FIELD-NR 
 IB BIN6,B180,B180 JUMP IF USER OR FIELD
 B B140 
B075
	CLEAR	BOOL2	INDICATE NO ARITHMETIC DONE
	MOVE	BCDI21(W1),='0'	CLEAR SUM 
* 
	ADD	BIN12,W1	INCREASE DISPL. 
	MOVE	BIN4,W0	          NEXT BYTE...
 MOVE STR1A,=C'=' 
 MATCH STR1A,BIN4,W1,BPOOL(BIN11),BIN12,W1
	BOK	B100	          ..."="-SIGN ? 
* 
	SUB	BIN12,W1	ADJUST DISPL. 
	EJECT
* 
* 
*****  EXAMINE  ***** 
* 
B100
	CLEAR	BOOL6	INDICATE NO ABSOLUTE VALUE 
	MOVE	BIN3,W0	RESET SIGN-INDEX (+-SIGN) 
* 
B110
	MOVE	BIN10,W0	CLEAR ACTUAL-FIELD-NR... 
	MOVE	BIN9,W0	...AND RESET TYPE-INDEX 
	ADD	BIN12,W1	INCREASE DISPL. 
 CMP BIN12,BIN13
 BG B600
 MOVE STRG10A,=C'!UF+-*:;AS'
 MATCH STRG10A,BIN9,W10,BPOOL(BIN11),BIN12,W1 
	BNOK	B200	LITTERAL PREFIX ?
	IB	BIN9		C 
		B300,B300,B170,B170,B170,B170,B600,B300,B300
 B B160 
* 
* 
*****  DUPLICATION FOUND  ***** 
* 
B140
	CBL	BIN7,W1,A250	DUPL-NR NOT > ZERO ?
	CBNL	BIN7,DEBINW3,A250	DUPL-NR NOT < "CURRENT" ? 
	MOVE	BIN1,BIN7	UPDATE DUPL-FIELD-NR
	B	A250 
	EJECT
* 
* 
*****  ABSULUTE VALUE  *****
* 
B160
	SET	BOOL6	INDICATE ABSOLUTE VALUE
	SET	BOOL2	INDICATE ARITHMETIC
	B	B110 
* 
* 
*****  ARITHMETIC SIGN  ***** 
* 
B170
	SET	BOOL2	INDICATE ARITHMETIC
	MOVE	BIN3,BIN9	MOVE TO SIGN-INDEX
	SUB	BIN3,W3	ADJUST SIGN-INDEX
	B	B110 
* 
* 
****  OWN FIELD OR USER-VAIABEL  **** 
* 
B180
	CALL	EMPTYT,X.PSEU1,X.PSEU2		C 
		X.WB10,DEBINW3	CHECK CURRENT FIELD
	BZ	B075	NOT EMPTY
*CURRENT FIELD EMPTY
 CLEAR ME COND GEN FLAG 
 BNZ B075 
 CBNE BIN6,W2,B190 NOT FIELD
 CBE BIN7,W0,B075	IF CURRENT
 CBE BIN7,DEBINW3,B075	IF CURRENT 
B190
	MOVE	BIN4,BIN13	CALCULATE LENGTH OF... 
	SUB	BIN4,BIN12	...THE REST OF THE STRING 
 MOVE STR1A,=C';' 
 MATCH BPOOL(BIN11),BIN12,BIN4,STR1A,W0,W1
	BNOK	A250	NOT FOUND ?
	B	B050 
	EJECT
* 
* 
*****  LITTERAL  *****
* 
B200
	MOVE	DEINPUT,HEX00	CLEAR WORKITEM
	MOVE	BIN10,W0	"
	XCOPY	BIN10,W1,W1,BPOOL(BIN11),BIN12	  GET LITTERAL-PREFIX 
	MOVE	BIN9,=X'3F'	REMOVE... 
	CALL	MSKOUT,BIN9,BIN10	...FLAGGS 
	ADD	BIN12,W1	INCREASE DISPL. 
	COPY	DEINPUT,W0,BIN9,BPOOL(BIN11),BIN12	  GET LITTERAL 
	SUB	BIN9,W1	ADJUST INDEX 
	ADD	BIN12,BIN9	INCREASE DISPL. 
	B	B500 
	EJECT
* 
* 
*****  USER- OR FORMAT-VALUE  ***** 
* 
B300
	MOVE	DEINPUT,HEX00	CLEAR WORKITEM
	MOVE	BIN10,W0	"
	ADD	BIN12,W1	INCREASE DISPL. 
 PERF DEFIND,BIN10,BIN4 GET FIELD-NR
* 
 IB BIN9,B310,B320
	CBE	BIN9,W9,B315	JUMP IF SYSTEM VARIABLE 
			HANDLE ACCUMULATORS
 CALL CMPIND,BIN10,ACK(W1)
 BNOK A250 OUT OF RANGE 
 MOVE DEINPUT,ACK(BIN10)
 B B500 
B310			HANDLE USERVARIABELS 
* 
	CALL	CMPIND,BIN10,USEV(W1) 
	BOK	B350 
	B	A250 
* 
B315			HANDLE SYSTEM VARIABLE 
	CALL	CMPIND,BIN10,SYSV(W1) 
	BNOK	A250	IF OUT OF RANGE
	MOVE	BIN9,W4 
	B	B350 
* 
*****  FORMAT-FIELD  *****
* 
B320
	CBNE	BIN10,W0,B330	"CURRENT FIELD" ? 
	MOVE	BIN10,DEBINW3	UPDATE INDEX WITH CURRENT 
* 
B330
	CALL	TYPET,BIN4,X.PSEU1,X.PSEU2,X.WB10,BIN10	F-ITEM IS...
	CBE	BIN4,W3,B350	...A STRG-ITEM ?
* 
* 
*****  USER- OR FORMAT-VALUE TO WORKITEM  ***** 
* 
	CON	X.MOVE,DEINPUT,X.PSEU1,X.PSEU2,X.WB10,BIN10	BCD-ITEM 
	B	B500 
* 
B350
	EDIT	DEINPUT,WFORM(BIN9)	STRG-ITEM 
	EJECT
* 
* 
*****  EXECUTE ARITHMETIC  *****
* 
B500
	MOVE	BCDI21(W2),DEINPUT	VALUE TO BCD-WORKITEM
	TBF	BOOL6,B510	NO ABSOLUTE VALUE ? 
	COPY	BCDI21(W2),W0,W1,D1,W0	 "+-SIGN" TO WORKITEM
B510
	IB	BIN3,B520,B530,B540	
	ADD	BCDI21(W1),BCDI21(W2)	"+"
	B	B100 
B520
	SUB	BCDI21(W1),BCDI21(W2)	"-"
	B	B100 
B530
	MUL	BCDI21(W1),BCDI21(W2)	"*"
	B	B100 
B540
	DIV	BCDI21(W1),BCDI21(W2)	":"
	EJECT
* 
* 
*****  UPDATE RESULT-FIELD  ***** 
* 
B600
	TBF	BOOL2,B610	NO ARITHMETIC DONE ?
	MOVE	DEINPUT,HEX00	CLEAR STRG-WORK 
	MOVE	BIN10,W0	MOVE SUM TO STRG-WORK... 
	EDSUB	DEINPUT,BIN10,WF3	...AND GET LENGTH OF SUM 
B610
	CBE	BIN6,W2,B620	FORMAT-FIELD ?
			USER-VARIABEL
	CALL	CMPIND,BIN7,USEV(W1)
	BNOK	A250	OUT OF RANGE 
	MOVE	USEV(BIN7),DEINPUT	RESULT TO USER-VARIABLE
	B	B050 
* 
B620
	CBNE	BIN7,W0,B640	CURRENT FIELD ?? 
	MOVE	BIN7,DEBINW3	UPDATE WITH CURRENT INDEX
* 
B640
	CALL	GETFWD,BIN4,0,BIN7,BIN9 
	CALL	ADJUST,BIN4 
* 
	GETCTL	1,BIN9	GET MAXLENGTH
	TSTCTL	0 
	BNZ	ALPHA	JUMP IF ALPHA
	MOVE	DEINPUT,HEX00 
	MOVE	BIN10,W0
	EDSUB	DEINPUT,BIN10,WF3
	SUB	BIN10,W1	ADJUST LENGTH OF SUM
	CMP	BIN10,BIN9	RESULT LEN VS MAXL
	BE	NUM 
	BG	B650
	GETCTL	2,BIN9	GET MINL 
	CBNL	BIN10,BIN9,NUM	IF RESULT LEN NOT LESS MINL
	SUB	BIN9,BIN10	CALCULATE MISSING ZEROES
	MOVE	STR64A,=X'30'	LOAD ZEROES 
	INSERT	DEINPUT,W1,BIN9,STR64A,W0	ADD MISSING ZEROES
	B	NUM
B650
	SUB	BIN10,BIN9	CLEAR BYTE IN...
	DLETE	DEINPUT,W1,BIN10 
NUM 
	CBE	BCDI21(W1),:FMTITEM,CONT	DONT DISPLAY IF EQUAL 
NUM100
	ERASE	1,BIN7,BIN7	ERASE OLD CONTENTS 
	UPDFLD	1,DEINPUT 
CONT
	CBE	BIN7,DEBINW3,FINISH	JUMP IF NOT OWN FIELD
	GETFLD	0,DEBINW3,BIN7	GET OWN FIELD CURRENT
FINISH
	B	B050 
ALPHA 
	MOVE	BIN4,W0 
	MATCH	DEINPUT,BIN4,BIN9,:FMTITEM,W0,BIN9 
	BOK	CONT	IF EQUAL CONTENTS 
	B	NUM100 
* 
	PEND 
* 
	END

Full view