.TITLE GETCMD ; ;+ ; ; GETCMD -- SUBROUTINE TO PROVIDE FORTRAN ACCESS TO THE SYSTEM ; COMMAND-LINE PROCESSING ROUTINES ; ; CALL GETCMD (BUFFER, LENGTH, PROMPT, PLENGTH, IERR) ; CALL GETCMD (BUFFER, LENGTH,, 0, IERR) ; ; GET COMMAND-LINE ; ; BUFFER - 80 BYTE BUFFER ; LENGTH - LENGTH OF RETURNED COMMAND-LINE ; PROMPT - OPTIONAL USER PROMPT ; PLENGTH - LENGTH (IN BYTES) OF USER PROMPT, OR ; ZERO FOR DEFAULT PROMPT (' >') ; IERR - ERROR RETURN CODE (0 - NO ERRORS) ; ;- ; .MCALL GCMLB$,GCML$,RCML$,CCML$ ; GCLBLK: GCMLB$ 4,,,4 ;DEFINE GETCMD CONTROL BLOCK: ; MAXIMUM NESTING DEPTH = 4 ; LOGICAL UNIT NUMBER = 4 ; (MUST BE ASSIGNED TO TI: BY TKB) .EVEN ; GETCMD:: CLR @12(R5) ;IERR = 0 MOV @10(R5),R2 ;GET PROMPT LENGTH BEQ DFLT ; =0 -> USE DEFAULT PROMPT MOV 6(R5),R1 ;GET PROMPT STRING ADDRESS GCML$ #GCLBLK,R1,R2 ;GET COMMAND LINE (USER PROMPT) BCS ERROR BR COPY DFLT: GCML$ #GCLBLK ;GET COMMAND LINE (DEFAULT PROMPT) BCS ERROR COPY: MOV G.CMLD+2(R0),R1 ;GET ADDRESS OF COMMAND-LINE BUFFER MOV 2(R5),R2 ;GET RETURN BUFFER ADDRESS MOV G.CMLD(R0),R3 ;GET BYTE COUNT MOV R3,@4(R5) ;COPY FOR RETURN BEQ EXIT ;CHECK FOR 0, JUST IN CASE LOOP: MOVB (R1)+,(R2)+ ;COPY COMMAND-LINE SOB R3,LOOP ;LOOP UNTIL DONE BR EXIT ; ; CALL RESCMD (IERR) ; ; RESETS INDIRECT COMMAND FILE SCANNING TO THE TOP LEVEL ; ; IERR = ERROR RETURN CODE ; RESCMD:: CLR @12(R5) ;IERR = 0 RCML$ #GCLBLK ;RESET BCS ERROR ;ERROR RETURN BR EXIT ;NORMAL RETURN ; ; CALL CLOCMD (IERR) ; ; CLOSES THE CURRENT COMMAND FILE ; ; IERR = ERROR RETURN CODE ; CLOCMD:: CLR @12(R5) ;IERR = 0 CCML$ #GCLBLK ;CLOSE BCS ERROR ;ERROR RETURN BR EXIT ;NORMAL RETURN ; ERROR: MOVB G.ERR(R0),@12(R5) ;IERR = ERROR RETURN CODE BYTE EXIT: RETURN ;RETURN TO CALLER ; .END