.TITLE PCPRSX MCR BUFFER STUFFER ; ;NEW FEATURES--PCP-LIKE ARGUMENTS. DIFFERENCES FROM DOS VERSION: ; ;1. ARGUMENTS ARE ALL 9 CHARACTERS LONG, NOT 6 ;2. LINE MUST BEGIN WITH / TO HAVE ARGUMENTS STUFFED ;3. ARGUMENTS ARE SEPARATED BY ^ (UPARROW) ;4. & GETS REPLACED BY ^ IN ARGS (SHOULD BE INFREQUENTLY NEEDED) ;5. ? REPLACES OLD CTL-CHAR, THOUGH CHARS ARE CORRESPONDING. ; ;ALTERED TO ATTEMPT TO MAKE IT GENERALLY USABLE AS AN ;INDIRECT MCR FACILITY FOR RSX11D G. EVERHART 8/13/1976 .IDENT /GCE002/ ; ; ;THIS ROUTINE MAY BE USED (ONE COPY PER TI: ONLY!) TO PERMIT ;MCR COMMANDS TO BE ISSUED VIA INDIRECT FILES. NO CHANGES ;TO THE SYSTEM ARE NEEDED---JUST INSTALL THIS TASK, BUILT M/U, ;AND REQUEST IT. ITS PROMPT IS "PCP>" (YEAH, JUST LIKE THE DOS ;PROGRAM) AND ANY FILE MAY BE SPECIFIED. DEVICE NAME MUST BE ;MENTIONED EXPLICITLY IN FILE CALLS (@SY:NAME.TYP, NOT ;JUST @NAME.TYP; DEFAULT DEVICE IS TI:, NOT SY:). ; ;THIS PROGRAM IS A STRAIGHTFORWARD EXTENSION OF 'START' BY ;J.E. POLLACK, REMOVING SOME RESTRICTIONS OF HIS VERSION THAT ;MADE IT IMPRACTICAL FOR USE EXCEPT JUST AFTER A BOOT. ;THE FULL SET OF COMMANDS OF 'START' IS AVAILABLE. IF MULTIPLE ;VERSIONS OF THIS TASK ARE RUN, IT WILL BECOME CONFUSED AS TO ;WHAT TASKS TO WAIT FOR AND MAY START A STEP OF A PROCEDURE TOO ;SOON. HOWEVER, IT IS NOT FORBIDDEN EXPLICITLY IN CASE A USER ;WANTS THIS EFFECT. COPIES AT DIFFERENT TI'S SHOULD BE SAFE ;AGAINST ONE ANOTHER. ; ; G. EVERHART, 8/14/76 16:30:00 ; ; ; .MCALL CALL,RETURN,FSRSZ$ .MCALL FDBDF$,FDOP$A,FDRC$A,FDAT$A,FDBF$A,OPEN$R,NMBLK$ .MCALL EXIT$S,MRKT$S,WTSE$S ; ; ; SPECIAL COMMANDS HANDLED.. ; *E TO EXIT QUIETLY ; *D TO DELAY ONE SECOND ; *Q TO SUPRESS ECHOS ; *N TO RESUME COMMAND ECHO ; GCMLD$ ;DEFINE SOME STUFF ; ; GTAB: GCMLB$ CFDB,FFDB,0,0,5,PCP ; TSKDTA: .BLKW 22. ;DATA FOR GTSK$ .MCALL GTSK$S CFDB: FDBDF$ FDAT$A R.VAR,FD.CR FDRC$A ,BUFFR,80. FDOP$A CLUN,,DFCFDB FDBF$A ,,1 ; DFCFDB: NMBLK$ CMD,CMD,,TI,0 BUFFR: .BLKB 82. ; FFDB: FDBDF$ FDAT$A R.VAR FDOP$A FLUN FDBF$A ,,1 ; .ECHOF: 1 ;ECHO FLAG ; CLUN=6 FLUN=1 ; PRELN0: ;PREFIX FOR FORCED PROCEDURE INVOCATION BY NAME ;CALLED AUTOMATICALLY IF TASK NOT FOUND .ASCII /@SY:[01,200]/ ;SHOULD BE EVEN # BYTES PRELN2: .BLKB 100. ;ALLOW BIG HUGE LINES. ;PRELIN: .ASCIZ ^MOU SY0:/OVR^ ; .ASCIZ ^@SY0:STARTUP.CMD^ ; .BYTE 0 ; .EVEN PRELIN: .ASCII /@SY0:[1,200]/ TSKNAM: .ASCIZ /SPCP.CMD/ .BYTE 0,0,0,0,0,0,0,0 ;SAFETY .BYTE 0 ;SAFETY MARGIN .EVEN ; FSRSZ$ 2 ;TWO OPEN FILES ; ; .EVEN .PSECT PURE,RO ;MAKE A PURE PSECT FOR CODE START: GTSK$S #TSKDTA ;GET TASK DATA (INCLUDING NAME) MOV #TSKNAM,R0 ;BUFFER ADDR MOV TSKDTA,R1 JSR PC,$C5TA ;CONVERT RAD50 TO ASCII 3 CHARS MOV TSKDTA+2,R1 ;GET NEXT RAD50 JSR PC,$C5TA ;AND CONVERT MOVB #'.,(R0)+ MOVB #'P,(R0)+ MOVB #'C,(R0)+ MOVB #'P,(R0)+ CLRB (R0)+ ;ZERO TRAILER MOV .CRTSK,R0 ;GET OUR ATL ADDR MOV A.TI(R0),R0 ;THEN GET OUR PUD ADDR BISB #,U.PR(R0) ; SET LOGGED-ON, PRIV BITS TSTB U.PC(R0) ;FORCE LEGAL PPN BNE 1$ MOVB #200,U.PC(R0) 1$: TSTB U.GC(R0) BNE 2$ MOVB #200,U.GC(R0) 2$: ; DEFAULT TO [200,200] ; CLR .ECHOF ;RESET ECHO ON OPEN$R #CFDB ;OPEN COMMAND FDB ; ; ; NOW FORCE INITAL COMMAND LINES SCML$ #GTAB,#PRELIN ;SET UP [1,200]SPCP.CMD STARTUP CMD ; ; SCML$ #GTAB,#PRELIN ;SET MOUNT AND @FILE COMMANDS ;***** REMOVE ";" ABOVE TO ENABLE AUTOMATIC STARTING OF COMMAND FILE ; ; AND GET NEXT COMMAND LINE ; 10$: GCML$ #GTAB BCS 20$ ;IF ERROR ; ;HERE TEST FOR ARGUMENTS AND ACTIVITIES. CALL MACDO TO DO ;ARGUMENT THINGS FOR US. THEN POSSIBLY ECHO. MOV R1,-(SP) MOV R2,-(SP) MOV R3,-(SP) ;NEED THESE REGS FOR MACDO MOV #GTAB,R1 ;GCML BLOCK ADDR ADD #G.CMLD,R1 ;LENGTH OF LINE ADDRESS MOV @R1,R3 ;SAVE LINE SIZE IN R3 BEQ 11$ ;(SKIP IF NULL) ADD #2,R1 ;POINT AT ADDR ADDR MOV @R1,R1 ;POINT R1 AT LINE CLR R2 ;ASSUME TTY INPUT BITB #FD.TTY,F.RCTL(R0) ;SEE IF IT REALLY WAS BNE 12$ ;YES MOV #2,R2 ;NO, FLAG THIS A PROCEDURE 12$: JSR PC,MACDO ;DO ARGS 11$: MOV (SP)+,R3 MOV (SP)+,R2 ;PUT THE REGS BACK THEN MOV (SP)+,R1 ; TST .ECHOF ;ECHO THE LINE? BNE 15$ ;BR IF NO ECML$ ;ECHO THE LINE 15$: ADD #G.CMLD,R0 ;POINT TO LINE DESCRIPTOR ; ;CHECK FOR DOT COMMANDS TACKED IN VIA ?RN AND POSSIBLE NEW ;INDIRECTS HERE. PUT IN VIA SCML$ AND GO BACK IF FOUND. CMPB #'.,@2(R0) ;DOT COMMAND? BEQ 18$ ;YES, HAVE TO PACK LINE CMPB #'@,@2(R0) ;@ COMMAND? BNE 17$ ;NO, CHECK * 18$: MOV R1,-(SP) ;GRAB COUPLE REGS FOR SCRATCH MOV R2,-(SP) MOV R3,-(SP) MOV 2(R0),R1 ;LINE ADDR MOV @R0,R2 ;SIZE OF LINE MOV #PRELN2,R3 ;OUTPUT LINE ADDR ;HERE COPY LINE AND SET .SCML STUFF UP 16$: MOVB (R1)+,(R3)+ ;COPY A BYTE SOB R2,16$ ;DO ALL OF THEM CLRB (R3)+ ;MAKE IT ASCIZ CLRB (R3)+ ;MAKE IT ASCIZ SCML$ #GTAB,#PRELN2 ;"PUT INTO" GCML$ PGM ;HOPE GCML$ PGM HANDLES THESE OK. MOV (SP)+,R3 MOV (SP)+,R2 MOV (SP)+,R1 BR 10$ ;GO GET "NEXT" COMMAND LINE 17$: ;CHECK * COMMANDS CMPB #'*,@2(R0) ;IS THIS A SPECIAL? BEQ 30$ ;BR IF YES CMPB #'<,@2(R0) ;PROCEDURE FROM PREDEFINED AREA? BEQ 45$ ;IF YES, BRANCH THERE CALL DOMCR ;FORCE A MCR LINE BR 10$ ;GOFER NEXT ; ; COMMAND READ ERROR ; 20$: CMPB #GE.EOF,G.ERR(R0);END FILE? BNE 10$ ;NOPE, IGNORE IT ; 25$: EXIT$S ;YUP, EXIT QUIETLY ; ; ; SPECIAL COMMANDS ; 30$: DEC (R0)+ ;COUNT THE * INC (R0) ;POINT TO NEXT ; CMPB #'Q,@(R0) ;QUIET? BEQ 35$ CMPB #'N,@(R0) ;NOQUIET? BEQ 40$ CMPB #'E,@(R0) ;EXIT? BEQ 25$ ;BYE ; CMPB #'D,@(R0) ;DELAY? BEQ 33$ ;DO IT CMPB #'R,@(R0) ;RESET? BNE 10$ ;IF NOT, FORGET IT RCML$ #GTAB ;YES, SET COMMAND INPUT TO TOP LEVEL 49$: BR 10$ ;GET NEXT 33$: ; MRKT$S #1,#1,#2 ;WAIT ONE SEC WTSE$S #1 BR 49$ ;AND GO FOR NEXT ; 35$: INC .ECHOF ;SET NO ECHO BR 49$ 40$: CLR .ECHOF ;SET ECHO BR 49$ ; ; 45$: JSR PC,PRCCAL ;CALL SCML$ TO GET PROC (AND ARGS) BR 49$ ;THEN GET LINE. ; ;THIS PERMITS LINES OF FORM ;