.TITLE MAKNAM - MAKE FILE NAME AND DATE .IDENT /01.4/ .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: ; ; Date By Reason ; ---- -- ------ ; 31-Dec-81 Robin Miller Output controller for VAX/VMS device names. ; ; 10-Feb-82 Robin Miller Copy directory string on VAX/VMS (replace UIC). ; ;- .ENABL AMA .MCALL DIR$, CSI$, QIOW$ CSI$ ; DEFINE CSI OFFSETS ; ; Local equates: ; SPACE = 40 ; ASCII FOR SPACE ; ; 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,,<,ATRBLK,,,,> DSKSB:: .BLKW 2 ; DISK I/O STATUS BLOCK FILNAM:: .BLKB 100. ; STORAGE FOR ASCII FILE NAME ;+ ; ; MAKNAM - Make file name. ; ;- MAKNAM:: CALL $SAVAL ; SAVE R0 - R5 MOV #FILNAM,R0 ; STORE FILE NAME HERE MOV FNBADR,R5 ; GET ADDRESS OF FNB MOV R5,ATRQIO+Q.IOPL ; COPY IT TO QIO ; Device name and unit number. MOV N.DVNM(R5),(R0)+ ; COPY THE DEVICE NAME MOV N.UNIT(R5),R1 ; GET BINARY UNIT NUMBER TSTB VAXFLG ; RUNNING ON VAX/VMS ? BEQ 30$ ; IF EQ, NO MOVB #'A,R2 ; PRESUME FIRST CONTROLLER 10$: CMP R1,#16. ; GOT RIGHT CONTROLLER ? BLT 20$ ; IF LT, YES SUB #16.,R1 ; ADJUST THE UNIT NUMBER INC R2 ; POINT TO NEXT CONTROLLER BR 10$ ; AND LOOP ; Move in controller number for VAX/VMS. 20$: MOVB R2,(R0)+ ; COPY THE CONTROLLER BYTE 30$: CLR R2 ; SET FOR ZERO SUPRESSION CALL $CBTMG ; CONVERT IT TO OCTAL ASCII MOVB #':,(R0)+ ; MOVE IN A COLON ; Copy the UIC or the directory string. DIR$ #ATRQIO ; READ FILE ATTRIBUTES BCS 50$ ; IF CS, ERROR MOV UICBUF,R1 ; COPY FILE OWNER UIC TSTB VAXFLG ; ARE WE RUNNING ON VAX ? BEQ 80$ ; IF EQ, NO (USE UIC) MOV @#.FSRPT,R3 ; GET ADDRESS OF FSR ADD #A.DFDR,R3 ; POINT TO DIRECTORY DESRIPTOR MOV (R3)+,R2 ; SIZE OF DIRECTORY STRING BEQ 80$ ; IF EQ, OUTPUT UIC MOV (R3),R3 ; ADDRESS OF DIRECTORY STRING BR 60$ ; AND USE COMMON LOOP ... 50$: MOV CSIBLK+C.DIRD,R2 ; GET UIC BYTE COUNT BEQ 70$ ; IF EQ, NONE FOUND MOV CSIBLK+C.DIRD+2,R3 ; GET UIC SPEC ADDR 60$: MOVB (R3)+,(R0)+ ; MOVE UIC TO BUFFER SOB R2,60$ ; BR TILL DONE BR 90$ ; AND CONTINUE ; Get default UIC. 70$: CALL .RDFUI ; READ DEFAULT UIC 80$: MOV R0,R2 ; COPY OUTPUT ADDRESS MOV R1,R3 ; COPY BINARY 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. 90$: 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 100$ ; IF EQ, DONE CALL $C5TA ; CONVERT IT TO ASCII MOV N.FNAM+4(R5),R1 ; GET 3RD PART OF FILE NAME BEQ 100$ ; IF EQ, DONE CALL $C5TA ; CONVERT IT TO ASCII 100$: CMPB #SPACE,-(R0) ; LAST CHARACTER A SPACE ? BEQ 100$ ; IF EQ, YES INC R0 ; NO, ADJUST POINTER MOVB #'.,(R0)+ ; MOVE IN A PERIOD MOV N.FTYP(R5),R1 ; GET FILE TYPE BEQ 110$ ; IF EQ, NONE CALL $C5TA ; AND CONVERT TO ASCII 110$: CMPB #SPACE,-(R0) ; LAST CHARACTER A SPACE ? BEQ 110$ ; IF EQ, YES INC R0 ; NO, ADJUST POINTER MOV N.FVER(R5),R1 ; GET FILE VERSION BEQ 130$ ; IF EQ, NONE MOVB #';,(R0)+ ; MOVE IN A SEMI-COLON CLR R2 ; SUPPRESS 0'S TSTB VAXFLG ; ARE WE ON VAX/VMS ? BEQ 120$ ; IF EQ, NO CALL $CBDMG ; VERSION # IS DECIMAL BR 130$ ; CONTINUE ... 120$: CALL $CBOMG ; VERSION # IS OCTAL 130$: 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