.TITLE TECOIO - DATA AREA FOR RSX-11 TECO I/O PACKAGE .IDENT "X0215" ; ANDREW C. GOLDSTEIN 12-FEB-78 22:10 .MCALL FSRSZ$,FDBDF$,FDAT$A,FDRC$A,FDOP$A,NMBLK$ .MCALL WSIG$S,QIOW$,FCSBT$,CSI$,CSI$SW,CSI$ND FCSBT$ CSI$ .SBTTL IMPURE DATA AREA ; FCS I/O BUFFER ALLOCATION FOR FILE I/O FSRSZ$ 3 .PSECT IMPURE,D ; ASSORTED INTERNAL VARIABLES AND FLAGS ZBEGIN:: ; START OF AREA TO CLEAR ON INIT CSIBLK::.BLKB C.SIZE ; CSI CONTROL BLOCK DATSET == CSIBLK+C.DSDS ; DATASET POINTER BLOCK STACK:: .BLKW 1 ; STACK POINTER SAVE TABCNT::.BLKW 1 ; TAB COUNTER FOR TYPE OUT BUFPT:: .BLKW 1 ; POINTER INTO TYPE OUT BUFFER CCLFLG::.BLKW 1 ; LENGTH OF CCL COMMAND LINE SAVR5:: .BLKW 1 ; SAVED IMPURE AREA ADDRESS TTLNSZ::.BLKW 1 ; LINE SIZE OF TERMINAL ASSSOCIATED WITH TTYLUN CORSIZ::.BLKW 1 ; CURRENT MEMORY SIZE INFLG:: .BLKB 1 ; PRIMARY/SECONDARY INPUT FILE FLAG OUTFLG::.BLKB 1 ; PRIMARY/SECONDARY OUTPUT FILE FLAG TYO:: .BLKB 1 ; TYPOUT IN PROGRESS FLAG OUTDNE::.BLKB 1 ; TTY OUTPUT OCCURRED FLAG (MUST BE AN ODD BYTE!) ENFLAG::.BLKB 1 ; "EN" CONTEXT VALID FLAG CTZCNT::.BLKB 1 ; COUNT OF CONSECUTIVE CTRL Z TYPED IN .EVEN ZEND:: ; END OF AREA TO CLEAR ON INIT IOSTAT::.BLKW 2 ; I/O STATUS BLOCK TTCHAR::.BYTE TC.SMR,0 ; ARG LIST TO READ LOWER CASE MODE TTSCOP::.BYTE TC.SCP,0 ; AND CRT RUBOUT MODE STRING::.BLKB 68. ; STRING BUFFER FOR ERROR MESSAGES STRNGL == .-STRING . = STRING ; OVERLAP OTHER JUNK TIMBUF::.BLKW 8. ; BUFFER FOR GET TIME PARAMETERS . = STRING+STRNGL TYOBUF::.BLKB 80. ; TYPE OUT BUFFER TYOBL == 80. .EVEN CMDLIN::.BLKB 134. ; RECORD BUFFER FOR CMDFDB CMDSIZ == .-CMDLIN ; FILE DESCRIPTOR BLOCKS FOR INPUT AND OUTPUT FILES. ; ***** NOTE! THESE MUST BE ALLOCATED IN THIS ORDER (SEE CODE IN ; GETNAM ROUTINE IN GETFLS MODULE). INFDB:: FDBDF$ FDRC$A FDAT$A R.VAR,FD.CR FDOP$A INLUN,DATSET,DN .BLKB FILSIZ ; FILE STRING SAVE AREA OUTFDB::FDBDF$ FDAT$A R.VAR,FD.CR FDOP$A OUTLUN,DATSET,DN .BLKB FILSIZ ; FILE STRING SAVE AREA CMDFDB::FDBDF$ FDRC$A ,CMDLIN,CMDSIZ FDOP$A CMDLUN,DATSET,DN ENFDB:: FDBDF$ ; FDB FOR "EN" OPERATIONS FDOP$A ENLUN,ENDATS,DN NB.SFL == NB.SD1!NB.SD2!NB.SNM!NB.STP!NB.SVR S.WUIC == 14. N.WNM2 == 42 ENAFNB::.BLKB S.FNB+S.WUIC ; AUX NAME BLOCK FOR WILD CARD DIRECTORIES ENDATS::.BLKW 6 ; DATASET DESCRIPTOR BLOCK FOR "EN" PROCESSING ENVER:: .BLKW 1 ; SPACE TO SAVE ORIGINAL VERSION NUMBER .EXSTS::.WORD -1 ; ***PIPUTL NEEDS THIS FOR EXIT W/ STATUS ; DEFAULT FILE NAME BLOCK TO MAKE SY0: DEFAULT DEVICE DN:: NMBLK$ ,,,SY,0 ; FILE NAME BLOCKS TO SAVE STATES OF INPUT AND OUTPUT FILES. INSAVE::.BLKB S.FNB+8.+FILSIZ ; INPUT FILE STATE SAVE AREA OUSAVE::.BLKB S.FNB+FILSIZ ; OUTPUT FILE STATE SAVE AREA ; ; STATISTICS BLOCK FOR INPUT FILE ; STATBK::.BLKB 10. .SBTTL PURE DATA AREA ; ; DEFAULT AMOUNT OF MEMORY TO ASK FOR ; SIZERB == 1024. ; DEFAULT CORE SIZE TO ASK FOR .PSECT PURE,RO,D ; CSI SWITCH TABLE FOR FILE STRINGS SW.CR == FD.CR ; IMPLIED CARRIAGE CONTROL SW.FT == FD.FTN ; FORTRAN CARRIAGE CONTROL SW.RW == 400 ; MAGTAPE REWIND SWITCH SW.SH == 1000 ; SHARED FILE OPEN MODE (INPUT ONLY) SWTAB:: CSI$SW CR,SW.CR,,,NEG ; /CR - FORCE IMPLIED CARRIAGE CONTROL CSI$SW FT,SW.FT ; /FT - FORCE FORTRAN CARRIAGE CONTROL CSI$SW RW,SW.RW ; /RW - REWIND MAGTAPE CSI$SW SH,SW.SH ; /SH - SHARED OPEN CSI$ND CMDR50 == <<'T-100>*50*50>+<<'E-100>*50>+<'C-100> ; .RAD50 /TEC/ FFRECD::.BYTE FF ; SINGLE FORM FEED RECORD FOR OUTPUT ; ; INITIAL COMMAND STRING. IT GETS THE CCL PROCESSING MACRO FROM THE TEXT ; BUFFER AND STASHES IT IN QY, AND GETS THE CCL COMMAND LINE FROM THE FILENAME ; BUFFER AND STORES IT IN QZ. THEN IT STARTS UP THE USER'S SETUP FILE, IF ; IT EXISTS. ; INITC:: .ASCII "HXYHKG*HXZHK:EITECO" INITL == .-INITC ; ; CCL PROCESSING COMMAND LINE. THIS IS EXECUTED AFTER THE STARTUP FILE IS ; COMPLETED. IT EXECUTES THE CCL PROCESSING MACRO IN QY TO INTERPRET THE COMMAND ; LINE IN QZ. ; CCLPRC::.ASCII "MY" CCLPRL == .-CCLPRC .EVEN ; ; OFT USED DPB'S FOR ATTACHING AND DETACHING THE TTY ; ATTACH::QIOW$ IO.ATT!TF.AST,TTYLUN,TTYEFN,,IOSTAT,, DETACH::QIOW$ IO.DET,TTYLUN,TTYEFN,,IOSTAT ; ; LOW AND HIGH LIMITS OF MEMORY USED BY THIS TASK ; LOHI:: .LIMIT ; IF NO DYNAMIC MEMORY, EXTEND $$DYB1 .PSECT $$DYB1,D DYB1:: .PSECT $$DYB2,D DYB2:: ; ; STARTUP ENTRY POINT. THIS AUTO-LOADS THE INITIALIZATION OVERLAY. ; .PSECT CODE,RO,I TECOIO:: JMP TECINI ; ; ENTRY POINT FOR OVERLAY LOAD ERRORS ; $ALERR:: WSIG$S ; WAIT FOR SYSTEM TO RECOVER RETURN ; AND TRY AGAIN .SBTTL REGISTER SAVE ROUTINE ;+ ; ; *** - SAVREG SAVE REGISTERS ; ; THIS ROUTINE SAVES REGISTERS 0 THRU 4 ON THE STACK AND SETS UP TO ; HAVE THEM RESTORED WHEN THE CALLING ROUTINE EXITS. ; ; CALL: JSR R4,SAVREG ; ;- SAVREG:: MOV R3,-(SP) MOV R2,-(SP) MOV R1,-(SP) MOV R0,-(SP) MOV R4,-(SP) ; SAVE ALL REGISTERS MOV SR4(SP),R4 ; RESTORE R4 MOV SP,STACK ; SAVE STACK POINTER FOR ERROR UNWIND JSR PC,@(SP)+ ; RETURN TO CALLER ; CO-ROUTINE EXIT CAUSES CONTROL TO RETURN HERE WHEN CALLER EXITS. MOV (SP)+,R0 ; RESTORE REGISTERS MOV (SP)+,R1 MOV (SP)+,R2 MOV (SP)+,R3 MOV (SP)+,R4 RTS PC ; AND RETURN .END TECOIO