|
|
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: 51228 (0xc81c)
Notes: pts_type(SC)
Names: »VDU.SC«
└─⟦928b1fd3e⟧ Bits:30009671 Philips computer tape "600131"
└─⟦this⟧ »KJELL/VDU.SC«
IDENT VDU REL 11.0 82-07-07 870150541100 MOVE TO UNPROT, ONLY FOR P&T =37 DUP OR FM CHAR ON PRINTER =21 LOOP WHEN VDU NOT OPERABLE 82-05-17 =2 LOOP IN ERASUA 82-03-10 DK1 BAD CHECK ON ATTRIBUTE DK BAD TEST ON INTESITY =1, LINFLG AT UNFORM. 81-01-26 **************************************************************** * * * MODULE VDU * * MODULE HANDLING THE DISPLAY SCREEN AND * * BUFFER * * (EMULATION 3270 SNA/SDLC, BSC) * * * **************************************************************** EJECT *********************************************************** * * LIST OF ROUTINES * * DISMOD DISPLAY MODIFIED FIELDS * DISLIN DISPLAY LINE * SPACES MOVE SPACES INTO ECB BUFFER * INTCHK GET INTENSITY CHAR. * SETIND SET DISPLAY INDICATOR * INSMOD INSERT CHAR. * UPDCNT UPDATE COUNTERS * GETVDU GET CHAR. IN VDU BUFFER * STOVDU STORE CHAR IN VDU BUFFER * SCRINF GET SCREEN INFORMATION * STOINF STORE SCREEN INFORMATION * SOUND SOUND ALARM * WRAP CHECK IF WRAP AROUND * LINWRP CHECK IF LINE WRAP * LINE UPDATE LINE FLAG * LINATT UPDATE LINFLG AT ATTRIBUTE CHANGE * NLROUT NEW LINE ROUTINE * ERASE ERASE ENTIRE SCREEN * ERASUP ERASE ALL UNPROTECTED * ERASUA ERASE UNPROTECTED TO ADDRESS * POSUNP MOVE CURSOR TO NEXT UNPRO. POS * DISID DISPLAY HARDCOPY TASKID * DISSTA DISPLAY STATISTICS * MOVTXT MOVE TEXT * CONASC CONVERT TO ASCII * ATMASF SEARCH ATTRIBUTE FORWARD * ATMASB SEARCH ATTRIBUTE BACKWARD * SNULL SEARCH FIRST NULL CHAR. * WCHAR DISPLAY CHAR. AND CURSOR * RFMDUP REPLACE FM OR DUP CHAR. IF ANY * DISCHA DISPLAY CHAR. * ***************************************************************** EJECT ******************************************************************** * * * ENTRY POINTS * * * ******************************************************************** ENTRY INSMOD INSERT CHARACTER ENTRY GETVDU GET CHAR. FROM VDU BUFFER ENTRY STOVDU STORE CHAR. IN VDU BUFFER ENTRY SCRINF GET SCREEN INFORMATION ENTRY STOINF SAVE SCREEN INFORMATION ENTRY POSUNP MOVE TO NEXT UNPROTECTED POS. ENTRY ATMASB SEARCH ATTRIBUTE BACKWARDS ENTRY ATMASF SEARCH ATTRIBUTE FOREWARD ENTRY DISCHA DISPLAY CHAR. ENTRY WCHAR DISPLAY CHAR. AND CURSOR ENTRY DISMOD DISPLAY MODIFIED FIELDS ENTRY DISID DISPLAY HARDCOPY TASKID ENTRY ERASUA ERASE UNPROTECTED TO ADDRESS ENTRY ERASE ERASE ENTIRE SCREEN ENTRY SOUND SOUND ALARM ON VDU ENTRY ERASUP ERASE ALL UNPROTECTED ENTRY WRAP CHECK IF WRAP AROUND ENTRY NLROUT NEW LINE ROUTINE ENTRY LINWRP CHECK LINE WRAP ENTRY LINE UPDATE LINE FLAG ENTRY LINATT UPADTE ENTRY DISSTA DISPLAY STATISTICS ENTRY RFMDUP REPLACE FM OR DUP CHAR =37 EJECT ******************************************************************** * * * EXTERNAL REFERENCES * * * ******************************************************************** EXTRN TAB TAB UNPROCTECTED FOREWARD (KEYB) EXTRN CRDOWN MOVE CURSOR UNPROTECTED NEXT LINE (KEYB) EXTRN RDHOME UNPROTECTED FIRST ON SCREEN (KEYB) EXTRN SAVE1 SAVE REGISTERS (PAD) EXTRN REST1 RESTORE REGISTERS (PAD) EJECT ********************************************************************* * * * CONDITIONAL ASSEMBLY PARAMETERS * * * ********************************************************************* X:I EQU 1 INSERT/DELETE HANDLING IN:DL EQU 1 X:O EQU 0 TEST INCLUDED IF:=1 TEST EQU 0 EJECT *************************************************************** * * * DECLARATIONS OF DATA AND EQUATES * * *************************************************************** * * EQUATES FOR ECB HANDLING * ECBBA EQU 2 BUFFER ADDRESS ECBRL EQU 4 REQUESTED LENGTH ECBEL EQU 6 EFFECTIVE LENGTH ECBRC EQU 8 RETURN CODE ECBCW EQU 10 CONTROL WORD * * SPECIAL CHARACTERS * NULL EQU 0 NULL CHAR. NEWLIN EQU /0A NEW LINE CHAR. FORMFD EQU /0C FORM FEED CHAR. ENDMES EQU /19 END MESSAGE CHAR. DUPCH EQU /1C DUPLICATE CHAR. FMCH EQU /1E FIELD MARK CHAR. * * TASK IDENTIFICATION CODE * VDUCOD EQU 'VV' VDU KB TASK * * INTERNAL STATUS * LINUPD EQU /0001 LINE UPDATED ATTREC EQU /0002 ATTRIBUTE RECEIVED * * VDU SCREEN SIZE * LLINE EQU 80 LINE LENGTH LBVDU EQU 1920 TOTAL SIZE IFT TEST=1 * * STAT. LAYOUT * NUMLIN EQU 13 NUMBER OF LINES YO DISPLAY STALIN EQU 5 STARTING LINE OF DISPLAY STAPOS EQU 5 STARTTING POS ON LINE TXTSIZ EQU 15 SIZE OF PERMANENT TEXT INDEX DATA /0102,/0405,/0608,/090A,/0C0E,/1D1E,/1F00 XIF EJECT * * RELATIVE ADDRESSES IN * TERMINAL WORKBLOCK * TCT01 EQU 0 TASK IDENTIFICATION BVDU EQU TCT01+2 SCREEN BUFFER LINFLG EQU BVDU+1920 INTERNAL LINE FLAGS PCURS EQU LINFLG+24 CURSOR ADDRESS ATTRIB EQU PCURS+2 LAST ATTRIBUTE CHAR CURATT EQU ATTRIB+2 WCC EQU CURATT+2 WCC/CCC CHARACTER INTATT EQU WCC+8 INTENSITY ATTRIBUTE REGI EQU INTATT+32 WORK REGISTER ECBVDU EQU REGI+40 * * RELATIVE ADDRESSES IN * COMMON WORKBLOCK * IDTEXT EQU 2 IDENT TEXT LAYOUT IFT TEST=1 STATXT EQU IDTEXT+22 STATISTIC TEXT LAYOUT XIF EJECT ********************************************************* * * * DISMOD DISPLAY MODIFIED FIELDS * * * ********************************************************* * REGISTERS * * A2= CHAR. * A3= ADDRESS IN VDU-BUFFER * A4= REL. CURSOR POS. * A5= REL. ATTRIBUTE POS. * A6= ADDRESS IN ECB * A7= INDEX IN ECB * A8= VDU ECB * A9= INTENSITY COUNTER * A10= INDICATOR * A11= CREDIT WORK AREA * A13= RESERVED * ***************************************************** DISMOD EQU * LD A8,ECBVDU,A11 LDKL A1,/101 LINE 1 POS. 1 ST A1,ECBCW,A8 SUR A9,A9 RESET INTENSITY COUNTER SUR A10,A10 LDKL A3,BVDU ADR A3,A11 CF A14,SCRINF LDK A4,0 FIRST SCREEN POS. DK CF A14,SPACES SPACES IN ECB BUFFER ST A5,REGI,A11 LDKL A1,LBVDU+1 LDR A5,A11 CW A1,REGI,A11 RF(NE) DIS100 NO LDK A2,0 LOW INTENSITY ST A2,INTATT,A11 DIS100 EQU * LDR A10,A10 RF(NZ) DIS900 CF A14,INTCHK CHECK INTENSITY CHAR. LDR A1,A10 SUR A10,A10 LDR A1,A1 RF(N) DIS800 NONDISPLAY RF(NZ) DIS400 DISPLAY LINE LD A2,ECBCW,A8 NO MODIFICATION CWK A2,/1901 ALLDISPLAYED RB(NE) DIS100 NO RF DIS900 DIS400 EQU * CWK A7,LLINE LINE COMPLETED? RF(L) DIS500 NO CF A14,DISLIN DISPLAY LINE RB DIS100 DIS500 EQU * LCR A2,A3 GET CHAR. IN VDU-BUFFER CF A14,SETIND SET SPACE INDICATOR CCK A2,/8000 ATTRIBUTE? RF(NL) DIS700 YES CF A14,UPDCNT UPDATE COUNTERS CWK A2,NULL NULL CHAR.? RB(E) DIS400 YES CWK A2,NEWLIN NEW LINE CHAR.? RB(E) DIS400 YES CWK A2,ENDMES END MESSAGE CHAR.? RB(E) DIS400 YES CWK A2,FORMFD FORM FEED CHAR.? RB(E) DIS400 YES CF A14,RFMDUP REPLACE DUP AND FM CHAR. SC A2,-1,A6 STORE CHAR. IN ECB BUFFER RB DIS400 DIS700 EQU * ST A2,INTATT,A11 LDR A1,A2 ANK A1,8 LOW INTENSITY? RF(Z) DIS725 YES ANK A2,4 HIGH INTENSITY? RF(Z) DIS715 YES CF A14,UPDCNT UPDATE COUNTERS RF DIS800 NONDISPLAY DIS715 EQU * LDK A2,/1F HIGH RF DIS750 DIS725 EQU * LDK A2,/1E LOW DIS750 EQU * SCR A2,A6 SAVE CHAR. IN ECB BUFFER ADKL A9,1 CF A14,UPDCNT UPDATE COUNTERS ADK A6,1 RB DIS400 DIS800 EQU * CWK A7,LLINE LINE COMPLETED? RF(L) DIS850 NO CF A14,DISLIN DISPLAY LINE RB DIS100 DIS850 EQU * LCR A2,A3 GET CHAR. IN VDU-BUFFER CCK A2,/8000 ATTRIBUTE? RB(NL) DIS700 YES CF A14,UPDCNT UPDATE COUNTERS RB DIS800 DIS900 EQU * CF A14,SCRINF GET SCREEN INFORMATION LDK A1,2 REQ. LENGTH CF A14,DISCHA SET CURSOR RTN A14 EJECT *********************************************************** * * * DISLIN DISPLAY LINE ON VDU * * * *********************************************************** * REGISTERS * * A3= RESERVED * A4= RESERVED * A5= RESERVED * A6= RESERVED * A8= ECB VDU * A9= INTENSITY COUNTER * A10= INDICATOR * A11= RESERVED * A13= RESERVED * *********************************************************** DISLIN EQU * LDK A7,2 REQ. LENGTH LDR A1,A10 ANKL A1,1 ONLY SPACES? RF(Z) DISL10 YES LDKL A7,LLINE+2 REQ. LENGTH ADR A7,A9 ADD NUMBER OF INTENSITY CHAR. DISL10 EQU * ST A7,ECBRL,A8 LD A2,ECBCW,A8 SAVE CURSOR POS =21 LDKL A7,/8B SET CURSOR AND WRITE LKM DATA 1 LD A1,ECBRC,A8 . =21 ANK A1,1 NOT OPERABLE? =21 RF(Z) DISL20 VDU OPERABLE =21 ST A2,ECBCW,A8 NOT OP. REST CURSOR POS =21 RF DISL90 TERMINATE VDU LINE =21 DISL20 EQU * . =21 LD A1,ECBCW,A8 GET CURSOR POS. ANK A1,/FF SUK A1,81 LAST POS. ON LINE DISPLAYED? RF(Z) DISL90 YES LD A6,ECBBA,A8 LDK A2,/2B SC A2,1,A6 LDKL A2,/1420 SC A2,3,A6 SRL A2,8 SC A2,2,A6 LDK A2,84 ST A2,ECBRL,A8 LDK A7,/86 WRITE LKM DATA 1 DISL90 EQU * ADK A5,1 LDK A2,1 FIRST POS. ON LINE SC A2,ECBCW+1,A8 LDKL A2,/100 MOVE ONE LINE DOWN ADS A2,ECBCW,A8 SUR A10,A10 LD A2,ECBCW,A8 CWK A2,/1901 END OF SCREEN RF(NE) DISL95 NO LDKL A10,1 DISL95 EQU * CF A14,SPACES MOVE SPACES TO ECB BUFFER RTN A14 EJECT ************************************************************ * * * SPACES MOVE SPACES TO ECB BUFFER * * * ************************************************************ * REGISTERS * * A2= CHAR. * A3= RESERVED * A4= RESERVED * A5= RESERVED * A6= ADDRESS IN ECB BUFFER * A7= INDEX IN ECB * A8= VDU ECB * A9= INTENSITY COUNTER * A10= INDICATOR * A11= RESERVED * A13= RESERVED * ************************************************************ SPACES EQU * LD A6,ECBBA,A8 GET BUFFER ADDRESS ADK A6,2 LDK A7,LLINE LINE LENGTH ADR A7,A7 BUFFER LENGTH LDKL A2,' ' SPACES SPAC10 EQU * SCR A2,A6 SC A2,1,A6 ADK A6,2 SUK A7,2 WHOLE BUFFER SPACED? RB(P) SPAC10 NO LDK A2,0 CHAR. LD A6,ECBBA,A8 BUFFER ADDRESS ADK A6,2 LDK A7,0 RESET CHAR. COUNTER RTN A14 EJECT ********************************************************* * * * INTCHK GET INTENSITY CHAR. * * * ********************************************************* * REGISTERS * * A2= CHAR. * A3= RESERVED * A4= RESERVED * A5= RESERVED * A6= ADDRESS IN ECB BUFFER * A7= RESERVED * A8= RESERVED * A9= INTENSITY COUNTER * A10= INDICATOR * A11= CREDIT WORK AREA * A13= RESERVED * ************************************************ INTCHK EQU * SUR A9,A9 RESET INTENSITY COUNTER LC A2,LINFLG,A5 GET LINE FLAG ANK A2,1 MODIFIED? RF(NZ) INT100 YES ADK A3,LLINE NEXT LINE ADK A4,LLINE ADK A5,1 LDK A2,1 SC A2,ECBCW+1,A8 LDKL A2,/100 ADS A2,ECBCW,A8 LDKL A10,0 RF INT900 INT100 EQU * LC A2,LINFLG,A5 ANK A2,2 SC A2,LINFLG,A5 LDKL A10,1 LD A2,REGI,A11 CWK A2,LBVDU+1 UNFORMATTED SCREEN? RF(E) INT200 YES CF A14,SAVE1 LDR A1,A4 CF A14,SCRINF LDR A2,A5 LDR A3,A6 CF A14,ATMASB GET CURRENT ATTRIBUTE ST A6,INTATT,A11 LDR A5,A2 LDR A6,A3 CF A14,STOINF CF A14,REST1 LDK A7,0 INT200 EQU * LD A2,INTATT,A11 LDR A1,A2 ANK A1,8 LOW INTENSITY? RF(Z) INT300 YES ANK A2,4 HIGH INTENSITY? RF(NZ) INT800 NO, NONDISPLAY LDK A2,/1F HIGH RF INT400 INT300 EQU * LDK A2,/1E LOW INT400 EQU * SCR A2,A6 SAVE IN ECB BUFFER ADK A6,1 ADKL A9,1 RF INT900 INT800 EQU * LDKL A10,/8000 INT900 EQU * RTN A14 EJECT ************************************************ * * * SETIND SET DISPLAY INDICATOR * * * ************************************************ * REGISTERS * * A2= CHAR * A3= RESERVED * A4= RESERVED * A5= RESERVED * A6= RESERVED * A7= RESERVED * A8= RESERVED * A9= RESERVED * A10= DISPLAY INDICATOR * A11= RESERVED * A13= RESERVED * ********************************** SETIND EQU * CWK A2,NULL NULL CHAR? RF(E) SETI90 YES ORKL A10,1 INDICATE NOT ONLY SPACES SETI90 EQU * RTN A14 EJECT **************************************************************** * * * INSMOD INSERT CHARACTER * * * **************************************************************** * REGISTERS * * A1= AT RETURN 0=NULL IN POS., 1=NORMAL INSERT, 2=NOT ALLOWED * A2= RESERVED * A4= REL. CURSOR POS. * A5= REL. ATTRIBUTE POS. * A6= ATTRIBUTE CHAR. * A11= CREDIT WORK AREA * A13= RESERVED * *************************************************************** INSMOD EQU * IFT IN:DL=1 LDR A1,A4 CF A14,GETVDU GET CHAR. IN VDU BUFFER CCK A7,NULL NULL CHAR.? RF(NE) INS100 NO LDK A1,0 INDICATE NULL IN CURSOR POS. RF INS900 INS100 EQU * LDR A3,A4 CWK A5,LBVDU+1 UNFORMATTED SCREEN? RF(E) INS200 YES LDR A8,A6 SAVE OLD LDR A9,A5 SAVE OLD CF A14,ATMASF SEARCH ATTRIBUTE FORWARD LDR A3,A5 ST A8,ATTRIB,A11 RESTORE ST A9,CURATT,A11 RESTORE LDR A6,A8 LDR A5,A9 INS200 EQU * CF A14,SNULL SEARCH FIRST NULL ANK A1,2 NULL FOUND? RF(Z) INS300 YES LDK A1,2 INDICATE ERROR RF INS900 INS300 EQU * CWK A5,LBVDU+1 UNFORMATTED SCREEN? RF(E) INS350 YES ORK A6,1 SET MDT-BIT ON IN ATTRIBUTE ST A6,ATTRIB,A11 LDR A1,A5 LDR A7,A6 CF A14,STOVDU SAVE NEW ATTRIBUTE IN VDU-BUFFER INS350 EQU * LDR A1,A3 ST A4,REGI,A11 LDR A4,A1 LDK A5,LLINE LDR A6,A11 SUR A10,A10 LDR A9,A1 CF A14,LINE UPDATE LINE FLAG LDR A1,A9 INS400 EQU * CWK A1,0 CHAR TO MOVE IN LAST SCREEN POS? RF(E) INS500 YES SUK A1,1 CF A14,GETVDU GET CHAR IN VDU BUFFER ADK A1,1 LDR A9,A1 LDK A5,LLINE LDR A6,A11 CF A14,LINE LDR A1,A9 LC A9,LINFLG,A6 ORKL A9,1 SC A9,LINFLG,A6 CF A14,STOVDU STORE CHAR IN VDU BUFFER SUK A1,1 SUK A4,1 INS450 EQU * CW A1,REGI,A11 ALL SHIFTED? RF(E) INS600 YES RB INS400 INS500 EQU * LDKL A1,LBVDU-1 GET LAST CHAR CF A14,GETVDU GET CHAR IN VDU BUFFER LDK A1,0 LDK A4,0 LDR A9,A1 LDK A5,LLINE LDR A6,A11 CF A14,LINE LDR A1,A9 LC A9,LINFLG,A6 ORKL A9,1 SC A9,LINFLG,A6 CF A14,STOVDU STORE CHAR IN VDU BUFFER LDKL A1,LBVDU-1 LAST SCREEN POS. LDKL A4,LBVDU-1 RB INS450 INS600 EQU * LDR A7,A2 GET KEY-CHAR CF A14,STOVDU STORE CHAR IN VDU BUFFER LDK A5,LLINE LDR A6,A11 CF A14,LINE LC A9,LINFLG,A6 ORKL A9,1 SC A9,LINFLG,A6 IM PCURS,A11 MOVE CURSOR LD A4,REGI,A11 ADK A4,1 CWK A4,LBVDU-1 WRAP AROUND? RF(NG) INS700 NO LDK A4,0 FIRST POS. ON SCREEN CM PCURS,A11 INS700 EQU * CF A14,DISMOD DISPLAY MODIFIED FIELD LDK A1,1 INDICATE NORMAL INSERT INS900 EQU * RTN A14 XIF EJECT ********************************************************* * * * UPDCNT UPDATE COUNTERS * * * ********************************************************* * REGISTERS * * A3= ADDRESS IN VDU BUFFER * A4= REL CURSOR POS * A5= RESERVED * A6= ADDRESS IN ECB * A7= INDEX IN ECB * A8= RESERVED * A9= RESERVED * A10= RESERVED * A11= RESERVED * A13= RESERVED * ********************************************************* UPDCNT EQU * ADK A3,1 ADK A4,1 ADK A6,1 ADK A7,1 RTN A14 EJECT **************************************************************** * * * GETVDU GET CHAR. IN VDU BUFFER * * * **************************************************************** * REGISTERS * * A1= REL. POS IN VDU BUFFER * A2= RESERVED * A3= RESERVED * A4= RESERVED * A5= RESERVED * A6= RESERVED * A7= CHAR. FROM VDU BUFFER * A8= RESERVED * A9= RESERVED * A10= RESERVED * A11= CREDIT WORK AREA * A13= RESERVED * ******************************************************** GETVDU EQU * LDKL A7,BVDU ADR A7,A11 ADR A7,A1 LCR A7,A7 ANK A7,/FF RTN A14 EJECT ************************************************************** * * * STOVDU STORE CHAR. IN VDU BUFFER * * * ************************************************************** * REGISTERS * * A1= REL. POS. IN VDU BUFFER * A2= RESERVED * A3= RESERVED * A4= RESERVED * A5= RESERVED * A6= RESERVED * A7= CHAR. TO STORE IN VDU BUFFER * A9= RESERVED * A10= RESERVED * A11= CREDIT WORK AREA * A13= RESERVED * ******************************************************** STOVDU EQU * LDKL A8,BVDU ADR A8,A11 ADR A8,A1 SCR A7,A8 RTN A14 EJECT ******************************************************** * * * SCRINF GET SCREEN INFORMATION * * * ******************************************************** * REGISTERS * * A2= RESERVED * A4= REL. CURSOR POS. * A5= REL. ATTRIBUTE POS. * A6= ATTRIBUTE CHAR. * A11= CREDIT WORK AREA * A13= RESERVED * ******************************************************* SCRINF EQU * LD A4,PCURS,A11 GET CURSOR POS. LD A5,CURATT,A11 GET ATTRIBUTE POS. LD A6,ATTRIB,A11 GET ATTRIBUTE CHAR. RTN A14 EJECT ******************************************************** * * * STOINF STORE SCREEN INFORMATION * * * ******************************************************** * REGISTERS * * A4= REL. CURSOR POS. * A5= REL. ATTRIBUTE POS. * A6= ATTRIBUTE CHAR. * A11= CREDIT WORK AREA * A13= RESERVED * ******************************************************** STOINF EQU * ST A4,PCURS,A11 ST A5,CURATT,A11 ST A6,ATTRIB,A11 RTN A14 EJECT ******************************************************* * * * SOUND SOUND ALARM ON VDU * * * ******************************************************* * REGISTERS * * A1= RETURN CODE * A8= ECBVDU * A11= CREDIT WORK AREA * A13= RESERVED * ******************************************************* SOUND EQU * LD A8,ECBVDU,A11 LD A1,ECBBA,A8 LDK A2,/2B CONTROL CHAR. SC A2,1,A1 LDK A2,/07 BELL CHAR. SC A2,2,A1 LDK A2,3 REQ. LENGTH ST A2,ECBRL,A8 LDK A7,/86 LKM DATA 1 LD A1,ECBRC,A8 GET RETURN CODE RTN A14 EJECT ***************************************************** * * * WRAP CHECK IF WRAP AROUND * * * ***************************************************** * REGISTERS * * A2= RESERVED * A3= ADDRESS IN VDU BUFFER * A4= REL. CURSOR POS. * A5= RESERVED * A6= RESERVED * A7= RESERVED * A8= RESERVED * A9= RESERVED * A10= RESERVED * A11= CREDIT WORK AREA * A13= RESERVED * ***************************************************** WRAP EQU * CWK A4,LBVDU WRAP AROUND RF(L) WRAP90 NO LDK A4,0 FIRST SCREEN POS. LDKL A3,BVDU ADR A3,A11 WRAP90 EQU * RTN A14 EJECT ************************************************************ * * * LINWRP CHECK LINE WRAP * * * ************************************************************ * REGISTERS * * A3= RESERVED * A4= REL CURSOR POS * A5= LAST IN ROW REL POS * A6= RESERVED * A8= RESERVED * A9= RESERVED * A10= RESERVED * A11= RESERVED * A13= RESERVED * *********************************************************** LINWRP EQU * CWR A5,A4 END OF LINE? RF(G) LINW10 NO CF A14,LINE UPDATE LINE FLAG LINW10 EQU * RTN A14 EJECT ************************************************************ * * * LINE UPDATE LINE FLAG * * * ************************************************************* * REGISTERS * * A3= ADDRESS IN VDU BUFFER * A4= REL CURSOR POS * A5= LAST IN ROW REL POS * A6= INTERNAL LINE FLAG ADDRESS * A8= RESERVED * A9= RESERVED * A10= RESERFED * A11= CREDIT WORK AREA * A13= RESERVED * *********************************************************** LINE EQU * CWR A5,A4 THIS LINE? RF(G) LIN400 YES,MAYBE LDR A1,A10 ANK A1,ATTREC ATTRIBUTE RECEIVED? RF(Z) LIN100 NO LC A1,LINFLG,A6 ORK A1,2 SC A1,LINFLG,A6 LIN100 EQU * SUR A6,A11 ADK A6,1 UPDATE ADDRESS CWK A6,23 WRAP SCREEN? RF(G) LIN300 YES ADK A5,LLINE ADR A6,A11 RB LINE LIN300 EQU * LDK A4,0 FIRST SCREEN POS. LDKL A3,BVDU ADR A3,A11 LDR A6,A11 LDK A5,LLINE LIN400 EQU * SUR A5,A4 CWK A5,81 RF(L) LIN500 THIS LINE LDK A5,LLINE LDR A6,A11 RB LINE LIN500 EQU * ADR A5,A4 RESTORE RTN A14 EJECT ************************************************************* * * * LINATT UPADTE LINFLG AT ATTRIBUTE CHANGE * * * ************************************************************* * REGISTERS * * A3= ADDRESS IN VDU BUFFER * A4= REL CURSOR POS * A5= LAST IN ROW REL POS * A6= INTERNAL LINE FLAG ADDRESS * A8= RESERVED * A9= RESERVED * A10= RESERVED * A11= CREDIT WORK AREA * A13= RESERVED * ************************************************************** LINATT EQU * CF A14,SAVE1 SUR A6,A11 LDK A2,0 LDR A10,A4 . =1 LINA10 EQU * ADK A4,1 ADK A3,1 CWR A5,A4 END OF LINE? RF(G) LINA30 NO ADR A6,A11 LC A1,LINFLG,A6 ORK A1,1 SC A1,LINFLG,A6 SUR A6,A11 ADK A6,1 CWK A6,23 WRAP AROUND? RF(G) LINA20 YES ADK A5,LLINE RF LINA30 LINA20 EQU * LDK A6,0 LDK A4,0 LDKL A3,BVDU ADR A3,A11 LDK A5,LLINE LINA30 EQU * CWR A4,A10 ALL CHECKED? =1 RF(E) LINA40 YES =1 LCR A2,A3 CWK A2,/80 ATTRIBUTE RB(NG) LINA10 YES LINA40 EQU * . =1 CF A14,REST1 RTN A14 EJECT *********************************************************** * * * NLROUT NEW LINE ROUTINE * * * *********************************************************** * REGISTERS * * A3= ADDRES IN VDU BUFFER * A4= REL CURSOR POS * A5= RESERVED * A6= RESERVED * A8= RESERVED * A9= RESERVED * A10= RESERVED * A11= RESERVED * A13= RESERVED * *********************************************************** NLROUT EQU * LDR A1,A4 SAVE CURSOR POS. CF A14,CRDOWN MOVE CURSOR ON E LINE DOWN LDK A7,0 NLR100 EQU * SUK A4,LLINE COMPUTE LEFTMOST POS. RF(N) NLR200 ADK A7,LLINE RB NLR100 NLR200 EQU * LDR A4,A1 LDK A2,NULL NLR300 EQU * CWR A7,A4 ALL NULLED? RF(E) NLR900 YES SCR A2,A3 NULL IN VDU BUFFER LC A1,LINFLG,A6 ORKL A1,1 SC A1,LINFLG,A6 ADK A3,1 ADK A4,1 CF A14,LINWRP RB NLR300 NLR900 EQU * RTN A14 EJECT ******************************************************************** * * * ERASE ERASE ENTIRE SCREEN * * * ******************************************************************* * REGISTERS * * A2= CHAR. * A3= ADDRESS IN VDU-BUFFER * A4= REL. CURSOR ADDRESS * A5= REL ATTRIBUTE POS * A6= ATTRIBUTE CHAR * A11= CREDIT WORK AREA * A13= RESERVED * ********************************************************* ERASE EQU * LDK A4,0 FIRST SCREEN POS. LDKL A3,BVDU ADR A3,A11 LDK A2,NULL STORE NULL CHAR. ERAS10 EQU * CWK A4,LBVDU+24 WHOLE SCREEN NULLED? RF(NL) ERAS20 YES SCR A2,A3 STORE CHAR. ADK A3,1 ADK A4,1 RB ERAS10 ERAS20 EQU * LDK A4,0 FIRST SCREEN POS. LDKL A5,LBVDU+1 UNFORMATTED SCREEN LDK A6,0 CF A14,STOINF SAVE SCREEN INFORMATION LC A1,TCT01,A11 CCK A1,VDUCOD PRINTER UNPACK? RF(NE) ERAS30 YES LD A8,ECBVDU,A11 LDK A2,'1' ERASE CHAR. LD A1,ECBBA,A8 SC A2,1,A1 LDK A1,2 REQ. LENGTH ST A1,ECBRL,A8 LDK A7,/86 WRITE LKM DATA 1 ERAS30 EQU * RTN A14 EJECT ********************************************************* * * * ERASUP ERASE ALL UNPROTECTED * * * ********************************************************* * REGISTERS * * A2= CHAR. * A3= ADDRESS IN VDU-BUFFER * A4= REL. CURSOR POS. * A5= REL. ATTRIBUTE POS. * A6= INTERNAL LINE FLAG ADDRESS * A11= CREDIT WORK AREA * A13= RESERVED * ********************************************************* ERASUP EQU * LDK A1,2 RESTORE KEYBOARD-BIT ST A1,WCC,A11 LDK A4,0 FIRST SCREEN POS. LDKL A3,BVDU ADR A3,A11 LDK A7,NULL STORE NULL CHAR. CWK A5,LBVDU+1 UNFORMATTED SCREEN? RF(NE) ERUP10 NO CF A14,ERASE RF ERUP90 ERUP10 EQU * LCR A2,A3 GET CHAR. CCK A2,/8000 ATTRIBUTE? RF(NL) ERUP20 YES ADK A3,1 ADK A4,1 RB ERUP10 ERUP20 EQU * LDR A9,A4 FIRST ATTRIBUTE POS. LDK A5,LLINE LDR A6,A11 SUR A10,A10 CF A14,LINE RF ERUP47 ERUP30 EQU * ADK A3,1 ADK A4,1 CF A14,LINWRP CHECK IF LINWRP AROUND LCR A2,A3 GET CHAR. CCK A2,/8000 ATTRIBUTE? RB(L) ERUP30 NO ERUP45 EQU * CWR A9,A4 ALL SCANNED? RF(E) ERUP70 YES ERUP47 EQU * LDR A1,A2 ANK A1,/20 PROTECTED? RB(NZ) ERUP30 YES ANK A2,/FE RESET MDT-BIT SCR A2,A3 SAVE ATTRIBUTE LC A1,LINFLG,A6 ORK A1,1 SC A1,LINFLG,A6 ADK A3,1 ADK A4,1 ERUP50 EQU * CF A14,LINWRP CHECK IF LINWRP AROUND LCR A2,A3 GET CHAR. CCK A2,/8000 ATTRIBUTE? RB(NL) ERUP45 YES SCR A7,A3 STORE NULL CHAR. IN VDU BUFFER LC A1,LINFLG,A6 ORK A1,1 SC A1,LINFLG,A6 ADK A3,1 ADK A4,1 RB ERUP50 ERUP70 EQU * CF A14,RDHOME TAB. UNPROTECTED FIRST ON SCREEN ERUP90 EQU * RTN A14 EJECT **************************************************************** * * ERASUA ERASE UNPROTECTED TO ADDRESS * * * **************************************************************** * REGISTERS * * A1= STOP ADDRESS * A2= CHAR. * A3= ADDRESS IN VDU-BUFFER * A4= REL. CURSOR POS. * A5= REL ATTRIBUTE POS. * A6= ATTRIBUTE CHAR. * A7= NULL CHAR. * A11= CREDIT WORK AREA * A13= RESERVED * **************************************************************** ERASUA EQU * LDK A7,NULL STORE NULL CHAR. LDKL A3,BVDU ADR A3,A11 ADR A3,A4 BUFFER POS. CWK A5,LBVDU+1 UNFORMATTED SCREEN? RF(E) ERUA47 YES LDR A2,A6 GET CURRENT ATTRIBUTE CWR A5,A4 STANDING ON ATTRIBUTE? RF(NE) ERUA10 NO ADK A3,1 ADK A4,1 CWR A1,A4 ALL NULLED? RF(E) ERUA70 YES CF A14,WRAP CHECK IF WRAP AROUND ERUA10 EQU * ANK A2,/20 PROTECTED FIELD? RF(Z) ERUA47 NO ERUA30 EQU * CF A14,WRAP CHECK IF WRAP AROUND CWR A1,A4 ALL NULLED? =2 RF(E) ERUA70 YES =2 LCR A2,A3 GET CHAR. ADK A3,1 ADK A4,1 . =2 CCK A2,/8000 ATTRIBUTE? RB(L) ERUA30 NO ERUA45 EQU * LDR A8,A2 ANKL A8,/20 PROTECTED? RB(NZ) ERUA30 YES ERUA47 EQU * LDR A6,A11 LDK A5,LLINE LDR A8,A1 CF A14,LINE LDR A1,A8 RF ERUA60 ERUA50 EQU * LDR A8,A1 CF A14,LINWRP LDR A1,A8 CWR A1,A4 ALL NULLED? RF(E) ERUA70 YES ERUA60 EQU * LCR A2,A3 GET CHAR. CCK A2,/8000 ATTRIBUTE? RF(L) ERUA62 NO =3 ANK A2,/20 PROTECTED? =3 RB(NZ) ERUA30 YES =3 RF ERUA64 =3 ERUA62 EQU * =3 SCR A7,A3 STORE NULL CHAR, IN VDU-BUFFER LC A8,LINFLG,A6 ORKL A8,1 SC A8,LINFLG,A6 ERUA64 EQU * =3 ADK A3,1 ADK A4,1 RB ERUA50 ERUA70 EQU * RTN A14 EJECT ********************************************************** * * * POSUNP MOVE CURSOR TO NEXT UNPR. POS. * * * ********************************************************** * REGISTERS * * A2= RESERVED * A4= REL. CURSOR POS. * A5= REL. ATTRIBUTE POS. * A6= ATTRIBUTE CHAR * A11= CREDIT WORK AREA * A13= RESERVED * *********************************************************** POSUNP EQU * CWK A4,LBVDU-1 WRAP AROUND? RF(NG) POSU20 NO LDK A4,0 FIRST POS. ON SCREEN ST A4,PCURS,A11 POSU20 EQU * LDR A1,A4 CF A14,GETVDU GET CHAR IN VDU BUFFER CCK A7,/8000 ATTRIBUTE? RF(L) POSU30 NO LDR A6,A7 ANK A7,/20 CWK A7,/20 PROTECTED? DKPT RF(E) POSU25 YES LDR A5,A1 IM PCURS,A11 MOVE CURSOR ADK A4,1 CWK A4,LBVDU-1 WRAP AROUND? RF(NG) POSU23 NO LDK A4,0 POSU23 EQU * CF A14,STOINF SAVE SCREEN INFORMATION LDK A1,2 REQ. LENGTH CF A14,DISCHA SET CURSOR RF POSU30 POSU25 EQU * CF A14,TAB TAB NEXT UNPROTECTED FIELD POSU30 EQU * LD A8,ECBVDU,A11 LD A1,ECBCW,A8 ANK A1,/FF LINE POS. SUK A1,81 LAST POS. ON LINE? RF(NZ) POSU90 NO LDK A1,2 REQ. LENGTH CF A14,DISCHA SET CURSOR POSU90 EQU * RTN A14 EJECT ************************************************************ * * * DISID DISPLAY HARDCOPY TASKID * * * ************************************************************ * REGISTERS * * ************************************************************ DISID EQU * LD A8,ECBVDU,A11 CF A14,SPACES SPACE IN ECB BUFFER LD A3,6,A13 GET COMMON BLOCK BASE LDR A1,A5 SAVE TASK ID LDK A5,IDTEXT ADR A5,A3 POINT ON IDBUFFER ADK A6,46 LDK A3,6 ANK A4,1 PRINTER OPERABLE? RF(Z) DISI10 YES ADK A3,16 DISI10 EQU * SUK A3,2 MOVE INTO ECBBUFFER RF(N) DISI20 COMPLETED LDR* A2,A5 STR A2,A6 ADK A5,2 ADK A6,2 RB DISI10 DISI20 EQU * LD A6,ECBBA,A8 ST A1,ECBBA+52,A6 SAVE TASK ID IN BUFFER LC A2,X'1F' HIGH INTENSITY CHAR. SC A2,ECBBA+45,A6 LDKL A10,1 INDICATE NOT ONLY SPACES LDKL A9,1 1 INTENSITY CHAR. LDKL A2,X'1801' DISPLAY ON LAST ROW ST A2,ECBCW,A8 CF A14,DISLIN DISPLAY IDENT TEXT RTN A14 EJECT ************************************************************** * * DISSTA DISPLAY STATISTICS * *************************************************************** * REGISTERS * * *************************************************************** DISSTA EQU * IFT TEST=1 LD A8,ECBVDU,A11 LDK A1,STALIN WHERE TO START SLL A1,8 LDK A2,1 ORR A2,A1 FIRST POS. ON THAT LINE ST A2,ECBCW,A8 CF A14,SPACES CLEAN THE BUFFER LDK A5,0 RESET INDEX LD A3,6,A13 ADK A3,STATXT POINT TO TEXT DISS10 EQU * LDK A2,/1F HIGH INTENSITY SCR A2,A6 ADK A6,1 LDKL A9,1 LDK A1,TXTSIZ GET SIZE OF TEXT PER LINE CF A14,MOVTXT MOVE IT IN TO BUFFER ADK A6,5+STAPOS MAKE SOME ROOM LC A1,INDEX,A5 SLL A1,1 ADR A1,A12 POINT OUT STAT VALUE LCR A2,A1 CF A14,CONASC MAKE IT VISABLE LDR A4,A2 LCR A2,A1 SRL A2,4 CF A14,CONASC SLL A2,8 ORR A2,A4 SC A2,+1,A6 SRL A2,8 SCR A2,A6 ADK A6,2 LC A2,+1,A1 CF A14,CONASC AS ABOVE LDR A4,A2 LC A2,+1,A1 SRL A2,4 CF A14,CONASC SLL A2,8 ORR A2,A4 SC A2,+1,A6 SRL A2,8 SCR A2,A6 LDKL A10,1 NOT ONLY SPACES CF A14,DISLIN DISPLAY STAT. CWK A5,NUMLIN LIMIT REACHED? RB(NE) DISS10 NO XIF RTN A14 IFT TEST=1 EJECT *********************************************************** * * MOVTXT MOVE TEXT * *********************************************************** * REGISTERS * * ********************************************************** MOVTXT EQU * LCR A2,A3 ADK A3,1 SC A2,STAPOS,A6 ADK A6,1 SUK A1,1 RB(NZ) MOVTXT RTN A14 EJECT ********************************************************** * * CONASC CONVERT TO ASCII * ******************************************************** * REGISTERS * * ******************************************************** CONASC EQU * ANK A2,/0F CCK A2,/0909 RF(G) CONA10 ORK A2,/30 RF CONA90 CONA10 EQU * ADK A2,/37 CONA90 EQU * RTN A14 XIF EJECT ********************************************************* * * * ATMASF SEARCH ATTRIBUTE FORWARD * * * ********************************************************* * REGISTERS * * A1= AT ENTRY START SEARCH ADDRESS * A2= RESERVED * A3= RESERVED * A4= REL. CURSOR POS. * A5= REL. ATTRIBUTE POS. * A6= ATTRIBUTE CHAR. * A8= RESERVED * A9= RESERVED * A10= RESERVED * A11= CREDIT WORK AREA * A13= RESERVED * ********************************************************* ATMASF EQU * ST A1,REGI,A11 ASF100 EQU * ADK A1,1 CWK A1,LBVDU-1 WRAP AROUND? RF(NG) ASF200 NO LDK A1,0 FIRST POS. ON SCREEN ASF200 EQU * CW A1,REGI,A11 WHOLE SCREEN SEARCHED? RF(E) ASF900 YES CF A14,GETVDU GET CHAR. IN VDU BUFFER CCK A7,/8000 ATTRIBUTE? RB(L) ASF100 NO LDR A6,A7 LDR A5,A1 CF A14,STOINF SAVE NEW SCREEN INFORMATION ASF900 EQU * RTN A14 EJECT *********************************************************************** * * * ATMASB SEARCH ATTRIBUTE BACKWARD * * * *********************************************************************** * REGISTERS * * A1= ATENTRY START SEARCH ADDR. * A2= RESERVED * A3= RESERVED * A4= REL. CURSOR POS. * A5= REL. ATTRIBUTE POS. * A6= ATTRIBUTE CHAR. * A8= RESERVED * A9= RESERVED * A10= RESERVED * A11= CREDIT WORK AREA * A13= RESERVED * ************************************************************************ ATMASB EQU * ST A1,REGI,A11 ASB100 EQU * CF A14,GETVDU GET CHAR. IN VDU BUFFER CCK A7,/8000 ATTRIBUTE? RF(NL) ASB300 YES SUK A1,1 RF(NN) ASB200 NOT WRAP AROUND LDKL A1,LBVDU-1 LAST POS. ON SCREEN ASB200 EQU * CW A1,REGI,A11 WHOLE SCREEN SEARCHED? RF(E) ASB900 YES RB ASB100 ASB300 EQU * LDR A6,A7 LDR A5,A1 CF A14,STOINF SAVE SCREEN INFORMATION ASB900 EQU * RTN A14 EJECT *************************************************************** * * * SNULL SEARCH FIRST NULL CHAR. * * * *************************************************************** * REGISTERS * * A1= AT RETURN 1=NULL FOUND, 2=NO NULL FOUND * A2= RESERVED * A3= AT ENTRY LAST SEARCH ADDR., AT RETURN NULL ADDR. IF ANY * A4= REL. CURSOR POS. * A5= RESERVED * A6= RESERVED * A11= CREDIT WORK AREA * A13= RESERVED * **************************************************************** SNULL EQU * LDR A1,A4 SNU100 EQU * ADK A1,1 CWK A1,LBVDU-1 WRAP AROUND? RF(NG) SNU200 NO LDK A1,0 FIRST SCREEN POS. SNU200 EQU * CWR A1,A3 ALL SEARCHED? RF(E) SNU300 YES CF A14,GETVDU GET CHAR IN VDU BUFFER CCK A7,NULL NULL CHAR? RB(NE) SNU100 NO LDR A3,A1 LDK A1,1 INDICATE NULL FOUND RF SNU900 SNU300 EQU * LDK A1,2 SNU900 EQU * RTN A14 EJECT ************************************************************ * * * WCHAR DISPLAY CHAR. AND CURSOR * * * ************************************************************ * REGISTERS * * A2= KEY-CHAR * A4= REL. CURSOR POS. * A5= REL. ATTRIBUTE POS. * A6= ATTRIBUTE CHAR. * A8= VDU-ECB * A11= CREDIT WORK AREA * A13= RESERVED * ************************************************************* WCHAR EQU * LD A8,ECBVDU,A11 LDK A1,/1E LOW INTENSITY CHAR. LDR A7,A6 ANK A7,/8 STANDARD DISPLAY? RF(Z) WCH300 YES LDR A7,A6 ANK A7,/4 INTENSIFIED DISPLAY? RF(NZ) WCH200 NO LDK A1,/1F HIGH INTENSITY CHAR. RF WCH300 WCH200 EQU * LDK A2,/20 NONDISPLAY WCH300 EQU * LD A7,ECBBA,A8 GET BUFFER ADDRESS SC A1,2,A7 SAVE INTENSITY CHAR. CF A14,RFMDUP REPLACE FM OR DUP CHAR. SC A2,3,A7 STORE CHAR. IN VDU BUFFER LDK A1,4 REQ. LENGTH CF A14,DISCHA DISPLAY ADK A4,1 IM PCURS,A11 CWK A5,LBVDU+1 UNFORMATTED SCREEN? RF(E) WCH900 YES ORK A6,1 SET MDT-BITS IN ATTRIBUTE ST A6,ATTRIB,A11 LDR A1,A5 LDR A7,A6 CF A14,STOVDU STORE CHAR. IN VDU BUFFER WCH900 EQU * RTN A14 EJECT ********************************************************* * * * RFMDUP REPLACE FM OR DUP CHAR IF PRESENT * * * ********************************************************* * REGISTERS * A2= KEY-CHAR * A4= RESERVED * A5= RESERVED * A6= RESERVED * A11= CREDIT WORK AREA * A13= RESERVED * *********************************************** RFMDUP EQU * CWK A2,DUPCH DUP CHAR? RF(NE) RFMD10 NO LDK A2,/2A REPLACE RF RFMD90 RFMD10 EQU * CWK A2,FMCH FM CHAR? RF(NE) RFMD90 NO LDK A2,/3B REPLACE RFMD90 EQU * RTN A14 EJECT ************************************************ * * * DISCHA DISPLAY CHAR * * * ************************************************ * REGISTERS * * A1= REQ. LENGTH * A2= RESERVED * A4= RESERVED * A5= RESERVED * A6= RESERVED * A8= VDU-ECB * A11= CREDIT WORK AREA * A13= RESERVED * ************************************************* DISCHA EQU * LC A2,TCT01,A11 CCK A2,VDUCOD PRINTER UNPACK? RF(NE) DISC95 YES LD A8,ECBVDU,A11 ST A1,ECBRL,A8 LDKL A1,/101 START AT LINE 1 POS. 1 ST A1,ECBCW,A8 LDKL A1,/100 LDR A7,A4 CURSOR POS. DISC10 EQU * CWK A7,LLINE NEXT LINE? RF(L) DISC90 NO ADS A1,ECBCW,A8 MOVE TO NEXT LINE SUKL A7,LLINE RB DISC10 DISC90 EQU * ADS A7,ECBCW,A8 POSITION IN LINE LDK A7,/8B SET CURSOR AND WRITE LKM DATA 1 DISC95 EQU * RTN A14 END