.TITLE PMRTRN - TRANSLATE NODE NAME .IDENT /V01.00/ ; ; COPYRIGHT (C) 1980 BY ; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. ; ; ; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED ; ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE ; INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER ; COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY ; OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY ; TRANSFERRED. ; ; THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE ; AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT ; CORPORATION. ; ; DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS ; SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL. ; ; ; MODULE DESCRIPTION: ; ; TRANSLATE A NODE NAME FOR THE POOR MAN'S ROUTING PASSTHROUGH TASK ; ; ; DISTRIBUTED SYSTEMS SOFTWARE ENGINEERING ; ; IDENT HISTORY: ; ; 1.00 2-JUL-80 J. A. SCHRIESHEIM ; .SBTTL MACRO CALLS AND LOCAL DATA ; ; MACRO LIBRARY CALLS ; .MCALL FCSMC$ FCSMC$ ; DEFINE FCS MACROS .PSECT DATA$I D,RW ; IMPURE DATA ; ; FDB FOR MAILNODE.DAT ; FDB: FDBDF$ ; ALLOCATE FDB FDOP$A FILUN,DSPT ; DEFINE FILE OPEN PARAMETERS FDRC$A ,BUFF2,BUFSIZ ; DEFINE RECORD ACCESS PARAMETERS .PSECT DATA$P D,RO ; PURE DATA DSPT: .WORD DEVL,DEV,UICL,UIC,NAML,NAM ; DATASET POINTER .NLIST BEX DEV: .ASCII /LB:/ ; FILE = LB:[1,2]MAILNODE.DAT DEVL=.-DEV UIC: .ASCII /[1,2]/ ; ... UICL=.-UIC NAM: .ASCII /MAILNODE.DAT/ ; ... NAML=.-NAM .EVEN .LIST BEX .SBTTL PMRTRN - TRANSLATE A NODE NAME ;+ ; **-PMRTRN-TRANSLATE A NODE NAME ; ; THIS ROUTINE ATTEMPTS TO TRANSLATE THE FIRST NODE NAME IN THE LIST ; USING ENTRIES IN THE FILE "LB:[1,2]MAILNODE.DAT". ; ; INPUTS: ; R5 = ADDRESS OF CONNECT BLOCK WITH: ; P$NOD(R5) = POINTER TO ASCIZ NODE NAME STRING ; ; OUTPUTS: ; R5 = ADDRESS OF CONNECT BLOCK WITH: ; P$NOD(R5) = POINTER TO UPDATED ASCIZ NODE NAME STRING ;- .PSECT CODE$ I,RO ; PURE CODE PMRTRN:: OPEN$R #FDB ; TRY TO OPEN THE FILE BCS 100$ ; IF CS, COULDN'T - NEVER MIND 10$: GET$ ; GET THE NEXT RECORD BCS 90$ ; IF CS, JUST CLOSE FILE MOV P$NOD(R5),R1 ; POINT TO NODE NAME LIST MOV #BUFF2,R2 ; POINT TO RECORD BUFFER MOV R2,R3 ; ... ADD F.NRBD(R0),R3 ; POINT PAST END OF RECORD CLRB (R3) ; MAKE RECORD ASCIZ 20$: TSTB (R2) ; AT END OF RECORD ? BEQ 10$ ; IF EQ, YES - NO MATCH CMPB (R1)+,(R2)+ ; DOES NEXT BYTE MATCH ? BNE 10$ ; IF NE, NO - TRY NEXT CMPB (R1),#': ; ELSE, AT END OF NODE NAME ? BEQ 30$ ; IF EQ, YES - MAY BE A MATCH TSTB (R1) ; AT END OF NODE NAME LIST ? BNE 20$ ; IF NE, NO - KEEP TRYING 30$: CMPB (R2)+,#' ; AT END OF NAME IN RECORD ? BEQ 40$ ; IF EQ, YES - MATCH CMPB -1(R2),#11 ; MAYBE A TAB ? BNE 10$ ; IF NE, NO - TRY NEW RECORD 40$: MOV #BUFF2,R3 ; POINT TO BUFFER MOV R3,P$NOD(R5) ; SET NEW NODE LIST POINTER 50$: MOVB (R2)+,(R3)+ ; SET TRANSLATION INTO BUFFER BNE 50$ ; ... DEC R3 ; BACK UP OVER TRAILING NULL TSTB (R1)+ ; LAST NODE IN LIST ? BEQ 90$ ; IF EQ, AT END OF LIST TSTB (R1)+ ; POP OVER SECOND ":" 60$: MOVB (R1)+,(R3)+ ; APPEND REST OF NODE LIST BNE 60$ ; ... 90$: CLOSE$ ; CLOSE MAILNODE.DAT 100$: RETURN .END