; VALHLP - PRINT INFORMATION CONCERNING THE CURRENT INPUT REQUEST ; LAST EDIT: 9-NOV-81 ; .NLIST .LIST TTM .NLIST BEX .TITLE VALHLP .LIST ; .IDENT /V003/ ; ; THIS ROUTINE OBTAINS INFORMATION FROM THE VAL COMMON ; CONCERNING THE CURRENT INPUT REQUEST AND PRINTS THIS ; INFORMATION ON TI: ; .PSECT VALIO ; ; THIS MODULE SHOULD BE ASSEMBLED PRECEDED BY 'VALMFD' ; RDOFF$ ;DEFINE READIT BLOCK OFFSETS ; .GLOBL OUT,OUTS ; GENERAL MESSAGE OUTPUT ROUTINE ; ; PARAMETER LIST OFFSETS: P1=2 P2=4 P3=6 P4=10 P5=12 P6=14 P7=16 ; ; VALHLP::MOV R2,-(SP) MOV R3,-(SP) MOV R4,-(SP) MOV R5,-(SP) CALL VMAP ;MAP VAL COMMON MOV #MES10,R2 ;'REQUIRED: ' CALL MOUT ; MOVB RD.INW(R0),R2 ;GET INWAS BMI HLPERR CMP R2,#9. BGT HLPERR ASL R2 ;INDEX DISPATCH TABLE JMP @HLPTBL(R2) ; HLPTBL: .WORD HLPERR .WORD HLPINT .WORD HLPREA .WORD HLPSTR .WORD HLPINT .WORD HLPSTR .WORD HLPTXT .WORD HLPINT .WORD HLPREA .WORD HLPDIR ; ; HLPERR: MOV #ERRMES,R2 CALL MOUT CALL OUTPUT BR HLPDON ; HLPINT: MOV #IOUT,CONVRT ;SET DATA CONVERSION ROUTINE MOV #MES1,R2 ;'INTEGER ' BR CMN1 ; HLPREA: MOV #ROUT,CONVRT ;SET DATA CONVERSION TYPE MOV #MES2,R2 ;'REAL ' CMN1: CALL MOUT BIT #2,RD.ICH(R0) ;DEFAULT SUPPLIED ? BNE 1$ ; MOV #MES6,R2 ;OUTPUT DEFAULT VALUE CALL MOUT MOV RD.DFA(R0),R2 CALL @CONVRT ; 1$: BIT #4,RD.ICH(R0) ;RANGE CHECKING ? BNE 2$ ; MOV #MES7,R2 ;'RANGE ' CALL MOUT MOV RD.LWA(R0),R2 ;OUTPUT LOW LIMIT CALL @CONVRT MOV #MES8,R2 ;' TO ' CALL MOUT MOV RD.HWA(R0),R2 ;OUTPUT HIGH LIMIT CALL @CONVRT ; 2$: CALL OUTPUT BR HLPDON ; ; ; HLPSTR: MOV #MES3,R2 ;'STRING ' BR CMN2 ; HLPTXT: MOV #MES4,R2 CMN2: CALL MOUT MOV #MES9,R2 CALL MOUT MOV R0,R2 ;POINT TO BUFFER LENGTH ADD #RD.LEN,R2 CALL IOUT CALL OUTPUT BR HLPDON ; ; ; ; HLPDIR: MOV RD.LIB(R0),R2 ;POINT TO DIRECTORY INC R2 MOV #DIR,R3 ;BUFFER FOR PRINT OF DIR MOV #50.,R4 ;ITS LENGTH 1$: TSTB (R2) ;CHARACTER? BGT 3$ ;YES COPY IT TSTB 2(R2) ;END OF DIRECTORY BNE 2$ ;IS .BYTE 0,0 TSTB 3(R2) ;SO QUIT LOOP BEQ 5$ ;IF END ; 2$: MOVB #' ,(R3)+ ;OUTPUT SPACE BETWEEN ITEMS ADD #2,R2 ;SKIP LOOKUP FLAG AND VALUE BR 4$ ;KEEP LOOPING ; 3$: MOVB (R2)+,(R3)+ ;COPY CHAR 4$: SOB R4,1$ 5$: CLRB (R3)+ MOV #MES5,R2 CALL MOUT CALL OUTPUT ; MOV #MES11,R2 ;'OR ' CALL MOUT BR HLPINT ; HLPDON: MOV (SP)+,R5 MOV (SP)+,R4 MOV (SP)+,R3 MOV (SP)+,R2 RETURN ; ; ; ; OUTPUT - WRITE CURRENT OUTS BUFFER ; OUTPUT: MOV #BLK0,R5 CALL OUTS RETURN ; ; ; ; MOUT - QUEUE A STRING TO OUTS ; R2=STRING ADDRESS ; MOUT: MOV #BLK,R5 MOV R2,P1(R5) BR OUT2 ; ; ; IOUT - QUEUE AN INTEGER TO OUTS ; R2=ADDRESS OF INTEGER VALUE ; IOUT: MOV #IBLK,R5 BR OUT1 ; ; ; ; ROUT - QUEUE A REAL TO OUTS ; R2=ADDRESS OF REAL VALUE ; ROUT: MOV #RBLK,R5 OUT1: MOV R2,P2(R5) OUT2: CALL OUT RETURN ; ; ; CONVRT: .WORD 0 ;ADDRESS OF INTEGER/REAL CONVERSION ROUTINE ; IBLK: .WORD 2,IMES,0 RBLK: .WORD 2,RMES,0 BLK: .WORD 1,0 BLK0: .WORD 0 ; IMES: .ASCIZ /######/ RMES: .ASCIZ /######.###/ ERRMES: .ASCIZ /UNRECOGNISED REQUEST CODE/ MES1: .ASCIZ /INTEGER/ MES2: .ASCIZ /REAL/ MES3: .ASCIZ /STRING/ MES4: .ASCIZ /TEXT/ MES5: .ASCII /ONE OF: / DIR: .BLKB 50. MES6: .ASCIZ /, DEFAULT=/ MES7: .ASCIZ /, RANGE=/ MES8: .ASCIZ / TO / MES9: .ASCIZ /, MAX. LENGTH=/ MES10: .ASCIZ /REQUIRED: / MES11: .ASCIZ /OR / .EVEN ; .END