.TITLE DIARY .IDENT \LMF02A\ .ENABL LSB .MCALL QIOW$S,ALUN$,OPEN$A,OPEN$W,CLOSE$ .MCALL FSRSZ$,FINIT$ .MCALL GCMLB$,GCML$,PUT$,NMBLK$ .MCALL FDBDF$,FDAT$A,FDRC$A,FDOP$A,FDBF$A .MCALL GTIM$S,EXIT$S ; REWRITTEN: 18-JAN-79 L. M. FRASER ; ;+ ; PROGRAM TO ALLOW THE USER TO ENTER A LINE INTO A LOG ; FILE WITH THE TIME AND DATE. INVKED BY: ; ; LOG SINGLE LINE OF TEXT ; OR: ; >LOG ; LOG>LINE ONE OF TEXT ; LOG>LINE TWO, ETC ; LOG>^Z ;- LG.LEN=15. ;THE LENGTH OF THE TIME/DATE STRING ;MUST CORRESPOND TO THE LENGTH OF ;THE STRING AS SET BY LG.COD ;(IE. 12.,15.,18. OR 20.) ; LG.COD=2 ;THE TIME CODE: ; 0 OR 1 => HH ; 2 => HH:MM ; 3 => HH:MM:SS ; >3 => HH:MM:SS.S ; ; WITH LG.LEN AND LG.COD IT IS POSSIBLE TO RE-SPECIFY ; THE ACCURACY OF THE TIME PRINTED ON THE OUTPUT ; TERMINAL AND INTO THE FILE. ; TAB=11 ;A TAB CR=15 LF=12 ; START:: FINIT$ ; INIT THE FILE SYSTEM BICB #GE.CLO!GE.IND!GE.COM,G.MODE+GCLBLK ; CLEAR MODE BITS ; ; LET FIND OUT WHO WE ARE AND SUCH ; GCML$ #GCLBLK ; LET'S GET OUR COMMAND LINE BCC 1$ ; GOT ONE OK JMP EXIT ; DON'T DO ANYTHNG ; ; WE'RE HERE, SO LET'S OUTPUT THE DATE AND TIME. ; 1$: GTIM$S #TIME ;FILL INFO BUF MOV #OUTBUF+1,R0 ;USE BUF AS OUT LINE MOV R0,R3 ;REMEMBER IT MOVB #LF,(R0)+ ;SPACE FILE ENTERIES MOV #TIME,R1 ;START WITH DATE CALL $DAT ;AND CONVERT MOVB #40,(R0)+ ;SPACE THINGS MOV #LG.COD,R2 ;THE CODE CALL $TIM ;CONVERT TIME MOVB #CR,(R0)+ ;SET UP FOR POS PROMPT SUB R3,R0 ;GET LENGTH MOV R0,R2 ;KEEP IT SAFE FROM FCS ; ; OPEN THE FILE. IT REMAINS OPEN TILL THE BITTER END, ; OPEN$A #FDB BCC 10$ ; OK,ITS THERE CMPB F.ERR(R0),#IE.NSF ; WAS ERROR "NO SUCH FILE" BNE IOERR ; BAD IF NOT OPEN$W ; YES, THEN MAKE ONE ; ; NOW WRITE TIME OUT TO THE FILE ; 10$: PUT$ R0,R3,R2,IOERR ; MOV #GCLBLK,R0 ; GET COUNT FOR INPUT LINE LOOP: MOV G.CMLD(R0),R1 ; GET LENGTH OF LINE MOV G.CMLD+2(R0),R2 ; GET START OF DATA MOVB #TAB,-(R2) ; PREFIX WITH A TAB INC R1 ; AN COUNT IT PUT$ #FDB,R2,R1,IOERR ; WRITE IT OUT TO FILE GCML$ #GCLBLK ; GET ANOTHER LINE BCC LOOP ; MOVB G.ERR(R0),R1 ; GET THE ERROR CMP R1,#GE.EOF ; END OF FILE? BEQ DIE ; JUST EXIT MOV #"GC,EMSGA ; MODIFY ERROR MSG MOV #"ML,EMSGA+2 BR GCERR ; GO REPORT ERROR ; DIE:: CLOSE$ #FDB EXIT: EXIT$S ; IOERR: MOVB F.ERR(R0),R1 ; GET ERROR CODE GCERR: MOV #EMSG1,R0 ; POINT TO TEXT CLR R2 CALL $CBDSG ; COVERT ERROR CODE MOV #EMSG,R1 ; GET ADDRESS OF TEXT SUB R1,R0 ; GET LENGTH QIOW$S #IO.WVB,#2,#2,,,, ;PRINT ON TERMIAL BR DIE ; EXIT ; ; DEFINITIONS, TEXT AND STUFF ; .NLIST BEX EMSG: .ASCII \DIARY - \ .EVEN EMSGA: .ASCII \FILE ERROR:\ EMSG1: .ASCII \ \ .EVEN ; FSRSZ$ 2 ; TWO ACTIVE FILES ; ; THE FDB OF THE OUTPUT (LOG) FILE. ; FDB: FDBDF$ FDAT$A R.VAR,FD.CR FDRC$A ,OUTBUF,94. FDOP$A 1,,NMBLK,,FA.ENB!FA.DLK NMBLK: NMBLK$ DIARY,TXT,,SY,0 ; THE FILE GCLBLK: GCMLB$ 1,DIA,BUFR,2 TIME: .BLKW 8. ; GET TIME BUFFER OUTBUF: .BYTE 12 ;THE PRECEDING LINE-FEED .BLKB LG.LEN ; TEXT PART OF TIME MSG .WORD 0 ; SPACE FOR CRLF .EVEN BUFR: .BLKW 42. ; FILE & INPUT BUFFER ; .END START