.TITLE DATPLG .ENABL LC .PSECT USROM $DIAGN=1 ; GENERATE PRINTING MESSAGE IN CASE OF MONITOR ERROR .PAGE .MCALL SPAL11,GETID,MOVBM,IDDEF .GLOBL GETORI .GLOBL CODPLG,BITSAD .GLOBL STASTR .GLOBL APP,DISAPP .GLOBL EXDURE,CVDAT,GETPAR,VUEFLG .GLOBL DTPRBL SPAL11 IDDEF COMMA=54 .PAGE .SBTTL Points d'entree pour les prologue routines ;;;;;;;;;;;;;;;;;; ; ; DATPLG: ; ; ON INPUT : R2 -> AREA WITH: ; - OFFSET TO AREA OF ARGUMENTS ; - ID NUMBER ; - O.VAL. FROM CB ; - Address of format ; - DAY OF THE WEEK ; - DATE & TIME (5 WORDS) ; ; CODPLG= - Identifyer DATPLG:: BEGIN WITH ERROR BLOCK MOV R2,R1 ; KEEP IN R1 MOV R2,R3 ADD (R1)+,R3 ; R1 -> ID, R3 -> ARGUMENTS AREA IF MOV 18.(R1),-(SP) ; KEEP DURATION VALUE SUB #2,R3 END MOV (R1),BUFDRI+2 ; FOR EXDURE GETID (R1)+,#BUFFER ; GET ID BLOCK INTO MEMORY EXIT TO ERROR BLOCK IF CS,OFFSET=LONG MOV R1,R0 ADD #6,R0 ; POINTS ON DATE (5 WORDS) PUSH R1 MOV #BUFDAT,R1 CALL CVDAT PULL R1 MOV #BUFDAT,BUFDRI MOV #BUFDAT,BUFDRI+4 MOV #ORIBUF,(R3)+ PUSH R1,R3 MOVBM BUFFER+IDORI,R3 MOV #ORIBUF,R2 CALL GETORI CLRB (R2) PULL R3,R1 MOV #BUFFER+IDNAME,(R3)+ ; nom du point CASE ; pour les depassements de seuils. OF MOV #TMFORM,2(R1) MOV #UNDER,(R3)+ MOV #APP,(R3)+ OF ,OFFSET=LONG MOV #TMFORM,2(R1) MOV #UNDER,(R3)+ MOV #DISAPP,(R3)+ OF ,OFFSET=LONG MOV #TMFORM,2(R1) MOV #ABOVE,(R3)+ MOV #APP,(R3)+ OF ,OFFSET=LONG MOV #TMFORM,2(R1) MOV #ABOVE,(R3)+ MOV #DISAPP,(R3)+ ; ; pour les TS ; the slice type tells if the states of names ... ; ... are coded in binary way (0) or in bit per bit way (1) ; OF ,OFFSET=LONG STACOM: BEGIN STACOM ; Compute state name MOVBM BUFFER+IDSLTY,R4 ; R4 = PARAMETER VALUE MOVBM BUFFER+IDSTAT,R2 ; INDEX TO NAMES OF STATES ASL R2 MOV STASTR-2(R2),R2 ; R2 -> TO START OF NAMES OF STATES STRING MOV (R1),R5 ; VALUE FROM AREA (O.VAL.) MOV (R1),BUFDRI+6 ; VALUE -> BUFFER EXDURE MOV #TSFORM,2(R1) DEC R2 REPEAT INC R2 ; FIND EITHER , OR "0" ACCORDING TO O.VAL. MOV R2,R0 ; R2 POINTS TO START OF STRING WHILEB <(R2) NE> ANDB <(R2) NE #COMMA> ; SEARCH FOR "," OR INC R2 ; END OF STRING END IF ; IF EQ, binary DEC R5 ; LOOP UNTIL VALUE REACHED ELSE ; ELSE, LOOP UNTIL NEXT BIT ON THE RIGHT ASR R5 ; IS SET ON. IF CS ; IF CS, FOUND BIT BIS #100000,R5 ; MAKE R5 < 0 TO STOP LOOPING END END UNTIL ORB <(R2) EQ> SUB R0,R2 ; R2 = LENGTH MOV R2,(R3)+ MOV R0,(R3)+ ; R0 = START OF STRING END STACOM IF MOV #BUFDRI,R0 MOV #BUFDRO,10(R0) ; OUTPUT BUFFER ADDRESS PUSH R0,R1 MOV #DTPRBL,R1 MOV 2(R0),(R1) MOV R1,R0 PULL R1 CALL GETPAR IF AND MOV (R0),PARAM1 ; Save first parameter PULL R0 CALL EXDURE MOV BUFDRO+4,R5 ; Preceding state from exdure IF ANDB ; If correct and desired MOV #DLDUR,(R3)+ MOVBM BUFFER+IDSLTY,R4 ; R4 = PARAMETER VALUE MOVBM BUFFER+IDSTAT,R2 ; INDEX TO NAMES OF STATES ASL R2 MOV STASTR-2(R2),R2 ; R2 -> TO START OF NAMES OF STATES STRING DEC R2 REPEAT INC R2 ; FIND EITHER , OR "0" ACCORDING TO O.VAL. MOV R2,R0 ; R2 POINTS TO START OF STRING WHILEB <(R2) NE> ANDB <(R2) NE #COMMA> ; SEARCH FOR "," OR INC R2 ; END OF STRING END IF ; IF EQ, binary DEC R5 ; LOOP UNTIL VALUE REACHED ELSE ; ELSE, LOOP UNTIL NEXT BIT ON THE RIGHT ASR R5 ; IS SET ON. IF CS ; IF CS, FOUND BIT BIS #100000,R5 ; MAKE R5 < 0 TO STOP LOOPING END END UNTIL ORB <(R2) EQ> SUB R0,R2 ; R2 = LENGTH MOV R2,(R3)+ MOV R0,(R3)+ ; R0 = START OF STRING MOV BUFDRO,(R3)+ ; Hours total of preceding state MOV BUFDRO+2,(R3)+ ; 1/10 hours " " " MOV BUFDRO+6,(R3)+ ; Annual total " " " MOV BUFDRO+8.,(R3) ; Annual total(1/10) " " ELSE MOV #FRNUL,(R3) END ELSE MOV #FRNUL,(R3) PULL R0 END ELSE MOV #FRNUL,(R3) END ; ; Print alarm for too long duration. ; OF INVOKE STACOM ; NAME OF STATE MOV #DURFOR,2(R1) MOV (SP)+,(R3)+ ; TOTAL HOURS NUMBER MOV #DTPRBL,R0 MOV BUFDRI+2,(R0) CALL GETPAR EXIT TO ERROR BLOCK IF AND MOV 2(R0),(R3) ; THRESHOLD END MOV R1,R0 TST (R0)+ ; R0 POINTS TO START OF ARGUMENTS (+CLC) MOV R0,R2 CLR R1 ERROR BLOCK MOV #-1,R1 END RETURN .END