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

⟦b0bb0d33a⟧

    Length: 68466 (0x10b72)
    Notes: pts_type(SC)
    Names: »UNPACK.SC«

Derivation

└─⟦025d39960⟧ Bits:30009672 Philips computer tape "600133"
    └─⟦this⟧ »A:DSB/UNPACK.SC« 

PTS(SC)

	IDENT	UNPACK	811016-NJ 
					
					
************************************************************************
* THIS ROUTINE PERFORMS BUFFER MOVEMENT AND DATA CONVERSION, DISPLAY*
* AND PRINTING OF INFORMATION NECESSARY FOR THE DSB PLADS RES. APPL.*
*     CALLING SEQUENCE:*
* *
*   CALL UNPACK,WORK,INBUF,INLEN,OUTBUF,OUTLEN,FLDTAB,DSDY,DSGP*
**
*   PARAMETERS ARE:*
*   WORK, BINARY ARRAY OF 12 ELEMENTS (SCRATCH AREAS)*
*   INBUF, STRING ITEM, INPUT BUFFER*
*   INLEN, BINARY ITEM, INPUT BUFFER LENGTH*
*   OUTBUF, STING ITEM, DATA-COMM OUTPUT BUFFER*
*   OUTLEN, BINARY ITEM, OUTPUT BUFFER LENGTH*
*   FLDTAB, BINARY ARRAY (21 X 4), DESCRIPTION OF INPUT FIELDS*
*   DSDY, DATA SET, FOR PDU 6386*
*   DSGP, DATA SET, FOR GTP 6221, (MODIFIED DK PAPER OUT)*
**
*   INPUT PARAMETERS:*
*   *
*   INBUF, INLEN*
**
*   OUTPUT:*
**
*   OUTBUF, OUTLEN, FLDTAB*
*   DISPLAYED BUFFER, PRINTED FORM*
**
************************************************************************
	EJECT				
					
					
					
************************************************************************
**
*   ENTRIES AND EXTERNAL REFERENCES*
**
************************************************************************
					
	ENTRY	UNPACK			
	ENTRY	FLASH	COMMAND FROM KB TASK 
					
	EXTRN	I:EVA0,T:FDSP	ROUTINES TO PICK UP PARAMETERS		
	EXTRN	I:RT1	ROUTINE TO RETURN TO CREDIT
	EXTRN	MSKTAB,TABEND	TABLES FOR INPUT FIELD DESC. 
	EJECT				
					
					
************************************************************************
**
*   CONSTANTS*
**
************************************************************************
					
					
SO	EQU	/0E0E	SHIFT OUT		
SI	EQU	/0F0F	SHIFT IN		
LF	EQU	/0A0A	LINE FEED		
CR	EQU	/0D0D	CARRIAGE RETURN		
CRLF	EQU	/0D0A			
NULL	EQU	/0000	NULL CHAR.		
POINT	EQU	/AE	POINT CHAR.		
PRTCHR	EQU	/3A3A	PRINT INDICATOR = :		
LFCHR	EQU	/0A	LINE FEED FOR GP
MLF2	EQU	/3C3C	MULTIPLE LINE FEEDS(2) 
MLF6	EQU	/3D3D	    "      "    "   6
SPACE	EQU	/20	SPACE CHARACTER 
SPACES	EQU	/2020	TEST SPACE CHARACTER 
ACK	EQU	/2B	PRINTER ACKNOWLEDGEMENT 
NAK	EQU	/3E	PRINTER NEG.    " 
PNTCHK	EQU	/AEAE	POINT IN PRINTER BUFFER
DKOE1	EQU	/4040 
DKAE1	EQU	/2323 
DKAA1	EQU	/2424 
CHRFD1	EQU	/0909 NONDESTRUCTIVE SPACE FWD 
DKOE2	EQU	/5C 
DKAE2	EQU	/5B 
DKAA2	EQU	/5D 
CHRFD2	EQU	/10	 
	EJECT		
					
*        PTS 6386 CONTROL CHARACTERS*
					
CURLFT	EQU	/08	CURSOR LEFT		
CURHOM	EQU	/0B	CURSOR HOME		
CLEAR	EQU	/0C	CLEAR SCREEN, CURSOR HOME		
CURRGT	EQU	/10	CURSOR RIGHT		
SETCUR	EQU	/11	SET CURSOR POSITION		
XADR0	EQU	/20	LINE POSITION = 0,(OFF-SCREEN)		 
YADR0	EQU	/20	COLUMN POSITION = 0.   "		 
CURON	EQU	/15	CURSOR ON		
CUROFF	EQU	/16	CURSOR OFF		
CRBLNK	EQU	/17	CURSOR BLINK		
CRSTDY	EQU	/18	CURSOR STEADY		
FAST	EQU	/1420	FAST OUTPUT (/20=LENGTH ZERO)		
BASWRT	EQU	/85	ORDER BASIC WRITE	 
STATUS	EQU	/80	TEST STATUS ORDER
DCWRT	EQU	/86	WRITE WITH WAIT 
	EJECT				
					
					
************************************************************************
**
*        WORK AREA DISPLACEMENTS, (POINTERS)*
**
************************************************************************
					
INBUF	EQU	0	START OF WORK AREA. INBUF		
INLEN	EQU	INBUF+2	LENGTH OF INBUF		
OUTBUF	EQU	INLEN+2	OUTPUT BUFFER		
OUTLEN	EQU	OUTBUF+2	LENGTH OF OUTPUT BUFFER		
FLDTAB	EQU	OUTLEN+2	TABLE DESCRIBING INPUT FIELDS		
DYECB	EQU	FLDTAB+2	DISPLAY EVENT CONTROL BLOCK		
GPECB	EQU	DYECB+2	PRINTER EVENT CONTROL BLOCK		
PRINT	EQU	GPECB+2	PRINT FLAG	 
DCECB	EQU	PRINT+2	DATA-COMM EVENT CONTROL BLOCK 
WORK1	EQU	DCECB+2	SCRATCH AREAS	
WORK2	EQU	WORK1+2		 
WORK3	EQU	WORK2+2		 
CURSAV	EQU	WORK3+2	SAVE AREA FOR CURSOR POSITIONS 
* 
*   WORK AREA FOR FLASHING FIELDS 
* 
FLATAB	EQU	CURSAV	NUMBER OF FIELDS
FLACUR	EQU	0	CURSOR POSITION
FLINPO	EQU	2	POSITION IN INPUT BUFFER 
FLALEN	EQU	4	LENGTH OF FIELD	 
BLANKS	EQU	FLATAB+62	BUFFER FOR BLANKING
* 
* 
ECB	EQU	0	START OF AN ECB 
ECBBA	EQU	2	ECB WORD DISPLACEMENTS
ECBRL	EQU	4		 
ECBEL	EQU	6		 
ECBRC	EQU	8		 
ECBCW	EQU	10		
	EJECT				
					
					
************************************************************************
**
*        UNP000*
*        MAIN MODULE *
*        CALLS SUB-MODULES, UNP100, THRU UNP900 TO PERFORM*
*        THE REQUIRED FUNCTIONS*
*        ENTRY : UNPACK = UNP000*
*        EXITS VIA ABL I:RT1*
**
************************************************************************
					
					
UNPACK	EQU	*			
UNP000	EQU	*			
	CF	A14,UNP100	GET PARAMETERS AND FILL WORK		
			AREAS, NO CHECK ON INPUT IS		
			PERFORMED.		
					
					
	CF	A14,UNP200	MOVE AND CONVERT INPUT BUFFER		
			TO DISPLAY BUFFER		
					
					
	CF	A14,UNP300	WRITE BUFFER TO DISPLAY, THIS		
			ROUTINE CONTAINS THE LKM...		
	CF	A14,UNP900	SET FLASHING FIELDS IF ANY 
					 
	LD	A2,WORK1,A4	ANYTHING TO PRINT?
	RF(NZ)	UNP060	YES
					
					
	CF	A14,UNP400	BUILD INPUT FIELD TABLE		
					
	LD*	A2,FLDTAB,A4	WAS IT A MASK?
	RF(Z)	UNP090	NO, IT'S A TEST OR SOMETHING
	LD	A2,WORK2,A4	IS IT AN ERROR MESSAGE? 
	RF(N)	UNP090	YES, SKIP THE REST
					
	CF	A14,UNP500	COPY INPUT FIELDS TO DC OUTPUT		
			BUFFER, FILL IN LENGTH		
	RF	UNP090	RETURN	
					
					
UNP060	EQU	*
	CF	A14,UNP600	FILL IN TICKET / FORM. 
					
					
	CF	A14,UNP700	PRINT TICKET / FORM
				
	CF	A14,UNP800	ACKNOWLEDGE PRINT OPERATION
	RF	UNP090	 
				
FLASH	EQU	*	
	CF	A14,KBFLSH	FLASH COMMAND
					
					
UNP090	EQU	*
	ABL	I:RT1	RETURN TO CREDIT CODING		
         EJECT
************************************************************************
*                                                                      *
*                                                                      *
*                                                                      *
*                                UNP100                                *
*                                                                      *
*                                                                      *
*                                                                      *
************************************************************************
UNP100	EQU	*
	CF	A14,I:EVA0	GET POINTER TO WORK AREA		
	LDR	A4,A9	PUT IT IN A4 AS BASE REGISTER		
					
	CF	A14,I:EVA0	GET INPUT BUFFER ADDRESS		
	ST	A9,INBUF,A4	PUT IT IN WORK AREA		
					
	CF	A14,I:EVA0	GET BUFFER LENGTH ADDRESS		
	LD	A5,0,A9	GET LENGTH	 
	ST	A5,INLEN,A4	PUT IT IN WORK AREA		
					
	CF	A14,I:EVA0	GET OUTPUT BUFFER ADDRESS		
	ST	A9,OUTBUF,A4	PUT IT IN WORK AREA		
					
	CF	A14,I:EVA0	GET OUTPUT BUFFER LENGTH ADDR.		
	ST	A9,OUTLEN,A4	LEGNTH	
					
	CF	A14,I:EVA0	GET INPUT FIELD TABLE ADDRESS		
	ST	A9,FLDTAB,A4	PUT IT IN WORK AREA		
					
	CF	A14,T:FDSP	GET DISPLAY ECB ADDRESS		
	ST	A8,DYECB,A4	PUT IT IN WORK AREA		
					
	CF	A14,T:FDSP	GET PRINTER ECB ADDRESS		
	ST	A8,GPECB,A4	PUT IT THERE ALSO		
	CF	A14,I:EVA0	GET PRINT FLAG	
	ST	A9,PRINT,A4	PUT IT IN WORK AREA	
	CF	A14,T:FDSP	GET DATA-COMM ECB ADDRESS
	ST	A8,DCECB,A4	PUT IT IN WORK AREA 
	CF	A14,I:EVA0	GET ACK/NAK BUFFER 
	ST	A9,2,A8	SAVE IN ECB 
					
	RTN	A14	 
         EJECT
************************************************************************
*                                                                      *
*                                                                      *
*                                                                      *
*                                UNP200                                *
*                                                                      *
*                                                                      *
*                                                                      *
************************************************************************
UNP200	EQU	*
	LDK	A1,1	SET LINE POS. COUNTER TO ONE
	LDKL	A9,/0100	SET THE LINE COUNTER TO FIRST LINE 
	LDKL	A10,CURSAV	GET SAVE AREA FOR CURSORS
	ADR	A10,A4	ADD THE BASE
	LD	A3,INBUF,A4	GET ADDRESSES OF BUFFERS AND		
	LDKL	A5,300	FIXED LENGTH 
	LD	A8,DYECB,A4			
	LD	A6,ECBBA,A8			
	LDR	A1,A6	TEST FOR BUFFER END
	ADKL	A1,300	 
	LDK	A2,SPACE	BLANKING CHARACTER
UNP202	EQU	*	 
	SCR	A2,A6	BLANK A CHAR. IN DY BUFFER 
	ADK	A6,1	MOVE THE POINTER
	CWR	A6,A1	END OF BUFFER ?	 
	RF(G)	UNP204	YES, FINISHED	
	RB	UNP202	NO, CONTINUE	
UNP204	EQU	*	 
	LD	A6,ECBBA,A8	RESTORE BUFFER ADDR.	 
	LDK	A1,1	SET LINE POS. COUNTER TO ONE	 
	ADK	A6,1	OFF-SET FOR CURSOR HOME 
	LDK	A7,0	NUMBER OF CHARACTERS PROCESSED		
	CM	WORK1,A4	CLEAR OLD PRINT FLAG 
UNP205	EQU	*			
	LCR	A2,A3	CHECK CHARS. TO BE REMOVED OR		 
	CCK	A2,NULL	CONVERTED		
	RF(E)	UNP235	NULL.		
	CCK	A2,DKOE1 
	RF(E)	UNP236 
	CCK	A2,DKAE1 
	RF(E)	UNP237 
	CCK	A2,DKAA1 
	RF(E)	UNP238 
	CCK	A2,CHRFD1
	RF(E)	UNP239 
	CCK	A2,SI			
	RF(E)	UNP240	SHIFT IN		
	CCK	A2,SO			
	RF(E)	UNP245	SHIFT OUT		
					
UNP210	EQU	*			
	CCK	A2,CR	CHECK CONTROL CHARACTERS		
	RF(E)	UNP225	CARRIAGE RETURN		
	CCK	A2,LF			
	RF(E)	UNP230	LINE FEED		
	CCK	A2,PRTCHR	SEE IF IT'S A TICKET 
	RF(E)	UNP234	YES, SET INDICATOR
					
UNP215	EQU	*			
	SCR	A2,A6	PUT CHAR. IN DY BUFFER		
	ADK	A6,1	UPDATE POINTERS		
	ADK	A1,1			
	SUK	A1,41	CHECK FOR END OF LINE		
	RF(N)	UNP220	NOT END OF LINE		
	ADKL	A9,/0100	UPDATE LINE COUNT
	CWK	A9,/0600	LINE SEVEN ?
	RF(G)	UNP290	YES, FINISHED 
	LDKL	A2,CRLF	END OF LINE, INSERT LINE FEED		
	SCR	A2,A6	AND CARRIAGE RETURN		
	ADK	A6,1			
	SRL	A2,8			
	SCR	A2,A6			
	ADK	A6,1	UPDATE POINTERS		
	LDK	A1,1			
	RF	UNP250	CHECK END OF PROCESSING		
					
UNP220	EQU	*			
	ADK	A1,41	RESTORE POINTER VALUE		
	RF	UNP250	CHECK END OF PROCESSING		
					
UNP225	EQU	*			
					
UNP230	EQU	*			
	LDK	A1,0	LINE FEED IN BUFFER RESET 
	ADKL	A9,/0100	ADD A LINE 
	LDKL	A2,CRLF	IT'S A NEW LINE 
	SCR	A2,A6	STORE IT IN OUTUT
	SRL	A2,8	
	ADK	A6,1	ADJUST POINTER
	RB	UNP215	FINISH IT
UNP234	EQU	*	 
	ST	A2,WORK1,A4	SOMETHING TO PRINT
	RB	UNP215	 
					
UNP235	EQU	*			
	LDK	A2,POINT	NULL CHAR. REPLACE WITH POINT		
	RB	UNP215			
UNP236	EQU	*
	LDK	A2,DKOE2 
	RB	UNP215
UNP237	EQU	*
	LDK	A2,DKAE2 
	RB	UNP215
UNP238	EQU	*
	LDK	A2,DKAA2 
	RB	UNP215
UNP239	EQU	*
	LDK	A2,CHRFD2
	RB	UNP215
					
UNP240	EQU	*			
	ORR	A9,A1	BUILD CURSOR POSITION
	ST	A9,2,A10	PUT IT IN SAVE AREA
	ADKL	A10,2	MOVE POINTER TO NEXT ENTRY
	ANKL	A9,/FF00	CLEAR LINE POS. FOR COUNTER
UNP245	EQU	*			
*          "SI" OR "SO", SKIP 'EM 
					
UNP250	EQU	*			
	ADK	A3,1	UPDATE INPUT POINTER		
	ADK	A7,1	CHECK IF END OF INPUT		
	SUR	A7,A5	BUFFER		
	RF(NN)	UNP285	END OF PROCESS	
	ADR	A7,A5	NOT ENDED, RESTORE VALUE		
	RB	UNP205	GET NEXT CHARACTER		
UNP285	EQU	*		
	SUK	A3,1	GO BACK ONE POSITION
	LCR	A2,A3	GET LAST CHARACTER IN BUFFER 
	CCK	A2,PRTCHR	SOMETHING TO PRINT?
	RF(NE)	UNP290	NO, RETURN 
	ST	A2,WORK1,A4	SET PRINT FLAG = X'3A'
					
UNP290	EQU	*	 
	LDKL	A9,CURSAV	PUT THE NUMBER OF INPUT FIELDS	 
	ADR	A9,A4	IN THE SAVE AREA	
	SUR	A10,A9	
	ST	A10,CURSAV,A4	SAVE IT,(2X NUMBER OF FIELDS) 
	RTN	A14	RETURN TO CALLER..	
         EJECT
************************************************************************
*                                                                      *
*                                                                      *
*                                                                      *
*                                UNP300                                *
*                                                                      *
*                                                                      *
*                                                                      *
************************************************************************
UNP300	EQU	*
	LD	A8,DYECB,A4	GET ECB ADDRESS IN A8 
	LD	A1,ECBBA,A8	COMPUTE BUFFER LENGTH	
	LDK	A2,CURHOM	AND INSERT CURSOR HOME.
	SCR	A2,A1		
	SUR	A6,A1		
	LDKL	A6,300	FIXED LENGTH TO DISPLAY	271181 
	ST	A6,ECBRL,A8	PUT IN ECB
	LDK	A7,BASWRT	GET ORDER IN A7		
* 
* 
	LKM		EXECUTE I-O	
	DATA	1		 
	RTN	A14	 
         EJECT
************************************************************************
*                                                                      *
*                                                                      *
*                                                                      *
*                                UNP400                                *
*                                                                      *
*                                                                      *
*                                                                      *
************************************************************************
UNP400	EQU	*
	CM	WORK2,A4	CLEAR ERROR MESS. FLAG 
	LC*	A1,INBUF,A4	SEE IF IT'S A MASK 
	ANKL	A1,/00FF		
	CCK	A1,LF		
	RF(E)	UNP410	NOT A MASK
	CCK	A1,SI	 
	RF(E)	UNP410	NOT A MASK	 

	LD	A3,INBUF,A4	GET KEY TO MASKS
	ADK	A3,5	FIRST CHARACTER	
	LCR	A1,A3	GET IT 
	ANKL	A1,/00FF	CLEAN IT 
	ADK	A3,1	GET NEXT ONE
	LCR	A2,A3	 
	ANKL	A2,/00FF	 
	SLL	A1,8	MAKE ROOM 
	ORR	A1,A2	MERGE THEM 
* 
	CF	A14,SRCHTB	GO LOOK FOR THE MASK 
* 
	LDR	A2,A2	CHECK RETURN VALUE 
	RF(Z)	UNP415	NO MASK FOUND 
* 
	CF	A14,MOVMSK	MASK FOUND, MOVE IT TO FLDTAB
	CF	A14,FILCUR	FILL IN CURSOR POSITIONS.	 
	RF	UNP412		
* 
UNP410	EQU	*		
	LDKL	A3,-1	INDICATE NO MASK
	ST	A3,WORK2,A4	
UNP412	EQU	*	 
	RTN	A14	RETURN TO CALLER 
UNP415	EQU	*	 
	CM*	FLDTAB,A4	INDICATE FLDTAB NOT VALID
	RB	UNP412	 
	EJECT			 
************************************************************************
*                                                                      *
*                                                                      *
*                                                                      *
*             SRCHTB, ROUTINE TO FIND MASK IN MASK TABLE...            *
*                                                                      *
*                                                                      *
*                                                                      *
************************************************************************
					
*        CALLING SEQUENCE:  CF A14,SRCHTB*
*                           A1 = KEY, (TWO CHARACTERS)*
*        RETURNS: A2 = 0, NO MASK FOUND*
*                 A2 /= 0, ADDRESS TO MASK TABLE*
					
SRCHTB	EQU	*			
	LDK	A2,0	PRE-SET RETURN VALUE		
	LDKL	A3,MSKTAB	GET START OF TABLE		
UNP460	EQU	*			
	CWR*	A1,A3	MATCH KEY		
	RF(E)	UNP470	FOUND.		
	ADK	A3,4	CHECK NEXT		
	CWK	A3,TABEND	LAST?		
	RB(L)	UNP460	NO, GO FURTHER		 
UNP465	EQU	*			
	RTN	A14	END, RETURN TO CALLER		
UNP470	EQU	*			
	LD	A2,2,A3	FOUND, GET TABLE ADDRESS IN A2		
	RB	UNP465			
         EJECT
************************************************************************
*                                                                      *
*                                                                      *
*                                                                      *
*           MOVMSK: ROUTINE TO MOVE A MASK TABLE TO "FLDTAB".          *
*                                                                      *
*                                                                      *
*                                                                      *
************************************************************************
					
*        CALLING SEQUENCE:  CF A14,MOVMSK*
*                           A2 = ADDRESS OF MASK TABLE*
**
MOVMSK	EQU	*			
	LD	A5,2,A2	GET TABLE END ADDRESS		
	LD	A3,FLDTAB,A4	DESTINATION ADDRESS		
UNP480	EQU	*			
	LDR*	A1,A2	GET A WORD		
	STR	A1,A3			
	ADK	A3,2	UPDATE POINTERS		
	ADK	A2,2			
	CWR	A2,A5	FINISHED		
	RB(L)	UNP480	NO		 
	RTN	A14	FINISHED RETURN TO CALLER		
				
				
FILCUR	EQU	*
	LDK	A5,1	ENTRY COUNTER = 1 
	LD	A3,FLDTAB,A4	GET START OF FIELD TABLE	
	LDKL	A2,CURSAV	GET SAVE AREA	
	ADR	A2,A4			 
	LDR*	A1,A2	GET NUMBER OF INPUT FIELDS	 
	SRL	A1,1	DIVIDE IT X2	 
	STR	A1,A3	PUT IT IN FLD =TAB	
	ADK	A3,8	MOVE POINTER TO FIELD DESCR.	 
	ADK	A2,2	GET CURSOR POS.	
UNP490	EQU	*	 
	CW*	A5,FLDTAB,A4	END OF WORK	
	RF(G)	UNP495	YES, GO BACK	 
	LDR*	A1,A2	GET CUR. POS.	
	STR	A1,A3	PUT IT IN FLDTAB	
	ADK	A2,2	UPDATE POINTERS	
	ADK	A3,8	
	ADK	A5,1	
	RB	UNP490	CONTINUE	
UNP495	EQU	*	 
	RTN	A14		
         EJECT
************************************************************************
*                                                                      *
*                                                                      *
*                                                                      *
*                                UNP500                                *
*                                                                      *
*                                                                      *
*                                                                      *
************************************************************************
UNP500	EQU	*
	LD	A1,INBUF,A4	INITIALIZE THE POINTERS		
	LD	A3,OUTBUF,A4			
	ADK	A3,1	SKIP TERM. ADDR. + KEYS 
	LD	A5,FLDTAB,A4			
	LD	A6,OUTBUF,A4	BASE FOR POSITION COMPUTATION		
	ADK	A5,10	FIRST ENTRY IN TABLE		
	LDK	A7,0	NUMBER OF CHARACTERS CHECKED		
UNP510	EQU	*			
	LCR	A2,A1	SEARCH FOR INPUT FIELDS		
	CCK	A2,SI	START OF INPUT FIELD?		
	RF(E)	UNP530	YES,MOVE IT		
UNP520	EQU	*			
	ADK	A7,1	NO LOOK FURTHER		
	ADK	A1,1			
	CW	A7,INLEN,A4	END?		
	RB(L)	UNP510	NO, CONTINUE		
UNP525	EQU	*			
	SUR	A3,A6	COMPUTE TOTAL LENGTH		
	LD A10,OUTLEN,A4	GET ADDR. OF LENGTH ITEM
	STR	A3,A10	FILL IT 
	SUR	A9,A6	CORRECT THE LAST FIELD 
	SUR	A3,A9	 
	LDR	A9,A3	KEEP IT FOR 'INFLNG'.
				
	CF	A14,INFLNG	INSERT FIELD LENGTHS IN FLDTAB 
	RTN	A14	RETURN TO CALLER		

UNP530	EQU	*			
	LDR	A9,A3	SAVE FOR LAST FIELD. 
	SUR	A3,A6	COMPUTE POSITION		
	STR	A3,A5	PUT IT IN FLDTAB		
	ADK	A5,8	MOVE POINTER TO NEXT ENTRY		
	ADR	A3,A6	RESTORE ADDRESS IN BUFFER		
	ADK	A1,1	MOVE PAST "SI"		
	ADK	A7,1	COUNT EM	 
UNP535	EQU	*			
	CW	A7,INLEN,A4	END OF INPUT		
	RB(G)	UNP525	YES, STOP		
	LCR	A2,A1	GET THE CHARACTER		
	CCK	A2,SO	END OF INPUT FIELD?		
	RF(E)	UNP540	YES		
	CCK	A2,LF	OTHER END CHARS. 
	RF(E)	UNP540	
	CCK	A2,CR	 
	RF(E)	UNP540	
UNP537	EQU	*
	CWK	A2,/00 WAS IT NILL?
	RF(E)	UNP538 
	LD	A11,-4,A5	SET THE MODIFIED BIT
	ORKL	A11,/2000 
	ST	A11,-4,A5 
UNP538	EQU	*
	SCR	A2,A3	NO, PUT IT IN OUTPUT BUFFER		
	ADK	A3,1	UPDATE POINTERS		
	ADK	A1,1			
	ADK	A7,1	NUMBER OF CHARS. MOVED
	RB	UNP535			
UNP540	EQU	*			
	ADK	A1,1	MOVE PAST "SO"		
	ADK	A7,1	COUNT EM	 
	RB	UNP510	GET THE NEXT FIELD		
INFLNG	EQU	*	 
	LD	A5,FLDTAB,A4	GET FLDTAB	
	LDR*	A6,A5	NUMBER OF FIELDS	 
	ADK	A5,10	MOVE TO FIRST ENTRY	 
	LDR	A3,A5	ANOTHER POINTER	 
	ADK	A3,8	TO NEXT ENTRY	
	LDK	A7,1	FIELD COUNTER 
UNP550	EQU	*	 
	LDR*	A1,A3	GET THE POS'S.	 
	LDR*	A2,A5		 
	SUR	A1,A2	COMPUTE THE LENGTH	
	ST	A1,2,A5	PUT IT IN TABLE	
	ADK	A7,1	COUNT IT.	
	CWR	A7,A6	END?	
	RF(G)	UNP560	YES ,RETURN	
	ADK	A5,8	UPDATE POINTERS	
	ADK	A3,8		 
	RB	UNP550	CONTINUE	
UNP560	EQU	*	 
	ST	A9,2,A5	LAST FIELD CORRECTION 
	RTN	A14	GO BACK TO CALLER	 
         EJECT
************************************************************************
*                                                                      *
*                                                                      *
*                                                                      *
*                                UNP600                                *
*                                                                      *
*                                                                      *
*                                                                      *
************************************************************************
UNP600	EQU	*
					
	LDK	A6,0	INITIALIZE SPACE COUNTER
	LD	A8,GPECB,A4	GET PRINTER BUFFER ADDRESS		
	LD	A3,ECBBA,A8			
	LDKL	A2,LF	MOVE TICKET TO FIRST LOGICAL LINE 
	SCR	A2,A3		
	ADK	A3,1		 
					
	LD	A1,INBUF,A4	GET INPUT BUFFER		
	LD	A5,INLEN,A4	AND LENGTH		
	ADR	A5,A1	END OF BUFFER		
	LDK	A7,1	INITIALIZE LINE COUNTER 
					
UNP610	EQU	*			
	CWR	A1,A5	END OF BUFFER?		
	RF(G)	UNP620	YES, RETURN		
					
	LCR	A2,A1	GET A CHARACTER		
	CF	A14,CHARCN	PROCESS IT		
	LDR	A2,A2	IF ZERO, SKIP IT		
	RF(Z)	UNP615	MUST HAVE BEEN = "SI" OR "SO".		
	CWK	A7,3	DON'T FILL BUFFER UNTIL LINE=3
	RF(L)	UNP615		 
					
	SCR	A2,A3	PUT IT IN PRINTER BUFFER		
	ADK	A3,1	UPDATE POINTERS		
UNP615	EQU	*			
	ADK	A1,1			
	RB	UNP610	GET THE NEXT ONE		
UNP620	EQU	*			
	LD	A5,ECBBA,A8	CALCULATE LENGTH
	SUR	A3,A5	 
	ST	A3,ECBRL,A8	PUT IT IN ECB 
				
	RTN	A14	FINISHED, RETURN TO CALLER		
	EJECT				
CHARCN	EQU	*			
	CCK	A2,SPACES	THE CHECK FOR TEST PICTURE 
	RF(NE)	UNP640	TEST PIC. IF MORE THAT 40	 
	ADK	A6,1	COUNT THE SPACE 
	RF	UNP670	PUT IN BUFFER IF LINE > 3
UNP640	EQU	*	 
	CWK	A6,40	MORE THAN 40 SPACES? 
	RF(NG)	UNP642	NO, PROCESS	 
	LDKL	A9,2	THIS IS FIRST NON-SPACE AFTER
	CF	A14,MLF600	MORE THAN 40 SPACES
	SUK	A1,1	LET HIM PROCESS THIS AGAIN. 
	LDK	A6,0	CLEAR THE COUNTER 
	RF	UNP670	GO ON. 
UNP642	EQU	*	 
	LDK	A6,0	RESET SPACE COUNTER 
	CCK	A2,NULL	IF "NULL" REPLACE WITH SPACE		
	RF(NE)	UNP650			
	LDK	A2,SPACE			
	RF	UNP670			
UNP650	EQU	*			
	CCK	A2,SO	IF "SO", SKIP IT		
	RF(NE)	UNP652			
	LDK	A2,0			
	RF	UNP670			
UNP652	EQU	*	 
	CCK	A2,SI	IF "SI", SKIP IT		
	RF(NE)	UNP654			
	LDK	A2,0			
	RF	UNP670			
UNP654	EQU	*			
	CCK	A2,LF	IF LINE FEED, INSERT LF-CR		
	RF(NE)	UNP656			
UNP655	EQU	*			
	LDKL	A9,1	"1" LINE FEED, CARRIAGE RETURN		
	CF	A14,MLF600	INSERT IN OUTPUT BUFFER		
	RF	UNP670			
UNP656	EQU	*			
	CCK	A2,CR	IF CARRIAGE RETURN, THEN "LF"		
	RB(E)	UNP655			
					
	CCK	A2,MLF2	IF MULTIPLE LINE FEEDS		
	RF(NE)	UNP658			
	LDKL	A9,2			
	CF	A14,MLF600	PUT 'EM IN OUTPUT BUFFER		
	RF	UNP670			
UNP658	EQU	*			
	CCK	A2,MLF6	IF MULTIPLE LINE FEEDS		
	RF(NE)	UNP660			
	LDKL	A9,6			
	CF	A14,MLF600	PUT 'EM IN OUTPUT BUFFER		
	RF	UNP670			
UNP660	EQU	*			
	CCK	A2,PRTCHR	IF ":", INSERT LINE FEEDS		
	RF(NE)	UNP670			
	LDKL	A9,21			 
	SUR	A9,A7	CALCULATE 'TOP-OF-FORM'
	CF	A14,MLF600			
UNP670	EQU	*			
	RTN	A14			
MLF600	EQU	*			
	LDKL	A2,CRLF			
UNP680	EQU	*			
	SCR	A2,A3			
	ADK	A3,1	UPDATE POINT		
	ADK	A7,1	INCREASE LINE COUNTER 
	SUKL	A9,1	SEE IF FINISHED		
	RF(Z)	UNP682	YES		
	RB	UNP680	NO, INSERT ANOTHER LF		
					
UNP682	EQU	*			
	SRL	A2,8	FINISHED, GET CARRIAGE RETURN		
	RTN	A14	LET MAIN ROUTINE INSERT IT		
         EJECT
************************************************************************
*                                                                      *
*                                                                      *
*                                                                      *
*                                UNP700                                *
*                                                                      *
*                                                                      *
*                                                                      *
************************************************************************
UNP700	EQU	*
*        TEST STATUS OF PRINTER*
					
	LDK	A7,STATUS	ORDER TEST STATUS		
	LD	A8,GPECB,A4	ECB ADDRESS TO A8		
	LKM		I/O		
	DATA	1			
					
	LD	A1,ECBRC,A8	GET RETURN CODE		
	RF(Z)	UNP710	NORMALLY ENDED		
UNP705	EQU	*			
	ST	A1,PRINT,A4	RETURN NOT OK, SAVE IT		
	RTN	A14	RETURN TO CALLER		
UNP710	EQU	*			
	LDK	A7,/05	BASIC WRITE, NO-WAIT
UNP720	EQU	*			
	LKM				
	DATA	1			
					
	LD	A1,WORK3,A4	SEE IF FLASHING REQUIRED
	RF(Z)	UNP730	NO WIAT FOR PRINTER 
UNP725	EQU	*		
	CF	A14,PFLASH	FLASH THE FIELDS 
	LD*	A1,GPECB,A4	PRINTER FINISHED ? 
	RB(NN)	UNP725	NO, KEEP FLASHING
UNP730	EQU	*	 
	LD	A8,GPECB,A4	SET UP WAIT	
	LKM		
	DATA	2		 
	LD	A1,ECBRC,A8	GET THE RETURN CODE		
	RB	UNP705	RETURN	
         EJECT
************************************************************************
*                                                                      *
*                                                                      *
*                                                                      *
*                                UNP800                                *
*                                                                      *
*                                                                      *
*                                                                      *
************************************************************************
					
UNP800	EQU	*			
	LD	A1,PRINT,A4	CHECK RETURN CODE FROM		
			PRINT ROUTINE		
	RF(NZ)	UNP810	SEND NAK		
	LDK	A2,ACK	OK, SEND ACK		
	RF	UNP815			
UNP810	EQU	*			
	LDK	A2,NAK			
UNP815	EQU	*	 
	LD	A8,DCECB,A4	GET THE DC ECB		
	LD	A3,ECBBA,A8	GET THE BUFFER		
	ADK	A3,1	SKIP TERM. ADD ANK KEY INFO		
	SCR	A2,A3	INSERT ACKNOWLEDGEMENT		
	LDK	A7,100	WAIT 10 SECONDS 
	ST	A7,ECBCW,A8	SAVEIN ECB
	LDK	A7,/B9	 SETIME 
	LKM
	DATA	1 
					
	LDK	A7,2	LENGTH OF ACK-NAK	
	ST	A7,ECBRL,A8	
	LDK	A7,DCWRT	FILL IN ORDER, WRITE		
					
	LKM		I/O		
	DATA	1			
					
	RTN	A14	RETURN TO CALLER		
					
	EJECT			 
					
************************************************************************
**
*         THIS MODULE SCANS THE INPUT BUFFER TO SEE IF FLASHING*
*         FIELDS ARE PRESENT.  IF SO, A TABLE "FLATAB" IS BUILT.*
*         FLATAB IS PLACED IN THE WORK AREA "CURSAV".*
*         WORK3 = 1 IF FLASHING FIELDS ARE PRESENT.*
**
************************************************************************
					
					
UNP900	EQU	*			
	CM	WORK3,A4	RESET FLASH FLAG		
	LD	A3,INBUF,A4	SEE IF FIRST CHAR = SI		
	LCR	A1,A3			
	ANK	A1,/FF	CLEAN THE LEFT HALF 
	CCK	A1,SI			
	RF(NE)	UNP915	IF NOT SI, RETURN		
					
	LDKL	A9,FLATAB	COULD BE FLASHING FIELDS		
	ADR	A9,A4	INITIALIZE TABLE		
	LDR	A5,A9	FIELD POINTER		
	ADK	A5,2	SKIP NUMBER OF FIELDS		
	CM	FLATAB,A4	RESET NUMBER OF FIELDS		
	LDKL	A7,/0101	RESET CURSOR POSITION		
	LD	A6,INLEN,A4			
	ADR	A6,A3	END OF INPUT BUFFER		
UNP905	EQU	*			
	ADK	A3,1	MOVE TO NEXT CHARACTER		
	LCR	A1,A3			
	ANK	A1,/FF	CLEAN THE LEFT HALF	
					
	CF	A14,FLACHK	CHECK FOR FLASHING FIELDS		
					
	CWR	A3,A6	END ?		
	RF(G)	UNP910			
	RB	UNP905	NO CONTINUE		
UNP910	EQU	*			
	LD	A1,FLATAB,A4	SEE IF FLASHING FIELDS EXIST		
	RF(Z)	UNP915			
	IM	WORK3,A4	YES FLAG IT		
UNP915	EQU	*			
	RTN	A14	FINISHED		
	EJECT				
FLACHK	EQU	*			
	CCK	A1,LF	IF LINE FEED UPDATE CURSOR		
	RF(E)	FLA000			
	CCK	A1,CR	IF CARRIAGE RETURN DITTO		
	RF(E)	FLA000			
	CCK	A1,SI	IF SI THEN START OF FIELD		
	RF(E)	FLA005			
	CCK	A1,SO	IF SO,SKIP IT 		
	RF(E)	FLARTN			
					
	ADK	A7,1	UPDATE CURSOR POSITION		
	LDR	A2,A7			
	ANK	A2,/FF			
	CWK	A2,/0028	END OF LINE ?		
	RF(NG)	FLARTN	NO CONTINUE		
FLA000	EQU	*			
	ADKL	A7,/0100	CURSOR TO NEXT LINE		
	ANKL	A7,/FF00			
	ADKL	A7,/0001	POSITION 1		
	RF	FLARTN			
FLA005	EQU	*			
	IM	FLATAB,A4	COUNT THE FIELD		
	LDR	A2,A3	SAVE POSITION TO CALCULATE 		
	ADK	A2,1	MOVE PAST SI		
FLA010	EQU	*			
	ADK	A3,1	MOVE PAST SI		
	ST	A3,FLINPO,A5	POINTS TO START OF FIELD		
	ST	A7,FLACUR,A5	CURSOR POSITION		
FLA015	EQU	*			
	CWR	A3,A6	END OF INPUT ? 
	RF(G)	FLA025	
	LCR	A1,A3	LOOK FOR END OF FIELD		
	CCK	A1,SO	END OF FIELD = SI, SO, CR, LF		
	RF(E)	FLA020			
	CCK	A1,SI			
	RF(E)	FLA020			
	CCK	A1,LF			
	RF(E)	FLA020			
	CCK	A1,CR			
	RF(E)	FLA020			
	CCK	A1,NULL	IF NULL INSERT X'AE'	
	RF(E)	FLA030	
	CCK	A1,DKOE1	THE DANISH CONVERSIONS
	RF(E)	FLA035	
	CCK	A1,DKAE1	
	RF(E)	FLA040	
	CCK	A1,DKAA1	
	RF(E)	FLA045	
FLA017	EQU	*		
	ADK	A7,1	UPDATE CURSOR	
	ADK	A3,1	UPDATE POINTER		
	RB	FLA015			
					
FLA020	EQU	*			
	SUR	A2,A3	COMPUTE FIELD LENGTH		
	C1R	A2,A2	MAKE IT POSITIVE		
	ADK	A2,1	TWO'S COMPLEMENT		
	ST	A2,FLALEN,A5	PUT LENGTH IN TABLE		
	ADK	A5,6	POINTS TO NEXT FIELD		
	RF	FLARTN			
FLA025	EQU	*			
	SUK	A3,1	CORRECT FOR OVER-SHOOT		
	RB	FLA020			
FLA030	EQU	*		
	LDK	A1,POINT	INSERT A .	 
	SCR	A1,A3	 
	RB	FLA017	 
FLA035	EQU	*	 
	LDK	A1,DKOE2	THE END OF DANISH CONVERSIONS 
	SCR	A1,A3		
	RB	FLA017	 
FLA040	EQU	*	 
	LDK	A1,DKAE2	
	SCR	A1,A3	 
	RB	FLA017	 
FLA045	EQU	*	 
	LDK	A1,DKAA2		 
	SCR	A1,A3		
	RB	FLA017	 
					
FLARTN	EQU	*			
	RTN	A14			
	EJECT		
					
					
************************************************************************
**
*         THIS MODULE WILL FLASH THE FIELDS ON A PDU*
*         AS DESCRIBED BY THE TABLE FLATAB, WHICH GIVES*
*         THE CURSOR POSITIONS, LENGTHS AND A POINTER TO*
*         THE ORIGINAL CONTENTS...*
**
************************************************************************
					
					
KBFLSH	EQU	*			
	CF	A14,I:EVA0	CREDIT ENTRY, GET WORK AREA		
	LDR	A4,A9			
	LD	A1,WORK3,A4	ANY FLASHING FIELDS?
	RF(Z)	FLAEND	NO, EXIT AGAIN
					
PFLASH	EQU	*			
			ASSEMBLER ENTRY		
	LDKL	A9,FLATAB	GET THE TABLE 
	ADR	A9,A4			
	LDR	A5,A9	ENTRY POINTER		
	ADK	A5,2	SKIP NUMBER OF FIELDS		
	LDK	A6,1	INITIALIZE FIELD COUNTER		
	LD	A8,DYECB,A4	GET DISPLAY ECB		
					
	CF	A14,BLANK	FIRST BLANK THE FIELDS		
					
	LDKL	A8,3	WAIT 500 MILLI-SECONDS	
	LKM		
	DATA	6		 
				
	LD	A8,DYECB,A4	RETSORE A8	 
	LDR	A5,A9	RESET POINTER		
	ADK	A5,2			
	LDK	A6,1	AND COUNTER		
					
	CF	A14,REWRIT	RE-WRITE THE FIELDS		
					
	LDKL	A8,3	WAIT 500 MILLI-SECONDS	
	LKM		
	DATA	6	
FLAEND	EQU	*
	RTN	A14	RETURN TO CALLER		
	EJECT				
BLANK	EQU	*			
	LDKL	A1,BLANKS	SET UP BUFFER		
	ADR	A1,A4
	LD	A3,ECBBA,A8 
	ST	A1,ECBBA,A8			
BLK000	EQU	*			
	CF	A14,BLKFLD	BLANK ONE FIELD		
	ADK	A5,6	MOVE TO NEXT FIELD		
	ADK	A6,1	COUNT IT		
	LD	A1,FLATAB,A4	CHECK IF FINISHED		
	CWR	A6,A1			
	RB(NG)	BLK000	NO,CONTINUE		
	ST	A3,ECBBA,A8 
	RTN	A14	FINISHED		
					
	EJECT				
BLKFLD	EQU	*			
	LD	A2,ECBBA,A8	GET BUFFER ADDRESS		
	LDK	A1,SETCUR	SET CURSOR POSITION		
	SCR	A1,A2	PUT IT IN BUFFER		
	ADK	A2,1			
	LD	A1,FLACUR,A5			
	ADKL	A1,/1F1F	MAKE CURS. POS DISPLAY		
	SCR	A1,A2	PUT IN LINE NUMBER		
	ADK	A2,1			
	SRL	A1,8			
	SCR	A1,A2	PUT IN COLUMN NUMBER		
	ADK	A2,1			
					
					
	LDKL	A1,FAST			
	LD	A10,FLALEN,A5	GET LENGTH OF FIELD		
	ADR	A1,A10			
	ECR	A1,A1	PUT IT IN RIGHT ORDER		
	SCR	A1,A2	IN BUFFER		
	ADK	A2,1			
	SRL	A1,8			
	SCR	A1,A2			
	ADK	A2,1			
	LDK	A1,SPACE	THE BLANKS		
	SCR	A1,A2			
					
	LDK	A1,6	SET UP REQUESTED LENGTH 
	ST	A1,ECBRL,A8			
					
	CF	14,LINKUM	WRITE IT...		
					
	RTN	A14			
	EJECT				
REWRIT	EQU	*			
	LD	A10,ECBBA,A8	SAVE IT	 
REW000	EQU	*
	LD	A2,FLINPO,A5	GET ORIGINAL DATA		
	SUK	A2,3	MAKE ROOM FOR CURSOR POSITION		
	ST	A2,ECBBA,A8			
	LDK	A1,SETCUR			
	SCR	A1,A2	PUT IT IN THERE		
	ADK	A2,1			
	LD	A1,FLACUR,A5			
	ADKL	A1,/1F1F			
	SCR	A1,A2			
	ADK	A2,1			
	SRL	A1,8			
	SCR	A1,A2			
					
	LD	A1,FLALEN,A5	GET THE FIELD LENGTH		
	ADK	A1,3			
	ST	A1,ECBRL,A8			
					
	CF	A14,LINKUM	WRITE IT...		
					
	ADK	A5,6	UPDATE AND WRITE REST		
	ADK	A6,1			
	LD	A2,FLATAB,A4	CHECK END		
	CWR	A6,A2			
	RF(G)	REW100	YES, RETURN		
	RB	REW000	NO, CONTINUE		
REW100	EQU	*			
	ST	A10,ECBBA,A8	RESTORE BUFFER ADDR.	
	RTN	A14			
	EJECT			 
					
					
					
LINKUM	EQU	*			
	LDK	A7,/85	BASIC WRITE WITH WAIT		
	LKM				
	DATA	1			
	RTN	A14			
					
					
	END				

Full view