.TITLE MAKNAM - MAKE FILE NAME AND DATE .IDENT /01/ .ENABL LC ;+ ; ; Free software BY ; Project Software & Development, Inc. ; ; This software is furnished for free and may be used and copied as ; desired. This software or any other copies thereof may be provided ; or otherwise made available to any other person. No title to and ; ownership of the software is hereby transferred or allowed. ; ; The information in this software is subject to change without notice ; and should not be construed as a commitment by PROJECT SOFTWARE ; AND DEVELOPMENT, INC. ; ; PROJECT SOFTWARE assumes no responsibility for the use or reliability ; of this software on any equipment whatsoever. ; ; Project Software & Development, Inc. ; 14 Story St. ; Cambridge, Ma. 02138 ; 617-661-1444 ; ; ; Title: MAKNAM ; Author: Robin Miller ; Date: October 28, 1981 ; ; Description: ; ; These routines make up the file name and creation date to ; be output by the LIST program. ; ; ; Modification History: ; ;- .ENABL AMA .MCALL DIR$, CSI$, QIOW$ CSI$ ; DEFINE CSI OFFSETS ; ; ACP function codes to do QIO. ; ATRBLK: .BYTE -15,43 ; READ DATE/TIME .WORD DATBUF ; AND STORE IT HERE .BYTE -01,02 ; READ FILE OWNER UIC .WORD UICBUF ; AND STORE IT HERE .WORD 0 ; END OF ACP QIO LIST DATBUF: .BLKW 32. ; SIZE OF THIS BUFFER ? UICBUF: .WORD 0 ; THE UIC IS ONE WORD ATRQIO: QIOW$ IO.RAT,DSKLUN,DSKEFN,,DSKSB,, DSKSB:: .BLKW 2 ; DISK I/O STATUS BLOCK ;+ ; ; MAKNAM - Make file name. ; ;- MAKNAM:: CALL $SAVAL ; SAVE R0 - R5 DIR$ #ATRQIO ; READ FILE ATTRIBUTES ; BCS 10$ ; IF CS, ERROR MOV #FILNAM,R0 ; POINT TO DEVICE MSG MOV #FDB+F.FNB,R5 ; POINT TO FILE-NAME BLOCK ; Device name and unit number. MOV N.DVNM(R5),(R0)+ ; COPY THE DEVICE NAME MOV N.UNIT(R5),R1 ; GET BINARY UNIT NUMBER CLR R2 ; SET FOR ZERO SUPRESSION CALL $CBTMG ; CONVERT IT TO OCTAL ASCII MOVB #':,(R0)+ ; MOVE IN A COLON ; UIC. ; MOV CSIBLK+C.DIRD,R2 ; GET UIC BYTE COUNT ; BEQ 20$ ; IF EQ, NONE FOUND ; MOV CSIBLK+C.DIRD+2,R3 ; GET UIC SPEC ADDR ;10$: MOVB (R3)+,(R0)+ ; MOVE UIC TO BUFFER ; SOB R2,10$ ; BR TILL DONE ; BR 30$ ; AND CONTINUE ; Get default UIC. ;20$: CALL .RDFUI ; READ DEFAULT UIC MOV R0,R2 ; COPY OUTPUT ADDRESS ; MOV R1,R3 ; COPY BINARY UIC MOV UICBUF,R3 ; COPY FILE OWNER UIC CLR R4 ; LEADING ZEROS/SEPARATORS CALL .PPASC ; CONVERT BINARY UIC TO ASCII MOV R2,R0 ; COPY NEW BUFFER POINTER ; File name, type, and version. 30$: MOV N.FNAM(R5),R1 ; GET 1ST PART OF FILE NAME CALL $C5TA ; CONVERT RADIX-50 TO ASCII MOV N.FNAM+2(R5),R1 ; GET 2ND PART OF FILE NAME BEQ 40$ ; IF EQ, DONE CALL $C5TA ; CONVERT IT TO ASCII MOV N.FNAM+4(R5),R1 ; GET 3RD PART OF FILE NAME BEQ 40$ ; IF EQ, DONE CALL $C5TA ; CONVERT IT TO ASCII 40$: CMPB #SPACE,-(R0) ; LAST CHARACTER A SPACE ? BEQ 40$ ; IF EQ, YES INC R0 ; NO, ADJUST POINTER MOVB #'.,(R0)+ ; MOVE IN A PERIOD MOV N.FTYP(R5),R1 ; GET FILE TYPE BEQ 50$ ; IF EQ, NONE CALL $C5TA ; AND CONVERT TO ASCII 50$: CMPB #SPACE,-(R0) ; LAST CHARACTER A SPACE ? BEQ 50$ ; IF EQ, YES INC R0 ; NO, ADJUST POINTER MOV N.FVER(R5),R1 ; GET FILE VERSION BEQ 60$ ; IF EQ, NONE MOVB #';,(R0)+ ; MOVE IN A SEMI-COLON CLR R2 ; SUPPRESS 0'S TSTB VAXFLG ; ARE WE ON VAX/VMS ? BEQ 55$ ; IF EQ, NO CALL $CBDMG ; VERSION # IS DECIMAL BR 60$ ; CONTINUE ... 55$: CALL $CBOMG ; VERSION # IS OCTAL 60$: MOV R0,R1 ; COPY BUFFER ADDRESS CALL MAKDAT ; GET CREATION DATE/TIME MOVB #CR,(R1)+ ; MOVE IN TERMINATOR MOVB #LF,(R1)+ ; AND LINE FEED CLRB (R1) ; TERMINATOR RETURN ;+ ; ; MAKDAT - APPENDS DATE/TIME TO FILE NAME BUFFER. ; ; Co-routine to MAKNAM routine. Presumes MAKNAM saves registers. ; ; Inputs: ; R1 - Buffer address to save date and time. ; ;- MAKDAT: MOVB #SPACE,(R1)+ ; SPACES BETWEEN NAME AND DATE MOVB #SPACE,(R1)+ ; SPACES BETWEEN NAME AND DATE MOVB #SPACE,(R1)+ ; SPACES BETWEEN NAME AND DATE MOV #DATBUF+2,R0 ; CREATION DATE STARTS HERE MOVB (R0)+,(R1)+ ; MOVE IN MOVB (R0)+,(R1)+ ; DAY OF MONTH MOVB #'-,(R1)+ ; SEPARATE WITH MINUS SIGN MOVB (R0)+,(R1)+ ; MOVE IN MOVB (R0)+,(R1)+ ; MONTH OF YEAR MOVB (R0)+,(R1)+ ; " " MOVB #'-,(R1)+ ; SEPARATE WITH MINUS SIGN MOVB (R0)+,(R1)+ ; MOVE IN MOVB (R0)+,(R1)+ ; YEAR OF DECADE MOVB #SPACE,(R1)+ ; SPACE BETWEEN DATE AND TIME MOVB (R0)+,(R1)+ ; MOVE IN MOVB (R0)+,(R1)+ ; HOUR OF DAY MOVB #':,(R1)+ ; SEPARATE WITH COLON MOVB (R0)+,(R1)+ ; MOVE IN MOVB (R0)+,(R1)+ ; MINUTE OF HOUR RETURN .END