.TITLE VUEINI - INITIALIZATION FOR VUE ;RBD-VUE .IDENT "V1.0" ;RBD-VUE ; ; COPYRIGHT (C) 1976 BY DIGITAL EQUIPMENT CORPORATION, ; MAYNARD, MASSACHUSETTS ; ; THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A ; SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE IN- ; CLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR ; ANY OTHER COPIES THEREOF, MAY NOT BE PROVIDED OR OTHERWISE ; MADE AVAILABLE TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH ; SYSTEM AND TO ONE WHO AGREES TO THESE LICENSE TERMS. TITLE ; TO AND OWNERSHIP OF THE SOFTWARE SHALL AT ALL TIMES REMAIN ; IN DIGITAL. ; ; THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITH- ; OUT NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY ; DIGITAL EQUIPMENT CORPORATION. ; ; DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR ; THE USE OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT WHICH IS ; NOT SUPPLIED BY DIGITAL. ; ; ANDREW C. GOLDSTEIN 30-JUN-77 10:16 ;------------------------------------------------------------- ; V U E ; THIS MODULE WAS MODIFIED FOR VUE. THE "ED" FLAG IS NO LONGER ; INITIALIZED TO -1. THIS CAUSED SOME PROBLEMS WITH INEXPERIENCED ; USERS WIPING OUT THEIR BUFFERS WITH AN OUTPUT FILE OPEN. ALSO, ; THE IMMEDIATE EXIT BIT OF THE "ET" FLAG IS NOT SET, GIVING ; THE USER THE OPTION OF TERMINATING IF HE WANTS. ; .ENABL LC ; ; The modifications to this TECO/RSX-11M I/O module were ; made by: ; ; Bob Denny ; Gould, Inc. NavCom Systems Division ; 4323 N. Arden Drive. ; El Monte, Ca. 91731 ; (213) 442-0123 Ext. 587 ; ; If you have any questions about the mods, or find (and maybe fix) ; a problem, feel free to contact me. ; ;------------------------------------------------------------------------- .MCALL GMCR$,FINIT$,GTSK$C,GLUN$C,GPRT$C,DIR$,EXIT$S,QIOW$C .PSECT IMPURE,D ; ; GET MCR COMMAND LINE BUFFER ; GMCR: GMCR$ .PSECT PURE,RO,D ; ; MESSAGE FOR NOT ENOUGH BUFFER SPACE TO INITIALIZE ; NOBF: .ASCII "Not enough buffer space" NOBFLN = .-NOBF ; ; CCL COMMAND LINE WON'T FIT IN THE FILENAME BUFFER. ; CMDLN: .ASCII "Command line won't fit"<15><12> CMDLNL = .-CMDLN ; ; COMMAND PROCESSING MACRO WON'T FIT IN THE TEXT BUFFER. ; CCLMP: .ASCII "Command processing macro won't fit" CCLMPL = .-CCLMP .EVEN ;+ ; ; *** - TECINI PRIMARY ENTRY POINT ; ; THIS IS WHERE TECO ITSELF STARTS TO RUN WHEN CALLED FROM MCR. THIS ; LEG OF CODE SETS UP THE DATA AREAS NEEDED BY TECO, INITIALIZES ; POINTERS AND COUNTS AS NECESSARY, AND THEN TRANSFERS TO TECO PROPER. ; ;- .PSECT CODE,RO .ENABL LSB TECINI:: FINIT$ ; INITIALIZE THE FILE STORAGE REGION MOV #ZBEGIN,R0 ; POINT TO START OF AREA TO CLEAR MOV #/2,R1 ; GET WORD COUNT 10$: CLR (R0)+ ; AND ZERO IT SOB R1,10$ GLUN$C TTYLUN,STRING,CODE ; GET INFO ABOUT TTYLUN MOV STRING+10.,TTLNSZ ; SAVE THIS TERMINAL'S LINE SIZE 20$: MOV #TYOBUF,BUFPT ; INIT TYPE OUT BUFFER POINTER CALL TTATT ; ATTACH THE TERMINAL .IF GT,R$$DYM ; IF DYNAMIC MEMORY IN USE GPRT$C ,STRING,CODE ; GET PARTITION PARAMETERS MOV @#$DSW,R4 ; IN ORDER TO GET TASK BASE ADDRESS GTSK$C STRING,CODE ; GET TASK PARAMETERS ADD STRING+G.TSTS,R4 ; IN ORDER TO GET "APPARENT" TASK SIZE MOV LOHI+2,R5 ; R5= BOTTOM OF DYNAMIC MEMORY, R4=TOP .IFF ; IF NO DYNAMIC MEMORY MOV #DYB1,R5 ; R5 = BOTTOM OF DYNAMIC MEMORY MOV #DYB2,R4 ; R4 = TOP OF DYNAMIC MEMORY .ENDC MOV R5,SAVR5 ; SAVE IMPURE AREA POINTER MOV R4,R3 SUB R5,R3 ; R3=SIZE OF DYNAMIC MEMORY IN BYTES MOV #RWSIZE+SCHSIZ+FILSIZ+PDLSIZ+MBFSIZ,R0 ; COMPUTE SPACE NEEDED ADD SCREEN,R0 ; INCLUDING DISPLAY AREA CMP R0,R3 ; IS IT ADEQUATE BLOS 30$ ; BRANCH IF YES JMP 120$ 30$: MOV R5,R0 ; R0=BASE OF DYNAMIC MEMORY MOV R3,R1 ; R1=BYTE COUNT CLC ROR R1 ; R1=WORD COUNT 40$: CLR (R0)+ ; ZERO DYNAMIC MEMORY SOB R1,40$ ; ; INITIALIZE TECO'S STATE AREA, BASE ADDRESS IN R5, SIZE = RWSIZE ; R3 = BYTE COUNT OF AVAILABLE MEMORY ; R4 = TOP OF MEMORY ; R5 = BASE OF MEMORY ; MOV SP,TECOSP(R5) ; INIT BASE LEVEL STACK POINTER MOV R5,R0 ; R5 = ADDRESS OF STATE AREA ADD #RWSIZE,R0 ; ALLOCATE STATE AREA ADD SCREEN,R0 ; ALLOCATE DISPLAY BUFFER AREA MOV R0,PDL(R5) ; ADDRESS OF PUSH DOWN LIST MOV R0,TECOPD(R5) ; BOTH OF THEM ADD #PDLSIZ,R0 ; FORM ADDRESS OF SEARCH BUFFER MOV R0,SCHBUF(R5) ; STORE SEARCH BUFFER POINTER ADD #SCHSIZ,R0 ; POINT TO FILE NAME BUFFER DECB -1(R0) ; -1 TERMINATES SEARCH BUFFER MOV R0,FILBUF(R5) ; POINTER TO FILE NAME BUFFER ADD #FILSIZ,R0 ; LENGTH OF FILE NAME BUFFER DECB -1(R0) ; TERMINATE WITH -1 ; ; SPLIT THE REMAINING FREE SPACE 50-50 BETWEEN BUFFER AND Q-REGISTERS ; MOV R4,R3 ; RECOMPUTE FREE SPACE REMAINING SUB R0,R3 MOV R3,CORSIZ ; SAVE INITIAL AMOUNT OF MEMORY CLC ROR R3 ; COMPUTE HALF MOV R0,TXSTOR(R5) ; SET BASE OF TEXT BUFFER ADD R3,R0 ; ALLOCATE TEXT BUFFER MOV R3,ZMAX(R5) ; STORE SIZE IN STATE AREA MOV R0,QRSTOR(R5) ; SET ADDRESS OF Q-REGISTERS MOV R3,QMAX(R5) ; SET Q REGISTER AREA SIZE MOV #INFDB+F.BDB,INPNTR(R5) ; SET UP INPUT FILE FLAG PTR MOV #OUTFDB+F.BDB,OUPNTR(R5) ; SET UP OUTPUT FILE FLAG PTR MOV #TECOCH,TECOJP(R5) ; SET UP ADDRESS OF DISPATCH TABLE ;;; MOV #ET.EXI,ETYPE(R5) ; SET UP INITIAL ET FLAGS ;VUE ;;; INC EDIT(R5) ; SET ED FLAG TO 1 ;VUE ; ; FIND OUT IF THE TERMINAL IS ENABLED FOR LOWER CASE ; QIOW$C SF.GMC,TTYLUN,TTYEFN,,IOSTAT,,,CODE BCS 60$ ; QUIT ON DIRECTIVE ERROR TSTB IOSTAT ; CHECK FOR I/O ERROR BLT 60$ ; SUCH AS UNSUPPORTED FUNCTION TSTB TTCHAR+1 ; OK - CHECK LOWER CASE MODE BEQ 50$ ; BRANCH IF NO BIS #ET.LOC,ETYPE(R5) ; YES - SET LOWER CASE TYPE-IN MOV #-1,EUFLAG(R5) ; AND TURN OFF CASE FLAGGING 50$: TSTB TTSCOP+1 ; CHECK FOR CRT TYPE TERMINAL BEQ 60$ ; BRANCH IF NO BIS #ET.CRT,ETYPE(R5) ; SET - SET CRT MODE TST SCREEN ; SEE IF VT52 SCOPE ROUTINE PRESENT BEQ 60$ ; BRANCH IF NOT CMP TTLNSZ,#72. ; SEE IF LINE WIDTH GTR 72 BLOS 60$ ; BRANCH IF NOT - VT05 BIS #ET.VT52,ETYPE(R5) ; SET BIT TO INDICATE PRESENCE ; ; PICK UP THE MCR COMMAND LINE, IF ANY. THE COMMAND LINE IS STASHED IN ; THE FILENAME BUFFER, AND THE CCL PROCESSING MACRO IS MOVED TO THE TEXT ; BUFFER. THE INITIAL COMMAND STRING WILL MOVE THEM FROM THERE TO QZ AND QY, ; RESPECTIVELY. ; 60$: MOV #GMCR+G.MCRB,R0 ; GET ADDRESS OF COMMAND LINE CLR R1 ; ASSUME ZERO BYTE COUNT DIR$ #GMCR ; GET THE COMMAND LINE BCS 70$ ; BRANCH IF NONE MOV @#$DSW,R1 ; GET THE BYTE COUNT 70$: MOV FILBUF(R5),R2 ; GET ADDRESS OF FILENAME BUFFER CMP R1,#FILSIZ-1 ; SEE IF THE COMMAND LINE WILL FIT BHI 130$ ; BRANCH IF NOT 80$: DEC R1 ; COUNT CHARACTERS BLT 90$ MOVB (R0)+,(R2)+ ; COPY COMMAND LINE TO FILENAME BUFFER BR 80$ 90$: MOV #CCLCMD,R0 ; GET ADDRESS OF STORED CCL PROCESSING MACRO MOV #CCLCML,R1 ; AND BYTE COUNT MOV TXSTOR(R5),R2 ; GET ADDRESS OF TEXT BUFFER CMP R1,ZMAX(R5) ; SEE IF THE MACRO WILL FIT BHI 140$ ; BRANCH IF NOT MOV R1,ZZ(R5) ; SET TEXT BUFFER SIZE 100$: DEC R1 ; COUNT CHARACTERS BLT 110$ MOVB (R0)+,(R2)+ ; COPY MACRO INTO TEXT BUFFER BR 100$ 110$: DECB CCLFLG ; MARK COMMAND LINE PROCESSING PENDING MOV #INITL,CMDFDB+F.NRBD ; SET UP INITIAL COMMAND STRING MOV #INITC,CMDFDB+F.NRBD+2 MOV #CMDFDB,INDIR(R5) ; FAKE AN INDIRECT FILE JMP TECO ; ALL SET UP. ; ; NO BUFFER SPACE TO ALLOCATE MINIMUM TEXT SPACE ; 120$: MOV #NOBF,R3 ; GET MESSAGE MOV #NOBFLN,R4 BR 150$ ; ; COMMAND LINE DOESN'T FIT IN FILENAME BUFFER. ; 130$: MOV #CMDLN,R3 MOV #CMDLNL,R4 BR 150$ ; ; CCL MACRO DOESN'T FIT IN TEXT BUFFER. ; 140$: MOV #CCLMP,R3 MOV #CCLMPL,R4 150$: CALL PRINT ; TELL USER THERE IS NO ROOM EXIT$S ; AND EXIT FROM TECO .DSABL LSB .END