COMMON Common Definitions MACRO V05.03c Monday 16-Sep-85 14:50 Table of contents 1- 9 1- 10 COMMON Common Definitions 1- 11 1- 12 Edit: Date: By: 1- 13 05 15-SEP-85 MHB/ABC/SJK/SHG/MJG/RTW/GPK/MND/AJK/AWL/WJS/REJ/KPH/SHL/DBM 1- 14 1- 15 1- 16 COPYRIGHT (c) 1974, 1985 BY 1- 17 DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. 1- 18 1- 19 THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED 1- 20 ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE 1- 21 INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER 1- 22 COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY 1- 23 OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY 1- 24 TRANSFERRED. 1- 25 1- 26 THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE 1- 27 AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT 1- 28 CORPORATION. 1- 29 1- 30 DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS 1- 31 SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL. 1- 32 2- 1 Edit history for COMMON 3- 1 16- 1 16- 1 TECOIO I/O ROUTINES FOR TECO 16- 1 16- 1 Edit: Date: By: 16- 1 40 31-DEC-84 MHB/WJS 16- 1 17- 1 MACROS 18- 1 DEFINITIONS 18- 6 DEFINE IN LIBRARY "TECORO" 18- 9 DEFINE IN LIBRARY "TECOLS" 18- 12 DEFINE IN LIBRARY "TECOLT" 18- 18 DEFINE IN LIBRARY "TECOER" 18- 21 DEFINE IN LIBRARY "TECOIE" 18- 24 DEFINE IN LIBRARY "TECOIO" 18- 27 DEFINE IN LIBRARY "EGFUNC" 18- 30 DEFINE IN LIBRARY "SCREEN" 18- 33 DEFINE IN LIBRARY "SCRSEQ" 18- 36 DEFINE IN LIBRARY "SCRSUB" 18- 39 DEFINE IN LIBRARY "SCRINS" 18- 42 DEFINE IN LIBRARY "CRTRUB" 18- 45 DEFINE IN LIBRARY "PATCH" 18- 48 DEFINE IN LIBRARY "VE" 20- 1 PARAMETER BLOCK DEFINITIONS 20- 25 PARAMETER BLOCK BIT DEFINITIONS 21- 1 "ET" (EDIT TYPEOUT) BITS 21- 22 "ED" (EDIT MODE) BITS 22- 1 STATIC AREA DEFINITIONS 22- 33 NON-STATIC AREA DEFINITIONS 23- 1 DO AN I/O BUFFER SHUFFLE 23- 27 SET UP THE FIRQB 24- 3 TECOIO ROUTINE "ALLERR" TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Table of contents 24- 19 DEALLOCATE AN I/O BUFFER 25- 1 TECOIO ROUTINE "NOCTLO" 25- 9 TECOIO ROUTINE "XITNOW" 25- 14 DETACH AND DETACHED CHECKING 26- 1 FATAL ERROR ROUTINES 27- 1 EXITS 27- 5 TECOIO ROUTINE "GEXIT" 27- 10 TECOIO ROUTINE "TEXIT" 28- 1 CONTROL/C HANDLING 28- 20 NOP STYLE SPECIAL FUNCTION PROCESSING 29- 1 SIMPLE VALUE RETURNING ROUTINES 29- 5 TECOIO ROUTINE "DATE" 29- 9 TECOIO ROUTINE "TIME" 29- 13 TECOIO ROUTINE "STOPON" 29- 16 TECOIO ROUTINE "SWITCH" 30- 1 MAIN STARTUP 34- 3 TECOIO ROUTINE "FLAGRW" 37- 9 TECOIO ROUTINE "GETBUF" 38- 5 TECOIO ROUTINE "BACKUP" 39- 5 TECOIO ROUTINE "PUTBUF" 40- 1 CLOSE AND DEALLOCATE 40- 5 FIP CALLS WITH ERROR CHECKING 40- 9 ERROR CHECKING 41- 3 TECOIO ROUTINE "KILFIL" 41- 20 TECOIO ROUTINE "CLSFIL" 41- 28 TECOIO ROUTINE "CLSOUT" 43- 1 FILE DATA GETTING SUBROUTINES 44- 1 FILE STRING SCAN CALL 46- 1 SET SEARCH/FILENAME BUFFER TO CURRENT FILE SPECIFICATION 50- 1 DO "EN" WILD CARDING 51- 3 TECOIO ROUTINE "INPSAV" 51- 12 TECOIO ROUTINE "OUTSAV" 51- 17 TECOIO ROUTINE "GETFLS" 55- 1 DO THE ACTUAL FILE CREATE/OPEN 58- 42 TECOIO ROUTINE "TYPEB" 58- 44 TECOIO ROUTINE "PRINTB" 59- 2 TECOIO ROUTINE "TYPE" 59- 4 TECOIO ROUTINE "PRINT" 61- 1 TECOIO ROUTINE "TYPEF" 61- 3 TECOIO ROUTINE "PRINTF" 62- 3 TECOIO ROUTINE "TLISTN" 63- 1 TECOIO ROUTINE "LISTEN" 66- 1 REGISTER SAVE/RESTORE SUBROUTINES 67- 1 GET A BYTE SUBROUTINE 68- 1 PUT A BYTE SUBROUTINE 68- 14 END A BLOCK SUBROUTINE 68- 31 SAVE/RESTORE FIRQB 69- 1 READ FILE ATTRIBUTES AND SET INPUT/OUTPUT CALL ADDRESS 71- 1 RMS TYPE RECORD INPUT 78- 1 RMS TYPE RECORD OUTPUT 81- 3 TECOIO ROUTINE "SIZER" 83- 1 SCOPE CHARACTER/LINE DELETION 83- 5 TECOIO ROUTINE "DELLIN" 83- 10 TECOIO ROUTINE "DELCHR" 84- 1 SET UP FOR SCOPE CHARACTER/LINE DELETION 84- 29 SCOPE "WATCH" ROUTINE 84- 35 TECOIO ROUTINE "WATCH" TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Table of contents 85- 1 ASCII REGION .EVEN FIXUP 85- 7 DEFINE PATCH SPACE 85- 13 VECTOR REGION COMMON Common Definitions MACRO V05.03c Monday 16-Sep-85 14:50 Page 16 1 000022 TITLE TECOIO,,40,31-DEC-84,MHB/WJS .TITLE TECOIO I/O ROUTINES FOR TECO .IDENT "09.140" .SBTTL .SBTTL TECOIO I/O ROUTINES FOR TECO .SBTTL .SBTTL Edit: Date: By: .SBTTL 40 31-DEC-84 MHB/WJS .SBTTL 2 3 ; 4 ; COPYRIGHT (c) 1974, 1985 BY 5 ; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. 6 ; 7 ; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED 8 ; ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE 9 ; INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER 10 ; COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY 11 ; OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY 12 ; TRANSFERRED. 13 ; 14 ; THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE 15 ; AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT 16 ; CORPORATION. 17 ; 18 ; DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS 19 ; SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL. 20 ; TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 17 MACROS 1 .SBTTL MACROS 2 3 .MACRO CHKERR CODE,SRC=IOSTS 4 .DSABL CRF 5 .GLOBL CODE 6 .ENABL CRF 7 CMPB #CODE,SRC 8 .ENDM CHKERR 9 10 .MACRO SETERR CODE,DST=IOSTS 11 .DSABL CRF 12 .GLOBL CODE 13 .ENABL CRF 14 MOV #CODE,DST 15 .ENDM SETERR 16 17 .MACRO ENTRY TAG 18 .SBTTL TECOIO ROUTINE "TAG" 19 TAG:: 20 .ENDM ENTRY 21 22 .MACRO SENTRY TAG 23 ENTRY TAG 24 CALL SAVREG,R4 25 .ENDM SENTRY 26 27 .MACRO SETFQB FUN 28 CALL SETFQB,R0, 29 .ENDM SETFQB 30 31 .MACRO ERR CODE,TEXT 32 TMPORG TECOIE 33 .EVEN 34 .DSABL CRF 35 $$$$$$ = . 36 .ENABL CRF 37 UNORG 38 CALL ERR,R4,$$$$$$ 39 TMPORG TECOIE 40 .RAD50 /CODE/ 41 .NLIST BEX 42 .ASCIZ TEXT 43 .LIST BEX 44 UNORG 45 .ENDM ERR 46 47 .MACRO MESAGE TEXT 48 TMPORG TECOIE 49 .DSABL CRF 50 $$$$$$ = . 51 .ENABL CRF 52 UNORG 53 CALL ASCIC,,$$$$$$ 54 TMPORG TECOIE 55 .DSABL CRF 56 $$$$$0 = . 57 .NLIST TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 17-1 MACROS 58 .ASCII TEXT 59 .LIST 60 $$$$$$ = .-$$$$$0 61 . = $$$$$0 62 .ENABL CRF 63 .NLIST BEX 64 .ASCII <$$$$$$>TEXT 65 .LIST BEX 66 UNORG 67 .ENDM MESAGE 68 69 .MACRO VECTOR AT,TO 70 ORG VE,AT-P.OFF 71 .WORD TO 72 .ENDM VECTOR TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 18 DEFINITIONS 1 .SBTTL DEFINITIONS 2 3 .ENABL LC 4 5 000000 .PSECT TECORO,RO,I,LCL,REL,CON 6 000000 DEFORG TECORO 7 8 000000 .PSECT TECOLS,RO,I,GBL,REL,OVR 9 000000 DEFORG TECOLS 10 11 000000 .PSECT TECOLT,RO,I,GBL,REL,OVR 12 000000 DEFORG TECOLT 13 14 000000 .PSECT TECOCH,RO,D,GBL,REL,OVR 15 000000 ORG TECOCH 16 17 000000 .PSECT TECOER,RO,D,LCL,REL,CON 18 000000 DEFORG TECOER 19 20 000000 .PSECT TECOIE,RO,D,LCL,REL,CON 21 000000 DEFORG TECOIE 22 23 000000 .PSECT TECOIO,RO,I,LCL,REL,CON 24 000000 DEFORG TECOIO 25 26 000000 .PSECT EGFUNC,RO,I,GBL,REL,OVR 27 000000 DEFORG EGFUNC 28 29 000000 .PSECT SCREEN,RO,I,GBL,REL,OVR 30 000000 DEFORG SCREEN 31 32 000000 .PSECT SCRSEQ,RO,D,GBL,REL,CON 33 000000 DEFORG SCRSEQ 34 35 000000 .PSECT SCRSUB,RO,I,GBL,REL,CON 36 000000 DEFORG SCRSUB 37 38 000000 .PSECT SCRINS,RO,I,GBL,REL,OVR 39 000000 DEFORG SCRINS 40 41 000000 .PSECT CRTRUB,RO,I,GBL,REL,OVR 42 000000 DEFORG CRTRUB 43 44 000000 .PSECT PATCH, RO,D,GBL,REL,OVR 45 000000 DEFORG PATCH 46 47 000000 .PSECT VE, RO,D,GBL,REL,OVR 48 000000 DEFORG VE TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 19 DEFINE IN LIBRARY "VE" 1 000202 PDLSIZ == 130. ;PDL SIZE 2 000202 SCHSIZ == 130. ;SEARCH BUFFER SIZE 3 000202 FILSIZ == 130. ;FILENAME BUFFER SIZE 4 000202 TAGSIZ == 130. ;TAG BUFFER SIZE 5 6 004000 SIZERB == 1024.*2 ;EXPAND MEMORY IN 1K (WORD) CHUNKS 7 8 000000 O.FLAG == 0 ;NO SPECIAL RTS FLAGS NEEDED 9 076713 O.DEXT == ^RTEC ;DEFAULT EXECUTABLE EXTENSION 10 000004 O.MSIZ == 4. ;4K MINIMUM/INITIAL SIZE 11 000040 O.SIZE == 32. ;32K MAXIMUM SIZE (LET RTS ADD WILL FIGURE IT OUT...) 12 13 000010 B2SPOS = 8. ;DEFAULT /B2 "&" POSITION 14 15 ; CONSOLE SWITCH REGISTER .PEEK ADDRESS 16 17 177570 SWR = 177570 ;CONSOLE SWITCH REGISTER 18 19 ; TERMINAL MODE BITS 20 21 000002 TTTECO = 2. ;TECO MODE 22 000004 TTCRLF = 4. ;NO AUTOMATIC CR/LF MODE 23 000200 TTTECS = 128. ;TECO SCOPE MODE 24 000400 TTESEQ = 256. ;ESCAPE SEQUENCE MODE 25 26 ; TERMINAL MODIFIER BITS 27 28 020000 TI.CND = 8192. ;CONDITIONAL TERMINAL INPUT 29 30 010000 TO.BIN = 4096. ;BINARY MODE TERMINAL OUTPUT 31 040000 TO.CTL = 16384. ;CLEAN CONTROLS MODE TERMINAL OUTPUT 32 33 ; DISK MODE BITS 34 35 000040 TENTAT = 32. ;ENTER A TENTATIVE FILE 36 000200 NSUPER = 128. ;NO SUPERSEDE ON CREATE 37 020000 RONLY = 8192. ;READ-ONLY MODE TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 20 PARAMETER BLOCK DEFINITIONS 1 .SBTTL PARAMETER BLOCK DEFINITIONS 2 3 000000 .DSECT 4 5 000000 FO: .BLKW ;FILE STATUS (CH # *2 AND FLAGS) 6 000002 CC: .BLKW ;CURRENT COUNT 7 000004 CP: .BLKW ;CURRENT POINTER 8 000006 RP: .BLKW ;RESET POINTER (BUFFER START) 9 000010 RC: .BLKW ;RESET COUNT (BUFFER SIZE) 10 000012 B2S.AP: .BLKW ;SPECIAL .B2S "&" POSITION 11 000014 B2S.CP: .BLKW ;SPECIAL .B2S CURRENT POSITION 12 000016 CA: .BLKW ;READ/WRITE A BYTE CALL ADDRESS 13 000020 F$FORG: .BLKB ;FILE ORGANIZATION 14 000021 F$RATT: .BLKB ;RECORD ATTRIBUTES 15 000022 F$RSIZ: .BLKW ;(MAXIMUM) RECORD SIZE 16 000024 F$HVBN: .BLKW 2 ;HIGHEST VIRTUAL BLOCK NUMBER ALLOCATED 17 000030 F$HEOF: .BLKW 2 ;END-OF-FILE VIRTUAL BLOCK NUMBER 18 000034 F$FFBY: .BLKW ;FIRST FREE BYTE IN EOF BLOCK 19 000036 F$BKSZ: .BLKB ;BUCKET SIZE 20 000037 F$HDSZ: .BLKB ;FIXED HEADER SIZE (0 => 2) 21 000040 F$MRS: .BLKW ;MAXIMUM RECORD SIZE (0 => UNLIMITED) 22 000042 FQ: .BLKB FQBSIZ-FQJOB ;SAVED FILE (FIRQB) DATA 23 000100 PARMSZ: ;PARAMETER SIZE IN BYTES 24 25 .SBTTL PARAMETER BLOCK BIT DEFINITIONS 26 27 000100 .BSECT HIGH ;IN FO 28 29 000400 DO.FMT: .BLKB . ;DO SPECIAL .BAS/.B2S TYPE FILE PROCESSING 30 001000 DDRLO: .BLKB . ;FILE IS READ LOCKED 31 002000 DDWLO: .BLKB . ;FILE IS WRITE LOCKED 32 004000 ATEOF: .BLKB . ;FILE IS CURRENTLY AT END-OF-FILE 33 010000 DO.MOD: .BLKB . ;W/ DO.FMT => .B2S, W/O DO.FMT => ASCII (NOT BINARY) 34 020000 FLGFRC: .BLKB . ;OUTPUT FILE IS BYTE ORIENTED 35 040000 DOEB: .BLKB . ;DO "EB" RENAMING ON OUTPUT FILCLCLOSE 36 100000 DOREN: .BLKB . ;DO RENAMING ON OUTPUT FILE CLOSE 37 38 000000 .DSECT ;IN F$FORG 39 40 000000 R.ANF: ;**ANSI FORMAT "F" RECORDS** 41 000000 R.UDF: .BLKB ;UNDEFINED RECORDS 42 000001 R.FIX: .BLKB ;FIXED LENGTH RECORDS 43 000002 R.VAR: .BLKB ;VARIABLE LENGTH RECORDS 44 000003 R.VFC: .BLKB ;VARIABLE LENGTH WITH FIXED CONTROL RECORDS 45 000004 R.STM: .BLKB ;ASCII STREAM RECORDS 46 000005 R.AND: ;**ANSI FORMAT "D" RECORDS** 47 48 000005 .BSECT ;IN F$RATT 49 50 000001 FD.FTN: .BLKB . ;FORTRAN CARRIAGE CONTROL 51 000002 FD.CR: .BLKB . ;IMPLIED BEFORE, AFTER 52 000004 FD.PRN: .BLKB . ;PRINT FORMAT CONTROL 53 000010 FD.BLK: .BLKB . ;RECORDS DO NOT SPAN BLOCK BOUNDARIES TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 21 "ET" (EDIT TYPEOUT) BITS 1 .SBTTL "ET" (EDIT TYPEOUT) BITS 2 3 000020 .BSECT 4 5 000001 ET$BIN::.BLKB . ; +1., OUTPUT IN BINARY (IMAGE) MODE 6 000002 ET$CRT::.BLKB . ; +2., DO SCOPE TYPE RUBOUT AND CONTROL/U 7 000004 ET$LC:: .BLKB . ; +4., ACCEPT LOWER CASE INPUT 8 000010 ET$NCH::.BLKB . ; +8., NO ECHO DURING INPUT FOR CTRL/T 9 000020 ET$CCO::.BLKB . ; +16., CANCEL CONTROL/O ON OUTPUT 10 000040 ET$CKE::.BLKB . ; +32., RETURN -1 IF ERROR/NO INPUT ON CTRL/T 11 000100 ET$DET::.BLKB . ; +64., DETACH AND DETACHED FLAG 12 000200 ET$XIT::.BLKB . ; +128., "NO PROMPT YET" FLAG 13 000400 ET$TRU::.BLKB . ; +256., TRUNCATE LONG OUTPUT LINES 14 001000 ET$IAS::.BLKB . ; +512., INTERACTIVE SCOPE AVAILABLE FOR "WATCH" 15 002000 ET$RFS::.BLKB . ; +1024., REFRESH SCOPE AVAILABLE FOR "WATCH" 16 004000 .BLKB . ; +2048., RESERVED BY TECO-8 17 010000 ET$8BT::.BLKB . ; +4096., TERMINAL IS AN 8-BIT TERMINAL 18 020000 ET$GRV::.BLKB . ; +8192., ACCEPT "`" AS ESCAPE DURING COMMAND INPUT 19 040000 .BLKB . ;+16384., UNUSED 20 100000 ET$CC:: .BLKB . ;-32768., ALLOW PROGRAM TO TRAP CONTROL/C 21 22 .SBTTL "ED" (EDIT MODE) BITS 23 24 000000 .BSECT 25 26 000001 ED$CTL::.BLKB . ; +1., DON'T ALLOW "^" AS MEANING CONTROL CHARACTER 27 000002 ED$YNK::.BLKB . ; +2., ALLOW YANKS, ETC. TO CLOBBER TEXT BUFFER 28 000004 ED$EXP::.BLKB . ; +4., DON'T ALLOW ARBITRARY EXPANSION(S) 29 000010 .BLKB . ; +8., RESERVED BY TECO-8 30 000020 ED$SRH::.BLKB . ; +16., DON'T RESET "DOT" ON SEARCH FAILURE 31 000040 ED$IMD::.BLKB . ; +32., ALLOW IMMEDIATE MODE COMMANDS 32 000100 ED$INC::.BLKB . ; +64., ONLY MOVE "DOT" BY ONE ON ITERATIVE SEARCH FAILURES 33 000200 ED$WCH::.BLKB . ; +128., DON'T DO AUTOMATIC "W" COMMAND BEFORE PROMPT 34 000400 .BLKB . ; +256., UNUSED 35 001000 .BLKB . ; +512., UNUSED 36 002000 .BLKB . ; +1024., UNUSED 37 004000 .BLKB . ; +2048., UNUSED 38 010000 .BLKB . ; +4096., UNUSED 39 020000 .BLKB . ; +8192., UNUSED 40 040000 .BLKB . ;+16384., UNUSED 41 100000 .BLKB . ;-32768., UNUSED TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 22 STATIC AREA DEFINITIONS 1 .SBTTL STATIC AREA DEFINITIONS 2 3 000000 .EQUATE TTOBFL, 56 ;DEFAULT TERMINAL OUTPUT BUFFER LENGTH 000056 TTOBFL: 4 000000 .EQUATE TTIBFL, 200 ;TERMINAL INPUT BUFFER/CORE COMMON LENGTH 000200 TTIBFL: 5 6 000000 .DSECT 7 8 000000 TTOBUF: .BLKB TTOBFL ;DEFAULT TERMINAL OUTPUT BUFFER 9 000056 SPSAVE: .BLKW ;SAVED SP VALUE FOR ERROR RECOVERY 10 000060 .BLKB 32 ;MONITOR'S CONTEXT SAVING AREA 11 000112 ERRBUF: .BLKB 28.+1 ;ERROR MESSAGE BUFFER (28. CHARACTERS AND A NULL) 12 000147 .BLKB 231 ;SP STACK SPACE 13 000400 USRSP: ;SP STACK RESET VALUE 14 000400 KEY: .BLKW ;KEYWORD 15 000402 IOSTS: ;I/O STATUS & ERROR CODE LOCATION 16 000402 FIRQB: .BLKB FQBSIZ ;FIRQB 17 000442 XRB: .BLKB XRBSIZ ;XRB 18 000460 TTIBUF: ;TERMINAL INPUT BUFFER 19 000460 CORCMN: .BLKB TTIBFL ;CCL LINE BUFFER 20 000660 SVNENT: .BLKW ;SAVED 'FQNENT' VALUE 21 000662 CURSIZ: .BLKB ;CURRENT IMAGE SIZE IN K 22 000663 TEROPN: .BLKB ;TERMINAL IS OPEN FLAG 23 000664 TTOBFS: .BLKW ;POINTER TO START OF TERMINAL OUTPUT BUFFER 24 000666 TTOBFE: .BLKW ;POINTER TO LAST BYTE OF TERMINAL OUTPUT BUFFER 25 000670 TTICNT: .BLKW 2 ;CC AND CP FOR TERMINAL INPUT 26 000674 SETPTR: .BLKW ;THE FILENAME/TERMINAL OUTPUT BUFFER POINTER 27 000676 ENSAV: .BLKB FQBSIZ-FQJOB ;SAVE FIRQB DATA FOR "EN" 28 000734 USRPPN: .BLKW ;USER'S ASSIGNED PPN 29 000736 USRPRT: .BLKW ;USER'S ASSIGNED PROT CODE 30 000740 USRLOG: .BLKW 4*4 ;USER'S LOGICAL DEVICE TABLE 31 001000 NSTORG: ;END OF STATIC REGION 32 33 .SBTTL NON-STATIC AREA DEFINITIONS 34 35 001000 INPNOR: .BLKB PARMSZ ;NORMAL INPUT PARAMETERS 36 001100 INPALT: .BLKB PARMSZ ;ALTERNATE INPUT PARAMETERS 37 001200 OUPNOR: .BLKB PARMSZ ;NORMAL OUTPUT PARAMETERS 38 001300 OUPALT: .BLKB PARMSZ ;ALTERNATE OUTPUT PARAMETERS 39 001400 CMDPRM: .BLKB PARMSZ ;INDIRECT COMMAND PARAMETERS 40 41 001500 PDLSRT: .BLKB PDLSIZ ;PDL AREA 42 001702 SCHSRT: .BLKB SCHSIZ ;SEARCH BUFFER AREA 43 002104 FILSRT: .BLKB FILSIZ ;FILENAME BUFFER AREA 44 002306 TAGSRT: .BLKB TAGSIZ ;TAG BUFFER AREA 45 46 002510 INI8BT: .BLKB ;INITIAL 7/8-BIT SETTING 47 002511 INIDLM: .BLKB ;INITIAL PRIVATE DELIMITER 48 49 002512 R5SET: ;START OF "TECO"S R5 AREA TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 23 DO AN I/O BUFFER SHUFFLE 1 .SBTTL DO AN I/O BUFFER SHUFFLE 2 3 002512 ORG TECOIO 4 5 000000 010246 SHUFLE: MOV R2,-(SP) ;SAVE R2 6 000002 010102 MOV R1,R2 ;COPY OLD TOP TO HERE AND 7 000004 060002 ADD R0,R2 ; FIND THE NEW TOP 8 000006 020427 001000 10$: CMP R4,#INPNOR ;DONE WITH CORRECTIONS? 9 000012 101411 BLOS 40$ ;YES 10 000014 162704 000072 SUB #PARMSZ-RP,R4 ;NO, SKIP TO THE RESET POINTER 11 000020 060014 ADD R0,(R4) ;CORRECT RESET POINTER 12 000022 005744 TST -(R4) ;VALID CURRENT POINTER? 13 000024 001401 BEQ 20$ ;NOPE 14 000026 060014 ADD R0,(R4) ;YES, SO CORRECT IT 15 000030 024444 20$: CMP -(R4),-(R4) ;SKIP TO START OF PARAMETER BLOCK 16 000032 000765 BR 10$ ; AND CONTINUE CORRECTING 17 18 000034 014142 30$: MOV -(R1),-(R2) ;MOVE 2 DATA BYTES UP 19 000036 020264 000006 40$: CMP R2,RP(R4) ;ALL DONE? 20 000042 101374 BHI 30$ ;NOT YET... 21 000044 012602 MOV (SP)+,R2 ;DONE, RESTORE R2 22 000046 060065 000000G ADD R0,CURFRE(R5) ;UPDATE FREE COUNT 23 000052 RETURN ; AND EXIT 000052 000207 RTS PC 24 25 000054 GLOBAL 26 27 .SBTTL SET UP THE FIRQB 28 29 000054 012704 000442 SETFQB::MOV #FIRQB+FQBSIZ,R4 ;END+2 POINTER TO FIRQB 30 000060 005044 10$: CLR -(R4) ;CLEAR IT 31 000062 020427 000404 CMP R4,#FIRQB+FQJOB ;DONE? 32 000066 101374 BHI 10$ ;NO, LOOP 33 000070 012024 MOV (R0)+,(R4)+ ;YES, SO SET FUNCTION 34 000072 RETURN R0 ; AND EXIT 000072 000200 RTS R0 TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 24 SET UP THE FIRQB 1 .ENABL LSB 2 3 000074 ENTRY ALLERR ;AN ERROR OCCURED IN TECO 4 000074 042765 100071 000000G BIC #ET$CC!ET$CKE!ET$CCO!ET$NCH!ET$BIN,ETYPE(R5) ;CLEAR SOME IN "ET" 5 000102 105765 000000G TSTB ETYPE(R5) ;ANY PROMPT YET? 6 000106 100004 BPL 10$ ;YES, JUST CONTINUE 7 000110 .ASSUME ET$XIT EQ 200 8 000110 CALL @(SP)+ ;NOPE, CO-ROUTINE RETURN 000110 004736 JSR PC,@(SP)+ 9 000112 CALLX CRLFNO ;CANCEL ^O AND RESTORE CARRIAGE 000112 004737 000000G JSR PC,@#CRLFNO 10 000116 000565 BR TEXIT ; AND, THEN, EXIT 11 12 000120 10$: CALL SAVREG,R4 ;SAVE REGISTERS, ETC. 000120 004467 010510 JSR R4,SAVREG 13 000124 016503 000000G INDCLS: MOV INDIR(R5),R3 ;GET INDIRECT PARAMETER POINTER 14 000130 005065 000000G CLR INDIR(R5) ; THEN CLEAR OUT THE POINTER 15 000134 005703 TST R3 ;IS THERE REALLY AN INDIRECT FILE? 16 000136 003423 BLE 20$ ;NO, JUST EXIT 17 000140 012746 000362' MOV #FIPCHK,-(SP) ;SET A RETURN ADDRESS 18 19 .SBTTL DEALLOCATE AN I/O BUFFER 20 21 000144 010304 DEALC: MOV R3,R4 ;COPY THE PARAMETER BLOCK POINTER 22 000146 062704 000010 ADD #RC,R4 ;INDEX TO THE RESET COUNT 23 000152 011400 MOV (R4),R0 ;GET OLD SIZE OF THE BUFFER 24 000154 005014 CLR (R4) ; THEN MAKE BUFFER SIZE ZERO 25 000156 014401 MOV -(R4),R1 ;GET OLD RESET POINTER (TOP) 26 000160 060014 ADD R0,(R4) ; THEN CORRECT THE RESET POINTER 27 000162 005044 CLR -(R4) ;CLEAR THE CURRENT POINTER 28 000164 005044 CLR -(R4) ;CLEAR THE CURRENT COUNT 29 000166 014402 MOV -(R4),R2 ;GET THE CHANNEL # 30 000170 005014 CLR (R4) ; THEN INDICATE NOT OPEN ANYMORE 31 000172 CALL SHUFLE ;NOW SHUFFLE AWAY... 000172 004767 177602 JSR PC,SHUFLE 32 000176 012704 000405 CLSFUN: MOV #FIRQB+FQFUN,R4 ;GET A FIRQB POINTER AND 33 000202 105024 CLRB (R4)+ ; SET "CLSFQ" 34 000204 .ASSUME CLSFQ EQ 0 35 000204 110214 MOVB R2,(R4) ; AND SET THE CHANNEL # 36 000206 20$: RETURN ;NOW EXIT 000206 000207 RTS PC 37 38 .DSABL LSB 39 40 000210 GLOBAL TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 25 DEALLOCATE AN I/O BUFFER 1 000210 ENTRY NOCTLO ;CANCEL ^O EFFECT 2 000210 005765 000000G TST INDIR(R5) ;IS INDIRECT FILE IN "FUNNY" STATE? 3 000214 100002 BPL NOCCO ;NO 4 000216 005065 000000G CLR INDIR(R5) ;YES, SO REALLY "CLOSE" IT 5 000222 104026 NOCCO: .TTRST ;NOW CANCEL THE CONTROL/O EFFECT 6 000224 042765 000020 000000G BIC #ET$CCO,ETYPE(R5) ; AND SAY WE DID IT 7 000232 000415 BR SETDET ;SET DETACHED IF NOW WE ARE 8 9 000234 ENTRY XITNOW ;STOP SPECIAL TECO TERMINAL HACKS 10 000234 104020 .TTECH ;ENABLE ECHO IF NEEDED 11 000236 104026 .TTRST ;CANCEL ^O EFFECT IF NEEDED 12 000240 000424 BR OFFTER ;NOW GO CLOSE OFF THE TERMINAL 13 14 .SBTTL DETACH AND DETACHED CHECKING 15 16 .ENABL LSB 17 18 000242 112767 000007 000405' DETACH: MOVB #UU.DET,FIRQB+FQFUN ;SET DETACH FUNCTION 19 000250 112767 000200 000406' MOVB #200,FIRQB+FQERNO ; CLOSING ALL TERMINAL CHANNEL(S) 20 000256 104066 .UUO ;NOW DO IT 21 000260 005067 000450' CHKDET: CLR XRB+XRCI ;TRY SOME HARMLESS OPERATION 22 000264 104032 .POSTN ; ON CHANNEL #0 23 000266 042765 000100 000000G SETDET: BIC #ET$DET,ETYPE(R5) ;GUESS AT NOT DETACHED NOW 24 000274 CHKERR DETKEY ;ARE WE DETACHED? 000274 122767 000000G 000402' CMPB #DETKEY,IOSTS 25 000302 001016 BNE 10$ ;NOPE, EXIT Z-BIT=0 FOR "NOT DETACHED" 26 000304 052765 000100 000000G BIS #ET$DET,ETYPE(R5) ;YEP, SO INDICATE DETACHEDNESS 27 000312 105767 000663' OFFTER: TSTB TEROPN ;IS THE TERMINAL OPEN? 28 000316 001410 BEQ 10$ ;NO, EXIT Z-BIT=1 FOR "DETACHED" 29 000320 010446 MOV R4,-(SP) ;YES, SAVE R4 30 000322 CALL CLSFUN ;SETUP THE FIRQB FOR A CLOSE FUNCTION 000322 004767 177650 JSR PC,CLSFUN 31 000326 CALL OPNTER ;GO SET CHANNEL #1 AND DO THE CLOSE 000326 004767 000010 JSR PC,OPNTER 32 000332 012604 MOV (SP)+,R4 ;RESTORE R4 33 000334 105067 000663' CLRB TEROPN ;SAY TERMINAL CLOSED NOW 34 ;SEZ ;Z-BIT=1 FOR "DETACHED" (FROM 'CLRB' ABOVE) 35 000340 10$: RETURN ;NOW EXIT WITH Z-BIT INDICATION 000340 000207 RTS PC 36 37 000342 012714 000002 OPNTER: MOV #1*2,(R4) ;SET CHANNEL # TO 1 38 000346 000405 BR FIPCHK ;GO DO IT AND ERROR CHECK 39 40 000350 GLOBAL TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 26 FATAL ERROR ROUTINES 1 .SBTTL FATAL ERROR ROUTINES 2 3 000350 ZOTALL::SETFQB RSTFQ ;SET UP FOR ALL CHANNEL RESET 000350 004067 177500 JSR R0,SETFQB 000354 010000 .WORD RSTFQ*400 4 000356 104020 .TTECH ;ENABLE ECHO IF NEEDED 5 000360 104026 .TTRST ;CANCEL ^O EFFECT IF NEEDED 6 000362 104000 FIPCHK: CALFIP ;CALL FILE PROCESSOR 7 000364 105767 000402' IOCHK:: TSTB IOSTS ;ERROR? 8 000370 001763 BEQ 10$ ;NO 9 000372 012706 000400 BADXXX: MOV #USRSP,SP ;RESET SP STACK 10 000376 CALL ERRMSG ;NOW GET THE ERROR MESSAGE 000376 004767 003036 JSR PC,ERRMSG 11 000402 010203 MOV R2,R3 ; AND PUT POINTER HERE 12 000404 012705 002512 20$: MOV #R5SET,R5 ;ENSURE VALID R5 POINTER 13 000410 005067 000664' CLR TTOBFS ;(RE-)INITIALIZE TERMINAL OUTPUT START 14 000414 .ASSUME TTOBUF EQ 0 15 000414 012767 000055 000666' MOV #TTOBUF+TTOBFL-1,TTOBFE ; AND LAST BYTE POINTERS 16 000422 CALLX CRLFNO ;CANCEL ANY ^O AND RESTORE CARRIAGE 000422 004737 000000G JSR PC,@#CRLFNO 17 000426 CALL ASCIZ3 ;NOW PRINT IT 000426 004767 006574 JSR PC,ASCIZ3 18 000432 CALLX CRLF ;DO A CR/LF 000432 004737 000000G JSR PC,@#CRLF 19 000436 000444 BR EXIT ; AND GO AWAY 20 21 000440 012706 000400 BADONE: MOV #USRSP,SP ;RESET SP STACK 22 000444 004367 177734 JSR R3,20$ ;SET UNKNOWN MESSAGE POINTER, GO PRINT IT 23 000450 077 106 141 .ASCIZ "?Fatal" 000453 164 141 154 000456 000 24 .EVEN 25 26 .DSABL LSB TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 27 EXITS 1 .SBTTL EXITS 2 3 .ENABL LSB 4 5 000460 ENTRY GEXIT ;EXIT AND GO -OR- SPECIAL FUNCTIONS 6 000460 005765 000000G TST NFLG(R5) ;SPECIAL FUNCTION CALL? 7 000464 100004 BPL 10$ ;NO, IT'S EXIT-AND-GO 8 000466 000167 000000' JMP EGFUNC ;YES, OFF TO SPECIAL FUNCTION PROCESSOR... 9 10 000472 ENTRY TEXIT ;EXIT FROM TECO 11 000472 105075 000000G CLRB @FILBUF(R5) ;ENSURE NO EXIT-AND-GO ARGUMENT 12 000476 005000 10$: CLR R0 ;SET ARGUMENT TO TURN OFF ANY ACTIVE SCROLLER 13 000500 012765 023420 000000G MOV #10000.,NWATCH(R5) ; AND ENSURE IT'S NOT THE DEFAULT ARGUMENT 14 000506 CALL WATCH ; THEN GO CALL FOR SCROLLING SHUT OFF 000506 004767 000000' JSR PC,WATCH 15 000512 CALL SAVFQB ;SAVE AND CLEAR THE FIRQB 000512 004767 010444 JSR PC,SAVFQB 16 000516 112724 000020 MOVB #UU.TRM,(R4)+ ;SET "SET TERMINAL" FUNCTION 17 000522 012724 MOV (PC)+,(R4)+ ; AND OUR KB: TERMINAL 18 000524 000 377 .BYTE 0,-1 19 000526 116764 002510' 000012 MOVB INI8BT,20-6(R4) ;RESET 7/8-BIT SETTING TO INITIAL SETTING 20 000534 116764 002511' 000022 MOVB INIDLM,30-6(R4) ;RESET PRIVATE DELIMITER TO INITIAL SETTING 21 000542 104066 .UUO ;NOW GO DO IT 22 000544 CALL @(SP)+ ; THEN RESTORE THE FIRQB 000544 004736 JSR PC,@(SP)+ 23 000546 005727 TST (PC)+ ;INDICATE THE NORMAL EXIT WITH C=0 24 000550 000261 EXIT: SEC ;INDICATE THE ABORT EXIT WITH C=1 25 000552 012706 000400 MOV #USRSP,SP ;RESET SP STACK 26 000556 006046 ROR -(SP) ; AND SAVE THE C-BIT INDICATION 27 000560 012767 177777 000442' MOV #-1,XRB ;ENSURE ALL FLAGS 28 000566 104056 .CLEAR ; ARE TURNED OFF 29 000570 CALL ZOTALL ;CLOSE ALL FILES 000570 004767 177554 JSR PC,ZOTALL 30 000574 005716 TST (SP) ;AN ABORT EXIT? 31 000576 100417 BMI 30$ ;YES, DON'T LOOK FOR A CCL COMMAND 32 000600 016502 000000G MOV FILBUF(R5),R2 ;GET THE CCL SUPPLIED (IF ANY) 33 000604 012703 000446 MOV #XRB+XRLOC,R3 ; AND GET AN XRB POINTER @ XRLOC 34 000610 010213 MOV R2,(R3) ;SET POINTER TO (POSSIBLE) CCL COMMAND 35 000612 105722 20$: TSTB (R2)+ ;SKIP STRING 36 000614 001376 BNE 20$ ; LOOKING FOR ENDING NULL 37 000616 005302 DEC R2 ;END, BACK UP OVER THE NULL 38 000620 161302 SUB (R3),R2 ; AND FIND LENGTH OF CCL COMMAND 39 000622 001405 BEQ 30$ ;NO LENGTH, JUST GO EXIT 40 000624 010243 MOV R2,-(R3) ;SET LENGTH IN XRB @ XRBC AND 41 000626 010243 MOV R2,-(R3) ; IN XRB @ XRLEN 42 000630 104062 .CCL ;BUT CHECK IT OUT 43 000632 CALL IOCHK ;DO CATCH ERRORS 000632 004767 177526 JSR PC,IOCHK 44 000636 105067 000460' 30$: CLRB CORCMN ;EMPTY CORE COMMON... 45 000642 005067 000412' CLR FIRQB+FQNAM1 ;SIGNAL SWITCH TO PRIVATE DEFAULT 46 000646 104050 .RTS ; AND TRY TO SWITCH TO IT 47 000650 006326 ASL (SP)+ ;CAME BACK, CHECK THE ABORT EXIT FLAG 48 000652 103465 BCS RESTRT ;ABORTING, JUST GO PROMPT 49 000654 013700 177750 MOV @#P.NEW,R0 ;SIMPLE EXIT, GET "NEW" ENTRY POINT ADDRESS 50 000660 020027 001016' CMP R0,#START ;LINKED WITH KEYBOARD MONITOR CODE? 51 000664 001001 BNE 40$ ;YES, SO GO (RE-)CALL IT 52 000666 104046 .EXIT ;NO, EXIT TO THE SYSTEM DEFAULT TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 27-1 TECOIO ROUTINE "TEXIT" 53 54 000670 000110 40$: JMP (R0) ;OFF TO THAT TECO KEYBOARD MONITOR... 55 56 .DSABL LSB 57 58 000672 GLOBAL TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 28 CONTROL/C HANDLING 1 .SBTTL CONTROL/C HANDLING 2 3 000672 032767 100200 002512G TECOCC: BIT #ET$CC!ET$XIT,ETYPE+R5SET ;CTRL/C TRAP OR EXIT ON ERROR? 4 000700 100407 BMI 10$ ;JUST CLEAR FLAG IF CONTROL/C TRAP IS ON 5 000702 .ASSUME ET$CC EQ 100000 6 000702 001273 BNE TEXIT ;EXIT NOW IF SO INDICATED 7 000704 021627 010414' CMP (SP),#TERINP ;WAITING FOR KB: INPUT? 8 000710 001407 BEQ CHKABT ;YES, CHECK FOR ABORT OR RESTART 9 000712 112767 177777 002513G MOVB #-1,TFLG+1+R5SET ;SIGNAL WE WANT TECO TO QUIT SOON 10 000720 042767 100000 002512G 10$: BIC #ET$CC,ETYPE+R5SET ;CLEAR THE TRAP CONTROL/C FLAG 11 000726 000002 RTI ;THEN JUST EXIT 12 13 000730 CHKABT: CALL INDCLS ;ENSURE ANY INDIRECT FILE IS CLOSED 000730 004767 177170 JSR PC,INDCLS 14 000734 105167 000400' COMB KEY ;REALLY EXIT ON THIS CONTROL/C? 15 000740 001654 BEQ TEXIT ;YES, SO GO EXIT 16 000742 000167 000752 JMP TECOGO ;NO, JUST DO A RESTART 17 18 000746 GLOBAL 19 20 .SBTTL NOP STYLE SPECIAL FUNCTION PROCESSING 21 22 000746 TMPORG EGFUNC 23 24 000000 005065 000000G EGFUNC: CLR N(R5) ;RETURN FAILURE (0) 25 000004 RETURN ; AND EXIT 000004 000207 RTS PC 26 27 000006 GLOBAL 28 29 000006 UNORG TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 29 SIMPLE VALUE RETURNING ROUTINES 1 .SBTTL SIMPLE VALUE RETURNING ROUTINES 2 3 .ENABL LSB 4 5 000746 ENTRY DATE ;GET DATE 6 000746 012700 000442 MOV #XRB,R0 ;XRB+0 FOR DATE 7 000752 000402 BR 10$ ;DO THE EMT 8 9 000754 ENTRY TIME ;GET TIME 10 000754 012700 000444 MOV #XRB+2,R0 ;XRB+2 FOR TIME 11 000760 104034 10$: .DATE ;GET DATE/TIME 12 000762 011000 20$: MOV (R0),R0 ;FETCH DATA 13 000764 ENTRY STOPON ;STOP INDICATOR ON 14 000764 SCRLOD::RETURN ;SIMPLE EXIT 000764 000207 RTS PC 15 16 000766 ENTRY SWITCH ;GET SWITCH REGISTER VALUE 17 000766 012700 000442 MOV #XRB,R0 ;XRB+0 FOR .PEEK 18 000772 012710 177570 MOV #SWR,(R0) ;SET THE PEEK ADDRESS 19 000776 104012 .PEEK ; AND PEEK AT IT 20 001000 000770 BR 20$ ;GO FETCH DATA AND EXIT 21 22 .DSABL LSB TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 30 MAIN STARTUP 1 .SBTTL MAIN STARTUP 2 3 .ENABL LSB 4 5 001002 020627 000376 10$: CMP SP,#USRSP-2 ;.CHAIN, SPECIAL FROM KEYBOARD MONITOR? 6 001006 103074 BHIS 50$ ;YES (NO STACK PUSHES), JUST CALL IT A RUN... 7 001010 022626 CMP (SP)+,(SP)+ ;NO, POP RUN DETERMINATION AND SAVED "FQFLAG" 8 001012 000167 005414 JMP EIDONE ; AND GO SAY "EI" DONE 9 10 001016 032767 010000 000400' START: BIT #JFNOPR,KEY ;INITIAL ENTRY AND LOGGED OUT? 11 001024 001251 BNE EXIT ;YEP, JUST GET OUT OF HERE 12 001026 012706 000400 RESTRT::MOV #USRSP,SP ;ENSURE A RESET SP STACK 13 001032 005067 000440' CLR FIRQB+FQNENT ;NEVER KEEP BIGNESS, ETC. 14 001036 005067 000442' CLR XRB ;NOT A CCL ENTRY EVER 15 001042 005727 TST (PC)+ ;SET C=0 FOR A NEW TYPE ENTRY 16 001044 000261 RUNIT: SEC ;SET C=1 FOR A RUN TYPE ENTRY 17 001046 006046 ROR -(SP) ;SAVE THE RUN DETERMINATION (C-BIT) 18 001050 013701 177740 MOV @#P.MSIZ,R1 ;GET MINIMUM SIZE (IN K) 19 001054 012705 002512 MOV #R5SET,R5 ;SET THE TECO R5 OFFSET POINTER 20 001060 012703 000440 MOV #FIRQB+FQNENT,R3 ;GET A FIRQB/XRB POINTER @ FIRQB+FQNENT 21 001064 011302 MOV (R3),R2 ;GET THE PARAMETER WORD 22 001066 006302 ASL R2 ; AND DUMP "BIGNESS" FROM IT 23 001070 020227 165140 CMP R2,#30000.*2 ;IS IT BASIC-PLUS MAGIC? 24 001074 103402 BLO 20$ ;NOPE 25 001076 042713 077777 BIC #^C<100000>,(R3) ;YEP, GET RID OF IT 26 001102 012700 000660 20$: MOV #SVNENT,R0 ;GET POINTER TO STATIC AREA 27 001106 012320 MOV (R3)+,(R0)+ ;SAVE THE 'FQNENT' VALUE 28 001110 011302 MOV (R3),R2 ;SAVE THE CCL DETERMINATION 29 001112 .ASSUME XRB EQ FIRQB+FQNENT+2 30 001112 CALL IOCHK ;CHECK FOR ALREADY EXISTING ERROR(S) 001112 004767 177246 JSR PC,IOCHK 31 001116 104044 .NAME ;INSTALL THE PROGRAM NAME 32 001120 012713 177777 MOV #-1,(R3) ;NOW SET TO DROP EVERYTHING 33 001124 116004 177777 MOVB -1(R0),R4 ;STACK BIGNESS FLAG AND INITIAL K SIZE 34 001130 100002 BPL 30$ ;NO BIGNESS FLAG, REALLY DROP ALL 35 001132 012713 157777 MOV #^C,(R3) ;YES, SO DROP ALL BUT BIGNESS 36 001136 104056 30$: .CLEAR ;THIS CLEARS ALMOST EVERYTHING... 37 001140 142704 000200 BICB #200,R4 ;CLEAR POSSIBLE BIGNESS FLAG IN INITIAL K SIZE 38 001144 120401 CMPB R4,R1 ;IS SPECIFIED INITIAL K SIZE > MINIMUM SIZE? 39 001146 101401 BLOS 40$ ;NOPE 40 001150 110401 MOVB R4,R1 ;YEP, SO USE IT INSTEAD 41 001152 030227 100001 40$: BIT R2,#100001 ;WHAT KIND OF ENTRY? 42 001156 001410 BEQ 50$ ;RUN OR INITIAL (<15>=0; <0>=0) 43 001160 100310 BPL 10$ ;"EI" CHAIN (<15>=0; <0>=1) 44 ;BMI ;CCL (<15>=1; <0>=?) 45 001162 120201 CMPB R2,R1 ;DESIRE A BIGGER SIZE? 46 001164 101405 BLOS 50$ ;NO, LEAVE IT ALONE 47 001166 110201 MOVB R2,R1 ;YES, GET THE NEW SIZE 48 001170 100003 BPL 50$ ;IF >0 THEN ABS NEW SIZE 49 001172 005401 NEG R1 ;IF <0 THEN IS -(INC SIZE) 50 001174 063701 177740 ADD @#P.MSIZ,R1 ;SO DO IT TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 31 MAIN STARTUP 1 001200 010120 50$: MOV R1,(R0)+ ;SET "CURSIZ" TO INITIAL K SIZE; "TEROPN"=0 2 001202 .ASSUME CURSIZ EQ SVNENT+2 3 001202 .ASSUME TEROPN EQ CURSIZ!1 4 001202 005020 CLR (R0)+ ;INITIALIZE TERMINAL OUTPUT BUFFER START 5 001204 .ASSUME TTOBUF EQ 0 6 001204 .ASSUME TTOBFS EQ CURSIZ+2 7 001204 012720 000055 MOV #TTOBUF+TTOBFL-1,(R0)+ ; AND LAST BYTE POINTERS 8 001210 .ASSUME TTOBFE EQ TTOBFS+2 9 001210 005020 60$: CLR (R0)+ ;THEN CLEAR UNTIL 10 001212 020027 000734 CMP R0,#USRPPN ; THE END 11 001216 103774 BLO 60$ ;KEEP GOING 12 001220 010123 MOV R1,(R3)+ ;THIS IS THE K SIZE TO ASK FOR INITIALLY 13 001222 104006 .CORE ;PLEASE GIVE US THIS MUCH 14 001224 CALL IOCHK ;THAT REQUEST BETTER NOT FAIL... 001224 004767 177134 JSR PC,IOCHK 15 001230 012700 001000 MOV #NSTORG,R0 ;GET START OF NON-STATIC AREA 16 001234 072127 000013 ASH #11.,R1 ; AND SIZE IN BYTES 17 001240 005020 70$: CLR (R0)+ ;NOW CLEAR IT 18 001242 020001 CMP R0,R1 ;MORE TO CLEAR? 19 001244 103775 BLO 70$ ;KEEP GOING 20 001246 010167 001006' MOV R1,INPNOR+RP ;SET INITIAL BUFFER POINTERS 21 001252 010167 001106' MOV R1,INPALT+RP 22 001256 010167 001206' MOV R1,OUPNOR+RP 23 001262 010167 001306' MOV R1,OUPALT+RP 24 001266 010167 001406' MOV R1,CMDPRM+RP 25 001272 012765 000400 000000G MOV #USRSP,TECOSP(R5) ;SET TECO'S RESET SP VALUE 26 001300 012765 001500 000000G MOV #PDLSRT,TECOPD(R5) ;SET TECO'S PDL START 27 001306 012765 001500 000000G MOV #PDLSRT,PDL(R5) ; AND INIT THE PDL 28 001314 012765 001702 000000G MOV #SCHSRT,SCHBUF(R5) ;SET TECO'S SEARCH BUFFER 29 001322 105167 002103' COMB SCHSRT+SCHSIZ-1 ; FLAG THAT END 30 001326 012765 002104 000000G MOV #FILSRT,FILBUF(R5) ;SET TECO'S FILENAME BUFFER 31 001334 105167 002305' COMB FILSRT+FILSIZ-1 ; FLAG THAT END 32 001340 012765 002306 000000G MOV #TAGSRT,TAGBUF(R5) ;SET TECO'S TAG BUFFER 33 001346 105167 002507' COMB TAGSRT+TAGSIZ-1 ; FLAG THAT END 34 001352 012765 001000 000000G MOV #INPNOR,INPNTR(R5) ;SET NORMAL INPUT 35 001360 012765 001200 000000G MOV #OUPNOR,OUPNTR(R5) ;SET NORMAL OUTPUT 36 001366 012765 000000' 000000G MOV #TECOCH,TECOJP(R5) ;LOAD DEFAULT JUMP DISPATCH TABLE 37 001374 012765 000200 000000G MOV #ET$XIT,ETYPE(R5) ;SET DEFAULT EDIT FLAG(S) 38 001402 005165 000000G COM OUTDNE(R5) ;SAY ALL SORTS OF OUTPUT DONE 39 40 001406 GLOBAL 41 001406 GLOBAL TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 32 MAIN STARTUP 1 001406 010500 MOV R5,R0 ;COPY THE R5 READ/WRITE AREA POINTER 2 001410 062700 000000G ADD #RWSIZE,R0 ; AND GO BEYOND TECO'S PRIVATE DATA 3 001414 CALL SAVFQB ;SAVE AND CLEAR THE FIRQB 001414 004767 007542 JSR PC,SAVFQB 4 001420 112724 000020 MOVB #UU.TRM,(R4)+ ;SET "READ TERMINAL" FUNCTION 5 001424 012724 MOV (PC)+,(R4)+ ; AND OUR KB: TERMINAL 6 001426 000 377 .BYTE 0,-1 7 001430 104066 .UUO ;SO DO IT 8 001432 105767 000402' TSTB IOSTS ;ANY ERROR?? 9 001436 001052 BNE 100$ ;YES, FORGET ANY TERMINAL SETUP 10 001440 116467 000030 002510' MOVB 36-6(R4),INI8BT ;SAVE INITIAL 7/8-BIT SETTING 11 001446 116467 000022 002511' MOVB 30-6(R4),INIDLM ;SAVE INITIAL PRIVATE DELIMITER 12 001454 152767 000200 002511' BISB #200,INIDLM ; MAKING SURE THAT IT GETS RESET 13 001462 105264 000007 INCB 15-6(R4) ;ALLOWING LOWER CASE INPUT? 14 001466 001010 BNE 80$ ;NO 15 001470 052765 000004 000000G BIS #ET$LC,ETYPE(R5) ;YES, ALLOW LOWER CASE INPUT 16 001476 105264 000003 INCB 11-6(R4) ;ALLOWING LOWER CASE OUTPUT? 17 001502 001402 BEQ 80$ ;NO, LEAVE CASE FLAGING ON 18 001504 005165 000000G COM EUFLAG(R5) ;YES, DISABLE THE CASE FLAGING 19 001510 126427 000030 000030 80$: CMPB 36-6(R4),#30 ;IS THIS AN 8-BIT TERMINAL? 20 001516 001003 BNE 90$ ;NO 21 001520 052765 010000 000000G BIS #ET$8BT,ETYPE(R5) ;YES, INDICATE AN 8-BIT TERMINAL 22 001526 105264 000006 90$: INCB 14-6(R4) ;SCOPE TYPE TERMINAL? 23 001532 001014 BNE 100$ ;NO 24 001534 CALL CRTRUB ;YES, GO SET SCOPE TYPE, ETC. 001534 004767 000000' JSR PC,CRTRUB 25 001540 060400 ADD R4,R0 ;ADD "WATCH" STATIC READ/WRITE TO POINTER 26 001542 005704 TST R4 ;WAS "WATCH" REALLY SELECTED? 27 001544 001407 BEQ 100$ ;NOPE 28 001546 010067 000664' MOV R0,TTOBFS ;YEP, START LARGER TERMINAL OUTPUT BUFFER HERE 29 001552 062700 000777 ADD #512.-1,R0 ; MAKING ITS SIZE 512. BYTES 30 001556 010067 000666' MOV R0,TTOBFE ;SET LAST BYTE POINTER ALSO 31 001562 005200 INC R0 ; THEN BUMP OVER THAT LAST BYTE 32 001564 100$: CALL @(SP)+ ;RESTORE THE FIRQB FOR SURE 001564 004736 JSR PC,@(SP)+ 33 001566 160001 SUB R0,R1 ;NOW HAVE REAL FREE MEMORY 34 001570 010065 000000G MOV R0,TXSTOR(R5) ;TEXT STARTS HERE 35 ;CLC ;C=0 FROM THE 'SUB' ABOVE 36 001574 006001 ROR R1 ;GET 1/2 OF THE FREE SIZE 37 001576 010165 000000G MOV R1,ZMAX(R5) ;TEXT GETS 1/2 38 001602 060100 ADD R1,R0 ;GO BEYOND TEXT AREA 39 001604 010065 000000G MOV R0,QRSTOR(R5) ;Q-REG STARTS HERE 40 001610 010165 000000G MOV R1,QMAX(R5) ; AND Q-REG GETS OTHER 1/2 41 42 001614 GLOBAL TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 33 MAIN STARTUP 1 001614 CALL CHKDET ;CHECK DETACHED AND FIND CH #0 POSITION 001614 004767 176440 JSR PC,CHKDET 2 001620 005713 TST (R3) ;DOES CARRIAGE NEED RESTORATION? 3 001622 001402 BEQ 110$ ;NO 4 001624 CALLX CRLFNO ;YES, SO RESTORE THE CARRIAGE 001624 004737 000000G JSR PC,@#CRLFNO 5 001630 012700 000460 110$: MOV #CORCMN,R0 ;GET CCL LINE/CORE COMMON BUFFER POINTER 6 001634 016501 000000G MOV SCHBUF(R5),R1 ;GET SEARCH STRING BUFFER POINTER 7 001640 016503 000000G MOV TXSTOR(R5),R3 ;GET TEXT AREA POINTER 8 001644 006302 ASL R2 ;SET C-BIT=1 IF CCL ENTRY 9 001646 112004 MOVB (R0)+,R4 ;GET SIZE OF THE CCL LINE/CORE COMMON 10 001650 003417 BLE 150$ ;SIZE IS <=0, SO SKIP IT 11 001652 112011 120$: MOVB (R0)+,(R1) ;MOVE DATA TO SEARCH STRING BUFFER 12 001654 001413 BEQ 140$ ;IGNORE ANY NULL BYTE 13 001656 100006 BPL 130$ ;IT'S A NORMAL CHARACTER 14 001660 105211 INCB (R1) ;IS IT A 377? 15 001662 001410 BEQ 140$ ;YES, WE MUST IGNORE 377'S... 16 001664 105311 DECB (R1) ;NO, FIX CHARACTER BACK UP 17 001666 131127 177540 BITB (R1),#^C<237> ;IS IT A (C1) CONTROL CHARACTER? 18 001672 001404 BEQ 140$ ;YES, WE MUST IGNORE THOSE TOO... 19 001674 112123 130$: MOVB (R1)+,(R3)+ ;MOVE DATA TO TEXT AREA 20 001676 103002 BCC 140$ ;NOT CCL, SO DON'T COUNT AS TEXT 21 001700 005265 000000G INC ZZ(R5) ;CCL, COUNT AS TEXT AREA DATA 22 001704 077416 140$: SOB R4,120$ ;LOOP FOR ALL DATA... 23 001706 105011 CLRB (R1) ;NOW MARK END OF THE SEARCH STRING BUFFER 24 001710 005726 150$: TST (SP)+ ;WAS IT A RUN ENTRY? 25 001712 100406 BMI 160$ ;YES, PROCESS THE "EI" FILE 26 001714 CALL ZOTALL ;ENSURE ALL CHANNELS CLOSED INITIALLY 001714 004767 176430 JSR PC,ZOTALL 27 001720 012705 002512 TECOGO: MOV #R5SET,R5 ;RELOAD THE TECO R5 VALUE 28 001724 JMPX TECO ;NOW GO..... 001724 000137 000000G JMP @#TECO 29 30 001730 006302 160$: ASL R2 ;IS THIS A CCL ENTRY WITH DETACH? 31 001732 103002 BCC 170$ ;NO, BIT 14 = 0 (NO DETACH) 32 001734 CALL DETACH ;YEP, BIT 14 = 1, DO A DETACH 001734 004767 176302 JSR PC,DETACH 33 001740 012704 000405 170$: MOV #FIRQB+FQFUN,R4 ;GET A FIRQB POINTER 34 001744 112724 000020 MOVB #RSTFQ,(R4)+ ;SET THE RESET CHANNEL(S) FUNCTION 35 001750 012714 177742 MOV #-15.*2,(R4) ; AND INDICATE ALL BUT CHANNEL #15. 36 001754 CALL FIPCHK ;DO THE FIP OPERATION AND CHECK FOR ERROR 001754 004767 176402 JSR PC,FIPCHK 37 001760 005414 NEG (R4) ;CORRECT TO CH #15. IN THE FIRQB 38 001762 012746 000000G MOV #TECO,-(SP) ;STARTING TECO IS OUR RETURN ADDRESS 39 001766 CALL SAVREG,R4 ;SAVE REGISTERS FOR CORRECT SET UP 001766 004467 006642 JSR R4,SAVREG 40 001772 000167 004434 JMP EIDONE ;NOW CONTINUE 41 42 .DSABL LSB 43 44 001776 GLOBAL TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 34 MAIN STARTUP 1 .ENABL LSB 2 3 001776 ENTRY FLAGRW ;CATCH TECO FLAG CHANGES/READS 4 001776 005702 TST R2 ;IS IT THE "EJ" CALL? 5 002000 001033 BNE 70$ ;NOPE 6 002002 005300 DEC R0 ;YEP, WHAT'S THE CALLING ARGUMENT? 7 002004 100417 BMI 30$ ;IT WAS -1 OR 0, GO SEE WHICH 8 002006 001404 BEQ 10$ ;IT WAS 1, RETURN USER'S KEYBOARD NUMBER 9 002010 104040 .STAT ;IT WAS 2, READ USER'S STATISTICS 10 002012 016700 000452' MOV XRB+10,R0 ;NOW GET THE USER'S PPN 11 002016 000423 BR 60$ ; AND RETURN THAT 12 13 002020 112767 000011 000405' 10$: MOVB #UU.ERR,FIRQB+FQFUN ;SET FUNCTION TO ERROR MESSAGE LOOKUP 14 002026 104066 .UUO ; AND GET (ANY) ERROR MESSAGE... 15 002030 116700 000405' MOVB FIRQB+FQFUN,R0 ;GET KEYBOARD NUMBER TIMES 2 16 002034 000407 BR 40$ ; AND RETURN THAT 17 18 002036 012700 000004 20$: MOV #4,R0 ;+4 IS THE OPERATING SYSTEM ID FOR RSTS/E 19 002042 000411 BR 60$ ; AND RETURN THAT 20 21 002044 005200 30$: INC R0 ;WAS IT 0? 22 002046 001373 BNE 20$ ;IT WAS -1, RETURN RSTS/E ID (+4) 23 002050 116700 000404' MOVB FIRQB+FQJOB,R0 ;IT WAS 0, GET JOB NUMBER TIMES 2 24 002054 006200 40$: ASR R0 ;MAKE JOB #/KB # NOT TIMES 2 25 002056 103001 BCC 50$ ;NOT DETACHED KB NUMBER... 26 002060 005100 COM R0 ;DETACHED, FIX IT UP 27 002062 042700 177600 50$: BIC #^C<177>,R0 ;ENSURE NO SIGN EXTENSION 28 002066 60$: RETURN ; AND EXIT 002066 000207 RTS PC 29 30 31 002070 005001 70$: CLR R1 ;SAY NO TTYSET REQUIRED 32 002072 020227 000000G CMP R2,#EEFLAG ;EE BEING REFERRED TO? 33 002076 001015 BNE 80$ ;NO => CONTINUE 34 002100 020327 177777 CMP R3,#-1 ;YES: IS EE BEING SET, THEN? 35 002104 001370 BNE 60$ ;NO (NOTHING TO DO, THEN) => GO EXIT 36 002106 042700 177600 BIC #^C<177>,R0 ;EE BEING SET: CLEAN UP THE NEW VALUE 37 002112 150001 BISB R0,R1 ;SAVE NEW PRIVATE DELIMITER FOR TTYSET 38 002114 052701 000200 BIS #200,R1 ; AND SAY IT'S "REAL" 39 002120 CALL OFFTER ;FORCE AN OPEN SOON 002120 004767 176166 JSR PC,OFFTER 40 002124 042765 020000 000000G BIC #ET$GRV,ETYPE(R5) ;SETTING EE CLEARS "ACCENT GRAVE" ET BIT 41 42 002132 GLOBAL TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 35 TECOIO ROUTINE "FLAGRW" 1 002132 020227 000000G 80$: CMP R2,#ETYPE ;IS IT THE "ET" FLAG? 2 002136 001075 BNE 140$ ;NOPE => GO CHECK FOR TTYSET 3 002140 CALL CHKDET ;YEP, ENSURE DETACHED FLAG IS CORRECT 002140 004767 176114 JSR PC,CHKDET 4 002144 020327 177777 CMP R3,#-1 ;SETTING IT (-1)?? 5 002150 001107 BNE 150$ ;NO, READING "ET" => NOTHING TO DO 6 002152 016546 000000G MOV ETYPE(R5),-(SP) ;SETTING "ET", GET OLD VALUE 7 002156 074016 XOR R0,(SP) ; AND FIND THE DIFFERENCES 8 002160 031627 020000 BIT (SP),#ET$GRV ;CHANGING "ACCENT GRAVE" ET BIT? 9 002164 001413 BEQ 85$ ;NO => CONTINUE 10 002166 030027 020000 BIT R0,#ET$GRV ;YES: ARE WE SETTING IT? 11 002172 001402 BEQ 84$ ;NO, CLEARING IT => LEAVE LOW R1 BYTE CLEAR 12 002174 152701 000140 BISB #140,R1 ;SETTING, WE WANT ACCENT GRAVE AS PRIV DELIM 13 002200 110165 000000G 84$: MOVB R1,EEFLAG(R5) ;RECORD NEW PRIVATE DELIMITER IN EE FLAG 14 002204 052701 000200 BIS #200,R1 ;SAY R1 TO BE USED FOR PRIV DELIM TTYSET 15 002210 CALL OFFTER ;FORCE AN OPEN SOON 002210 004767 176076 JSR PC,OFFTER 16 002214 031627 010000 85$: BIT (SP),#ET$8BT ;CHANGING 7/8-BIT TERMINAL MODE? 17 002220 001407 BEQ 90$ ;NOPE 18 002222 052701 010000 BIS #20*400,R1 ;GUESS AT SETTING 7-BIT TERMINAL MODE 19 002226 030027 010000 BIT R0,#ET$8BT ;GOOD GUESS? 20 002232 001402 BEQ 90$ ;YES 21 002234 052701 014000 BIS #30*400,R1 ;NO, CHANGE TO SETTING 8-BIT TERMINAL MODE 22 002240 032627 000402 90$: BIT (SP)+,#ET$TRU!ET$CRT ;CHANGING TERMINAL HANDLING? 23 002244 001402 BEQ 100$ ;NOPE 24 002246 CALL OFFTER ;YEP, SO FORCE AN OPEN SOON 002246 004767 176040 JSR PC,OFFTER 25 002252 030027 000010 100$: BIT R0,#ET$NCH ;WHAT IS THE ECHO STATE? 26 002256 001401 BEQ 110$ ;ECHO IS ON, DO NOTHING RIGHT NOW 27 002260 104022 .TTNCH ;ECHO IS OFF, ENSURE IT IS OFF 28 002262 030027 000020 110$: BIT R0,#ET$CCO ;CANCELING CONTROL/O? 29 002266 001401 BEQ 120$ ;NOPE 30 002270 104026 .TTRST ;YEP, CANCEL IT IMMEDIATELY (LATER ALSO) 31 002272 030027 000100 120$: BIT R0,#ET$DET ;TRYING TO DETACH?? 32 002276 001406 BEQ 130$ ;NO 33 002300 032765 000100 000000G BIT #ET$DET,ETYPE(R5) ;YES, BUT ALREADY DETACHED? 34 002306 001002 BNE 130$ ;DON'T TRY AGAIN IF SO 35 002310 CALL DETACH ;ELSE GO TRY TO DETACH 002310 004767 175726 JSR PC,DETACH 36 002314 042700 003100 130$: BIC #ET$RFS!ET$IAS!ET$DET,R0 ;ENSURE THE NEW "ET" 37 002320 016546 000000G MOV ETYPE(R5),-(SP) ; FLAG WILL 38 002324 042716 174677 BIC #^C,(SP) ; BE CORRECT 39 002330 052600 BIS (SP)+,R0 ; FOR ALL CASES 40 41 002332 GLOBAL TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 36 TECOIO ROUTINE "FLAGRW" 1 002332 005701 140$: TST R1 ;ANY TTYSET CHANGES PENDING? 2 002334 001415 BEQ 150$ ;NO => ALL DONE 3 002336 CALL SAVFQB ;SAVE AND CLEAR THE FIRQB 002336 004767 006620 JSR PC,SAVFQB 4 002342 112724 000020 MOVB #UU.TRM,(R4)+ ;SET "SET TERMINAL" FUNCTION 5 002346 012724 MOV (PC)+,(R4)+ ; AND OUR KB: TERMINAL 6 002350 000 377 .BYTE 0,-1 7 002352 110164 000022 MOVB R1,30-6(R4) ;SET NEW PRIVATE DELIMITER, IF REQUESTED 8 002356 000301 SWAB R1 ;GET 7-BIT/8-BIT SETTING 9 002360 110164 000012 MOVB R1,20-6(R4) ;SET NEW 7/8-BIT MODE, IF REQUESTED 10 002364 104066 .UUO ;NOW GO DO IT 11 002366 CALL @(SP)+ ; THEN RESTORE THE FIRQB 002366 004736 JSR PC,@(SP)+ 12 002370 150$: RETURN ;NOW RETURN 002370 000207 RTS PC 13 14 .DSABL LSB TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 37 TECOIO ROUTINE "FLAGRW" 1 .ENABL LSB 2 3 002372 10$: ERR NFI,<"No file for input"> 002372 004467 006312 JSR R4,ERR 002376 000000' .WORD $$$$$$ 000000 054171 .RAD50 /NFI/ 000002 116 157 040 .ASCIZ "No file for input" 4 5 002400 052743 004000 20$: BIS #ATEOF,-(R3) ;SET END-OF-FILE FLAG 6 002404 005165 000000G 30$: COM EOFLAG(R5) ;SET END-OF-FILE FLAG FOR "TECO" 7 002410 000476 BR 90$ ; AND GO EXIT 8 9 002412 SENTRY GETBUF ;GET A BUFFER FULL 002412 004467 006216 JSR R4,SAVREG 10 002416 016503 000000G MOV INPNTR(R5),R3 ;GET INPUT PARAMETERS POINTER 11 002422 010002 MOV R0,R2 ;MOVE BUFFER POINTER TO HERE 12 002424 005065 000000G CLR FFFLAG(R5) ;PRE-CLEAR THE FORM FEED FLAG 13 002430 005065 000000G CLR EOFLAG(R5) ;PRE-CLEAR THE EOF FLAG 14 002434 105723 TSTB (R3)+ ;IS THIS INPUT FILE OPEN? 15 002436 001755 BEQ 10$ ;NOPE 16 002440 132723 000010 BITB #ATEOF/400,(R3)+ ;YES, BUT IS IT AT EOF NOW? 17 002444 001357 BNE 30$ ;AT EOF, RETURN SUCH 18 002446 005301 40$: DEC R1 ;MORE ROOM IN "TECO"S BUFFER? 19 002450 003456 BLE 90$ ;NO, GO EXIT 20 002452 50$: CALL @CA-CC(R3) ;ROOM EXISTS, GET A BYTE 002452 004773 000014 JSR PC,@CA-CC(R3) 21 002456 103350 BCC 20$ ;EOF, SO SET END-OF-FILE FLAG 22 002460 032763 010400 177776 BIT #DO.MOD!DO.FMT,FO-CC(R3) ;IS IT 8-BIT BINARY MODE? 23 002466 001414 BEQ 60$ ;YES 24 002470 005700 TST R0 ;A NULL? 25 002472 001767 BEQ 50$ ;IGNORE 'S 26 002474 020027 000177 CMP R0,#177 ;A RUBOUT? 27 002500 001764 BEQ 50$ ;IGNORE 'S 28 002502 020027 000015 CMP R0,#015 ;IS THIS ? 29 002506 001004 BNE 60$ ;NOPE 30 002510 032763 000400 177776 BIT #DO.FMT,FO-CC(R3) ;YES, SPECIAL .BAS/.B2S INPUT FILE? 31 002516 001355 BNE 50$ ;IGNORE 'S IF .BAS/.B2S TYPE FILE 32 002520 020027 000014 60$: CMP R0,#014 ;FORM FEED? 33 002524 001431 BEQ 100$ ;YES, ALL DONE 34 002526 110022 MOVB R0,(R2)+ ;ELSE STORE DATA FOR "TECO" 35 002530 005265 000000G INC ZZ(R5) ; AND COUNT IT AS STORED 36 002534 020027 000012 CMP R0,#012 ;DID WE STORE A ? 37 002540 001017 BNE 80$ ;NO, SKIP SPECIAL CHECKING 38 002542 032763 000400 177776 BIT #DO.FMT,FO-CC(R3) ;YES, SPECIAL .BAS/.B2S INPUT FILE? 39 002550 001410 BEQ 70$ ;NOPE 40 002552 124241 CMPB -(R2),-(R1) ;YEP, BACK UP OVER AND 1 LESS FREE 41 002554 CALL 110$ ;CHECK FOR TRAILING //& DELETIONS 002554 004767 000042 JSR PC,110$ 42 002560 112722 000015 MOVB #015,(R2)+ ;STORE A INSTEAD OF THE 43 002564 110022 MOVB R0,(R2)+ ; THEN STORE THE 44 002566 005265 000000G INC ZZ(R5) ; AND INDICATE WE DID THAT 45 002572 020166 000002 70$: CMP R1,R2OFF(SP) ;LESS THAN DESIRED FREE LEFT NOW? 46 002576 002403 BLT 90$ ;YES, GO EXIT 47 002600 020127 000200 80$: CMP R1,#128. ;UP TO ALMOST FULL NOW? 48 002604 003320 BGT 40$ ;IF >128. THEN CONTINUE 49 002606 90$: RETURN ;EXIT 002606 000207 RTS PC TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 37-1 TECOIO ROUTINE "GETBUF" 50 51 002610 100$: CALL 110$ ;CHECK FOR TRAILING //& TRIMMING 002610 004767 000006 JSR PC,110$ 52 002614 005165 000000G COM FFFLAG(R5) ;INDICATE A FOUND 53 002620 000772 BR 90$ ; THEN GO EXIT 54 55 002622 012746 010400 110$: MOV #DO.MOD!DO.FMT,-(SP) ;SPECIAL .B2S INPUT FILE? 56 002626 046326 177776 BIC FO-CC(R3),(SP)+ ;BOTH BITS WILL CLEAR IF SO 57 002632 001365 BNE 90$ ;NOPE, NO TRAILING //& TRIM 58 002634 020266 000006 120$: CMP R2,R0OFF+2(SP) ;BACKED UP TOO FAR? 59 002640 101762 BLOS 90$ ;YES, EXIT 60 002642 124227 000040 CMPB -(R2),#040 ;CHECK FOR TRAILING 61 002646 001407 BEQ 130$ ;FOUND, DELETE IT 62 002650 121227 000011 CMPB (R2),#011 ;CHECK FOR TRAILING 63 002654 001404 BEQ 130$ ;FOUND, DELETE IT 64 002656 122227 000046 CMPB (R2)+,#'& ;CHECK FOR TRAILING "&" 65 002662 001351 BNE 90$ ;OTHER, END THE TRAILING DELETION SCAN 66 002664 005302 DEC R2 ;FOUND, DELETE IT 67 002666 005201 130$: INC R1 ;INCREMENT AMOUNT OF FREE SPACE 68 002670 005365 000000G DEC ZZ(R5) ; AND DECREMENT NUMBER OF CHARACTERS STORED 69 002674 000757 BR 120$ ;NOW TRY FOR ANOTHER TRAILING DELETION 70 71 .DSABL LSB 72 73 002676 GLOBAL TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 38 TECOIO ROUTINE "GETBUF" 1 .ENABL LSB 2 3 002676 10$: ERR NYI,<"Not yet implemented"> 002676 004467 006006 JSR R4,ERR 002702 000024' .WORD $$$$$$ 000024 055561 .RAD50 /NYI/ 000026 116 157 164 .ASCIZ "Not yet implemented" 4 5 002704 SENTRY BACKUP ;BACK UP N BUFFERS FULL 002704 004467 005724 JSR R4,SAVREG 6 002710 000772 BR 10$ ;SORRY, NOT YET... 7 8 .DSABL LSB TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 39 TECOIO ROUTINE "BACKUP" 1 .ENABL LSB 2 3 002712 10$: ERR NFO,<"No file for output"> 002712 004467 005772 JSR R4,ERR 002716 000052' .WORD $$$$$$ 000052 054177 .RAD50 /NFO/ 000054 116 157 040 .ASCIZ "No file for output" 4 5 002720 SENTRY PUTBUF ;PUT OUT A BUFFER FULL 002720 004467 005710 JSR R4,SAVREG 6 002724 016503 000000G MOV OUPNTR(R5),R3 ;GET THE OUTPUT PARAMETERS 7 002730 005723 TST (R3)+ ;IS OUTPUT FILE OPEN? 8 002732 001767 BEQ 10$ ;NOPE 9 002734 005301 20$: DEC R1 ;MORE TO GO? 10 002736 100554 BMI 180$ ;NO, CHECK FOR TO OUTPUT 11 002740 012746 002734' MOV #20$,-(SP) ;YES, SET TO LOOP AROUND AGAIN 12 002744 112002 MOVB (R0)+,R2 ;GET A CHARACTER 13 002746 032763 000400 177776 BIT #DO.FMT,FO-CC(R3) ;SPECIAL .BAS/.B2S OUTPUT FILE? 14 002754 001542 BEQ 160$ ;NOPE 15 002756 020227 000015 CMP R2,#015 ;YEP, IS IT ? 16 002762 001541 BEQ 170$ ;IGNORE THE 'S 17 002764 020227 000012 CMP R2,#012 ;ELSE IS IT ? 18 002770 001105 BNE 120$ ;NOPE, JUST OUTPUT IT 19 002772 126027 177775 000046 CMPB -3(R0),#'& ;IS IT "&"? 20 003000 001473 BEQ 110$ ;YES, OUTPUT "&" 21 003002 005701 TST R1 ;NO, MORE TO COME? 22 003004 001466 BEQ 100$ ;NO MORE DATA, BUT CHECK FOR COMING 23 003006 121027 000060 CMPB (R0),#'0 ;IS NEXT A DIGIT? 24 003012 103403 BLO 30$ ;NON-DIGIT, DO 25 003014 121027 000071 CMPB (R0),#'9 ;REALLY A DIGIT? 26 003020 101463 BLOS 110$ ;YES, A DIGIT, SO DO 27 003022 032763 010000 177776 30$: BIT #DO.MOD,FO-CC(R3) ;SPECIAL .B2S OUTPUT FILE? 28 003030 001444 BEQ 90$ ;NO, GO OUTPUT 29 003032 026363 000012 000010 CMP B2S.CP-CC(R3),B2S.AP-CC(R3) ;YES, AT DESIRED POSITION ALREADY? 30 003040 001427 BEQ 70$ ;RIGHT AT IT, GO OUTPUT AT LEAST 1 31 003042 016302 000012 40$: MOV B2S.CP-CC(R3),R2 ;GET CURRENT POSITION 32 003046 062702 000010 ADD #8.,R2 ; AND FIND WHAT A 33 003052 042702 000007 BIC #8.-1,R2 ; WOULD DO ON OUTPUT 34 003056 020263 000010 CMP R2,B2S.AP-CC(R3) ;WOULD TAKE US BEYOND DESIRED POSITION? 35 003062 101011 BHI 60$ ;YES, SO DON'T DO A 36 003064 012702 000011 MOV #011,R2 ;NO, SO SET A 37 003070 CALL 120$ ; AND OUTPUT IT 003070 004767 000110 JSR PC,120$ 38 003074 000762 BR 40$ ; THEN CHECK POSITION AGAIN 39 40 003076 012702 000040 50$: MOV #040,R2 ;SET A 41 003102 CALL 120$ ; AND OUTPUT IT 003102 004767 000076 JSR PC,120$ 42 003106 026363 000012 000010 60$: CMP B2S.CP-CC(R3),B2S.AP-CC(R3) ;AT (OR BEYOND) DESIRED POSITION? 43 003114 103770 BLO 50$ ;NOT YET, OUTPUT A AND CHECK AGAIN 44 003116 001404 BEQ 80$ ;RIGHT AT DESIRED POSITION 45 003120 012702 000040 70$: MOV #040,R2 ;BEYOND DESIRED, SET A 46 003124 CALL 120$ ; AND OUTPUT IT 003124 004767 000054 JSR PC,120$ 47 003130 012702 000046 80$: MOV #'&,R2 ;SET FOR THE 48 003134 CALL 120$ ; OUTPUT OF "&" 003134 004767 000044 JSR PC,120$ TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 39-1 TECOIO ROUTINE "PUTBUF" 49 003140 000413 BR 110$ ;NOW GO OUTPUT 50 51 003142 90$: CALL 120$ ;OUTPUT THE 003142 004767 000036 JSR PC,120$ 52 003146 012702 000015 MOV #015,R2 ;SET FOR THE 53 003152 CALL 120$ ; OUTPUT OF 003152 004767 000026 JSR PC,120$ 54 003156 005002 CLR R2 ;SET FOR THE 55 003160 000440 BR 160$ ; OUTPUT OF 56 57 003162 005766 000004 100$: TST R2OFF+2(SP) ;A COMING? 58 003166 001315 BNE 30$ ;YES, SO DO 59 003170 012702 000015 110$: MOV #015,R2 ;SET FOR THE 60 003174 CALL 120$ ; OUTPUT OF 003174 004767 000004 JSR PC,120$ 61 003200 012702 000012 MOV #012,R2 ;SET FOR THE OUTPUT OF 62 003204 020227 000040 120$: CMP R2,#040 ;A NORMAL GRAPHIC CHARACTER? 63 003210 103402 BLO 130$ ;NOPE 64 003212 005263 000012 INC B2S.CP-CC(R3) ;YEP, BUMP POSITION BY +1 65 003216 005046 130$: CLR -(SP) ;SET "BIC" MASK TO CLEAR NOTHING INITIALLY 66 003220 020227 000015 CMP R2,#015 ;? 67 003224 001413 BEQ 140$ ;YES, POSITION = 0 ("BIC" WITH -1) 68 003226 020227 000014 CMP R2,#014 ;? 69 003232 001410 BEQ 140$ ;YES, POSITION = 0 ("BIC" WITH -1) 70 003234 020227 000011 CMP R2,#011 ;? 71 003240 001006 BNE 150$ ;NO, OTHER, ALL DONE 72 003242 062763 000010 000012 ADD #8.,B2S.CP-CC(R3) ;ADVANCE POSITION BY 8. 73 003250 012716 177770 MOV #^C<8.-1>,(SP) ; MODULUS 8. 74 003254 005116 140$: COM (SP) ;SET THE CORRECT "BIC" MASK 75 003256 042663 000012 150$: BIC (SP)+,B2S.CP-CC(R3) ;DO THE CORRECT "BIC" 76 003262 160$: CALL @CA-CC(R3) ;OUTPUT THAT BYTE 003262 004773 000014 JSR PC,@CA-CC(R3) 77 003266 170$: RETURN ;NOW RETURN 003266 000207 RTS PC 78 79 003270 005766 000002 180$: TST R2OFF(SP) ;OUTPUT A ? 80 003274 001404 BEQ 190$ ;NOPE 81 003276 012702 000014 MOV #014,R2 ;YES, SO SET FOR A 82 003302 CALL 120$ ; AND OUTPUT IT 003302 004767 177676 JSR PC,120$ 83 003306 032743 020000 190$: BIT #FLGFRC,-(R3) ;FORCE TYPE OUTPUT DEVICE? 84 003312 001765 BEQ 170$ ;NO, JUST EXIT 85 003314 022323 CMP (R3)+,(R3)+ ;CORRECT TO BE A CP POINTER 86 003316 005713 PUTBLK: TST (R3) ;IS THIS THE FIRST TIME? 87 003320 001762 BEQ 170$ ;YES, JUST EXIT 88 003322 012704 000456 MOV #XRB+XRMOD,R4 ;GET AN XRB POINTER 89 003326 005014 CLR (R4) ;XRMOD <- 0 (NO MODIFIERS) 90 003330 005044 CLR -(R4) ;XRTIME <- 0 (WAIT FOREVER) 91 003332 005044 CLR -(R4) ;XRBLK <- 0 (NEXT SEQUENTIAL) 92 003334 105044 CLRB -(R4) ;XRCI+1 <- 0 (NEXT SEQUENTIAL) 93 003336 116344 177774 MOVB FO-CP(R3),-(R4) ;XRCI <- CHANNEL NUMBER * 2 94 003342 016344 000002 MOV RP-CP(R3),-(R4) ;XRLOC <- BUFFER START 95 003346 016344 000004 MOV RC-CP(R3),-(R4) ;XRBC <- BUFFER SIZE THEN 96 003352 164314 SUB -(R3),(R4) ;XRBC <- THE REAL COUNT 97 003354 011444 MOV (R4),-(R4) ;XRLEN <- THE REAL COUNT ALSO 98 003356 005023 CLR (R3)+ ;NOW CURRENT COUNT AND 99 003360 005013 CLR (R3) ; CURRENT POINTER GET CLEARED TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 39-2 TECOIO ROUTINE "PUTBUF" 100 003362 062763 000001 000026 ADD #1,F$HEOF+2-CP(R3) ;COUNT THE NUMBER 101 003370 105563 000024 ADCB F$HEOF-CP(R3) ; OF BLOCKS OUTPUT 102 003374 104004 .WRITE ;DO THE BLOCK OUTPUT 103 003376 000403 BR ERRCHK ; AND ERROR CHECK IT 104 105 .DSABL LSB 106 107 003400 GLOBAL TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 40 CLOSE AND DEALLOCATE 1 .SBTTL CLOSE AND DEALLOCATE 2 3 003400 CLOSER: CALL DEALC ;DO THE DEALLOCATE FIRST 003400 004767 174540 JSR PC,DEALC 4 5 .SBTTL FIP CALLS WITH ERROR CHECKING 6 7 003404 104000 FIPERC: CALFIP ;CALL THE FILE PROCESSOR 8 9 .SBTTL ERROR CHECKING 10 11 .ENABL LSB 12 13 003406 105767 000402' ERRCHK: TSTB IOSTS ;ANY ERROR? 14 003412 001430 BEQ 30$ ;NO 15 003414 012700 MOV (PC)+,R0 ;YES, LOAD ERROR CODE OF "ERR" 16 003416 021042 .RAD50 /ERR/ 17 003420 CHKERR NOSUCH ;IS IT THE "CAN'T FIND" ERROR? 003420 122767 000000G 000402' CMPB #NOSUCH,IOSTS 18 003426 001002 BNE 10$ ;OTHER ERROR, SO CORRECT CODE IS "ERR" 19 003430 012700 MOV (PC)+,R0 ;IT IS "CAN'T FIND", LOAD "FNF" 20 003432 023666 .RAD50 /FNF/ 21 003434 012746 010714' 10$: MOV #ERRIO,-(SP) ;SET ERROR RETURN ADDRESS 22 003440 ERRMSG: SETFQB ERRFQ ;SET FIRQB FOR ERROR MESSAGE LOOKUP 003440 004067 174410 JSR R0,SETFQB 003444 007000 .WORD ERRFQ*400 23 003446 116714 000402' MOVB IOSTS,(R4) ; AND SET THE ERROR CODE 24 003452 104000 CALFIP ;NOW GET THE MESSAGE TEXT 25 003454 105064 000034 CLRB 28.(R4) ;LIMIT MSG'S TO 28. BYTES 26 003460 012702 000112 MOV #ERRBUF,R2 ;POINT TO ERROR MESSAGE TEXT BUFFER 27 003464 112422 20$: MOVB (R4)+,(R2)+ ;MOVE A BYTE INTO BUFFER 28 003466 001376 BNE 20$ ; UNTIL WE MOVED THE NULL BYTE 29 003470 012702 000112 MOV #ERRBUF,R2 ;NOW POINT TO THE TEXT AGAIN 30 003474 30$: RETURN ;EXIT 003474 000207 RTS PC 31 32 .DSABL LSB TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 41 ERROR CHECKING 1 .ENABL LSB 2 3 003476 SENTRY KILFIL ;STOP AN OUTPUT FILE 003476 004467 005132 JSR R4,SAVREG 4 003502 016503 000000G MOV OUPNTR(R5),R3 ;GET OUTPUT PARAMETERS 5 003506 005713 TST (R3) ;OPEN NOW? 6 003510 001422 BEQ 20$ ;NO 7 003512 011346 MOV (R3),-(SP) ;YES, SAVE DETERMINATION 8 003514 CALL DEALC ;DEALLOCATE BUFFER SPACE 003514 004767 174424 JSR PC,DEALC 9 003520 112744 000020 MOVB #RSTFQ,-(R4) ;SET FUNCTION AS RESET CLOSE FOR KILL'S 10 003524 CALL FIPERC ; AND GO DO IT AND ERROR CHECK 003524 004767 177654 JSR PC,FIPERC 11 003530 CALL EBGET ;NOW GET OUTPUT NAME (DELETE FUNCTION) 003530 004767 000242 JSR PC,EBGET 12 003534 005726 TST (SP)+ ;OUTPUT FILE NEED RENAMING? 13 003536 100002 BPL 10$ ;NOPE 14 003540 CALL GETTMP ;YES, SO GET THE .TMP FILE NAME 003540 004767 000266 JSR PC,GETTMP 15 003544 104000 10$: CALFIP ;DELETE THE FILE 16 003546 CHKERR NOSUCH ;WAS IT THERE TO DELETE? 003546 122767 000000G 000402' CMPB #NOSUCH,IOSTS 17 003554 001314 BNE ERRCHK ;YES (OR OTHER ERROR), SO GO ERROR CHECK 18 003556 20$: RETURN ;NO, JUST EXIT 003556 000207 RTS PC 19 20 003560 SENTRY CLSFIL ;CLOSE INPUT AND OUTPUT FILES (AND DO "EB") 003560 004467 005050 JSR R4,SAVREG 21 003564 016503 000000G MOV INPNTR(R5),R3 ;GET INPUT PARAMETER POINTER 22 003570 005713 TST (R3) ;IS THE INPUT CLOSED NOW? 23 003572 001407 BEQ 30$ ;YES 24 003574 CALL CLOSER ;NO, SO CLOSE INPUT FILE 003574 004767 177600 JSR PC,CLOSER 25 003600 005065 000000G CLR EOFLAG(R5) ; AND INDCATE NOT EOF-OF-FILE ANYMORE 26 003604 000402 BR 30$ ;NOW CLOSE THE OUTPUT FILE 27 28 003606 SENTRY CLSOUT ;CLOSE THE OUTPUT FILE (AND DO "EB") 003606 004467 005022 JSR R4,SAVREG 29 003612 016503 000000G 30$: MOV OUPNTR(R5),R3 ;GET OUTPUT PARAMETER POINTER 30 003616 005713 TST (R3) ;ANY OUTPUT CURRENTLY ACTIVE? 31 003620 001756 BEQ 20$ ;NO, JUST EXIT 32 003622 032327 020000 BIT (R3)+,#FLGFRC ;YES, FORCE TYPE DEVICE? 33 003626 001010 BNE 50$ ;NO FINAL FIXUP IF FORCE TYPE DEVICE 34 003630 026327 000014 011056' CMP CA-CC(R3),#PUTBYT ;DOING NORMAL ASCII STREAM OUTPUT? 35 003636 001402 BEQ 40$ ;YES, NO RECORD TO FINISH UP 36 003640 CALL ENDREC ;ELSE FINISH UP THAT FINAL RECORD 003640 004767 007510 JSR PC,ENDREC 37 003644 40$: CALL ENDBLK ;NOW END THIS FINAL BLOCK 003644 004767 005236 JSR PC,ENDBLK 38 003650 50$: ;GO DO THE REAL CLOSE 39 40 .DSABL LSB 41 42 003650 GLOBAL TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 42 TECOIO ROUTINE "CLSOUT" 1 .ENABL LSB 2 3 003650 014346 MOV -(R3),-(SP) ;SAVE DETERMINATION 4 003652 CALL CLOSER ; THEN CLOSE AND DEALLOCATE IT 003652 004767 177522 JSR PC,CLOSER 5 003656 006326 ASL (SP)+ ;REQUIRED RENAMING AND/OR EB RENAMING? 6 003660 103045 BCC 40$ ;NOPE, NEITHER 7 003662 100020 BPL 20$ ;YES, BUT ONLY NORMAL RENAMING 8 003664 10$: CALL EBGETR ;YES, EB RENAME, GET ORIGINAL FILE DATA 003664 004767 000232 JSR PC,EBGETR 9 003670 012764 006263 000021 MOV #^RBAK,FQNAM2+4-FQFUN(R4) ;SET NEW EXTENSION 10 003676 CALL 30$ ;CALL FIP FOR THE RENAME (WITH DELETION...) 003676 004767 000052 JSR PC,30$ 11 003702 103410 BCS 20$ ;NO ERROR, GO RENAME THE .TMP NOW 12 003704 CALL EBGET ;GET ORIGINAL DATA AGAIN 003704 004767 000066 JSR PC,EBGET 13 003710 012764 006263 000011 MOV #^RBAK,FQEXT-FQFUN(R4) ; TO DELETE THE .BAK FILE 14 003716 CALL FIPERC ;TRY THE DELETION NOW 003716 004767 177462 JSR PC,FIPERC 15 003722 000760 BR 10$ ; THEN LOOP FOR ANOTHER RENAME... 16 17 003724 20$: CALL EBGETR ;GET THE ORIGINAL FILE DATA AGAIN 003724 004767 000172 JSR PC,EBGETR 18 003730 CALL GETTMP ;RENAME .TMP FILE TO ORIGINAL NAME 003730 004767 000076 JSR PC,GETTMP 19 003734 CALL 30$ ;LET FIP DO THE RENAME (WITH DELETION...) 003734 004767 000014 JSR PC,30$ 20 003740 103415 BCS 40$ ;NO ERROR, ALL DONE, SO EXIT 21 003742 CALL EBGET ;FILE EXISTS, GET IT AGAIN 003742 004767 000030 JSR PC,EBGET 22 003746 CALL FIPERC ; AND GO DELETE IT 003746 004767 177432 JSR PC,FIPERC 23 003752 000764 BR 20$ ;LOOP FOR ANOTHER RENAME TRY... 24 25 003754 104000 30$: CALFIP ;CALL FILE PROCESSOR 26 003756 CHKERR FIEXST ;IS THE ERROR "FILE EXISTS"? 003756 122767 000000G 000402' CMPB #FIEXST,IOSTS 27 003764 001403 BEQ 40$ ;YES, EXIT WITH C=0 28 003766 CALL ERRCHK ;NO, CHECK FOR OTHER ERROR(S) 003766 004767 177414 JSR PC,ERRCHK 29 003772 000261 SEC ;NO ERROR, EXIT WITH C=1 30 003774 40$: RETURN ;NOW EXIT 003774 000207 RTS PC 31 32 .DSABL LSB TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 43 FILE DATA GETTING SUBROUTINES 1 .SBTTL FILE DATA GETTING SUBROUTINES 2 3 003776 010301 EBGET: MOV R3,R1 ;COPY THE PARAMETER BLOCK POINTER 4 004000 062701 000100 ADD #PARMSZ,R1 ;NOW INDEX TO END OF PARM BLOCK 5 004004 012704 000442 MOV #FIRQB+FQBSIZ,R4 ; AND GET POINTER TO FIRQB END+2 6 004010 014144 10$: MOV -(R1),-(R4) ;NOW UNSAVE THE SAVED DATA 7 004012 020427 000406 CMP R4,#FIRQB+FQFIL ;DONE? 8 004016 101374 BHI 10$ ;NOT YET 9 004020 112744 000006 MOVB #DLNFQ,-(R4) ; AND FUNCTION AS DELETE 10 004024 RETURN ;THEN EXIT 004024 000207 RTS PC 11 12 004026 EBGETT: CALL EBGET ;GET ORIGINAL DATA AND THEN .TMP 004026 004767 177744 JSR PC,EBGET 13 004032 116701 000404' GETTMP: MOVB FIRQB+FQJOB,R1 ;GET JOB NUMBER (TIMES 2) 14 004036 006201 ASR R1 ;NOW HAVE PLAIN OLD JOB NUMBER 15 004040 005000 CLR R0 ;CLEAR THE HIGH ORDER 16 004042 071027 000012 DIV #10.,R0 ; AND DIVIDE BY 10. 17 004046 010146 MOV R1,-(SP) ;SAVE "UNITS" 18 004050 070027 000050 MUL #50,R0 ; AND MULTIPLY BY 50 FOR RAD50 19 004054 062601 ADD (SP)+,R1 ;ADD "UNITS" TO "TENS" 20 004056 012764 076713 000005 MOV #^RTEC,FQNAM1-FQFUN(R4) ;LOAD "TEC" 21 004064 062701 061216 ADD #^RO00,R1 ;FORM "ONN" 22 004070 020327 001300 CMP R3,#OUPALT ;IS IT THE ALTERNATE OUTPUT? 23 004074 001002 BNE 10$ ;NO 24 004076 062701 124200 ADD #^RA00-^RO00,R1 ;YES, FORM "ANN" 25 004102 010164 000007 10$: MOV R1,FQNAM1+2-FQFUN(R4) ;LOAD 2ND PART OF NAME 26 004106 CALL CREFUN ;SET THE CORRECT CREATION FUNCTION 004106 004767 000050 JSR PC,CREFUN 27 004112 012764 077430 000011 MOV #^RTMP,FQEXT-FQFUN(R4) ;LOAD ".TMP" 28 004120 RETURN ; AND EXIT 004120 000207 RTS PC 29 30 004122 EBGETR: CALL EBGET ;GET THE OLD NAME 004122 004767 177650 JSR PC,EBGET 31 004126 112714 000010 MOVB #RENFQ,(R4) ;FUNCTION IS RENAME 32 004132 012701 000420 MOV #FIRQB+FQSIZ,R1 ;GET POINTER TO RENAME PARAMETERS 33 004136 012721 177777 MOV #-1,(R1)+ ;SET AUTOMATIC DELETIONS... 34 004142 016421 000005 MOV FQNAM1-FQFUN(R4),(R1)+ ;COPY THE FILE 35 004146 016421 000007 MOV FQNAM1+2-FQFUN(R4),(R1)+ ; NAME AND 36 004152 016421 000011 MOV FQNAM1+4-FQFUN(R4),(R1)+ ; EXTENSION 37 004156 005021 CLR (R1)+ ;BUT NO PROTECTION CODE CHANGES 38 004160 RETURN ; AND EXIT 004160 000207 RTS PC 39 40 004162 012700 000004 CREFUN: MOV #CREFQ,R0 ;SET NORMAL DATA FILE CREATION FUNCTION 41 004166 105767 000426' TSTB FIRQB+FQFLAG ;IS THIS A DISK FILE CREATION? 42 004172 001006 BNE CREXIT ;NO, DO NORMAL CREATES FOR NON-DISK 43 004174 .ASSUME DSKHND EQ 0 44 004174 026737 000416' 177734 CMP FIRQB+FQEXT,@#P.DEXT ;REALLY CREATING AN EXECUTABLE FILE? 45 004202 001002 BNE CREXIT ;NO, A DATA FILE 46 004204 012700 000034 MOV #CRBFQ,R0 ;YES, OUR EXECUTABLE FILE, CHANGE FUNCTION 47 004210 CREXIT: RETURN ;NOW EXIT 004210 000207 RTS PC TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 44 FILE STRING SCAN CALL 1 .SBTTL FILE STRING SCAN CALL 2 3 004212 012704 000406 SCAN: MOV #FIRQB+FQFIL,R4 ;GET FIRQB POINTER 4 004216 005024 10$: CLR (R4)+ ;CLEAR FIRQB AND XRB 5 004220 020427 000460 CMP R4,#XRB+XRBSIZ ;MORE? 6 004224 103774 BLO 10$ ;YES, LOOP 7 004226 012701 000446 MOV #XRB+XRLOC,R1 ;NOW GET XRB POINTER 8 004232 016502 000000G MOV FILBUF(R5),R2 ;GET FILENAME STRING POINTER 9 004236 010211 MOV R2,(R1) ;SET THAT POINTER 10 004240 105722 20$: TSTB (R2)+ ;END OF STRING? 11 004242 001376 BNE 20$ ;NOT YET... 12 004244 161102 SUB (R1),R2 ;YES, FIND LENGTH +1 13 004246 005302 DEC R2 ;NOW HAVE LENGTH 14 004250 010241 MOV R2,-(R1) ;SET LENGTH @ XRBC AND 15 004252 010241 MOV R2,-(R1) ; @ XRLEN 16 004254 001755 BEQ CREXIT ;LENGTH = 0 17 004256 104064 .FSS ;ELSE PARSE THE STRING 18 004260 30$: CALL ERRCHK ;DIE ON ANY ERROR 004260 004767 177122 JSR PC,ERRCHK 19 004264 042744 BIC (PC)+,-(R4) ;TRIM FLAG (@ XRB+14) TO INDEX ONLY 20 004266 000 377 .BYTE 0,-1 21 004270 121427 000016 CMPB (R4),#MTAHND ;MAGTAPE? 22 004274 001020 BNE 50$ ;NOPE 23 004276 016767 000436' 000420' MOV FIRQB+FQCLUS,FIRQB+FQSIZ ;YEP, SAY CLUSTER SIZE IS BLOCK SIZE 24 004304 042767 170777 000420' BIC #^C<7000>,FIRQB+FQSIZ ;TRIM BLOCK SIZE TO NICE MULTIPLE 25 004312 001003 BNE 40$ ;BLOCK SIZE SPECIFIED, USE IT 26 004314 012767 004000 000420' MOV #2048.,FIRQB+FQSIZ ;ELSE DEFAULT BLOCK SIZE TO 2048. 27 004322 016767 000420' 000436' 40$: MOV FIRQB+FQSIZ,FIRQB+FQCLUS ;USE BLOCK SIZE AS RECORD SIZE 28 004330 052767 120000 000436' BIS #32768.!8192.,FIRQB+FQCLUS ;SAY ANSI "D", IMPLIED CR/LF 29 004336 011467 000426' 50$: MOV (R4),FIRQB+FQFLAG ;SET HANDLER INDEX INTO FIRQB 30 004342 034427 000004 BIT -(R4),#4 ;ANY "/FILESIZE:N" SWITCH? (FROM @ XRB+12) 31 004346 001117 BNE 140$ ;YES, THAT IS AN ERROR 32 004350 SETERR NODEVC ;PRESET THE ILLEGAL DEVICE ERROR CODE 004350 012767 000000G 000402' MOV #NODEVC,IOSTS 33 004356 005744 TST -(R4) ;CHECK FOR BAD DEV: (FROM @ XRB+10) 34 004360 100737 BMI 30$ ;DEVICE IS BAD, GIVE AN ERROR 35 004362 026627 000004 177774 CMP R2OFF+2(SP),#'N-'R ;IS IT "EN"? 36 004370 001407 BEQ 70$ ;YES 37 004372 031427 001546 BIT (R4),#1546 ;CHECK FOR ALL WILDS 38 004376 001412 BEQ 80$ ;EVERYTHING IS O.K. 39 004400 60$: SETERR BADNAM ;SET ILLEGAL NAME 004400 012767 000000G 000402' MOV #BADNAM,IOSTS 40 004406 000724 BR 30$ ; AND ANNOUNCE IT 41 42 004410 105767 000426' 70$: TSTB FIRQB+FQFLAG ;IS IT DISK? 43 004414 001321 BNE 30$ ;NOPE, THAT IS AN ERROR FOR "EN" 44 004416 .ASSUME DSKHND EQ 0 45 004416 031427 000001 BIT (R4),#1 ;ANY FILENAME THERE? 46 004422 001766 BEQ 60$ ;NOPE, ERROR 47 004424 031427 000010 80$: BIT (R4),#10 ;"." FOR EXTENSION? (FROM @ XRB+10) 48 004430 001007 BNE 90$ ;YES, NO DEFAULTING 49 004432 026627 000004 177767 CMP R2OFF+2(SP),#'I-'R ;IS IT ALSO "EI"?? 50 004440 001003 BNE 90$ ;NO 51 004442 013767 177734 000416' MOV @#P.DEXT,FIRQB+FQEXT ;YES, DEFAULT EXTENSION 52 53 004450 GLOBAL TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 45 FILE STRING SCAN CALL 1 004450 012701 000010 90$: MOV #B2SPOS,R1 ;DEFAULT "&" POSITION 2 004454 012702 000446 MOV #XRB+XRLOC,R2 ;GET POINTER INTO XRB 3 004460 011200 MOV (R2),R0 ;GET POINTER TO UNSCANNED CHARACTERS 4 004462 014202 MOV -(R2),R2 ;ALL CHARACTERS SCANNED? 5 004464 001460 BEQ 160$ ;YES, GO EXIT SETTING STRING 6 004466 122027 000057 CMPB (R0)+,#'/ ;NO, A SWITCH THERE? 7 004472 001342 BNE 60$ ;NOT A SWITCH, ERROR 8 004474 005302 DEC R2 ;A SWITCH, ONLY THE "/" 9 004476 001447 BEQ 150$ ;YES, THAT IS HISTORICAL .BAS SIGNAL 10 004500 122027 000102 CMPB (R0)+,#'B ;NO, TRY FOR "/B", "/B+", OR "/B2" 11 004504 001426 BEQ 130$ ;IT MIGHT BE "/B", "/B+", OR "/B2" 12 004506 124027 000142 CMPB -(R0),#'B+40 ;ELSE CHECK FOR LOWER CASE 13 004512 001422 BEQ 120$ ;LOWER CASE "B", TRY FOR "/B", /B+", OR "/B2" 14 004514 005001 CLR R1 ;CLEAR THE DESIRED POSITION BUCKET 15 004516 112004 100$: MOVB (R0)+,R4 ;GET (HOPEFULLY) A DIGIT 16 004520 162704 000060 SUB #'0,R4 ; AND MAKE IT INTO BINARY 17 004524 020427 000011 CMP R4,#9. ;VALID DIGIT? 18 004530 101026 BHI 140$ ;NOPE, THAT IS AN ERROR 19 004532 070127 000012 MUL #10.,R1 ;MULTIPLY OLD NUMBER BY 10. 20 004536 060401 ADD R4,R1 ; AND ADD IN THE NEW 21 004540 020127 000377 CMP R1,#377 ;IS THE VALUE TOO BIG NOW? 22 004544 101020 BHI 140$ ;YES, THAT IS AN ERROR 23 004546 077215 SOB R2,100$ ;LOOP IF MORE TO COME... 24 004550 052767 010400 000426' 110$: BIS #DO.MOD!DO.FMT,FIRQB+FQFLAG ;SET THE SPECIAL .B2S FLAGS 25 004556 000426 BR 170$ ; AND GO EXIT SETTING STRING 26 27 004560 005200 120$: INC R0 ;ADVANCE OVER THE LOWER CASE "B" 28 004562 005302 130$: DEC R2 ;IS IT EXACTLY "/B"? 29 004564 001423 BEQ 170$ ;YES, GO SET SPECIAL 8-BIT BINARY FLAGS 30 004566 005302 DEC R2 ;NO, TRY FOR "/B+" OR "/B2" 31 004570 001006 BNE 140$ ;TOO MANY CHARACTERS, ERROR 32 004572 121027 000053 CMPB (R0),#'+ ;IS IT "/B+"? 33 004576 001407 BEQ 150$ ;YES, GO SET SPECIAL .BAS FLAGS 34 004600 121027 000062 CMPB (R0),#'2 ;IS IT "/B2"? 35 004604 001761 BEQ 110$ ;YES, GO SET SPECIAL .B2S FLAGS 36 004606 140$: SETERR BADSWT ;SET THE ILLEGAL SWITCH ERROR 004606 012767 000000G 000402' MOV #BADSWT,IOSTS 37 004614 000621 BR 30$ ; AND ANNOUNCE IT 38 39 004616 052767 000400 000426' 150$: BIS #DO.FMT,FIRQB+FQFLAG ;SET THE SPECIAL .BAS FLAGS 40 004624 000403 BR 170$ ; AND GO EXIT SETTING STRING 41 42 004626 052767 010000 000426' 160$: BIS #DO.MOD,FIRQB+FQFLAG ;SIGNAL NORMAL ASCII 43 004634 010167 000422' 170$: MOV R1,FIRQB+FQBUFL ;RETURN THE DESIRED POSITION HERE 44 004640 012704 000432 SETFEQ: MOV #FIRQB+FQDEV,R4 ;SET FIRQB POINTER @ FQDEV 45 004644 016746 000426' MOV FIRQB+FQFLAG,-(SP) ;STACK THE SWITCH BIT(S) 46 004650 116716 000422' MOVB FIRQB+FQBUFL,(SP) ; AND THE "&" POSITION VALUE 47 004654 000546 BR SETFEX ;EXIT SETTING STRING TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 46 SET SEARCH/FILENAME BUFFER TO CURRENT FILE SPECIFICATION 1 .SBTTL SET SEARCH/FILENAME BUFFER TO CURRENT FILE SPECIFICATION 2 3 004656 SETSAV: ;MOV R4,-(SP) ;PARAM BLOCK ALREADY SAVE BY 'JSR R4,' 4 004656 010167 000674' MOV R1,SETPTR ;SAVE SEARCH/FILENAME BUFFER POINTER 5 004662 CALL (R4) ;NOW CALL OUR CALLER 004662 004714 JSR PC,(R4) 6 004664 016701 000674' SETRET: MOV SETPTR,R1 ;RESTORE SEARCH/FILENAME BUFFER POINTER 7 004670 012604 MOV (SP)+,R4 ;RESTORE PARAM BLOCK POINTER 8 004672 RETURN ; AND FINAL RETURN 004672 000207 RTS PC 9 10 004674 000300 SETNUB: SWAB R0 ;WE WANT THE BYTES SWITCHED ON THIS CALL 11 004676 042700 SETNUM: BIC (PC)+,R0 ;TRIM THE VALUE TO ONLY 8 BITS 12 004700 000 377 .BYTE 0,-1 13 004702 CALL SETSAV,R4 ;SAVE PARAM BLOCK PTR AND BUF PTR 004702 004467 177750 JSR R4,SETSAV 14 004706 016546 000000G MOV N(R5),-(SP) ;SAVE "TECO"S 'N' VALUE 15 004712 010065 000000G MOV R0,N(R5) ; THEN REPLACE IT WITH OUR VALUE 16 004716 016546 000000G MOV NMRBAS(R5),-(SP) ;SAVE "TECO"S CURRENT RADIX 17 004722 005065 000000G CLR NMRBAS(R5) ; THEN SET RADIX TO DECIMAL 18 004726 CALLX ZEROD,R3,SETCHR ;NOW CALL FOR A NUMBER CONVERSION 004726 004337 000000G JSR R3,@#ZEROD 004732 005010' .WORD SETCHR 19 004734 012665 000000G MOV (SP)+,NMRBAS(R5) ;RESTORE "TECO"S RADIX 20 004740 012665 000000G MOV (SP)+,N(R5) ;RESTORE "TECO"S 'N' VALUE 21 004744 RETURN ; AND EXIT 004744 000207 RTS PC 22 23 004746 026767 000674' 000666' TYPEBF::CMP SETPTR,TTOBFE ;OUT OF ROOM IN TERMINAL OUTPUT BUFFER? 24 004754 103415 BLO SETCHR ;NOT YET, BUFFER ANOTHER CHARACTER 25 004756 010346 TYPEBC::MOV R3,-(SP) ;SAVE R3 26 004760 010446 MOV R4,-(SP) ; AND R4 27 004762 016704 000674' MOV SETPTR,R4 ;GET CURRENT POINTER TO OUTPUT BUFFER 28 004766 016703 000664' MOV TTOBFS,R3 ;GET POINTER TO OUTPUT BUFFER'S START 29 004772 010367 000674' MOV R3,SETPTR ; THEN RESET THE BUFFERING POINTER 30 004776 160304 SUB R3,R4 ;FIND THE CHARACTER COUNT TO OUTPUT 31 005000 CALL PRINTB ; THEN GO DO THAT OUTPUT 005000 004767 002272 JSR PC,PRINTB 32 005004 012604 MOV (SP)+,R4 ;RESTORE R4 33 005006 012603 MOV (SP)+,R3 ; AND R3 34 005010 110077 000674' SETCHR: MOVB R0,@SETPTR ;SET THE CHARACTER IN SEARCH/FILENAME BUFFER 35 005014 005267 000674' INC SETPTR ; THEN BUMP THE POINTER 36 005020 105077 000674' CLRB @SETPTR ; THEN ENSURE STRING IS ASCIZ 37 005024 RETURN ; AND EXIT BACK 005024 000207 RTS PC 38 39 005026 GLOBAL TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 47 SET SEARCH/FILENAME BUFFER TO CURRENT FILE SPECIFICATION 1 005026 010746 SETRA2: MOV PC,-(SP) ;DO THE BELOW TWICE... 2 005030 012400 SETRAD: MOV (R4)+,R0 ;GET RAD50 CODE TO CONVERT 3 005032 CALL SETSAV,R4 ;SAVE PARAM BLOCK PTR AND BUF PTR 005032 004467 177620 JSR R4,SETSAV 4 005036 012702 000050 MOV #50,R2 ;THE DIVISOR IS 50 (NATCH) 5 005042 10$: CALLX DIVD ;NOW DIVIDE 005042 004737 000000G JSR PC,@#DIVD 6 005046 010146 MOV R1,-(SP) ;SAVE THE REMAINDER 7 005050 005700 TST R0 ;IS ANSWER ZERO YET? 8 005052 001373 BNE 10$ ;NO, CONTINUE DIVIDING 9 005054 012600 20$: MOV (SP)+,R0 ;GET A RAD50 CODE (0<=CODE<=47) 10 005056 100702 BMI SETRET ;<0, 'SETSAV'S RETURN ADDRESS, SO RETURN 11 005060 001775 BEQ 20$ ;IGNORE CODE=0 (SPACES) 12 005062 020027 000033 CMP R0,#33 ;WHAT CODE IS IT? 13 005066 103412 BLO 40$ ;ALPHABETIC (1 TO 32) 14 005070 001407 BEQ 30$ ;"$" (33) 15 005072 062700 000022 ADD #'0-36,R0 ;"." (34), "?" (35), OR NUMERIC (36 TO 47) 16 005076 020027 000057 CMP R0,#'/ ;WAS THE CONVERSION REALLY TO "?"? 17 005102 001006 BNE 50$ ;NO, ALL O.K. 18 005104 012700 000066 MOV #'?-'$+33,R0 ;YES, SET CHARACTER TO "?" 19 005110 062700 177711 30$: ADD #'$-33-'A+1,R0 ;CONVERT TO "$" 20 005114 062700 000100 40$: ADD #'A-1,R0 ;CONVERT TO "A" TO "Z" 21 005120 50$: CALL SETCHR ;NOW SET THAT CHARACTER 005120 004767 177664 JSR PC,SETCHR 22 005124 000753 BR 20$ ; AND LOOP TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 48 SET SEARCH/FILENAME BUFFER TO CURRENT FILE SPECIFICATION 1 .ENABL LSB 2 3 005126 105075 000000G SETNAM: CLRB @FILBUF(R5) ;FORCE NULL STRING INITIALLY 4 005132 005713 TST (R3) ;OPEN NOW? 5 005134 001540 BEQ 60$ ;NOPE 6 005136 010304 MOV R3,R4 ;COPY THE PARAMETER BLOCK POINTER 7 005140 062704 000070 ADD #FQ+,R4 ;INDEX TO THE DEVICE NAME 8 005144 011346 MOV (R3),-(SP) ;SAVE FILE SWITCHES 9 005146 116316 000012 MOVB B2S.AP(R3),(SP) ; AND THE "&" POSITION VALUE (OUTPUT FILES) 10 005152 020327 001200 CMP R3,#OUPNOR ;REALLY AN OUTPUT FILE? 11 005156 001405 BEQ SETFEX ;YEP 12 005160 020327 001300 CMP R3,#OUPALT ;MIGHT BE?? 13 005164 001402 BEQ SETFEX ;IT IS... 14 005166 112716 000010 MOVB #B2SPOS,(SP) ;INPUT OR COMMAND, FORCE SAYING "/B2" 15 005172 010346 SETFEX: MOV R3,-(SP) ;SAVE PARM BLOCK POINTER 16 005174 016501 000000G MOV FILBUF(R5),R1 ;NOW GET FILENAME BUFFER POINTER 17 005200 005714 TST (R4) ;IS THERE A DEVICE NAME? 18 005202 001410 BEQ 20$ ;NO 19 005204 011421 MOV (R4),(R1)+ ;YES, SET THE DEVICE'S NAME 20 005206 016400 000002 MOV FQDEVN-FQDEV(R4),R0 ;DOES THE DEVICE HAVE A UNIT NUMBER? 21 005212 001402 BEQ 10$ ;NO EXPLICIT UNIT NUMBER 22 005214 CALL SETNUM ;EXPLICIT NUMBER, SO SET IT 005214 004767 177456 JSR PC,SETNUM 23 005220 112721 000072 10$: MOVB #':,(R1)+ ;NOW SET THE TRAILING ":" 24 005224 062704 177756 20$: ADD #FQPPN-FQDEV,R4 ;RE-INDEX TO PPN, NAME, EXT 25 005230 012400 MOV (R4)+,R0 ;GET THE PPN 26 005232 001414 BEQ 30$ ;NO PPN 27 005234 112721 000133 MOVB #'[,(R1)+ ;PPN EXISTS, SET LEADING "[" 28 005240 CALL SETNUB ;SWAP BYTES AND SET PROJECT NUMBER 005240 004767 177430 JSR PC,SETNUB 29 005244 112721 000054 MOVB #',,(R1)+ ;SET THE MIDDLE "," 30 005250 016400 177776 MOV FQPPN-FQNAM1(R4),R0 ;NOW GET THE PROGRAMMER NUMBER 31 005254 CALL SETNUM ; AND SET IT ALSO 005254 004767 177416 JSR PC,SETNUM 32 005260 112721 000135 MOVB #'],(R1)+ ;SET THE TRAILING "]" 33 34 005264 GLOBAL TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 49 SET SEARCH/FILENAME BUFFER TO CURRENT FILE SPECIFICATION 1 005264 005714 30$: TST (R4) ;ANY FILENAME? 2 005266 001417 BEQ 40$ ;NO, SKIP NAME.EXT AND PROT 3 005270 CALL SETRA2 ;SET FILENAME AS 2 WORDS OF RAD50 005270 004767 177532 JSR PC,SETRA2 4 005274 112721 000056 MOVB #'.,(R1)+ ;SET THE "." 5 005300 CALL SETRAD ;NOW SET THE EXTENSION 005300 004767 177524 JSR PC,SETRAD 6 005304 016400 000010 MOV FQPROT-1-(R4),R0 ;GET THE PROTECTION CODE 7 005310 001406 BEQ 40$ ;NONE 8 005312 112721 000074 MOVB #'<,(R1)+ ;ONE, SET LEADING "<" 9 005316 CALL SETNUB ;SWAP BYTES AND SET PROTECTION CODE 005316 004767 177352 JSR PC,SETNUB 10 005322 112721 000076 MOVB #'>,(R1)+ ;SET TRAILING ">" 11 005326 016600 000002 40$: MOV 2(SP),R0 ;GET SWITCHES AND "&" POSITION 12 005332 062700 010000 ADD #DO.MOD,R0 ; AND COMPLEMENT THE MODIFIER BIT 13 005336 .ASSUME 377 LT DO.MOD 14 005336 .ASSUME DO.FMT LT DO.MOD 15 005336 030027 010400 BIT R0,#DO.MOD!DO.FMT ;ANY SWITCHES? 16 005342 001425 BEQ 50$ ;NO 17 005344 112721 000057 MOVB #'/,(R1)+ ;GUESS AT "/B" 18 005350 112721 000102 MOVB #'B,(R1)+ ; FOR 8-BIT BINARY 19 005354 030027 000400 BIT R0,#DO.FMT ;GOOD GUESS? 20 005360 001416 BEQ 50$ ;YEP 21 005362 112721 000053 MOVB #'+,(R1)+ ;NOW GUESS AT "/B+" 22 005366 030027 010000 BIT R0,#DO.MOD ;GOOD GUESS? 23 005372 001011 BNE 50$ ;YEP 24 005374 112761 000062 177777 MOVB #'2,-1(R1) ;NOPE, CHANGE GUESS TO "/B2" 25 005402 120027 000010 CMPB R0,#B2SPOS ;IS THAT A GOOD GUESS? 26 005406 001403 BEQ 50$ ;YEP 27 005410 124141 CMPB -(R1),-(R1) ;NOPE, TAKE MOST OF IT BACK 28 005412 CALL SETNUM ;GO SET THE ACTUAL "&" POSITION VALUE 005412 004767 177260 JSR PC,SETNUM 29 005416 012603 50$: MOV (SP)+,R3 ;RESTORE PARM BLOCK POINTER 30 005420 005726 TST (SP)+ ; AND POP THE SWITCHES 31 005422 105011 CLRB (R1) ;FINALLY MARK END OF THE STRING 32 005424 020165 000000G CMP R1,FILBUF(R5) ;DID WE REALLY SET ANYTHING? 33 005430 001002 BNE 60$ ;YES, WE DID 34 005432 012711 MOV (PC)+,(R1) ;NO, SO ENSURE NON-NULL STRING ANYWAY 35 005434 040 000 .BYTE 40,0 36 005436 60$: RETURN ; AND EXIT 005436 000207 RTS PC 37 38 .DSABL LSB 39 40 005440 GLOBAL TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 50 DO "EN" WILD CARDING 1 .SBTTL DO "EN" WILD CARDING 2 3 .ENABL LSB 4 5 005440 10$: CALL EBGET ;GET BACK FIRQB DATA AGAIN 005440 004767 176332 JSR PC,EBGET 6 005444 016767 000420' 000410' MOV FIRQB+FQSIZ,FIRQB+FQPPN ;RE-SET THE WILD CARD PPN 7 005452 016767 000676' 000406' MOV ENSAV,FIRQB+FQERNO ;SET THE OCCURANCE INDEX 8 005460 112714 000031 MOVB #UU.PPN,(R4) ;FUNCTION IS WILD CARD PPN LOOKUP 9 005464 104066 .UUO ;SO GO DO IT 10 005466 CALL ERRCHK ;CHECK FOR ANY ERROR(S) 005466 004767 175714 JSR PC,ERRCHK 11 005472 016763 000410' 000046 MOV FIRQB+FQPPN,FQ+(R3) ;SAVE FOUND EXPLICIT PPN 12 005500 005267 000676' INC ENSAV ;BUMP PPN INDEX FOR NEXT OCCURANCE 13 005504 005063 000044 CLR FQ+(R3) ;RESET FILE OCCURANCE FOR FIRST FILE 14 005510 20$: CALL EBGET ;GET BACK FIRQB DATA 005510 004767 176262 JSR PC,EBGET 15 005514 026727 000410' 177777 CMP FIRQB+FQPPN,#-1 ;SPECIAL FIRST TIME FOR WILD PPN'S? 16 005522 001746 BEQ 10$ ;YES, GO DO THE WILD PPN LOOK UP FIRST 17 005524 112714 000022 MOVB #LOKFQ,(R4) ;ELSE SET FUNCTION AS LOOK UP 18 005530 104000 CALFIP ; AND TRY TO FIND IT 19 005532 CHKERR NOSUCH ;END OF OCCURANCES? 005532 122767 000000G 000402' CMPB #NOSUCH,IOSTS 20 005540 001003 BNE 30$ ;NO (OR OTHER ERROR), GO ERROR CHECK IT 21 005542 005767 000676' TST ENSAV ;YES, ARE WE WILDING PPN'S? 22 005546 100334 BPL 10$ ;YEP, SO GO DO SO 23 005550 30$: CALL ERRCHK ;CHECK FOR ANY ERROR(S) 005550 004767 175632 JSR PC,ERRCHK 24 005554 005263 000044 INC FQ+(R3) ;BUMP INDEX FOR NEXT OCCURANCE 25 005560 012704 000430 SETLOK: MOV #FIRQB+FQPROT-1,R4 ;POINT TO PROT FLAG BYTE 26 005564 112724 177777 MOVB #-1,(R4)+ ;SAY PROT CODE IS REAL AND 27 005570 116424 177771 MOVB FQSIZ+2-FQPROT(R4),(R4)+ ; SET THAT PROTECTION CODE 28 005574 012746 010000 MOV #DO.MOD,-(SP) ;INDICATE NO SWITCHES, ETC. 29 005600 000167 177366 JMP SETFEX ;SET THE RETURNED STRING NOW 30 31 005604 012703 000634 DOWILD: MOV #ENSAV-FQ,R3 ;GET FAKE PARM BLOCK FOR "EN" 32 005610 105775 000000G TSTB @FILBUF(R5) ;NULL STRING? 33 005614 001735 BEQ 20$ ;YES, GET NEXT OCCURANCE 34 005616 005067 000406' CLR FIRQB+FQERNO ;NO, SET INDEX FOR FIRST OCCURANCE 35 005622 016700 000410' MOV FIRQB+FQPPN,R0 ;GET PPN FOR WILDING CHECK 36 005626 010067 000420' MOV R0,FIRQB+FQSIZ ; AND RE-SAVE IT IN CASE WE'RE WILDING IT 37 005632 012767 177777 000676' MOV #-1,ENSAV ;GUESS AT NON-WILD PPN 38 005640 105200 INCB R0 ;IS IT OF THE FORM [X,*]? 39 005642 001403 BEQ 40$ ;YES, IT'S WILD 40 005644 062700 ADD (PC)+,R0 ;IS IT OF THE FORM [*,X]? 41 005646 000 001 .BYTE 0,1 42 005650 103005 BCC 50$ ;NO, NOT WILD AT ALL 43 005652 005167 000676' 40$: COM ENSAV ;SAY WILD CARDED PPN 44 005656 012767 177777 000410' MOV #-1,FIRQB+FQPPN ; AND SIGNAL THE FIRST TIME SPECIAL CASE 45 005664 50$: CALLR SAVFIL ;NOW SAVE THE FIRQB DATA AND EXIT 005664 000167 001220 JMP SAVFIL 46 47 .DSABL LSB 48 49 005670 GLOBAL TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 51 DO "EN" WILD CARDING 1 .ENABL LSB 2 3 005670 SENTRY INPSAV ;SAVE CURRENT INPUT STATUS 005670 004467 002740 JSR R4,SAVREG 4 005674 012703 001100 MOV #INPALT,R3 ;GET ALTERNATE INPUT POINTER 5 005700 010365 000000G 10$: MOV R3,INPNTR(R5) ;SET THE INPUT POINTER 6 005704 005065 000000G CLR EOFLAG(R5) ;GUESS AT NO END-OF-FILE 7 005710 032713 004000 BIT #ATEOF,(R3) ;AT END-OF-FILE? 8 005714 001402 BEQ 20$ ;NOPE 9 005716 005165 000000G COM EOFLAG(R5) ;YES, SET THE FLAG 10 005722 20$: CALLR SETNAM ;EXIT SETTING UP THE FILE'S NAME 005722 000167 177200 JMP SETNAM 11 12 005726 SENTRY OUTSAV ;SAVE CURRENT OUTPUT STATUS 005726 004467 002702 JSR R4,SAVREG 13 005732 012703 001300 MOV #OUPALT,R3 ;GET ALTERNATE OUTPUT POINTER 14 005736 010365 000000G 30$: MOV R3,OUPNTR(R5) ; AND SET THAT FOR OUTPUT 15 005742 000767 BR 20$ ;THEN EXIT SETTING UP FILE'S NAME 16 17 005744 SENTRY GETFLS ;GET FILES 005744 004467 002664 JSR R4,SAVREG 18 005750 CALL SCAN ;SCAN THE FILENAME 005750 004767 176236 JSR PC,SCAN 19 005754 026627 000002 177774 CMP R2OFF(SP),#'N-'R ;EN? 20 005762 001710 BEQ DOWILD ;YES, DO WILD CARDING 21 005764 005766 000002 TST R2OFF(SP) ;IS IT "EW"? 22 005770 003514 BLE 80$ ;NOT EW 23 005772 012703 001200 MOV #OUPNOR,R3 ;EW, GUESS AT SWITCH TO NORMAL 24 005776 105775 000000G TSTB @FILBUF(R5) ;IS IT THE NULL STRING? 25 006002 001755 BEQ 30$ ;YES, SWITCH TO NORMAL 26 27 006004 GLOBAL TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 52 TECOIO ROUTINE "GETFLS" 1 006004 CALL CHKOFO ;CHECK OUTPUT ALREADY OPEN, SAVE, ETC. 006004 004767 001042 JSR PC,CHKOFO 2 006010 105767 000426' TSTB FIRQB+FQFLAG ;IS IT DISK? 3 006014 001064 BNE 50$ ;NOPE 4 006016 .ASSUME DSKHND EQ 0 5 006016 012746 100200 MOV #100000!NSUPER,-(SP) ;YEP, STACK NO SUPERSEDE MODE 6 006022 046726 000424' BIC FIRQB+FQMODE,(SP)+ ;IS USER SAYING NO SUPERSEDE? 7 006026 001457 BEQ 50$ ;YES, GO TRY THE CREATE... 8 006030 026727 000416' 077430 CMP FIRQB+FQEXT,#^RTMP ;IS IT A .TMP FILE ALREADY? 9 006036 001453 BEQ 50$ ;DON'T BOTHER WITH .TMP FILES... 10 006040 012704 000406 MOV #FIRQB+FQERNO,R4 ;ELSE GET A FIRQB POINTER AND 11 006044 012714 177777 MOV #-1,(R4) ;SAY THIS WILL BE A SPECIFIC 12 006050 112744 000022 MOVB #LOKFQ,-(R4) ; FILE LOOKUP 13 006054 104000 CALFIP ;TRY TO FIND IT FIP 14 006056 CHKERR NOSUCH ;IS IT NON-EXISTENT NOW? 006056 122767 000000G 000402' CMPB #NOSUCH,IOSTS 15 006064 001435 BEQ 40$ ;YES, JUST CONTINUE AND TRY TO CREATE IT 16 006066 CALL ERRCHK ;OTHER, CHECK FOR MISCELLANEOUS ERRORS 006066 004767 175314 JSR PC,ERRCHK 17 006072 CALL SETLOK ;NO ERROR, SET THE EXISTENT NAME 006072 004767 177462 JSR PC,SETLOK 18 006076 010346 MOV R3,-(SP) ;SAVE THE PARM BLOCK POINTER 19 006100 CALLX CRLFNO ;CANCEL CONTROL/O AND RESTORE CARRIAGE 006100 004737 000000G JSR PC,@#CRLFNO 20 006104 MESAGE <'%Superseding existing file "'> ;ANNOUNCE 006104 004767 001136 JSR PC,ASCIC 006110 000077' .WORD $$$$$$ 000077 034 045 123 .ASCII <$$$$$$>'%Superseding existing file "' 21 006112 016503 000000G MOV FILBUF(R5),R3 ;POINT TO THE EXISTENT NAME 22 006116 CALL ASCIZ3 ; AND PRINT IT 006116 004767 001104 JSR PC,ASCIZ3 23 006122 MESAGE <'"'<15><12>> ; THEN RESTORE CARRIAGE 006122 004767 001120 JSR PC,ASCIC 006126 000134' .WORD $$$$$$ 000134 003 042 015 .ASCII <$$$$$$>'"'<15><12> 24 006130 012603 MOV (SP)+,R3 ;RESTORE PARM BLOCK POINTER 25 006132 CALL EBGET ;GET ORIGINAL DATA 006132 004767 175640 JSR PC,EBGET 26 006136 CALL SETFEQ ; AND (RE-)SET IT IN FILENAME BUFFER 006136 004767 176476 JSR PC,SETFEQ 27 006142 CALL EBGETT ;GET ORIGINAL DATA WITH .TMP FILE NAME 006142 004767 175660 JSR PC,EBGETT 28 006146 CALL DOOPEN ;DO THE OUTPUT OPEN (FUNCTION SET) 006146 004767 000332 JSR PC,DOOPEN 29 006152 052713 100000 BIS #DOREN,(R3) ; AND RENAME ON CLOSE 30 006156 RETURN ;NOW EXIT 006156 000207 RTS PC 31 32 006160 GLOBAL TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 53 TECOIO ROUTINE "GETFLS" 1 006160 052767 100200 000424' 40$: BIS #100000!NSUPER,FIRQB+FQMODE ;ENSURE NO SUPERSEDING 2 006166 50$: CALL CREFUN ;SET THE CORRECT CREATION FUNCTION 006166 004767 175770 JSR PC,CREFUN 3 006172 000544 BR DOOPEN ; AND GO DO THE CREATION 4 5 006174 012703 001000 60$: MOV #INPNOR,R3 ;GUESS AT SWITCH TO NORMAAL 6 006200 105775 000000G TSTB @FILBUF(R5) ;NULL STRING? 7 006204 001017 BNE 90$ ;NOPE 8 006206 000634 BR 10$ ;YES, DO THE SWITCH 9 10 006210 105775 000000G 70$: TSTB @FILBUF(R5) ;NULL FILE SPEC WITH "EI"? 11 006214 001017 BNE 100$ ;NO, SO DO IT 12 006216 CALLR INDCLS ;YES, JUST CLOSE INDIRECT AND EXIT 006216 000167 171702 JMP INDCLS 13 14 006222 012703 001400 80$: MOV #CMDPRM,R3 ;GUESS AT "EI" POINTER 15 006226 026627 000002 177767 CMP R2OFF(SP),#'I-'R ;IS IT "EI"? 16 006234 001765 BEQ 70$ ;YES, IT IS EI 17 006236 003356 BGT 60$ ;NO, IT IS ER 18 006240 CALL CHKFEB ;CHECK FOR EB ALLOWED, SAVE, ETC. 006240 004767 000570 JSR PC,CHKFEB 19 006244 016503 000000G 90$: MOV INPNTR(R5),R3 ;GET INPUT PARAMETERS 20 006250 005065 000000G CLR EOFLAG(R5) ;NOT END-OF-FILE IF NEW FILE 21 006254 005713 100$: TST (R3) ;OPEN NOW? 22 006256 001402 BEQ 110$ ;NO 23 006260 CALL CLOSER ;YES, CLOSE AND DEALLOCATE 006260 004767 175114 JSR PC,CLOSER 24 006264 026627 000002 177767 110$: CMP R2OFF(SP),#'I-'R ;IS IT "EI"? 25 006272 001016 BNE 130$ ;NO 26 006274 016746 000426' MOV FIRQB+FQFLAG,-(SP) ;YES, SAVE FLAGS 27 006300 104070 .CHAIN ; AND TRY A CHAIN 28 006302 005767 000426' TST FIRQB+FQFLAG ;FATAL TYPE ERROR? 29 006306 100406 BMI 120$ ;NOPE, SOFT, TRY A 'REAL' OPEN 30 006310 CHKERR NORTS ;IS ERROR WRONG RTS? 006310 122767 000000G 000402' CMPB #NORTS,IOSTS 31 006316 001402 BEQ 120$ ;YES, IGNORE THAT ERROR 32 006320 CALL ERRCHK ;BUT CHECK FOR OTHER ERROR(S) 006320 004767 175062 JSR PC,ERRCHK 33 006324 012667 000426' 120$: MOV (SP)+,FIRQB+FQFLAG ;RESTORE FLAGS 34 006330 012700 000002 130$: MOV #OPNFQ,R0 ;OPEN IS THE FUNCTION 35 006334 105767 000426' TSTB FIRQB+FQFLAG ;A DISK FILE? 36 006340 001003 BNE 140$ ;NOPE 37 006342 .ASSUME DSKHND EQ 0 38 006342 052767 120000 000424' BIS #100000!RONLY,FIRQB+FQMODE ;YEP, ENSURE AT LEAST READ-ONLY MODE 39 006350 140$: CALL DOOPEN ;SO DO IT 006350 004767 000130 JSR PC,DOOPEN 40 006354 CALL SETNAM ;SET THE REAL FILENAME 006354 004767 176546 JSR PC,SETNAM 41 42 006360 GLOBAL TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 54 TECOIO ROUTINE "GETFLS" 1 006360 026627 000002 177767 CMP R2OFF(SP),#'I-'R ;IS IT "EB", "EI", OR "ER"? 2 006366 003020 BGT 160$ ;IT IS "ER", ALL DONE 3 006370 001434 BEQ 170$ ;IT IS "EI", SET INDIRECT FLAG 4 006372 016300 000066 MOV FQ+(R3),R0 ;GET PROT CODE FROM INPUT FILE 5 006376 016503 000000G MOV OUPNTR(R5),R3 ;NOW GET OUTPUT PARAMETER POINTER 6 006402 005763 000066 TST FQ+(R3) ;SPECIFIC PROT CODE? 7 006406 001002 BNE 150$ ;YES, LEAVE IT ALONE 8 006410 010063 000066 MOV R0,FQ+(R3) ;NO, SET SET INPUT'S CODE 9 006414 150$: CALL EBGETT ;"EB", GET ORIGINAL AND .TMP NAME 006414 004767 175406 JSR PC,EBGETT 10 006420 CALL DOOPEN ;NOW DO THE CREATION (FUNCTION SET) 006420 004767 000060 JSR PC,DOOPEN 11 006424 052713 140000 BIS #DOREN+DOEB,(R3) ;SIGNAL THIS IS "EB" 12 006430 160$: RETURN ; AND EXIT 006430 000207 RTS PC 13 14 006432 012700 000002 EIDONE: MOV #OPNFQ,R0 ;SAY THIS WAS AN OPEN 15 006436 012702 010000 MOV #DO.MOD,R2 ;SET NORMAL ASCII MODE FLAGS 16 006442 012703 001400 MOV #CMDPRM,R3 ;USE THE INDIRECT FILE PARAMETER BLOCK 17 006446 012704 000406 MOV #FIRQB+FQFIL,R4 ;GET A FIRQB POINTER 18 006452 CALL EIOPEN ;NOW FINISH UP THIS OPEN 006452 004767 000100 JSR PC,EIOPEN 19 006456 CALL SETNAM ;SET THE REAL FILENAME 006456 004767 176444 JSR PC,SETNAM 20 006462 010365 000000G 170$: MOV R3,INDIR(R5) ;SET THE INDIRECT PARM BLOCK PTR 21 006466 105063 000036 CLRB F$BKSZ(R3) ;INDICATE NO PRE-FETCHED BYTE 22 006472 RETURN ; THEN EXIT 006472 000207 RTS PC 23 24 .DSABL LSB 25 26 006474 GLOBAL TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 55 DO THE ACTUAL FILE CREATE/OPEN 1 .SBTTL DO THE ACTUAL FILE CREATE/OPEN 2 3 .ENABL LSB 4 5 006474 112744 000020 10$: MOVB #RSTFQ,-(R4) ;SET FUNCTION TO RESET CHANNEL 6 006500 CALL FIPERC ;DO IT AND ERROR CHECK 006500 004767 174700 JSR PC,FIPERC 7 006504 012704 000405 DOOPEN: MOV #FIRQB+FQFUN,R4 ;GET THE FIRQB POINTER 8 006510 016402 000021 MOV FQFLAG-FQFUN(R4),R2 ;GET THE .BAS/.B2S/8-BIT INDICATORS 9 006514 110024 MOVB R0,(R4)+ ;SET THE FUNCTION 10 006516 010301 MOV R3,R1 ;COPY PARAMETER ADDRESS 11 006520 162701 177500 SUB #CMDPRM-<15.*PARMSZ>,R1 ;FIND THE OFFSET 12 006524 005000 CLR R0 ;CLEAR A HIGH ORDER AND 13 006526 071027 000040 DIV #PARMSZ/2,R0 ;DIVIDE FOR CHANNEL # TIMES 2 14 006532 010014 MOV R0,(R4) ;SET THAT CHANNEL NUMBER 15 006534 116400 177777 MOVB -1(R4),R0 ;RESTORE THE FUNCTION CODE 16 006540 104000 CALFIP ;NOW DO IT 17 006542 CHKERR NOTCLS ;IS ERROR "NOT CLOSED"? 006542 122767 000000G 000402' CMPB #NOTCLS,IOSTS 18 006550 001751 BEQ 10$ ;YES, RESET THAT CHANNEL FIRST THEN 19 006552 CALL ERRCHK ;NO, CHECK FOR OTHER ERROR(S) 006552 004767 174630 JSR PC,ERRCHK 20 21 .DSABL LSB 22 23 006556 016401 000020 EIOPEN: MOV FQFLAG-FQFIL(R4),R1 ;GET FLAGS INTO A REGISTER 24 006562 112764 177777 000022 MOVB #-1,FQPROT-1-FQFIL(R4) ;GUESS PROT CODE IS REAL (DISK ONLY) 25 006570 105701 TSTB R1 ;REALLY A DISK FILE? 26 006572 001402 BEQ 10$ ;YEP, LEAVE PROT CODE AS REAL 27 006574 .ASSUME DSKHND EQ 0 28 006574 005064 000022 CLR FQPROT-1-FQFIL(R4) ;NOPE, NO PROTECTION CODE 29 006600 120127 000002 10$: CMPB R1,#TTYHND ;IS IT A TERMINAL? 30 006604 001002 BNE 20$ ;NOPE 31 006606 012746 000312' MOV #OFFTER,-(SP) ;YEP, PLAY IT SAFE AND RE-OPEN OUR TERMINAL 32 006612 030127 000400 20$: BIT R1,#DDNFS ;NON-FILE STRUCTURED? 33 006616 001402 BEQ 30$ ;NO, FILE STRUCTURED 34 006620 005064 000002 CLR FQPPN-FQFIL(R4) ;ELSE SAY NO PPN 35 006624 042701 154777 30$: BIC #^C,R1 ;LEAVE ONLY THESE BITS 36 006630 042702 167377 BIC #^C,R2 ;ISOLATE THE .BAS/.B2S/8-BIT INDICATORS 37 006634 050102 BIS R1,R2 ; AND .OR. IT INTO OTHER BITS 38 006636 151402 BISB (R4),R2 ; AND .OR. IN THE CHANNEL NUMBER *2 39 006640 012701 002000 MOV #DDWLO,R1 ;GUESS AT AN OUTPUT FILE 40 006644 120027 000002 CMPB R0,#OPNFQ ;AN OPEN FOR INPUT? 41 006650 001003 BNE 40$ ;NO, MUST NOT BE WRITE LOCKED 42 006652 006201 ASR R1 ;YES, SO MUST NOT BE READ LOCKED 43 006654 .ASSUME DDRLO EQ DDWLO/2 44 006654 CALL SAVFIL ;SAVE THE FILE DATA IN PARM BLOCK 006654 004767 000230 JSR PC,SAVFIL 45 006660 40$: CALL GETATT ;READ ATTRIBUTES, SET I/O CALL ADDRESS 006660 004767 002354 JSR PC,GETATT 46 006664 030201 BIT R2,R1 ;WILL THIS WORK? 47 006666 001055 BNE ILLACS ;NO, ERROR TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 56 DO THE ACTUAL FILE CREATE/OPEN 1 006670 016400 000014 MOV FQBUFL-FQFIL(R4),R0 ;GET THE BUFFER SIZE 2 006674 005200 INC R0 ;NOW ROUND SIZE UP TO AN 3 006676 042700 000001 BIC #1,R0 ; EVEN NUMBER (I.E. WORDS) 4 006702 016501 000000G MOV QZ(R5),R1 ;GET CURRENT Q-REG SIZE-IN-USE 5 006706 060001 ADD R0,R1 ;UPDATE TO SIZE-TO-BE 6 006710 CALLX SIZEQR ;CALL "TECO"S SIZER FOR Q-REGS 006710 004737 000000G JSR PC,@#SIZEQR 7 006714 103040 BCC 100$ ;FAILED, SO ERROR 8 006716 160065 000000G SUB R0,QMAX(R5) ;ELSE TAKE THE SPACE AWAY AGAIN 9 006722 062703 000010 ADD #RC,R3 ;INDEX TO THE RESET COUNT 10 006726 010013 MOV R0,(R3) ;SET RESET COUNT TO THE BUFFER SIZE 11 006730 014304 MOV -(R3),R4 ;SAVE OLD RESET POINTER 12 006732 160013 SUB R0,(R3) ;THEN CORRECT RESET POINTER 13 006734 005043 CLR -(R3) ;CLEAR CURRENT POINTER 14 006736 005043 CLR -(R3) ;CLEAR CURRENT COUNT 15 006740 010243 MOV R2,-(R3) ;PUT FLAG BITS INTO PARM BLOCK 16 006742 010346 MOV R3,-(SP) ;SAVE THE PARAMETER BLOCK POINTER 17 006744 020327 001000 50$: CMP R3,#INPNOR ;ALL DONE? 18 006750 101410 BLOS 70$ ;YES 19 006752 162703 000072 SUB #PARMSZ-RP,R3 ;NO, SKIP TO THE RESET POINTER 20 006756 160013 SUB R0,(R3) ;CORRECT THE RESET POINTER 21 006760 005743 TST -(R3) ;VALID CURRENT POINTER? 22 006762 001401 BEQ 60$ ;NOPE 23 006764 160013 SUB R0,(R3) ;YES, SO CORRECT IT 24 006766 024343 60$: CMP -(R3),-(R3) ; AND INDEX BACK 25 006770 000765 BR 50$ ; LOOPING... 26 27 006772 016302 000006 70$: MOV RP(R3),R2 ;GET THE NEW BASE RESET POINTER 28 006776 010201 MOV R2,R1 ;COPY IT AND FIND 29 007000 060001 ADD R0,R1 ; THE OLD BASE RESET POINTER 30 007002 020104 80$: CMP R1,R4 ;DONE SHIFTING THE BUFFERS? 31 007004 103002 BHIS 90$ ;YES 32 007006 012122 MOV (R1)+,(R2)+ ;NO, MOVE 2 DATA BYTES 33 007010 000774 BR 80$ ; AND CONTINUE 34 35 007012 012603 90$: MOV (SP)+,R3 ;RESTORE PARAMETER BLOCK POINTER 36 007014 RETURN ; AND EXIT 007014 000207 RTS PC 37 38 007016 100$: JMPX $E$MEM ;SAY NOT ENOUGH MEMORY 007016 000137 000000G JMP @#$E$MEM 39 40 007022 GLOBAL TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 57 DO THE ACTUAL FILE CREATE/OPEN 1 007022 ILLACS: SETERR PRVIOL ;SET PROTECTION VIOLATION 007022 012767 000000G 000402' MOV #PRVIOL,IOSTS 2 007030 000167 174352 JMP ERRCHK ; AND DIE WITH THAT ERROR 3 4 .ENABL LSB 5 6 007034 105767 000426' CHKFEB: TSTB FIRQB+FQFLAG ;IT IS EB, IS IT A DISK FILE? 7 007040 001404 BEQ CHKOFO ;YES, O.K. FOR EB THEN 8 007042 .ASSUME DSKHND EQ 0 9 007042 126727 000426' 000004 CMPB FIRQB+FQFLAG,#DTAHND ;NO, IS IT DECTAPE THEN?? 10 007050 001364 BNE ILLACS ;NOT DECTAPE, SO ERROR 11 007052 016503 000000G CHKOFO: MOV OUPNTR(R5),R3 ;GET OUTPUT POINTER 12 007056 005713 TST (R3) ;OUTPUT ACTIVE? 13 007060 001026 BNE 20$ ;YES, ERROR 14 007062 005063 000014 CLR B2S.CP(R3) ;NO, CLEAR CURRENT POSITION 15 007066 016763 000422' 000012 MOV FIRQB+FQBUFL,B2S.AP(R3) ; AND SET DESIRED POSITION 16 007074 105767 000426' TSTB FIRQB+FQFLAG ;IS IT A DISK FILE? 17 007100 001003 BNE SAVFIL ;NOT DISK 18 007102 .ASSUME DSKHND EQ 0 19 007102 052767 100040 000424' BIS #100000!TENTAT,FIRQB+FQMODE ;DISK, USE TENTATIVE FILE MODE 20 007110 012704 000442 SAVFIL: MOV #FIRQB+FQBSIZ,R4 ;GET END OF FIRQB POINTER AND 21 007114 062703 000100 ADD #PARMSZ,R3 ;END OF PARM BLOCK ALSO 22 007120 014443 10$: MOV -(R4),-(R3) ;SAVE FIRQB DATA 23 007122 020427 000406 CMP R4,#FIRQB+FQFIL ;MORE? 24 007126 101374 BHI 10$ ;YES, LOOP 25 007130 162703 000044 SUB #FQ+,R3 ;NOW CORRECT PARM BLOCK POINTER 26 007134 RETURN ; AND EXIT 007134 000207 RTS PC 27 28 007136 20$: CALL SETNAM ;SET THE OLD NAME 007136 004767 175764 JSR PC,SETNAM 29 007142 ERR OFO,<"Output file already open"> 007142 004467 001542 JSR R4,ERR 007146 000140' .WORD $$$$$$ 000140 057277 .RAD50 /OFO/ 000142 117 165 164 .ASCIZ "Output file already open" 30 31 .DSABL LSB 32 33 007150 GLOBAL TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 58 DO THE ACTUAL FILE CREATE/OPEN 1 .ENABL LSB 2 3 007150 112400 10$: MOVB (R4)+,R0 ;GET NEXT CHARACTER OF REQUEST 4 007152 100011 BPL 20$ ;IT'S NOT AN 8-BIT CHARACTER, EXIT N=0 5 007154 006300 ASL R0 ;DOUBLE (NEGATIVE) CHARACTER FOR WORD ADDRESS 6 007156 016000 000400G MOV CNV8BT+400(R0),R0 ;FETCH CHARACTER'S CONVERSION TABLE ENTRY 7 007162 100405 BMI 20$ ;TO BE OUTPUT AS A HEX PAIR, EXIT N=1 8 007164 032765 010000 000000G BIT #ET$8BT,ETYPE(R5) ;IT TERMINAL AN 8-BIT TERMINAL? 9 007172 001001 BNE 20$ ;YEP, CALL THE CHARACTER NORMAL, EXIT N=0 10 007174 .ASSUME ET$8BT GE 0 11 007174 000270 SEN ;NOPE, NEED COMPOSE PAIR, EXIT N=1 12 007176 20$: RETURN ;EXIT WITH N-BIT DETERMINATION 007176 000207 RTS PC 13 14 007200 30$: ;MOV R3,-(SP) ;SAVE R3 (SAVED BY 'JSR R3,') 15 007200 010446 MOV R4,-(SP) ;SAVE R4 16 007202 010346 MOV R3,-(SP) ;STACK THE CO-ROUTINE RETURN ADDRESS 17 007204 016703 000666' MOV TTOBFE,R3 ;SET THE BUFFER POINTER 18 007210 110013 MOVB R0,(R3) ; TO THE CHARACTER 19 007212 012704 000001 MOV #1,R4 ;SET THE COUNT TO ONE CHARACTER 20 007216 CALL @(SP)+ ;CO-ROUTINE RETURN CALL BACK 007216 004736 JSR PC,@(SP)+ 21 007220 012604 40$: MOV (SP)+,R4 ;RESTORE R4 22 007222 012603 MOV (SP)+,R3 ; AND R3 23 007224 RETURN ; THEN FINAL RETURN 007224 000207 RTS PC 24 25 007226 010346 ASCIZ3: MOV R3,-(SP) ;SAVE R3 26 007230 010446 MOV R4,-(SP) ; AND R4 27 007232 010304 MOV R3,R4 ;COPY MESSAGE POINTER 28 007234 105724 50$: TSTB (R4)+ ;UP TO THE NULL BYTE TERMINATION? 29 007236 001376 BNE 50$ ;NOT YET... 30 007240 005304 DEC R4 ;BACK TO THAT NULL BYTE 31 007242 160304 SUB R3,R4 ; AND FIND THE DATA LENGTH 32 007244 000407 BR 60$ ;NOW GO PRINT IT 33 34 007246 010346 ASCIC: MOV R3,-(SP) ;SAVE R3 35 007250 017603 000002 MOV @2(SP),R3 ;GET POINTER TO COUNT, MESSAGE TEXT 36 007254 061766 000002 ADD (PC),2(SP) ;BUMP RETURN ADDRESS OVER ARGUMENT 37 007260 010446 MOV R4,-(SP) ;SAVE R4 38 007262 112304 MOVB (R3)+,R4 ;GET MESSAGE LENGTH, POINT TO MESSAGE TEXT 39 007264 012746 007220' 60$: MOV #40$,-(SP) ;SAVE RETURN TO RESTORE REGISTERS 40 007270 000413 BR 65$ ; THEN GO PRINT IT 41 42 007272 ENTRY TYPEB ;TYPE WATCHING ET$BIN (R0=CHAR) 43 007272 004367 177702 JSR R3,30$ ;SAVE R3 AND R4, FORM R3=PTR; R4=COUNT 44 007276 ENTRY PRINTB ;PRINT WATCHING ET$BIN (R3=PTR; R4=COUNT) 45 007276 016546 000000G MOV ETYPE(R5),-(SP) ;STACK EDIT TYPEOUT FLAGS 46 007302 006226 ASR (SP)+ ; AND PUT BINARY OUTPUT MODE INTO C-BIT 47 007304 .ASSUME ET$BIN EQ 1 48 007304 000405 BR 65$ ;NOW CONTINUE CHECKING C-BIT 49 50 007306 GLOBAL TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 59 TECOIO ROUTINE "PRINTB" 1 007306 062700 000060 TYPE0: ADD #'0,R0 ;MAKE BINARY DIGIT INTO ASCII DIGIT 2 007312 ENTRY TYPE ;TYPE (R0=CHAR) 3 007312 004367 177662 JSR R3,30$ ;SAVE R3 AND R4, FORM R3=PTR; R4=COUNT 4 007316 ENTRY PRINT ;PRINT (R3=PTR; R4=COUNT) 5 007316 000241 CLC ;NEVER USE BINARY OUTPUT MODE FOR THIS CALL 6 007320 010046 65$: MOV R0,-(SP) ;GET A WORKING REGISTER 7 007322 103470 BCS 140$ ;SKIP 8-BIT CHECKING IF BINARY MODE (C-BIT=1) 8 007324 010146 MOV R1,-(SP) ;GET ANOTHER WORKING REGISTER 9 007326 010346 MOV R3,-(SP) ;SAVE REQUEST POINTER 10 007330 010446 MOV R4,-(SP) ; AND REQUEST LENGTH 11 007332 001455 BEQ 120$ ;ZERO LENGTH, JUST GO EXIT... 12 007334 010401 MOV R4,R1 ;COPY REQUEST LENGTH TO HERE 13 007336 010304 MOV R3,R4 ; AND COPY REQUEST POINTER 14 007340 70$: CALL 10$ ;GET AND CHECK NEXT REQUEST CHARACTER 007340 004767 177604 JSR PC,10$ 15 007344 100045 BPL 110$ ;IT'S A NORMAL CHARACTER... 16 007346 005304 DEC R4 ;CORRECT POINTER FOR PRECEEDING SEGMENT 17 007350 CALL 130$ ;GO OUTPUT ANY PRECEEDING PART OF REQUEST 007350 004767 000122 JSR PC,130$ 18 007354 100444 BMI 120$ ;EXIT EARLY IF A CONTROL/C IS PENDING 19 007356 060304 ADD R3,R4 ;FORM POINTER BACK TO SPECIAL CHARACTER 20 007360 016767 000664' 000674' MOV TTOBFS,SETPTR ;INITIALIZE BUFFERED TERMINAL OUTPUT 21 007366 80$: CALL 10$ ;GET AND CHECK NEXT FOR BEING SPECIAL 007366 004767 177556 JSR PC,10$ 22 007372 100030 BPL 100$ ;NOT SPECIAL, GO BACK TO OUTER LOOP... 23 007374 012746 036076 MOV #'<*400+'>,-(SP) ;GUESS AT COMPOSE SEQUENCE PAIR 24 007400 010003 MOV R0,R3 ;SAVE THE CONVERSION TABLE ENTRY 25 007402 100004 BPL 90$ ;IT IS A COMPOSE SEQUENCE PAIR 26 007404 042703 100000 BIC #100000,R3 ;ELSE REMOVE THE HEX PAIR FLAG 27 007410 012716 055535 MOV #'[*400+'],(SP) ; AND SET HEX PAIR SIGNALS 28 007414 116600 000001 90$: MOVB 1(SP),R0 ;GET LEADING SIGNAL FOR THE PAIR 29 007420 CALL TYPEBF ; AND BUFFER IT 007420 004767 175322 JSR PC,TYPEBF 30 007424 010300 MOV R3,R0 ;GET THE CHARACTER PAIR 31 007426 CALL TYPEBF ; AND BUFFER FIRST PART 007426 004767 175314 JSR PC,TYPEBF 32 007432 000300 SWAB R0 ;SWITCH FOR SECOND PART 33 007434 CALL TYPEBF ; AND BUFFER IT TOO 007434 004767 175306 JSR PC,TYPEBF 34 007440 112600 MOVB (SP)+,R0 ;GET TRAILING SIGNAL FOR THE PAIR 35 007442 CALL TYPEBF ; AND BUFFER THAT 007442 004767 175300 JSR PC,TYPEBF 36 007446 010403 MOV R4,R3 ;SET THE OUTER LOOP BASE POINTER 37 007450 077132 SOB R1,80$ ;LOOP FOR ALL REMAINING IN INNER LOOP... 38 007452 005201 INC R1 ;NO MORE, CORRECT COUNT FOR 'SOB' BELOW 39 007454 100$: CALL TYPEBC ;DONE BUFFERING, FORCE ANY PARTIAL OUT 007454 004767 175276 JSR PC,TYPEBC 40 007460 077151 110$: SOB R1,70$ ;LOOP FOR ALL REMAINING IN REQUEST LENGTH... 41 007462 CALL 130$ ;GO OUTPUT THE FINAL REQUEST REMAINDER 007462 004767 000010 JSR PC,130$ 42 007466 012604 120$: MOV (SP)+,R4 ;RESTORE ORIGINAL REQUEST LENGTH 43 007470 012603 MOV (SP)+,R3 ; AND ORIGINAL REQUEST POINTER 44 007472 012601 MOV (SP)+,R1 ;RESTORE EXTRA WORKING REGISTER 45 007474 000434 BR 170$ ; AND GO EXIT TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 60 TECOIO ROUTINE "PRINT" 1 007476 160304 130$: SUB R3,R4 ;CALCULATE THIS SEGMENT'S LENGTH 2 007500 001433 BEQ 180$ ;LENGTH=0, NOTHING TO OUTPUT... 3 ;CLC ;C=0 FROM 'SUB' ABOVE 4 007502 010046 MOV R0,-(SP) ;GET A WORKING REGISTER 5 007504 012700 000456 140$: MOV #XRB+XRMOD,R0 ;ADDRESS THE XRB 6 007510 012710 010000 MOV #TO.BIN,(R0) ;XRMOD <- TO.BIN [BINARY MODE OUTPUT] 7 007514 103401 BCS SPCOUT ;BINARY MODE IS CORRECT IF C=1 8 007516 005010 CLR (R0) ;XRMOD <- 0 [NORMAL MODE OUTPUT] 9 007520 005040 SPCOUT: CLR -(R0) ;XRTIME <- 0 [WAIT FOREVER] 10 007522 005040 CLR -(R0) ;XRBLK <- 0 [SEQUENTIAL] 11 007524 005040 CLR -(R0) ;XRCI <- 0 [CHANNEL #0] 12 007526 010340 MOV R3,-(R0) ;XRLOC <- R3 [BUFFER POINTER] 13 007530 010440 MOV R4,-(R0) ;XRBC <- R4 [COUNT] 14 007532 001415 BEQ 170$ ;SKIP NULL REQUESTS 15 007534 010440 MOV R4,-(R0) ;XRLEN <- R4 [COUNT] 16 007536 032765 000020 000000G BIT #ET$CCO,ETYPE(R5) ;CANCEL OF CONTROL/O REQUESTED? 17 007544 001402 BEQ 160$ ;NO 18 007546 CALL NOCCO ;YES, SO DO IT 007546 004767 170450 JSR PC,NOCCO 19 007552 052765 000002 000000G 160$: BIS #2,OUTDNE(R5) ;INDICATE TERMINAL OUTPUT OCCURED (+2) 20 007560 104004 .WRITE ;OUTPUT TO TERMINAL 21 007562 CALL IOCHK ;CHECK FOR AN ERROR 007562 004767 170576 JSR PC,IOCHK 22 007566 012600 170$: MOV (SP)+,R0 ;RESTORE WORKING REGISTER 23 007570 005767 002512G 180$: TST TFLG+R5SET ;SET N-BIT=1 IF CONTROL/C IS PENDING 24 007574 190$: RETURN ; AND EXIT 007574 000207 RTS PC 25 26 007576 160304 200$: SUB R3,R4 ;FIND LENGTH OF THIS MESSAGE 27 007600 001246 BNE PRINT ;LENGTH<>0, SO GO REALLY PRINT 28 007602 000772 BR 180$ ;LENGTH=0, SO JUST EXIT 29 30 007604 GLOBAL TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 61 TECOIO ROUTINE "PRINT" 1 007604 ENTRY TYPEF ;TYPE WITH CASE FLAGGING (R0=CHAR) 2 007604 004367 177370 JSR R3,30$ ;SAVE R3 AND R4, FORM R3=PTR; R4=COUNT 3 007610 ENTRY PRINTF ;PRINT WITH CASE FLAGGING (R3=PTR; R4=COUNT) 4 007610 032765 000001 000000G BIT #ET$BIN,ETYPE(R5) ;BINARY MODE OUTPUT? 5 007616 001227 BNE PRINTB ;YES, SO DO IT IN BINARY MODE ALREADY... 6 007620 005765 000000G TST EUFLAG(R5) ;IS CASE FLAGGING DESIRED? 7 007624 100634 BMI PRINT ;NO 8 007626 CALL SAVREG,R4 ;YES, SAVE SOME REGISTERS 007626 004467 001002 JSR R4,SAVREG 9 007632 012701 000200 MOV #177+1,R1 ;GUESS AT L.C. FLAGGING (HIGH=177) 10 007636 005765 000000G TST EUFLAG(R5) ;GOOD GUESS? 11 007642 001402 BEQ 210$ ;YES, 0=>LOWER CASE FLAGGING 12 007644 012701 000140 MOV #137+1,R1 ;NO, >0=>UPPER CASE FLAGGING (HIGH=137) 13 007650 010402 210$: MOV R4,R2 ;MOVE COUNT INTO A SAFE SPOT 14 007652 010304 MOV R3,R4 ;MOVE PTR TO RUNNING PTR LOCATION 15 007654 010403 220$: MOV R4,R3 ;REMEMBER THE CURRENT (START) PTR 16 007656 005302 230$: DEC R2 ;MORE? 17 007660 100746 BMI 200$ ;NO, FINISH UP 18 007662 112400 MOVB (R4)+,R0 ;YES, SO GET A BYTE 19 007664 160100 SUB R1,R0 ;SUBTRACT (HIGH+1) AND 20 007666 062700 000040 ADD #177-140+1,R0 ; ADD (HIGH-LOW+1), C-BIT=1 IF IN RANGE 21 007672 103371 BCC 230$ ;OUT OF RANGE, CONTINUE SCANNING 22 007674 005304 DEC R4 ;IN RANGE, BACKUP PTR 23 007676 CALL 200$ ;NOW PRINT THE PREVIOUS PART 007676 004767 177674 JSR PC,200$ 24 007702 100734 BMI 190$ ;EXIT EARLY IF A CONTROL/C IS PENDING 25 007704 060304 ADD R3,R4 ;NOW CORRECT THE RUNNING POINTER 26 007706 016767 000664' 000674' MOV TTOBFS,SETPTR ;INITIALIZE BUFFERED TERMINAL OUTPUT 27 007714 012700 000047 240$: MOV #'',R0 ;SET "'" AS THE FLAGGING CHARACTER 28 007720 CALL TYPEBF ; AND BUFFER IT 007720 004767 175022 JSR PC,TYPEBF 29 007724 112400 MOVB (R4)+,R0 ;NOW GET THE REAL CHARACTER 30 007726 042700 000040 BIC #40,R0 ; AND FORCE IT TO UPPER CASE 31 007732 CALL TYPEBF ; THEN BUFFER IT 007732 004767 175010 JSR PC,TYPEBF 32 007736 005302 DEC R2 ;MORE TO GO? 33 007740 100405 BMI 250$ ;NOPE 34 007742 111400 MOVB (R4),R0 ;YEP, GET THE NEXT CHARACTER 35 007744 160100 SUB R1,R0 ;SUBTRACT (HIGH+1) AND 36 007746 062700 000040 ADD #177-140+1,R0 ; ADD (HIGH-LOW+1), C-BIT=1 IF IN RANGE 37 007752 103760 BCS 240$ ;MUST FLAG IT, LOOP IN BUFFERING 38 007754 250$: CALL TYPEBC ;DONE BUFFERING, FORCE ANY PARTIAL OUT 007754 004767 174776 JSR PC,TYPEBC 39 007760 005202 INC R2 ;CORRECT THE COUNTER 40 007762 000734 BR 220$ ; AND GO BACK TO NON-FLAGGED CHECKING 41 42 .DSABL LSB 43 44 007764 GLOBAL TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 62 TECOIO ROUTINE "PRINTF" 1 .ENABL LSB 2 3 007764 ENTRY TLISTN ;GET A CTRL/T CHARACTER 4 007764 016500 000000G MOV ETYPE(R5),R0 ;GET "ET" FLAGS AND ISOLATE 5 007770 042700 077727 BIC #^C,R0 ; CTRL/C, INPUT CHECK, & NO ECHO 6 007774 005200 INC R0 ;ENSURE NON-ZERO FOR SINGLE CHAR MODE 7 007776 .ASSUME ET$CC!ET$CKE!ET$NCH&1 EQ 0 8 007776 000431 BR 40$ ;NOW CONTINUE 9 10 010000 005723 10$: TST (R3)+ ;INDEX TO CURRENT COUNT IN PARAMETERS 11 010002 116346 000034 MOVB F$BKSZ-CC(R3),-(SP) ;SAVE THE PRE-FETCHED BYTE (IF ANY) 12 010006 CALL @CA-CC(R3) ;GET US THE NEXT BYTE 010006 004773 000014 JSR PC,@CA-CC(R3) 13 010012 103407 BCS 20$ ;NOT END-OF-FILE, PROCEED 14 010014 010246 MOV R2,-(SP) ;SAVE R2 HERE 15 010016 CALL INDCLS ;EOF, SO CLOSE OUT THE INDIRECT FILE 010016 004767 170102 JSR PC,INDCLS 16 010022 012602 MOV (SP)+,R2 ;RESTORE R2 HERE 17 010024 005165 000000G COM INDIR(R5) ;MARK THE INDIRECT FILE AS "FUNNY" 18 010030 005000 CLR R0 ;INDICATE NO PRE-FETCHED BYTE 19 010032 110063 000034 20$: MOVB R0,F$BKSZ-CC(R3) ;SAVE THE PRE-FETCHED BYTE 20 010036 112600 MOVB (SP)+,R0 ;RESTORE THE REAL DATA BYTE 21 010040 001415 BEQ 50$ ;NOTHING (OR NULL), SO LOOP 22 010042 000167 000562 JMP 210$ ; ELSE EXIT WITH IT 23 24 010046 104022 30$: .TTNCH ;TURN OFF THE ECHO 25 010050 000431 BR 90$ ; AND CONTINUE 26 27 010052 GLOBAL TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 63 TECOIO ROUTINE "TLISTN" 1 010052 ENTRY LISTEN ;GET A COMMAND CHARACTER 2 010052 005700 TST R0 ;SINGLE CHARACTER MODE? 3 010054 001402 BEQ 40$ ;NOPE, LEAVE A ZERO AS A FLAG 4 010056 012700 000001 MOV #1,R0 ;YEP, SET SINGLE MODE FLAG 5 010062 012746 010724' 40$: MOV #250$,-(SP) ;SET CARRY CHECKING RETURN ADDRESS 6 010066 CALL SAVREG,R4 ;SAVE REGS AND SET 'SPSAVE' 010066 004467 000542 JSR R4,SAVREG 7 010072 022626 CMP (SP)+,(SP)+ ; BUT FORGET CO-RETURN AND SAVED R2 8 ;MOV R0,(SP) ; LEAVING MODE FLAGS UP TOP 9 010074 016503 000000G 50$: MOV INDIR(R5),R3 ;GET COMMAND POINTER 10 010100 003337 BGT 10$ ;DO AS AN INDIRECT COMMAND FILE 11 010102 005065 000000G CLR INDIR(R5) ;ENSURE NO INDIRECT COMMAND FILE 12 010106 012703 000670 MOV #TTICNT,R3 ;GET COUNT POINTER 13 010112 005723 60$: TST (R3)+ ;ANYTHING THERE? 14 010114 001167 BNE 190$ ;YES, SO USE IT 15 010116 005716 70$: TST (SP) ;SINGLE CHARACTER MODE? 16 010120 001401 BEQ 80$ ;NOPE 17 010122 104024 .TTDDT ;YES, GO INTO DDT SUB-MODE 18 010124 031627 000010 80$: BIT (SP),#ET$NCH ;NO ECHO MODE? 19 010130 001346 BNE 30$ ;YES, SO TURN OFF THE ECHO 20 010132 104020 .TTECH ;NO, ENSURE ECHO IS ON 21 010134 012700 177777 90$: MOV #-1,R0 ;PRESET THE -1 RETURN VALUE 22 010140 CALL SETDET ;SET DETACHED FLAG IF WE ARE 010140 004767 170122 JSR PC,SETDET 23 010144 001066 BNE 140$ ;NOT DETACHED, CONTINUE 24 010146 031627 000040 BIT (SP),#ET$CKE ;RETURN -1 ON DETACH? 25 010152 001142 BNE 175$ ;YES, SO DO SO 26 010154 005000 CLR R0 ;NO, SET UP A NULL 27 010156 CALL TYPE ; AND WAIT FOR ATTACHMENT... 010156 004767 177130 JSR PC,TYPE 28 010162 100$: SETFQB OPNFQ ;NOW SETUP AN OPEN REQUEST 010162 004067 167666 JSR R0,SETFQB 010166 001000 .WORD OPNFQ*400 29 010170 012764 041113 000024 MOV #"KB,FQDEV-FQFIL(R4) ;DEVICE IS "KB:" 30 010176 012764 100002 000016 MOV #100000!TTTECO,FQMODE-FQFIL(R4) ; AND 'TECO' IS THE MODE 31 010204 032765 000400 000000G BIT #ET$TRU,ETYPE(R5) ;TRUNCATE LONG OUTPUT LINES?? 32 010212 001403 BEQ 110$ ;NOPE 33 010214 052764 000004 000016 BIS #TTCRLF,FQMODE-FQFIL(R4) ;YEP, SO DO SO 34 010222 032765 000002 000000G 110$: BIT #ET$CRT,ETYPE(R5) ;USE SCOPE RUBOUT MODE?? 35 010230 001403 BEQ 120$ ;NOPE 36 010232 052764 000200 000016 BIS #TTTECS,FQMODE-FQFIL(R4) ;YEP, SO USE IT 37 010240 005065 000000G 120$: CLR SEQCTL(R5) ;PRESUME NO ESCAPE SEQUENCE MODE 38 010244 005765 000000G TST EEFLAG(R5) ;USING A PRIVATE DELIMITER? 39 010250 001411 BEQ 125$ ;NO => WE DON'T WANT ESCAPE SEQUENCE MODE 40 010252 032765 000040 000000G BIT #ED$IMD,EDIT(R5);YES: IMMEDIATE_MODE_ALLOWED, TOO? 41 010260 001405 BEQ 125$ ;NO => WE DON'T WANT ESCAPE SEQUENCE MODE 42 010262 052764 000400 000016 BIS #TTESEQ,FQMODE-FQFIL(R4) ;YES: ASK FOR ESC SEQ MODE 43 010270 105165 000000G COMB SEQCTL(R5) ; AND RECORD "ESC SEQ MODE IN USE" 44 010274 125$: CALL OPNTER ;GO OFF AND DO THAT OPEN 010274 004767 170042 JSR PC,OPNTER 45 010300 151767 000663' BISB (PC),TEROPN ; AND SAY WE DID IT 46 010304 .ASSUME TEROPN&1 NE 0 47 010304 000704 BR 70$ ; THEN FROM THE TOP... 48 49 010306 GLOBAL TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 64 TECOIO ROUTINE "LISTEN" 1 010306 012700 000003 130$: MOV #'C-100,R0 ;SET CHARACTER AS CONTROL/C 2 010312 005716 TST (SP) ;SHOULD WE ABORT OR RETURN CONTROL/C? 3 010314 100545 BMI 210$ ;CTRL/T CALL, RETURN THE CONTROL/C 4 010316 .ASSUME ET$CC EQ 100000 5 010316 000167 170406 JMP CHKABT ;NORMAL CALL, CHECK FOR ABORT/RESTART 6 7 010322 012704 000442 140$: MOV #XRB,R4 ;GET XRB POINTER 8 010326 012724 000200 MOV #TTIBFL,(R4)+ ;XRLEN <- TTIBFL 9 010332 005024 CLR (R4)+ ;XRBC <- 0 10 010334 012714 000460 MOV #TTIBUF,(R4) ;XRLOC <- TTIBUF 11 010340 012413 MOV (R4)+,(R3) ;RESET THE INPUT BUFFER POINTER 12 010342 012724 000002 MOV #1*2,(R4)+ ;XRCI <- CHANNEL #1 13 010346 005024 CLR (R4)+ ;XRBLK <- 0 [SEQUENTIAL] 14 010350 005024 CLR (R4)+ ;XRTIME <- 0 [WAIT FOREVER] 15 010352 005014 CLR (R4) ;XRMOD <- 0 [NO MODIFIERS] 16 010354 031627 000040 BIT (SP),#ET$CKE ;CONDITIONAL INPUT MODE? 17 010360 001404 BEQ 150$ ;NO 18 010362 012714 020000 MOV #TI.CND,(R4) ;YES, SO SET THAT MODIFIER AND 19 010366 011464 177774 MOV (R4),XRBLK-XRMOD(R4) ; SET IT HERE ALSO 20 010372 031627 000010 150$: BIT (SP),#ET$NCH ;WILL WE BE DOING ECHOING? 21 010376 001003 BNE 160$ ;NO, SO NO TERMINAL OUTPUT WILL OCCUR 22 010400 052765 000002 000000G BIS #2,OUTDNE(R5) ;YES, INDICATE SOME TERMINAL OUTPUT DONE (+2) 23 010406 016504 000000G 160$: MOV ETYPE(R5),R4 ;SAVE STARTING CONTROL/C FLAG STATE 24 010412 104002 .READ ;GET THE INPUT 25 010414 046504 000000G TERINP: BIC ETYPE(R5),R4 ;DID CTRL/C FLAG STATE GO FROM 'ON' TO 'OFF'? 26 010420 100732 BMI 130$ ;YEP, A CONTROL/C TRAP OCCURED 27 010422 .ASSUME ET$CC EQ 100000 28 010422 CHKERR NOTOPN ;THE "NOT OPEN" ERROR? 010422 122767 000000G 000402' CMPB #NOTOPN,IOSTS 29 010430 001654 BEQ 100$ ;YES, SO OPEN IT ALREADY 30 010432 CHKERR EOF ;THE "END-OF-FILE" ERROR? 010432 122767 000000G 000402' CMPB #EOF,IOSTS 31 010440 001002 BNE 170$ ;NOPE 32 010442 CALL OFFTER ;YEP, NOT TECO MODE!, CLOSE FOR A RE-OPEN 010442 004767 167644 JSR PC,OFFTER 33 010446 031627 000040 170$: BIT (SP),#ET$CKE ;SPECIAL, POSSIBLE NO INPUT MODE? 34 010452 001403 BEQ 180$ ;NOPE 35 010454 105767 000402' TSTB IOSTS ;YEP, ANY ERROR THEN?? 36 010460 001063 175$: BNE 210$ ;RETURN A -1 ON ANY ERROR... 37 010462 180$: CALL IOCHK ;ELSE DIE ON ERROR(S) 010462 004767 167676 JSR PC,IOCHK 38 010466 016767 000444' 000670' MOV XRB+XRBC,TTICNT ;LOAD THE NEW INPUT COUNT 39 40 010474 GLOBAL TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 65 TECOIO ROUTINE "LISTEN" 1 010474 113300 190$: MOVB @(R3)+,R0 ;GET A CHARACTER 2 010476 005243 INC -(R3) ; AND BUMP POINTER 3 010500 005343 DEC -(R3) ;LESS 1 IN BUFFER 4 010502 105067 000400' CLRB KEY ;GOT SOMETHING, TURN OFF CTRL/C FLAG 5 010506 005700 TST R0 ;NULL? 6 010510 001600 195$: BEQ 60$ ;IGNORE NULLS 7 010512 031627 000010 BIT (SP),#ET$NCH ;ARE WE ECHOING (NEED TO CHECK SPECIALS)? 8 010516 001006 BNE 200$ ;NOT ECHOING, SO NO CHECKING NEEDED 9 010520 020027 000007 CMP R0,#007 ;BELL? 10 010524 001003 BNE 200$ ;NOPE 11 010526 MESAGE <"^G"> ;YEP, SO SPECIAL ECHO 010526 004767 176514 JSR PC,ASCIC 010532 000173' .WORD $$$$$$ 000173 002 136 107 .ASCII <$$$$$$>"^G" 12 010534 105765 000000G 200$: TSTB SEQCTL(R5) ;ESCAPE SEQUENCE MODE IN USE? 13 010540 001417 BEQ 205$ ;NO => CONTINUE 14 010542 105765 000001G TSTB SEQCTL+1(R5) ;YES: ARE WE WITHIN A SEQUENCE? 15 010546 001006 BNE 202$ ;YES => GO CHECK FOR SEQUENCE'S END 16 010550 120027 000200 CMPB R0,#200 ;NO: ARE WE ENTERING ONE, THEN? 17 010554 001011 BNE 205$ ;NO => JUST A NORMAL CHARACTER 18 010556 110065 000001G MOVB R0,SEQCTL+1(R5) ;YES: RECORD THAT WE'RE WITHIN ESC SEQUENCE 19 010562 000422 BR 210$ ;NOW GO DUMP SINGLE FLAG AND EXIT 20 21 010564 120027 000233 202$: CMPB R0,#233 ;IS THIS THE END OF OUR SEQUENCE? 22 010570 001017 BNE 210$ ;NO, STILL WITHIN IT => CONTINUE 23 010572 105065 000001G CLRB SEQCTL+1(R5) ;YES: SAY "NOT WITHIN ESCAPE SEQUENCE" NOW 24 ;SEZ ; [FOR HOPSCOTCH BRANCH] 25 010576 000744 BR 195$ ; GO EAT THE TERMINATOR 26 27 010600 032765 000004 000000G 205$: BIT #ET$LC,ETYPE(R5) ;CONVERT LC INTO UC? 28 010606 001010 BNE 210$ ;NO, DO NO CONVERSIONS 29 010610 020027 000141 CMP R0,#'A+40 ;YES, IS IT LC? 30 010614 103405 BLO 210$ ;NOT LOWER CASE 31 010616 020027 000172 CMP R0,#'Z+40 ;REALLY LC? 32 010622 101002 BHI 210$ ;NOT REALLY 33 010624 042700 000040 BIC #40,R0 ;YES, SO CONVERT IT TO UC 34 010630 005726 210$: TST (SP)+ ;DUMP SINGLE FLAG 35 010632 000417 BR 220$ ; AND EXIT 36 37 010634 GLOBAL TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 66 REGISTER SAVE/RESTORE SUBROUTINES 1 .SBTTL REGISTER SAVE/RESTORE SUBROUTINES 2 3 010634 SAVREG::;MOV R4,-(SP) ;R4 WAS SAVED BY THE 'JSR R4' 4 010634 010346 MOV R3,-(SP) ;SAVE R3 5 010636 010146 MOV R1,-(SP) ; AND R1 6 010640 010667 000056' MOV SP,SPSAVE ;IN CASE OF ERROR(S) 7 010644 010046 MOV R0,-(SP) ;SAVE R0 8 010646 010246 MOV R2,-(SP) ; AND R2 9 010650 016767 000664' 000674' MOV TTOBFS,SETPTR ;INITIALIZE BUFFERED TERMINAL OUTPUT 10 010656 010446 MOV R4,-(SP) ;STACK THE RETURN ADDRESS 11 010660 016604 000012 MOV 5*2(SP),R4 ;THEN RESTORE R4 TO ITS REAL VALUE 12 010664 CALL @(SP)+ ; AND EXIT (CO-ROUTINE WISE) 010664 004736 JSR PC,@(SP)+ 13 010666 012602 MOV (SP)+,R2 ;RESTORE R2 14 010670 012600 MOV (SP)+,R0 ; AND R0 15 010672 000241 220$: CLC ;INDICATE GOODNESS 16 010674 012601 230$: MOV (SP)+,R1 ;RESTORE R1 17 010676 012603 MOV (SP)+,R3 ; AND R3 18 010700 012604 MOV (SP)+,R4 ; AND R4 19 010702 012705 002512 MOV #R5SET,R5 ;ENSURE GOOD "TECO" DATA BASE POINTER 20 010706 240$: RETURN ;FINAL EXIT 010706 000207 RTS PC 21 22 000004 R0OFF == 2*2 ;OFFSET TO SAVED R0 23 000002 R2OFF = 1*2 ;OFFSET TO SAVED R2 24 25 010710 012402 ERR: MOV (R4)+,R2 ;GET POINTER TO DATA 26 010712 012200 MOV (R2)+,R0 ;R0=CODE, R2=POINTER TO TEXT 27 010714 000261 ERRIO: SEC ;INDICATE BADNESS 28 010716 016706 000056' MOV SPSAVE,SP ;RESTORE THE SP STACK 29 010722 000764 BR 230$ ;RESTORE R1,R3,R4 AND EXIT 30 31 010724 103370 250$: BCC 240$ ;NO ERROR, JUST EXIT 32 010726 JMPX IOERR ;ELSE SAY I/O ERROR 010726 000137 000000G JMP @#IOERR 33 34 .DSABL LSB TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 67 GET A BYTE SUBROUTINE 1 .SBTTL GET A BYTE SUBROUTINE 2 3 .ENABL LSB 4 5 010732 012704 000442 10$: MOV #XRB,R4 ;NO DATA, GET XRB POINTER 6 010736 022323 CMP (R3)+,(R3)+ ;ADVANCE TO THE RESET COUNT 7 010740 011324 MOV (R3),(R4)+ ;XRLEN <- RESET COUNT 8 010742 005024 CLR (R4)+ ;XRBC <- 0 9 010744 014324 MOV -(R3),(R4)+ ;XRLOC <- RESET POINTER 10 010746 116324 177772 MOVB FO-RP(R3),(R4)+ ;XRCI <- CHANNEL NUMBER * 2 11 010752 105024 CLRB (R4)+ ;XRCI+1 <- 0 (NEXT SEQUENTIAL) 12 010754 005024 CLR (R4)+ ;XRBLK <- 0 (NEXT SEQUENTIAL) 13 010756 005024 CLR (R4)+ ;XRTIME <- 0 (WAIT FOREVER) 14 010760 005024 CLR (R4)+ ;XRMOD <- 0 (NO MODIFIERS) 15 010762 104002 .READ ;NOW READ SOME DATA 16 010764 CHKERR EOF ;DID WE JUST GET END-OF-FILE? 010764 122767 000000G 000402' CMPB #EOF,IOSTS 17 010772 001426 BEQ 30$ ;YES, GO EXIT WITH C-BIT=0 18 010774 CALL ERRCHK ;ELSE CHECK FOR OTHER ERROR(S) 010774 004767 172406 JSR PC,ERRCHK 19 011000 011343 MOV (R3),-(R3) ;SET CURRENT POINTER TO RESET POINTER 20 011002 016743 000444' MOV XRB+XRBC,-(R3) ;SET CURRENT COUNT TO AMOUNT READ 21 011006 162763 000001 000030 SUB #1,F$HEOF+2-CC(R3) ;ONE LESS BLOCK 22 011014 105663 000026 SBCB F$HEOF-CC(R3) ; IN THE BLOCK COUNTER 23 011020 016363 000032 000024 MOV F$FFBY-CC(R3),F$HVBN+2-CC(R3) ;THEN RESET BYTE COUNTER 24 011026 005723 GETBYT: TST (R3)+ ;IS THERE DATA IN BUFFER? 25 011030 001740 BEQ 10$ ;NO, SO READ IN SOME MORE 26 011032 113300 MOVB @(R3)+,R0 ;PICKUP A CHARACTER 27 011034 005243 INC -(R3) ;BUMP THE CURRENT POINTER 28 011036 005343 DEC -(R3) ; AND DECREMENT THE CURRENT COUNT 29 011040 005363 000024 DEC F$HVBN+2-CC(R3) ;ONE LESS BYTE IN BLOCK 30 011044 000261 SEC ;DATA READ, SO EXIT WITH C-BIT=1 31 011046 20$: RETURN ;C-BIT=0 => EOF, ELSE REAL DATA 011046 000207 RTS PC 32 33 011050 024343 30$: CMP -(R3),-(R3) ;CORRECT POINTER BACK TO CURRENT COUNT 34 011052 005000 CLR R0 ;CLEAR RETURN CHARACTER TO NULL 35 011054 000774 BR 20$ ; THEN GO EXIT C=0 (FROM 'CLR' ABOVE) 36 37 .DSABL LSB TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 68 PUT A BYTE SUBROUTINE 1 .SBTTL PUT A BYTE SUBROUTINE 2 3 011056 005723 PUTBYT: TST (R3)+ ;ANY ROOM LEFT IN BUFFER? 4 011060 001006 BNE 10$ ;YES 5 011062 CALL PUTBLK ;NO, PUT OUT THE BUFFER 011062 004767 172230 JSR PC,PUTBLK 6 011066 022323 CMP (R3)+,(R3)+ ;ADVANCE TO THE RESET COUNT 7 011070 011363 177772 MOV (R3),CC-RC(R3) ;SET CURRENT COUNT TO RESET COUNT 8 011074 014343 MOV -(R3),-(R3) ;SET CURRENT POINTER TO RESET POINTER 9 011076 110233 10$: MOVB R2,@(R3)+ ;STORE INTO THE BUFFER 10 011100 005243 INC -(R3) ;BUMP THE CURRENT POINTER 11 011102 005343 DEC -(R3) ; AND DECREMENT THE CURRENT COUNT 12 011104 RETURN ;EXIT 011104 000207 RTS PC 13 14 .SBTTL END A BLOCK SUBROUTINE 15 16 011106 010246 ENDBLK: MOV R2,-(SP) ;SAVE R2 17 011110 005002 CLR R2 ;DO PADDING WITH NULLS 18 011112 126327 000016 000005 CMPB F$FORG-CC(R3),#R.AND ;ANSI FORMAT "D"? 19 011120 001002 BNE 10$ ;NO 20 011122 012702 000136 MOV #'^,R2 ;YES, DO PADDING WITH "^" FOR ANSI FORMAT "D" 21 011126 016346 000006 10$: MOV RC-CC(R3),-(SP) ;PAD THIS MANY (FORCES OUT 1 BLOCK) 22 011132 20$: CALL PUTBYT ;FILE THAT BUFFER 011132 004767 177720 JSR PC,PUTBYT 23 011136 005316 DEC (SP) ;MORE? 24 011140 003374 BGT 20$ ;LOOP UNTIL DONE... 25 011142 005726 TST (SP)+ ;ELSE DUMP THE COUNTER 26 011144 016313 000006 MOV RC-CC(R3),(R3) ;SET CURRENT COUNT TO RESET COUNT 27 011150 016363 000004 000002 MOV RP-CC(R3),CP-CC(R3) ; AND SET CURRENT POINTER TO RESET POINTER 28 011156 012602 MOV (SP)+,R2 ;RESTORE R2 29 011160 RETURN ; AND EXIT 011160 000207 RTS PC 30 31 .SBTTL SAVE/RESTORE FIRQB 32 33 011162 010346 SAVFQB::MOV R3,-(SP) ;SAVE R3 34 011164 010446 MOV R4,-(SP) ; AND R4 35 011166 012704 000442 MOV #FIRQB+FQBSIZ,R4 ;GET FIRQB END+1 POINTER 36 011172 014446 10$: MOV -(R4),-(SP) ;SAVE FIRQB DATA 37 011174 005014 CLR (R4) ; THEN CLEAR FIRQB 38 011176 020427 000406 CMP R4,#FIRQB+FQFIL ; IN A TIGHT 39 011202 101373 BHI 10$ ; LOOP 40 011204 010446 MOV R4,-(SP) ;SAVE POINTER FOR FIRQB RESTORE 41 011206 105044 CLRB -(R4) ; BUT LEAVE POINTER TO FIRQB @ FQFUN 42 011210 CALL @FQBSIZ-FQFIL+6(SP) ;NOW CALL OUR CALLER 011210 004776 000042 JSR PC,@FQBSIZ-FQFIL+6(SP) 43 011214 012666 000042 MOV (SP)+,FQBSIZ-FQFIL+6(SP) ;UPDATE FOR THE REAL RETURN ADDRESS 44 011220 012604 MOV (SP)+,R4 ;RESTORE FIRQB RESTORE POINTER 45 011222 012624 20$: MOV (SP)+,(R4)+ ;RESTORE FIRQB DATA 46 011224 020427 000442 CMP R4,#FIRQB+FQBSIZ ; IN A TIGHT 47 011230 103774 BLO 20$ ; LOOP 48 011232 012604 MOV (SP)+,R4 ;RESTORE R4 49 011234 012603 MOV (SP)+,R3 ; AND R3 50 011236 RETURN ;THEN EXIT 011236 000207 RTS PC TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 69 READ FILE ATTRIBUTES AND SET INPUT/OUTPUT CALL ADDRESS 1 .SBTTL READ FILE ATTRIBUTES AND SET INPUT/OUTPUT CALL ADDRESS 2 3 011240 010346 GETATT: MOV R3,-(SP) ;SAVE THE PARAMETER BLOCK POINTER 4 011242 062703 000016 ADD #CA,R3 ;INDEX TO INPUT/OUTPUT CALL ADDRESS 5 011246 012723 011026' MOV #GETBYT,(R3)+ ;GUESS AT NORMAL ASCII STREAM INPUT PROCESSING 6 011252 020127 002000 CMP R1,#DDWLO ;GOOD GUESS? 7 011256 001003 BNE 10$ ;YES 8 011260 012763 011056' 177776 MOV #PUTBYT,CA-F$FORG(R3) ;NO, CHANGE TO NORMAL BYTE OUTPUT 9 011266 .ASSUME F$FORG EQ CA+2 10 011266 012700 000011 10$: MOV #/2,R0 ;NUMBER OF ATTRIBUTE WORDS TO PRE-CLEAR 11 011272 .ASSUME F$MRS EQ FQ-2 12 011272 005023 20$: CLR (R3)+ ;CLEAR ATTRIBUTES 13 011274 077002 SOB R0,20$ ; UNTIL DONE... 14 011276 126727 000426' 000016 CMPB FIRQB+FQFLAG,#MTAHND ;MAGTAPE FILE? 15 011304 001055 BNE 40$ ;NOPE 16 011306 CALL SAVFQB ;SAVE AND CLEAR THE FIRQB 011306 004767 177650 JSR PC,SAVFQB 17 011312 012704 000442 MOV #XRB,R4 ;GET AN XRB POINTER 18 011316 012724 000007 MOV #7,(R4)+ ;SET "RETURN FILE CHARACTERISTICS" FUNCTION 19 011322 005024 CLR (R4)+ ; WITH NO 20 011324 005024 CLR (R4)+ ; ARGUMENTS 21 011326 110224 MOVB R2,(R4)+ ;SET CHANNEL # *2 22 011330 112724 000016 MOVB #MTAHND,(R4)+ ; AND HANDLER INDEX AS MAGTAPE 23 011334 104014 .SPEC ;NO READ THOSE CHARACTERISTICS 24 011336 105767 000402' TSTB IOSTS ;ANY ERROR? 25 011342 001110 BNE 70$ ;YES, FORGET IT 26 011344 016704 000444' MOV XRB+XRBC,R4 ;ELSE GET RETURNED CHARACTERISITCS WORD 27 011350 062703 177760 ADD #F$RSIZ-,R3 ;INDEX TO RECORD SIZE 28 011354 105163 000006 COMB F$HEOF-F$RSIZ(R3) ;ENSURE THAT THIS IS A "HUGE" FILE 29 011360 010413 MOV R4,(R3) ;STORE (MAXIMUM) RECORD SIZE 30 011362 042713 170000 BIC #^C<7777>,(R3) ; TRIMMING TO ONLY 12 BITS 31 011366 072427 177764 ASH #-12.,R4 ;NOW SHIFT TO PUT MODIFIER BITS IN <1-0> 32 011372 110443 MOVB R4,-(R3) ; AND STORE THEM IN F$RATT 33 011374 .ASSUME F$RATT EQ F$RSIZ-1 34 011374 142713 177774 BICB #^C<3>,(R3) ; TRIMMING TO ONLY 2 BITS 35 011400 .ASSUME FD.FTN EQ 1 36 011400 .ASSUME FD.CR EQ 2 37 011400 152713 000010 BISB #FD.BLK,(R3) ;RECORDS NEVER SPAN BLOCK BOUNDARIES 38 011404 072427 177776 ASH #-2,R4 ;NOW SHIFT TO PUT FORMAT BITS IN <1-0> 39 011410 110443 MOVB R4,-(R3) ; AND STORE THEM IN F$FORG 40 011412 .ASSUME F$FORG EQ F$RATT-1 41 011412 142713 177774 BICB #^C<3>,(R3) ; TRIMMING TO ONLY 2 BITS 42 011416 001462 BEQ 70$ ;FORMAT "U", SO NORMAL ASCII STREAM PROCESSING 43 011420 121327 000002 CMPB (R3),#2 ;WHAT FORMAT IS IT? 44 011424 103403 BLO 30$ ;FORMAT "F", SO ANSI FIXED LENGTH RECORDS 45 011426 101056 BHI 70$ ;FORMAT "S", FORGET IT 46 011430 112713 000006 MOVB #R.AND+1,(R3) ;FORMAT "D", SO SAY SO... 47 011434 105313 30$: DECB (R3) ;FORM CORRECT CODE 48 011436 .ASSUME R.ANF EQ 1-1 49 011436 000433 BR 60$ ; AND GO PROCESS IT TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 70 READ FILE ATTRIBUTES AND SET INPUT/OUTPUT CALL ADDRESS 1 011440 105767 000426' 40$: TSTB FIRQB+FQFLAG ;DISK FILE? 2 011444 001050 BNE 80$ ;NOPE 3 011446 .ASSUME DSKHND EQ 0 4 011446 CALL SAVFQB ;SAVE AND CLEAR THE FIRQB 011446 004767 177510 JSR PC,SAVFQB 5 011452 112724 177747 MOVB #UU.ATR,(R4)+ ;SET "READ ATTRIBUTES" FUNCTION 6 011456 110214 MOVB R2,(R4) ;SET CHANNEL # TIMES 2 7 011460 106214 ASRB (R4) ; AND MAKE IT TIMES 1 8 ;CLRB 1(R4) ;WE WANT TO READ ATTRIBUTES 9 011462 104066 .UUO ;SO DO THE READ ALREADY 10 011464 105767 000402' TSTB IOSTS ;AN ERROR? 11 011470 001035 BNE 70$ ;YES, FORGET IT 12 011472 012704 000432 MOV #FIRQB+6+,R4 ;ELSE POINT TO ATTRIBUTE END+2 13 011476 014443 50$: MOV -(R4),-(R3) ;SAVE ATTRIBUTES 14 011500 020427 000410 CMP R4,#FIRQB+6 ; IN A TIGHT 15 011504 101374 BHI 50$ ; LOOP 16 011506 105713 TSTB (R3) ;UNDEFINED RECORDS (OR NO ATTRIBUTES)? 17 011510 001425 BEQ 70$ ;YEP, SO NORMAL STREAM ASCII PROCESSING 18 011512 .ASSUME R.UDF EQ 0 19 011512 121327 000004 CMPB (R3),#R.STM ;FIXED, VARIABLE, VFC, OR STREAM? 20 011516 101022 BHI 70$ ;NONE OF THE ABOVE, SO NORMAL PROCESSING ALSO 21 011520 .ASSUME R.FIX LT R.STM 22 011520 .ASSUME R.VAR LT R.STM 23 011520 .ASSUME R.VFC LT R.STM 24 011520 001002 BNE 60$ ;IT'S FIXED, VARIABLE, OR VFC 25 011522 105063 000001 CLRB F$RATT-F$FORG(R3) ;IT'S STREAM, IGNORE THE RECORD ATTRIBUTES 26 011526 012743 013064' 60$: MOV #RMSOUT,-(R3) ;SET CALL ADDRESS FOR RMS OUTPUT PROCESSING 27 011532 .ASSUME CA EQ F$FORG-2 28 011532 020127 002000 CMP R1,#DDWLO ;IS IT REALLY READ? 29 011536 001412 BEQ 70$ ;NOPE, IT'S WRITE 30 011540 012713 011646' MOV #RMSREC,(R3) ;YEP, CHANGE TO RMS INPUT PROCESSING 31 011544 016363 000016 000010 MOV F$FFBY-CA(R3),F$HVBN+2-CA(R3) ;RESET BYTE COUNTER 32 011552 112763 000001 000013 MOVB #1,F$HEOF+1-CA(R3) ; AND SIGNAL FIRST TIME THROUGH 33 011560 012743 000012 MOV #012,-(R3) ;PRE-INDICATE WE ARE AT LEFT MARGIN 34 011564 .ASSUME B2S.CP EQ CA-2 35 011564 70$: CALL @(SP)+ ;RESTORE THE FIRQB DATA 011564 004736 JSR PC,@(SP)+ 36 011566 012603 80$: MOV (SP)+,R3 ;RESTORE PARAMETER BLOCK POINTER 37 011570 RETURN ; AND EXIT 011570 000207 RTS PC TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 71 RMS TYPE RECORD INPUT 1 .SBTTL RMS TYPE RECORD INPUT 2 3 .ENABL LSB 4 5 011572 105063 000027 10$: CLRB F$HEOF+1-CC(R3) ;ONLY DO THE FINAL ONCE... 6 011576 CALL 400$,R4,<012> ;RETURN , THEN WE'LL EXIT 011576 004467 001152 JSR R4,400$ 011602 000012 .WORD 012 7 011604 105763 000027 20$: TSTB F$HEOF+1-CC(R3) ;NEED A AT EOF? 8 011610 100770 BMI 10$ ;YES, GO DO THAT FINAL 9 011612 RETURN ;NO, EXIT C=0 (FROM 'TSTB') 011612 000207 RTS PC 10 11 011614 016363 000020 000022 30$: MOV F$RSIZ-CC(R3),F$HVBN-CC(R3) ;FIXED LENGTH, RESET COUNT 12 011622 132763 000010 000017 BITB #FD.BLK,F$RATT-CC(R3) ;CROSSING BLOCKS? 13 011630 001514 BEQ 90$ ;YES, SO JUST DO IT 14 011632 021363 000020 CMP (R3),F$RSIZ-CC(R3) ;NO, IS THERE ANOTHER RECORD IN THIS BLOCK? 15 011636 103111 BHIS 90$ ;STILL MORE, GO GET IT 16 011640 005713 TST (R3) ;NO MORE, BECAUSE BUFFER IS EMPTY?? 17 011642 001507 BEQ 90$ ;START FETCHING BYTES IF BUFFER NOW EMPTY 18 011644 005013 40$: CLR (R3) ;FORCE SOME PHYSICAL I/O 19 011646 105763 000016 RMSREC: TSTB F$FORG-CC(R3) ;ANSI FORMAT "F"? 20 011652 001411 BEQ 50$ ;YEP, O.K. TO BE ODD 21 011654 .ASSUME R.ANF EQ 0 22 011654 126327 000016 000004 CMPB F$FORG-CC(R3),#R.STM ;STREAM ASCII OR ANSI FORMAT "D"? 23 011662 103005 BHIS 50$ ;YEP, ODD SPOTS ARE ALL RIGHT... 24 011664 .ASSUME R.AND GT R.STM 25 011664 031327 000001 BIT (R3),#1 ;AT AN ODD SPOT? 26 011670 001402 BEQ 50$ ;NOPE 27 011672 CALL 430$ ;YEP, SO EVEN IT UP 011672 004767 001076 JSR PC,430$ 28 011676 116304 000026 50$: MOVB F$HEOF-CC(R3),R4 ;AT THE EOF 29 011702 056304 000030 BIS F$HEOF+2-CC(R3),R4 ; BLOCK? 30 011706 001003 BNE 60$ ;NOT YET 31 011710 005763 000024 TST F$HVBN+2-CC(R3) ;RIGHT BLOCK, AT EOF BYTE?? 32 011714 003733 BLE 20$ ;TRUE EOF, GO CHECK FOR NEEDING A FINAL 33 011716 126327 000016 000001 60$: CMPB F$FORG-CC(R3),#R.FIX ;FIXED LENGTH RECORDS? 34 011724 101733 BLOS 30$ ;YEP 35 011726 .ASSUME R.ANF LT R.FIX 36 011726 012763 000001 000022 MOV #1,F$HVBN-CC(R3) ;NOPE, GUESS AT A 1 BYTE "RECORD" 37 011734 126327 000016 000004 CMPB F$FORG-CC(R3),#R.STM ;STREAM ASCII OR ANSI FORMAT "D"? 38 011742 001447 BEQ 90$ ;STREAM ASCII, LEAVE RECORD SIZE AS 1 BYTE 39 011744 101015 BHI 70$ ;ANSI FORMAT "D" 40 011746 .ASSUME R.AND GT R.STM 41 011746 CALL 430$ ;VARIABLE OR VFC, GET LOW BYTE OF LENGTH 011746 004767 001022 JSR PC,430$ 42 011752 110063 000022 MOVB R0,F$HVBN-CC(R3) ;SET THAT LOW BYTE 43 011756 CALL 430$ ;GET HIGH BYTE OF LENGTH 011756 004767 001012 JSR PC,430$ 44 011762 110063 000023 MOVB R0,F$HVBN+1-CC(R3) ;SET THAT HIGH BYTE 45 011766 026327 000022 177777 CMP F$HVBN-CC(R3),#-1 ;CHECK FOR 'END-OF-BLOCK' 46 011774 001723 BEQ 40$ ;THAT IT IS, FORCE MORE I/O 47 011776 000431 BR 90$ ;ELSE PROCESS THE RECORD TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 72 RMS TYPE RECORD INPUT 1 012000 005063 000022 70$: CLR F$HVBN-CC(R3) ;PRE-CLEAR THE RECORD LENGTH 2 012004 012704 000004 MOV #4,R4 ; AND SET 4 DECIMAL BYTES TO BE READ 3 012010 80$: CALL 430$ ;GET A RECORD LENGTH BYTE 012010 004767 000760 JSR PC,430$ 4 012014 020027 000136 CMP R0,#'^ ;IS IT THE "^" PAD? 5 012020 001711 BEQ 40$ ;YES, SO FORCE SOME PHYSICAL I/O 6 012022 162700 000060 SUB #'0,R0 ;ELSE MAKE ASCII DIGIT INTO BINARY 7 012026 006363 000022 ASL F$HVBN-CC(R3) ;FORM OLD RECORD LENGTH *2 8 012032 066300 000022 ADD F$HVBN-CC(R3),R0 ; AND ADD IT INTO THE NEW DIGIT 9 012036 006363 000022 ASL F$HVBN-CC(R3) ;NOW OLD LENGTH *4 10 012042 006363 000022 ASL F$HVBN-CC(R3) ; THEN *8. 11 012046 060063 000022 ADD R0,F$HVBN-CC(R3) ;LENGTH = OLD*10. + NEW DIGIT 12 012052 077422 SOB R4,80$ ;LOOP FOR ALL DECIMAL BYTES 13 012054 162763 000004 000022 SUB #4,F$HVBN-CC(R3) ;NOW CORRECT FOR THE 4 DECIMAL BYTES 14 012062 126327 000016 000003 90$: CMPB F$FORG-CC(R3),#R.VFC ;VARIABLE WITH FIXED CONTROL? 15 012070 001027 BNE 120$ ;NOPE 16 012072 116304 000035 MOVB F$HDSZ-CC(R3),R4 ;YEP, GET THE FIXED BYTE SIZE 17 012076 001001 BNE 100$ ;A REAL SIZE WAS SPECIFIED 18 012100 005724 TST (R4)+ ;ELSE DEFAULT TO A SIZE OF 2 BYTES 19 012102 005063 000036 100$: CLR F$MRS-CC(R3) ;PRE-CLEAR THE SAVED CONTROL BYTES 20 012106 CALL 420$ ;GET FIRST FIXED CONTROL BYTE 012106 004767 000654 JSR PC,420$ 21 012112 100416 BMI 120$ ;NOT THERE??, SKIP FIXED CONTROL STUFF 22 012114 110063 000036 MOVB R0,F$MRS-CC(R3) ;ELSE STORE FIRST CONTROL BYTE 23 012120 005304 DEC R4 ;ANOTHER BYTE OF FIXED CONTROL? 24 012122 003412 BLE 120$ ;NOPE, ALL DONE WITH FIXED CONTROL BYTE(S) 25 012124 CALL 420$ ;GET SECOND FIXED CONTROL BYTE 012124 004767 000636 JSR PC,420$ 26 012130 100407 BMI 120$ ;NOT THERE??, SKIP FIXED CONTROL STUFF 27 012132 110063 000037 MOVB R0,F$MRS+1-CC(R3) ;ELSE STORE SECOND CONTROL BYTE 28 012136 005304 110$: DEC R4 ;ANOTHER BYTE OF FIXED CONTROL? 29 012140 003403 BLE 120$ ;NOPE, ALL DONE WITH FIXED CONTROL BYTE(S) 30 012142 CALL 420$ ;GET FURTHER FIXED CONTROL BYTE(S) 012142 004767 000620 JSR PC,420$ 31 012146 100373 BPL 110$ ;GOT ONE, LOOP THROUGH FIXED CONTROL JUNK... 32 012150 116304 000027 120$: MOVB F$HEOF+1-CC(R3),R4 ;SAVE THE FIRST TIME THROUGH FLAG 33 012154 105063 000027 CLRB F$HEOF+1-CC(R3) ;GUESS AT NO TRAILING (& NO ON EOF) TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 73 RMS TYPE RECORD INPUT 1 012160 132763 000001 000017 BITB #FD.FTN,F$RATT-CC(R3) ;FORTRAN CARRIAGE CONTROL? 2 012166 001447 BEQ 160$ ;NO 3 012170 CALL 420$ ;YES, GET FORTRAN CARRIAGE CONTROL CHARACTER 012170 004767 000572 JSR PC,420$ 4 012174 100514 BMI 220$ ;NOT THERE??, SAY IT'S "OTHER" 5 012176 005700 TST R0 ; => NOTHING LEADING OR TRAILING 6 012200 001521 BEQ 250$ ;IT IS , JUST PROCESS THAT DATA 7 012202 105163 000027 COMB F$HEOF+1-CC(R3) ;CHANGE TO WANTING A TRAILING 8 012206 020027 000044 CMP R0,#'$ ;$ => LEADING BUT NOTHING TRAILING 9 012212 001505 BEQ 220$ ;IT IS $, GO DO A THEN SAY NO TRAILER 10 012214 020027 000053 CMP R0,#'+ ;+ => NOTHING LEADING BUT A TRAILING 11 012220 001511 BEQ 250$ ;IT IS +, ALL SET, JUST PROCESS THE DATA 12 012222 020027 000061 CMP R0,#'1 ;1 => LEADING AND A TRAILING 13 012226 001416 BEQ 140$ ;IT IS 1, GO DO A 14 012230 105063 000027 CLRB F$HEOF+1-CC(R3) ;CHANGE BACK SO THE 'COMB' WILL SET THE FLAG 15 012234 020027 000060 CMP R0,#'0 ;0 => 2 LEADING 'S AND A TRAILING 16 012240 001072 BNE 220$ ;OTHER, DO LEADING AND TRAILING 17 012242 105704 TSTB R4 ;FIRST TIME THROUGH? 18 012244 003003 BGT 130$ ;YES, DO THEN 19 012246 CALL 400$,R4,<012> ;NO, DO THE 2ND HERE 012246 004467 000502 JSR R4,400$ 012252 000012 .WORD 012 20 012254 130$: CALL 400$,R4,<015> ;DO THE 012254 004467 000474 JSR R4,400$ 012260 000015 .WORD 015 21 012262 000463 BR 230$ ; THEN GO AND DO A 22 23 012264 105704 140$: TSTB R4 ;DID A TRIALING PRECEED THIS ? 24 012266 003003 BGT 150$ ;NOPE 25 012270 CALL 400$,R4,<012> ;YEP, DO A FOR FREE 012270 004467 000460 JSR R4,400$ 012274 000012 .WORD 012 26 012276 150$: CALL 400$,R4,<014> ;DO THAT LEADING 012276 004467 000452 JSR R4,400$ 012302 000014 .WORD 014 27 012304 000457 BR 250$ ; THEN PROCESS THE DATA TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 74 RMS TYPE RECORD INPUT 1 012306 132763 000004 000017 160$: BITB #FD.PRN,F$RATT-CC(R3) ;IS IT PRINT FILE FORMAT? 2 012314 001432 BEQ 210$ ;NO 3 012316 116300 000036 MOVB F$MRS-CC(R3),R0 ;YES, GET FIRST FIXED CONTROL BYTE ("PREFIX") 4 012322 110063 000027 MOVB R0,F$HEOF+1-CC(R3) ;CHECK OUT AND SAVE THE "PREFIX" 5 012326 003414 BLE 190$ ;NO "PREFIX" OR CONTROL CHARACTER "PREFIX" 6 012330 105704 TSTB R4 ;FIRST TIME THROUGH? 7 012332 003406 BLE 180$ ;NOPE 8 012334 105363 000027 170$: DECB F$HEOF+1-CC(R3) ;MORE TO DO AFTER THIS ? 9 012340 003414 BLE 200$ ;NO, DONE, GO DO THE "POSTFIX" 10 012342 CALL 400$,R4,<015> ;DO A 012342 004467 000406 JSR R4,400$ 012346 000015 .WORD 015 11 012350 180$: CALL 400$,R4,<012> ;DO A 012350 004467 000400 JSR R4,400$ 012354 000012 .WORD 012 12 012356 000766 BR 170$ ; AND LOOP... 13 14 012360 042700 177740 190$: BIC #^C<037>,R0 ;TRIM THE "PREFIX" CONTROL CHARACTER 15 012364 001402 BEQ 200$ ;NULL, DON'T USE IT... 16 012366 CALL 410$,R4 ;ELSE RETURN "PREFIX" CHARACTER 012366 004467 000364 JSR R4,410$ 17 012372 116363 000037 000027 200$: MOVB F$MRS+1-CC(R3),F$HEOF+1-CC(R3) ;SAVE THE "POSTFIX" FOR LATER 18 012400 000421 BR 250$ ;NOW GO FETCH THE DATA BYTE(S) 19 20 012402 132763 000002 000017 210$: BITB #FD.CR,F$RATT-CC(R3) ;IS IT REALLY IMPLIED LF,...,CR ? 21 012410 001415 BEQ 250$ ;NO, SO NO TRAILING => NO ON EOF 22 012412 005763 000022 TST F$HVBN-CC(R3) ;YES, NULL RECORD? 23 012416 001522 BEQ 350$ ;JUST IF NULL, SO GO DO IT 24 012420 105263 000027 INCB F$HEOF+1-CC(R3) ;ELSE SIGNAL TRAILING NEEDED 25 012424 000407 BR 250$ ; AND GO PROCESS THE DATA TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 75 RMS TYPE RECORD INPUT 1 012426 105704 220$: TSTB R4 ;IS THIS THE FIRST TIME THROUGH? 2 012430 003003 BGT 240$ ;FIRST TIME, DON'T DO ANY LEADING 3 012432 230$: CALL 400$,R4,<012> ;ELSE DO THAT LEADING RIGHT NOW 012432 004467 000316 JSR R4,400$ 012436 000012 .WORD 012 4 012440 105163 000027 240$: COMB F$HEOF+1-CC(R3) ;SET TRAILING => NEED ON EOF 5 012444 012763 012452' 000014 250$: MOV #260$,CA-CC(R3) ;SET NEXT CALLING ADDRESS FOR MORE DATA 6 012452 260$: CALL 420$ ;GET NEXT DATA BYTE IN RECORD 012452 004767 000310 JSR PC,420$ 7 012456 100510 BMI 360$ ;END-OF-RECORD, DO TRAILING STUFF 8 012460 132763 000004 000017 270$: BITB #FD.PRN,F$RATT-CC(R3) ;PRINT FILE FORMAT? 9 012466 001412 BEQ 290$ ;NOPE, SO NO SPECIAL FILTERING 10 012470 020027 000015 CMP R0,#015 ;WHAT KIND OF CHARACTER IS THIS? 11 012474 101005 BHI 280$ ;GREATER THAN IS NORMAL, NO LEFT MARGIN 12 012476 001412 BEQ 300$ ;, GO INDICATE AT LEFT MARGIN 13 012500 020027 000012 CMP R0,#012 ;IS IT , , OR ? 14 012504 101003 BHI 290$ ;IT'S OR , DON'T CHANGE INDICATOR 15 012506 001416 BEQ 320$ ;IT'S , CHECK FOR NEEDING LEADING 16 012510 111763 000013 280$: MOVB (PC),B2S.CP+1-CC(R3) ;SET NON-ZERO FOR NOT AT LEFT MARGIN 17 012514 .ASSUME B2S.CP+1-CC&377 NE 0 18 012514 110063 000012 290$: MOVB R0,B2S.CP-CC(R3) ;REMEMBER THE LAST CHARACTER RETURNED 19 012520 000261 SEC ;INDICATE REAL DATA WITH C=1 20 012522 RETURN ; AND EXIT W/ C=1 012522 000207 RTS PC 21 22 012524 105763 000013 300$: TSTB B2S.CP+1-CC(R3) ;HAVE , ALREADY AT LEFT MARGIN? 23 012530 001403 BEQ 310$ ;YES, IGNORE THIS (FOR NOW...) 24 012532 105063 000013 CLRB B2S.CP+1-CC(R3) ;INDICATE LEFT MARGIN FOR 25 012536 000766 BR 290$ ; AND GO EXIT WITH IT 26 27 012540 000173 000014 310$: JMP @CA-CC(R3) ;RE-DISPATCH TO IGNORE THE 28 29 012544 020063 000012 320$: CMP R0,B2S.CP-CC(R3) ;2 'S AT LEFT MARGIN? 30 012550 001361 BNE 290$ ;NOPE 31 012552 016363 000014 000010 MOV CA-CC(R3),B2S.AP-CC(R3) ;YEP, SAVE THE RE-CALL ADDRESS 32 012560 111763 000013 MOVB (PC),B2S.CP+1-CC(R3) ; AND FORCE THIS TO BE EMITTED 33 012564 .ASSUME B2S.CP+1-CC&377 NE 0 34 012564 CALL 400$,R4,<015> ;GO EMIT THE MISSING 012564 004467 000164 JSR R4,400$ 012570 000015 .WORD 015 35 012572 016363 000010 000014 MOV B2S.AP-CC(R3),CA-CC(R3) ;RESTORE THE RE-CALL ADDRESS 36 012600 012700 000012 MOV #012,R0 ; AND THE CHARACTER 37 012604 000743 BR 290$ ;NOW GO RETURN IT TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 76 RMS TYPE RECORD INPUT 1 012606 105063 000027 330$: CLRB F$HEOF+1-CC(R3) ;CLEAR THE TRAILING / INDICATOR 2 012612 132763 000004 000017 BITB #FD.PRN,F$RATT-CC(R3) ;IS IT PRINT FILE FORMAT? 3 012620 001014 BNE 340$ ;YES 4 012622 126327 000012 000012 CMPB B2S.CP-CC(R3),#012 ;WAS LAST OF RECORD (OR ABOVE)? 5 012630 103410 BLO 340$ ;NO, DO TRAILING 6 012632 126327 000012 000014 CMPB B2S.CP-CC(R3),#014 ;WAS IT , , OR ? 7 012640 101443 BLOS 390$ ;ONE OF THE ABOVE, ADD NOTHING 8 012642 126327 000012 000033 CMPB B2S.CP-CC(R3),#033 ;WAS IT ? 9 012650 001437 BEQ 390$ ;YES, ADD NOTHING ALSO 10 012652 105700 340$: TSTB R0 ;CHECK OUT THE "POSTFIX" 11 012654 003422 BLE 370$ ;NO "POSTFIX" OR CONTROL CHARACTER "POSTFIX" 12 012656 105300 DECB R0 ;ELSE DECREMENT COUNT 13 012660 110063 000027 MOVB R0,F$HEOF+1-CC(R3) ; AND RE-STORE IT AS A "POSTFIX" 14 012664 350$: CALL 400$,R4,<015> ;DO A 012664 004467 000064 JSR R4,400$ 012670 000015 .WORD 015 15 012672 CALL 400$,R4,<012> ;DO A 012672 004467 000056 JSR R4,400$ 012676 000012 .WORD 012 16 012700 116300 000027 360$: MOVB F$HEOF+1-CC(R3),R0 ;GET THE TRAILER ("POSTFIX") INDICATOR 17 012704 001421 BEQ 390$ ;NULL, DO NOTHING, LOOP FOR NEXT RECORD 18 012706 132763 000006 000017 BITB #FD.PRN!FD.CR,F$RATT-CC(R3) ;IS IT PRINT FILE OR /? 19 012714 001334 BNE 330$ ;YES 20 012716 012700 000015 MOV #015,R0 ;NO, RETURN A 21 012722 042700 177740 370$: BIC #^C<037>,R0 ;TRIM THE "POSTFIX" CONTROL CHARACTER 22 012726 001410 BEQ 390$ ;NULL, DON'T USE IT... 23 012730 020027 000015 CMP R0,#015 ;IS THE "POSTFIX" A ? 24 012734 001003 BNE 380$ ;NOPE 25 012736 112763 177777 000027 MOVB #-1,F$HEOF+1-CC(R3) ;YEP, INDICATE NEEDED ON EOF 26 012744 380$: CALL 410$,R4 ;ELSE RETURN "POSTFIX" CHARACTER 012744 004467 000006 JSR R4,410$ 27 012750 000167 176672 390$: JMP RMSREC ; THEN DO THE NEXT RECORD 28 29 012754 012400 400$: MOV (R4)+,R0 ;PUT CHARACTER INTO R0 30 012756 010463 000014 410$: MOV R4,CA-CC(R3) ;NOW SET THE NEXT CALLING ADDRESS 31 012762 012604 MOV (SP)+,R4 ;RESTORE THE SAVED R4 32 012764 000635 BR 270$ ; AND EXIT WITH C=1 FOR VALID CHARACTER TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 77 RMS TYPE RECORD INPUT 1 012766 005363 000022 420$: DEC F$HVBN-CC(R3) ;MORE DATA IN RECORD? 2 012772 100431 BMI 470$ ;NOPE, EXIT WITH N=1 3 012774 010446 430$: MOV R4,-(SP) ;SAVE R4 4 012776 CALL GETBYT ;TRY TO GET THE NEXT BYTE 012776 004767 176024 JSR PC,GETBYT 5 013002 012604 MOV (SP)+,R4 ;RESTORE R4 6 013004 000250 CLN ;SET N=0 LEAVING C-BIT FROM CALL 7 013006 103423 BCS 470$ ;NOT EOF, EXIT WITH N=0 8 013010 012716 011604' MOV #20$,(SP) ;EOF, GUESS AT MAGTAPE END-OF-FILE (O.K.) 9 013014 105763 000016 TSTB F$FORG-CC(R3) ;ANSI FORMAT "F"? 10 013020 001006 BNE 440$ ;NOPE 11 013022 .ASSUME R.ANF EQ 0 12 013022 005263 000022 INC F$HVBN-CC(R3) ;UNDO THE COUNTING WE DID ABOVE 13 013026 166363 000020 000022 SUB F$RSIZ-CC(R3),F$HVBN-CC(R3) ;STARTING A NEW RECORD? 14 013034 000404 BR 450$ ;GO CHECK IT OUT... 15 16 013036 126327 000016 000005 440$: CMPB F$FORG-CC(R3),#R.AND ;ANSI FORMAT "D"? 17 013044 001003 BNE 460$ ;NOPE 18 013046 005763 000022 450$: TST F$HVBN-CC(R3) ;WERE WE STARTING A NEW RECORD? 19 013052 001401 BEQ 470$ ;YES, EOF O.K. (C=0 FROM 'BEQ') 20 013054 005726 460$: TST (SP)+ ;ILLEGAL EOF, POP INTERMEDIATE RETURN & C=0 21 013056 470$: RETURN ;TO CALLER N=1=>EOR; TO CALLER'S CALLER W/ C=0 013056 000207 RTS PC 22 23 .DSABL LSB TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 78 RMS TYPE RECORD OUTPUT 1 .SBTTL RMS TYPE RECORD OUTPUT 2 3 .ENABL LSB 4 5 013060 10$: CALL ENDREC ;END THE TOO LONG RECORD AND RE-TRY... 013060 004767 000270 JSR PC,ENDREC 6 013064 021327 000006 RMSOUT: CMP (R3),#6 ;ANY ROOM LEFT FOR ANOTHER RECORD? 7 013070 103002 BHIS 20$ ;YES 8 013072 CALL ENDBLK ;NO, SO END THIS BLOCK 013072 004767 176010 JSR PC,ENDBLK 9 013076 010246 20$: MOV R2,-(SP) ;SAVE THE CALLING CHARACTER 10 013100 005002 CLR R2 ;SET INTO SIZE BYTES INITIALLY 11 013102 CALL 40$ ;PRE-SET 013102 004767 000034 JSR PC,40$ 12 013106 CALL 40$ ; 4 013106 004767 000030 JSR PC,40$ 13 013112 CALL 40$ ; SIZE 013112 004767 000024 JSR PC,40$ 14 013116 CALL 40$ ; BYTES 013116 004767 000020 JSR PC,40$ 15 013122 012602 MOV (SP)+,R2 ;RESTORE THE ORIGINAL CHARACTER 16 013124 012763 013132' 000014 MOV #30$,CA-CC(R3) ;SAY DOING A RECORD NOW 17 013132 026363 000036 000006 30$: CMP F$MRS-CC(R3),RC-CC(R3) ;IS THIS RECORD TOO LONG? 18 013140 103347 BHIS 10$ ;FILLS A WHOLE BUFFER, TOO LONG!!! 19 013142 40$: CALL 110$,R0 ;CO-ROUTINE SAVE OF R0, R1, AND R2 013142 004067 000262 JSR R0,110$ 20 013146 005723 TST (R3)+ ;ROOM LEFT IN THE BUFFER? 21 013150 001037 BNE 70$ ;YES 22 013152 016304 000034 MOV F$MRS-CP(R3),R4 ;NO, GET CURRENT RECORD'S SIZE 23 013156 005204 INC R4 ;ROUND IT UP 24 013160 042704 000001 BIC #1,R4 ; TO A WORD AMOUNT 25 013164 016501 000000G MOV QZ(R5),R1 ;GET CURRENT SIZE OF Q-REG'S 26 013170 060401 ADD R4,R1 ; AND FORM A TOTAL DESIRED SIZE 27 013172 CALLX SIZEQR ;TRY TO GET THAT MUCH 013172 004737 000000G JSR PC,@#SIZEQR 28 013176 103112 BCC 100$ ;FAILED, WE MUST DIE... 29 013200 016501 000000G MOV QRSTOR(R5),R1 ;GET START OF Q-REG AREA 30 013204 066501 000000G ADD QZ(R5),R1 ; AND GO PAST THE ACTIVE STUFF 31 013210 016304 000034 MOV F$MRS-CP(R3),R4 ;GET CURRENT RECORD'S SIZE AGAIN 32 013214 011300 MOV (R3),R0 ;GET THE CURRENT POINTER 33 013216 160413 SUB R4,(R3) ;NOW BACK UP CURRENT POINTER 34 013220 060443 ADD R4,-(R3) ; AND UPDATE THE CURRENT COUNT 35 013222 114021 50$: MOVB -(R0),(R1)+ ;MOVE FROM ACTIVE RECORD TO HOLDING AREA 36 013224 077402 SOB R4,50$ ; FOR THE RECORD'S WHOLE SIZE 37 013226 CALL ENDBLK ;NOW WE CAN END THIS BLOCK 013226 004767 175654 JSR PC,ENDBLK 38 013232 016304 000036 MOV F$MRS-CC(R3),R4 ;GET RECORD'S SIZE ONCE MORE 39 013236 160423 SUB R4,(R3)+ ;UPDATE THE NEW BLOCK'S CURRENT COUNT 40 013240 011300 MOV (R3),R0 ;GET THE START OF BLOCK POINTER 41 013242 060413 ADD R4,(R3) ; THEN UPDATE IT ALSO 42 013244 114120 60$: MOVB -(R1),(R0)+ ;MOVE FROM HOLDING AREA TO NEW ACTIVE RECORD 43 013246 077402 SOB R4,60$ ; FOR THE RECORD'S WHOLE SIZE... 44 45 013250 GLOBAL TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 79 RMS TYPE RECORD OUTPUT 1 013250 110233 70$: MOVB R2,@(R3)+ ;STORE THE CHARACTER 2 013252 005243 INC -(R3) ;BUMP THE CURRENT POINTER 3 013254 005343 DEC -(R3) ; AND THE CURRENT COUNT 4 013256 005263 000036 INC F$MRS-CC(R3) ;ONE MORE CHARACTER IN THIS RECORD 5 013262 020227 000033 CMP R2,#033 ;END OF THE RECORD? 6 013266 001427 BEQ 80$ ;YEP, BUT NOT 7 013270 020227 000014 CMP R2,#014 ;OTHER END OF THE RECORD? 8 013274 101052 BHI 90$ ;NOPE, EXIT 9 013276 020227 000012 CMP R2,#012 ;MIGHT BE, CHECK FOR TERMINATION 10 013302 101021 BHI 80$ ;TERMINATED, BUT NOT 11 013304 103446 BLO 90$ ;NOT TERMINATED, EXIT 12 013306 012700 000002 MOV #2,R0 ;GET A HANDY CONSTANT 13 013312 026300 000036 CMP F$MRS-CC(R3),R0 ;IS THERE A PREVIOUS TO THE ? 14 013316 103413 BLO 80$ ;NOPE, SO DON'T REMOVE ANYTHING 15 013320 016304 000002 MOV CP-CC(R3),R4 ;GET THE CURRENT BUFFER POINTER 16 013324 126427 177776 000015 CMPB -2(R4),#015 ;WAS THE PREVIOUS TO A ? 17 013332 001005 BNE 80$ ;NOPE 18 013334 060013 ADD R0,(R3) ;YEP, SO DELETE THE 19 013336 160063 000002 SUB R0,CP-CC(R3) ; FROM THE BUFFER 20 013342 160063 000036 SUB R0,F$MRS-CC(R3) ; AND DON'T COUNT THEM IN THE RECORD 21 013346 012763 013064' 000014 80$: MOV #RMSOUT,CA-CC(R3) ;WE'LL START A NEW RECORD THE NEXT TIME 22 013354 ENDREC: CALL 110$,R0 ;CO-ROUTINE SAVE OF R0, R1, AND R2 013354 004067 000050 JSR R0,110$ 23 013360 016301 000036 MOV F$MRS-CC(R3),R1 ;GET CURRENT RECORD SIZE 24 013364 001416 BEQ 90$ ;NO ACTIVE RECORD, SKIP IT 25 013366 005063 000036 CLR F$MRS-CC(R3) ;CLEAR SIZE SINCE WE'RE FINISHING THIS RECORD 26 013372 016304 000002 MOV CP-CC(R3),R4 ;GET THE CURRENT POINTER 27 013376 160104 SUB R1,R4 ; AND BACK UP TO START OF RECORD 28 013400 012702 013446' MOV #120$,R2 ;GET A POINTER TO THE DIVISOR LIST 29 013404 010746 MOV PC,-(SP) ;DO THE CODE BELOW 30 013406 010746 MOV PC,-(SP) ; 4 TIMES... 31 013410 005000 CLR R0 ;CLEAR A HIGH ORDER 32 013412 071022 DIV (R2)+,R0 ; AND DIVIDE 33 013414 062700 000060 ADD #'0,R0 ;MAKE ANSWER A DECIMAL DIGIT 34 013420 110024 MOVB R0,(R4)+ ; AND STORE IT AWAY 35 013422 90$: RETURN ;EXIT OR LOOP... 013422 000207 RTS PC TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 80 RMS TYPE RECORD OUTPUT 1 013424 100$: JMPX $E$MEM ;SORRY, OUT OF MEMORY... 013424 000137 000000G JMP @#$E$MEM 2 3 013430 110$: ;MOV R0,-(SP) ;R0 WAS SAVED BY THE 'JSR R0,' 4 013430 010146 MOV R1,-(SP) ;SAVE R1 5 013432 010246 MOV R2,-(SP) ; AND R2 6 013434 CALL (R0) ;NOW CALL BACK OUR CALLER (R0 CLOBBERED) 013434 004710 JSR PC,(R0) 7 013436 012602 MOV (SP)+,R2 ;RESTORE R2 8 013440 012601 MOV (SP)+,R1 ; AND R1 9 013442 012600 MOV (SP)+,R0 ; AND R0 10 013444 RETURN ;FINAL EXIT 013444 000207 RTS PC 11 12 013446 001750 000144 000012 120$: .WORD 1000., 100., 10., 1. 013454 000001 13 14 .DSABL LSB TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 81 RMS TYPE RECORD OUTPUT 1 .ENABL LSB 2 3 013456 ENTRY SIZER ;GET ADDITIONAL MEMORY IF POSSIBLE 4 013456 010146 MOV R1,-(SP) ;SAVE ORIGINAL REQUEST AMOUNT 5 013460 010046 MOV R0,-(SP) ; AND SAVE R0 ALSO 6 013462 010446 MOV R4,-(SP) ; AND SAVE R4 ALSO 7 013464 062701 003777 ADD #SIZERB-1,R1 ;ROUND REQUEST AMOUNT TO THE 8 013470 042701 003777 BIC #SIZERB-1,R1 ; NEAREST K TO ADD 9 013474 010100 MOV R1,R0 ;COPY THE AMOUNT WE HOPE TO ADD 10 013476 000301 SWAB R1 ;MAKE BYTE AMOUNT INTO 11 013500 072127 177775 ASH #-11.+8.,R1 ; K AMOUNT WITHOUT SIGN EXTENSION 12 013504 116704 000662' MOVB CURSIZ,R4 ;NOW ADD CURRENT SIZE 13 013510 060401 ADD R4,R1 ; INTO THE NEW AMOUNT 14 013512 116704 000660' MOVB SVNENT,R4 ;GET LIMITING SIZE IF ANY 15 013516 001402 BEQ 10$ ;NO LIMITING SIZE, JUST TRY FOR IT 16 013520 020401 CMP R4,R1 ;A LIMIT, SO CHECK AGAINST REQUEST 17 013522 103455 BLO 40$ ;REQUEST TOO BIG, EXIT C=1 (BLO=BCS) 18 013524 010167 000442' 10$: MOV R1,XRB ;SET THAT AS THE REQUEST AMOUNT 19 013530 104006 .CORE ; AND ASK FOR IT 20 013532 105467 000402' NEGB IOSTS ;DID WE GET IT? 21 013536 103447 BCS 40$ ;NOPE (C=1 ONLY IF IOSTS<>0) 22 013540 110167 000662' MOVB R1,CURSIZ ;YEP, SO SET OUR NEW K SIZE 23 013544 012704 001406 MOV #CMDPRM+RP,R4 ;GET A PARAMETER BLOCK POINTER 24 013550 012401 MOV (R4)+,R1 ;FIND THE LAST RP VALUE 25 013552 061401 ADD (R4),R1 ; NOW HAVE OLD TOP OF MEMORY 26 013554 062704 000070 ADD #PARMSZ-RC,R4 ;POINT TO JUST BEYOND PARM BLOCK 27 013560 CALL SHUFLE ;SO SHUFFLE THE I/O BUFFERS 013560 004767 164214 JSR PC,SHUFLE 28 013564 CALL CHKDET ;CHECK FOR DETACHED 013564 004767 164470 JSR PC,CHKDET 29 013570 032765 000300 000000G BIT #ET$XIT!ET$DET,ETYPE(R5) ;SHOULD WE ANNOUNCE NEW SIZE? 30 013576 001026 BNE 30$ ;NOPE 31 32 013600 GLOBAL TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 82 TECOIO ROUTINE "SIZER" 1 013600 012700 000133 MOV #'[,R0 ;YEP, ANNOUNCE THE 2 013604 CALL TYPE ; NEW AMOUNT 013604 004767 173502 JSR PC,TYPE 3 013610 116701 000662' MOVB CURSIZ,R1 ;SET A LOW ORDER 4 013614 006301 ASL R1 ; DOUBLED FOR BYTES 5 013616 005000 CLR R0 ;CLEAR HIGH ORDER 6 013620 071027 000012 DIV #10.,R0 ; FOR A DIVIDE BY 10. 7 013624 001402 BEQ 20$ ;NO TENS 8 013626 CALL TYPE0 ;YEP, TYPE AS AN ASCII DIGIT 013626 004767 173454 JSR PC,TYPE0 9 013632 010100 20$: MOV R1,R0 ;PUT UNITS INTO HERE 10 013634 CALL TYPE0 ;TYPE UNITS AS AN ASCII DIGIT 013634 004767 173446 JSR PC,TYPE0 11 013640 MESAGE <"KB memory]"<15><12>> ;ANNOUNCE REST OF MESSAGE 013640 004767 173402 JSR PC,ASCIC 013644 000176' .WORD $$$$$$ 000176 014 113 102 .ASCII <$$$$$$>"KB memory]"<15><12> 12 013646 052765 000001 000000G BIS #1,OUTDNE(R5) ;INDICATE MEMORY EXPANDED WITH MESSAGE (+1) 13 013654 000241 30$: CLC ;INDICATE GOODNESS 14 013656 012604 40$: MOV (SP)+,R4 ;RESTORE R4 15 013660 012600 MOV (SP)+,R0 ; AND RESTORE R0 16 013662 012601 MOV (SP)+,R1 ; AND RESTORE ORIGINAL REQUEST AMOUNT 17 013664 RETURN ; THEN EXIT 013664 000207 RTS PC 18 19 .DSABL LSB 20 21 013666 GLOBAL TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 83 SCOPE CHARACTER/LINE DELETION 1 .SBTTL SCOPE CHARACTER/LINE DELETION 2 3 .ENABL LSB 4 5 013666 ENTRY DELLIN ;CONTROL/U HANDLER 6 013666 032765 000002 000000G BIT #ET$CRT,ETYPE(R5) ;SCOPE MODE? 7 013674 001044 BNE 40$ ;YES, ERASE A LINE 8 013676 CALLRX CRLF ;NO, DO TTY COMPATIBLE WAY 013676 000137 000000G JMP @#CRLF 9 10 013702 ENTRY DELCHR ;RUBOUT HANDLER 11 013702 032765 000002 000000G BIT #ET$CRT,ETYPE(R5) ;SCOPE MODE? 12 013710 001002 BNE 10$ ;YES, HANDLE IT 13 013712 CALLR TYPE ;NO, DO TTY COMPATIBLE WAY 013712 000167 173374 JMP TYPE 14 15 013716 110000 10$: MOVB R0,R0 ;ENSURE SIGN EXTENDED CHARACTER 16 013720 100435 BMI 50$ ;AN 8-BIT CHARACTER, GO CHECK IT OUT... 17 013722 020027 000040 CMP R0,#040 ;NORMAL GRAPHIC? 18 013726 103044 BHIS 80$ ;YES, 1 SEQUENCE 19 013730 020027 000033 CMP R0,#033 ;ESCAPE? 20 013734 001441 BEQ 80$ ;YES, 1 SEQUENCE 21 013736 020027 000016 CMP R0,#016 ;UPARROW CONTROL? 22 013742 103035 BHIS 70$ ;YES, 2 SEQUENCES 23 013744 020027 000006 CMP R0,#006 ;OTHER UPARROW CONTROL? 24 013750 101432 BLOS 70$ ;YES, 2 SEQUENCES 25 013752 020027 000012 CMP R0,#012 ;LINE FEED? 26 013756 103411 BLO 30$ ;NO, LOWER, RE-PRINT 27 013760 001405 BEQ 20$ ;YES, 1 CURSOR UP 28 013762 020027 000014 CMP R0,#014 ;VERTICAL TAB OR FORM FEED? 29 013766 101005 BHI 30$ ;NO, RE-PRINT 30 013770 010746 MOV PC,-(SP) ;YES, DO CURSOR UP 31 013772 010746 MOV PC,-(SP) ; 4 TIMES 32 013774 016703 000004' 20$: MOV CRTCUP,R3 ;SET CURSOR UP SEQUENCE POINTER POINTER 33 014000 000421 BR 90$ ; AND GO DO IT 34 35 014002 012746 000000G 30$: MOV #PRTLIN,-(SP) ;RE-PRINT AFTER ERASE OF LINE 36 014006 016703 000006' 40$: MOV CRTERL,R3 ;SET SEQUENCE POINTER POINTER 37 014012 000414 BR 90$ ; AND GO DO IT 38 39 014014 032765 010000 000000G 50$: BIT #ET$8BT,ETYPE(R5) ;IS THE TERMINAL IN 8-BIT MODE? 40 014022 001404 BEQ 60$ ;NO, 4 SEQUENCES 41 014024 006300 ASL R0 ;DOUBLE CHARACTER 42 014026 005760 000400G TST CNV8BT+400(R0) ;GRAPHIC CHARACTER OR HEX PAIR? 43 014032 100002 BPL 80$ ;GRAPHIC, 1 SEQUENCE 44 014034 010746 60$: MOV PC,-(SP) ;DO ERASE CHARACTER 4 TIMES 45 014036 010746 70$: MOV PC,-(SP) ;DO ERASE CHARACTER 2 TIMES 46 014040 016703 000002' 80$: MOV CRTERC,R3 ;SET ERASE CHARACTER SEQUENCE POINTER POINTER 47 014044 066503 000000G 90$: ADD CRTYPE(R5),R3 ;FIND THE CORRECT SEQUENCE POINTER 48 014050 011303 MOV (R3),R3 ;GET POINTER TO COUNT, STRING 49 014052 112304 MOVB (R3)+,R4 ;SET THE STRING COUNT LEAVING A POINTER 50 014054 010046 MOV R0,-(SP) ;GET A WORKING REGISTER 51 014056 012700 000456 MOV #XRB+XRMOD,R0 ;ADDRESS THE XRB 52 014062 012710 040000 MOV #TO.CTL,(R0) ;XRMOD <- TO.CTL [CLEAN CONTROLS MODE OUTPUT] 53 014066 000167 173426 JMP SPCOUT ;NOW GO JOIN OUTPUT FLOW AT THE SPECIAL SPOT 54 55 .DSABL LSB TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 83-1 TECOIO ROUTINE "DELCHR" 56 57 014072 GLOBAL TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 84 SET UP FOR SCOPE CHARACTER/LINE DELETION 1 .SBTTL SET UP FOR SCOPE CHARACTER/LINE DELETION 2 3 014072 ORG CRTRUB 4 5 000000 000405 CRTRUB: BR CRTSET ;BRANCH TO THE SET UP ROUTINE 6 7 .ENABL LSB 8 9 000002 .ASSUME . EQ CRTRUB+2 10 000002 000010' CRTERC: .WORD 10$ ;ERASE CHARACTER SEQUENCE POINTERS POINTER 11 12 000004 .ASSUME . EQ CRTRUB+4 13 000004 000010' CRTCUP: .WORD 10$ ;CURSOR UP SEQUENCE POINTERS POINTER 14 15 000006 .ASSUME . EQ CRTRUB+6 16 000006 000010' CRTERL: .WORD 10$ ; SEQUENCE POINTERS POINTER 17 18 000010 000012' 10$: .WORD 20$ ;SCOPE TYPE #0 SEQUENCE POINTER... 19 20 000012 000 20$: .BYTE 0 ;SEQUENCE AS A BYTE COUNTED STRING... 21 22 .EVEN 23 24 .DSABL LSB 25 26 000014 005004 CRTSET: CLR R4 ;NO "WATCH" STATIC READ/WRITE REGION WANTED 27 000016 RETURN ;NO SCOPE SUPPORT, JUST EXIT 000016 000207 RTS PC 28 29 .SBTTL SCOPE "WATCH" ROUTINE 30 31 .GLOBL UU.TRM, .UUO ;FOR TERMINAL WIDTH CHANGES 32 33 000020 ORG SCREEN 34 35 000000 ENTRY WATCH ;SCOPE "WATCH" 36 000000 SCREEN: RETURN ;SIMPLE RETURN 000000 000207 RTS PC TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 85 ASCII REGION .EVEN FIXUP 1 .SBTTL ASCII REGION .EVEN FIXUP 2 3 000002 ORG TECOIE 4 5 .EVEN 6 7 .SBTTL DEFINE PATCH SPACE 8 9 000214 ORG PATCH 10 11 000000 .BLKB 0 12 13 .SBTTL VECTOR REGION 14 15 000000 VECTOR P.FLAG, O.FLAG ;RUN-TIME SYSTEM FLAGS 000000 000000 .WORD O.FLAG 16 000002 VECTOR P.DEXT, O.DEXT ;DEFAULT RUNNABLE EXTENSION 000002 076713 .WORD O.DEXT 17 000004 VECTOR P.MSIZ, O.MSIZ ;MINIMUM SIZE 000006 000004 .WORD O.MSIZ 18 000010 VECTOR P.SIZE, O.SIZE ;MAXIMUM SIZE 000042 000040 .WORD O.SIZE 19 20 000044 VECTOR P.FIS, BADONE ;ILLEGALS 000010 000440' .WORD BADONE 21 000012 VECTOR P.FPP, BADONE 000034 000440' .WORD BADONE 22 000036 VECTOR P.BPT, BADONE 000024 000440' .WORD BADONE 23 000026 VECTOR P.IOT, BADONE 000026 000440' .WORD BADONE 24 000030 VECTOR P.EMT, BADONE 000030 000440' .WORD BADONE 25 000032 VECTOR P.TRAP, BADONE 000032 000440' .WORD BADONE 26 000034 VECTOR P.BAD, BADXXX 000022 000372' .WORD BADXXX 27 28 000024 VECTOR P.CRAS, START ;START ENTRIES 000012 001016' .WORD START 29 000014 VECTOR P.STRT, START 000014 001016' .WORD START 30 000016 VECTOR P.NEW, START 000016 001016' .WORD START 31 32 000020 VECTOR P.RUN, RUNIT ;RUN ENTRY (CCL & CHAIN ALSO) 000020 001044' .WORD RUNIT 33 34 000022 VECTOR P.CC, TECOCC ;CONTROL/C ENTRIES 000036 000672' .WORD TECOCC 35 000040 VECTOR P.2CC, TEXIT 000040 000472' .WORD TEXIT 36 37 000001 .END TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 85-1 Symbol table ALLERR 000074RG 010 CM.VTR 000016 ED$YNK 000002 G FQDEV 000030 LPTHND 000006 ASCIC 007246R 010 CM.WKA 000012 EEFLAG= ****** G FQDEVN 000032 MAPFQ 000010 ASCIZ3 007226R 010 CNV8BT= ****** G EGFUNC 000000RG 011 FQERNO 000004 MBXHND 000044 ASSFQ 000024 CORCMN 000460 EIDONE 006432R 010 FQEXT 000014 MTAHND 000016 ATEOF 004000 CP 000004 EIOPEN 006556R 010 FQFIL 000004 N = ****** G ATRFQ 000000 CRAFQ 000004 ELAFQ 000006 FQFLAG 000024 NFLG = ****** G AUDHND 000032 CRBFQ 000034 ENDBLK 011106R 010 FQFUN 000003 NMRBAS= ****** G BACKUP 002704RG 010 CREFQ 000004 ENDREC 013354R 010 FQJOB 000002 NOCCO 000222R 010 BADNAM= ****** G CREFUN 004162R 010 ENSAV 000676 FQMODE 000022 NOCTLO 000210RG 010 BADONE 000440R 010 CREXIT 004210R 010 EOF = ****** G FQNAM1 000010 NODEVC= ****** G BADSWT= ****** G CRLF = ****** G EOFLAG= ****** G FQNAM2 000020 NORTS = ****** G BADXXX 000372R 010 CRLFNO= ****** G ERR 010710R 010 FQNENT 000036 NOSUCH= ****** G BBR.AC= 000004 CRTCUP 000004R 016 ERRBUF 000112 FQPFLG 000026 NOTCLS= ****** G BBR.CP= 000001 CRTERC 000002R 016 ERRCHK 003406R 010 FQPPN 000006 NOTOPN= ****** G BBR.IO= 000002 CRTERL 000006R 016 ERRFQ 000016 FQPROT 000027 NSTORG 001000 B2SPOS= 000010 CRTFQ 000032 ERRIO 010714R 010 FQSIZ 000016 NSUPER= 000200 B2S.AP 000012 CRTRUB 000000RG 016 ERRMSG 003440R 010 FQSIZM 000005 NULHND 000026 B2S.CP 000014 CRTSET 000014R 016 ETYPE = ****** G F$BKSZ 000036 NWATCH= ****** G CA 000016 CRTYPE= ****** G ET$BIN 000001 G F$FFBY 000034 OFFTER 000312R 010 CALFIP 104000 CURFRE= ****** G ET$CC 100000 G F$FORG 000020 OPNFQ 000002 CC 000002 CURSIZ 000662 ET$CCO 000020 G F$HDSZ 000037 OPNTER 000342R 010 CDRHND 000014 DALFQ 000030 ET$CKE 000040 G F$HEOF 000030 OUPALT 001300 CHKABT 000730R 010 DATE 000746RG 010 ET$CRT 000002 G F$HVBN 000024 OUPNOR 001200 CHKDET 000260R 010 DDNFS 000400 ET$DET 000100 G F$MRS 000040 OUPNTR= ****** G CHKFEB 007034R 010 DDRLO 001000 ET$GRV 020000 G F$RATT 000021 OUTDNE= ****** G CHKOFO 007052R 010 DDWLO 002000 ET$IAS 001000 G F$RSIZ 000022 OUTSAV 005726RG 010 CLOSER 003400R 010 DEAFQ 000026 ET$LC 000004 G GETATT 011240R 010 O.DEXT= 076713 G CLSFIL 003560RG 010 DEALC 000144R 010 ET$NCH 000010 G GETBUF 002412RG 010 O.FLAG= 000000 G CLSFQ 000000 DELCHR 013702RG 010 ET$RFS 002000 G GETBYT 011026R 010 O.MSIZ= 000004 G CLSFUN 000176R 010 DELLIN 013666RG 010 ET$TRU 000400 G GETFLS 005744RG 010 O.SIZE= 000040 G CLSOUT 003606RG 010 DETACH 000242R 010 ET$XIT 000200 G GETTMP 004032R 010 PARMSZ 000100 CMDPRM 001400 DETKEY= ****** G ET$8BT 010000 G GEXIT 000460RG 010 PATCH 000000RG 017 CMTSIZ 000022 DIRFQ 000012 EUFLAG= ****** G IBMHND 000042 PDL = ****** G CM.AP6 000006 DIVD = ****** G EXIT 000550R 010 ILLACS 007022R 010 PDLSIZ= 000202 G CM.AWS 177772 DLNFQ 000006 FD.BLK 000010 INDCLS 000124R 010 PDLSRT 001500 CM.BA6 177774 DMCHND 000030 FD.CR 000002 INDIR = ****** G PF.CSZ 020000 CM.BRM 177777 DMPHND 000046 FD.FTN 000001 INIDLM 002511 PF.EMT 100000 CM.BRS 177776 DOEB 040000 FD.PRN 000004 INI8BT 002510 PF.KBM 000400 CM.CCT 177770 DOOPEN 006504R 010 FFFLAG= ****** G INPALT 001100 PF.NER 004000 CM.CMD 000021 DOREN 100000 FIEXST= ****** G INPNOR 001000 PF.REM 010000 CM.COF 000010 DOWILD 005604R 010 FILBUF= ****** G INPNTR= ****** G PF.RW 002000 CM.CRQ 177766 DO.FMT 000400 FILSIZ= 000202 G INPSAV 005670RG 010 PF.SLA 040000 CM.CRT 000000 DO.MOD 010000 FILSRT 002104 IOCHK 000364RG 010 PF.1US 001000 CM.CSR 000014 DSKHND 000000 FIPCHK 000362R 010 IOERR = ****** G PKBHND 000020 CM.DCT 177771 DTAHND 000004 FIPERC 003404R 010 IOSTS 000402 PLTHND 000034 CM.DNE 177762 DTRFQ 000002 FIRQB 000402 JFBIG 020000 PRINT 007316RG 010 CM.FLG 000017 DT2HND 000036 FLAGRW 001776RG 010 JFFPP 001000 PRINTB 007276RG 010 CM.HDR 177750 EBGET 003776R 010 FLGFRC 020000 JFLOCK 040000 PRINTF 007610RG 010 CM.ICS 177750 EBGETR 004122R 010 FLGKB 040000 JFNOPR 010000 PRTLIN= ****** G CM.IC6 177752 EBGETT 004026R 010 FLGMOD 010000 JFPRIV 002000 PRVIOL= ****** G CM.IMK 177754 EDIT = ****** G FLGPOS 004000 JFSPRI 000400 PTPHND 000012 CM.IRG 177756 ED$CTL 000001 G FLGRND 100000 JFSYS 004000 PTRHND 000010 CM.QMR 177764 ED$EXP 000004 G FO 000000 KEY 000400 PUTBLK 003316R 010 CM.QUE 000004 ED$IMD 000040 G FQ 000042 KILFIL 003476RG 010 PUTBUF 002720RG 010 CM.RSP 000020 ED$INC 000100 G FQBSIZ 000040 KMCHND 000040 PUTBYT 011056R 010 CM.UMR 000002 ED$SRH 000020 G FQBUFL 000020 LISTEN 010052RG 010 P.BAD 177754 CM.UOF 177760 ED$WCH 000200 G FQCLUS 000034 LOKFQ 000022 P.BPT 177756 TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 85-2 Symbol table P.CC 177770 SCRINS 000000RG 015 TERINP 010414R 010 UU.DEA 000013 XRLOC 000004 P.CRAS 177744 SCRLOD 000764RG 010 TEROPN 000663 UU.DET 000007 XRMOD 000014 P.DEXT 177734 SCRSEQ 000000RG 013 TEXIT 000472RG 010 UU.DIE 177760 XRTIME 000012 P.EMT 177762 SCRSUB 000000RG 014 TFLG = ****** G UU.DIR 000017 ZEROD = ****** G P.FIS 177742 SEQCTL= ****** G TIME 000754RG 010 UU.DLU 000001 ZMAX = ****** G P.FLAG 177732 SETCHR 005010R 010 TI.CND= 020000 UU.DMP 177745 ZOTALL 000350RG 010 P.FPP 177766 SETDET 000266R 010 TLISTN 007764RG 010 UU.ERR 000011 ZZ = ****** G P.IOT 177760 SETFEQ 004640R 010 TO.BIN= 010000 UU.FCB 177770 $E$MEM= ****** G P.ISIZ 177736 SETFEX 005172R 010 TO.CTL= 040000 UU.FIL 177746 $$$VER= 030064 P.MSIZ 177740 SETFQB 000054RG 010 TTCRLF= 000004 UU.HNG 177767 $$$$$$= 000014 P.NEW 177750 SETLOK 005560R 010 TTESEQ= 000400 UU.JOB 000030 $$$$$0= 000176R 007 P.OFF 177732 SETNAM 005126R 010 TTIBFL 000200 UU.KMC 000033 .AST 104114 P.RUN 177752 SETNUB 004674R 010 TTIBUF 000460 UU.LIN 000004 .ASTX 104106 P.SIZE 177774 SETNUM 004676R 010 TTICNT 000670 UU.LOG 177755 .CCL 104062 P.STRT 177746 SETPTR 000674 TTOBFE 000666 UU.LOK 000021 .CHAIN 104070 P.TRAP 177764 SETRAD 005030R 010 TTOBFL 000056 UU.MNT 000003 .CLEAR 104056 P.2CC 177772 SETRA2 005026R 010 TTOBFS 000664 UU.NAM 177757 .CMDLN 104112 QMAX = ****** G SETRET 004664R 010 TTOBUF 000000 UU.NLG 177776 .CORE 104006 QRSTOR= ****** G SETSAV 004656R 010 TTTECO= 000002 UU.ONX 000041 .DATE 104034 QZ = ****** G SHUFLE 000000R 010 TTTECS= 000200 UU.PAS 000000 .ERLOG 104052 RC 000010 SIZEQR= ****** G TTYHND 000002 UU.POK 177772 .EXIT 104046 RENFQ 000010 SIZER 013456RG 010 TXSTOR= ****** G UU.PPN 000031 .FSS 104064 RESTRT 001026RG 010 SIZERB= 004000 G TYPE 007312RG 010 UU.PRI 177763 .LOGS 104054 RJEHND 000024 SPCOUT 007520R 010 TYPEB 007272RG 010 UU.PRM 000036 .MESAG 104060 RMSOUT 013064R 010 SPSAVE 000056 TYPEBC 004756RG 010 UU.PRV 000034 .NAME 104044 RMSREC 011646R 010 START 001016R 010 TYPEBF 004746RG 010 UU.RAD 000016 .PEEK 104012 RONLY = 020000 STOPON 000764RG 010 TYPEF 007604RG 010 UU.RTS 177756 .PFB 104110 RP 000006 SVNENT 000660 TYPE0 007306R 010 UU.SLN 000025 .PLAS 104072 RSTFQ 000020 SWITCH 000766RG 010 UMPFQ 000012 UU.SPL 177744 .POSTN 104032 RUNIT 001044R 010 SWR = 177570 USRLOG 000740 UU.STL 000035 .READ 104002 RWSIZE= ****** G SYSVEE= 030456 USRPPN 000734 UU.SWP 000027 .READA 104102 RXDHND 000022 SYSVEL= 034460 USRPRT 000736 UU.SYS 000032 .RSX 104074 R.AND 000005 TAGBUF= ****** G USRSP 000400 UU.TB1 177775 .RTS 104050 R.ANF 000000 TAGSIZ= 000202 G UUOFQ 000014 UU.TB2 177764 .RUN 104042 R.FIX 000001 TAGSRT 002306 UU.ACT 177761 UU.TB3 177743 .SET 104036 R.STM 000004 TECO = ****** G UU.ASS 000012 UU.TRM 000020 G .SLEEP 104010 R.UDF 000000 TECOCC 000672R 010 UU.ATR 177747 UU.YLG 177777 .SPEC 104014 R.VAR 000002 TECOCH 000000R 005 UU.ATT 000006 UU.ZER 000015 .STAT 104040 R.VFC 000003 TECOER 000000RG 006 UU.BCK 177765 UU.3PP 000037 .TIME 104030 R0OFF = 000004 G TECOGO 001720R 010 UU.BYE 000005 VE 000000RG 020 .TTAPE 104016 R2OFF = 000002 TECOIE 000000RG 007 UU.CCL 177750 WATCH 000000RG 012 .TTDDT 104024 R5SET 002512 TECOIO 000000RG 010 UU.CFG 000042 XITNOW 000234RG 010 .TTECH 104020 SAVFIL 007110R 010 TECOJP= ****** G UU.CHE 000023 XRB 000442 .TTNCH 104022 SAVFQB 011162RG 010 TECOLS 000000RG 003 UU.CHK 000040 XRBC 000002 .TTRST 104026 SAVREG 010634RG 010 TECOLT 000000RG 004 UU.CHU 000010 XRBLK 000010 .ULOG 104076 SCAN 004212R 010 TECOPD= ****** G UU.CLN 000002 XRBLKM 000007 .UUO 104066 G SCHBUF= ****** G TECORO 000000RG 002 UU.CNV 000024 XRBSIZ 000016 .WRITA 104104 SCHSIZ= 000202 G TECOSP= ****** G UU.DAL 000014 XRCI 000006 .WRITE 104004 SCHSRT 001702 TENTAT= 000040 UU.DAT 177762 XRLEN 000000 .XPEEK 104100 SCREEN 000000RG 012 . ABS. 177777 000 (RW,I,GBL,ABS,OVR) 000000 001 (RW,I,LCL,REL,CON) TECORO 000000 002 (RO,I,LCL,REL,CON) TECOLS 000000 003 (RO,I,GBL,REL,OVR) TECOLT 000000 004 (RO,I,GBL,REL,OVR) TECOCH 000000 005 (RO,D,GBL,REL,OVR) TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page 85-3 Symbol table TECOER 000000 006 (RO,D,LCL,REL,CON) TECOIE 000214 007 (RO,D,LCL,REL,CON) TECOIO 014072 010 (RO,I,LCL,REL,CON) EGFUNC 000006 011 (RO,I,GBL,REL,OVR) SCREEN 000002 012 (RO,I,GBL,REL,OVR) SCRSEQ 000000 013 (RO,D,GBL,REL,CON) SCRSUB 000000 014 (RO,I,GBL,REL,CON) SCRINS 000000 015 (RO,I,GBL,REL,OVR) CRTRUB 000020 016 (RO,I,GBL,REL,OVR) PATCH 000000 017 (RO,D,GBL,REL,OVR) VE 000044 020 (RO,D,GBL,REL,OVR) Errors detected: 0 *** Assembler statistics Work file reads: 0 Work file writes: 0 Size of work file: 10569 Words ( 42 Pages) Size of core pool: 16896 Words ( 66 Pages) Operating system: RT-11 (Under RSTS/E) Elapsed time: 00:02:27.28 OBJ:TECOIO,LST:TECOIO/C=MAC:#COMMON,MAC:TECOIO TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page S-1 Cross reference table (CREF V05.03a) $$$$$$ 37-3 38-3 39-3 52-20 52-20 52-23 52-23 57-29 65-11 65-11 82-11 82-11 $$$VER 16-1# $E$MEM 56-38 80-1 .CCL 27-42 .CHAIN 53-27 .CLEAR 27-28 30-36 .CORE 31-13 81-19 .DATE 29-11 .EXIT 27-52 .FSS 44-17 .NAME 30-31 .PEEK 29-19 .POSTN 25-22 .READ 64-24 67-15 .RTS 27-46 .SPEC 69-23 .STAT 34-9 .TTDDT 63-17 .TTECH 25-10 26-4 63-20 .TTNCH 35-27 62-24 .TTRST 25-5 25-11 26-5 35-30 .UUO 25-20 27-21 32-7 34-14 36-10 50-9 70-9 84-31 .WRITE 39-102 60-20 ALLERR 24-3# ASCIC 52-20 52-23 58-34# 65-11 82-11 ASCIZ3 26-17 52-22 58-25# ATEOF 20-32# 37-5 37-16 51-7 B2S.AP 20-10# 39-29 39-34 39-42 48-9 57-15* 75-31* 75-35 B2S.CP 20-11# 39-29 39-31 39-42 39-64* 39-72* 39-75* 57-14* 70-34 75-16* 75-17 75-18* 75-22 75-24* 75-29 75-32* 75-33 76-4 76-6 76-8 B2SPOS 19-13# 45-1 48-14 49-25 BACKUP 38-5# BADNAM 44-39 BADONE 26-21# 85-20 85-21 85-22 85-23 85-24 85-25 BADSWT 45-36 BADXXX 26-9# 85-26 CA 20-12# 37-20 39-76 41-34 62-12 69-4 69-8* 69-9 70-27 70-31 70-31* 70-32* 70-34 75-5* 75-27 75-31 75-35* 76-30* 78-16* 79-21* CALFIP 26-6 40-7 40-24 41-15 42-25 50-18 52-13 55-16 CC 20-6# 37-20 37-22 37-30 37-38 37-56 39-13 39-27 39-29 39-29 39-31 39-34 39-42 39-42 39-64* 39-72* 39-75* 39-76 41-34 62-11 62-12 62-19* 67-21* 67-22* 67-23 67-23* 67-29* 68-7* 68-18 68-21 68-26 68-27 68-27* 71-5* 71-7 71-11 71-11* 71-12 71-14 71-19 71-22 71-28 71-29 71-31 71-33 71-36* 71-37 71-42* 71-44* 71-45 72-1* 72-7* 72-8 72-9* 72-10* 72-11* 72-13* 72-14 72-16 72-19* 72-22* 72-27* 72-32 72-33* 73-1 73-7* 73-14* 74-1 74-3 74-4* 74-8* 74-17 74-17* 74-20 74-22 74-24* 75-4* 75-5* 75-8 75-16* 75-17 75-18* 75-22 75-24* 75-27 75-29 75-31 75-31* 75-32* 75-33 75-35 75-35* 76-1* 76-2 76-4 76-6 76-8 76-13* 76-16 76-18 76-25* 76-30* 77-1* 77-9 77-12* 77-13 77-13* 77-16 77-18 78-16* 78-17 78-17 78-38 79-4* 79-13 79-15 79-19* 79-20* 79-21* 79-23 79-25* 79-26 CHKABT 28-8 28-13# 64-5 CHKDET 25-21# 33-1 35-3 81-28 CHKFEB 53-18 57-6# CHKOFO 52-1 57-7 57-11# CLOSER 40-3# 41-24 42-4 53-23 CLSFIL 41-20# TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page S-2 Cross reference table (CREF V05.03a) CLSFQ 24-34 CLSFUN 24-32# 25-30 CLSOUT 41-28# CMDPRM 22-39# 31-24* 53-14 54-16 55-11 81-23 CNV8BT 58-6 58-50 83-42 83-57 CORCMN 22-19# 27-44* 33-5 CP 20-7# 39-93 39-94 39-95 39-100* 39-101* 68-27* 78-22 78-31 79-15 79-19* 79-26 CRBFQ 43-46 CREFQ 43-40 CREFUN 43-26 43-40# 53-2 CREXIT 43-42 43-45 43-47# 44-16 CRLF 26-18 83-8 CRLFNO 24-9 26-16 33-4 52-19 CRTCUP 83-32 84-13# CRTERC 83-46 84-10# CRTERL 83-36 84-16# CRTRUB 32-24 84-5# 84-9 84-12 84-15 CRTSET 84-5 84-26# CRTYPE 83-47 83-57 CURFRE 23-22* 23-25 CURSIZ 22-21# 31-2 31-3 31-6 81-12 81-22* 82-3 DATE 29-5# DDNFS 55-32 DDRLO 20-30# 55-35 55-43 DDWLO 20-31# 55-35 55-39 55-43 69-6 70-28 DEALC 24-21# 40-3 41-8 DELCHR 83-10# DELLIN 83-5# DETACH 25-18# 33-32 35-35 DETKEY 25-24 DIVD 47-5 DLNFQ 43-9 DO.FMT 20-29# 37-22 37-30 37-38 37-55 39-13 45-24 45-39 49-14 49-15 49-19 55-36 DO.MOD 20-33# 37-22 37-55 39-27 45-24 45-42 49-12 49-13 49-14 49-15 49-22 50-28 54-15 55-36 DOEB 20-35# 54-11 DOOPEN 52-28 53-3 53-39 54-10 55-7# DOREN 20-36# 52-29 54-11 DOWILD 50-31# 51-20 DSKHND 43-43 44-44 52-4 53-37 55-27 57-8 57-18 70-3 DTAHND 57-9 EBGET 41-11 42-12 42-21 43-3# 43-12 43-30 50-5 50-14 52-25 EBGETR 42-8 42-17 43-30# EBGETT 43-12# 52-27 54-9 ED$CTL 21-26# ED$EXP 21-28# ED$IMD 21-31# 63-40 ED$INC 21-32# ED$SRH 21-30# ED$WCH 21-33# ED$YNK 21-27# EDIT 63-40 63-49 EEFLAG 34-32 34-42 35-13* 35-41 63-38 63-49 EGFUNC 27-8 28-24# EIDONE 30-8 33-40 54-14# EIOPEN 54-18 55-23# TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page S-3 Cross reference table (CREF V05.03a) ENDBLK 41-37 68-16# 78-8 78-37 ENDREC 41-36 78-5 79-22# ENSAV 22-27# 50-7 50-12* 50-21 50-31 50-37* 50-43* EOF 64-30 67-16 EOFLAG 37-6* 37-13* 37-73 41-25* 41-42 51-6* 51-9* 51-27 53-20* 53-42 ERR 37-3 38-3 39-3 57-29 66-25# ERRBUF 22-11# 40-26 40-29 ERRCHK 39-103 40-13# 41-17 42-28 44-18 50-10 50-23 52-16 53-32 55-19 57-2 67-18 ERRFQ 40-22 ERRIO 40-21 66-27# ERRMSG 26-10 40-22# ET$8BT 21-17# 32-21 35-16 35-19 58-8 58-10 83-39 ET$BIN 21-5# 24-4 58-47 61-4 ET$CC 21-20# 24-4 28-3 28-5 28-10 62-5 62-7 64-4 64-27 ET$CCO 21-9# 24-4 25-6 35-28 60-16 ET$CKE 21-10# 24-4 62-5 62-7 63-24 64-16 64-33 ET$CRT 21-6# 35-22 63-34 83-6 83-11 ET$DET 21-11# 25-23 25-26 35-31 35-33 35-36 35-38 81-29 ET$GRV 21-18# 34-40 35-8 35-10 ET$IAS 21-14# 35-36 35-38 ET$LC 21-7# 32-15 65-27 ET$NCH 21-8# 24-4 35-25 62-5 62-7 63-18 64-20 65-7 ET$RFS 21-15# 35-36 35-38 ET$TRU 21-13# 35-22 63-31 ET$XIT 21-12# 24-7 28-3 31-37 81-29 ETYPE 24-4* 24-5 24-40 25-6* 25-23* 25-26* 25-40 28-3 28-10* 28-18 31-37* 31-41 32-15* 32-21* 32-42 34-40* 35-1 35-6 35-33 35-37 35-41 58-8 58-45 58-50 60-16 60-30 61-4 61-44 62-4 62-27 63-31 63-34 63-49 64-23 64-25 64-40 65-27 65-37 81-29 81-32 83-6 83-11 83-39 83-57 EUFLAG 32-18* 32-42 61-6 61-10 61-44 EXIT 26-19 27-24# 30-11 F$BKSZ 20-19# 54-21* 62-11 62-19* F$FFBY 20-18# 67-23 70-31 F$FORG 20-13# 68-18 69-8* 69-9 69-10 69-40 70-12 70-25* 70-27 71-19 71-22 71-33 71-37 72-14 77-9 77-16 F$HDSZ 20-20# 72-16 F$HEOF 20-17# 39-100* 39-101* 67-21* 67-22* 69-28* 70-32* 71-5* 71-7 71-28 71-29 72-32 72-33* 73-7* 73-14* 74-4* 74-8* 74-17* 74-24* 75-4* 76-1* 76-13* 76-16 76-25* F$HVBN 20-16# 67-23* 67-29* 70-31* 71-11* 71-31 71-36* 71-42* 71-44* 71-45 72-1* 72-7* 72-8 72-9* 72-10* 72-11* 72-13* 74-22 77-1* 77-12* 77-13* 77-18 F$MRS 20-21# 69-10 69-11 69-27 70-12 72-19* 72-22* 72-27* 74-3 74-17 78-17 78-22 78-31 78-38 79-4* 79-13 79-20* 79-23 79-25* F$RATT 20-14# 69-33 69-40 70-25* 71-12 73-1 74-1 74-20 75-8 76-2 76-18 F$RSIZ 20-15# 69-27 69-28* 69-33 71-11 71-14 77-13 FD.BLK 20-53# 69-37 71-12 FD.CR 20-51# 69-36 74-20 76-18 FD.FTN 20-50# 69-35 73-1 FD.PRN 20-52# 74-1 75-8 76-2 76-18 FFFLAG 37-12* 37-52* 37-73 FIEXST 42-26 FILBUF 27-11* 27-32 27-58 31-30* 31-40 44-8 44-53 48-3* 48-16 48-34 49-32 49-40 50-32 50-49 51-24 51-27 52-21 52-32 53-6 53-10 53-42 FILSIZ 19-3# 22-43 31-31* FILSRT 22-43# 31-30 31-31* FIPCHK 24-17 25-38 26-6# 33-36 FIPERC 40-7# 41-10 42-14 42-22 55-6 TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page S-4 Cross reference table (CREF V05.03a) FIRQB 22-16# 23-29 23-31 24-32 25-18* 25-19* 27-45* 30-13* 30-20 30-29 33-33 34-13* 34-15 34-23 43-5 43-7 43-13 43-32 43-41 43-44 44-3 44-23 44-23* 44-24* 44-26* 44-27 44-27* 44-28* 44-29* 44-42 44-51* 45-24* 45-39* 45-42* 45-43* 45-44 45-45 45-46 50-6 50-6* 50-7* 50-11 50-15 50-25 50-34* 50-35 50-36* 50-44* 52-2 52-6 52-8 52-10 53-1* 53-26 53-28 53-33* 53-35 53-38* 54-17 55-7 57-6 57-9 57-15 57-16 57-19* 57-20 57-23 68-35 68-38 68-46 69-14 70-1 70-12 70-14 FLAGRW 34-3# FLGFRC 20-34# 39-83 41-32 55-35 FO 20-5# 37-22 37-30 37-38 37-56 39-13 39-27 39-93 67-10 FQ 20-22# 48-7 50-11* 50-13* 50-24* 50-31 54-4 54-6 54-8* 57-25 69-11 FQBSIZ 20-22 22-16 22-27 23-29 43-5 57-20 68-35 68-42 68-43* 68-46 FQBUFL 45-43* 45-46 56-1 57-15 FQCLUS 44-23 44-27* 44-28* FQDEV 45-44 48-7 48-20 48-24 63-29* FQDEVN 48-20 FQERNO 25-19* 50-7* 50-13* 50-24* 50-34* 52-10 FQEXT 42-13* 43-27* 43-44 44-51* 49-6 52-8 FQFIL 43-7 44-3 54-17 55-23 55-24* 55-28* 55-34* 56-1 57-23 57-25 63-29* 63-30* 63-33* 63-36* 63-42* 68-38 68-42 68-43* FQFLAG 43-41 44-29* 44-42 45-24* 45-39* 45-42* 45-45 52-2 53-26 53-28 53-33* 53-35 55-8 55-23 57-6 57-9 57-16 69-14 70-1 FQFUN 24-32 25-18* 33-33 34-13* 34-15 42-9* 42-13* 43-20* 43-25* 43-27* 43-34 43-35 43-36 55-7 55-8 FQJOB 20-22 22-27 23-31 34-23 43-13 48-7 50-11* 50-13* 50-24* 54-4 54-6 54-8* 57-25 FQMODE 52-6 53-1* 53-38* 57-19* 63-30* 63-33* 63-36* 63-42* FQNAM1 27-45* 43-20* 43-25* 43-34 43-35 43-36 48-30 FQNAM2 42-9* FQNENT 30-13* 30-20 30-29 FQPPN 48-24 48-30 50-6* 50-11 50-11* 50-15 50-35 50-44* 55-34* FQPROT 49-6 50-25 50-27 54-4 54-6 54-8* 55-24* 55-28* FQSIZ 43-32 44-23* 44-24* 44-26* 44-27 50-6 50-27 50-36* GETATT 55-45 69-3# GETBUF 37-9# GETBYT 67-24# 69-5 77-4 GETFLS 51-17# GETTMP 41-14 42-18 43-13# GEXIT 27-5# ILLACS 55-47 57-1# 57-10 INDCLS 24-13# 28-13 53-12 62-15 INDIR 24-13 24-14* 24-40 25-2 25-4* 25-40 54-20* 54-26 62-17* 62-27 63-9 63-11* 63-49 INI8BT 22-46# 27-19 32-10* INIDLM 22-47# 27-20 32-11* 32-12* INPALT 22-36# 31-21* 51-4 INPNOR 22-35# 23-8 31-20* 31-34 53-5 56-17 INPNTR 31-34* 31-41 37-10 37-73 41-21 41-42 51-5* 51-27 53-19 53-42 INPSAV 51-3# IOCHK 26-7# 27-43 30-30 31-14 60-21 64-37 IOERR 66-32 IOSTS 22-15# 25-24 26-7 32-8 40-13 40-17 40-23 41-16 42-26 44-32* 44-39* 45-36* 50-19 52-14 53-30 55-17 57-1* 64-28 64-30 64-35 67-16 69-24 70-10 81-20* JFBIG 30-35 JFNOPR 30-10 KEY 22-14# 28-14* 30-10 65-4* TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page S-5 Cross reference table (CREF V05.03a) KILFIL 41-3# L$$IST 1-1 1-2 14-55 LISTEN 63-1# LOKFQ 50-17 52-12 MTAHND 44-21 69-14 69-22 N 28-24* 28-27 46-14 46-15* 46-20* 46-39 NFLG 27-6 27-58 NMRBAS 46-16 46-17* 46-19* 46-39 NOCCO 25-3 25-5# 60-18 NOCTLO 25-1# NODEVC 44-32 NORTS 53-30 NOSUCH 40-17 41-16 50-19 52-14 NOTCLS 55-17 NOTOPN 64-28 NSTORG 22-31# 31-15 NSUPER 19-36# 52-5 53-1 NWATCH 27-13* 27-58 O.DEXT 19-9# 85-16 O.FLAG 19-8# 85-15 O.MSIZ 19-10# 85-17 O.SIZE 19-11# 85-18 OFFTER 25-12 25-27# 34-39 35-15 35-24 55-31 64-32 OPNFQ 53-34 54-14 55-40 63-28 OPNTER 25-31 25-37# 63-44 OUPALT 22-38# 31-23* 43-22 48-12 51-13 OUPNOR 22-37# 31-22* 31-35 48-10 51-23 OUPNTR 31-35* 31-41 39-6 39-107 41-4 41-29 41-42 51-14* 51-27 54-5 54-26 57-11 57-33 OUTDNE 31-38* 31-41 60-19* 60-30 64-22* 64-40 82-12* 82-21 OUTSAV 51-12# P.2CC 85-35 P.BAD 85-26 P.BPT 85-22 P.CC 85-34 P.CRAS 85-28 P.DEXT 43-44 44-51 85-16 P.EMT 85-24 P.FIS 85-20 P.FLAG 85-15 P.FPP 85-21 P.IOT 85-23 P.MSIZ 30-18 30-50 85-17 P.NEW 27-49 85-30 P.OFF 85-15 85-16 85-17 85-18 85-20 85-21 85-22 85-23 85-24 85-25 85-26 85-28 85-29 85-30 85-32 85-34 85-35 P.RUN 85-32 P.SIZE 85-18 P.STRT 85-29 P.TRAP 85-25 PARMSZ 20-23# 22-35 22-36 22-37 22-38 22-39 23-10 43-4 55-11 55-13 56-19 57-21 81-26 PDL 31-27* 31-40 PDLSIZ 19-1# 22-41 PDLSRT 22-41# 31-26 31-27 PRINT 59-4# 60-27 61-7 TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page S-6 Cross reference table (CREF V05.03a) PRINTB 46-31 58-44# 61-5 PRINTF 61-3# PRTLIN 83-35 83-57 PRVIOL 57-1 PUTBLK 39-86# 68-5 PUTBUF 39-5# PUTBYT 41-34 68-3# 68-22 69-8 QMAX 32-40* 32-42 56-8* 56-40 QRSTOR 32-39* 32-42 78-29 78-45 QZ 56-4 56-40 78-25 78-30 78-45 R.AND 20-46# 68-18 69-46 71-24 71-40 77-16 R.ANF 20-40# 69-48 71-21 71-35 77-11 R.FIX 20-42# 70-21 71-33 71-35 R.STM 20-45# 70-19 70-21 70-22 70-23 71-22 71-24 71-37 71-40 R.UDF 20-41# 70-18 R.VAR 20-43# 70-22 R.VFC 20-44# 70-23 72-14 R0OFF 37-58 66-22# R2OFF 37-45 39-57 39-79 44-35 44-49 51-19 51-21 53-15 53-24 54-1 66-23# R5SET 22-49# 26-12 28-3 28-9* 28-10* 30-19 33-27 60-23 66-19 RC 20-9# 24-22 39-95 56-9 68-7* 68-21 68-26 78-17 81-26 RENFQ 43-31 RESTRT 27-48 30-12# RMSOUT 70-26 78-6# 79-21 RMSREC 70-30 71-19# 76-27 RONLY 19-37# 53-38 RP 20-8# 23-10 23-19 31-20* 31-21* 31-22* 31-23* 31-24* 39-94 56-19 56-27 67-10 68-27 81-23 RSTFQ 26-3 33-34 41-9 55-5 RUNIT 30-16# 85-32 RWSIZE 32-2 32-42 SAVFIL 50-45 55-44 57-17 57-20# SAVFQB 27-15 32-3 36-3 68-33# 69-16 70-4 SAVREG 24-12 33-39 37-9 38-5 39-5 41-3 41-20 41-28 51-3 51-12 51-17 61-8 63-6 66-3# SCAN 44-3# 51-18 SCHBUF 31-28* 31-40 33-6 33-44 SCHSIZ 19-2# 22-42 31-29* SCHSRT 22-42# 31-28 31-29* SCREEN 84-36# SCRLOD 29-14# SEQCTL 63-37* 63-43* 63-49 65-12 65-14 65-18* 65-23* 65-37 SETCHR 46-18 46-24 46-34# 47-21 SETDET 25-7 25-23# 63-22 SETFEQ 45-44# 52-26 SETFEX 45-47 48-11 48-13 48-15# 50-29 SETFQB 23-29# 26-3 40-22 63-28 SETLOK 50-25# 52-17 SETNAM 48-3# 51-10 53-40 54-19 57-28 SETNUB 46-10# 48-28 49-9 SETNUM 46-11# 48-22 48-31 49-28 SETPTR 22-26# 46-4* 46-6 46-23 46-27 46-29* 46-34* 46-35* 46-36* 59-20* 61-26* 66-9* SETRA2 47-1# 49-3 SETRAD 47-2# 49-5 SETRET 46-6# 47-10 SETSAV 46-3# 46-13 47-3 TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page S-7 Cross reference table (CREF V05.03a) SHUFLE 23-5# 24-31 81-27 SIZEQR 56-6 78-27 SIZER 81-3# SIZERB 19-6# 81-7 81-8 SPCOUT 60-7 60-9# 83-53 SPSAVE 22-9# 66-6* 66-28 START 27-50 30-10# 85-28 85-29 85-30 STOPON 29-13# SVNENT 22-20# 30-26 31-2 81-14 SWITCH 29-16# SWR 19-17# 29-18 SYSVEE 16-1# SYSVEL 16-1# TAGBUF 31-32* 31-40 TAGSIZ 19-4# 22-44 31-33* TAGSRT 22-44# 31-32 31-33* TECO 33-28 33-38 33-44 TECOCC 28-3# 85-34 TECOCH 31-36 TECOGO 28-16 33-27# TECOJP 31-36* 31-41 TECOPD 31-26* 31-40 TECOSP 31-25* 31-40 TENTAT 19-35# 57-19 TERINP 28-7 64-25# TEROPN 22-22# 25-27 25-33* 31-3 63-45* 63-46 TEXIT 24-10 27-10# 28-6 28-15 85-35 TFLG 28-9* 28-18 60-23 60-30 TI.CND 19-28# 64-18 TIME 29-9# TLISTN 62-3# TO.BIN 19-30# 60-6 TO.CTL 19-31# 83-52 TTCRLF 19-22# 63-33 TTESEQ 19-24# 63-42 TTIBFL 22-4# 22-19 64-8 TTIBUF 22-18# 64-10 TTICNT 22-25# 63-12 64-38* TTOBFE 22-24# 26-15* 31-8 32-30* 46-23 58-17 TTOBFL 22-3# 22-8 26-15 31-7 TTOBFS 22-23# 26-13* 31-6 31-8 32-28* 46-28 59-20 61-26 66-9 TTOBUF 22-8# 26-14 26-15 31-5 31-7 TTTECO 19-21# 63-30 TTTECS 19-23# 63-36 TTYHND 55-29 TXSTOR 32-34* 32-42 33-7 33-44 TYPE 59-2# 63-27 82-2 83-13 TYPE0 59-1# 82-8 82-10 TYPEB 58-42# TYPEBC 46-25# 59-39 61-38 TYPEBF 46-23# 59-29 59-31 59-33 59-35 61-28 61-31 TYPEF 61-1# USRLOG 22-30# USRPPN 22-28# 31-10 USRPRT 22-29# USRSP 22-13# 26-9 26-21 27-25 30-5 30-12 31-25 TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page S-8 Cross reference table (CREF V05.03a) UU.ATR 70-5 UU.DET 25-18 UU.ERR 34-13 UU.PPN 50-8 UU.TRM 27-16 32-4 36-4 84-31 VE 85-15 85-16 85-17 85-18 85-20 85-21 85-22 85-23 85-24 85-25 85-26 85-28 85-29 85-30 85-32 85-34 85-35 WATCH 27-14 84-35# XITNOW 25-9# XRB 22-17# 25-21* 27-27* 27-33 29-6 29-10 29-17 30-14* 30-29 34-10 39-88 44-5 44-7 45-2 60-5 64-7 64-38 67-5 67-20 69-17 69-26 81-18* 83-51 XRBC 64-38 67-20 69-26 XRBLK 64-19* XRBSIZ 22-17 44-5 XRCI 25-21* XRLOC 27-33 44-7 45-2 XRMOD 39-88 60-5 64-19* 83-51 ZEROD 46-18 ZMAX 32-37* 32-42 ZOTALL 26-3# 27-29 33-26 ZZ 33-21* 33-44 37-35* 37-44* 37-68* 37-73 TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page M-1 Cross reference table (CREF V05.03a) .ASSUM 24-7 24-34 26-14 28-5 30-29 31-2 31-3 31-5 31-6 31-8 43-43 44-44 49-13 49-14 52-4 53-37 55-27 55-43 57-8 57-18 58-10 58-47 62-7 63-46 64-4 64-27 69-9 69-11 69-33 69-35 69-36 69-40 69-48 70-3 70-18 70-21 70-22 70-23 70-27 70-34 71-21 71-24 71-35 71-40 75-17 75-33 77-11 84-9 84-12 84-15 .BSECT 20-27 20-48 21-3 21-24 .DSECT 20-3 20-38 22-6 .EQUAT 22-3 22-4 CALL 24-8 24-9 24-12 24-31 25-30 25-31 26-3 26-10 26-16 26-17 26-18 27-14 27-15 27-22 27-29 27-43 28-13 30-30 31-14 32-3 32-24 32-32 33-1 33-4 33-26 33-32 33-36 33-39 34-39 35-3 35-15 35-24 35-35 36-3 36-11 37-3 37-9 37-20 37-41 37-51 38-3 38-5 39-3 39-5 39-37 39-41 39-46 39-48 39-51 39-53 39-60 39-76 39-82 40-3 40-22 41-3 41-8 41-10 41-11 41-14 41-20 41-24 41-28 41-36 41-37 42-4 42-8 42-10 42-12 42-14 42-17 42-18 42-19 42-21 42-22 42-28 43-12 43-26 43-30 44-18 46-5 46-13 46-18 46-31 47-3 47-5 47-21 48-22 48-28 48-31 49-3 49-5 49-9 49-28 50-5 50-10 50-14 50-23 51-3 51-12 51-17 51-18 52-1 52-16 52-17 52-19 52-20 52-22 52-23 52-25 52-26 52-27 52-28 53-2 53-18 53-23 53-32 53-39 53-40 54-9 54-10 54-18 54-19 55-6 55-19 55-44 55-45 56-6 57-28 57-29 58-20 59-14 59-17 59-21 59-29 59-31 59-33 59-35 59-39 59-41 60-18 60-21 61-8 61-23 61-28 61-31 61-38 62-12 62-15 63-6 63-22 63-27 63-28 63-44 64-32 64-37 65-11 66-12 67-18 68-5 68-22 68-42 69-16 70-4 70-35 71-6 71-27 71-41 71-43 72-3 72-20 72-25 72-30 73-3 73-19 73-20 73-25 73-26 74-10 74-11 74-16 75-3 75-6 75-34 76-14 76-15 76-26 77-4 78-5 78-8 78-11 78-12 78-13 78-14 78-19 78-27 78-37 79-22 80-6 81-27 81-28 82-2 82-8 82-10 82-11 CALLR 50-45 51-10 53-12 83-8 83-13 CALLRX 83-8 CALLX 24-9 26-16 26-18 33-4 46-18 47-5 52-19 56-6 78-27 CHKERR 17-3# 25-24 40-17 41-16 42-26 50-19 52-14 53-30 55-17 64-28 64-30 67-16 DEFORG 18-6 18-9 18-12 18-18 18-21 18-24 18-27 18-30 18-33 18-36 18-39 18-42 18-45 18-48 ENTRY 17-17# 24-3 25-1 25-9 27-5 27-10 29-5 29-9 29-13 29-16 34-3 37-9 38-5 39-5 41-3 41-20 41-28 51-3 51-12 51-17 58-42 58-44 59-2 59-4 61-1 61-3 62-3 63-1 81-3 83-5 83-10 84-35 ERR 17-31# 37-3 38-3 39-3 57-29 GLOBAL 23-25 24-40 25-40 27-58 28-18 28-27 31-40 31-41 32-42 33-44 34-42 35-41 37-73 39-107 41-42 44-53 46-39 48-34 49-40 50-49 51-27 52-32 53-42 54-26 56-40 57-33 58-50 60-30 61-44 62-27 63-49 64-40 65-37 78-45 81-32 82-21 83-57 JMPX 33-28 56-38 66-32 80-1 MESAGE 17-47# 52-20 52-23 65-11 82-11 ORG 18-6 18-9 18-12 18-15 18-18 18-21 18-24 18-27 18-30 18-33 18-36 18-39 18-42 18-45 18-48 23-3 84-3 84-33 85-3 85-9 85-15 85-16 85-17 85-18 85-20 85-21 85-22 85-23 85-24 85-25 85-26 85-28 85-29 85-30 85-32 85-34 85-35 RETURN 23-23 23-34 24-36 25-35 28-25 29-14 34-28 36-12 37-49 39-77 40-30 41-18 42-30 43-10 43-28 43-38 43-47 46-8 46-21 46-37 49-36 52-30 54-12 54-22 56-36 57-26 58-12 58-23 60-24 66-20 67-31 68-12 68-29 68-50 70-37 71-9 75-20 77-21 79-35 80-10 82-17 84-27 84-36 SENTRY 17-22# 37-9 38-5 39-5 41-3 41-20 41-28 51-3 51-12 51-17 SETERR 17-10# 44-32 44-39 45-36 57-1 SETFQB 17-27# 26-3 40-22 63-28 TITLE 16-1 TMPORG 18-6 18-9 18-12 18-15 18-18 18-21 18-24 18-27 18-30 18-33 18-36 18-39 18-42 18-45 18-48 23-3 28-22 37-3 37-3 38-3 38-3 39-3 39-3 52-20 TECOIO I/O ROUTINES FOR TECO MACRO V05.03c Monday 16-Sep-85 14:50 Page M-2 Cross reference table (CREF V05.03a) 52-20 52-23 52-23 57-29 57-29 65-11 65-11 82-11 82-11 84-3 84-33 85-3 85-9 85-15 85-16 85-17 85-18 85-20 85-21 85-22 85-23 85-24 85-25 85-26 85-28 85-29 85-30 85-32 85-34 85-35 UNORG 18-6# 18-9# 18-12# 18-15# 18-18# 18-21# 18-24# 18-27# 18-30# 18-33# 18-36# 18-39# 18-42# 18-45# 18-48# 23-3# 28-29 37-3 37-3 38-3 38-3 39-3 39-3 52-20 52-20 52-23 52-23 57-29 57-29 65-11 65-11 82-11 82-11 84-3# 84-33# 85-3# 85-9# 85-15# 85-16# 85-17# 85-18# 85-20# 85-21# 85-22# 85-23# 85-24# 85-25# 85-26# 85-28# 85-29# 85-30# 85-32# 85-34# 85-35# VECTOR 17-69# 85-15 85-16 85-17 85-18 85-20 85-21 85-22 85-23 85-24 85-25 85-26 85-28 85-29 85-30 85-32 85-34 85-35 VERSN 16-1