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

⟦efd38407e⟧

    Length: 14186 (0x376a)
    Notes: pts_type(SC)
    Names: »CURSOR.SC«

Derivation

└─⟦35fda6e03⟧ Bits:30009701 Philips computer tape "BARCLAY"
    └─⟦this⟧ »BARCLAY/CURSOR.SC« 
    └─⟦this⟧ »BARCLAY/CURSOR.SC« 
└─⟦e276fd206⟧ Bits:30009696 Philips computer tape "600413"
    └─⟦this⟧ »BARCLAY/CURSOR.SC« 

PTS(SC)

 IDENT CURSOR 80.10.29 NJ 
 DDUM NJDDIV





* THIS MODULE CONTAINS ALL CURSOR CONTROL ROUTINES: 
* BACKWARD TABULATION 
* FORWARD TABULATION
* UP
* DOWN
* HOME
* NEWLINE 
* 
* PLUS VARIOUS OTHER CURSOR ROUTINES: 
* CRNEAR - TO FIND THE NEAREST FIELDSTART 
* POSCUR - TO POSITION THE CURSOR ACCORDING TO ROW AND COLUMN 



* THROUGHOUT THE MODULE THE PHRASES "R/C" AND 
* "RRCC" ARE USED.
* THEY MEAN "ROW/COLUMN", WHICH IS THE ADRESSING
* LOGARITHM FOR THE CURSOR
 PDIV 
 ENTRY CRUP 
 ENTRY CRDOWN 
 ENTRY CRHOME 
 ENTRY CRBTAB 
 ENTRY CRFTAB 
 ENTRY CRNEAR 
 ENTRY CRNL 
 ENTRY POSCUR 
 EXPROC PUSH,PBIN 
 EXPROC PULL,PBIN 



 INCLUDE EQUATE 
  EJECT 
POSCUR PROC ROW,COL 
 PBIN ROW,COL 
* 
* POSITION THE CURSOR ANYWHERE ON THE SCREEN
* AS DEFINED BY ROW AND COLUMN
* 
* CALLING EXAMPLE:
*     PERF POSCUR,TP1,TP2 
* 
 PERF PUSH,CBIN1
 MOVE TCURPOS,CBIN0 
 MOVE TBIN1,ROW 
 XCOPY TCURPOS,CBIN0,CBIN1,TBIN1,CBIN1 FORMAT NOW: RR00 
 ADD TCURPOS,COL	            RRCC 
 DSC1 DSDY,POS,TCURPOS
 PERF PULL,CBIN1
 RET
 PEND 
 EJECT
CRHOME PROC 
* 
* THE PROCEDURE MOVES THE CURSOR TO 
* THE FIRST UNPROTECTED FIELD 
* 
* PREREQUISITS
*     TPOINTER - POINTING SOMEWHERE IN BUFFER 
* 
* FIELD CONTENTS ON NORMAL EXIT 
*     TPOINTER - POINTS TO FIRST ATTRIBUTECHAR
*     TCURPOS - POINTS TO FIRST UNPROTECTED FIELD ON SCREEN 
* 
* FIELD CONTENTS ON ERROR EXIT
*     TPOINTER - NOT CHANGED
*     TCURPOS - NOT CHANGED 
* 
 PERF PUSH,CBIN2
 MOVE TBIN1,TPOINTER SAVE OLD POINTER 
 MOVE TPOINTER,CBIN0 RESET POINTER
 MOVE TBIN2,=W'84'
 MATCH TSCRBUF,TPOINTER,TBIN2,ESC,CBIN0,CBIN1 
			FIND FIRST FIELDDEFINITION 
 BNOK CRH095
 ADD TPOINTER,CBIN1 POINT TO FIRST R/C
 XCOPY TCURPOS,CBIN0,CBIN2,TSCRBUF,TPOINTER 
			MOVE R/C 
 DSC1 DSDY,POS,TCURPOS
 ADD TPOINTER,CBIN2 POINT TO ATTRIBUTE
 B CRH099 
CRH095
 MOVE TPOINTER,TBIN1 RESTORE OLD POINTER
CRH099
 PERF PULL,CBIN2
 RET
 PEND 
 EJECT
CRNL PROC 
* 
* THE PROCEDURE MOVES THE CURSOR TO THE 
* FIRST UNPROTECTED FIELD ON THE FOLLOWING LINE 
* IF THERE ARE NO UNPROTECTED FIELDS ON THE 
* NEXT LINE, THE NEXT LINE WILL BE TAKEN ETC
* 
* PREREQUISITS
*     TPOINTER - POINTS SOMEWHERE IN TSCRBUF
* 
* FIEL CONTENTS ON NORMAL EXIT
*     TPOINTER - POINTS TO AN ATTRIBUTECHAR 
*     TCURPOS - POINTS TO AN UNPROTECTED FIELD
* 
* 
 PERF PUSH,CBIN6
 MOVE TBIN3,TPOINTER SAVE OLD POINTER 
 MOVE TBIN6,CBIN0 
 XCOPY TBIN6,CBIN1,CBIN1,TCURPOS,CBIN0
			COPY CURRENT ROW 
 MOVE TBIN5,CBIN0 
CRN020
 MOVE TBIN4,=W'84'
 MATCH TSCRBUF,TPOINTER,TBIN4,ESC,CBIN0,CBIN1 
 BNOK CRN095 CURRENT FIELD IS LAST
 ADD TPOINTER,CBIN1 
 XCOPY TSTR1,CBIN0,CBIN1,TSCRBUF,TPOINTER 
 CBE TSTR1,ESC,CRN095 WAS IT LAST FIELD 
 XCOPY TBIN5,CBIN1,CBIN1,TSCRBUF,TPOINTER 
			MOVE ROW 
 CBNG TBIN5,TBIN6,CRN020 DID WE FIND A HIGHER ROW?
 XCOPY TCURPOS,CBIN0,CBIN2,TSCRBUF,TPOINTER 
			IF SO, MOVE NEW R/C
 ADD TPOINTER,CBIN2 POINT TO ATTRIBUTE
 DSC1 DSDY,POS,TCURPOS POSITION CURSOR
 B CRN099 
CRN095
 MOVE TPOINTER,TBIN3 RESTORE OLD POINTER
CRN099
 PERF PULL,CBIN6
 RET
 PEND 
 EJECT
CRDOWN PROC 
* 
* THE PROCEDURE MOVES THE CURSOR ONE LINE DOWN, 
* PREFERABLY IN THE SAME POSITION. IF NO UNPROTECTED
* FIELDS ARE FOUND IN THIS LINE, THE NEXT LINE WILL BE
* TRIED, ETC..
* IF THE CURRENT LINE IS THE LAST ONE, NOTHING WILL HAPPEN
* 
* R/C(L) IS THE STARTINGPOINT FOR LEFT FIELD
* R/C(R) IS THE STARTINGPOINT FOR THE RIGHT FIELD 
* R/C(T) IS THE TARGET, THE IDEAL POSITION
* 
* PREREQUISITS
*     TPOINTER - POINTING SOMEWHERE IN TSCRBUF
* 
* FIELD CONTENTS ON EXIT
*     TCURPOS - AS USUAL
* 
* FIELD CONTENTS ON ERROR EXIT
*     TCURPOS - NOT CHANGED 
*     TPOINTER - NOT CHANGED
* 
* 
 PERF PUSH,CBIN6
  MOVE TBIN3,TPOINTER SAVE OLD POINTER
 MOVE TBIN2,TCURPOS SAVE OLD CURSORPOSITION 
 ADD TBIN2,=X'0100' IDEAL POSITION (= +1 LINE)
CRD020
 MOVE TBIN1,TBIN2 
 MOVE TBIN4,=W'84'
 MATCH TSCRBUF,TPOINTER,TBIN4,ESC,CBIN0,CBIN1 
 BNOK CRD095 NOTHING BELOW, NO MOVE 
 ADD TPOINTER,CBIN1 
 XCOPY TSTR1,CBIN0,CBIN1,TSCRBUF,TPOINTER 
 CBE TSTR1,ESC,CRD095 WAS IT LAST FIELD 
 XCOPY TBIN5,CBIN0,CBIN2,TSCRBUF,TPOINTER	  MOVE ROW
 CBL TBIN5,TBIN2,CRD020 STILL ON SAME LINE ?
 B CRD035 
CRD030
 MOVE TBIN4,=W'84'
 MATCH TSCRBUF,TPOINTER,TBIN4,ESC,CBIN0,CBIN1	  NEXT FIELD
 BNOK CRD095
 ADD TPOINTER,CBIN1 POINT AT R
CRD035
 XCOPY TSTR1,CBIN0,CBIN1,TSCRBUF,TPOINTER 
 CBE TSTR1,ESC,CRD095 WAS IT LAST FIELD 
 XCOPY TBIN6,CBIN0,CBIN2,TSCRBUF,TPOINTER	  MOVE R/C
 CBNG TBIN1,TBIN6,CRD040 FOUND R/C(R) 
 MOVE TBIN5,TBIN6 PREPARE FOR NEXT TEST 
 B CRD030 
CRD040
 CBE TBIN5,TBIN1,CRD050 TAKE R/C(L) 
 CBE TBIN6,TBIN1,CRD060 TAKE R/C(R) 
 PERF CRNEAR,CBIN2 FIND NEAREST FIELD START 
 B CRD070 
CRD050
 MOVE TCURPOS,TBIN5 LEFT WAS PERFECT
 B CRD070 
CRD060
 MOVE TCURPOS,TBIN6 RIGHT WAS PERFECT 
CRD070
 ADD TBIN3,CBIN2 POINT AT ATTRIBUTE 
 DSC1 DSDY,POS,TCURPOS
 B CRD099 
CRD095
 MOVE TPOINTER,TBIN3 RESTORE OLD POINTER
CRD099
 PERF PULL,CBIN6
 RET
 PEND 
 EJECT
CRFTAB PROC 
* 
* THE PROCEDURE MOVES THE CURSOR TO THE FIELD 
* JUST AFTER THE CURRENT FIELD. IF THE CURRENT
* FIELD IS THE LAST ONE, NOTHING WILL HAPPEN
* 
* PREREQUISITS
*     TPOINTER - POINTING SOMEWHERE IN TSCRBUF
* 
* FIELD CONTENTS ON EXIT
*     TCURPOS - AS USUAL
* 
* FIELD CONTENTS ON ERROR EXIT
*     TCURPOS - NOT CHANGED 
*     TPOINTER - NOT CHANGED
* 
 PERF PUSH,CBIN2
 MOVE TBIN1,TPOINTER SAVE OLD POINTER 
 MOVE TBIN2,=W'84' SET LENGTH FOR MATCH 
 MATCH TSCRBUF,TPOINTER,TBIN2,ESC,CBIN0,CBIN1 
			FIND NEXT FIELD
 BNOK CRFT090 CURRENT FIELD WAS LAST ONE
 ADD TPOINTER,CBIN1 
 XCOPY TSTR1,CBIN0,CBIN1,TSCRBUF,TPOINTER 
 CBE TSTR1,ESC,CRFT090 WAS IT LAST FIELD
 XCOPY TCURPOS,CBIN0,CBIN2,TSCRBUF,TPOINTER 
			MOVE R/C 
 DSC1 DSDY,POS,TCURPOS
 ADD TPOINTER,CBIN2 POINT TO ATTRIBUTE
 B CRFT095 FINISHED 
CRFT090 
 MOVE TPOINTER,TBIN1 REESTABLISH PREV POINTER 
CRFT095 
 PERF PULL,CBIN2
 RET
 PEND 
 EJECT
CRBTAB PROC 
* 
* THE PROCEDURE MOVES THE CURSOR TO THE FIELD 
* JUST BEFORE THE CURRENT FIELD. IF THE CURRENT 
* FIELD IS THE FIRST ONE, NOTHING WILL HAPPEN.
* 
* PREREQUISITS
*     TPOINTER - POINTING SOMEWHERE IN TSCRBUF
* 
* FIELD CONTENTS ON EXIT
*     TCURPOS - AS USUAL
* 
* FIELD CONTENTS ON ERROR EXIT
*     TCURPOS - NOT CHANGED 
*     TPOINTER - NOT CHANGED
* 
 PERF PUSH,CBIN6

 MOVE TBIN3,TPOINTER SAVE OLD POINTER 
 MOVE TBIN5,TCURPOS 
 MOVE TPOINTER,CBIN0 STARTING ADDRESS 
CRBT010 
 MOVE TBIN4,=W'84'
 MATCH TSCRBUF,TPOINTER,TBIN4,ESC,CBIN0,CBIN1 
 BNOK CRBT020 
 ADD TPOINTER,CBIN1 
 MOVE TBIN6,TBIN5 SAVE THE PREVIOUS R/C 
 XCOPY TBIN5,CBIN0,CBIN2,TSCRBUF,TPOINTER 
			SAVE NEW R/C 
 CBNE TBIN5,TCURPOS,CRBT010 NOT YET FOUND CURRENT POS 
 MOVE TCURPOS,TBIN6 REPOSITION ON PREVIOUS R/C
 DSC1 DSDY,POS,TCURPOS
 MOVE TPOINTER,TBIN2
 ADD TPOINTER,CBIN2 POINT TO ATTRIBUTE
 B CRBT095
CRBT020 
 MOVE TPOINTER,TBIN3 RESTORE OLD POINTER
CRBT095 
 PERF PULL,CBIN6
 RET
 PEND 
 EJECT
CRUP PROC 
* 
* THE PROCEDURE MOVES THE CURSOR UP ONE LINE
* IF THERE ARE NO UNPROTECTED FIELDS ON THE 
* LINE, THE MOVEMENT WILL CONTINUE. 
* ONCE IT HAS FOUND A LINE WITH UNPROTECTED 
* FIELDS, THE CURSOR WILL BE POSITIONED AT THE
* NEAREST FIELD START 
* 
* PREREQUISITS
*     TPOINTER - POINTING SOMEWHERE IN TSCRBUF
* 
* FIELD CONTENTS ON EXIT
*     TCURPOS - AS USUAL
* 
* FIELD CONTENTS ON ERROR EXIT
*     TCURPOS - NOT CHANGED 
*     TPOINTER - NOT CHANGED
* 
* OTHER FIELDS USED 
*     TSTR1 
* 
 PERF PUSH,CBIN8
 MOVE TBIN1,TCURPOS 
 MOVE TBIN3,TPOINTER SAVE OLD POINTER 
 SUB TBIN1,=X'0100' IDEAL POSITION
 MOVE TBIN2,TBIN1 
 MOVE TSTR1,=X'51' DUMMY POS 81 
 XCOPY TBIN2,CBIN1,CBIN1,TSTR1,CBIN0 	  TBIN2 IS NOW THE LIMIT
 MOVE TPOINTER,CBIN0
 MOVE TBIN4,=W'84'
 MATCH TSCRBUF,TPOINTER,TBIN4,ESC,CBIN0,CBIN1 
 BNOK CRU095
 ADD TPOINTER,CBIN1 
 XCOPY TBIN5,CBIN0,CBIN2,TSCRBUF,TPOINTER 	  MOVE 1. R/C
 MOVE TBIN7,TPOINTER
CRU010
 MOVE TBIN4,=W'84'
 MATCH TSCRBUF,TPOINTER,TBIN4,ESC,CBIN0,CBIN1 
 BNOK CRU020 ONLY ONE FIELD, TAKE IT
 ADD TPOINTER,CBIN1 
 MOVE TBIN7,TPOINTER
 XCOPY TBIN6,CBIN0,CBIN2,TSCRBUF,TBIN3 	  SAVE 2. R/C 
 CBL TBIN2,TBIN6,CRU020 LIMIT REACHED, TAKE (L) 
 CBE TBIN1,TBIN6,CRU030 FITS SNUGLY ON R/C (R)
 CBG TBIN1,TBIN5,CRU040 FOUND A R/C ON EACH SIDE
 MOVE TBIN6,TBIN5 NO PLACE FOUND YET
 MOVE TBIN5,=W'2048'
 B CRU010 
CRU020			TAKE LEFT R/C
 MOVE TCURPOS,TBIN5 
 B CRU090 
CRU030			TAKE RIGHT R/C 
 MOVE TCURPOS,TBIN6 
 B CRU090 
CRU040
 PERF CRNEAR,CBIN1 FIND NEAREST R/C 
CRU090
 MOVE TPOINTER,TBIN7
 ADD TPOINTER,CBIN2 
 B CRU100 
CRU095
 MOVE TPOINTER,TBIN3
CRU100
 DSC1 DSDY,POS,TCURPOS
 PERF PULL,CBIN8
 RET
 PEND 
 EJECT
CRNEAR PROC P 
 PBIN P 
* 
* THIS PROCEDURE FINDS THE NEAREST UNPROTECTED FIELD
* AS DEFINED BY R/C(L) AND R/C(R), WHERE R/C(L) IS
* THE LEFTMOST, AND R/C(R) THE RIGHTMOST. 
* 
* IF 'CRUP', P MUST BE 1
* 
* REL. POS := (RR*80) + CC
* 
* R/C(L) IN TBIN5 
* R/C(R) IN TBIN6 
* R/C(T) IN TBIN1 
* 
 PERF PUSH,CBIN8
 MOVE TBIN3,CBIN0 
 MOVE TBIN7,CBIN0 
 XCOPY TBIN3,CBIN1,CBIN1,TBIN5,CBIN0 EXTRACT RR(L)
 XCOPY TBIN7,CBIN1,CBIN1,TBIN6,CBIN0 EXTRACT RR(R)
 CBE TBIN3,TBIN7,NEA010 IF DIFFERENT ROWS 
 CBE P,CBIN1,NEA080 AND 'CRUP' TAKE R/C(R)
 B NEA070 ELSE R/C(L) 
NEA010
* 
* THIS PROCEDURE FINDS THE NEAREST UNPROTECTED FIELD
* AS DEFINED BY R/C(L) AND R/C(R), WHERE R/C(L) IS
* THE LEFTMOST, AND R/C(R) THE RIGHTMOST. 
* 
* REL. POS := (RR*80) + CC
* 
* R/C(L) IN TBIN5 
* R/C(R) IN TBIN6 
* R/C(T) IN TBIN1 
* 
 MOVE TBIN4,CBIN0 
 XCOPY TBIN4,CBIN1,CBIN1,TBIN5,CBIN1
 MUL TBIN3,CBIN80 
 ADD TBIN3,TBIN4 REL. POS FOR R/C(L)
 MOVE TBIN8,CBIN0 
 XCOPY TBIN8,CBIN1,CBIN1,TBIN6,CBIN1
 MUL TBIN7,CBIN80 
 ADD TBIN7,TBIN8 REL. POS FOR R/C(R)
 XCOPY TBIN4,CBIN1,CBIN1,TBIN1,CBIN0
			SAME FOR R/C(T)
 XCOPY TBIN8,CBIN1,CBIN1,TBIN1,CBIN1
 MUL TBIN4,CBIN80 
 ADD TBIN4,TBIN8 REL. POS FOR R/C(T)
* TBIN1 - R/C(T)
* TBIN3 - REL (L) 
* TBIN4 - REL (T) 
* TBIN5 - R/C(L)
* TBIN6 - R/C(R)
* TBIN7 - REL(R)
 MOVE TBIN2,TBIN3 FIND THE POSITION 
 ADD TBIN2,TBIN7 BETWEEN R/C (L)
 DIV TBIN2,CBIN2 AND R/C(R) 
 CBL TBIN2,TBIN4,NEA080 WHICH ONE TO TAKE ? 
NEA070
 MOVE TCURPOS,TBIN5 USE (L) 
 B NEA090 
NEA080
 MOVE TCURPOS,TBIN6 USE (R) 
NEA090
 PERF PULL,CBIN8
 RET
 PEND 
 END

Full view