home *** CD-ROM | disk | FTP | other *** search
Text File | 1987-05-21 | 97.5 KB | 3,194 lines |
- TITLE 'SEE.ALC - PC/370 SCREEN EDITOR AND EMULATOR'
- *
- * AUTHOR. Don Higgins.
- *
- * DATE. 04/06/86.
- *
- * REMARKS. PC/370 screen editor and emulator.
- *
- * COPYRIGHT. Copyright (c) 1987 Donald S. Higgins.
- *
- * This source program and its derivative object and
- * machine code programs may be freely copied and
- * distributed provided this copyright message in the
- * source program and in the object program help screen
- * is not removed or modified, and that no fee is charged.
- * The remainder of the program may be modified as you see
- * fit to customize it to your specific needs. If you send
- * me useful enhancements, I will include them in the next
- * release of PC/370 with appropriate credits. If you find
- * PC/370 of value, support continued freeware updates by
- * sending 45 dollars to:
- *
- * Don Higgins
- * 6365 - 32 Avenue North
- * St. Petersburg, Florida 33710
- *
- * MAINTENANCE
- *
- * 07/19/86 DSH TESTING OF SEE R1.0 VERSION COMPLETED AND READY FOR SHIP WITH
- * RELEASE R1.2 OF PC/370.
- * 09/11/86 DSH SEE RELEASE 1.1
- * 1. ADD BOX MODE LOGIC TO CONNECT SINGLE AND DOUBLE LINES AT
- * INTERSECTIONS.
- * 2. MODIFY F1 SCREEN FOR FPC HELP # FOR INTERNAL USE.
- * 3. SET FILE DEFAULT TO TEST.ALC INSTEAD OF BLANK NAME.
- * 09/16/86 DSH SEE RELEASE 1.2
- * 1. ADD ALT-F10 BOX CONNECT MODE TOGGLE KEY.
- * 09/19/86 DSH SEE RELEASE 1.3
- * 1. FIX SINGLE LINE CROSSING VERTICAL DOUBLE LT TO RT.
- * 04/28/87 DSH SEE RELEASE 1.4
- * 1. FIX SEARCH AND REPLACE TO SET FILEMOD IF MATCH.
- * 2. STARTUP IN INSERT MODE FOR NEW FILE.
- * 3. ALLOW 132 BYTE INPUT RECORDS TRUNCATED TO 80.
- * 04/29/87 DSH SEE RELEASE 2.0
- * 1. CONVERT TO PC/370 RELEASE 2.0 WITH NEW FILE PATHING
- * I/O SUPPORT WITH NEW DCB.
- * 2. USE GETMAIN/FREEMAIN IN VIRTUAL ADDRESS SPACE INSTEAD
- * OF CROSS MEMORY MVCP/MVCS.
- * 05/21/87 DSH - UPDATE SOURCE AND HELP SCREEN MESSAGES
- *
- * INPUT
- *
- * 1. A>SEE file1 file2
- *
- * file1 - Name of new or existing ASCII text file to edit.
- * Maximum size is about 512k with 640k memory.
- * The default suffix is ALC.
- *
- * file2 - Optional name of new or existing keyboard simulator file.
- * The default suffix is KSF. If the file is new all keystrokes
- * entered during the current edit session will be recorded in
- * the file. If the file is old, the entire edit session will
- * be simulated using the keystrokes in the file. This feature
- * is used to run validation tests on the editor. It can also
- * be used to create animated displays for demonstrations.
- *
- * OUTPUT
- *
- * 1. Input file1 will be replaced with new file with changes.
- * 2. Old file1 will be renamed with suffix of (.BAK).
- * 3. Keyboard controls are designed to be compatible with
- * both TURBO PASCAL and PFS:WRITE. For definitions see
- * F1 and F2 help screen text in data section of program.
- * (you can search via (F7) for label F1SC and F2SC)
- *
- *
- SEE CSECT
- USING *,R15
- STM R14,R12,12(R13)
- BAL R15,START
- DROP R15
- DC 18F'0'
- START EQU *
- ST R13,4(R15)
- ST R15,8(R13)
- LR R13,R15
- USING SEE+8,R13
- LA R8,2048(R13)
- LA R8,2048(R8)
- USING SEE+8+4096,R8
- LA R9,2048(R8)
- LA R9,2048(R9)
- USING SEE+8+4096+4096,R9
- LA R10,2048(R9)
- LA R10,2048(R10)
- USING SEE+8+4096+4096+4096,R10
- BAL R14,GETPARM PROCESS PARM FILE NAMES
- LTR R15,R15
- BNZ SEEEND
- BAL R14,INIT INITIALIZE SCREEN AND POINTERS
- LTR R15,R15
- BNZ SEEEND
- BAL R14,LOADFILE LOAD FILE INTO EXTENDED STORAGE
- CLI EOJ,TRUE
- BE SEEEND
- BAL R14,EDITFILE EDIT FILE IN FULL SCREEN MODE
- BAL R14,SAVEFILE SAVE FILE IF MODIFIED
- BAL R14,TERMKSF TERMINATE KSF IF ACTIVE
- SEEEND EQU *
- LA R0,X'0003' AH=0,AL=2 FOR 25X80 COLOR MODE
- SVC VIDEO SET MODE AND CLEAR SCREEN (TECH. A-48)
- LA R0,X'0200' AH=2 SET CURSOR
- LA R1,0 BH=0 PAGE
- LA R15,X'0000' DH=ROW,DL=COL
- SVC VIDEO SET CURSOR TO UPPER LEFT CORNER
- LA R0,X'0920' AH=10, AL=SPACE
- LA R1,X'0000' BH=0 PAGE,BL=ATTRIB.
- LA R1,X'07' CLEAR SCREEN WITH BLACK ON WHITE
- LA R14,25*80 CHARACTERS ON DATA LINES
- SVC VIDEO CLEAR DATA LINES
- LA R0,X'0B00'
- SR R1,R1
- SVC VIDEO RESET BACKGROUND TO MS-DOS BLACK
- SVC EXIT EXIT TO MS-DOS
- TITLE 'GETPARM - MOVE PARM TO DCB'
- GETPARM EQU *
- SR R2,R2
- IC R2,TBUFF
- LR R4,R2 SAVE ELGNTH
- LA R1,TBUFF+1
- SVC ASCEBC TRANSLATE COMMAND TO EBCDIC
- GETDSN1 EQU *
- LA R3,TBUFF+1 R3 = ADDRESS COMMAND PATH/FILENAME
- CH R4,=H'1'
- BL GETDSN2 USE DEFAULT IF NO FILENAME
- LA R5,DSN1 R5 = SYSUT1 PATH/FILENAME
- SR R6,R6 R6 = ADDR OF SUFFIX . IF ANY
- SKPLSP1 EQU * SKIP LEADING SPACES
- CLI 0(R3),C' '
- BNE MVCDSN1
- LA R3,1(R3)
- BCT R4,SKPLSP1
- B KSDONE USE DEFAULT IF ALL BLANKS
- MVCDSN1 EQU *
- CLI 0(R3),C' ' IF SPACE, CHK SUFFIX
- BE CHKALC
- MVC 0(1,R5),0(R3)
- CLI 0(R5),C'.'
- BNE SKPPD1
- LR R6,R5
- ST R6,ATYPE1 SAVE ADDRESS OF .XXX IN DSN1
- SKPPD1 EQU *
- LA R5,1(R5)
- SKPBLK1 LA R3,1(R3)
- BCT R4,MVCDSN1
- CHKALC EQU *
- MVI 0(R5),X'00' ADD ZERO BYTE
- LTR R6,R6
- BZ ADDALC
- CLC 0(4,R6),=C'.ALC'
- BE GETDSN2
- MVI ALC,FALSE
- B GETDSN2
- ADDALC EQU *
- ST R5,ATYPE1 SAVE ADDRESS OF .ALC ADDED TO DSN1
- MVC 0(4,R5),=C'.ALC'
- MVI 4(R5),X'00' ADD ZERO BYTE
- *
- * PROCESS SECOND FILE PARM IF PRESENT AS KEYBOARD SIMULATOR FILE
- *
- GETDSN2 EQU *
- CH R4,=H'1'
- BL KSDONE IF NO SECOND FILE, EXIT NOW
- LA R5,DSN2 R5 = SYSUT2 PATH/FILENAME
- SR R6,R6 R6 = ADDR OF SUFFIX . IF ANY
- MVCDSN2 EQU *
- CLI 0(R3),C' ' IF SPACE, CHK SUFFIX
- BE SKPBLK2
- MVC 0(1,R5),0(R3)
- CLI 0(R5),C'.'
- BNE SKPPD2
- LR R6,R5
- SKPPD2 EQU *
- LA R5,1(R5)
- SKPBLK2 LA R3,1(R3)
- BCT R4,MVCDSN2
- CHKKSF EQU *
- MVI 0(R5),X'00' ADD ZERO BYTE
- LTR R6,R6
- BNZ SKPTYP2
- ADDKSF EQU *
- MVC 0(4,R5),=C'.KSF'
- MVI 4(R5),X'00' ADD ZERO BYTE
- SKPTYP2 EQU *
- MVI KSMODE,KSREAD ASSUME READ MODE
- LA R2,SYSUT2
- USING IHADCB,R2
- SVC SEARCH
- CLM R0,1,=X'00'
- BE KSOPEN
- MVI KSMODE,KSWRITE IF NOT FOUND, SET WRITE MODE
- MVC KSNEXT,=A(KSREC) RESET POINTER FOR WRITE
- MVI MACRF,C'P' RESET DCB TO PUT
- DROP R2
- KSOPEN EQU *
- ******* MVI AUDIT,TRUE SET DEFAULT AUDIT MODE FOR EMULATION
- LA R2,SYSUT2
- SVC OPEN
- KSDONE EQU *
- CLI KSMODE,KSREAD
- BE KSSKPOFF
- SVC TRACE
- DC C'IOF ' TURN KEYBOARD INTERRUPTS OFF
- KSSKPOFF EQU *
- SR R15,R15
- BR R14
- TITLE 'INIT - INITIALIZE SCREEN AND POINTERS'
- INIT EQU *
- ST R14,INITSV14
- LA R0,X'0003' AH=0,AL=2 FOR 25X80 COLOR MODE
- SVC VIDEO SET MODE AND CLEAR SCREEN (TECH. A-48)
- LA R0,X'0200' AH=2 SET CURSOR
- LA R1,0 BH=0 PAGE
- LA R15,X'0000' DH=ROW,DL=COL
- SVC VIDEO SET CURSOR TO UPPER LEFT CORNER
- LA R0,X'0920' AH=10, AL=SPACE
- LA R1,X'0000' BH=0 PAGE,BL=ATTRIB.
- IC R1,ATTRIB
- LA R14,25*80 CHARACTERS ON DATA LINES
- SVC VIDEO CLEAR DATA LINES
- LA R0,X'0B00' AH=11 FOR SET COLOR PALETTE (TECH. A-49)
- SR R1,R1
- IC R1,ATTRIB
- SRL R1,4
- N R1,=X'00000007' TURN OFF BLINK BIT
- SVC VIDEO SET BACKGROUND COLOR TO SAME AS ATTRIB
- L R1,=X'00FFFFFF'
- SVC GETMAIN
- CLM R0,1,=X'00'
- BE E02 VERIFY MAX. MEMORY SET IN R1
- SH R1,=AL2(LBUFFS) REDUCE ALLOCATED MEMORY FOR BUFFERS
- BNP E02
- SVC GETMAIN ALLOCATE IT
- ST R2,ASCB ALLOCATE AREA FOR SCREEN
- SH R1,=AL2(24*LSCB) REDUCE ALLOCATED BY SCB'S
- BNP E02
- AH R2,=AL2(23*LSCB)
- ST R2,MAXSCB ADDR OF LAST SCB
- AH R2,=AL2(LSCB) UPDATE R2 TO START TO TEXT AREA
- ST R1,GFQEL SET LENGTH OF EXTENDED STORAGE
- ST R2,GFQEA SET ADDRESS
- ST R2,MINMEM SAVE LOW LIMIT
- AR R2,R1
- ST R2,MAXMEM SAVE MAX LIMIT
- SR R0,R0
- D R0,=A(LLB)
- ST R1,FMAXLINE SET MAX LINES POSSIBLE
- LA R1,F1SC
- LA R2,F1SCEND-F1SC
- SVC EBCASC
- L R1,=A(F2SC)
- LA R2,F2SCEND-F2SC
- SVC EBCASC
- L R14,INITSV14
- BR R14
- TITLE 'LOADFILE - READ FILE INTO LB CHAIN IN EXTENDED MEMORY'
- LOADFILE EQU *
- ST R14,LOADSV14
- MVI EOF1,FALSE
- MVC STATNAME,DSN1 MOVE DSN TO STATUS LINE
- LA R3,STATLINE
- LA R4,L'STATLINE
- BAL R14,PUTSTAT PRINT ENTIRE STATUS LINE ONCE
- BAL R14,KEYSTATS
- BAL R14,CLEAR
- LA R2,F1SC
- L R3,=A(F1SCEND)
- BAL R14,HELPSCRN
- LA R2,SYSUT1
- SVC SEARCH
- CLM R0,1,=X'00' DOES FILE EXIST
- BNE NULLFILE NO, GO BUILD NEW FILE
- LA R2,SYSUT1
- SVC OPEN
- MVC WLBPREV,=A(0)
- L R12,MINMEM
- USING LB,R12
- LA R1,WLBLINE
- LA R2,SYSUT1
- ST R12,GLBFIRST
- LA R5,100
- LOADLOOP EQU *
- LA R3,LLB(R12)
- ST R3,WLBNEXT
- CL R3,MAXMEM VERIFY NOT OUT OF MEMORY
- BNL LOADERR
- SVC GET READ RECORD INTO LB
- CLI WLBLINE,ASCTAB IS THERE A TAB TO COL. 10
- BNE LOADSKPT
- MVC SAVETEXT,WLBLINE+1
- MVC WLBLINE(9),=9AL1(ASCBLK) REPLACE TAB WITH 9 SPACES
- MVC WLBLINE+9(L'WLBLINE-9),SAVETEXT
- LOADSKPT EQU *
- MVC LB(LLB),WLB MOVE LB TO MEMORY
- ST R12,WLBPREV
- LR R12,R3
- BCT R5,LOADLOOP
- AP PTOTAL,=P'100'
- MVC STATREC,=X'402020202020'
- ED STATREC,PTOTAL
- LA R3,STATREC
- LA R4,L'STATREC
- BAL R14,PUTSTAT
- ZAP PLSTLINE,PTOTAL
- BAL R14,PUTPCT
- LA R1,WLBLINE
- LA R2,SYSUT1
- LA R5,100
- B LOADLOOP
- NULLFILE EQU *
- MVI KBINS,INSSTATE START IN INSERT FOR NEW FILE
- BAL R14,NEWFILE
- LA R1,=CL20'NEW FILE'
- BAL R14,PUTMSG
- B LOADSKPC
- LOADERR EQU *
- MVI EOJ,TRUE SHUT DOWN IF LOAD ERR
- LA R1,=CL20'* OUT OF MEMORY *'
- BAL R14,PUTMSG
- BAL R14,GETKEY
- B LOADSKPC
- EOFUT1 EQU * NORMAL END OF FILE ON INPUT
- CVD R5,PWORK
- ZAP PLSTLINE,=P'100'
- SP PLSTLINE,PWORK
- AP PLSTLINE,PTOTAL CALC TOTAL LINES LOADED
- L R12,WLBPREV
- MVC LBNEXT,=A(0) RESET NEXT IN LAST LB
- ST R12,GLBLAST
- ST R3,GFQEA UPDATE FREE MEMORY START
- L R4,MAXMEM
- SR R4,R3
- ST R4,GFQEL UPDATE REMAINING FREE LENGTH
- ZAP PCUR,=P'1'
- MVC GLBCUR,GLBFIRST RESET TO FIRST LB
- LA R2,SYSUT1
- SVC CLOSE
- BAL R14,PUTPCT
- LOADSKPC EQU *
- BAL R14,AUDITMS
- L R14,LOADSV14
- BR R14
- TITLE 'EDITFILE ENTER FULL SCREEN MODE TO BROWZE/CHANGE FILE'
- EDITFILE EQU *
- ST R14,EDITSV14
- LA R1,=CL20'EDIT'
- BAL R14,PUTMSG
- BAL R14,DISPLAY DISPLAY 24 LINES PLUS STATUS
- EDITLOOP EQU *
- BAL R14,GETKEY GET NEXT KEY INPUT
- SR R2,R2 CLEAR FUNCTION CODE REG.
- TRT KEY,KEYTAB
- L R0,WAITLOOP LOOP ON BCT FOR COUNT IN WAITLOOP
- BCT R0,*
- L R15,KRTAB(R2)
- BALR R14,R15 PROCESS KEY
- BAL R14,AUDITSCB AUDIT SCB'S IF AUDIT ON
- CLI EOJ,TRUE IS IT END OF JOB (ESCAPE KEY)
- BNE EDITLOOP
- L R14,EDITSV14
- BR R14
- TITLE 'SAVEFILE RENAME OLD FILE AND WRITE NEW FILE IF CHANGED'
- SAVEFILE EQU *
- ST R14,SAVESV14
- ST R5,SAVEROW
- ST R6,SAVECOL
- ST R7,SAVESCB
- LA R1,=CL20'SAVING'
- BAL R14,PUTMSG
- BAL R14,UPDATE UPDATE FILE WITH ANY CHANGES ON SCREEN
- CLI FILEMOD,TRUE HAS FILE CHANGED
- BNE SAVESKIP NO, EXIT NOW
- MVI EOF1,FALSE
- MVI SYSUT1+(MACRF-IHADCB),C'P' CHANGE DCB FROM GET TO PUT
- CLI FIRSTSAV,TRUE
- BNE SAVESKPR IF NOT FIRST SAVE, SKIP RENAME
- MVI FIRSTSAV,FALSE
- LA R2,SYSUT1
- USING IHADCB,R2
- SVC SEARCH
- CLM R0,1,=X'00'
- BNE SAVESKPR IF NO OLD FILE, SKIP
- L R1,ATYPE1
- MVC SAVETYPE,1(R1) SAVE ORIG. TYPE
- MVC 1(3,R1),=C'BAK'
- SVC SEARCH
- CLM R0,1,=X'00'
- BNE SKPDEL IF NO BKP, SKIP DELETE
- SVC DELETE DELETE OLD BACKUP IF PRESENT
- SKPDEL EQU *
- MVC REN1(64),DSN1 COPY FILE NAME TO RENAME
- L R1,ATYPE1
- MVC 1(3,R1),SAVETYPE RESTORE OLD FILE NAME
- SVC RENAME RENAME OLD FILE TO BKP
- SAVESKPR EQU *
- LA R2,SYSUT1
- SVC OPEN
- L R12,GLBFIRST
- USING LB,R12
- LA R5,100
- ZAP PTOTAL,=P'0'
- XC FINDKEY,FINDKEY
- MVI FINDKEY+ASCCR,X'FF'
- SAVELOOP EQU *
- LTR R12,R12
- BZ SAVEEXIT
- MVC WLB(LLB),LB MOVE NEXT LB TO WORKING STORAGE
- MVC WLBLINE+L'WLBLINE(2),=AL1(ASCCR,ASCLF) RESET PAD
- TRT WLBLINE(81),FINDKEY FIND END OF RECORD
- LA R2,1(R1)
- S R2,=A(WLBLINE)
- SAVEBLKL EQU *
- BCTR R1,0 BACKUP TO FIRST NON-BLANK
- CLI 0(R1),ASCBLK
- BNE SAVEBLKE
- BCT R2,SAVEBLKL
- SAVEBLKE EQU *
- MVC 1(2,R1),=AL1(ASCCR,ASCLF) PUT CR,LF AFTER LAST CHAR
- LA R1,WLBLINE
- CLI ALC,TRUE IS FILE TYPE ALC
- BNE SAVESKPT
- CLC WLBLINE(9),=9AL1(ASCBLK) ARE THERE 9 LEADING BLANKS
- BNE SAVESKPT
- MVI WLBLINE+8,ASCTAB INSERT TAB
- LA R1,WLBLINE+8 WRITE FROM TAB
- SAVESKPT EQU *
- LA R2,SYSUT1
- SVC PUT PUT RECORD
- L R12,WLBNEXT
- BCT R5,SAVELOOP REPEAT 100 TIMES
- AP PTOTAL,=P'100'
- MVC STATREC,=X'402020202020'
- ED STATREC,PTOTAL
- LA R3,STATREC
- LA R4,L'STATREC
- BAL R14,PUTSTAT PRINT RECORD # EVERY 100 RECORDS
- LA R5,100
- B SAVELOOP
- SAVEEXIT EQU *
- LA R2,SYSUT1
- SVC CLOSE
- MVI FILEMOD,FALSE
- SAVESKIP EQU *
- L R5,SAVEROW
- L R6,SAVECOL
- L R7,SAVESCB
- L R14,SAVESV14
- BR R14
- TITLE 'DISPLAY - DISPLAY 24 LINES AT CURRENT POINT IN FILE'
- DISPLAY EQU *
- ST R14,DISPSV14
- MVC SAVBLKLB,BLKLABEL SAVE BLKLABEL MODE
- BAL R14,UPDATE UPDATE SCREEN LINES IN EXTENDED STORAGE
- BAL R14,CLEAR CLEAR DISPLAY AND RESET CURSOR
- L R12,GLBCUR R12=A(CURRENT LB IN EXTENDED MEMORY)
- LTR R12,R12
- BNZ DISPOK
- BAL R14,NEWFILE INITIALIZE EMPTY FILE
- L R12,GLBCUR
- DISPOK EQU *
- SR R5,R5 RESET ROW
- USING LB,R12
- L R7,ASCB SCREEN TABLE
- USING SCB,R7
- DISPLINE EQU *
- LTR R12,R12 IS LB ADDRESS GT 0
- BZ DISPEXIT NO, GO EXIT
- ST R12,SCBADDR SAVE ADDRESS OF LB
- MVC SCBLB(LLB),LB MOVE CURRENT LINE TO SCB
- MVI SCBMOD,FALSE SET MODIFY FALSE
- SR R3,R3 SET STARTING COL.
- BAL R14,PUTLINE
- MVI BLKLABEL,FALSE TEMP TURN OFF BLKLABEL AFTER FIRST
- NEXTLINE EQU * LINE TO ONLY MARK FIRST LINE
- ST R5,LASTROW SET LAST ROW
- ST R7,LASTSCB SET LAST SCB ADDR
- LA R0,X'0100'
- SVC KEYBOARD
- STCM R0,4,KEY PUT LOW FLAGS BYTE IN KEY
- TM KEY,X'40' IS THERE A KEY WAITING
- BZ DISPEXIT YES, EXIT NOW WITH SHORT SCREEN
- LA R5,X'100'(R5) INCR ROW
- LA R6,X'00' RESET COL
- L R12,SCBNEXT ADDRESS OF NEXT LB
- LA R7,LSCB(R7) INCR SCREEN CONTROL BLOCK
- CL R5,MAXROW
- BNH DISPLINE
- DISPEXIT EQU *
- MVC BLKLABEL,SAVBLKLB RESTORE BLKLABEL MODE
- LA R5,0 RESET ROW,COL TO 0,0
- LA R6,0
- L R7,ASCB RESET SCB ADDRESS
- ZAP PCURLINE,PCUR
- ZAP PCOL,=P'1'
- BAL R14,SETCUR RESET CURSOR
- L R14,DISPSV14
- BR R14
- TITLE 'SETCUR - SET CURSOR ON NEW DISPLAY'
- SETCUR EQU *
- ST R14,SETCSV14
- CLC PCURLINE,PCURLAST
- BE SCSKPREC
- MVC PCURLAST,PCURLINE
- MVC STATREC,=X'402020202120'
- ED STATREC,PCURLINE
- LA R3,STATREC
- LA R4,L'STATREC
- BAL R14,PUTSTAT
- SCSKPREC EQU *
- CLC PCOL,PCOLLAST
- BE SCSKPCOL
- MVC PCOLLAST,PCOL
- MVC STATCOL,=X'40202120'
- ED STATCOL,PCOL
- LA R3,STATCOL
- LA R4,L'STATCOL
- BAL R14,PUTSTAT
- SCSKPCOL EQU *
- LA R15,0(R5,R6)
- LA R0,X'0200' AH=2 SET CURSOR
- LA R1,0 BH=0 PAGE
- SVC VIDEO
- L R14,SETCSV14
- BR R14
- TITLE 'NEWFILE - INITIALIZE NEW FILE IN MEMORY'
- NEWFILE EQU *
- ST R14,NEWFSV14
- BAL R14,GETNEWLB
- LTR R15,R15
- BZ E03
- L R12,ANEWLB
- ST R12,GLBCUR
- ST R12,GLBFIRST
- ST R12,GLBLAST
- ZAP PCUR,=P'1'
- ZAP PLSTLINE,=P'1'
- MVC WLBPREV,=A(0)
- MVC WLBNEXT,=A(0)
- MVC WLBLINE,=AL1(ASCCR,ASCLF)
- BAL R14,CHKADDR
- MVC LB(LLB),WLB INITIALIZE EMPTY LINE IN MEMORY
- L R14,NEWFSV14
- SR R15,R15
- BR R14
- TITLE 'PUTLINE - DISPLAY CURRENT LINE'
- *
- * R3 = STARTING COLUMN
- *
- * IF IN MARKING MODE, USE REVERSE VIDEO AND SET ENDING BLOCK
- *
- PUTLINE EQU *
- ST R14,PUTLSV14
- IC R0,ATTRIB
- STC R0,ATTSAVE
- CLI BLKLABEL,MARK
- BNE PUTLINE1
- MVC BLK2LB,SCBADDR UPDATE ENDING BLOCK
- SLL R0,4
- LR R1,R0
- N R1,=X'00000070' BG=FG (TURN OFF HIGH INTENSITY/BLINK)
- SRL R0,8
- N R0,=X'00000007' FG=BG
- OR R1,R0
- STC R1,ATTRIB
- OI ATTRIB,X'08' TURN ON INTENSITY FOR REVVERSE FG
- PUTLINE1 EQU *
- ****************************************************************
- *DISPCHAR EQU * *
- * CLI 0(R2),ASCBLK IS IT END OF LINE *
- * BL DSLNEXIT *
- * MICRO LA R0,X'0200' AH=2 SET CURSOR *
- * CODED LA R1,0 BH=0 PAGE *
- * AS LA R15,0(R5,R3) DH=ROW,DL=COL *
- * PC/370 SVC VIDEO *
- * SVC 24 LA R0,X'0900' AH=9 *
- * FOR LA R1,X'0000' BH=0 PAGE,BL=ATTRIB.(WHITE ON BLUE) *
- * SPEED IC R1,ATTRIB BL=ATRIBUTE OF CHAR. *
- * ON LA R14,1 CX=(COUNT OF CHAR TO WRITE) *
- * MOST IC R0,0(R2) AL=CHAR *
- * FREQ. SVC VIDEO DISPLAY CHAR *
- * VIDEO LA R3,1(R3) INCR COL *
- * FUNCT. LA R2,1(R2) INCR CHAR *
- * B DISPCHAR REPEAT FOR LINE *
- *DSLNEXIT EQU * *
- ****************************************************************
- LA R2,SCBLINE(R3)
- SR R1,R1
- IC R1,ATTRIB PUT BH=0 AND BL=ATTIRBUTE IN R1
- LA R15,0(R5,R3) PUT ROW AND COL IN R15
- *****************************************************************
- SVC PRINTTXT PRINT LINE AT (R2) AT (R15) ON SCREEN
- *****************************************************************
- STC R15,SCBCOL UPDATE ENDING COL. (NOTE SVC USES R15
- SR R1,R1 INSETEAD OF R3)
- IC R1,SCBCOL
- LA R1,SCBLINE(R1)
- MVC 0(2,R1),=AL1(ASCCR,ASCLF) ADD CR,LF
- LA R0,X'0200' AH=2 SET CURSOR
- LA R1,0 BH=0 PAGE
- LA R15,0(R5,R6) DH=ROW,DL=COL
- SVC VIDEO
- MVC ATTRIB,ATTSAVE RESET COLORS
- L R14,PUTLSV14
- BR R14
- TITLE 'PUTMSG - DISPLAY 20 CHAR MSG AT R1'
- PUTMSG EQU *
- MVC STATMSG,0(R1)
- LA R3,STATMSG
- LA R4,L'STATMSG
- B PUTSTAT
- TITLE 'PUTSTAT - DISPLAY DATA ON STATUS LINE'
- *
- * R3 = START OF TEXT IN STATUS LINE
- * R4 = LENGTH OF TEXT
- *
- PUTSTAT EQU *
- ST R14,PUTSSV14
- LR R1,R3
- LR R2,R4
- SVC EBCASC
- LR R2,R3
- SR R1,R1
- STC R1,0(R3,R4) SET EOR FOR PRINTTXT
- IC R1,ATTRIB
- LR R15,R3
- S R15,=A(STATLINE-STATRC0)
- SVC PRINTTXT
- LA R0,X'0200' AH=2 SET CURSOR
- LA R1,0 BH=0 PAGE
- LA R15,0(R5,R6) DH=ROW,DL=COL
- SVC VIDEO
- L R14,PUTSSV14
- BR R14
- TITLE 'NEWSTAT - REFRESH STATUS LINE WITH CURRENT ATTRIBUTE'
- NEWSTAT EQU *
- ST R14,PUTSSV14
- LA R2,STATLINE
- LA R1,L'STATLINE
- NEWSTAT1 EQU *
- CLI 0(R2),ASCBLK
- BNL NEWSTAT2
- MVI 0(R2),ASCBLK CLEAR OUT INDIVIDUAL FIELD STOPS
- NEWSTAT2 EQU *
- LA R2,1(R2)
- BCT R1,NEWSTAT1
- SR R1,R1
- IC R1,ATTRIB
- LA R2,STATLINE
- L R15,=A(STATRC0)
- SVC PRINTTXT
- LA R0,X'0200' AH=2 SET CURSOR
- LA R1,0 BH=0 PAGE
- LA R15,0(R5,R6) DH=ROW,DL=COL
- SVC VIDEO
- L R14,PUTSSV14
- BR R14
- TITLE 'PUTPCT - UPDATE % OF MEMORY CAPACITY IN USE'
- PUTPCT EQU *
- ST R14,PPCTSV14
- ZAP PWORK,PLSTLINE
- CVB R1,PWORK
- MH R1,=H'100'
- SR R0,R0
- D R0,FMAXLINE
- CVD R1,PWORK
- MVC STATPCT,=X'40202120'
- ED STATPCT,PWORK+6
- LA R3,STATPCT
- LA R4,L'STATPCT+1
- MVI STATPCT+L'STATPCT,C'%'
- BAL R14,PUTSTAT
- L R14,PPCTSV14
- BR R14
- TITLE 'CLEAR - CLEAR SCREEN AND SET CURSOR TO UPPER LEFT'
- CLEAR EQU *
- ST R14,CLRSV14
- LA R0,X'0200' AH=2 SET CURSOR
- LA R1,0 BH=0 PAGE
- LA R15,X'0000' DH=ROW,DL=COL
- SVC VIDEO SET CURSOR TO UPPER LEFT CORNER
- LA R0,X'0920' AH=10, AL=SPACE
- LA R1,X'0000' BH=0 PAGE,BL=ATTRIB.
- IC R1,ATTRIB
- LA R14,24*80 CHARACTERS ON DATA LINES
- SVC VIDEO CLEAR DATA LINES
- L R14,CLRSV14
- BR R14
- TITLE 'GETKEY - GET NEXT KEY INPUT'
- GETKEY EQU *
- ST R14,GETKSV14
- MVC LASTKEY,KEY SAVE LAST KEY
- CLI KSMODE,KSREAD
- BE KSGET
- CHKNOW EQU *
- LA R0,X'0100'
- SVC KEYBOARD
- STCM R0,4,KEY PUT LOW FLAGS BYTE IN KEY
- TM KEY,X'40' IS THERE A KEY WAITING
- BZ GETNOW YES, GO GET KEY NOW
- BAL R14,KEYSTATS NO, GO UPDATE KEY STATUS FIRST
- B CHKNOW
- GETNOW EQU *
- LA R0,X'0000'
- SVC KEYBOARD GET KEY FROM KEYBOARD BIA BIOS
- STC R0,KEY
- CLI KEY,X'00' IS IT NULL CODE
- BE KEYEXT YES, GET EXTENDED CODE
- CLI KEY,X'80' IS IT ASCII 0-127
- BL KEYOK YES, OK
- MVI KEY,X'00' NO, MAKE IT NULL
- B KEYOK
- KEYEXT EQU *
- STCM R0,2,KEY STORE AH EXTENDED CODE
- OI KEY,X'80' FORCE EXTENDED CODES TO 128+
- KEYOK EQU *
- CLI KSMODE,KSWRITE IS KEYBOARD FILE BEING WRITTEN
- BNE GETKEXIT NO, EXIT
- KSPUT EQU * YES, PUT KEY
- L R1,KSNEXT
- MVC 0(1,R1),KEY MOVE KEY TO KS OUTPUT RECORD
- LA R1,1(R1)
- ST R1,KSNEXT
- CL R1,=A(KSRECEND)
- BL GETKEXIT
- LA R1,KSREC
- ST R1,KSNEXT RESET NEXT POINTER
- LA R2,SYSUT2
- SVC PUT WRITE KS RECORD
- B GETKEXIT
- KSGET EQU *
- L R1,KSNEXT
- LA R1,1(R1)
- ST R1,KSNEXT
- CL R1,=A(KSRECEND)
- BL KSGETOK
- LA R1,KSREC
- ST R1,KSNEXT
- LA R2,SYSUT2
- SVC GET READ KS RECORD
- KSGETOK EQU *
- MVC KEY,0(R1)
- GETKEXIT EQU *
- L R14,GETKSV14
- BR R14
- TITLE 'AUDITSCB - AUDIT SCB'S AGAINST LB'S'
- AUDITSCB EQU *
- CLI AUDIT,TRUE
- BNER R14
- STM R0,R3,SAVER0R3
- LA R0,0 ERR 0
- LTR R5,R5
- BM AUDITBUG ROW LT 0
- CL R5,MAXROW
- BH AUDITBUG ROW GT 23
- LA R0,10 ERR 10
- LA R1,LASTROW
- LA R2,LASTSCB
- CL R5,LASTROW
- BH AUDITBUG ROW GT LASTROW
- CL R7,LASTSCB
- BH AUDITBUG ASCB GT LASTSCB
- LA R0,11 ERR 11
- LR R1,R5
- SRL R1,8
- MH R1,=AL2(LSCB)
- A R1,ASCB
- CLR R1,R7 ROW NE ASCB
- BNE AUDITBUG
- L R1,ASCB
- SR R2,R2
- AUDITL EQU *
- L R12,SCBADDR-SCB(R1)
- MVC WLB(8),LB
- CLC SCBLB-SCB(8,R1),WLB CHECK LB POINTERS
- LA R0,1 ERR 1
- BNE AUDITBUG SCB PREV/NEXT NE LB PREV/NEXT
- LR R3,R1
- LA R2,ROWINC(R2)
- LA R1,LSCB(R1)
- CL R2,LASTROW
- BH AUDITE
- CLC SCBNEXT-SCB(4,R3),SCBADDR-SCB(R1)
- LA R0,2 ERR 2
- BNE AUDITBUG SCBNEXT EQ SCBADDR OF NEXT
- CLC SCBPREV-SCB(4,R1),SCBADDR-SCB(R3)
- BNE AUDITBUG SCBPREV EQ SCBADDR OF PREV
- B AUDITL
- AUDITE EQU *
- LM R0,R3,SAVER0R3
- BR R14
- AUDITBUG EQU * ENTER PC/370 DEBUG WITH ERR IN R0
- SVC TRACE
- DC C'BUG '
- B *
- TITLE 'AUDITMS - AUDIT MAIN STORAGE LBS'
- AUDITMS EQU *
- CLI AUDIT,TRUE
- BNER R14
- STM R0,R3,SAVER0R3
- ZAP PCHKLINE,=P'0'
- MVC WLBADDR,GLBFIRST
- L R12,WLBADDR
- LTR R12,R12
- BZ AUDITMSE
- MVC WLB(LLB),LB
- LA R0,3 ERR 3
- LA R1,WLBADDR
- CLC WLBPREV,=A(0)
- BNE AUDITBUG FIRST LBPREV EQ 0
- LA R0,4 ERR 4
- LA R3,TLBADDR
- AUDITMSL EQU *
- AP PCHKLINE,=P'1'
- MVC TLBADDR,WLBNEXT
- L R12,TLBADDR
- LTR R12,R12
- BZ AUDITMSE
- MVC TLB(LLB),LB
- CLC WLBADDR,TLBPREV
- BNE AUDITBUG LP(I) EQ LPREV(I+1)
- MVC WLBADDR,TLBADDR
- MVC WLB(LLB),TLB
- B AUDITMSL
- AUDITMSE EQU *
- LA R0,5 ERR 5
- L R1,WLBADDR
- L R3,GLBLAST
- CLC WLBADDR,GLBLAST
- BNE AUDITBUG GLBLAST EQ LP(LAST)
- LA R0,6 ERR 6
- LA R1,PCHKLINE
- LA R3,PLSTLINE
- CP PCHKLINE,PLSTLINE
- BNE AUDITBUG PLSTLINE EQ LB COUNT
- LM R0,R3,SAVER0R3
- BR R14
- TITLE 'TERMKSF - FLUSH AND CLOSE KSF FILE IF ACTIVE'
- TERMKSF EQU *
- ST R14,TERMSV14
- CLI KSMODE,KSOFF IS KEYBOARD FILE IN USE
- BE TERMKSFE NO, EXIT NOW
- CLI KSMODE,KSWRITE IS IT WRITE
- BNE TERMKSFC NO, GO CLOSE IT
- L R1,KSNEXT
- CL R1,=A(KSREC) IS THERE DATA IN LAST RECORD
- BE TERMKSFC NO, GO CLOSE IT
- LA R1,KSREC
- LA R2,SYSUT2
- SVC PUT YES, WRITE LAST KS RECORD
- TERMKSFC EQU *
- LA R2,SYSUT2
- SVC CLOSE CLOSE KS FILE
- TERMKSFE EQU *
- L R14,TERMSV14
- BR R14
- TITLE 'KEYSTATS - UPDATE CAPS, INSERT, NUMLOCK STATUS'
- KEYSTATS EQU *
- ST R14,KEYSSV14
- LA R0,X'0200' AH=2 RETURN SHIFT STATUS
- SVC KEYBOARD READ SHIFT STATUS INTO AL (TECH. A-26)
- ******
- *
- * NOTE INS STATE IS TOGGLED BY KEY ROUTINE ALWAYS STARTING IN OFF
- * STATE RATHER THAN USING MS-DOS TOGGLED STATUS WHICH MAY OR MAY
- * NOT BE OFF AT START OF PROGRAM. (USER MAY CHANGE OPTION. IF YOU
- * DO REMEMBER TO DISABLE TOGGLE IN KRINS ROUTINE.)
- *
- * STC R0,KBINS
- * NI KBINS,INSSTATE
- *
- *****
- STC R0,KBCAP SET CAP STATUS
- NI KBCAP,CAPSTATE
- STC R0,KBNUM SET NUM STATUS
- NI KBNUM,NUMSTATE
- KEYSINS EQU *
- CLC KBINS,KBINSLST
- BE KEYSCAP
- CLI KBINS,INSSTATE
- MVC STATINS,=C'INS'
- BE KEYSINSU
- MVC STATINS,=C' '
- KEYSINSU EQU *
- MVC KBINSLST,KBINS
- LA R3,STATINS
- LA R4,L'STATINS
- BAL R14,PUTSTAT
- KEYSCAP EQU *
- CLC KBCAP,KBCAPLST
- BE KEYSNUM
- CLI KBCAP,CAPSTATE
- MVI KBCAP,CAPSTATE
- MVC STATCAP,=C'CAP'
- BE KEYSCAPU
- MVI KBCAP,0
- MVC STATCAP,=C' '
- KEYSCAPU EQU *
- MVC KBCAPLST,KBCAP
- LA R3,STATCAP
- LA R4,L'STATCAP
- BAL R14,PUTSTAT
- KEYSNUM EQU *
- CLC KBNUM,KBNUMLST
- BE KEYSEXIT
- CLI KBNUM,NUMSTATE
- MVI KBNUM,NUMSTATE
- MVC STATNUM,=C'NUM'
- BE KEYSNUMU
- MVI KBNUM,0
- MVC STATNUM,=C' '
- KEYSNUMU EQU *
- MVC KBNUMLST,KBNUM
- LA R3,STATNUM
- LA R4,L'STATNUM
- BAL R14,PUTSTAT
- KEYSEXIT EQU *
- L R14,KEYSSV14
- BR R14
- TITLE 'KR - KEY CONTROL ROUTINES'
- *
- * ALL ROUTINES STARTING WITH KR..... ARE ACCESSED VIA BALR FROM EDIT
- * BASED ON USE OF EXTENDED ASCII KEYBOARD INPUT BYTE USED AS INDEX
- * INTO KEYTAB TO OFFSET TO KRTAB ADDRESS TABLE POINTER TO KR ROUTINE.
- * THIS IDEXING SCEME CAN HANDLE UP TO 63 KR ROUTINES.
- *
- KRUND EQU * PROCESS UNDEFINED KEY
- BR R14
- KRCHAR EQU * PROCESS ASCII CHARACTER
- ST R14,KRSV14
- BAL R14,KRSETCHR
- LA R6,1(R6) INCR COL
- AP PCOL,=P'1'
- MVC STATCOL,=X'40202020'
- ED STATCOL,PCOL
- LA R3,STATCOL+2
- LA R4,2
- BAL R14,PUTSTAT
- MVC PCOLLAST,PCOL
- CH R6,=H'80' WRAP IF END OF LINE
- BL KRCHARS2
- LA R6,0 RESET COL
- ZAP PCOL,=P'1'
- LA R5,ROWINC(R5) INCR ROW
- AP PCURLINE,=P'1'
- LA R7,LSCB(R7) INCR SCB LINE
- CL R5,LASTROW WRAP IF LAST LINE
- BNH KRCHARS1
- LA R5,0 RESET ROW
- ZAP PCURLINE,PCUR
- L R7,ASCB RESET SCB
- KRCHARS1 EQU * UPDATE CURSOR ON SCREEN
- BAL R14,SETCUR
- KRCHARS2 EQU *
- LA R0,X'0200' AH=2 SET CURSOR
- LA R1,0 BH=0 PAGE
- LA R15,0(R5,R6) DH=ROW,DL=COL
- SVC VIDEO
- L R14,KRSV14
- BR R14
- KRSETCHR EQU * STORE KEY AT CURSOR
- ST R14,SCHRSV14
- MVI SCBMOD,TRUE SET MOD SWITCH FOR CURRENT LINE
- MVI SCRMOD,TRUE SET MOD SWITCH FOR CURRENT SCREEN
- CLM R6,1,SCBCOL IS NEW CHAR PAST END OF LINE
- BL KRCHARCI NO, GO CHECK INSERT MODE
- SR R2,R2
- IC R2,SCBCOL R2 = OLD COL
- LR R1,R6
- SR R1,R2
- LA R2,SCBLINE(R2)
- MVI 0(R2),ASCBLK INIT PAD
- EX R1,MVCPAD EXTEND PAD TO NEW COLUMN
- LA R1,1(R6)
- STC R1,SCBCOL SET NEW ENDING COL
- LA R2,SCBLINE(R1)
- MVC 0(2,R2),=AL1(ASCCR,ASCLF) ADD CR,NL
- KRCHAROK EQU *
- LA R0,X'0900' AH=9
- LA R1,X'0000' BH=0 PAGE,BL=ATTRIB.(WHITE ON BLUE)
- IC R1,ATTRIB BL=ATRIBUTE OF CHAR.
- LA R14,1 CX=(COUNT OF CHAR TO WRITE)
- IC R0,KEY AL=CHAR.
- STC R0,SCBLINE(R6) STORE CHARACTER IN SCREEN TEXT
- SVC VIDEO DISPLAY ASCII CHAR
- L R14,SCHRSV14
- BR R14
- MVCPAD MVC 1(0,R2),0(R2) PAD TO NEW COLUMN
- KRCHARCI EQU * CHECK INSERT MODE
- CLI KBINS,INSSTATE
- BNE KRCHAROK NO, GO STORE CHAR AND EXIT
- CLM R6,1,=AL1(79) IS THIS LAST CHAR
- BE KRCHAROK YES, GO STORE CHAR AND EXIT
- LA R2,SCBLINE(R6)
- SR R1,R1
- IC R1,SCBCOL
- LA R1,1(R1)
- STC R1,SCBCOL UPDATE ENDING COL
- SR R1,R6 R1 = LENGTH OF TEXT + 2 - 1
- EX R1,INSMVC1 SAVE TEXT TO BE SHIFTED
- EX R1,INSMVC2 MOVE TEXT BACK SHIFTED RIGHT
- IC R2,KEY
- STC R2,SCBLINE(R6) STORE CHARACTER IN SCREEN TEXT
- LR R3,R6
- BAL R14,PUTLINE UPDATE SHIFTED LINE
- L R14,SCHRSV14
- BR R14
- INSMVC1 MVC WLBLINE(0),0(R2) MOVE TEXT TO BE SHIFTED RIGHT
- INSMVC2 MVC 1(0,R2),WLBLINE MOVE TEXT BACK SHIFTED RIGHT 1
- KRESC EQU * PROCESS ESCAPE KEY
- MVI EOJ,TRUE
- BR R14
- KRPGUP EQU * PROCESS PAGE UP KEY
- ST R14,KRSV14
- L R12,GLBCUR
- USING LB,R12
- LA R3,12
- KRPGUPL EQU *
- MVC WLBPREV,LBPREV
- L R12,WLBPREV
- LTR R12,R12
- BZ KRPGUPE
- ST R12,GLBCUR
- SP PCUR,=P'1'
- BCT R3,KRPGUPL
- KRPGUPE EQU *
- BAL R14,DISPLAY
- L R14,KRSV14
- BR R14
- KRPGDN EQU * PROCESS PAGE DOWN KEY
- ST R14,KRSV14
- L R12,GLBCUR
- LA R3,12
- KRPGDNL EQU *
- MVC WLBNEXT,LBNEXT
- L R12,WLBNEXT
- LTR R12,R12
- BZ KRPGDNE
- ST R12,GLBCUR
- AP PCUR,=P'1'
- BCT R3,KRPGDNL
- KRPGDNE EQU *
- BAL R14,DISPLAY
- L R14,KRSV14
- BR R14
- KRF1 EQU * F1 FOR HELP SCREEN 1
- ST R14,KRSV14
- BAL R14,CLEAR
- LA R2,F1SC
- L R3,=A(F1SCEND)
- BAL R14,HELPSCRN
- BAL R14,GETKEY WAIT FOR ANY KEY
- L R14,KRSV14
- CLI KEY,ASCF2
- BE KRF2 SWITCH HELP SCREEN WITHOUT DISPLAY
- KRF1COM EQU *
- LA R15,KRALTF1
- CLI KEY,ASCALTF1
- BE KRF1WAIT
- LA R15,KRALTF2
- CLI KEY,ASCALTF2
- BNE KRF1SKPW
- KRF1WAIT EQU *
- BALR R14,R15 GO WAIT FOR ALT-F1 OR F2
- KRF1SKPW EQU * NOW CLEAR HELP SCREEN
- BAL R14,DISPLAY
- L R14,KRSV14
- BR R14
- HELPSCRN EQU * DISPLAY HELP SCREEN
- LA R4,0
- HELPLOOP EQU *
- ST R14,HELPSV14
- SR R1,R1
- IC R1,ATTRIB
- LR R15,R4
- SVC PRINTTXT
- LA R4,ROWINC(R4)
- CLR R2,R3
- BL HELPLOOP
- L R14,HELPSV14
- BR R14
- KRF2 EQU * F2 FOR HELP SCREEN 2
- ST R14,KRSV14
- BAL R14,CLEAR
- L R2,=A(F2SC)
- L R3,=A(F2SCEND)
- BAL R14,HELPSCRN
- BAL R14,GETKEY WAIT FOR ANY KEY
- L R14,KRSV14
- CLI KEY,ASCF1
- BE KRF1 SWITCH HELP SCREEN WITHOUT DISPLAY
- B KRF1COM
- KRUP EQU * CURSOR UP
- ST R14,KRSV14
- MVI DIRNEW,DIRUP
- BAL R14,KRCHKBOX
- LTR R5,R5
- BNZ KRUPROW
- L R12,SCBPREV
- LTR R12,R12
- BZ KRUPEXIT
- ST R12,GLBCUR
- SP PCUR,=P'1'
- ZAP PCURLINE,PCUR
- BAL R14,CHKMARK
- BAL R14,SCRLDOWN
- L R12,GLBCUR
- MVC SCBLB(LLB),LB MOVE NEW CURRENT LB TO FIRST LINE
- ST R12,SCBADDR
- ST R12,GLBCUR
- SR R3,R3
- BAL R14,PUTLINE
- MVI SCBMOD,FALSE
- B KRUPEXIT
- KRUPROW EQU *
- BAL R14,CHKMARK
- SP PCURLINE,=P'1'
- SH R5,=AL2(ROWINC)
- SH R7,=AL2(LSCB)
- KRUPEXIT EQU *
- BAL R14,SETCUR
- L R14,KRSV14
- BR R14
- KRDOWN EQU * CURSOR DOWN
- ST R14,KRSV14
- MVI DIRNEW,DIRDOWN
- BAL R14,KRCHKBOX
- CL R5,LASTROW
- BL KRDOWNRW
- L R12,SCBNEXT
- LTR R12,R12 IS THERE A NEXT LINE
- BZ KRDOWNXT NO, EXIT NOW
- CL R5,MAXROW IS THERE ANOTHER LINE ON SCREEN
- BL KRDOWNAR YES, GO ADD IT
- ST R12,WLBNEXT
- SR R3,R3
- LR R4,R5
- L R7,ASCB
- BAL R14,SCRLUP NO, SCROLL SCREEN UP
- L R7,ASCB
- MVC GLBCUR,SCBADDR UPDATE SCREEN CURRENCY
- AP PCUR,=P'1'
- L R7,MAXSCB
- L R12,WLBNEXT
- KRDOWNNR EQU * UPDATE NEW ROW
- MVC SCBLB(LLB),LB
- ST R12,SCBADDR
- SR R3,R3
- BAL R14,PUTLINE
- MVI SCBMOD,FALSE
- AP PCURLINE,=P'1'
- B KRDOWNXT
- KRDOWNAR EQU *
- AH R5,=AL2(ROWINC)
- AH R7,=AL2(LSCB)
- ST R5,LASTROW
- ST R7,LASTSCB
- B KRDOWNNR
- KRDOWNRW EQU * MOVE CURSOR DOWN ROW
- AP PCURLINE,=P'1'
- AH R5,=AL2(ROWINC)
- AH R7,=AL2(LSCB)
- KRDOWNXT EQU *
- BAL R14,SETCUR
- BAL R14,CHKMARK
- L R14,KRSV14
- BR R14
- KRLEFT EQU * CURSOR LEFT
- ST R14,KRSV14
- MVI DIRNEW,DIRLEFT
- BAL R14,KRCHKBOX
- BCTR R6,0
- SP PCOL,=P'1'
- BNZ KRLEFT1
- LA R6,79
- ZAP PCOL,=P'80'
- KRLEFT1 EQU *
- BAL R14,SETCUR
- L R14,KRSV14
- BR R14
- KRRIGHT EQU * CURSOR RIGHT
- ST R14,KRSV14
- MVI DIRNEW,DIRRIGHT
- BAL R14,KRCHKBOX
- AP PCOL,=P'1'
- LA R6,1(R6)
- CH R6,=AL2(79)
- BNH KRRIGHT1
- ZAP PCOL,=P'1'
- LA R6,0
- KRRIGHT1 EQU *
- BAL R14,SETCUR
- L R14,KRSV14
- BR R14
- KRCHKBOX EQU * SET BOX CHAR AT CURSOR IF BOX MODE
- SR R1,R1
- IC R1,DIRLAST
- MVC DIRLAST,DIRNEW
- CLI BOX,TRUE
- BNER R14
- ST R14,KRBXSV14
- IC R0,REVDIR(R1)
- STC R0,REVLAST SAVE REVERSE OF LAST DIRECTION
- SLL R1,2
- LA R2,DIRTAB(R1) SELECT TABLE ROW BASED ON 4*DIRLAST
- IC R1,DIRNEW
- IC R1,0(R1,R2) R1 = DIRECTION KEY INDEX
- L R2,BOXSETA
- IC R1,0(R1,R2) R1 = KEY FROM INDEXED SET
- STC R1,KEY SELECT KEY FROM BOXSET(NEWDIR,OLDDIR)
- CLI CONNECT,TRUE
- BNE KRCHKBOK KEY OK IF NOT IN CONNECT MODE
- CLM R6,1,SCBCOL
- BNL KRCHKBOK KEY OK IF NO PREVIOUS CHARACTER AT CURSOR
- SR R0,R0
- IC R0,SCBLINE(R6)
- SH R0,=AL2(179) R0 = GRAPHIC CHAR. INDEX
- BM KRCHKBOK KEY OK IF CHAR AT CURSOR < FIRST GRAPHIC
- CLM R0,1,=AL1(218-179)
- BH KRCHKBOK KEY OK IF CHAR AT CURSOR > LAST GRAPHIC
- CL R2,=A(BOXSET1) IS CURRENT BOX SET SINGLE LINE
- BNE KRCHKBS2
- LA R2,BOXCON R2 = BOXCON( SINGLE BOX SET)
- B KRCHKBCN
- KRCHKBS2 EQU *
- CL R2,=A(BOXSET2) IS CURRENT BOX SET DOUBLE LINE
- BNE KRCHKBOK NO, KEY OK AS IS
- LA R2,BOXCON+4 R2 = BOXCON( DOUBLE BOX SET)
- KRCHKBCN EQU * USE BOX CONNECT TABLE TO CONNECT NEW DIR
- SLL R0,3
- LR R1,R2
- AR R1,R0 R1 = A(BOXCON(S/D SET, OLD CHAR))
- SR R0,R0
- IC R0,DIRNEW
- AR R1,R0 R1 = A(BOXCON(S/D SET, OLD CHAR, NEWDIR))
- IC R0,0(R1)
- SH R0,=AL2(179) CONVERT NEW KEY TO INDEX
- SLL R0,3 REPEAT PROCESS TO CONNECT OLD DIR LINE
- LR R1,R2
- AR R1,R0
- SR R0,R0
- IC R0,REVLAST USE REVERSE OF OLD DIR TO SHARE BOXCON
- AR R1,R0
- IC R0,0(R1)
- STC R0,KEY SET NEW GRAPHIC CHAR WITH CONNECTIONS
- KRCHKBOK EQU *
- BAL R14,KRSETCHR STORE KEY AT CURSOR
- KRCHKBX1 EQU *
- LA R0,X'0100'
- SVC KEYBOARD
- STCM R0,4,PWORK
- TM PWORK,X'40' IS THERE ANOTHER KEY WAITING
- BNZ KRCHKBX2 NO, PROCEED
- LA R0,X'0000'
- SVC KEYBOARD YES, FLUSH KEY AND TRY AGAIN
- B KRCHKBX1
- KRCHKBX2 EQU *
- L R14,KRBXSV14
- BR R14
- KRINS EQU * INSERT KEY TOGGLED - UPDATE STATUS LINE
- ST R14,KRSV14
- XI KBINS,INSSTATE TOGGLE INS (IGNORE INS STATUS LINE)
- BAL R14,KEYSTATS
- L R14,KRSV14
- BR R14
- KRDEL EQU * DELETE CHAR OR BLOCK VIA DEL KEY
- ST R14,KRSV14
- CLI BLKLABEL,FALSE IS THERE A LABELED BLOCK
- BNE KRDELBLK YES, GO DELETE IT
- KRDELCHR EQU *
- CLM R6,1,SCBCOL IS CURSOR PAST END OF LINE
- BNLR R14 YES, IGNORE DELETE KEY
- MVI SCBMOD,TRUE LINE MOD
- MVI SCRMOD,TRUE SCREEN MOD
- SR R1,R1
- IC R1,SCBCOL
- BCTR R1,0
- STC R1,SCBCOL UPDATE ENDING COL
- LR R4,R1 SAVE COL TO BLANK ON SCREEN
- LA R1,2(R1)
- SR R1,R6
- LA R2,SCBLINE(R6)
- EX R1,MVCLEFT SHIFT TEXT ONLY TO OVERLAY DEL CHAR
- LA R0,X'0200' AH=2 SET CURSOR
- LA R1,0 BH=0 PAGE
- LA R15,0(R5,R4) DH=ROW,DL=COL OLD LAST CHAR
- SVC VIDEO UPDATE CURSOR
- LA R0,X'0920' AH=9, AL= ASCII BLANK
- LA R1,X'0000' BH=0 PAGE,BL=ATTRIB.
- IC R1,ATTRIB BL=ATRIBUTE OF CHAR.
- LA R14,1 CX=(COUNT OF CHAR TO WRITE)
- SVC VIDEO DISPLAY CHAR
- LR R3,R6
- BAL R14,PUTLINE REFRESH LINE TO NEW END OF LINE
- BAL R14,SETCUR
- L R14,KRSV14
- BR R14
- MVCLEFT MVC 0(0,R2),1(R2)
- KRCTLKY EQU * DELETE LABELED BLOCK VIA CTL-K Y
- ST R14,KRSV14
- CLI BLKLABEL,FALSE
- BER R14
- KRDELBLK EQU * DELETE LABELED BLOCK
- LA R1,=CL20'DELETE BLOCK'
- BAL R14,PUTMSG
- MVI CURDEL,FALSE RESET CURRENT LB DELETE SWITCH
- ZAP PBLKCNT,=P'0'
- L R12,BLK1LB
- KRDELBK1 EQU * CHECK IF CURRENT LB IN BLOCK
- AP PBLKCNT,=P'1'
- CL R12,GLBCUR IS CURRENT LINE BEING DELETED
- BNE KRDELBKC
- MVI CURDEL,TRUE YES, SET SWITCH
- KRDELBKC EQU *
- CL R12,BLK2LB
- BE KRDELBK2 OK, GO DELETE BLOCK
- MVC WLBNEXT,LBNEXT GET NEXT LB TO DUP.
- L R12,WLBNEXT
- LTR R12,R12
- BNZ KRDELBK1
- LA R1,=CL20'BLOCK NOT FOUND'
- BAL R14,PUTMSG
- B KRDEXIT
- KRDELBK2 EQU * OK TO DELETE BLOCK
- MVI SCRMOD,TRUE SET SCREEN MOD
- L R12,BLK1LB
- MVC WLBPREV,LBPREV GET PREV. FROM FIRST BLOCK
- L R12,BLK2LB
- BAL R14,CHKADDR
- MVC WLBNEXT,LBNEXT GET NEXT FROM LAST BLOCK
- MVC LBNEXT,AFREELB CHAIN FREE QUEUE TO LAST
- MVC AFREELB,BLK1LB SET FREE QUEUE TO FIRST
- L R12,WLBPREV
- LTR R12,R12
- BZ KRDELFST GO SET NEW FIRST LB
- BAL R14,CHKADDR
- MVC LBNEXT,WLBNEXT CHAIN PREV TO NEXT
- B KRDELCKL
- KRDELFST EQU *
- MVC GLBFIRST,WLBNEXT RESET FIRST PAST BLOCK
- KRDELCKL EQU *
- L R12,WLBNEXT
- LTR R12,R12
- BZ KRDELLST
- SP PLSTLINE,PBLKCNT
- BAL R14,CHKADDR
- MVC LBPREV,WLBPREV CHAIN NEXT TO PREV
- B KRDELCUR
- KRDELLST EQU *
- MVC GLBLAST,WLBPREV RESET LAST TO PREV
- ZAP PLSTLINE,PCURBLK1
- SP PLSTLINE,=P'1'
- KRDELCUR EQU *
- CLI CURDEL,TRUE IS CURRENT LB DELETED
- BNE KRDEXIT NO, EXIT WITH DISPLAY REQ.
- ZAP PCUR,PCURBLK1
- SP PCUR,=P'1'
- MVC GLBCUR,WLBPREV YES, TRY PREV
- CLC GLBCUR,=A(0) IS PREV ZERO
- BNE KRDEXIT NO, EXIT
- ZAP PCUR,=P'1'
- MVC GLBCUR,WLBNEXT YES, TRY NEXT
- KRDEXIT EQU *
- MVI BLKLABEL,FALSE RESET LABEL
- MVC STATBLK,=C' '
- LA R3,STATBLK
- LA R4,L'STATBLK
- BAL R14,PUTSTAT
- BAL R14,AUDITMS
- BAL R14,PUTPCT
- BAL R14,DISPLAY
- L R14,KRSV14
- BR R14
- KRCR EQU * CARRIAGE RETURN (ENTER)
- ST R14,KRCRSV14
- CLI KBINS,INSSTATE INSERT MODE
- BE KRINSLN YES GO INSERT LINE
- BAL R14,KRDOWN NO, MOVE DOWN LINE
- B KRINSEXT EXIT
- KRINSLN EQU * INSERT LINE
- L R12,SCBADDR
- BAL R14,GETNEWLB GET FREE LB IN EXT. MEMORY
- L R14,KRCRSV14
- LTR R15,R15
- BNZR R14 IGNORE REQUEST IF NO ROOM
- AP PLSTLINE,=P'1'
- MVI FILEMOD,TRUE SET FILE CHANGE
- MVI SCRMOD,TRUE SET SCREEN MODE
- LTR R6,R6
- BNZ KRINSAFT IF NOT COL 0, INSERT AFTER CURRENT LINE
- L R12,SCBPREV
- LTR R12,R12
- BNZ KRINSPRE IF NOT FIRST, INSERT AFTER PREV. LINE
- KRINSFST EQU * ELSE MAKE NEW LINE FIRST LINE
- MVC GLBFIRST,ANEWLB RESET FIRST LB POINTER
- MVC GLBCUR,ANEWLB RESET CURRENT LB POINTER
- MVC WLBPREV,=A(0) SET NO PREV.
- MVC WLBNEXT,SCBADDR CHAIN OLD CURRENT TO NEW
- BAL R14,SCRLDOWN SCROLL DOWN AND ADJUST SCB'S
- BAL R14,KRINSWLB CREATE NULL LB AND UPDATE SCB'S
- B KRINSEXT
- KRINSPRE EQU *
- LTR R5,R5 IS THIS FIRST LINE
- BNZ KRINSSKC NO, LEAVE CURRENT LINE ON SCREEN
- SP PCUR,=P'1'
- SP PCURLINE,=P'1'
- MVC GLBCUR,SCBPREV YES, MOVE PREV. LINE TO TOP LINE
- MVC WLBPREV,SCBPREV CHAIN NEW LINE TO PREV. LB
- MVC WLBNEXT,SCBADDR
- BAL R14,SCRLDOWN MOVE FIRST TWO LINES DOWN
- BAL R14,SCRLDOWN
- L R12,GLBCUR
- MVC SCBLB(LLB),LB
- ST R12,SCBADDR
- SR R3,R3
- BAL R14,PUTLINE
- MVI SCBMOD,FALSE
- LA R5,ROWINC(R5) RESET CURSOR TO SECOND LINE
- LA R7,LSCB(R7)
- BAL R14,KRINSWLB INSERT NEW LB AND UPDATE SCB
- B KRINSEXT
- KRINSSKC EQU * LINK BETWEEN PREV AND CURRENT
- MVC WLBPREV,SCBPREV
- MVC WLBNEXT,SCBADDR
- BAL R14,SCRLDOWN SCROLL DOWN
- BAL R14,KRINSWLB INSERT NEW LB AND UPDATE SCB
- B KRINSEXT
- KRINSAFT EQU * LINK BETWEEN CURRENT AND NEXT
- CLC SCBNEXT,=A(0) IS NEW LINE AT END
- BNE KRINSANL NO, SKIP UPDATE TO LAST
- MVC GLBLAST,ANEWLB
- KRINSANL EQU *
- MVC WLBPREV,SCBADDR
- MVC WLBNEXT,SCBNEXT
- CL R5,MAXROW
- BL KRINSASD IF NOT LAST ROW, SCROLL DOWN
- KRINSASU EQU * SCROLL UP FOR NEW LINE ON LAST ROW
- LA R3,0
- LR R4,R5
- ST R7,SAVESCB
- L R7,ASCB
- BAL R14,SCRLUP IF LAST LINE, SCROLL UP
- L R7,SAVESCB
- AP PCURLINE,=P'1'
- BAL R14,KRINSWLB INSERT NEW LB AND UPDATE SCB
- B KRINSEXT
- KRINSASD EQU * SCROLL DOWN AND INSERT NEW ROW
- LA R5,ROWINC(R5) MOVE TO NEXT ROW
- AP PCURLINE,=P'1'
- LA R7,LSCB(R7)
- BAL R14,SCRLDOWN
- BAL R14,KRINSWLB
- KRINSEXT EQU *
- LA R6,0
- ZAP PCOL,=P'1'
- CLI HTMODE,TRUE
- BNE KRSKPHT
- BAL R14,KRHT TAB
- KRSKPHT EQU *
- BAL R14,PUTPCT
- BAL R14,SETCUR RESET CURSOR ON NEW INSERTED LINE
- CLI KBINS,INSSTATE IS INSERT ON
- BNE KRSKPDN NO, SKIP EXTRA DOWN
- CLC LASTKEY,KEY WAS LAST KEY ALSO CR TO INSERT
- BNE KRSKPDN YES, MOVE CURSOR DOWN TO PREV INSERT
- BAL R14,KRDOWN
- KRSKPDN EQU *
- BAL R14,AUDITMS
- L R14,KRCRSV14
- BR R14
- TITLE 'KRINSWLB - CREATE NULL WLB AND UPDATE LB'S AND SCB'
- KRINSWLB EQU *
- ST R14,INSCSV14
- MVC WLBLINE,=AL1(ASCCR,ASCLF) SET TEXT TO NULL LINE
- MVC SCBADDR,ANEWLB
- MVC SCBLB,WLB MOVE NEW LB INTO CURRENT SCB
- MVI SCBCOL,0
- MVI SCBMOD,FALSE
- L R12,ANEWLB
- BAL R14,CHKADDR
- MVC LB(LLB),WLB INIT NEW LB
- KRINSWLN EQU *
- L R12,WLBNEXT
- LTR R12,R12
- BZ KRINSWLP
- BAL R14,CHKADDR
- MVC LBPREV,ANEWLB CHAIN NEXT LB BACK TO NEW LB
- LA R1,LSCB(R7)
- CL R1,MAXSCB IS THERE A NEXT SCB
- BH KRINSWLP
- MVC SCBPREV-SCB(4,R1),ANEWLB ALSO UPDATE NEXT SCB
- KRINSWLP EQU *
- L R12,WLBPREV
- LTR R12,R12
- BZ KRINSWLE
- BAL R14,CHKADDR
- MVC LBNEXT,ANEWLB CHAIN PREV LB TO NEW LB
- LR R1,R7
- SH R1,=AL2(LSCB)
- CL R1,ASCB IS THERE A PREV SCB
- BL KRINSWLE
- MVC SCBNEXT-SCB(4,R1),ANEWLB ALSO UPDATE PREV SCB
- KRINSWLE EQU *
- L R14,INSCSV14
- BR R14
- TITLE 'SCRLDOWN - SCROLL SCREEN DOWN 1 LINE'
- *
- * SCROLL SCREEN DOWN FROM CURRENT ROW TO MAXROW
- *
- SCRLDOWN EQU *
- ST R14,SCRLSV14
- CL R5,MAXROW IS CURRENT ROW = LAST ROW
- BE SCRLDWN1 YES, GO CLEAR LINE
- LA R0,X'0701' SCROLL DOWN 1 LINE
- LR R14,R5 CX = STARTING ROW,COL
- L R15,=A(SCRLEND) DX = ENDING ROW,COL
- LA R1,0
- ICM R1,B'0010',ATTRIB
- SVC VIDEO
- L R1,MAXSCB
- B SCRLDWNS
- SCRLDWN1 EQU *
- LR R3,R5
- BAL R14,CLRLINE
- SCRLDWNS EQU *
- CLC LASTROW,MAXROW IS LAST ROW ACTIVE
- BL SCRLSKPU NO, IGNORE
- CLI SCBMOD-SCB(R1),TRUE HAS IT CHANGED
- BNE SCRLSKPU NO, THROW AWAY
- L R12,SCBADDR-SCB(R1) YES, UPDATE MEMORY
- BAL R14,CHKADDR
- MVC LB(LLB),SCBLB-SCB(R1) SAVE UPDATED LAST LINE
- SCRLSKPU EQU *
- L R2,=A(22*ROWINC) ROW BEING MOVED DOWN
- SH R1,=AL2(LSCB)
- SCRLSHFT EQU *
- CR R2,R5
- BL SCRLUPLT
- MVC LSCB(LSCB,R1),0(R1) MOVE SCB DOWN ONE
- SH R1,=AL2(LSCB)
- SH R2,=AL2(ROWINC)
- B SCRLSHFT
- SCRLUPLT EQU * UPDATE LAST ROW
- L R1,LASTROW
- LA R1,ROWINC(R1)
- CL R1,MAXROW
- BH SCRLEXIT
- ST R1,LASTROW
- L R1,LASTSCB
- LA R1,LSCB(R1)
- ST R1,LASTSCB
- SCRLEXIT EQU *
- L R14,SCRLSV14
- BR R14
- TITLE 'SCRLUP - SCROLL SCREEN UP 1 LINE'
- *
- * R3 - STARTING ROW
- * R4 - ENDING ROW
- * R7 - STARTING SCB
- *
- SCRLUP EQU *
- ST R14,SCRLSV14
- CLR R3,R4 DON'T SCROLL 1 LINE
- BE SCRLUP1
- LA R0,X'0601' SCROLL DOWN 1 LINE
- LA R14,0(R3) CX = STARTING ROW,COL
- LA R15,79(R4) DX = ENDING ROW,COL
- LA R1,0
- ICM R1,B'0010',ATTRIB
- SVC VIDEO
- B SCRLUPSS
- SCRLUP1 EQU *
- BAL R14,CLRLINE CLEAR ROW R3 ON SCREEN
- SCRLUPSS EQU *
- CLI SCBMOD,TRUE HAS IT CHANGED
- BNE SCRLUPSK NO, THROW AWAY
- L R12,SCBADDR YES, UPDATE MEMORY
- BAL R14,CHKADDR
- MVC LB(LLB),SCBLB SAVE UPDATED FIRST LINE
- SCRLUPSK EQU *
- LA R2,ROWINC(R3) ROW BEING MOVED UP
- SCRLUPSH EQU *
- CR R2,R4
- BH SCRLUPEX
- MVC 0(LSCB,R7),LSCB(R7) MOVE SCB UP ONE
- LA R7,LSCB(R7)
- LA R2,ROWINC(R2)
- B SCRLUPSH
- SCRLUPEX EQU *
- L R14,SCRLSV14
- BR R14
- TITLE 'CLRLINE - CLEAR ROW R3 ON SCREEN'
- CLRLINE EQU *
- ST R14,CLRLSV14
- LA R0,X'0200' AH=2 SET CURSOR
- LA R1,0 BH=0 PAGE
- LR R15,R3 DH=ROW,DL=COL
- SVC VIDEO SET CURSOR TO UPPER LEFT CORNER
- LA R0,X'0920' AH=10, AL=SPACE
- LA R1,X'0000' BH=0 PAGE,BL=ATTRIB.
- IC R1,ATTRIB
- LA R14,80 CHARACTERS ON DATA LINES
- SVC VIDEO CLEAR DATA LINES
- L R14,CLRLSV14
- BR R14
- KRHOME EQU * HOME
- ST R14,KRSV14
- MVC GLBCUR,GLBFIRST
- ZAP PCUR,=P'1'
- BAL R14,DISPLAY
- L R14,KRSV14
- BR R14
- KREND EQU * END
- MVC GLBCUR,GLBLAST
- ZAP PCUR,PLSTLINE
- B KRPGUP
- KRSHF6 EQU * SHIFT F6 (DELETE LINE)
- ST R14,KRSV14
- SP PLSTLINE,=P'1'
- MVI FILEMOD,TRUE
- L R12,SCBADDR ERR 8
- MVC WLB(8),LB
- LA R0,12 *************************
- LA R1,WLB VALIDATE SCB/LB MATCH
- LA R2,SCBLB *************************
- CLC WLB(8),SCBLB
- BNE AUDITBUG SCB PREV/NEXT NE LB PREV/NEXT
- BAL R14,CHKADDR
- MVC LBNEXT,AFREELB CHAIN FREE QUEUE TO LB
- ST R12,AFREELB POINT TO DELETED LB
- L R12,WLBPREV
- LTR R12,R12
- BZ KRSHF6F GO UPDATE FIRST LB POINTER
- BAL R14,CHKADDR
- MVC LBNEXT,WLBNEXT SET NEXT IN PREV. LB
- LTR R5,R5
- BZ KRSHF6N GO UDATE PREV POINTER
- LR R1,R7
- SH R1,=AL2(LSCB)
- MVC SCBNEXT-SCB(4,R1),WLBNEXT
- B KRSHF6N
- KRSHF6F EQU *
- MVC GLBFIRST,WLBNEXT UPDATE FIRST LB POINTER
- KRSHF6N EQU *
- L R12,WLBNEXT
- LTR R12,R12
- BZ KRSHF6L IF LAST GO UPDATE LAST LB POINTER
- BAL R14,CHKADDR
- MVC LBPREV,WLBPREV SET PREV IN NEXT LB
- CL R5,MAXROW
- BNL KRSHF6E
- LA R1,LSCB(R7)
- MVC SCBPREV-SCB(4,R1),WLBPREV
- B KRSHF6E
- KRSHF6L EQU *
- MVC GLBLAST,WLBPREV UPDATE LAST LB POINTER
- KRSHF6E EQU *
- CLC GLBCUR,SCBADDR IS CURRENT LINE BEING DELETED
- BNE KRSHF6EX NO, EXIT
- MVC GLBCUR,WLBNEXT YES, TRY NEXT
- CLC GLBCUR,=A(0) IS NEXT NULL
- BNE KRSHF6EX NO, EXIT
- SP PCUR,=P'1'
- MVC GLBCUR,WLBPREV YES, TRY PREV.
- CLC GLBCUR,=A(0) IS FILE NOW EMPTY
- BNE KRSHF6ND NO, GO DISPLAY PREV. LINE
- BAL R14,NEWFILE YES, CREATE NULL FILE
- KRSHF6ND EQU *
- BAL R14,DISPLAY
- B KRSHF6SC
- KRSHF6EX EQU *
- ST R5,SAVEROW
- ST R7,SAVESCB
- LR R3,R5
- L R4,MAXROW
- BAL R14,SCRLUP SCROLL SCREEN UP OVERLAYING DEL LINE
- LA R6,0 RESET COLUMN
- ZAP PCOL,=P'1'
- CLC LASTSCB,MAXSCB WAS LAST ROW ACTIVE
- BL KRSHF6NL NO, GO REDUCE LAST ROW POINTER
- L R7,MAXSCB
- L R12,SCBNEXT
- LTR R12,R12 IS THERE NEW LINE FOR LAST ROW
- BZ KRSHF6NL NO, GO DECREMENT LAST ROW
- MVC SCBLB(LLB),LB MOVE IN NEW LAST LINE
- ST R12,SCBADDR
- MVI SCBMOD,FALSE
- SR R3,R3
- L R5,MAXROW
- BAL R14,PUTLINE DISPLAY NEW LAST LINE
- B KRSHF6XT
- KRSHF6NL EQU * UPDATE NEW LAST ROW
- L R5,LASTROW
- L R7,LASTSCB
- SH R5,=AL2(ROWINC)
- SH R7,=AL2(LSCB)
- ST R5,LASTROW
- ST R7,LASTSCB
- KRSHF6XT EQU *
- L R5,SAVEROW
- L R7,SAVESCB
- CL R5,LASTROW
- BNH KRSHF6SC
- SP PCURLINE,=P'1'
- L R5,LASTROW
- L R7,LASTSCB
- KRSHF6SC EQU *
- BAL R14,AUDITMS
- BAL R14,PUTPCT
- BAL R14,SETCUR
- L R14,KRSV14
- BR R14
- KRF3 EQU * F3 (START OF LINE)
- ST R14,KRSV14
- LA R6,0
- ZAP PCOL,=P'1'
- BAL R14,SETCUR
- L R14,KRSV14
- BR R14
- KRF4 EQU * F4 (END OF LINE)
- ST R14,KRSV14
- IC R6,SCBCOL
- CH R6,=AL2(79)
- BNH KRF4SKPL
- BCTR R6,0
- KRF4SKPL EQU *
- CVD R6,PWORK
- ZAP PCOL,PWORK
- AP PCOL,=P'1'
- BAL R14,SETCUR
- L R14,KRSV14
- BR R14
- KRF5 EQU * F5 (LABEL BLOCK)
- ST R14,KRSV14
- CLI BLKLABEL,FALSE
- BE KRF5MARK IF FALSE, SET MARK
- CLI BLKLABEL,MARK IF MARK, SET TRUE
- BE KRF5TRUE
- MVI BLKLABEL,FALSE ELSE, TURN BLOCK LABEL BACK OFF
- MVC STATBLK,=C' '
- LA R3,STATBLK
- LA R4,L'STATBLK
- BAL R14,PUTSTAT
- BAL R14,DISPLAY REMOVE MARKED LINES FROM SCREEN
- KRF5EXIT EQU *
- L R14,KRSV14
- BR R14
- KRF5MARK EQU *
- LA R1,=CL20'MARKING BLOCK'
- BAL R14,PUTMSG
- MVI BOX,FALSE TURN OFF BOX GRAPHICS
- MVI BLKLABEL,MARK
- MVC STATBLK,=C'BLK'
- LA R3,STATBLK
- LA R4,L'STATBLK
- BAL R14,PUTSTAT
- BAL R14,CHKMARK
- MVC BLK1LB,SCBADDR
- ZAP PCURBLK1,PCURLINE
- B KRF5EXIT
- KRF5TRUE EQU *
- LA R1,=CL20'POSITIONING BLOCK'
- BAL R14,PUTMSG
- MVI BLKLABEL,TRUE
- MVC BLK2LB,SCBADDR
- B KRF5EXIT
- KRF6 EQU * F6 (DUPLICATE BLOCK)
- ST R14,KRSV14
- CLI BLKLABEL,TRUE
- BNE KRF6NOTD NO DUP IF NO BLOCK DEFINED CURRENTLY
- MVC PREVDUP,SCBPREV
- L R12,BLK1LB
- KRF6L1 EQU * CHECK IF CHAINED LB IN BLOCK
- CL R12,BLK2LB
- BE KRF6OK OK, GO DUPLICATE
- CL R12,PREVDUP
- BE KRF6NOTD NO DUP IF INSIDE BLOCK
- MVC WLBNEXT,LBNEXT GET NEXT LB TO DUP.
- L R12,WLBNEXT
- LTR R12,R12
- BNZ KRF6L1
- KRF6NOTD EQU * NO DUP DUE TO NO BLK OR INSIDE BLK
- LA R1,=CL20'NO DUP - INV. REQ.'
- BAL R14,PUTMSG
- L R14,KRSV14
- BR R14
- KRF6OK EQU * OK TO DUPLICATE
- LA R1,=CL20'DUPLICATING BLOCK'
- BAL R14,PUTMSG
- MVC STATBLK,=C' '
- LA R3,STATBLK
- LA R4,L'STATBLK
- BAL R14,PUTSTAT
- MVI BLKLABEL,FALSE TURN OFF BLOCK
- MVI FILEMOD,TRUE SET FILE CHANGE
- BAL R14,UPDATE UPDATE MS FROM SCREEN BEFORE COPY
- MVC SAVENEXT,SCBADDR SAVE NEXT TO STORE IN LAST
- MVC NEXTBLK,BLK1LB
- KRF6DUP EQU *
- BAL R14,GETNEWLB
- LTR R15,R15
- BNZ KRF6LAST IF NO MORE LB'S, GO FINISH LAST LB
- AP PLSTLINE,=P'1'
- LTR R5,R5
- BNZ KRF6SKPC IF INSERTING BEFORE FIRST LINE,
- AP PCUR,=P'1' INCR CURRENT LINE COUNTERS
- AP PCURLINE,=P'1'
- KRF6SKPC EQU *
- L R12,NEXTBLK
- MVC WLB(LLB),LB GET FIRST LB TO DUP
- MVC WLBPREV,PREVDUP
- L R12,ANEWLB
- BAL R14,CHKADDR
- MVC LB(LLB),WLB COPY TO NEW LB
- L R12,WLBPREV
- LTR R12,R12
- BNZ KRF6DUPP
- MVC GLBFIRST,ANEWLB RESET FIRST LB
- B KRF6DUPN
- KRF6DUPP EQU * CHAIN PREVIOUS
- BAL R14,CHKADDR
- MVC LBNEXT,ANEWLB SET NEXT IN PREV LB
- KRF6DUPN EQU *
- MVC PREVDUP,ANEWLB
- L R12,NEXTBLK
- CL R12,BLK2LB IS THIS LAST BLOCK
- BE KRF6LAST YES, GO SET NEXT POINTER
- MVC NEXTBLK,LBNEXT NEXT BLOCK TO DUP
- B KRF6DUP
- KRF6LAST EQU *
- L R12,PREVDUP
- BAL R14,CHKADDR
- MVC LBNEXT,SAVENEXT SET NEXT IN LAST LB
- L R12,SAVENEXT
- BAL R14,CHKADDR
- MVC LBPREV,PREVDUP SET PREV IN NEXT LB
- BAL R14,AUDITMS
- BAL R14,PUTPCT
- BAL R14,DISPLAY
- L R14,KRSV14
- BR R14
- KRF7 EQU * F7 (SEARCH)
- ST R14,KRSV14
- LA R1,=CL20'KEY='
- BAL R14,PUTMSG
- BAL R14,UPDATE UPDATE MEMORY FROM SCREEN
- LA R1,4 SET STARTING COL IN STATMSG
- BAL R14,GETWORD GET SEARCH KEY
- CLI LWORD,L'WORD
- BNL KRF7ABT2 EXIT NOW IF LENGTH ZERO OR ABORTED
- MVC LKEYWORD,LWORD
- MVC KEYWORD,WORD
- XC FINDKEY,FINDKEY CLEAR TRT TABLE
- MVI FINDKEY+ASCLF,ASCLF SET END OF RECORD TRAP
- SR R1,R1
- IC R1,KEYWORD
- STC R1,FINDKEY(R1) SET TRAP FOR FIRST CHAR.
- LA R6,20
- BAL R14,SETCUR
- LA R1,=CL20'REPLACE Y/N/G (CR=N)'
- BAL R14,PUTMSG
- BAL R14,GETKEY
- MVC WLBNEXT,SCBADDR
- MVC PCURSRCH,PCURLINE
- SP PCURSRCH,=P'1'
- MVI REPLACE,FALSE ASSUME NO REPLACE
- MVI GLOBAL,FALSE ASSUME NO GLOBAL REPLACE
- OI KEY,X'20'
- CLI KEY,X'79' IS THIS A Y
- BE KRF7REP YES, GO GET REPLACE WORD
- CLI KEY,X'67' IS THIS A G (GLOBAL SERACH AND REPLACE)
- BNE KRF7STRT NO, GO SEARCH ONLY
- MVI GLOBAL,TRUE YES, SET GLOBAL REPLACE
- KRF7REP EQU *
- LA R1,=CL20'REP='
- BAL R14,PUTMSG
- LA R1,4
- BAL R14,GETWORD GET REPLACE WORD IN WORD
- CLI LWORD,X'AB'
- BE KRF7ABT2 EXIT IF GETWORD ABORT
- MVC LREPWORD,LWORD
- MVC REPWORD,WORD SAVE IN REPWORD
- MVI REPLACE,TRUE SET REPLACE MODE
- KRF7STRT EQU *
- LA R1,=CL20'SEARCHING'
- CLI REPLACE,TRUE
- BNE KRF7SRCH
- LA R1,=CL20'REPLACING'
- KRF7SRCH EQU *
- BAL R14,PUTMSG
- LA R7,100
- KRF7NXTL EQU * START SEARCH OF NEXT LINE
- L R12,WLBNEXT
- LTR R12,R12
- BZ KRF7NOTF EXIT IF NOT FOUND
- AP PCURSRCH,=P'1'
- MVC WLB(LLB),LB MOVE NEXT LB TO WLB
- SR R3,R3
- LA R1,WLBLINE
- BCT R7,KRF7NXTC
- LA R0,X'0100'
- SVC KEYBOARD
- STCM R0,4,PWORK STORE LOW FLAGS
- TM PWORK,X'40' IS THERE A KEY WAITING
- BZ KRF7ABT1 YES, ABORT NOT FOUND
- LA R7,100
- MVC STATREC,=X'402020202020' UPDATE LINE BEING SEARCHED
- ED STATREC,PCURSRCH
- ZAP PCURLINE,PCURSRCH
- LA R3,STATREC
- LA R4,L'STATREC
- BAL R14,PUTSTAT
- SR R3,R3
- LA R1,WLBLINE
- KRF7NXTC EQU * SEARCH TO NEXT MATCHING FIRST CHAR.
- TRT 0(L'WLBLINE,R1),FINDKEY FIRST CHAR. FOUND
- CLM R2,1,=AL1(ASCLF) IS THIS END OF RECORD
- BE KRF7NXTL YES, NEXT LINE
- IC R3,LKEYWORD
- EX R3,CLCKEYW DOES ENTIRE KEYWORD MATCH
- BE KRF7HIT YES, EXIT WITH MATCHING LINE AT TOP
- LA R1,1(R1) NO, SKIP MATCHING CHARACTER
- B KRF7NXTC REPEAT SEARCH TO END OF LINE
- KRF7HIT EQU * KEY FOUND
- ST R12,GLBCUR MOVE LINE TO TOP OF SCREEN
- MVC PCUR,PCURSRCH
- CLI REPLACE,TRUE
- BNE KRF7EXIT
- MVI FILEMOD,TRUE RELEASE 1.4 FIX ****************
- LA R4,1(R1,R3) R4=A(TEXT BEYOND KEY IN WLBLINE)
- MVC SAVETEXT,0(R4)
- LA R2,WLBLINE+L'WLBLINE-2
- SR R2,R1 R2 = L'REMAINING TEXT IN WLBLINE-2
- LR R4,R1 ASSUME NO REP
- CLI LREPWORD,X'FF' IS THERE ANY REP
- BE KRF7MTXT NO, GO OVERLAY KEY WTTH TEXT
- IC R3,LREPWORD
- SR R2,R3 R2 = L'TEXT BEYOND REP IN WLBLINE-1
- BM KRF7HITE DON'T REPLACE IF IT WON'T FIT
- EX R3,MVCREP MOVE REP OVER KEY
- LA R4,1(R1,R3) R4 = A(TEXT BEYOND REP)
- KRF7MTXT EQU *
- EX R2,MVCTXT MOVE REMAINING TEXT BEHIND REP
- BAL R14,CHKADDR
- MVC LB(LLB),WLB UPDATE LB WITH REPLACEMENT
- KRF7HITE EQU *
- CLI GLOBAL,TRUE
- BNE KRF7EXIT
- LA R1,1(R1)
- B KRF7NXTC
- KRF7ABT1 EQU *
- LA R0,X'0000' FLUSH INTERRUPT KEY
- SVC KEYBOARD
- KRF7ABT2 EQU *
- LA R1,=CL20'ABORT SEARCH'
- BAL R14,PUTMSG
- B KRF7EXIT
- KRF7NOTF EQU *
- LA R1,=CL20'NOT FOUND'
- BAL R14,PUTMSG
- KRF7EXIT EQU *
- BAL R14,AUDITMS
- BAL R14,DISPLAY
- L R14,KRSV14
- BR R14
- CLCKEYW CLC 0(0,R1),KEYWORD COMPARE ENTIRE KEYWORD
- MVCREP MVC 0(0,R1),REPWORD MOVE REP OVERLAYING KEY
- MVCTXT MVC 0(0,R4),SAVETEXT MOVE REMAINING TEXT BEHIND REP
- TITLE 'GETWORD - READ STRING FROM KEYBOARD WORD'
- *
- * R1 = STARTING COL IN STATMSG
- * LWORD = LENGTH - 1 OR X'FF' IF NONE OR X'AB' IF ABORTED
- *
- GETWORD EQU *
- ST R14,GETWSV14
- ST R5,SAVEROW
- ST R6,SAVECOL
- LR R6,R1
- BAL R14,SETCUR UPDATE LINE AND COL BEFORE CHANGING
- L R5,STATROW
- LA R3,WORD
- LA R4,L'WORD
- GETWLOOP EQU *
- STM R3,R4,GETWSV34
- BAL R14,SETCUR
- LA R0,X'0920' AH=9, AL= ASCII BLANK
- LA R1,X'0000' BH=0 PAGE,BL=ATTRIB.
- IC R1,ATTRIB BL=ATRIBUTE OF CHAR.
- LA R14,1 CX=(COUNT OF CHAR TO WRITE)
- SVC VIDEO DISPLAY BLANK AT CURSOR
- BAL R14,GETKEY
- LM R3,R4,GETWSV34
- CLI KEY,ASCBS
- BNE GETWCHKA
- CL R3,=A(WORD)
- BNH GETWLOOP IGNORE BS IF AT BEGINNING
- BCTR R3,0
- LA R4,1(R4)
- BCTR R6,0
- B GETWLOOP
- GETWCHKA EQU *
- CLI KEY,ASCCR
- BE GETWOK
- CLI KEY,X'20'
- BL GETWQUIT
- CLI KEY,X'80'
- BNL GETWQUIT
- LA R1,STATMSG(R6)
- MVC 0(1,R1),KEY
- LA R0,X'0900' AH=9
- LA R1,X'0000' BH=0 PAGE,BL=ATTRIB.(WHITE ON BLUE)
- IC R1,ATTRIB BL=ATRIBUTE OF CHAR.
- LA R14,1 CX=(COUNT CHAR)
- IC R0,KEY AL=CHAR
- SVC VIDEO DISPLAY CHAR
- LA R6,1(R6)
- MVC 0(1,R3),KEY
- LA R3,1(R3)
- BCT R4,GETWLOOP
- GETWQUIT EQU *
- MVI LWORD,X'AB'
- B GETWEXIT
- GETWOK EQU *
- LA R3,L'WORD-1
- SR R3,R4
- STC R3,LWORD SAVE LENGTH (X'FF' = NO CHAR)
- GETWEXIT EQU *
- L R5,SAVEROW
- L R6,SAVECOL
- BAL R14,SETCUR
- L R14,GETWSV14
- BR R14
- KRF8 EQU * REPEAT F7 SEARCH
- ST R14,KRSV14
- MVC WLBNEXT,SCBNEXT
- ZAP PCURSRCH,PCURLINE
- B KRF7STRT
- KRF9 EQU * SELECT COLOR
- ST R14,KRSV14
- SR R1,R1
- IC R1,ATTRIB
- LR R2,R1
- N R1,=X'000000F0' R1 = LEFT NIBBLE * 16
- N R2,=X'0000000F' R2 = RIGHT NIBBLE
- ST R5,SAVEROW
- ST R6,SAVECOL
- LA R6,15
- KRF9LOOP EQU *
- LA R0,0(R1,R2)
- STC R0,ATTRIB UPDATE ATTRIB
- STM R1,R2,KRF9SV12 SAVE R1-R2 ACROSS I/O
- MVC STATMSG,=CL20'COLOR BRGBIRGB'
- BAL R14,DHEXATT
- LA R3,STATMSG
- LA R4,L'STATMSG
- BAL R14,PUTSTAT
- L R5,STATROW
- LA R15,0(R5,R6)
- LA R0,X'0200' AH=2 SET CURSOR
- LA R1,0 BH=0 PAGE
- SVC VIDEO
- L R5,SAVEROW
- BAL R14,GETKEY GET NEXT KEY (CR,ARROWS,0-9,A-F)
- LM R1,R2,KRF9SV12
- CLI KEY,ASCCR CR TO EXIT F9 WITH CURRENT ATTRIB
- BE KRF9EXIT
- CLI KEY,ASCUP UP ARROW TO INCR CURRENT NIBBLE
- BNE KRF9CKDN
- KRF9UP EQU *
- CLM R6,1,=AL1(15)
- BNE KRF9UP2
- LA R1,16(R1)
- N R1,=X'000000F0'
- B KRF9LOOP
- KRF9UP2 EQU *
- LA R2,1(R2)
- N R2,=X'0000000F'
- B KRF9LOOP
- KRF9CKDN EQU *
- CLI KEY,ASCDOWN DOWN ARROW TO DEC CURRENT NIBBLE
- BNE KRF9CHLF
- CLM R6,1,=AL1(15)
- BNE KRF9DN2
- SH R1,=H'16'
- N R1,=X'000000F0'
- B KRF9LOOP
- KRF9DN2 EQU *
- BCTR R2,0
- N R2,=X'0000000F'
- B KRF9LOOP
- KRF9CHLF EQU *
- CLI KEY,ASCLEFT LEFT ARROW TO SELECT LEFT NIBBLE
- BNE KRF9CHRG
- LA R6,15
- B KRF9LOOP
- KRF9CHRG EQU *
- CLI KEY,ASCRGHT RIGHT ARROW TO SELECT RIGHT NIBBLE
- BNE KRF9HEX
- LA R6,16
- B KRF9LOOP
- KRF9HEX EQU *
- CLI KEY,X'80'
- BNL KRF9LOOP
- TR KEY,HEXTAB CONVERT ASCII KEY TO 0-F OR FF
- CLI KEY,X'FF'
- BE KRF9LOOP IGNORE INVALID CHAR.
- SR R0,R0
- IC R0,KEY
- CLM R6,1,=AL1(15)
- BNE KRF9HEX2
- SLL R0,4
- LR R1,R0 SET LEFT NIBBLE
- LA R6,16 SWITCH NIBBLE
- B KRF9LOOP
- KRF9HEX2 EQU *
- LR R2,R0 SET RIGHT NIBBLE
- LA R6,15 SWITCH NIBBLE
- B KRF9LOOP
- KRF9EXIT EQU *
- LA R0,X'0B00' AH=11 FOR SET COLOR PALETTE (TECH. A-49)
- SR R1,R1
- IC R1,ATTRIB
- SRL R1,4
- N R1,=X'00000007' SET BACKGROUND T SAME AS ATTRIB
- SVC VIDEO
- BAL R14,NEWSTAT REFRESH STATUS LINE WITH NEW ATTRIBUTE
- L R5,SAVEROW
- L R6,SAVECOL
- BAL R14,SETCUR
- L R14,KRSV14
- BR R14
- DHEXATT EQU * DISPLAY ATTRIBUTE IN HEX
- SR R1,R1
- IC R1,ATTRIB
- SRL R1,4
- IC R1,HEX(R1)
- STC R1,STATMSG+15
- IC R1,ATTRIB
- N R1,=X'0000000F'
- IC R1,HEX(R1)
- STC R1,STATMSG+16
- BR R14
- KRF10 EQU * BOX GRAPHICS
- ST R14,KR10SV14
- CLI BOX,TRUE IF BOX MODE ON, TURN IT OFF
- BE KRF10OFF ELSE TURN IT ON
- MVI BOX,TRUE
- MVI BLKLABEL,FALSE TURN OFF BLOCK MODE
- MVC STATBLK,=C'BOX' DISPLAY BOX MODE USING BLK IND.
- LA R3,STATBLK
- LA R4,L'STATBLK
- BAL R14,PUTSTAT
- CLI KBINS,INSSTATE IF INSERT MODE ON, TURN IT OFF
- BNE KRF10EXT
- BAL R14,KRINS
- B KRF10EXT
- KRF10OFF EQU *
- MVI BOX,FALSE
- MVC STATBLK,=C' '
- LA R3,STATBLK
- LA R4,L'STATBLK
- BAL R14,PUTSTAT
- KRF10EXT EQU *
- L R14,KR10SV14
- BR R14
- KRSHF1 EQU * SHIFT F1 (QUICK SAVE)
- ST R14,KRSV14
- BAL R14,SAVEFILE SAVE FILE NOW AND RESET FILEMOD
- L R14,KRSV14
- BR R14
- KRSHF10 EQU * SWITCH BOX GRAPHIC CHARACTER SET
- ST R14,KRSV14
- L R1,BOXSETA ADDRESS OF BOX GRAPHIC CHARACTERS
- CLI CONNECT,TRUE
- BE KRSHF10A GO TOGGLE SET1/SET2 IN CONNECT MODE
- LA R1,8(R1) INCR TO NEXT SET
- CL R1,=A(BOXSETE) IS THIS END OF TABLE
- BL KRSHF10S
- LA R1,BOXSET YES, RESET TO FIRST SET
- B KRSHF10S
- KRSHF10A EQU *
- CL R1,=A(BOXSET1) IF SET1, SWITCH TO SET 2
- BE KRSHF102
- KRSHF101 EQU *
- LA R1,BOXSET1
- B KRSHF10S
- KRSHF102 EQU *
- LA R1,BOXSET2
- KRSHF10S EQU *
- ST R1,BOXSETA UPDATE BOX SET POINTER
- KRPRTSET EQU *
- LA R1,=CL20'BOX CHAR = '
- BAL R14,PUTMSG
- L R1,BOXSETA
- MVC STATMSG+11(8),0(R1)
- MVI STATMSG+19,X'00'
- SR R1,R1
- IC R1,ATTRIB
- LA R2,STATMSG+11
- L R15,STATROW
- LA R15,11(R15)
- SVC PRINTTXT PRINT GRAPHIC BOX CHARACTERS
- L R14,KRSV14
- BR R14
- KRALTF10 EQU * TOGGLE CONNECT MODE
- ST R14,KRSV14
- CLI CONNECT,TRUE
- BE KRAF10R
- MVI CONNECT,TRUE SET CONNECT ON WITH SINGLE LINE
- MVC BOXSETA,=A(BOXSET1)
- LA R1,=CL20'CONNECT MODE SET'
- BAL R14,PUTMSG
- L R14,KRSV14
- BR R14
- KRAF10R EQU *
- MVI CONNECT,FALSE
- LA R1,=CL20'CONNECT MODE OFF'
- BAL R14,PUTMSG
- L R14,KRSV14
- BR R14
- KRALTF1 EQU * ALT-F1 PAUSE UNTIL KEY HIT
- ST R14,KRWTSV14
- CLI KSMODE,KSREAD
- BE KRAF1GET
- LA R1,=CL20'PAUSE'
- BAL R14,PUTMSG
- B KRALTEXT
- KRAF1GET EQU *
- LA R1,=CL20'PAUSE - PRESS ENTER'
- BAL R14,PUTMSG
- LA R0,X'0000'
- SVC KEYBOARD READ NEXT KEY AND IGNORE
- KRALTEXT EQU *
- L R14,KRWTSV14
- BR R14
- KRALTF2 EQU * ALT-F2 WAIT A SECOND
- ST R14,KRWTSV14
- LA R1,=CL20'WAIT A SECOND'
- BAL R14,PUTMSG
- CLI KSMODE,KSREAD
- BNE KRALTEXT
- L R1,=A(3000) SET WAIT LOOP COUNT
- KRALTF2L EQU *
- BCT R1,KRALTF2L
- L R14,KRWTSV14
- BR R14
- KRALTF3 EQU * ENTER DEBUG MODE
- ST R14,KRSV14
- SVC TRACE
- DC C'BUG '
- BAL R14,NEWSTAT CLEAN UP SCREEN AFTER DEBUG
- BAL R14,DISPLAY
- L R14,KRSV14
- BR R14
- KRALTF4 EQU * TOGGLE AUDIT MODE
- ST R14,KRSV14
- XI AUDIT,TRUE
- CLI AUDIT,TRUE
- LA R1,=CL20'AUDIT MODE ON'
- BE KRAF4MSG
- LA R1,=CL20'AUDIT MODE OFF'
- KRAF4MSG EQU *
- BAL R14,PUTMSG
- L R14,KRSV14
- BR R14
- KRALTF5 EQU * GOTO LINE #
- ST R14,KRSV14
- LA R1,=CL20'LINE='
- BAL R14,PUTMSG
- LA R1,5
- BAL R14,GETWORD
- CLI LWORD,L'WORD
- BNL KRA5ERR IF LENGTH 0, IGNORE
- SR R1,R1
- IC R1,LWORD
- EX R1,TRTWORD
- BNZ KRA5ERR IF NOT ASCII NUMERIC, IGNORE
- EX R1,PCKWORD
- OI PWORD+L'PWORD-1,X'0F' CONVERT ASCII DIGIT SIGN
- CP PWORD,PLSTLINE IF PAST END, IGNORE
- BH KRA5ERR
- CP PWORD,=P'1'
- BL KRA5ERR IF NOT GE 1, IGNORE
- CP PWORD,PCUR
- BL KRA5LOW LINE IS BELOW CURRENT LINE
- ZAP PWORK,PLSTLINE
- SP PWORK,PWORD PWORK IS DISTANCE FROM END
- ZAP PWORK1,PWORD
- SP PWORK1,PCUR PWORK1 IS DISTANCE FROM CUR
- CP PWORK,PWORK1 IS IT SHORTER VIA PCUR OR PLSTLINE
- BH KRA5FWD GO FORWARD FROM CURRENT POS.
- ZAP PCUR,PLSTLINE
- MVC GLBCUR,GLBLAST
- B KRA5BAK GO BACKWORD FROM END
- TRTWORD TRT WORD(0),NUMERIC TEST WORD FOR NUMERIC LINE #
- PCKWORD PACK PWORD,WORD(0) PACK WORD
- KRA5LOW EQU *
- ZAP PWORK,PCUR
- SP PWORK,PWORD PWORK IS DISTANCE FROM CUR
- CP PWORK,PWORD IS IT SHORTER FROM START OR CUR
- BL KRA5BAK GO BACKWARD FROM CUR
- ZAP PCUR,=P'1'
- MVC GLBCUR,GLBFIRST
- KRA5FWD EQU * GO FORWARD FROM PCUR TO PWORD
- CP PCUR,PWORD
- BE KRA5EXIT
- L R12,GLBCUR
- MVC WLBNEXT,LBNEXT
- CLC WLBNEXT,=A(0)
- BE KRA5ERR ERROR IF EOF FOUND
- AP PCUR,=P'1'
- MVC GLBCUR,WLBNEXT
- B KRA5FWD
- KRA5BAK EQU * GO BACKWARD FROM PCUR TO PWORD
- CP PCUR,PWORD
- BE KRA5EXIT
- L R12,GLBCUR
- MVC WLBPREV,LBPREV
- CLC WLBPREV,=A(0)
- BE KRA5ERR ERROR IF EOF FOUND
- SP PCUR,=P'1'
- MVC GLBCUR,WLBPREV
- B KRA5BAK
- KRA5ERR EQU *
- LA R1,=CL20'INVALID LINE #'
- BAL R14,PUTMSG
- KRA5EXIT EQU *
- BAL R14,DISPLAY
- L R14,KRSV14
- BR R14
- KRBS EQU * BACK SPACE
- ST R14,KRSV14
- LTR R6,R6
- BZ KRDELCHR
- BCTR R6,0
- SP PCOL,=P'1'
- BAL R14,SETCUR
- L R14,KRSV14
- B KRDELCHR
- KRHT EQU * HORIZONTAL TAB
- ST R14,KRSV14
- CH R6,=H'9'
- BL KRHTC10
- CH R6,=H'15'
- BL KRHTC16
- N R6,=X'000000FC' FORCE TO MULTIPLE OF 4
- CVD R6,PWORK
- ZAP PCOL,PWORK
- AP PCOL,=P'1'
- LA R6,4(R6) ADD 4
- AP PCOL,=P'4'
- CH R6,=H'79'
- BNH KRHTEXIT
- KRHTC0 EQU *
- SR R6,R6
- ZAP PCOL,=P'1'
- B KRHTEXIT
- KRHTC10 EQU *
- LA R6,10-1
- ZAP PCOL,=P'10'
- B KRHTEXIT
- KRHTC16 EQU *
- LA R6,16-1
- ZAP PCOL,=P'16'
- KRHTEXIT EQU *
- BAL R14,SETCUR
- L R14,KRSV14
- BR R14
- KRHTAUTO EQU * TOGGLE AUTO TAB MODE
- XI HTMODE,TRUE
- BR R14
- KRCTLK EQU * ROUTE TO CTL-K B,C,D,K,Q,Y
- ST R14,KRSV14
- BAL R14,GETKEY
- L R14,KRSV14
- OI KEY,X'40' MAKE CTL A-Z = A-Z
- CLI KEY,X'42'
- BE KRF5 CTL-K B F5 MARK BLOCK BEGIN
- CLI KEY,X'43'
- BE KRF6 CTL-K C F6 DUPLICATE BLOCK
- CLI KEY,X'44'
- BE KRESC CTL-K D ESCAPE
- CLI KEY,X'4B'
- BE KRF5 CTL-K K F5 MARK BLOCK END
- CLI KEY,X'51'
- BE KRBREAK CTL-K Q CONTROL BREAK
- CLI KEY,X'59'
- BE KRCTLKY CTL-K Y DELETE BLOCK
- BR R14
- KRCTLQ EQU * ROUTE TO CTL-Q A,C,D,F,I,R,S
- ST R14,KRSV14
- BAL R14,GETKEY
- L R14,KRSV14
- OI KEY,X'40' MAKE CTL A-Z = A-Z
- CLI KEY,X'41'
- BE KRF7 CTL-Q A F7 SEARCH/REPLACE
- CLI KEY,X'43'
- BE KREND CTL-Q C END
- CLI KEY,X'44'
- BE KRF4 CTL-Q D END OF LINE
- CLI KEY,X'46'
- BE KRF7 CTL-Q F F7 SEARCH/REPLACE
- CLI KEY,X'49'
- BE KRHTAUTO CTL-Q I AUTO TAB
- CLI KEY,X'52'
- BE KRHOME CTL-Q R HOME
- CLI KEY,X'53'
- BE KRF3 CTL-Q S START OF LINE
- BR R14
- KRBREAK EQU * CTL-K Q BREAK
- SVC EXIT
- TITLE 'CHKMARK - IF IN MARK MODE, PRINT IN REVERSE VIDEO'
- CHKMARK EQU *
- CLI BLKLABEL,MARK
- BNER R14
- ST R14,CHKMSV14
- CLI KEY,ASCUP IS CURRENT KEY UP
- BNE CHKMARK1
- MVI BLKLABEL,FALSE TURN OFF MARKING ON UP ARROW
- CHKMARK1 EQU *
- SR R3,R3
- BAL R14,PUTLINE
- MVI BLKLABEL,MARK RESET MARKING
- L R14,CHKMSV14
- BR R14
- TITLE 'UPDATE - UPDATE SCREEN LINES IN EXTENDED STORAGE'
- UPDATE EQU *
- ST R14,UPDTSV14
- CLI SCRMOD,TRUE HAS SCREEN BEEN MODIFIED
- BNER R14 NO, EXIT NOW
- MVI FILEMOD,TRUE SET FILE MODIFY SWITCH
- MVI SCRMOD,FALSE RESET SCREEN MODIFY SWITCH
- LR R2,R7 SAVE R7
- L R7,ASCB
- USING SCB,R7
- UPDTLOOP EQU *
- CLI SCBMOD,TRUE
- BNE UPDTNEXT
- L R12,SCBADDR
- BAL R14,CHKADDR
- USING LB,R12
- MVC LBLINE(L'SCBLINE),SCBLINE
- UPDTNEXT EQU *
- LA R7,LSCB(R7)
- CL R7,LASTSCB
- BNH UPDTLOOP
- LR R7,R2 RESTORE R7
- BAL R14,AUDITMS
- L R14,UPDTSV14
- BR R14
- TITLE 'CHKADDR - VALIDATE SCB ADDRESS BEFORE WRITE'
- CHKADDR EQU *
- CL R12,MINMEM
- BL E05
- CL R12,MAXMEM
- BNL E05
- BR R14
- TITLE 'GETNEWLB - ALLOCATE NEW LB SPACE IN EXT. MEMORY IF AVAIL.'
- GETNEWLB EQU *
- L R1,GFQEL IS THERE ROOM FOR LB LEFT IN PRIMARY AREA
- SH R1,=AL2(LLB)
- BM CHKFREE NO, GO CHECK FREE QUEUE
- ST R1,GFQEL UDATE LENGTH OF PRIMARY AREA
- L R1,GFQEA
- ST R1,ANEWLB SET ADDRESS OF ALLOCATED LB
- LA R1,LLB(R1)
- ST R1,GFQEA UPDATE ADDRESS
- B GETMEXIT
- CHKFREE EQU *
- L R1,AFREELB IS THERE AN LB ON FREE QUEUE
- LTR R1,R1
- BZ GETMERR NO, EXIT WITH ERROR
- ST R1,ANEWLB SET ADDRESS OF ALLOCATED LB
- LR R12,R1
- MVC AFREELB,LBNEXT UPDATE NEXT FREE LB
- GETMEXIT EQU *
- SR R15,R15
- BR R14
- GETMERR EQU *
- ST R14,GETMSV14
- LA R1,=CL20'** OUT OF MEMORY **'
- BAL R14,PUTMSG
- LA R15,4
- L R14,GETMSV14
- BR R14
- TITLE 'ERROR MESSAGES'
- E01 EQU *
- LA R2,=C'E01 - I/O ERROR ON INPUT FILE$'
- ERR EQU *
- SVC WTO
- SVC TRACE
- DC C'ERR '
- SVC TRACE
- DC C'BUG '
- SVC EXIT
- E02 EQU *
- LA R2,=C'E02 - MS-DOS EXTENDED MEMORY ALLOCATION ERROR$'
- B ERR
- E03 EQU *
- LA R2,=C'E03 - NO MEMORY AVAILABLE FOR ADDITIONAL RECORD$'
- LA R15,3
- BR R14
- E04 EQU *
- EOFUT2 EQU *
- LA R2,=C'E04 - EOF ON KEYBOARD SIMULATOR FILE$'
- B ERR
- E05 EQU *
- LA R2,=C'E05 - INVALID EXTENDED MEMORY ADDRESS$'
- B ERR
- TITLE 'DATA SECTION'
- LTORG
- *
- * REGISTER USAGE
- *
- R0 EQU 0 WORK
- R1 EQU 1 WORK
- R2 EQU 2 WORK
- R3 EQU 3 WORK
- R4 EQU 4 WORK
- R5 EQU 5 ROW IN 3RD BYTE
- R6 EQU 6 COL IN 4TH BYTE
- R7 EQU 7 BASE FOR SCREEN CONTROL BLOCK SCB
- R8 EQU 8 FIRST BASE
- R9 EQU 9 SECOND BASE
- R10 EQU 10 THIRD BASE
- R11 EQU 11 LENGTH FOR CROSS MEMORY MOVE
- R12 EQU 12 BASE FOR LB IN EXTENDED STORAGE
- R13 EQU 13 SAVE AREA
- R14 EQU 14 LINK FROM MAINLINE TO ROUTINES
- R15 EQU 15 RETURN CODE FROM ROUTINES
- *
- * PC/370 SVC'S
- *
- EXIT EQU 0
- OPEN EQU 1
- CLOSE EQU 2
- GET EQU 5
- PUT EQU 6
- DELETE EQU 7
- SEARCH EQU 8
- TRACE EQU 9
- GETMAIN EQU 10
- FREEMAIN EQU 11
- ASCEBC EQU 12
- EBCASC EQU 13
- RENAME EQU 23
- PRINTTXT EQU 24 MICRO-CODE PRINTING OF TEXT ON ROW VIA PC/370
- VIDEO EQU 128+16 BIOS VIDEO-IO (TECH. REF. A-48)
- KEYBOARD EQU 128+22 BIOS KEYBOARD (TECH. REF. A-26)
- WRITECHR EQU 200+2 MS-DOS SVC 2 DISPLAY CHAR IN R2 ON CONSOLE
- READKEY EQU 200+7 MS-DOS SVC 7 GET KEY WITHOUT ECHO
- WTO EQU 200+9 MS-DOS SVC 9 PRINT STRING WITH ENDING $ ON CON.
- *
- * DATA AREAS
- *
- ASCBS EQU X'08' ASCII BACKSPACE
- ASCLF EQU X'0A' ASCII LINE FEED
- ASCCR EQU X'0D' ASCII CARRIAGE RETURN
- ASCASK EQU X'2A' ASCII ASTERISK FOR ALC COMMENT CHECK
- ASCBLK EQU X'20' ASCII SPACE
- ASCTAB EQU X'09' ASCII TAB
- ASCRIGHT EQU X'1C' ASCII CURSOR RIGHT
- ASCF1 EQU X'BB' EXTENDED ASCII F1 WITH HIGH BIT ON
- ASCF2 EQU X'BC' EXTENDED ASCII F2 WITH HIGH BIT ON
- ASCALTF1 EQU X'E8' EXTENDED ASCII ALT-F1 WITH HIGH BIT ON
- ASCALTF2 EQU X'E9' EXTENDED ASCII ALT-F2 WITH HIGH BIT ON
- ASCUP EQU X'C8' EXTENDED ASCII UP ARROW WITH HIGH BIT ON
- ASCDOWN EQU X'D0' EXTENDED ASCII DOWN ARROW WITH HIGH BIT
- ASCLEFT EQU X'CB' EXTENDED ASCII LEFT ARROW
- ASCRGHT EQU X'CD' EXTENDED ASCII RIGHT ARROW
- ESCAPE EQU X'1B' ASCII ESCAPE KEY
- DC C'**** KEY ****'
- KEY DC X'00' KEY FROM KEYBOARD OR EMULATOR FILE
- DC C'*** LAST KEY ***'
- LASTKEY DC X'00' PREV KEY FROM KEYBOARD
- DC C'**** WAITLOOP *****'
- WAITLOOP DC F'1' DEFAULT WAIT LOOP IS 1
- PWORD DC PL8'0'
- WORD DC CL15' ' WORD READ VIA GET WORD
- LWORD DC X'00' LENGTH OF WORD READ-1 OR X'FF' IF ZERO
- KEYWORD DC CL15' ' SEARCH KEY WORD
- LKEYWORD DC X'00' SAVE LENGTH OF KEYWORD - 1 FOR F8
- REPWORD DC CL15' ' REPLACE WORD
- LREPWORD DC X'00' SAVE LENGTH OF REPLACE - 1 FOR F8
- SAVETEXT DC CL80' ' SAVE TEXT FOLLOWING KEY FOR REPLACE
- FINDKEY DC XL256'00' TRT FOR FIRST CHAR. IN KEYWORD
- NUMERIC DC 48X'FF',10X'00',198X'FF' TRT ASCII NUMERIC TEST
- HEX DC C'0123456789ABCDEF' CONVERT NIBBLE TO EBCDIC
- HEXTAB DC 128X'FF' CONVERT ASCII TO NIBBLE
- ORG HEXTAB+X'30'
- DC AL1(0,1,2,3,4,5,6,7,8,9) ASCII 0-9
- ORG HEXTAB+X'41'
- DC AL1(10,11,12,13,14,15) ASCII A-F
- ORG HEXTAB+X'61'
- DC AL1(10,11,12,13,14,15) ASCII A-F
- ORG HEXTAB+128
- *
- * KEY ROUTINE ADDRESS TABLE
- *
- KRTAB DS 0F
- DC A(0) ZERO FUNCTION CODE NOT USED
- KEYUND DC A(KRUND) KEY UNDEFINED
- KEYCHAR DC A(KRCHAR) PROCESS CHARACTER UPDATE ON SCREEN
- KEYESC DC A(KRESC) ESCAPE KEY
- KEYPGDN DC A(KRPGDN) PAGE DOWN
- KEYPGUP DC A(KRPGUP) PAGE UP
- KEYUP DC A(KRUP) CURSOR UP
- KEYLEFT DC A(KRLEFT) CURSOR LEFT
- KEYRIGHT DC A(KRRIGHT) CURSOR RIGHT
- KEYDOWN DC A(KRDOWN) CURSOR DOWN
- KEYINS DC A(KRINS) INSERT
- KEYDEL DC A(KRDEL) DELETE
- KEYCR DC A(KRCR) CARRIAGE RETURN
- KEYBS DC A(KRBS) BACK SPACE
- KEYHT DC A(KRHT) HORIZONTAL TAB
- KEYHOME DC A(KRHOME) HOME (TOP OF FILE)
- KEYEND DC A(KREND) END (END OF FILE)
- KEYALTF1 DC A(KRALTF1) ENTER PAUSE UNTIL KEY HIT FOR EMULATOR
- KEYALTF2 DC A(KRALTF2) ENTER WAIT FOR 1 SECOND FOR EMULATOR
- KEYALTF3 DC A(KRALTF3) ENTER DEBUG MODE
- KEYALTF4 DC A(KRALTF4) TOGGLE AUDIT MODE
- KEYALTF5 DC A(KRALTF5) GO TO LINE #
- KEYALTFA DC A(KRALTF10) TOGGLE CONNECT BOX GRAPHIC MODE
- KEYF1 DC A(KRF1) F1 HELP SCREEN 1
- KEYF2 DC A(KRF2) F2 HELP SCREEN 2
- KEYF3 DC A(KRF3) F3 START OF LINE
- KEYF4 DC A(KRF4) F4 END OF LINE
- KEYF5 DC A(KRF5) F5 LABEL BLOCK
- KEYF6 DC A(KRF6) F6 DUPLICATE BLOCK
- KEYF7 DC A(KRF7) F7 SEARCH
- KEYF8 DC A(KRF8) F8 REPEAT LAST F7 SEARCH
- KEYF9 DC A(KRF9) F9 SELECT COLOR
- KEYF10 DC A(KRF10) F10 BOX GRAPHICS
- KEYSHF1 DC A(KRSHF1) SHIFT F1 QUICK SAVE
- KEYSHF3 EQU KEYF3 SHFT-F3 START OF LINE
- KEYSHF4 EQU KEYF4 SHFT-F4 END OF LINE
- KEYSHF6 DC A(KRSHF6) SHIFT F6 DELETE LINE
- KEYSHF7 DC A(KRHTAUTO) SHIFT F7 AUTO TAB
- KEYSHF9 DC A(KRHTAUTO) SHIFT F9 AUTO TAB
- KEYSHF10 DC A(KRSHF10) SHIFT F10 (CHANGE BOX GRAPHIC CHAR SET)
- KEYCTLC EQU KEYPGDN CTL-C PAGE DOWN
- KEYCTLD EQU KEYRIGHT CTL-D CURSOR RIGHT
- KEYCTLE EQU KEYUP CTL-E CURSOR UP
- KEYCTLG EQU KEYDEL CTL-G DELETE
- KEYCTLH EQU KEYBS CTL-H BACKSPACE
- KEYCTLI EQU KEYHT CTL-I TAB
- KEYCTLK DC A(KRCTLK) CTL-K ROUTE TO B,C,D,K,Q,Y
- KEYCTLL EQU KEYF8 CTL-L REPEAT SEARCH
- KEYCTLN EQU KEYCR CTL-N CARRIAGE RETURN OR ENTER
- KEYCTLQ DC A(KRCTLQ) CTL-Q ROUTE TO A,C,D,F,I,R,S
- KEYCTLR EQU KEYPGUP CTL-R PAGE UP
- KEYCTLS EQU KEYLEFT CTL-S CURSOR LEFT
- KEYCTLU EQU KEYINS CTL-U INSERT
- KEYCTLX EQU KEYDOWN CTL-X CURSOR DOWN
- KEYCTLY EQU KEYSHF6 CTL-Y DELETE LINE
- *
- * KEY ROUTINE TRANSLATE TABLE WITH INDEX TO KRTAB
- *
- KEYTAB DC 32AL1(KEYUND-KRTAB) DEFAULT UNDEFINED 0-31
- DC 96AL1(KEYCHAR-KRTAB) DEFAULT CHAR 32-127
- DC 128AL1(KEYUND-KRTAB) DEFAULT UNDEFINED 128-255
- *
- * OVERLAY DEFAULT INDEX VALUES WITH SPECIFIC KEY ROUTINE INDEXES
- * (SEE MASIC MANUAL APPENDIX G-7 FOR OFFSETS)
- *
- ORG KEYTAB+X'03'
- DC AL1(KEYCTLC-KRTAB) CTL-C PAGE DOWN
- DC AL1(KEYCTLD-KRTAB) CTL-D CURSOR RIGHT
- DC AL1(KEYCTLE-KRTAB) CTL-E CURSOR UP
- ORG KEYTAB+X'07'
- DC AL1(KEYCTLG-KRTAB) CTL-G DELETE
- DC AL1(KEYBS-KRTAB) CTL-H BACK SPACE
- DC AL1(KEYHT-KRTAB) CTL-I HORIZONTAL TAB
- ORG KEYTAB+X'0B'
- DC AL1(KEYCTLK-KRTAB) CTL-K ROUTE B,C,D,K,Q,Y
- DC AL1(KEYCTLL-KRTAB) CTL-L REPEAT LAST SEARCH
- DC AL1(KEYCR-KRTAB) CARRIAGE RETURN (ENTER)
- DC AL1(KEYCTLN-KRTAB) CTL-N INSERT LINE
- ORG KEYTAB+X'11'
- DC AL1(KEYCTLQ-KRTAB) CTL-Q ROUTE A,C,D,F,I,R,S
- DC AL1(KEYCTLR-KRTAB) CTL-R PAGE UP
- DC AL1(KEYCTLS-KRTAB) CTL-S CURSOR LEFT
- ORG KEYTAB+X'15'
- DC AL1(KEYCTLU-KRTAB) CTL-U INSERT
- ORG KEYTAB+X'18'
- DC AL1(KEYCTLX-KRTAB) CTL-X DOWN
- DC AL1(KEYCTLY-KRTAB) CTL-Y DELETE LINE
- ORG KEYTAB+X'1B'
- DC AL1(KEYESC-KRTAB) ESCAPE KEY
- ORG KEYTAB+128+59
- DC AL1(KEYF1-KRTAB) F1 HELP SCREEN 1
- DC AL1(KEYF2-KRTAB) F2 HELP SCREEN 2
- DC AL1(KEYF3-KRTAB) F3 START OF LINE
- DC AL1(KEYF4-KRTAB) F4 END OF LINE
- DC AL1(KEYF5-KRTAB) F5 LABEL BLOCK OF LINES
- DC AL1(KEYF6-KRTAB) F6 DUPLICATE BLOCK OF LINES
- DC AL1(KEYF7-KRTAB) F7 SEARCH
- DC AL1(KEYF8-KRTAB) F8 REPEAT SEARCH
- DC AL1(KEYF9-KRTAB) F9 COLOR SELECTION
- DC AL1(KEYF10-KRTAB) F10 DISPLAY FREE MEMORY
- ORG KEYTAB+128+71
- DC AL1(KEYHOME-KRTAB) HOME
- ORG KEYTAB+128+72
- DC AL1(KEYUP-KRTAB) CURSOR UP
- ORG KEYTAB+128+73
- DC AL1(KEYPGUP-KRTAB) PAGE UP
- ORG KEYTAB+128+75
- DC AL1(KEYLEFT-KRTAB) CURSOR LEFT
- ORG KEYTAB+128+77
- DC AL1(KEYRIGHT-KRTAB) CURSOR RIGHT
- ORG KEYTAB+128+79
- DC AL1(KEYEND-KRTAB) END
- ORG KEYTAB+128+80
- DC AL1(KEYDOWN-KRTAB) CURSOR DOWN
- ORG KEYTAB+128+81
- DC AL1(KEYPGDN-KRTAB) PAGE DOWN
- ORG KEYTAB+128+82
- DC AL1(KEYINS-KRTAB) INSERT
- ORG KEYTAB+128+83
- DC AL1(KEYDEL-KRTAB) DELETE
- ORG KEYTAB+128+84
- DC AL1(KEYSHF1-KRTAB) SHFT-F1 QUICK SAVE
- ORG KEYTAB+128+86
- DC AL1(KEYSHF3-KRTAB) SHFT-F3 START OF LINE
- ORG KEYTAB+128+87
- DC AL1(KEYSHF4-KRTAB) SHFT-F4 END OF LINE
- ORG KEYTAB+128+89
- DC AL1(KEYSHF6-KRTAB) SHFT-F6 DELETE LINE
- ORG KEYTAB+128+90
- DC AL1(KEYSHF7-KRTAB) SHFT-F7 SET AUTO TAB (INDENT)
- ORG KEYTAB+128+92
- DC AL1(KEYSHF9-KRTAB) SHFT-F9 SET AUTO TAB (INDENT)
- ORG KEYTAB+128+93
- DC AL1(KEYSHF10-KRTAB) SHFT-F10 CHANGE BOX GRAPHIC SET
- ORG KEYTAB+128+104
- DC AL1(KEYALTF1-KRTAB) ALT-F1 PAUSE UNTIL KEY HIT
- ORG KEYTAB+128+105
- DC AL1(KEYALTF2-KRTAB) ALT-F2 WAIT ONE SECOND
- ORG KEYTAB+128+106
- DC AL1(KEYALTF3-KRTAB) ALT-F3 ENTER DEBUG MODE
- ORG KEYTAB+128+107
- DC AL1(KEYALTF4-KRTAB) ALT-F4 TOGGLE AUDIT MODE
- ORG KEYTAB+128+108
- DC AL1(KEYALTF5-KRTAB) ALT-F5 GO TO LINE #
- ORG KEYTAB+128+113
- DC AL1(KEYALTFA-KRTAB) ALT-F10 TOGGLE BOX CONNECT MODE
- *
- * END OF KEYTAB
- *
- ORG KEYTAB+256
- ATTRIB DC X'17' WHITE ON BLUE DEFAULT SCREEN
- ATTSAVE DC X'00' SAVE DURING REVERSE VIDEO MARKING
- * SEE TECH. HANDBOOK 1-140 FOR COLOR ATTIRBUTES ON IBM COLOR MONITOR
- * USE X'0E' FOR TURBO PASCAL DEFAULT YELLOW ON BLACK
- SAVEAREA DC 9D'0'
- INITSV14 DC A(0) SAVE LINK FOR INIT
- HELPSV14 DC A(0) SAVE LINK FOR HELPSCRN
- TERMSV14 DC A(0) SAVE LINK FOR TERMKS
- LOADSV14 DC A(0) SAVE LINK FOR LOADFILE
- EDITSV14 DC A(0) SAVE LINK FOR EDITFILE
- SAVESV14 DC A(0) SAVE LINK FOR SAVEFILE
- DISPSV14 DC A(0) SAVE LINK FOR DISPLAY
- SETCSV14 DC A(0) SAVE LINK FOR SETCUR
- CLRSV14 DC A(0) SAVE LINK FOR CLEAR
- CLRLSV14 DC A(0) SAVE LINK FOR CLRLINE
- GETKSV14 DC A(0) SAVE LINK FOR GETKEY
- PUTLSV14 DC A(0) SAVE LINK FOR PUTLINE
- PUTSSV14 DC A(0) SAVE LINK FOR PUTSTAT
- CHKMSV14 DC A(0) SAVE LINK FOR CHKMARK
- NEWFSV14 DC A(0) SAVE LINK FOR NEWFILE
- UPDTSV14 DC A(0) SAVE LINK FOR UPDATE
- SCRLSV14 DC A(0) SAVE LINK FOR SCRLDOWN, SCRLUP
- KRCRSV14 DC A(0) SAVE LINK FOR KRCR
- INSCSV14 DC A(0) SAVE LINK FOR KRINSCOM
- KEYSSV14 DC A(0) SAVE LINK FOR KEYSTATS
- PPCTSV14 DC A(0) SAVE LINK FOR PUTPCT
- KR10SV14 DC A(0) SAVE LINK FOR KRF10
- KRBXSV14 DC A(0) SAVE LINK FOR KRCHKBOX
- SCHRSV14 DC A(0) SAVE LINK FOR KRSETCHR
- GETWSV14 DC A(0) SAVE LINK FOR GETWORD
- GETMSV14 DC A(0) SAVE LINK FOR GETNEWLB
- KRWTSV14 DC A(0) SAVE LINK FOR KRALTF1/F2
- KRSV14 DC A(0) COMMON SAVE FOR FIRST LEVEL KR ROUTINES
- SAVER0R3 DS 4F SAVE AREA FOR AUDIT ROUTINES (REQ'D FOR SEARCH)
- KRF9SV12 DS 2F SAVE AREA FOR F9
- GETWSV34 DS 2F SAVE AREA FOR GETWORD ACROSS GETKEY
- TRUE EQU 1
- FALSE EQU 0
- MARK EQU 2 MARKING BLK LABEL MODE
- DC C'*** AUDIT ***'
- ALC DC AL1(TRUE) FILE TYPE ALC (USED FOR TAB PROCESSING)
- AUDIT DC AL1(FALSE) AUDIT SWITCH FOR AUDITSCB AND AUDITMS
- HTMODE DC AL1(FALSE) AUTO TAB MODE
- EOF1 DC AL1(FALSE) END OF FILE
- EOJ DC AL1(FALSE) END OF JOB
- FILEMOD DC AL1(FALSE) FILE MODIFIED
- SCRMOD DC AL1(FALSE) SCREEN MODIFIED
- BLKLABEL DC AL1(FALSE) LABELED BLOCK (TRI-STATE FALSE,MARK,TRUE)
- SAVBLKLB DC AL1(FALSE) SAVE LABELD BLK MODE DURING DISPLAY
- CURDEL DC AL1(FALSE) CURRENT LB DELETED
- FIRSTSAV DC AL1(TRUE) FIRST SAVE REQUEST
- REPLACE DC AL1(FALSE) SEARCH AND REPLACE
- GLOBAL DC AL1(FALSE) GLOBAL REPLACE
- BOX DC AL1(FALSE) BOX CHARACTER GRPAHICS MODE
- CONNECT DC AL1(FALSE) BOX GRAPHIC CONNECT MODE
- DIRUP EQU 0
- DIRRIGHT EQU 1
- DIRDOWN EQU 2
- DIRLEFT EQU 3
- DIRLAST DC AL1(DIRRIGHT)
- DIRNEW DC AL1(DIRRIGHT)
- DIRTAB DC AL1(BU,BUR,BD,BUL,BRU,BR,BUL,BL)
- DC AL1(BU,BLU,BD,BRU,BLU,BR,BUR,BL)
- BU EQU 0 UP
- BD EQU 1 DOWN
- BUR EQU 2 UPPER LEFT
- BUL EQU 3 UPPER RIGHT
- BRU EQU 4 LOWER RIGHT
- BR EQU 5 RIGHT
- BL EQU 6 LEFT
- BLU EQU 7 LOWER LEFT
- REVDIR DC AL1(DIRDOWN,DIRLEFT,DIRUP,DIRRIGHT) REVERSE OF DIRECTION
- REVLAST DC AL1(0) SAVE REV OF DIRLAST
- BOXSET EQU *
- BOXSET2 DC AL1(186,186,201,187,188,205,205,200) GRAPHIC DOUBLE LINE BOX
- BOXSET1 DC AL1(179,179,218,191,217,196,196,192) GRAPHIC SINGLE LINE BOX
- DC 8AL1(ASCASK) ASCII * PRINTABLE BOX
- DC AL1(94,118,88,88,88,62,60,88) ARROWS (SORT OF)
- DC 8AL1(ASCBLK) BLANK (FOR BG COLORS)
- BOXSETE EQU *
- BOXSETA DC A(BOXSET) ADDRESS OF CURRENT BOX SET
- BOXCON EQU * TABLE TO CONNECT SINGLE/DOUBLE BOX LINES
- *
- * SEE IBM TECH. REF. FOR PC PAGES C-7 THRU C-9 FOR GRAPHICS 179-218
- *
- * ---- SINGLE --- ---- DOUBLE ---
- * UP RT DN LF UP RT DN LF
- *
- DC AL1(179,195,179,180,186,198,186,181) 179
- DC AL1(180,197,180,180,180,180,180,181) 180
- DC AL1(181,181,181,180,181,216,181,181) 181
- DC AL1(182,215,182,182,182,182,182,185) 182
- DC AL1(183,210,191,183,182,183,183,187) 183
- DC AL1(181,184,184,191,184,209,187,184) 184
- DC AL1(185,185,185,182,185,206,185,185) 185
- DC AL1(179,199,179,182,186,204,186,185) 186
- DC AL1(187,187,184,183,185,203,187,187) 187
- DC AL1(190,188,188,189,188,202,185,188) 188
- DC AL1(217,208,189,189,189,189,182,188) 189
- DC AL1(190,190,181,217,188,207,190,190) 190
- DC AL1(180,194,191,191,191,191,183,184) 191
- DC AL1(192,192,195,193,211,212,192,192) 192
- DC AL1(193,193,197,193,208,193,193,193) 193
- DC AL1(197,194,194,194,194,194,210,194) 194
- DC AL1(195,195,195,197,195,198,195,195) 195
- DC AL1(193,196,194,196,208,205,210,205) 196
- DC AL1(197,197,197,197,197,197,197,197) 197
- DC AL1(198,195,198,198,198,198,198,216) 198
- DC AL1(199,199,199,215,199,204,199,199) 199
- DC AL1(212,211,200,200,200,200,204,202) 200
- DC AL1(201,214,213,201,204,201,201,203) 201
- DC AL1(207,202,202,202,202,202,206,202) 202
- DC AL1(203,203,209,203,206,203,203,203) 203
- DC AL1(204,199,204,204,204,204,204,206) 204
- DC AL1(207,196,209,196,202,205,203,205) 205
- DC AL1(206,206,206,206,206,206,206,206) 206
- DC AL1(207,207,216,207,202,207,207,207) 207
- DC AL1(193,208,208,208,208,208,215,208) 208
- DC AL1(216,209,209,209,209,209,203,209) 209
- DC AL1(210,210,194,210,215,210,210,210) 210
- DC AL1(192,211,211,208,211,200,209,211) 211
- DC AL1(212,192,198,212,200,212,212,207) 212
- DC AL1(198,218,213,213,213,213,201,209) 213
- DC AL1(214,214,218,210,209,201,214,214) 214
- DC AL1(215,215,215,215,215,215,215,215) 215
- DC AL1(216,216,216,216,216,216,216,216) 216
- DC AL1(217,193,180,217,189,217,217,190) 217
- DC AL1(195,218,218,194,218,213,214,218) 218
- SCRLEND EQU 23*256+79 SCROLL ENDING ROW AND COL
- SAVETYPE DC CL3' ' SAVE ORIG. FILE TYPE
- ROWINC EQU 256 INCREMENT FOR ROW IN R5 REG. (3RD BYTE)
- MAXROW DC A(23*ROWINC) LAST ROW ON SCREEN
- MAXSCB DC A(0) LAST ROW SCB POINTER
- LASTROW DC A(0) LAST ROW CURSOR
- LASTSCB DC A(0) LAST SCB ADDR
- SAVEROW DC A(0) TEMP SAVE FOR ROW (R5)
- SAVECOL DC A(0) TEMP SAVE FOR COL (R6)
- SAVESCB DC A(0) TEMP SAVE FOR SCB (R7)
- BLK1LB DC A(0) STARTING LB OF BLOCK
- BLK2LB DC A(0) ENDING LB OF BLOCK
- NEXTBLK DC A(0) NEXT LB TO DUPLICATE
- SAVENEXT DC A(0) SAVE NEXT LB FROM CURRENT LB
- PREVDUP DC A(0) PREVIOUS LB IN DUPLICATE CHAIN
- PTOTAL DC PL3'0'
- LOADMSG DC C' LINES LOADED ='
- DTOTAL DC CL6' ZZZZZ',C'$'
- LBUFF1 EQU 8192
- LBUFF2 EQU 4096
- LBUFFS EQU LBUFF1+LBUFF2
- TBUFF EQU X'80' COMMAND LINE IN LOW MEMORY
- ATYPE1 DC A(DSN1+4) DEFAULT ADDR OF .XXX IN DSN
- DSN1 DC C'TEST.ALC',64X'00' DSN FROM COMMAND
- REN1 DC C'TEST.BKP',64X'00' RENAME DSN FOR SAVE
- SYSUT1 DS 0D DCB FOR ASCII TEXT FILE READ/WRITE
- DC C'ADCB'
- DC A(DSN1) ADDRESS OF UP TO 64 BYTE PATH/FILE
- DC X'FFFF' HANDLE ASSIGNED BY MS-DOS AT OPEN
- DC X'00' DATA CONTROL BLOCK FLAGS
- DC C'S' DATA SET ORGANIZATION
- DC C'G' DATA SET ACCESS MODE
- DC C'T' DATA SET RECORD FORMAT
- DC X'0A' END OF RECORD CODE
- DC X'1A' END OF FILE CODE
- DC H'135' RECORD LENGTH
- DC AL2(LBUFF1) BLOCK LENGTH (2<BLKSZ<64K-16)
- DC A(EOFUT1) END OF DATA EXIT ADDRESS
- DC A(E01) SYCHRONOUS ERROR EXIT ADDRESS
- DC A(WLBLINE) RECORD AREA ADDRESS FOR GET/PUT
- DC A(0) BLOCK AREA ADDRESS (0 FOR DYNAM)
- DC A(0) RELATIVE BYTE ADDRESS
- DC A(REN1) RENAME ASCIIZ FILE
- DC F'0' BLOCK I/O COUNT SINCE OPEN
- DC H'0' PHYSICAL BLOCK SIZE OF LAST READ/WRITE
- *
- * RESERVED AREA FOR USE BY PC/370 IOS SUPERVISOR WHILE FILE OPEN
- *
- DC XL4'00' SEGMENT:OFFSET OF DCBDSN PATH/FILE NAME
- DC XL4'00' SEGMENT:OFFSET OF EODAD EXIT
- DC XL4'00' SEGMENT:OFFSET OF SYNAD EXIT
- DC XL4'00' SEGMENT:OFFSET OF RECORD AREA FOR GET/PUT
- DC XL4'00' SEGMENT:OFFSET OF RENAME FILE NAME
- DC XL4'00' SEGMENT:OFFSET OF BLOCK AREA
- DC XL4'00' SEGMENT:OFFSET OF CURRENT RECORD IN BLOCK AREA
- DC XL2'00' OFFSET OF CURRENT END OF DATA IN BLOCK AREA
- DC XL2'00' OFFSET OF END OF ALLOCATED BLOCK AREA
- DC H'0' REVERSED LRECL
- DC H'0' REVERSED BLKSZ
- *
- * DATA FOR KEYBOARD SIMULATOR
- *
- KSOFF EQU 0
- KSREAD EQU 1
- KSWRITE EQU 2
- DC C'**** KSREC ****'
- KSREC DC XL256'00'
- KSRECEND EQU *
- DC C'**** KSNEXT ****'
- KSNEXT DC A(KSRECEND) ASSUME READ AND SET TO FORCE NEXT READ
- KSMODE DC AL1(KSOFF)
- DSN2 DC C'TEST.KSF',64X'00' DSN FROM COMMAND LINE
- SYSUT2 DS 0D DCB FOR KEYBOARD SIMULATOR
- DC C'ADCB'
- DC A(DSN2) ADDRESS OF UP TO 64 BYTE PATH/FILE
- DC X'FFFF' HANDLE ASSIGNED BY MS-DOS AT OPEN
- DC X'00' DATA CONTROL BLOCK FLAGS
- DC C'S' DATA SET ORGANIZATION
- DC C'G' DATA SET ACCESS MODE
- DC C'F' DATA SET RECORD FORMAT
- DC X'0A' END OF RECORD CODE
- DC X'1A' END OF FILE CODE
- DC H'256' RECORD LENGTH
- DC AL2(LBUFF2) BLOCK LENGTH (2<BLKSZ<64K-16)
- DC A(EOFUT2) END OF DATA EXIT ADDRESS
- DC A(E01) SYCHRONOUS ERROR EXIT ADDRESS
- DC A(KSREC) RECORD AREA ADDRESS FOR GET/PUT
- DC A(0) BLOCK AREA ADDRESS (0 FOR DYNAM)
- DC A(0) RELATIVE BYTE ADDRESS
- DC A(0) RENAME ASCIIZ FILE
- DC F'0' BLOCK I/O COUNT SINCE OPEN
- DC H'0' PHYSICAL BLOCK SIZE OF LAST READ/WRITE
- *
- * RESERVED AREA FOR USE BY PC/370 IOS SUPERVISOR WHILE FILE OPEN
- *
- DC XL4'00' SEGMENT:OFFSET OF DCBDSN PATH/FILE NAME
- DC XL4'00' SEGMENT:OFFSET OF EODAD EXIT
- DC XL4'00' SEGMENT:OFFSET OF SYNAD EXIT
- DC XL4'00' SEGMENT:OFFSET OF RECORD AREA FOR GET/PUT
- DC XL4'00' SEGMENT:OFFSET OF RENAME FILE NAME
- DC XL4'00' SEGMENT:OFFSET OF BLOCK AREA
- DC XL4'00' SEGMENT:OFFSET OF CURRENT RECORD IN BLOCK AREA
- DC XL2'00' OFFSET OF CURRENT END OF DATA IN BLOCK AREA
- DC XL2'00' OFFSET OF END OF ALLOCATED BLOCK AREA
- DC H'0' REVERSED LRECL
- DC H'0' REVERSED BLKSZ
- *
- * DATA FOR LINE BLOCKS
- *
- DC C'*** FIRST/LAST/CUR ***'
- GLBFIRST DC A(0) GLOBAL POINTER TO FIRST LB
- GLBLAST DC A(0) GLOBAL POINTER TO LAST LB
- GLBCUR DC A(0) GLOBAL POINTER TO CURRENT LB
- DC C'*** GFQEA/L ***'
- GFQEA DC A(0) ADDRESS OF REMAINING FREE EXTENDED MEMORY
- GFQEL DC F'0' LENGTH OF REMAINING FREE EXTENDED MEMORY
- MINMEM DC A(0) LOW LIMIT
- MAXMEM DC A(0) MAX LIMIT
- ANEWLB DC A(0) LB ALLOCATED BY GETNEWLB
- AFREELB DC A(0) QUEUE OF FREE LB'S CREATED BY DELETE
- WLBADDR DS A
- WLB DS 0X
- WLBPREV DC A(0)
- WLBNEXT DC A(0)
- WLBLINE DC CL80' ',CL53' ' PAD TO 133 FOR READING PRINT FILES
- DC AL1(ASCCR,ASCLF)
- TLBADDR DS A
- TLB DS 0X
- TLBPREV DS A
- TLBNEXT DS A
- TLBLINE DS CL80,CL53
- STATRC0 EQU 24*256
- STATROW DC A(STATRC0)
- STATLINE DS 0CL80
- STATMSG DC CL20'LOADING FILE ',C' '
- STATNAME DC CL15' ',C' LINE'
- STATREC DC CL6' ',C' COL'
- STATCOL DC CL4' ',C' '
- STATCAP DC CL3' ',C' ' CAPS KEY ON/OFF
- STATINS DC CL3' ',C' ' INSERT MODE ON/OFF
- STATNUM DC CL3' ',C' ' NUM KEY ON/OFF
- STATBLK DC CL3' ',C' ' LABELED BLOCK ON/OFF (F5, CTL-K B/K)
- STATPCT DC CL4' ',C'%'
- DC (STATLINE+80-*)C' '
- DC X'00' EOR FOR PRINTTXT
- KBCAP DC X'00' CAPS KEY STATUS VIA BIOS KEYBOARD
- KBINS DC X'00' INS KEY STATUS VIA BIOS KEYBOARD (SEE NOTES)
- KBNUM DC X'00' NUM KEY STATUS VIA BIOS KEYBOARD
- KBCAPLST DC X'00'
- KBINSLST DC X'00'
- KBNUMLST DC X'00'
- INSSTATE EQU X'80' INSERT KEY ON (TECH. A-3)
- CAPSTATE EQU X'40' CAPS KEY ON
- NUMSTATE EQU X'20' NUM KEY ON
- PBLKCNT DC PL3'0' RECORDS IN BLOCK
- PCURBLK1 DC PL3'0' RECORD # OF FIRST BLOCK RECORD
- PCUR DC PL3'1' CURRENT RECORD # FOR ROW 0
- PCURLINE DC PL3'1' CURRENT RECORD # FOR CURSOR ROW
- PCURSRCH DC PL3'0' CURRENT RECORD # FOR SEARCH
- PLSTLINE DC PL3'0' LAST RECORD #
- PCHKLINE DC PL3'0' AUDIT LAST RECORD #
- PCOL DC PL2'0' CURRENT COL
- PCURLAST DC PL3'0' LAST REC UPDATE BY SETCUR
- PCOLLAST DC PL2'0' LAST COL UPDATE BY SETCUR
- FMAXLINE DC F'0' MAXIMUM LINES POSSIBLE IN MS
- PWORK DC D'0' PACKED DECIMAL WORK AREA
- PWORK1 DC D'0'
- DC C'*** ASCB ***'
- ASCB DC A(0) ADDRESS OF SCREEN CONTROL BLOCK
- F1SC EQU *
- DC CL80'SEE Screen Editor and Emulator R2.0 05/22/87'
- DC CL80' '
- DC CL80'Copyright (c) 1987 Donald S. Higgins'
- DC CL80' '
- DC CL80'Type F1 for this screen; F2 for keystroke help.'
- DC CL80'For additional documentation, SEE PC370.DOC.'
- DC CL80' '
- DC CL80'SEE is a full screen color text editor distributed'
- DC CL80'in source and object form with the PC/370 freeware'
- DC CL80'370 cross assembler, linkage editor, and emulator'
- DC CL80'package. You are encouraged to copy and share'
- DC CL80'this program provided this copyright message is'
- DC CL80'not removed or modified and no fee is charged.'
- DC CL80'If you find PC/370 of value, support continued'
- DC CL80'freeware updates by sending 45 dollars to:'
- DC CL80' '
- DC CL80' Don Higgins'
- DC CL80' 6365 - 32 Avenue North'
- DC CL80' St. Petersburg, Florida 33710'
- F1SCEND EQU *
- F2SC EQU *
- * 0 1 2 3 4
- * 1 0 0 0 0
- DC CL40'KEY ALTERNATE DESCRIPTION ' 1
- DC CL40'KEY ALTERNATE DESCRIPTION '
- DC CL80' ' 2
- DC CL40'Esc ctl-K D save file and exit ' 3
- DC CL40'PgUp ctl-R page up half '
- DC CL40'PgDn ctl-C page down half ' 4
- DC CL40'arrows ctl-S/D/E/X move cursor '
- DC CL40'home ctl-Q R go to top of file ' 5
- DC CL40'End ctl-Q C go to end of file '
- DC CL40'Ins ctl-U set/reset insert ' 6
- DC CL40'Del ctl-G/K Y delete char/block '
- DC CL40'Tab ctl-I tab to next column ' 7
- DC CL40'Bs ctl-H backspace '
- DC CL40'Enter ctl-N next/insert line ' 8
- DC CL40'F1/F2 help screen 1/2 '
- DC CL40'F3/F4 ctl-Q S/D start/end line ' 9
- DC CL40'F5/F6 ctl-K B/K/C label/dup. block '
- DC CL40'F7 ctl-Q F/A search/replace str. ' 10
- DC CL40'F8 ctl-L repeat search/repl. '
- DC CL40'F9 set color ' 11
- DC CL40'F10 set/reset box graph '
- DC CL40'Shft-F1 quick save file ' 12
- DC CL40'Shft-F6 ctl-Y delete line '
- DC CL40'Shft-F9 ctl-Q I set/reset auto tab ' 13
- DC CL40'Shft-F10 change box graph set'
- DC CL40'Ctl-brk ctl-K Q force exit no save ' 14
- DC CL40'Alt-F1 pause until key hit '
- DC CL40'Alt-F2 wait for 1 second ' 15
- DC CL40'Alt-F3 enter debug mode '
- DC CL40'Alt-F4 toggle audit mode ' 16
- DC CL40'Alt-F5 go to line # '
- DC CL40'Alt-F10 toggle box connect ' 17
- DC CL40' '
- DC CL80' '
- DC CL80'Note F9 color selection is changed by entering'
- DC CL80'hex digits or using arrows to select digit and'
- DC CL80'change colors. Press enter to continue.'
- DC CL80'Note F10, shift-F10, and alt-F10 control box'
- DC CL80'graphic mode, characters, and connect options.'
- F2SCEND EQU *
- *
- * DSECTS
- *
- *
- * LINE BLOCK FOR STORING TEXT IN EXTENDED MEMORY
- *
- LB DSECT
- LBPREV DS A ADDRESS OF PREVIOUS LB
- LBNEXT DS A ADDRESS OF NEXT LB
- LBLINE DS CL80 TEXT
- LLB EQU *-LB
- *
- * SCREEN CONTROL BLOCK
- *
- SCB DSECT
- SCBADDR DS A ADDRESS OF LB IN EXTENDED STORAGE
- SCBLB DS 0XL(LLB) LB WITHIN SCB
- SCBPREV DS A ADDRESS OF PREV LB
- SCBNEXT DS A ADDRESS OF NEXT LB
- SCBLINE DS CL80 LINE OF TEXT
- DS XL2 PAD FOR CR,NL FOR FULL LINE OF TEXT
- SCBCOL DS X COL CONTAINING CR/LF (END OF TEXT + 1)
- SCBMOD DS X SET TRUE IF MODIFIED
- LSCB EQU *-SCB
- ****************************************************************************
- *
- * IHADCB - I HAD A DCB DSECT FOR PC/370 RELEASE 2.0+ FILE DATA CONTROL BLOCK
- *
- * FOR MORE INFORMATION SEE SVC.DOC AND DEMO PROGRAM TESTIO.ALC.
- *
- ****************************************************************************
- IHADCB DSECT
- DCBDCB DS CL4 CONSTANT EBCDIC C'ADCB' DCB IDENTIFIER
- DCBDSN DS A ADDRESS OF UP TO 64 BYTE PATH/FILE SPEC FOLLOWED BY ZERO
- DCBFID DS H FILE HANDLE ASSIGNED BY MS-DOS AT OPEN (X'FFFF'DEFAULT)
- DCBFLG DS X DATA CONTROL BLOCK FLAGS (ONLY DFTRAN MAY BE SET BY USER)
- DFOPEN EQU X'80' FILE OPEN
- DFUBUF EQU X'40' USER DEFINED BLOCK AREA (NO DYNAMIC ALLOC/DEALLOC)
- DFOUT EQU X'20' OPEN FOR OUTPUT
- DFGEOF EQU X'10' END OF FILE PENDING ON SHORT BLOCK
- DFTRAN EQU X'08' TRANSLATE GET/PUT RECORDS FOR ASCII FILE
- DFADCB EQU X'01' ASSIST DCB - DO NOT TRANSLATE 370 ADDRESSES
- DSORG DS C DATA SET ORGANIZATION (R=RANDOM, S=SEQUENTIAL)
- MACRF DS C DATA SET ACCESS MODE (R=READ, W=WRITE, G=GET, P=PUT)
- RECFM DS C DATA SET RECORD FORMAT (F=FIXED, V=VAR, T=TEXT)
- EOR DS X END OF RECORD CODE (DEFAULT IS LINE FEED X'0A')
- EOF DS X END OF FILE CODE (DEFAULT IS CTL-Z X'1A')
- LRECL DS H RECORD LENGTH (2<LRECL<64K-16)
- BLKSZ DS H BLOCK LENGTH (2<BLKSZ<64K-16)
- EODAD DS A END OF DATA EXIT ADDRESS
- SYNAD DS A SYCHRONOUS ERROR EXIT ADDRESS
- RCD DS A RECORD AREA ADDRESS FOR GET/PUT
- BLK DS A BLOCK AREA ADDRESS (0 FOR DYNAMICALLY ALLOCATED)
- RBA DS A RELATIVE BYTE ADDRESS FOR RANDOM READ/WRITE
- REN DS A RENAME ASCIIZ FILE (ONLY USED BY RENAME SVC)
- IOCNT DS F BLOCK I/O COUNT SINCE OPEN
- PRECL DS H PHYSICAL BLOCK SIZE OF LAST READ/WRITE
- *
- * RESERVED AREA FOR USE BY PC/370 IOS SUPERVISOR WHILE FILE OPEN
- *
- DSNSG DS XL4 SEGMENT:OFFSET OF DCBDSN PATH/FILE NAME
- EODSG DS XL4 SEGMENT:OFFSET OF EODAD EXIT
- SYNSG DS XL4 SEGMENT:OFFSET OF SYNAD EXIT
- RCDSG DS XL4 SEGMENT:OFFSET OF RECORD AREA FOR GET/PUT
- RENSG DS XL4 SEGMENT:OFFSET OF RENAME FILE NAME
- BLKSG DS XL4 SEGMENT:OFFSET OF BLOCK AREA
- BLKPTR DS XL4 SEGMENT:OFFSET OF CURRENT RECORD IN BLOCK AREA
- BLKEOD DS XL2 OFFSET OF CURRENT END OF DATA IN BLOCK AREA
- BLKEND DS XL2 OFFSET OF END OF ALLOCATED BLOCK AREA
- WLRECL DS H REVERSED LRECL
- WBLKSZ DS H REVERSED BLKSZ
- LDCB EQU *-IHADCB
- END SEE