; DSMPR1 - PARSE COMMAND LINE OR BLOCKS USED EXPRESSION ; ; SET UP FOR TPARS CALL, CALLED FROM FORTRAN PROGRAM ; ; CALL DSMPR1 (IBUFAD, NCH, NER) ; ; IBUFAD = BUFFER ADDRESS! (USE GETADR IN CALLING ROUTINE) ; UPDATED ON RETURN TO POINT TO UNPARSED SECTION OF STRING. ; NCH = NUMBER OF CHARACTERS TO PARSE. ; UPDATED ON RETURN TO BE NUMBER OF CHARACTERS REMAINING TO ; BE PARSED. ; NER = 0 OK, NON 0 NOT OK ; ; IBUFAD AND NCH ARE RETURNED TO DSMPR1 CAN BE CALLED OVER AND OVER ; FOR DEV:[UIC] WHEN PARSING THE BLOCKS ALLOWED EXPRESSION. ; ; DSMPR1 SETS UP FOR THE TPARS CALL. DSMPR2 IS THE STATE TABLE. ; ; THE TWO FORMS PARSING ARE: ; 1) COMMAND LINE I.E. ; DSM DB1:[225,*] ; OR ; 2) BLOCKS ALLOWED EXPRESSION I.E. ; DB0:[225,*] + DB0:230,*] + DB0:[227,3] = 180500 ; ; DEVICE AND UIC ARE OPTIONAL IN FORM 1 BUT ARE REQUIRED IN FORM 2, ; THOUGH THE FINAL CHECK IS NOT MADE IN DSMPR1, THE FLAG BITS ARE ; SET ACCORDINGLY. ; .ENABL AMA ; ; .MCALL SUBR,RTN,PUSH,POP,MINIT ; DRS MACROS DB1:[225,5]SF/LIB ; .GLOBL DSMPR2,DSMKTB,.TPARS ; MINIT ; SUBR DSMPR1,3 PUSH R5 CLR R1 ; BLANK SUPPRESS MOV #DSMKTB,R2 ; KEYWORD TABLE MOV @(R5),R4 ; BUFFER ADDRESS MOV @2(R5),R3 ; NUMBER OF CHARACTERS MOV #DSMPR2,R5 ; ; CALL .TPARS TO PARSE ; CALL .TPARS ; BCS ERROR POP R5 ; RESTORE PARAM POINTER MOV R4,@(R5) ; UPDATE BUFFER ADDRESS MOV R3,@2(R5) ; UPDATE NCH MOV #0,@4(R5) ; CLEAR ERROR CODE BR RETURN ; ; ERROR ; ERROR: POP R5 ; RESTORE PARAM POINTER MOV #-1,@4(R5) ; SET ERROR TO -1 ; RETURN: RTN ; RETURN TO CALLER ; .END