SUBROUTINE GCMD(LUN,ICMD,ISW) C C C COMPONENT: GETCMD C C DATE: 10-JUL-79 C C AUTHOR: GR JOHNSON C BATTELLE NORTHWEST C P O BOX 999 C RICHLAND WA 99352 C C SOURCE: FORTRAN IV-PLUS C C CALLING SEQUENCE: C C CALL GCMD (LUN, ICMD,ISW) C CALL GCMDP(LUN,PRMPT,ICMD,ISW) C C LUN = INTEGER ARGUMENT SPECIFYING THE TERMINAL LOGICAL C UNIT NUMBER TO BE USED FOR CONTINUATION LINE INPUT. C C PRMPT = VARIABLE OR ARRAY CONTAINING THE PROMPT STRING TO C BE WRITTEN BEFORE ACCEPTING TERMINAL INPUT. C THE STRING MAY INCLUDE UP TO 80 ASCII CHARACTERS C INCLUDING THE MANDATORY NULL TERMINATOR. C C ICMD = 80 BYTE ARRAY TO RECEIVE THE COMMAND LINE. C C ISW = VARIABLE TO RECEIVE THE INTEGER STATUS WORD. C C +NN = SUCCESS. NN CHARACTERS RECEIVED. C C -10 = END-OF-FILE ON LUN C C -NN = OTHER FCS ERROR C C C DESCRIPTION: C C "GCMD" FETCHES AN MCR COMMAND LINE, PROMPTS FOR AND ACCEPTS C CONTINUATION LINES (UP TO 79 CHARACTERS), STRIPS TRAILING BLANKS AND C COMMENT FIELDS (DENOTED BY !), REPLACES ASCII TAB CHARACTERS AND C MULTIPLE SPACES WITH A SINGLE SPACE, CONVERTS LOWER CASE CHARACTERS, C AND RETURNS THE COMMAND LINE TERMINATED BY AN ASCII NULL TO THE C CALLING PROGRAM. C C THE ENTRY POINT "GCMDP" ALLOWS THE USER TO BYPASS THE CALL TO C "GET MCR COMMAND LINE", PROVIDING A HANDY ROUTINE FOR READING AND C PROCESSING PROMPTED COMMAND LINES. C C EXAMPLES: C C CALL GCMD(5,ICMD,ISW) C C CALL GCMDP(5,'COMMAND? ',ICMD,ISW) C C C PARAMETERS AND VARIABLES C PARAMETER EOS=0 ! "END-OF-STRING" C BYTE ICMD(1) ! COMMAND LINE BUFFER BYTE PRMPT(1) ! PROMPT BUFFER INTEGER ISW ! INTEGER STATUS WORD C C C ENTRY POINT GCMD -- FETCH MCR COMMAND LINE C ILEN=0 CALL GETMCR(ICMD,ISW) IF(ISW.LE.0) GO TO 9990 DO 10 IPNT=1,ISW IF(ICMD(IPNT).EQ.0) GO TO 10 ILEN=ILEN+1 ICMD(ILEN)=ICMD(IPNT) 10 CONTINUE ILEN=LENGTH(ICMD,ILEN) ICMD(ILEN+1)=EOS IF(ILEN.EQ.0) GO TO 9990 GO TO 20 C C C ENTRY POINT GCMDP -- FETCH LUN COMMAND LINE C ENTRY GCMDP(LUN,PRMPT,ICMD,ISW) CALL PROMPT(LUN,PRMPT,ICMD,79,,,ISW) IF(ISW.LT.0) GO TO 9999 ILEN=LENGTH(ICMD,ISW) ICMD(ILEN+1)=EOS IF(ILEN.EQ.0) GO TO 9990 C C C C FETCH CONTINUATION LINES AS NECCESSARY C 20 IF(ICMD(ILEN).NE.'-') GO TO 30 CALL PROMPT(LUN,'> ',ICMD(ILEN),80-ILEN,,,ISW) IF(ISW.LT.0) GO TO 9990 ILEN=LENGTH(ICMD,79) ICMD(ILEN+1)=EOS GO TO 20 C C C STRIP COMMENT FIELD AND COMPRESS COMMAND LINE C 30 IF(ILEN.EQ.0) GO TO 9990 CALL LOCATE(ICMD,'!',IPOS) IF(IPOS.GT.0) ICMD(IPOS)=EOS CALL COMPRS(ICMD,ILEN) CALL UPCASE(ICMD,ILEN) C C C RETURN TO CALLER C 9990 ISW=ILEN 9999 RETURN END