|
|
DataMuseum.dkPresents historical artifacts from the history of: Philips Data Systems |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Philips Data Systems Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 14186 (0x376a)
Notes: pts_type(SC)
Names: »CURSOR.SC«
└─⟦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«
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