.TITLE GETCMD - REREADS THE COMMAND LINE .IDENT /1.00/ ; ; THIS PROGRAM PARSES THE INPUT LINE FOR PCHIST ; ; WRITTEN BY: ROGER LIPSETT 04-MAR-79 ; ; .MACRO BITS NAME,NO NAME'_V=NO NAME=1@NO .ENDM $TPADEF $RMSDEF $CLISERVDEF $CLIVERBDEF .LIST ME BITS GRAN_PRES,1 BITS OUTPUT_PRES,2 BITS SHORT_PRES,5 BITS LONG_PRES,6 BITS IMAGE_PRES,7 .NLIST ME ; ; .PSECT GETCMD_CODE,QUAD,RD,NOWRT,EXE,SHR .ENABL LSB .ENTRY GETCMD,^M MOVAB CLI_REQBLK,R8 ;POINT TO COMMAND REQUEST DESCRIPTOR PUSHAB CLI_REQBLK ;STORE ARGUMENT FOR CALL CALLS #1,G^SYS$CLI ;CALL CLI TO GET A COMMAND LINE MOVZWL CLI$W_RQSIZE(R8),R9 ;NUMBER OF BYTES READ IN BNEQ 1$ ;IF ZERO, PROMPT FROM FORTRAN. 2$: CLRL R0 RET ; INIT TPARSE DATA BASE 1$: MOVL CLI$A_RQADDR(R8),R7 ;START OF STRING TO R7 MOVC3 R9,(R7),IN_BUF ;MOVE STRING TO INPUT BUFFER MOVAB IMAGE_FILE,R0 ;START ADDRESS OF TPARSE TABLE AREA MOVAB END_TAB,R1 ;ADDRESS OF END TO TPARSE TABLE SUBL2 R0,R1 ;NUMBER OF BYTES IN TABLE MOVC5 #0,(R0),#0,R1,(R0) ;CLEAR THE STORAGE MOVL #1,FILE_TRIES ;INIT FILE_TRIES MOVAB TPAR_DATA,R0 ;ADDRESS NEEDED FOR TPARSE MOVZWL R9,TPA$L_STRINGCNT(R0) ;LENGTH OF STRING MOVAB IN_BUF,TPA$L_STRINGPTR(R0) ;POINT TO STRING PUSHAL TABLE_KEY ;ARGUMENT FOR TPARSE PUSHAL TABLE_STATE ;ARGUMENT FOR TPARSE PUSHL R0 ;ARGUMENT FOR TPARSE CALLS #3,LIB$TPARSE ;INVOKE TPARSE BLBS R0,4$ ;IF LBS, SUCCESS BRW 2$ ; ; NOW SET UP THE INFORMATION FOR PCHIST ; 4$: BBC #SHORT_PRES_V,COMMAND,5$ ;BRANCH IF /SHORT NOT SPECIFIED. MNEGL #1,SUMMARY_ONLY ; /SHORT GIVEN, SO SET SUMMARY FLAG. 5$: BBC #LONG_PRES_V,COMMAND,11$ ;BRANCH IF /LONG NOT SPECIFIED. CLRL SUMMARY_ONLY ; /LONG GIVEN, SO CLEAR SUMMARY FLAG. 11$: BBC #IMAGE_PRES,COMMAND,12$ ;IF NO IMAGE FILE GIVEN, ERROR. BRW 2$ 12$: MOVAL IMAGE_FILE,R7 MOVW (R7),R9 MOVC3 R9,@4(R7),IMAGE_NAME ; TRANSFER FILE NAME STRING MOVL R9,IMAGE_LENGTH ; SAVE LENGTH CLRL OUTPUT_LENGTH ; ZERO OUTPUT FILE LENGTH BBC #OUTPUT_PRES_V,COMMAND,15$ ; BRANCH IF NO OUTPUT FILE SPEC. MOVAL OUTPUT_FILE,R7 MOVW (R7),R9 MOVC3 R9,@4(R7),OUTPUT_NAME ; TRANSFER FILE NAME STRING MOVL R9,OUTPUT_LENGTH 15$: MOVL #1,R0 ; RETURN WITH SUCCESS. RET ; ; THESE ARE THE STATE TABLES. ; .PSECT GETCMD_FSM,QUAD,RD,NOWRT,NOEXE,SHR COMMA=^A/,/ SEMI=^A/;/ $INIT_STATE TABLE_STATE,TABLE_KEY ;INITALIZE TPARSE $STATE LOOK ;INITIAL STATE $TRAN '/',SWITCH ;DO WE HAVE A SWITCH $TRAN !IMAGE_SPEC,TRYMORE,,IMAGE_PRES,COMMAND ;IF NO SWITCH ;THEN IT MUST BE A DESCRIPTION OF IMAGE SPEC $STATE SWITCH $TRAN 'OUTPUT',OUTPUT,,OUTPUT_PRES,COMMAND $TRAN 'SHORT',,,SHORT_PRES,COMMAND $TRAN 'LONG',,,LONG_PRES,COMMAND $TRAN 'GRANULARITY',GRAN,,GRAN_PRES,COMMAND $STATE TRYMORE ;DUMMY STATE ********************* $TRAN TPA$_EOS,TPA$_EXIT ;ALL DONE $TRAN TPA$_LAMBDA,LOOK ; ; THE /OUTPUT SWITCH ; $STATE OUTPUT $TRAN ':' $TRAN '=' $STATE $TRAN !FILE_SPEC,TRYMORE,,,OUTPUT_FILE ; ; THE /GRANULARITY SWITCH ; $STATE GRAN $TRAN ':' $TRAN '=' $STATE $TRAN TPA$_DECIMAL,TRYMORE,,,GRANULE ; ; THE IMAGE SPEC ; $STATE IMAGE_SPEC $TRAN TPA$_LAMBDA,,COUNT_IT ;CAN ONLY COME THROUGH HERE ; ONE TIME - ELSE ERROR $STATE $TRAN !FILE_SPEC,TRYMORE,,,IMAGE_FILE ; ; PARSE A FILE SPEC ; $STATE FILE_SPEC ;COME HERE FOR /OUTPUT AND FOR IMAGE. $TRAN !DEVICE ;SEE IF DEVICE NAME HERE $TRAN TPA$_LAMBDA $STATE $TRAN '[' ;START OF UIC $TRAN TPA$_LAMBDA,NO_UIC $STATE UIC_HERE $TRAN TPA$_STRING ;UIC NAME $STATE $TRAN ']' $TRAN COMMA,UIC_HERE ;MORE TO UIC $STATE NO_UIC $TRAN TPA$_STRING $TRAN TPA$_LAMBDA $STATE $TRAN '.' $TRAN TPA$_LAMBDA,TPA$_EXIT $STATE $TRAN TPA$_STRING $STATE $TRAN SEMI ;VERSION $TRAN TPA$_LAMBDA,TPA$_EXIT $STATE $TRAN TPA$_DECIMAL $TRAN TPA$_LAMBDA,TPA$_EXIT ; $STATE DEVICE $TRAN TPA$_STRING $STATE $TRAN ':',TPA$_EXIT $END_STATE ; ; END OF PARSE TABLES ; ; ; ACTION ROUTINES ; .PSECT GETCMD_CODE,QUAD,RD,NOWRT,EXE,SHR COUNT_IT: .WORD 0 DECL FILE_TRIES BGEQ 10$ CLRL R0 ;FAILURE - TRIED TO DO THIS MORE THAN ONCE 10$: RET .PSECT GETCMD_DATA,QUAD,RD,WRT,NOEXE,NOSHR .ALIGN BYTE IN_BUF: .BLKB 100 .ALIGN LONG CLI_REQBLK: $CLIREQDESC RQTYPE=CLI$K_GETCMD ;REQUEST DESC FOR GETTING THE ;COMMAND LINE FROM THE CLI ; ; DATA AREA FOR TPARSE ; TPAR_DATA:: .LONG TPA$K_COUNT0 .LONG TPA$M_ABBREV .BLKL TPA$K_LENGTH0-8 FILE_TRIES:: .LONG 1 IMAGE_FILE:: .LONG 0,0 ;DESCRIPTOR FOR IMAGE FILE NAME OUTPUT_FILE:: .LONG 0,0 ;DESCRIPTOR FOR OUTPUT FILE NAME COMMAND:: .LONG 0 END_TAB:: .PSECT PCHIST,PIC,OVR,REL,GBL,SHR,NOEXE,RD,WRT,LONG TOTAL_HITS: .BLKD 1 SUMMARY_ONLY: .BLKL 1 GRANULE: .BLKL 1 IMAGE_LENGTH: .BLKL 1 OUTPUT_LENGTH: .BLKL 1 .PSECT FILE_NAMES,PIC,OVR,REL,GBL,SHR,NOEXE,RD,WRT,LONG IMAGE_NAME: .BLKB 80 OUTPUT_NAME: .BLKB 80 .END