.TITLE GETFNB .ENABL AMA ; ;AUTHOR: BRAD L. TINNEY 13-MAY-80 ; ; CALL SEQUENCE (FROM FORTRAN): ; ; CALL GETFNB(LUN,ISTAT,DEVICE,UIC,FILENAM,TYPE,VERSION) ; ; WHERE LUN - IS INTEGER*2 LUN OF FILE ; ISTAT - IS RETURN STATUS 0-OK, NEG-BAD ; DEVICE - IS 4 BYTE ASCII STRING (EG. 'DM0:') ; UIC - IS THE DEFAULT UIC, NOT NECESSARILY ; THE UIC OF THE FILE IF SPECIFICALLY SET ; DIFERENTLY. IT IS UP TO 9 BYTES AND ; INCLUDES THE SQUARE BRACKETS (EG. [1,1]) ; AND IS PADDED WITH SPACES ; FILENAME - IS UP TO 9 BYTES PADDED WITH SPACES AND ; DOES NOT INCLUDE THE PERIOD ; TYPE - IS UP TO 3 BYTES PADDED WITH SPACES AND ; DOES NOT INCLUDE THE SEMICOLON ; VERSION - IS UP TO 5 ASCII OCTAL DIGITS PADDED WITH ; SPACES ; ; THE ROUTINE $FCHNL IS A ROUTINE FROM SYSLIB THAT I KNOW ; NOTHING ABOUT. IT APPEARS TO TAKE AN LUN IN REGISTER 2 ; AND RETURN THE FDB ADDRESS ASSOCIATED WITH THAT LUN IN R0. ; .MCALL CALL,RETURN,FDOF$L FDOF$L ;DEFINE ALL FDB OFFSETS ; GETFNB:: CMP (R5)+,#7 ;SHOULD BE 7 PARAMETERS PASSED BNE BADCAL ;IF NOT, GET OUT CLR @2(R5) ;CLEAR STATUS TO 0 MOV @(R5),R2 ;SAVE LUN FOR $FCHNL CALL $FCHNL ;GET THE FDB ADDRESS ADD #14,R0 ;ADD FORTRAN OFFSET TO BASE ADD #F.FNB,R0 ;ADD OFFSET FOR FILENAME BLOCK MOV R5,SAVR0 ;SAVE OUTPUT AREA IN SAVR0 MOV R0,R5 ;INPUT AREA IN R5 ; ; GET DEVICE NAME ; MOV SAVR0,R1 ;RESTORE OUTPUT AREA ADD #4,R1 ;THIRD PARAMETER IN CALL MOV (R1),R0 ;GET THE ARRAY ADDRESS MOV N.DVNM(R5),(R0)+ ;STORE THE ASCII NAME ; ; GET THE UNIT NUMBER ; MOV N.UNIT(R5),R1 ;SET UP FOR BINARY TO ASCII MOV #4010,R2 ;CONVERSION ROUTINE - 1 DIGIT CALL $CBTA ; ; ADD A COLON ; MOVB #72,(R0) ;TACK IT ON ; ; NOW THE DEFAULT UIC ; MOV SAVR0,R1 ;RESTORE OUTPUT AREA ADD #6,R1 ;FOURTH ARG. MOV (R1),R2 ;GET THE ARRAY ADDRESS HANDY MOV #40,R3 ;PAD THE FIELD WITH SPACES .REPT 9. MOVB R3,(R2)+ ;IN-LINE CODE (FAST) .ENDR MOV (R1),R2 ;RESTORE R2 CALL .RDFUI ;GET BINARY DEFAULT UIC MOV R1,R3 ;MOVE TO R3 FOR CONVERSION CLR R4 CALL .PPASC ;CONVERT TO ASCII ; ; GET THE FILENAME ; MOV SAVR0,R1 ;RESTORE AGAIN ADD #8.,R1 ;FIFTH ARG MOV (R1),R0 ;THE ARRAY ADDRESS MOV N.FNAM(R5),R1 ;RADIX TO ASCII CONVERION ROUTINE CALL $C5TA MOV N.FNAM+2(R5),R1 ;GET THE NEXT 3 LETTERS CALL $C5TA MOV N.FNAM+4(R5),R1 ;LAST CHANCE CALL $C5TA ; ; NOW THE FILETYPE ; MOV SAVR0,R1 ;RESTORE AGAIN ADD #10.,R1 ;SIXTH ARG MOV (R1),R0 ;THE ACTUAL ARRAY ADDRESS MOV N.FTYP(R5),R1 ;CONVERT RADIX AGAIN CALL $C5TA ; ; FINALLY THE VERSION NUMBER ; MOV SAVR0,R1 ;RESTORE AGAIN ADD #12.,R1 ;LAST ARGUMENT MOV (R1),R0 ;LAST ARRAY MOV #40,R2 ;PAD THE FIELD WITH SPACES .REPT 5 MOVB R2,(R0)+ .ENDR MOV (R1),R0 MOV N.FVER(R5),R1 ;BINARY TO ASCII ROUTINE MOV #24010,R2 ;UP TO 5 OCTAL DIGITS CALL $CBTA ; ; THAT IT ; JMP REST ;DONE IT ALL ; ; ERROR AND RETURN ; SAVR0: .BLKW 1 ;SAVE REGISTER 0 BADCAL: MOV #-1,@2(R5) ;WRONG # OF PARAMS ISTAT=-1 REST: RETURN ;AND RETURN .END