.TITLE TIME STAMP WKLY RPT. ; ; THIS PROGRAM USES THE FILE 'TIMSUMM.DAT' TO CREATE A REPORT FOR ; MACHINE UP AND DOWN TIME, ALSO A FILE 'MACHUPTIM.DAT' IS CREATED ; FOR PROGRAM IASUTLRPT THAT HAS THE TOTAL TIME UP FOR TIME SHARING ; (IAS). THE INPUT FILE 'TIMSUMM.DAT' IS DELETED IF NO PROBLEMS ; OCCUR DURING THE EXECUTION OF THIS PROGRAM. ; .MCALL $STRUC,FSRSZ$,FDBDF$,FDAT$A,FDRC$A,EXIT$S .MCALL FDOP$A,NMBLK$,FINIT$,OPEN$A,QIOW$S,PUT$ .MCALL CLOSE$,OPEN$R,OPEN$W,GET$,DELET$,CALL $STRUC ;STRUCTURED MACRO .MCALL LUN1=1 ;ASSIGN NAME TO LUN #1 LUN2=2 ;ASSIGN NAME TO LUN #2 LUN3=3 ;ASSIGN NAME TO LUN #3 FSRSZ$ 3 ;THREE FILES TO BE OPENED TSUMMI: FDBDF$ ;FDB FOR INPUT FILE FDAT$A R.FIX,,50. ;INPUT RECORD INFO FDRC$A ,TSUMBF,50. ;INPUT RECORD INFO FDOP$A LUN1,DESCR,TSUMNM ;INPUT FILE INFO REPORT: FDBDF$ ;OUTPUT FDB FOR REPORT FDAT$A R.FIX,,133. ;OUTPUT RECORD INFO FDRC$A ,REPBF,133. ;OUTPUT RECORD INFO FDOP$A LUN2,DESCR,REPNM ;OUTPUT FILE INFO MACTIM: FDBDF$ ;OUTPUT FDB FOR MACTIM FDAT$A R.FIX,,6. ;OUTPUT RECORD INFO FDRC$A ,MACBUF,6. ;OUTPUT RECORD INFO FDOP$A LUN3,DESCR,MACNM ;OUTPUT FILE INFO TSUMNM: NMBLK$ TIMSUMM,DAT ;FILE NAME FOR TSUMMI REPNM: NMBLK$ TIMSUMREP,DAT ;FILE NAME FOR REPORT MACNM: NMBLK$ IASUPTIM,DAT ;FILE NAME MACTIM DESCR: .WORD 0,0 ;DEVICE FIELD .WORD DIRSZ,DIRNM ;DIRECTORY FIELD .WORD 0,0 ;NAME FIELD DIRNM: .ASCII /[1,5]/ ;DIRECTORY VALUE DIRSZ=.-DIRNM ;DIRECTORY VALUE SIZE .EVEN TSUMBF: .BLKB 50. ;INPUT BUFFER REPBF: .BLKB 133. ;OUTPUT REPORT BUFFER .EVEN MACBUF: .BLKW 3. ;OUTPUT MACTIM BUFFER .EVEN EOFFLG: .WORD 99. ;END OF FILE FLAG PSWT: .WORD 0. ;PROBLEM SWITCH EFSWT: .WORD 0. ;END OF FILE SWITCH MAXLIN: .ASCII /60BB/ ;# 60 TO BE CONVERTED TO BINARY LINMAX: .WORD 0. ;HOLD AREA FOR CONVERTED #60 LINCTR: .WORD 0. ;LINE COUNTER COMPOS: .ASCII / BB/ ;WORK AREA FOR CONVERSION TIPL: .WORD ;ACCUMULATION FIELDS BEGIN TTSUH: .WORD ; TTSUM: .WORD ; TTSDH: .WORD ; TTSDM: .WORD ; TMUH: .WORD ; TMUM: .WORD ; TMDH: .WORD ; TMDM: .WORD ; TAMH: .WORD ; TAMM: .WORD ; TMTRH: .WORD ; TMTRM: .WORD ; TTSAH: .WORD ; TTSAM: .WORD ;END ACCUMULATING AREA .BYTE ;HOLD DATA BYT1: .BYTE ; FROM CONVERSION BYT2: .BYTE ; SUBROUTINE FOR BYT3: .BYTE ; MOVING TO OUTPUT BYT4: .BYTE ; BUFFER. BYT5: .BYTE ;END OF HOLD AREA .PAGE MES1: .ASCII <15> <12> /ERR *OPEN$A* FOR TSUMMI NOTIFY SYSTEMS PGMMR/ L1=.-MES1 .EVEN MES2: .ASCII <15> <12> /ERR *CLOSE* FOR TSUMMI NOTIFY SYSTEMS PGMMR/ L2=.-MES2 .EVEN MES3: .ASCII <15> <12> /ERR OPEN$R FOR TSUMMI NOTIFY SYSTEMS PGMMR/ L3=.-MES3 .EVEN MES4: .ASCII <15> <12> /ERR OPEN$W FOR REPORT NOTIFY SYSTEMS PGMMR/ L4=.-MES4 .EVEN MES5: .ASCII <15> <12> /ERR OPEN$W FOR MACTIM NOTIFY SYSTEMS PGMMR/ L5=.-MES5 .EVEN MES6: .ASCII <15> <12> /ERR CLOSE FOR REPORT NOTIFY SYSTEMS PGMMR/ L6=.-MES6 .EVEN MES7: .ASCII <15> <12> /ERR CLOSE FOR MACTIM NOTIFY SYSTEMS PGMMR/ L7=.-MES7 .EVEN MES8: .ASCII <15> <12> /WKLY RPT PROCESS COMPLETE/ L8=.-MES8 .EVEN MES9: .ASCII <15> <12> /ERR DELET$ ON TSUMMI NOTIFY SYSTEMS PGMMR/ .ASCII <15> <12> /FILE TIMSUMM.DAT NOT DELETED/ L9=.-MES9 .EVEN .PAGE HDR1: .ASCII <14> <15> .ASCII / / .ASCII /WEEKLY MACHINE UTILIZATION REPORT / .ASCII *FOR PDP 11/40 * .ASCII / / .EVEN HDR2: .ASCII <15> <12> <12> .ASCII / / .ASCII /MACH MACH IAS / .ASCII /IAS MACH IAS AV-REC/ .ASCII / / .EVEN HDR3: .ASCII <15> <12> / BEGIN TIME END TIME/ .ASCII / UP DOWN UP / .ASCII /DOWN ALLOC ALLOC TIME/ .ASCII / / .EVEN HDR4: .ASCII <15> <12> *DD/MM/YY HH:MM DD/MM/YY * .ASCII /HH:MM #IPL HH:MM HH:MM / .ASCII /HH:MM HH:MM HH:MM HH:MM HH:MM/ .ASCII / / .EVEN .PAGE ; OUTPUT DETAIL LINE DESCRIPTION DETL: .ASCII <15> <12> BDAY: .BLKB 2. ;BEGINNING DAY .ASCII */* BMNTH: .BLKB 2. ;BEGINNING MONTH .ASCII */* BYEAR: .BLKB 2. ;BEGINNING YEAR .ASCII / / BHR: .BLKB 2. ;BEGINNING HOUR .ASCII /:/ BMIN: .BLKB 2. ;BEGINNING MINUTE .ASCII / / EDAY: .BLKB 2. ;ENDING DAY .ASCII */* EMNTH: .BLKB 2. ;ENDING MONTH .ASCII */* EYEAR: .BLKB 2. ;ENDING YEAR .ASCII / / EHR: .BLKB 2. ;ENDING HOUR .ASCII /:/ EMIN: .BLKB 2. ;ENDING MINUTE .ASCII / / IPL: .BLKB 2. ;IPL'S FOR THE DAY .ASCII / / MUPHR: .BLKB 2. ;MACHINE UP HOURS .ASCII /:/ MUPMN: .BLKB 2. ;MACHINE UP MINUTES .ASCII / / MDWHR: .BLKB 2. ;MACHINE DOWN HOURS .ASCII /:/ MDWMIN: .BLKB 2. ;MACHINE DOWN MINUTES .ASCII / / TSUPHR: .BLKB 2. ;TIME SHARING UP HOURS .ASCII /:/ TSUPMN: .BLKB 2. ;TIME SHARING UP MINUTES .ASCII / / TSDWHR: .BLKB 2. ;TIME SHARING DOWN HOURS .ASCII /:/ TSDWMN: .BLKB 2. ;TIME SHARING DOWN MINUTES .ASCII / / MALLHR: .BLKB 2. ;MACHINE ALLOCATED HOURS .ASCII /:/ MALLMN: .BLKB 2. ;MACHINE ALLOCATED MINUTES .ASCII / / TSALHR: .BLKB 2. ;TIME SHARING ALLOCATED HOURS .ASCII /:/ TSALMN: .BLKB 2. ;TIME SHARING ALLOCATED MINUTES .ASCII / / MTREHR: .BLKB 2. ;MEAN TIME FOR RECOVERY HOURS .ASCII /:/ MTREMN: .BLKB 2. ;MEAN TIME FOR RECOVERY MINUTES .ASCII / / .EVEN .PAGE ; HEADER FOR FOOTER LINE WITH TOTALS FOR THE ACCOUNTING PERIOD. FTHDR: .ASCII <15> <12> <12> /***TOTALS***/ .ASCII / / IPLO: .ASCII / / ;TOTAL IPL'S .ASCII / / MUHO: .ASCII / :/ ;TOTAL MACHINE HOURS UP MUMO: .ASCII / / ;TOTAL MACHINE MINUTES UP MDHO: .ASCII / :/ ;TOTAL MACHINE DOWN HOURS MDMO: .ASCII / / ;TOTAL MACHINE DOWN MINUTES TSUHO: .ASCII / :/ ;TOTAL TIME SHARING HOURS UP TSUMO: .ASCII / / ;TOTAL TIME SHARING MINUTES UP TSDHO: .ASCII / :/ ;TOTAL TIME SHARING HOURS DOWN TSDMO: .ASCII / / ;TOTAL TIME SHARING MINUTES DOWN MAHO: .ASCII / :/ ;TOTAL ALLOCATED MACHINE HOURS MAMO: .ASCII / / ;TOTAL ALLOCATED MACHINE MINUTES TSAHO: .ASCII / :/ ;TOTAL ALLOCATED TIME SHARING HOURS TSAMO: .ASCII / / ;TOTAL ALLOCATED TIME SHARING MINUTES .ASCII / / .ASCII / / .EVEN .PAGE START: FINIT$ ;INITIALIZE MAIN: MOV #MAXLIN,R0 ;#TO CONVERT TO R0 JSR PC,$CDTB ;CONVERSION SUBRTN MOV R1,LINMAX ;CONVERTED #60 TO BINARY MOV LINMAX,LINCTR ;SET LINE CNTR TO BINARY 60 $DO 10 ;-BLOCK #10 FOR EXITING CALL OPENAP ;-OPEN TSUMMI FOR APPEND CALL CLTSUM ;-CLOSE TSUMMI CALL OPENAF ;-OPEN ALL FILES $IF ;--CHECK PSWT $WHILE ;---LOOP CONTROL CALL RDRTN ;---READ INPUT FILE $END ;---END LOOP FOR READ $ELSE ;--ELSE FOR CHECK PSWT $EXIT 10 ;--EXIT BLOCK #10 $END ;--END CHECK PSWT CALL CLTSUM ;-CLOSE INPUT FILE CALL TSOPEN ;-OPEN INPUT FILE AGAIN MOV #0.,EFSWT ;-RESET EFSWT $IF ;--CHECK PSWT $WHILE ;---LOOP CONTROL CALL SECNRD ;---READ FOR TOTALS $END ;---END READ LOOP CALL DIVRTN ;--DIVISION SUBROUTINE CALL CNVMAJ ;--CONVERSION SUBROUTINE CALL WRTFTR ;--WRITE THE FOOTER TOTALS CALL CLFILE ;--CLOSE ALL FILES $IF ;---CHECK PSWT QIOW$S #IO.WLB,#5,#1,,,,<#MES8,#L8> ;---DISPLAY COMPLETION MSG $END ;---END CHECK PSWT $END ;--END CHECK PSWT $END ;-END BLOCK #10 EXIT$S ;EXIT FOR PROGRAM .PAGE ; ;OPEN FILE TSUMMI TO APPEND AN END OF FILE RECORD ; OPENAP: OPEN$A #TSUMMI ;OPEN FOR APPEND $IF <,CS> ;-ERR CHECK QIOW$S #IO.WLB,#5,#1,,,,<#MES1,#L1> ;-DISPLAY ERR MSG1 MOV #1.,PSWT ;-SET PSWT IF ERROR $ELSE ;-ELSE CARRY CLEAR MOV EOFFLG,TSUMBF ;-LAST RECORD ID PUT$ #TSUMMI ;-WRITE LAST RECORD $END ;-END ERR CHECK RETURN ;RETURN TO CALLING ROUTINE ; ; OPEN OUTPUT FILES FOR WRITING ; OPENAF: OPEN$W #REPORT ;OPEN OUTPUT REPORT $IF <,CS> ;-ERR CHEC QIOW$S #IO.WLB,#5,#1,,,,<#MES4,#L4> ;-DISPLAY ERR MSG4 MOV #1.,PSWT ;-SET PSWT IF ERROR $END ;-END ERR CHECK OPEN$W #MACTIM ;OPEN OUTPUT MACTIM $IF <,CS> ;-ERR CHECK QIOW$S #IO.WLB,#5,#1,,,,<#MES5,#L5> ;-DISPLAY ERR MSG5 MOV #1.,PSWT ;-SET PSWT IF ERROR $END ;-END ERR CHECK ; ; OPEN INPUT FILE FOR READING ; TSOPEN: OPEN$R #TSUMMI ;OPEN INPUT FOR READ $IF <,CS> ;-ERR CHECK QIOW$S #IO.WLB,#5,#1,,,,<#MES3,#L3> ;-DISPLAY ERR MSG3 MOV #1.,PSWT ;-SET PSWT $END ;-END ERR CHEC RETURN ;RETURN TO CALLING ROUTINE .PAGE ; ; READ INPUT FILE AND SET UP OUTPUT LINE FOR PRINTING ; RDRTN: GET$ #TSUMMI ;READ INPUT FILE $IF ;-CHECK FOR LAST RECORD MOV #1.,EFSWT ;-SET EOF SWT $ELSE ;-ELSE DO THE FOLLOWING MOV #TSUMBF,R1 ;-ADDR OF INPUT TO R1 MOVB (R1)+,BYEAR ;- THE FOLLOWING MOVB (R1)+,BYEAR+1 ;- INSTRUCTIONS MOVE MOVB (R1)+,BMNTH ;- INPUT FIELDS TO MOVB (R1)+,BMNTH+1 ;- THE DETAIL LINE MOVB (R1)+,BDAY ;- FOR PRINTING MOVB (R1)+,BDAY+1 ;- MOV #BHR,R2 ;- CALL MOVHMD ;- MOVB (R1)+,IPL ;- MOVB (R1)+,IPL+1 ;- MOV #TSUPHR,R2 ;- CALL MOVHMD ;- MOV #TSDWHR,R2 ;- CALL MOVHMD ;- MOV #MUPHR,R2 ;- CALL MOVHMD ;- MOV #MDWHR,R2 ;- CALL MOVHMD ;- MOV #MALLHR,R2 ;- CALL MOVHMD ;- MOV #MTREHR,R2 ;- CALL MOVHMD ;- MOV #TSALHR,R2 ;- CALL MOVHMD ;- MOVB (R1)+,EYEAR ;- MOVB (R1)+,EYEAR+1 ;- MOVB (R1)+,EMNTH ;- MOVB (R1)+,EMNTH+1 ;- MOVB (R1)+,EDAY ;- MOVB (R1)+,EDAY+1 ;- MOV #EHR,R2 ;- CALL MOVHMD ;-END MOVING INPUT TO DETAIL CALL WRTRTN ;-WRITE REPORT OUTPUT $END ;-END CHECK FOR LAST RECORD RETURN ;RETURN TO CALLING ROUTINE ; ; SECONDARY READ ROUTINE USED FOR TOTALING TIME UP AND DOWN FIELDS. ; SECNRD: GET$ #TSUMMI ;READ INPUT FILE $IF ;-CHECK FOR LAST RECORD MOV #1.,EFSWT ;-SET EOF SWT $ELSE ;-ELSE NOT LAST RECORD MOV #TSUMBF,R5 ;-ADDR OF INPUT BUFFER ADD #10.,R5 ;-START OF TIME FIELDS MOV #15.,R4 ;-R4 CNTR FOR CONVERSION LOOP MOV #TIPL,R3 ;-ADDR OF OUTPUT FROM CONVERSION $WHILE ;--CONVERSION LOOP MOV (R5)+,COMPOS ;--# TO CONVERSION AREA MOV #COMPOS,R0 ;--ADDR OF AREA TO R0 JSR PC,$CDTB ;--CONVRSN TO BINARY SUBRTN MOV (R3),R2 ;--PREVIOUS TOTAL TO R2 ADD R2,R1 ;--ADD INPUT TO PREVIOUS TOTAL MOV R1,(R3)+ ;--MOVE NEW TOTAL TO HOLD AREA DEC R4 ;--DEC LOOP CNTR $END ;--END CONVERSION LOOP $END ;-END CHECK FOR LAST RECORD RETURN ;RETURN TO CALLING ROUTINE .PAGE ; ; CLOSE INPUT AND OUTPUT FILES, DELETES INPUT FILE IF PSWT NOT SET ; CLFILE: CLOSE$ #MACTIM ;CLOSE OUTPUT FILE MACTIM $IF <,CS> ;-ERR CHECK FOR CLOSE$ QIOW$S #IO.WLB,#5,#1,,,,<#MES7,#L7> ;-DISPLAY ERR MSG7 MOV #1.,PSWT ;-SET PSWT $END ;-END ERR CHECK FOR CLOSE$ CLOSE$ #REPORT ;CLOSE OUTPUT FILE REPORT $IF <,CS> ;-ERR CHECK FOR CLOSE$ QIOW$S #IO.WLB,#5,#1,,,,<#MES6,#L6> ;-DISPLAY ERR MSG6 MOV #1.,PSWT ;-SET PSWT $END ;-END ERR CHECK FOR CLOSE$ $IF ;-CHECK PSWT DELET$ #TSUMMI ;-DELETE THE INPUT FILE $IF <,CS> ;--CHECK FOR ERR ON DELET$ MOV #1.,PSWT ;--SET PSWT QIOW$S #IO.WLB,#5,#1,,,,<#MES9,#L9> ;--DISPLAY ERR MSG9 $END ;--END ERR CHECK ON DELET$ $ELSE ;-ELSE FOR PSWT CHECK CALL CLTSUM ;-CLOSE RTN FOR INPUT FILE $END ;-END CHECK PSWT RETURN ;RETURN TO CALLING ROUTINE ; ; CLOSE INPUT FILE ; CLTSUM: CLOSE$ #TSUMMI ;CLOSE INPUT FILE $IF <,CS> ;-CHECK FOR ERR ON CLOSE$ QIOW$S #IO.WLB,#5,#1,,,,<#MES2,#L2> ;-DISPLAY ERR MSG2 MOV #1.,PSWT ;-SET PSWT $END ;-END ERR CHECK ON CLOSE$ RETURN ;RETURN TO CALLING ROUTINE .PAGE ; ; DIVISION ROUTINE FOR MINUTE FIELDS GREATER THAN 60, THIS ROUTINE IS MADE ; OF SIX GROUPS OF DIVIDE ROUTINES. THE ONLY THING DIFFERENT IS THE NAME ; OF THE FIELD BEING TESTED AND DIVIDED IF NECESSARY. ; DIVRTN: $IF ;-CHECK FOR > OR = 60 CLR R0 ;-CLEAR R0 FOR DIVIDE MOV TTSUM,R1 ;-# TO BE DIVIDED DIV LINMAX,R0 ;-DIVIDE BY 60 MOV R1,TTSUM ;-REMAINING TO MIN FIELD ADD R0,TTSUH ;-QUOTIENT ADDED TO HR FIELD $END ;-END DIVISION $IF ;-START TTSDM CLR R0 ;- MOV TTSDM,R1 ;- DIV LINMAX,R0 ;- MOV R1,TTSDM ;- ADD R0,TTSDH ;- $END ;-END TTSDM $IF ;-START TMUM CLR R0 ;- MOV TMUM,R1 ;- DIV LINMAX,R0 ;- MOV R1,TMUM ;- ADD R0,TMUH ;- $END ;-END TMUM $IF ;-START TMDM CLR R0 ;- MOV TMDM,R1 ;- DIV LINMAX,R0 ;- MOV R1,TMDM ;- ADD R0,TMDH ;- $END ;-END TMDM $IF ;-START TAMM CLR R0 ;- MOV TAMM,R1 ;- DIV LINMAX,R0 ;- MOV R1,TAMM ;- ADD R0,TAMH ;- $END ;-END TAMM $IF ;-START TTSAM CLR R0 ;- MOV TTSAM,R1 ;- DIV LINMAX,R0 ;- MOV R1,TTSAM ;- ADD R0,TTSAH ;- $END ;-END TTSAM RETURN ;RETURN TO CALLING ROUTINE .PAGE ; ; CONVERTS ALL FIELDS FROM BINARY TO DECIMAL FOR PRINTING ; CNVMAJ: MOV #TIPL,R3 ;INPUT BUFFER ADDR TO R3 CALL CNVRT1 ;CONVERSION ROUTINE MOV #IPLO,R5 ;OUTPUT ADDR TO R5 CALL MOV3BY ;MOVES 3 BYTES CALL CNVRT1 ;CONVERSION ROUTINE MOV #TSUHO,R5 ;OUTPUT ADDR TO R5 CALL MOV3BY ;MOVES 3 BYTES CALL CNVRT1 ;CONVERSION ROUTINE MOV #TSUMO,R5 ;OUTPUT ADDR TO R5 CALL MOV2BY ;MOVES 2 BYTES CALL CNVRT1 ;CONVERSION ROUTINE MOV #TSDHO,R5 ;OUTPUT ADDR TO R5 CALL MOV3BY ;MOVES 3 BYTES CALL CNVRT1 ;CONVERSION ROUTINE MOV #TSDMO,R5 ;OUTPUT ADDR TO R5 CALL MOV2BY ;MOVES 2 BYTES CALL CNVRT1 ;CONVERSION ROUTINE MOV #MUHO,R5 ;OUTPUT ADDR TO R5 CALL MOV3BY ;MOVES 3 BYTES CALL CNVRT1 ;CONVERSION ROUTINE MOV #MUMO,R5 ;OUTPUT ADDR TO R5 CALL MOV2BY ;MOVES 2 BYTES CALL CNVRT1 ;CONVERSION ROUTINE MOV #MDHO,R5 ;OUTPUT ADDR TO R5 CALL MOV3BY ;MOVES 3 BYTES CALL CNVRT1 ;CONVERSION ROUTINE MOV #MDMO,R5 ;OUTPUT ADDR TO R5 CALL MOV2BY ;MOVES 2 BYTES CALL CNVRT1 ;CONVERSION ROUTINE MOV #MAHO,R5 ;OUTPUT ADDR TO R5 CALL MOV3BY ;MOVES 3 BYTES CALL CNVRT1 ;CONVERSION ROUTINE MOV #MAMO,R5 ;OUTPUT ADDR TO R5 CALL MOV2BY ;MOVES 2 BYTES ADD #4.,R3 ;SKIP 2 WORDS OF INPUT CALL CNVRT1 ;CONVERSION ROUTINE MOV #TSAHO,R5 ;OUTPUT ADDR TO R5 CALL MOV3BY ;MOVES 3 BYTES CALL CNVRT1 ;CONVERSION ROUTINE MOV #TSAMO,R5 ;OUTPUT ADDR TO R5 CALL MOV2BY ;MOVES 2 BYTES RETURN ;RETURN TO CALLING ROUTINE ; ; SUBROUTINE FOR CNVMAJ ROUTINE THAT DOES THE CONVERSION TO DECIMAL ; CNVRT1: MOV (R3)+,R1 ;# TO BE CONVERTED TO R1 MOV #BYT1,R0 ;ADDR FOR OUTPUT FROM CONVERSION MOV #1.,R2 ;SET FLAG FOR CONVERSION JSR PC,$CBDMG ;CONVERSION SUBROUTINE RETURN ;RETURN TO CALLING ROUTINE .PAGE ; ; WRITES THE DETAIL LINE FOR EACH DAY ; WRTRTN: $IF ;-CHECK LINE CNTR > = 60 CLR LINCTR ;-CLEAR LINE CNTR INC LINCTR ;-ADD 1 TO LINE CNTR PUT$ #REPORT,#HDR1 ;-WRITE HEADER PUT$ #REPORT,#HDR2 ;-WRITE HEADER PUT$ #REPORT,#HDR3 ;-WRITE HEADER PUT$ #REPORT,#HDR4 ;-WRITE HEADER $END ;-END HEADER LINE PRINT PUT$ #REPORT,#DETL ;PRINT DETAIL LINE INC LINCTR ;ADD 1 TO LINE CNTR RETURN ;RETURN TO CALLING ROUTINE ; ; WRITES THE TOTAL LINE FOR THE ACCOUNTING PERIOD ; WRITES THE RECORD FOR MACTIM FILE "MACHUPTIM.DAT" FOR IASUTLRPT. ; WRTFTR: MOV #MACBUF,R5 ;ADDR OF OUTPUT BUFFER TO R5 MOV #TSUHO,R3 ;ADDR OF TOTAL IAS UP TIME MOVB BYT1,(R5)+ ;ZERO FIRST BYTE MOVB (R3)+,(R5)+ ;MOVE A BYTE TO OUTPUT MOVB (R3)+,(R5)+ ;MOVE A BYTE TO OUTPUT MOVB (R3)+,(R5)+ ;MOVE A BYTE TO OUTPUT INC R3 ;SKIP 1 BYTE OF INPUT MOVB (R3)+,(R5)+ ;MOVE A BYTE TO OUTPUT MOVB (R3)+,(R5)+ ;MOVE A BYTE TO OUTPUT PUT$ #REPORT,#FTHDR ;WRITE REPORT FOOTER PUT$ #MACTIM ;WRITE MACTIM RECORD RETURN ;RETURN TO CALLING ROUTINE .PAGE ; ; SUBROUTINE TO MOVE HOUR AND MINUTE DATA TO OUTPUT DETAIL LINE ; MOVHMD: MOVB (R1)+,(R2)+ ;1 BYTE FROM ADDR OF R1 TO R2 MOVB (R1)+,(R2)+ ;1 BYTE FROM ADDR OF R1 TO R2 INC R2 ;SKIP 1 BYTE OF OUTPUT MOVB (R1)+,(R2)+ ;1 BYTE FROM ADDR OF R1 TO R2 MOVB (R1)+,(R2)+ ;1 BYTE FROM ADDR OF R1 TO R2 RETURN ;RETURN TO CALLING ROUTINE ; ; SUBROUTINE THAT USES TWO ADDRESSES TO MOVE EITHER 2 OR 3 BYTES OF DATA ; MOV3BY: MOVB BYT3,(R5)+ ;BYTE 3 TO ADDR OF R5 MOV2BY: MOVB BYT4,(R5)+ ;BYTE 4 TO ADDR OF R5 MOVB BYT5,(R5) ;BYTE 5 TO ADDR OF R5 RETURN ;RETURN TO CALLING ROUTINE .END START ;END OF PROGRAM