.TITLE COMND .IDENT /M01/ ; ; COPYRIGHT (C) 1976 ; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. ; ; THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A ; SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE INCLU- ; SION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR ANY ; OTHER COPIES THEREOF, MAY NOT BE PROVIDED OR OTHERWISE MADE ; AVAILABLE TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH SYSTEM ; AND TO ONE WHO AGREES TO THESE LICENSE TERMS. TITLE TO AND ; OWNERSHIP OF THE SOFTWARE SHALL AT ALL TIMES REMAIN IN DEC. ; ; THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT ; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL ; EQUIPMENT CORPORATION. ; ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS ; SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. ; ; VERSION 01 ; ; AUTHOR: L. WADE 1-JUN-72 ; ; MODIFIED BY: ; ; E. POLLACK U. OF W. 19-DEC-73 ; ; D. N. CUTLER 27-JUL-75 ; ; COMMAND SCANNER ; ; READ AND DISPATCH ON COMMAND ; ; INPUTS: ; ; R1=PERIOD CHARACTER. ; R5=ADDRESS OF FLAG WORD (F.1). ; .ENABL LSB CMN:: MOV #CMBF-1,CMSTP ;INITIALIZE DESCRIPTOR MOV #CMBF-1,CMST2 ; MOV #SDINP+2,R4 ;POINT TO SECONDARY INPUT LINE DESCRIPTOR MOV #SDBUF-1,(R4) ;INITIALIZE DESCRIPTOR MOV (R4),-(R4) ; CALL 70$ ;WRITE PERIOD INTO SECONDARY BUFFER CALL CMCIN ;GET FIRST CHARACTER OF COMMAND CMPNE #SEMI,R1,5$ ;NOT A COMMENT? JMP COMNT ;PROCESS COMMENT 5$: MOV #/4,NCNT ;SET LENGTH OF COMMAND TABLE MOV #CMTAB,R3 ;POINT TO COMMAND TABLE CM2: MOV 2(R3),R2 ;PREPARE TO READ DEFINED COMMAND MOV CMSTP,T1 ;PREPARE POINTER TO READ USER'S COMMAND CM4: MOV CMST2,T2 ; .. MOV #T1,R4 ;GET USER'S COMMAND CHARACTER CALL GCI ; .. .WORD CM5 ;NEED MORE FROM FILE MOVB (R2)+,R0 ;GET NEXT COMMAND CHARACTER BMI CM6 ;IF MI END OF COMMAND CMPEQ R1,R0,CM4 ;CHARACTERS MATCH? 10$: CMP (R3)+,(R3)+ ;NO. TRY NEXT COMMAND. DEC NCNT BGT CM2 BR ILCM1 ;NO MORE TO TRY. ERROR CM5: CALL CMCIN ;READ USER'S COMMAND FROM FILE CMPEQ R1,#LF,40$ ;END OF LINE? BR CM4 ;GO CHECK NEW CHARACTER CM6: CALL ALPH1 ;ALPHABETIC? BCC 10$ ;IF CC YES TSTB -(R2) ;POINT TO TERMINAL BYTE BITEQ #SPECF,(R5),23$ ;NO SPECIAL PROCESSING ACTIVE? CMPEQ (R3),CMADR,30$ ;COMMAND ADDRESS MATCH? BITNE #LITFG,(R5),50$ ;LITERAL PROCESSING ACTIVE? 23$: BITNEB #ENDF,(R2),ILCM1 ;UNEXPECTED END DIRECTIVE? 27$: BITNEB (R2),(R5),ILCM1 ;COMMAND NOT LEGAL IN CURRENT CONTEXT? 30$: MOVB R1,GCSCH ;SAVE TERMINAL BYTE RETURN ; CMCIN: CALL CCIN ;READ FROM INPUT FILE CALL 70$ ;WRITE CHARACTER INTO SECONDARY BUFFER CMP R1,#172 ;CHECK FOR LOWER CASE LETTERS BGT 60$ CMP R1,#140 BLE 60$ BIC #40,R1 ;CONVERT TO UPPER CASE BR 60$ ; ILCM1: CALL CMCIN ;NOW ADD REST OF LINE CMPNE R1,#LF,ILCM1 ;NOT END OF LINE? 40$: BITNE #LITFG,(R5),50$ ;LITERAL PROCESSING ACTIVE? MOVB R1,GCSCH ;SAVE LINE FEED CHARACTER CLR R1 ;CONVERT STRING TO ASCIZ CALL 60$ ;STORE NULL CHARACTER IN BUFFER JMP ILCM ; 50$: TST (SP)+ ;CLEAN STACK COMB $SDISW ;SET SECONDARY INPUT FLAG JMP TEXT ;PROCESS TEXT 60$: MOV #CMSTP,R4 ;POINT TO COMMAND DESCRIPTOR BR 80$ ; 70$: MOV #SDINP,R4 ;POINT TO SECONDARY INPUT DESCRIPTOR 80$: JMP WCI ;WRITE CHARACTER IN COMMAND BUFFER .DSABL LSB .END