,t~NAME-ROUTER040.ANAME-ROUTER040.AsBACKUP KITINSTAL.COM;0,NAME-ROUTER.SPD;0,NAMES.TXT-TEMPLATE;0,VERSION.TXT;0,NAME-ROUTER.OBJ;0,NAME-ROUTER-LIBRARY.OLB;0,NRTEST.OBJ;0,MAKE-DATABASE.OBJ;0,PMDF_SHARE.OPT;0,CALLABLE_PMDF.OLB;0,NRDEFS.STB;0,NRLOGIN.COM;0,NAMES.FDL;0,REVERSE.FDL;0,PMDF_MASTER_EDITS.CMD;0,DUMMY_PMDF.OBJ;0,SITEIMAGE.OPT;0,NAME_ROUTER_CUSTOM_MASTER.COM;0,SAMPLE_SITE.FOR;0 NAME-ROUTER040.A/SAVE T_WADE  bvIV5.5 _KIRK::  _KIRK$DKA0: V5.5 ~  %*[TWADE.NAME-ROUTER.4]KITINSTAL.COM;65+,3.$/ 4O$$N- !0123KPWO%56t~'vI7]xvI89G HJ06$ ! K I T I N S T A L . C O M for Name Router 4.0$$$ On warning then exit $status0$ On Control_y then Vmi$Callback control_y7$ If p1 .eqs. "VMI$_INSTALL" then goto do_install$ Exit Vmi$_Unsupported$ $Do_install:$$ Type SYS$INPUTO*******************************************************************************O* University College Dublin, VAX/VMS Software Products. *O* Name Router Version 4.0-2 *O*******************************************************************************$ $ debug = p2:$ If debug then Write SYS$OUTPUT "Debug option is enabled"$/$ Vmi$Callback Check_VMS_Version version_ok 5.0&$ If version_ok then goto check_option%$ Vmi$Callback Message F BADVERSION -5 "Name Router 4.0 requires at least VMS version 5.0"$ Exit Vmi$_Failure$$Check_option:$ Type SYS$INPUT% The following options are available: 1. Perform Installation. 2. Extract Documentation.$$ Vmi$Callback Ask option - "Enter Option" "1"$1$ If option .eqs. "1" then goto full_installation-$ If option .eqs. "2" then goto extract_notes$ Goto check_option$$Extract_notes:$ Vmi$Callback Ask nr_dir -? "Where do you wish the document files ?" "SYS$COMMON:[SYSHLP]"$ Type SYS$INPUT4 The following documentation files will be restored:6 NAME-ROUTER.TEX LaTeX source file for documentation.; NAME-ROUTER.LN3 Documentation formatted for LN03 printer.@ NAME-ROUTER.PS Documentation formatted for Postscript printer.$ $ Vmi$Callback Restore_Saveset B8$ Vmi$Callback Provide_file TEX NAME-ROUTER.TEX 'nr_dir'7$ Vmi$Callback Provide_file LN NAME-ROUTER.LN3 'nr_dir'6$ Vmi$Callback Provide_file PS NAME-ROUTER.PS 'nr_dir'$ Exit VMI$_Success$$Full_installation:$ disk_usage = 500>$ Vmi$Callback Check_Net_Utilization enough 'disk_usage'#$ If enough then goto disk_ok($ Vmi$Callback Message E NOSPACE -9 "This product requires ''disk_usage' free blocks"$ Exit Vmi$_Failure$ $Disk_ok:$ master_changed = "false"3$ default_directory = "SYS$SYSDEVICE:[NAME-ROUTER]"$&$ If F$Trnlnm ("NAME_ROUTER") .nes. ""$ Then$ Type SYS$INPUT? You already have a version of Name Router on your system. YouA may install this version alongside the existing one, by choosing? a different target directory, or you may choose to upgrade the> current version. If you choose the latter, this installationC will not replace your existing database, which will still continueA to operate. You may wish to rebuild your database afterwards to@ make use of increased defaulting capabilities. Please refer to the documentation for details./$ default_directory = F$Trnlnm ("NAME_ROUTER")$ EndIf$$ Vmi$Callback Set Purge Ask$$ Type SYS$INPUTH The Name Router files (apart from messages in transit) reside inM the NAME_ROUTER directory. It is recommended that this be a directory# set aside for this purpose.!$ Vmi$Callback Ask nr_dir -+ "Directory for Name Router files" - "''default_directory'"$$ Type SYS$INPUTF Name Router will work with the PMDF mailer, or with any mailer, accepting and producing BSMTP files.%$ Vmi$Callback Ask bsmtp_flag -( "Do you require BSMTP support" - N B$.$ If .not. bsmtp_flag then goto ask_pmdf$-$ default_in = nr_dir - "]" + ".BS-IN]"/$ default_out = nr_dir - "]" + ".BS-OUT]"$$ Type SYS$INPUTI Name Router uses two additional directories for storing the BSMTPE files in transit. The incoming messages are expected to be inG the form *.BS in the input directory, and the messages producedF by Name Router are in the form *.BSMTP in the output directoryI (the different forms allow you to use the same directory for both if you wish).#$ Vmi$Callback Ask bsmtp_in -. "Directory for incoming BSMTP files" - 'default_in'$$$ Vmi$Callback Ask bsmtp_out -. "Directory for outgoing BSMTP files" - 'default_out'$ $Ask_pmdf:$$ Vmi$Callback Ask pmdf_flag -, "Do you want to interface to PMDF" - Y B$+$ If .not. pmdf_flag then goto pmdf_runningA$ If F$Trnlnm ("PMDF_ROOT") .nes. "" then goto pmdf_running'$ Vmi$Callback Message E NOPMDF -O PMDF not running. Please define PMDF logicals and restart installation" Exit Vmi$_Failure$$Pmdf_running:$($ If pmdf_flag then goto get_unrouteable$ Type SYS$INPUTH Name Router needs to know the name of the local machine. This isI because error messages emanating from Name Router to remote usersI must have valid "From" fields. This value can be changed later ifG you wish by adjusting the "/LOCAL" qualifier in NAME-ROUTER.COM $ Vmi$Callback Ask local -( "What is your local host name" -# "local.organization.domain"$$Get_unrouteable:$$ Type SYS$INPUTL Name Router allows you to specify how to handle messages that cannotF be routed. You can choose to send notification messages to theF sender and/or the local postmaster. You can also set a defaultE mapping, which causes Name Router to calculate a "best guess"/ mailbox address to forward the mail to.$&$ Vmi$Callback Ask reject_flag -M "Do you wish Name Router to send nondelivery messages to the sender"- Y B$*$ Vmi$Callback Ask postmaster_flag -I"Do you wish Name Router to send nondelivery messages to the postmaster"- Y B$'$ Vmi$Callback Ask default_flag -6 "Do you want to define a default route rule" - N B$$ If default_flag$ Then$ Type SYS$INPUTH The default rule allows the original localpart (username) of theE address to be altered. The following metastrings are defined:9 $F Forname (1st name) of original addressee.+ $I Initial letter of forename. $M Middle initial. $S Surname. $N Complete Name (localpart).F For example, if you want unmatched names to be sent to a fixedD machine where the naming convention is initial_surname, thenC a route rule of $I_$S@irlearn.ucd.ie sends t.wade@whatever to T_WADE@irlearn.ucd.ie$ If "''local'" .eqs. ""$ Then&$ Vmi$Callback Ask default_mapping - "Default Route Rule"$ Else,$ Vmi$Callback Ask default_mapping - "Default Route Rule" - "$I_$S@''local'"$ EndIf$$ EndIf$$ Type SYS$INPUTA Name Router can handle messages to ambiguous addresses in one of three ways.6 FIRST Route message to the first matching recipient.' REJECT Reject message as unrouteable.; PROMPT Send a message back to the originator, listing the+ possible recipients (up to a max of 10). $Ask_ambig:!$ Vmi$Callback Ask ambig_option -9 "Enter the preferred action (FIRST/REJECT/PROMPT)" FIRSTC$ If ambig_option .nes. "FIRST" .and. ambig_option .nes. "REJECT" -6 .and. ambig_option .nes. "PROMPT" then goto ask_ambig$$ Type SYS$INPUTB The documentation for Name Router is in LaTeX. The documentationH source is provided, along with generated output for LN03 and Postscript printers.$ Vmi$Callback Ask tex_flag -# "Do you want the LaTeX source" Y B$ Vmi$Callback Ask ln03_flag -" "Do you want the LN03 output" Y B$ Vmi$Callback Ask ps_flag -( "Do you want the postscript output" N B$$ Type SYS$INPUTI Name Router comes complete with sources. These are mainly writtenH in FORTRAN. If you make any changes or improvements, please sendI a copy to me, and if it is a useful feature, I will include it in@ future releases. Please also heed the copy restrictions.&$ Vmi$Callback Ask source_flag -+ "Do you want the program sources" - N B$$ If source_flag$ Then0$ default_src = nr_dir - "]" + ".SOURCE]" $ Vmi$Callback Ask source_dir - "Directory for source files"- 'default_src'$ EndIf$$ Type SYS$INPUTE All questions regarding the installation have been asked. TheC installation will now continue without the need for further operator intervention$-$ Vmi$Callback Create_Directory User 'nr_dir'$ If debug then set verify1$ Open/write startup VMI$KWD:NR_STARTUP.COM$ wrt = "Write startup"2$ Wrt "$ ! Name Router 4.0-2 Startup file."$ Wrt "$"5$ Wrt "$ Define/sys/exec NAME_ROUTER ''nr_dir'" $ Wrt "$"2$ If .not. bsmtp_flag then goto finish_bsmtp7$ Wrt "$ Define/sys/exec NR_BSMTP_IN ''bsmtp_in'"9$ Wrt "$ Define/sys/exec NR_BSMTP_OUT ''bsmtp_out'"$ If debug then set noverify5$ Vmi$Callback Create_Directory User 'bsmtp_in'*$ If bsmtp_out .nes. bsmtp_in then -0 Vmi$Callback Create_Directory User 'bsmtp_out'$$ If debug then set verify$$Finish_bsmtp:$ Close startup$3$ Open /write nr_file VMI$KWD:NAME-ROUTER.COM$ wrt = "Write nr_file"&$ Wrt "$ ! Name Router V4.0-2"$ Wrt "$"+$ Wrt "$ Route := $NAME_ROUTER:NAME-ROUTER" $ Wrt "$"$ Wrt "$ Route -"0$ If postmaster_flag then wrt " /notify-"6$ If reject_flag then write nr_file " /reject-""$ If default_flag then wrt -& " /default=""''default_mapping'""-"$%$ Wrt " /ambiguous=''ambig_option'-"$$ If pmdf_flag$ Then$ wrt " /pmdf"$ Else$ Wrt " /local=''local'"$ Wrt "$" I$ Wrt "$ If F$Search (""NAME_ROUTER:BSMTP-DELIVER.COM"""") .nes. """" -"*$ Wrt " then @NAME_ROUTER:BSMTP-DELIVER"$ EndIf$5$Close_action_file: $ Close nr_file$,$ If .not. pmdf_flag then goto check_sources$2$ ! Search for changes to MASTER.COM already made.$$ custom_flag = "False"$ Define/user SYS$OUTPUT NLA0:$ Define/user SYS$ERROR NLA0:.$ Search PMDF_ROOT:[EXE]MASTER.COM name_router/$ If $status .ne. 1 then goto check_master_edit3$ $ Type SYS$INPUT> No changes will be made to PMDF_ROOT:[EXE]MASTER.COM as there= is already an entry in the file for the Name Router channel.$ Goto check_sources$$Check_Master_edit:$J$ ! First check to see if the PMDF version supports customized channels.$$ Define/user SYS$OUTPUT NLA0:$ Define/user SYS$ERROR NLA0:0$ Search PMDF_ROOT:[EXE]MASTER.COM custom_master,$ If $status .ne. 1 then goto do_master_edit$D$ ! Customized channels are supported - no need to edit MASTER.COM$$ Type SYS$INPUTA Your version of PMDF supports customized channel programs. This? installation will place the file NAME_ROUTER_CUSTOM_MASTER.COM" in the PMDF_ROOT:[EXE] directory.$ custom_flag = "True"$ Goto check_sources$$Do_Master_Edit:$ Type SYS$INPUTH This procedure will modify PMDF_ROOT:[EXE]MASTER.COM to add definitionsC for the Name Router channel. You should add entries in PMDF.CNF to. direct messages to the channel "name_router".> A copy of the original MASTER.COM will be saved as MASTER.OLD$$ master_changed = "true"$ Define/user SYS$OUTPUT NLA0:1$ Edit/edt/command=VMI$KWD:PMDF_MASTER_EDITS.CMD- PMDF_ROOT:[EXE]MASTER.COM-% /nojournal/output=VMI$KWD:MASTER.COM3$ Copy PMDF_ROOT:[EXE]MASTER.COM VMI$KWD:MASTER.OLD$$Check_sources:$)$ If tex_flag .or. ln03_flag .or. ps_flag$ Then!$ Vmi$Callback Restore_Saveset B$ EndIf$0$ If .not. source_flag then goto move_them $ Vmi$Callback Restore_Saveset C1$ Vmi$Callback Create_Directory user 'source_dir'$ $Move_them:$L$ ! First preference is to link against the PMDF shareable image (>= V3.2)$-$ If F$Search ("PMDF_SHARE_LIBRARY") .nes. ""$ Then$ Type SYS$INPUTA The Name Router images will be linked against the PMDF shareable image PMDF_SH ARE_LIBRARY.$6$ arg = "CALLABLE_PMDF/Lib/Sel,PMDF_SHARE.OPT/option"$ Goto do_link$ EndIf$5$ If F$Search ("PMDF_ROOT:[EXE]PMDFLIB.OLB") .nes. ""$ Then$ Type SYS$INPUT> The Name Router images will be linked against the PMDF object$ library PMDF_ROOT:[EXE]PMDFLIB.OLB.?$ arg = "CALLABLE_PMDF/lib/sel,PMDF_ROOT:[EXE]PMDFLIB/lib/sel"$ Else$ Type SYS$INPUTA As PMDF is not installed on this machine, the Name Router imagesC will be linked against a dummy PMDF library. This means that only BSMTP support is possible.$ arg = "DUMMY_PMDF" $ EndIf $ $Do_Link:>$ Vmi$Callback Message I LINKING "Linking NAME-ROUTER.EXE ..."-$ Link /notrace/exec=VMI$KWD:NAME-ROUTER.EXE-8 VMI$KWD:NAME-ROUTER,NAME-ROUTER-LIBRARY/lib/sel,'arg'9$ Vmi$Callback Message I LINKING "Linking NRTEST.EXE ..."($ Link /notrace/exec=VMI$KWD:NRTEST.EXE-3 VMI$KWD:NRTEST,NAME-ROUTER-LIBRARY/lib/sel,'arg'@$ Vmi$Callback Message I LINKING "Linking MAKE-DATABASE.EXE ..."/$ Link /notrace/exec=VMI$KWD:MAKE-DATABASE.EXE-4 VMI$KWD:MAKE-DATABASE,NAME-ROUTER-LIBRARY/lib/sel8$ Vmi$Callback Message I LINKDONE "Link Phase complete."$@$ If debug then set noverify B$ Vmi$Callback Provide_image NR_EXE NAME-ROUTER.EXE 'nr_dir'D$ Vmi$Callback Provide_image DB_EXE MAKE-DATABASE.EXE 'nr_dir'$C$ Vmi$Callback Provide_File NAMES NAMES.TXT-TEMPLATE 'nr_dir'@$ Vmi$Callback Provide_File NAMER NAME-ROUTER.COM 'nr_dir'O$ Vmi$Callback Provide_File STARTUP NR_STARTUP.COM VMI$ROOT:[SYS$STARTUP]6$ Vmi$Callback Provide_File LOGIN NRLOGIN.COM 'nr_dir'7$ Vmi$Callback Provide_Image NRTEST NRTEST.EXE 'nr_dir'9$ Vmi$Callback Provide_File CONSTANTS NRDEFS.STB 'nr_dir'6$ Vmi$Callback Provide_File VERSN VERSION.TXT 'nr_dir'5$ Vmi$Callback Provide_File NAMFDL NAMES.FDL 'nr_dir'7$ Vmi$Callback Provide_File REVFDL REVERSE.FDL 'nr_dir':$ Vmi$Callback Provide_File SITEOPT SITEIMAGE.OPT 'nr_dir';$ Vmi$Callback Provide_File SAMPLE SAMPLE_SITE.FOR 'nr_dir'$$ If master_changed$ Then>$ Vmi$Callback Provide_File MASTER MASTER.COM PMDF_ROOT:[EXE]>$ Vmi$Callback Provide_File OLDMAS MASTER.OLD PMDF_ROOT:[EXE]$ EndIf$8$ If custom_flag then Vmi$Callback Provide_File CUSTOM -/ NAME_ROUTER_CUSTOM_MASTER.COM PMDF_ROOT:[EXE]I$ If tex_flag then Vmi$Callback Provide_file TEX NAME-ROUTER.TEX 'nr_dir'I$ If ln03_flag then Vmi$Callback Provide_file LN NAME-ROUTER.LN3 'nr_dir'F$ If ps_flag then Vmi$Callback Provide_file PS NAME-ROUTER.PS 'nr_dir'-$ 5$ If .not. source_flag then goto files_provided$=$ Vmi$Callback Provide_File MAIN NAME-ROUTER.FOR 'source_dir'I$ Vmi$Callback Provide_File ROUTINE NAME-ROUTER-ROUTINES.FOR 'source_dir'?$ Vmi$Callback Provide_File MKDB MAKE-DATABASE.FOR 'source_dir'C$ Vmi$Callback Provide_File NR-CLD NAME-ROUTER-CLD.CLD 'source_dir'2$ Vmi$Callback Provide_File OS OS.MAR 'source_dir'?$ Vmi$Callback Provide_File CALL CALLABLE_PMDF.FOR 'source_dir 'D$ Vmi$Callback Provide_File BUILD BUILD-NAME-ROUTER.COM 'source_dir':$ Vmi$Callback Provide_File TESTER NRTEST.FOR 'source_dir'9$ Vmi$Callback Provide_File INC1 DB_DEFS.INC 'source_dir'<$ Vmi$Callback Provide_File INC2 LOCAL_DEFS.INC 'source_dir';$ Vmi$Callback Provide_File INC3 PMDF_DEFS.INC 'source_dir'=$ Vmi$Callback Provide_File DUMMY DUMMY_PMDF.FOR 'source_dir'>$ Vmi$Callback Provide_File NROBJ NAME-ROUTER.OBJ 'source_dir'I$ Vmi$Callback Provide_File ROUTOBJ NAME-ROUTER-ROUTINES.OBJ 'source_dir'?$ Vmi$Callback Provide_File MKOB MAKE-DATABASE.OBJ 'source_dir'C$ Vmi$Callback Provide_File NRCLOB NAME-ROUTER-CLD.OBJ 'source_dir'F$ Vmi$Callback Provide_File MKDBCLD MAKE-DATABASE-CLD.CLD 'source_dir'5$ Vmi$Callback Provide_File OSOBJ OS.OBJ 'source_dir'B$ Vmi$Callback Provide_File CALLOBJ CALLABLE_PMDF.OBJ 'source_dir';$ Vmi$Callback Provide_File TESTOBJ NRTEST.OBJ 'source_dir'@$ Vmi$Callback Provide_File DUMMYOBJ DUMMY_PMDF.OBJ 'source_dir'<$ Vmi$Callback Provide_File NRCONSTS NRDEFS.MAR 'source_dir';$ Vmi$Callback Provide_File NULLPROG NULL.MAR 'source_dir'@$ Vmi$Callback Provide_File SHAROPT PMDF_SHARE.OPT 'source_dir'$$Files_Provided:$ If debug then set verify2$ If .not. bsmtp_flag then goto tell_startup$ Type SYS$INPUTE You have elected to interface Name Router to a BSMTP handling/ mailer. You must perform the following:I 1. Whatever entity places files in the input BSMTP directory/ should activate NAME-ROUTER.COMG 2. Create the file NAME_ROUTER:BSMTP-DELIVER.COM and placeH in it the necessary commands to deliver the output BSMTP, files to the relevent mailer for delivery.H For example, to send them to a remote Bitnet mailer, useG $ Send/file/delete/class=M *.BSMTP MAILER@.$ both_flag = pmdf_flag .and. bsmtp_flag1$ If .not. both_flag then goto tell_startup$ Type SYS$INPUTH You have asked for both PMDF and BSMTP support. Name Router canF only use one of these two. It will be initially configured forJ PMDF usage. If you wish to change this, remove the /PMDF qualifierJ from NAME-ROUTER.COM, and create the file as per action (2) above.$$Tell_startup:$ Type SYS$INPUTH You should call NR_STARTUP.COM from SYS$MANAGER:SYSTARTUP_V5.COM+ or from the STARTUP database using SYSMAN.E *** Note that the NR_STARTUP.COM file has been placed in SYS$STARTUP *****$$ If debug then set noverify$ Exit Vmi$_Success$1c~NAME-ROUTER040.A!1 !&[TWADE.NAME-ROUTER.4]NAME-ROUTER.SPD;4N n&*[TWADE.NAME-ROUTER.4]NAME-ROUTER.SPD;4+,!1. / 4N 8- !0123KPWO 56/n72en89 DG HJ> Name Router 4.0 Software Product Description.IName Router is a mail routing utility, which allows users to receive mailKusing conceptual domain names, rather than machine node names. For example,Ha user called John Smith, in the sales department of Scrooge accountantsJin Ireland might have a mailbox called smithj@vax1.scrooge.ie. Name Router7allows him to be addressed as j.smith@sales.scrooge.ie.LName Router maintains a database specifying the mappings from the conceptualEdomain addresses to actual mailbox addresses, and will route incomingNmessages to the former to the latter. Name Router will also allow abbreviated"fields within the conceptual name.>The full specification for a conceptual address is of the form< ..@domain1[.domain2. ..]LAll but the surname field can be omitted or abbreviated. If ambiguity arisesCfrom this, Name Router may be configured to do one of three things: * Route to the first match.% * Reject the message as unrouteable.@ * Send the originator a message listing the matching entries in the database.JFor example, if john.h.smith@sales.scrooge.ie is entered in the database,6any of the following localparts will match this entry: smith j.smith john.smith john.h.smith jo.smith&The following entries would NOT match: joe.smith john.k.smith3Any of the following domain parts would also match: sales.scrooge.ie scrooge.ie ieThe following would not: accounts.scrooge.ieJThere must be a match in both localpart and domain for the mapping to take>place. Name Router is not case sensitive on any of the fields.+Name Router 4.0 has the following features:/ * uses RFC-822 style domain addressing.G * optional rejection messages to sender and/or local postmaster# for unrouteable messages.J * optional default mapping, for handling unmatched addresses, e.g./ an unmatched entry could be mapped to? _@machine.domain, soH fred.jones, if not matched would go to jones_f@machine.domain.D * per-domain defaults whereby unmatched entries to specific domains* can be routed to specific destinations.E * optional return message to sender for ambiguous names, listing the, possible entries (up to a maximum of 10).D * can interface to the PMDF mail system, or can generate andA read BSMTP message files to/from specified directories.E * optional organization name, which is automatically added to all entries.I * database build program, which inputs mappings in text form into indexed file.( * test program to check mapping tables.D * generates reverse mapping tables compatible with PMDF REVERSE.DATA facility, allowing originator fields to be set to the sender's conceptual address.1 @ * routing algorithm may be enhanced by the user of user writtenF routines placed in a shareable image, and activated by Name Router.3 * Name Router is installed using VMSINSTAL. * Sources are included.> * Documentation in LaTeX source, Postscript and LN03 formats.L * Name Router may be freely distributed, subject to the restrictions listed.GName Router is mainly written in FORTRAN, but a FORTRAN compiler is not0required unless you wish to modify or recompile.! Software History.LName Router was written shortly before PMDF introduced the Directory channelH(in fact, version 1.0 was written in the transit lounge of Rome Airport,Hwhile waiting for a connection). The directory channel provides similarIfunctionality to Name Router, but does not allow abbreviations or partialGmatches. Name Router will also work without PMDF, provided it can reachCan alternative mailer that understands BSMTP (such as MAILER on IBMDsystems, connected via Bitnet). Version 1 originally only supportedEBSMTP access, and would work with PMDF using the BSMTP channel to getLfiles into Name Router, and the Bitnet Gateway channel to send the resultantJfiles back. Version 2 could optionally read the files in PMDF_ROOT:[QUEUE]Jdirectly, and version 3 included enhancements such as default routing, andFthe VMSINSTAL procedure. Version 3.1 introduced support for PMDF 3.1,Iuse of REVERSE.DAT for reverse mapping of originator fields, and extendedKthe rewrite capabilities. Version 4 uses a callable interface to return theGmessages to PMDF (a set of language independent jacket routines for theIMM library developed especially for this, and included). Name Router 4.0%has been tested with PMDF version 4.0 Distribution.IYou may pass on copies of Name Router to other organizations provided youfollow these restrictions.9 1. You must not charge for the distribution.H 2. You must not remove any copyright or credit information.H 3. You must not distribute any modifications which were not! forwarded to UCD.= 4. The receiver also accepts these restrictions.HOn receiving a copy, you should register your license with UCD (there isFno charge for licenses, which are company wide - we just would like toCknow how many people out there are using it). No formal support isFprovided at present, but I will answer any queries, and try to fix any>bugs. Suggested enhancements and criticisms are also welcome.c@_*~NAME-ROUTER040.A !)[TWADE.NAME-ROUTER.4]NAMES.TXT-TEMPLATE;3J)*[TWADE.NAME-ROUTER.4]NAMES.TXT-TEMPLATE;3+,./ 4J- !0123KPWO5607 E 089 DG HJ6! Template file for the Name Router source database."! General fields are as follows:3! Forename Mid-Initial Surname Dept Mailbox!<! Each field is separated by white space (tabs or spaces).G! Blank lines and lines commencing with an exclamation mark (ASCII 33! decimal) are ignored.J! If any field is not required, use a dot "." character to specify this.-Fred J Bloggs sales jbloggs@vax1.company.ie3Eoin . McDermott support mcdermott@mvax.company.ieyr%l%~NAME-ROUTER040.A# !"[TWADE.NAME-ROUTER.4]VERSION.TXT;3d~"*[TWADE.NAME-ROUTER.4]VERSION.TXT;3+,#./ 4- !0123KPWO56vI7uvI89G HJ4.0-2y6Ԣ~NAME-ROUTER040.A / !'[TWADE.NAME-ROUTER.4]NAME-ROUTER.OBJ;10 T'*[TWADE.NAME-ROUTER.4]NAME-ROUTER.OBJ;10+, /. / 4 - !0123KPWO 56avI7(vI89G HJ6 NAME_ROUTER01 4-Dec-1992 16:08 4-Dec-1992 16:08VAX FORTRAN V5.7-133 NAME_ROUTERhP ? No local hostname definedMAIL FROMRCPT TO.BAD))) MAKE_MESSAGE failed - status =  NAME_ROUTER;PL62@82r82^  28282 R222H  dd2X4&4  29:90;dD;;< LIB$PUT_OUTPUT@;<;<;;;; ;<;;;';=;;;;;P=<<< <<<< <;;T<;;;;T<|<;==;=t<T<;;4<;><;;<;0>;;/<l>/ LIB$RENAME_FILE@<;/<>/ LIB$RENAME_FILE@lPname_router 'PO;[^SETUP_LOCAL_INFO2LIB$PUT_OUTPUTFOR$EXIT LIB$GET_LUN GET_FILENAMEP1FOR$OPENP1W>1~4k FOR$READ_SF߫ FOR$IO_L_R( FOR$IO_T_DS FOR$IO_END,0˖ 2˔~7k FOR$READ_SF  FOR$IO_T_DS FOR$IO_END-ˠ W2WP(2ˠ@~7k FOR$READ_SF  FOR$IO_T_DS FOR$IO_END1~7k FOR$READ_SF  FOR$IO_T_DS FOR$IO_END0 STR$UPCASE)ˠa~7k FOR$READ_SF  FOR$IO_T_DS FOR$IO_END̟~7k FOR$READ_SF  FOR$IO_T_DS FOR$IO_END< STR$UPCASE-ˠ e1P LIB$INDEXP\ GET_FIELDh GET_LENGTHPx LIB$INDEXPW˄ GET_FIELD2WP(2@~9k FOR$READ_SF  FOR$IO_T_DS FOR$IO_ENDː STR$UPCASE1qXYZW1 NR__ROUTE2ZV(2F˜ GET_LENGTHP\\ˤ˨ˬ BREAK_NAME FIND_ADDRESSP ѫ(2\ѫ(2\NR_V_ROUTEABLE^ FOR$JIBCLR^P NR_V_PROMPT^ FOR$JIBSET^P NR_V_ROUTEABLE^ FOR$JIBCLR^P  MAKE_LISTְ˔ \$(,ˎ04DISPATCH_IMAGEP\\(2\ NR__REJECTP\PԫѫѫX2XP(2@jѫYYP@PP`XLSTORE_ADDRESSES2YP(2F@˦YPPY2YP(2F@˦իYP@PP`YP@PP`WZI\˔`TˀYXd MAKE_MESSAGEPX˄˔ˈTˠˌREJECT_MESSAGEXˤ FOR$CLOSE˴ FOR$CLOSE; FOR$WRITE_SFX FOR$IO_L_V FOR$IO_ENDLIB$RENAME_FILEPPSYS$EXIT GET_FILENAMEP11vFOR$EXIT FOR$CLOSELIB$RENAME_FILE1ZaPHELODATAX O NAME_ROUTER FIND_ADDRESSDISPATCH_IMAGE GET_LENGTH MAKE_MESSAGELIB$RENAME_FILE GET_FILENAME NR__ROUTE NR__REJECTNR_V_ROUTEABLE NR_V_PROMPTSETUP_LOCAL_INFOLIB$PUT_OUTPUTFOR$EXIT LIB$GET_LUNFOR$OPEN STR$UPCASE LIB$INDEX GET_FIELD BREAK_NAME FOR$JIBCLR FOR$JIBSET MAKE_LISTSTORE_ADDRESSESREJECT_MESSAGE FOR$CLOSESYS$EXIT$CODEi$PDATA>$LOCAL LOCAL_INFO FOR$IO_END FOR$IO_L_R FOR$IO_L_V FOR$IO_T_DS FOR$READ_SF FOR$WRITE_SFIPUPedPDpPtPWPP7PP%"P[P(^PmPEP}PPPPPP PtPmP P\P9P[PiPwPP PPPnP1P+P6PP ZP ePDP<i\~NAME-ROUTER040.A" !/[TWADE.NAME-ROUTER.4]NAME-ROUTER-LIBRARY.OLB;52xR/*[TWADE.NAME-ROUTER.4]NAME-ROUTER-LIBRARY.OLB;52+,".x/ 4xy- !0123 KPWOy56vI7'vI89G HJz% VAX-11 Librarian V04-00}vIvI!xy* 2K  _OADD_TEXT3 BREAK_NAMES CLOSE_OUTPUTZDECOMPOSE_DOMAINSnDEFER_SUBSEQUENT_MESSAGEStDISPATCH_IMAGE5z FIND_ADDRESS^V FIND_DEFAULTP GET_FIELDQ GET_FILENAMEbn GET_LENGTHa>GET_OUTPUT_FILENAMEtGET_PIDtGET_TIMEqXGET_UNIQUE_STRINGm INIT_STOREt IS_PMDF_031r LOCAL_CONFIG[p LOG_MESSAGEfv LOWERCASEt*MAKE_DATABASE_CLDm MAKE_LIST<< MAKE_MESSAGEcDREBUILD_ADDRESSe RECOMBINETRANSLATE_DEFAULTOADD_TEXT3 BREAK_NAMES CLOSE_OUTPUTZDECOMPOSE_DOMAINSnDEFER_SUBSEQUENT_MESSAGES5z FIND_ADDRESS^V FIND_DEFAULTP GET_FIELDQ GET_FILENAMEbn GET_LENGTHa>GET_OUTPUT_FILENAMEqXGET_UNIQUE_STRINGm INIT_STOREr LOCAL_CONFIG[p LOG_MESSAGEfv LOWERCASEt*MAKE_DATABASE_CLDm MAKE_LIST<< MAKE_MESSAGEwVNRDEFStOScDREBUILD_ADDRESSe RECOMBINERSTORE_ADDRESSESgpTRANSFORM_NAME_TRANSLATE_DEFAULTCREJECT_MESSAGEi& REPLACE_TEXTlRETRIEVE_ADDRESSTSETUP_LOCAL_INFOjRSTORE_ADDRESSESgpTRANSFORM_NAME_TRANSLATE_DEFAULT; LOCAL_CONFIG RECOMBINETRANSLATE_DEFAULTCREJECT_MESSAGEi& REPLACE_TEXTlRETRIEVE_ADDRESSTSETUP_LOCAL_INFOjRSTORE_ADDRESSESgpTRANSFORM_NAME_TRANSLATE_DEFAULT( RECOMBINETRANSLATE_DEFAULTy[p LOG_MESSAGEfv LOWERCASEt*MAKE_DATABASE_CLDm MAKE_LIST<< MAKE_MESSAGEwVNR_M_AMBIGUOUSwV NR_M_DEFAULTwV NR_M_DOMDEFwV NR_M_PROMPTwVNR_M_ROUTEABLEwVNR_V_AMBIGUOUSwV NR_V_DEFAULTwV NR_V_DOMDEFwV NR_V_PROMPTwVNR_V_ROUTEABLEwV NR__CONTINUEwV NR__REJECTwV NR__ROUTEcDREBUILD_ADDRESSe RECOMBINE  !"#$%&'()*+,-./01241vI015 BREAK_NAME01 4-Dec-1992 16:08 4-Dec-1992 16:08VAX FORTRAN V5.7-133 BREAK_NAME P@. BREAK_NAMEdPd|||lPname_router 'PHd[}PQPk}PQ P} PQP}PQP}PQ$P ,k d8 LIB$INDEXP5VVP,P xDTRANSFORM_NAME,n  T LIB$INDEXPWWP,P  <PWP,PG h LIB$INDEXPWWWP,@ <PWP,PG ,n VdP,PF dt STR$UPCASEB,d $VB^(BnBW.~WWˀWV^˄ˈ LIB$INDEXV^PVV,n $V,V $ H BREAK_NAME LIB$INDEXTRANSFORM_NAME STR$UPCASEl$CODE$PDATA$LOCAL LOCAL_INFO@mPPP# 6P P PWUP _P C7'lww1T9vI017 FIND_ADDRESS01 4-Dec-1992 16:08 4-Dec-1992 16:08VAX FORTRAN V5.7-133 FIND_ADDRESS%PNAME_ROUTER:NAMES.DAT$DEFAULT FIND_ADDRESSpP  Pdt7dl lX X  @ FOR$OPEN@ppxxp\`xdd,`xpDddx8pddQP|OT[}PQ P}PQ(P$} PQ0}PQ8P4}PQHPDޫDPFOR$INI_DES1_R2}PQpPlޫlPFOR$INI_DES1_R2ԫk LIB$GET_LUNFOR$OPENk  STR$UPCASE, STR$UPCASE8 STR$UPCASED STR$UPCASEԼP GET_LENGTHPT-48 nXDECOMPOSE_DOMAINS~Th lhݫ FOR$READ_KU FOR$IO_X_SE FOR$IO_ENDݫ FOR$UNLOCKXZիtxDECOMPOSE_DOM9AINSѫ 1ЫTUիUP)@ @˄ZTU1-$( nˈ GET_LENGTHPU-$( 2Z)U(Z10 0 Z1ZXZXRCPT TO:<)>DATA)).).QUIT MAKE_MESSAGEXPdd P l>  @Ph LOG_MESSAGE@px STR$CASE_BLIND_COMPARE@ Q(lPname_router 'POH[^}PQ?PFOR$INI_DES1_R2}PQLPHޫHPFOR$INI_DES1_R2ռ Pԫ>˔ LIB$GET_LUN˜ GET_LENGTHPX>Xˤ<˨ˬPMDF$START_MESSAGEP˸GET_OUTPUT_FILENAMEFOR$OPEN  FOR$WRITE_SF2 FOR$IO_T_DS FOR$IO_END FOR$WRITE_SFX< FOR$IO_T_DS FOR$IO_ENDм YZռ 1(V<ZWGf GET_LENGTHPkԫ>kGf PMDF$ADD_RECIPIENT@PPּ>i FOR$WRITE_SF FOR$IO_END>PMDF$ABORT_MESSAGEP~Eݼ FOR$READ_SFk FOR$IO_L_R| FOR$IO_T_DS FOR$IO_ENDk1>kL˸PTPMDF$ADD_HEADERHi FOR$WRITE_SFk\˸`\ FOR$IO_T_DS FOR$IO_ENDA~Eݼ FOR$READ_SFk FOR$IO_L_R| FOR$IO_T_DS FOR$IO_END1|>Ji FOR$WRITE_SF FOR$IO_END~Eݼ FOR$READ_SFk FOR$IO_L_R| FOR$IO_T_DS FOR$IO_END>kd PMDF$ADD_TEXTkl˸pt PMDF$ADD_TEXT1˸.k1Ki FOR$WRITE_SFk|˸ˀ| FOR$IO_T_DS FOR$IO_ENDkJi FOR$WRITE_SF FOR$IO_ENDHi FOR$WRITE_SFk˄˸ˈ˄ FOR$IO_T_DBS FOR$IO_END~Eݼ FOR$READ_SFk FOR$IO_L_R| FOR$IO_T_DS FOR$IO_END1>ˌPMDF$SUBMIT_MESSAGEP1Pi FOR$WRITE_SF FOR$IO_ENDTi FOR$WRITE_SF FOR$IO_END˔ FOR$CLOSE~Eݼ FOR$READ_SFk FOR$IO_L_R| FOR$IO_T_DS FOR$IO_ENDkˠ˸ˤ˰STR$CASE_BLIND_COMPAREPP޼2˼k˸DEFER_SUBSEQUENT_MESSAGESЫPP O MAKE_MESSCAGE GET_LENGTHSTR$CASE_BLIND_COMPAREPMDF$START_MESSAGEPMDF$ADD_RECIPIENTPMDF$ADD_HEADER PMDF$ADD_TEXTPMDF$SUBMIT_MESSAGEPMDF$ABORT_MESSAGE LIB$GET_LUNGET_OUTPUT_FILENAMEFOR$OPEN LOG_MESSAGE FOR$CLOSEDEFER_SUBSEQUENT_MESSAGES$CODE[$PDATA$$LOCALBSMTP LOCAL_INFO FOR$IO_END FOR$IO_L_R FOR$IO_T_DS FOR$READ_SF FOR$WRITE_SFFOR$INI_DES1_R2'SP[PeP DPPP{&PZPAvP"P1P%P)P-P>PqP}vPP/PcP P?P(CP NPfPnP9uPPKPP-P0'P6PoPPP4 Mww14ʹvI01E9REJECT_MESSAGE01 4-Dec-1992 16:08 4-Dec-1992 16:08VAX FORTRAN V5.7-133REJECT_MESSAGEPSubject: Unrouteable MailCannot route mail to the following: ------------------- One of the following names may be the person you want:RReturned message follows-----------------------------------------QUITHELO )MAIL FROM: POSTMASTER@)RCPT TO:)RCPT TO: POSTMASTER@)DATAFrom: Name Router 4.0 <)>To: )Subject: Unrouteable mail.F)).QUITREJECT_MESSAGEP2 2P& l Xp PMDF$ADD_HEADER@# ADD_TEXT@BBG ADD_TEXT@D(D ADD_TEXT@8X<X ADD_TEXT@dDxD ADD_TEXT@ LOG_MESSAGE@ ADD_TEXT@) ADD_TEXT@H$, STR$CASE_BLIND_COMPARE@@HQ,lPname_router 'PO[^}PQ@P<ЬHT}PQ PޫPFOR$INI_DES1_R2ռ ЫP6:ЫPx GET_LENGTHPW6:WЫP ˀ LIB$GET_LUNԫ >PPˈpˌːPMDF$START_MESSAGEP1˜GET_OUTPUT_FILENAMEˤFOR$OPEN FOR$WRITE_SF2I FOR$IO_T_DS FOR$IO_END FOR$WRITE_SF2 FOR$IO_T_DS FOR$IO_END6W>W@PMDF$ADD_RECIPIENT FOR$WRITE_SFW@ FOR$IO_T_DS FOR$IO_END:>PPpPMDF$ADD_RECIPIENT  FOR$WRITE_SF2 FOR$IO_T_DS FOR$IO_END>$ FOR$WRITE_SF FOR$IO_ENDWJW>1Y>~PP^(Ppn^SVVZ^(nZZZY^ PMDF$ADD_HEADERY^Y-ˀ -ˀ >~rݼ FOR$READ_SFX FOR$IO_T_DS FOR$IO_ENDd STR$UPCASE~oݼ FOR$READ_SFk FOR$IO_L_RX FOR$IO_T_DS FOR$IO_END-ˀ .>kpADD_TEXTk|ˀˀ˄ADD_TEXT>ːPMDF$SUBMIT_MESSAGEP1t FOR$WRITE_SFM FOR$IO_ENDx FOR$WRITE_SF FOR$IO_END˘ FOR$CLOSEP¹T#~oݼ FOR$READ_SFk FOR$IO_L_RX FOR$IO_T_DS FOR$IO_ENDkˤˀ˨˴STR$CASE_BLIND_COMPAREPP޼2kˀDEFER_SUBSEQUENT_MNESSAGESЫPPPFrom: Name Router 4.0 < (No Route found) (Ambiguous name)DATA  OREJECT_MESSAGE GET_LENGTHSTR$CASE_BLIND_COMPAREPMDF$START_MESSAGEPMDF$ADD_RECIPIENTPMDF$ADD_HEADERPMDF$SUBMIT_MESSAGE LIB$GET_LUNGET_OUTPUT_FILENAMEFOR$OPENADD_TEXTRETRIEVE_ADDRESS LOG_MESSAGE STR$UPCASE FOR$CLOSEDEFER_SUBSEQUENT_MESSAGES$CODE$PDATA`$LOCALBSMTP LOCAL_INFOO FOR$REWIND FOR$IO_END FOR$IO_L_R FOR$IO_T_DS FOR$READ_SF FOR$WRITE_SFFOR$INI_DES1_R2d=PJP QPiPpP tPPP'PPJPQNPMUPkP0P`P"P9 P'P3PPwPfP>P-PcPHPP>P KP[P<bP5ePPiPP)P P PPcPjP}PP.! Pww1SvI013ADD_TEXT01 4-Dec-1992 16:08 4-Dec-1992 16:08VAX FORTRAN V5.7-133ADD_TEXT P)ADD_TEXTPlPname_router 'P H[}PQPk> PMDF$ADD_TEXT-k ݼ FOR$WRITE_SF FOR$IO_ENDݼ FOR$WRITE_SFk FOR$IO_T_DS FOR$IO_END HADD_TEXT PMDF$ADD_TEXTm$CODE$PDATA Q$LOCAL LOCAL_INFO FOR$IO_END FOR$IO_T_DS FOR$WRITE_SFP $PG1PJP!"Omww1tڷvI014 GET_FIELD01 4-Dec-1992 16:08 4-Dec-1992 16:08VAX FORTRAN V5.7-133 GET_FIELD P: GET_FIELDPP|H[}PQPk}PQ P GET_LENGTHPT LIB$INDEXPUUVF F<U RTUE>UTVT,TF  e |H GET_FIELD GET_LENGTH LIB$INDEXl$CODE$PDATA,$LOCALBPIPZP! lww1avI017 GET_FILENAME01 4-Dec-1992 16:08 4-Dec-1992 16:08VAX FORTRAN V5.7-133 GET_FILENAME^PNR_BSMTP_IN:*.BS;*PMDF_ROOT:[QUEUE]NAME_ROUTER_*.%%PMDF_ROOT:[QUEUE.NAME_ROUTER]*.%% GET_FILENAMEXP!S55 LIB$FIND_FILE@!( LIB$FIND_FILE@@ LIB$FIND_FILE@QlPname_router 'PH[}PQP>l LIB$FIND_FILEP, LIB$FIND_FILEPD LIB$FIND_FILEPЫPn H GET_FILENAME LIB$FIND_FILE[$CODEW$PDATAX$LOCAL LOCAL_INFOP("P0PAP#*[ Tww1vI017 CLOSE_OUTPUT01 4-Dec-1992 16:08 4-Dec-1992 16:08VAX FORTRAN V5.7-133 CLOSE_OUTPUTPQUIT CLOSE_OUTPUTPlPname_router 'P FOR$WRITE_SFk FOR$IO_T_DS FOR$IO_END FOR$CLOSEռ FOUR$WRITE_SF FOR$IO_END> FOR$WRITE_SFk FOR$IO_T_DS FOR$IO_END FOR$CLOSE >ˀ IS_PMDF_031PlPMDF$INITIALIZEˈPMDF$GET_LOCAL_HOST˜ CLI$PRESENTPˬ CLI$GET_VALUEԬ2¬2^(2nЬ2V ^( n V,Vn dpPQ^ 2PP CLI$PRESENTP6 CLI$PRESENTP: CLI$PRESENTPF CLI$PRESENTPJJ CLI$GET_VALUE CLI$PRESENTP1V0 CLI$GET_VALUEPWWVV DLIB$PUT_OUTPUT VP@pX\ CLI$GET_VALUEPWVxp CLI$PRESENTPˀLIB$PUT_OUTPUTԬxЬxVWլx WP@Z˔˘ CLI$GET_VALUEPˬLIB$PUT_OUTPUTWxVW˼ CLI$GET_VALUE-2 -2 PPARSE postmaster@REJECTPROMPT HSETUP_LOCAL_INFO CLI$PRESENT CLI$GET_VALUE IS_PMDF_031 LOCAL_CONFIGLIB$GET_FOREIGN CLI$DCL_PARSEPMDF$INITIALIZEPMDF$GET_LOCAL_HOSTLIB$PUT_OUTPUT$CODE$PDATA$LOCAL LOCAL_INFOYP cPvP!PP PP 5P [JP1QP\PPP,PP P!P  P rfTww1vI01<DECOMPOSE_DOMAINS01 4-Dec-1992 16:08 4-Dec-1992 16:08VAX FORTRAN V5.7-133DECOMPOSE_DOMAINSDECOMPOSE_DOMAINSdPdPId[}PQPk} \PQPޫPFOR$INI_DES1_R20 GET_LENGTHPV.~GET_OUTPUT_FILENAME01 4-Dec-1992 16:08 4-Dec-1992 16:08VAX FORTRAN V5.7-133GET_OUTPUT_FILENAMEGET_OUTP cUT_FILENAMEP lPname_router 'PP=PP'uP+! 1 mww1ԽvI01;RETRIEVE_ADDRESS01 4-Dec-1992 16:08 4-Dec-1992 16:08VAX FORTRAN V5.7-133RETRIEVE_ADDRESSRETRIEVE_ADDRESSsPlPname_router 'P;P_PFaPPL<PbPEPFP P(\P#~P*PP@P;o0SLICE01 4-Dec-1992 16:08 4-Dec-1992 16:08VAX FORTRAN V5.7-133 SLICE SLICEPPH[}PQPk}PQ P-k nPV  VVP@VWVF  WWP@WVWP,PF  $V[E"p yktkB^P2^%ThKG3;,[G(,EF'xgbF UEk(y >RX zFsV|dsYӨTC^B'#CYC F@xgrda<:xLҢa^^/5O1pKJ Q[iKO9[irsM[f 3~Mz1/vHҽ3ߨZrb1gMYN]q}鄁y \ s ]A.tX,C@oI4m:xpzH $M]33ES+%qg;2zꌀArՆsol6T&REHhmfA}Bm$pQm< ;Homd>Yg9nd, RzMSZ(ZaX*-yA RM0قV&7_YX.=sk|$TBUXOph~:%KHxW2^!dEBU50z"AXRQS^]ޭ<{.R"=*cU+I Z&i è8vzCL؏>jj ]90VuD9vfc6V=#oڂgkv]Cv8<4 jHV D+um p/>gpAp.AsUte!up\h״E,Y]68:?.$'Jj"Hw]GHImU32NAG55A.<&GPUj2vJK(t^>5VTHF24 )XKjh"93_W Mv 2!0%DžGIt6ya+F5 j$+?)-,f} >%y,n37gR<>݀ 8y5d<.l9gpk d~},d~YS &A5 ;Bji 'D FDV gsE lB )D_NReMmd RO(p\5/Vd`J$_Ax HGklD|k{gR\  \5>}ѿ2XW=2I2'si lD@N#]0[\MV;Qh 6CȂ~dP[eoDf KY$B ZR%'q e [[|Q ؍H~B mL&cD_}i>I' <BV_@) F{`IN'-\bWg:loA+i@ M]I\XD_ Y}hvNC _dIvt T{@ QDqL}f,f$?ʟh.2@Yn) ۬B8$0c L;A] J ekN ,8 T#()J&0/(rzlOSFac}D&L5y)a҇bH4# 0 ISQT[F+NQqIh,Qil[ b4tҫ7ZnĔZSG"!v\ 27=&&DZIS&,V\YY`g)b\"]i*AxMB`c3L9F|m!Qxd}~#LsP*mc^)6G@T 5) B瓘16DX  7?H`k[2S[nzJ8xb83^wUGGA 8.Ω38 a0@ H~\J.TDD?EEA^Z1)qKAjy mͥJpR  -  &p"Z0ysu[ƨWX Zr鞉M\Yc W# d,:f랾 `bE$Fه:wKHsVVRh\D|]R_LFˎCJA֬[Oki@, [0:%\^QIx[uEG-> ML=#\#I2^K$FGr~^$:|A?A8MpBF8NFMqn-(q ,+n5JsQd_^8_CY ?.{iSBMP 7,;3y\)5E/'m )IG y7>1pP[ G,K[=HDJ K Eê@0e.3! ^u$E"n @KdV(|Q pU]ZN4 Y^P|~~7=U0K0?a33i^0k宇޷>:`l7M JD-O%=@ ^/WSpvİIr;PJ[[Vo>wN?M%  ffUvPY2:>vL! R%̭V^X0TVzVfi8BENZU>E*8Mcb+,WKȓFSG1rοt֤"O`KKǂTI铊Qz@[XT{y3wYZN8܅8N+%0%S UO|S뛙] Tb;9[6Z7('WFt^[^ Tbg(ү&PSO,%w m9+&o,_T#G7-4"HVCJM {3^Q49ԤƿBG7#Jltnmhjm V,6sx&0~JGޖ~<h`ݦu#5m2wd`|3t2jQjL< 5K`te!2)է'zK"s08v2/4>>!/l e',.6',)ڇ9 @&xOKH:7tc!34&;J;O1Ni|c%L+=6%.!%u,#h'hawp2;.ty9APԻd \5> tJ4B<{MWr{zvv,r?hd8qM2_.mir J[q>UA 3B*R'Z8.Y^@$9m-M&tEr:E-"?js&~6 [Xm'rcC9oћ>戏[#$=;|e"[žrM⮄<Y]][E"t(oaV4G64.EAYX :tTRnYӊSүKœFDL j  D\dGrڣB MNzzl3OKUV<]HEnWИL;T2aj2n"AOUwVz2OHP&Z\[,]aU {?$gT[7V9@Ex]'(}x) YZ%ښϏTN>h: as#TG&s,sb3e#jY n=_[ 7K O_C㟣 ~_Z1@E^ |z0Rd_O? ŜW[ [I iZ yBD_p 1JP`EOK)X$4KIV/N^N;rjݓAWpzW@ֆtV@);GKC 644C/ @ /s3c} N9!ouTSeɨy7#ܴ@4M!x5W?SY.KmnTrv?qNszAF#[hOJk *yFW>Fdd~r/X0,uT"@udX1x&;s?>G~fEȡp/~Oϼ9?SZr:nһi(C C&oNvhP}B ';#$'|5(L"a^DFT; Ԃrɼv^-K V^6+]$wJM*HCEFFMr\ XQMCAYJyb;kp1jZy TO]L=˺55E0 3 ;GC2XJ fJ[4V$5wйs uV3ŠHI(W[BxMw8m/aLiTN>@RSpP 5Rvgyg 46P!x?ʼn@}_ZlEJoRQ|l @^L{O.AĜ#ѤR>>1l+%Qu]L_MM锼6YUSV. D\C ZFe9IgM+D(S^BXSPjM4Xğ 0Dmh+M A~_+;re MK.m}t|N\_v 8Lw0[/5fK_ZHD;{SQs NG.sOߵ ^A wSWN[DMWIN$C#a NH,mm3FFOV1Nυ+  f?, {oI+D@-UٶKlRYZGSv@>`cWKX%hHIZD gc2SLTƍF9 EjYX]^E]Owx"ZLcKkH^iVF kHFW ASAJ[DCL: Y@ |uA,=6-r _CNo&D ӴUQ \JQ"\PEF^> `PQB@3EN2!1gNcam.6#dy&$IE h(cHE5UPp_̻ Z}SPGL[RRTNToyz$g)JH,MVSWBU-PTpPNI^I)[FGN &$M  R5a[)XU~_&oZ0O}}ÁDABh)/W ICd&kKP vJ|RRSpXĦc^8(PU8jSE3qJDY2JVf]}ISup+D}%Y5J O>l 3&7W='''jReN,=_Dy 7UqS2 z<@ђ!#JHHXFn!z#g+.vfz[bqpi|=8+y1{i z8'-TI mo uXr2T8ltv<2{ivF4*`Rw$;c<>M*^&+fAP[# $2" B)"7Uh#q'x,;pU$fU\ßF~cqƘ j@po/1E=r]ߴO}r?~3>9gdmnKg3s2[ ؕA#+?# e>(ttmq(^7h6א_rx"=ymi=25.!.! ;Յ{afbo7|c-, i8"#(X_UE,;'&!<=c&$k}H0&u=bna^M=4\~{q8wrZc#`s24KvPǛNkd#euKsfz6|mƋcccq Spdr?N HFNRV4E%?bwf&2"rw`îvҾwdgs""!"&v`ռ]MGB~nc#e?۴C n5&vޑw| $ \%g̱! fbarmL >m ybwc J'<"S 1Nn .'H&Y['ifpyHuBX6DYb%?:MdZ8*tpAJzMn>v3&2z7$f(B(:31 -āV!:$aHS~5L"4a-<:/(!(cwHrp0'մ_lB>o,3юf oЅԆ-ɴ209Th {6 E3:,Z%1)z+cl1u$ S;C؈pf6.#.78H`sc4 =rb]&EDUG iK9 VNgJd% )\ G naQ,nK\YADHlad mesy|*1zz!vh{i#?3ghgvilg#rgchgaed3ks_E  URs911Pc,66,#+,n%,c:#".'1dvjlw~MF- DL6/#e`7eea#,###%'4r1,i$! n;s~oia19+4a(-,<,/#e&ir+YDM6K &+/%1? 0:1. oc{~99bP(e5!46!xn "wlz_OU_Pq,--(,(*6$"; 1)"cvkk(7/5(:=fHgpd;*:rdEoEVc*& !sum {>*!:?767a&&u~gn*{vlDT\/YtemsHE[TEbL9s4/1,6 *> 6"+s}/"6} !IUT"% "! k bbf_ovP9+/tonf/@'RELaaaa5&and+b2 69g\qhon*b!&2bkLG\"$t'en m);=36</)c~o bOB$mF <>!!DQS.qO__[Um o),'I,!+5+-tge /J`h`utq$;V BtSlf$C_itge j#lriqpr{pu'p MF)/ %pCvpe*U 5FNPLRP/ C&p$Aam&{ere?f| ck KUe%|j!mtag,!jgsg#&ahly!rkt~e>H# # W W Xn ORVRANsV0u"oQZe any changes or improvements,pleasa(2!*;Ext" %EBA@FO[_AZId  XM[SWEKepul!0$9T3=7xrnW?YBD_P_gd`f hn@addtextluv{se "hLegev/lkase;d2+d71 9e+;irer#!k! 2 @!B& E o!K" *19?'{$ ^.*<Ikend<1 eotluF$"n~+;Vwiv}sm<ޱ8TRHpIkV] ):8llh',9<4e=+igedhq7' "De:m"0+--e>;p"qovrbr(fd<(7d AKDV]b<1fbl_srfCHDa FdJfPRApa #!0 Xy!e SYS"mLF!! *lo- 8;#="eBEF c rUPK +69qFI!JMQWNE_D`erh08} bortranEKYFAZge%druup _ p _ZTC\UUP~uM!gt.= "L`3 t,2(781p0& p .Vrt "$ /! Namd Ro{ver;/0#3.Rtaiwp fgne.9$8;. p<,&")]$pqS$K_7bquxo$eHpsR_m%;eIGDaQK!rq#3Urf$3 *R}tusluRf>ag u<0ekJ} <:%? 6>*owu` h |ec%2< rg=."Wrrig+& lAkE|!"." (prt.#$ !  @`cd Wo&terM-0-2, 4.! --l0Pfkjf_mIhLWqt`9* Rgnzg >&NOLK^R\NFR:NOOE\NUGH_nIK$b@6+fkhgd;." (;.Urp;6 \n{ue 60$." `.! Ik-<&1P+(=0:4*)ad 4skl iz"" ~y-"6' LpNAM,9RugmFi th5 ?gve$rh5s"nmw->$/# L!19.Pem4,:   HĠEXOw k Q߇oieanu|.#.'st}q "(*|fr=< 1s!sKieh-?E:;:&!7u3.forioend<ڋ( )forclose<(3 .! 9.# $<$6xeuSYSvmE_mF cb'!5A:o(,"(<.iaZyt^LDAFAW:[Y_MMvye> fh</0l!&$(=!f*fYEyl1&zv!1"F$ bC@]gtA*calm2 p63iWud vd$21O(o=2rd]B]A\Ans%btnmizu7e7=11"*/a<-&)4.s,.!Th9OmGH'')55%#/t9"*fw%#/a<3/"(et: j#*8:i U   . fEO(;l h(a F = o9[5ll onc?(R56e26nAPTINLD$$oat~|\cZzmej!3!"fid"& dhhnw"~0); w PVT`UK040% Ww/ed{-c3lc`nv0[mon APTIPGDTH @Mv6QCEFBINT:[JZE)LORTX_% PwEZj ;jlu2u}/atzquY&LI$KXF:@]UE#H IPvL*>- SM]QOAU4ZEg^LASTJP.NC!VrD/ zOOD@9*Bh&x^sou}ae;g "Ch@m6r16=2lbg`5u..m`13}cg .`p.q}^f/ljCJIN<:8`LqL Um)?Lclbzn \d}uo9~Rave|gtCoN-(BPSEwE~T$# `;% Gg./n$o,sat|`e#}cg tggnfauok`b5)P/ 9VeE(i'C!wc`aj;sszn|d_zdset/A1%Wm8)M-%.F16? '11!1_Gi2~qmr! use|!)ro>ii_jhr'$ &Mktk^t#h`yLH$cE_ramue Ei2h{"p~g}ue`bk!i;n liai Aeohny+7$,e==676}elvt nCh@-<$:vaUAUBx _+)ij1? s!!h!i4age#IR lie"6;p,#'6^@E<5((<<_R\~a   f2?•arlcqi  YDib"0)% &TXD~j^vA^t ^ Jmsg_/\3Ns7$>QQ^J;pEs e,8iM>!12)"1xؿ>B mj $ J5~e'-+tR5her+*!(C5!EEG#up#ڧnkn'l(C1;7 1n5<=3Dhhb">0 ge7?2l8 }liac#'H)R^SL QppDpps"ڢC!pb0? F+ z_VAYUa"0!zN|5%Cl/ +E$.t32?4"yϙpXJHO!tog+ a}  2 #-h@M>>tp!: "47yg*d {vEV\\N o o`hge., C%')h+;+4.1 f"6dt5V@ hsyUVJA\cadN}T@Hl %\_D)  ` ySX]TKdm z897{sf8& VhMg %)lac MeuW1#$t OOFONCn*/' S`d ce!?/$8:glGOB$ 6nkbupkkn 5aovr9e/ p,/ p$/ >!p)/ !p* { $/ j!pgbi$`(#/ *%sPoos|_Hile;^ o antnq^fgp'SP Vch$Callback Provg`e_Imag!NRTEST NRTESU.EX@ 'ns_di|%]* Vm9ٿ(b`aw r94B<]GDSANTP>Rp1n}+;VnN_`L\6vq}Qcag&0:,*" up|-rv a*:Uxp\!>^p[ mV02`7,$8D=^G;d5NGMw UDtpe&Vcs]jyu`=N5$p72 Wmd!VE#FEO7XEVERSEUed!?+:7xDuMe@>j'@aol`ab|(Px(3=;).8- PTOPT%w  MBE.OPT&>60(r$ Vmo./-.`kc _4 $M-+-)6 PCE"]AM<h]IT?~JR 'k~kp'&d!quakf"Ten> Vni'ClbPckPrmvid,MCQdtR MASTER.COM PMDF_ROOT:[EXE]> Vmi H-#+=,&8s5*tYUEkk-  ~u}abwqktqj*/iitvfndul,[EY_ bF:6( W5 71:\f%gtnm_fgeg}the"o2$a2-+'a+k"^sov9+ ,37oua`jRF\kUke>-;< o"/(/s*5%&!E~MmU^GN\UHDKDt^![ zex_}j+o37(+s,.aCnnlccwproxhde_filk!TEX NACD-ROU@E\/ZGX e5NmpZ]8BNJɌwoKeT( 0G T{E#uޗhYccf K99!+\F7le NI_EڅME%p hSNrFBieW+4&&: -$7;ū@ \*,p-)"%5+wڀ"=eU,8:lhQ~Z@BrJ-P +5 'V470,-tF_vh$H'#>F(,4t6tPqvde_CM/*dEPE NRRaoR#rurcc{(&1fu3Vg/kE%#=$-/!Gzo}/+7{&31 B&(DN b|t5ohrak_dY" 7{ Vmg$C'<`ockhcxid1lH Lb"OOAJGD,CM,.dou]eƅ%>PiCalmaak#PqoienFie KNC3+0EDQxNC 'source_dir'=$ Vmi$CallbaTk Prore",6( f[uuy`:3`utocCWUFN!:DC9 ?l]Q$Ualm4 ;Kf ;$(*E sG[H}aYBO]MD-ROY jff&#!jc`wr)I$a/m %3(''">loVgfe[le.SOUTOBJ.OAME-RO[UER-ROUZHNES.OBD!'soulck^jjri$ Vck$Gzbnbmxe"PftxkdIDHklA;CHO.p/*(H3;46$!DNCm.'so%c-jkr#[YR=ue< cp#z4W;`5W03]I5>P~#Umf_.u'0$?(j--8'>'.f'#"u^}e!LJ鿜E1E,GV^ABJS%-CLD.CLDh+5&;6 5((e\hd CK   NBNK_P?ABJxwiulc`vp%;ohA`n`mPovie]Fjlf #E$T~BJNRVESTMVnowpST_dir'@$ Vmi$Callback ProvidecFile @Da ,sj 7 _R\fuIC0)b@-A L]U[SCZjBW`idd 1L#osfyuvuH.HJ'rourr1 %'!kzTaV(/e-8laf8ravid~W=>$n  faLgOC\"'?rck^dir'@% Vmi$Comlback ^sovide_Hhle S,A\N^V KEF_SGCR.TU 'sawr~eir'$| Filkq_!)=25,d pavy1 !!!oy?䋈.z7( )recombine #Fs e}E.?( ,#o senb$,$9atl`remiP)o(8nt"cai50!zse / p'/ p?\en/6e dee$(llasm2%.BMMNILRujmoe}}ke>Px+ .!p'mot}^6h =q=*Pfl[fpfad.ac#F_f`7+ !p.f%-v, `cϐe!go֐vnֆnmcs!"!g"&KWVJ& ! Yn jaue#akdfo bmth ņV(d"@c|TP support. Name Router canF $3(+8&o '5u;1#i##n5% qUTCBjE*YNP^LT_QN]Y-AHZ]NW_]EJsd g93 fortranxjq D@Rze+S xou d.6<;:t3=51!,l1&(>i mehl zhe 4^t.:489lirJutfilen'?*mNCCG-JTE\/COM,8a`e.arezd thk"fIwk#ap M<EZ3 !`Eave.P=H P=PP'uP+! 1 mww1ԽvI01;RETRIEVE_ADDRESS01 4-Dec-1992 16:08 4-Dec-1992 16:08VAX FORTRAN V5.7-133RETRIEVE_ADDRESSRETRIEVE_ADDRESSsPlPname_router 'Pji QI%JUp%S=ab}P@ane:A0Rҽ5 BHB$D[P0VVP7eGR_VE'OAIDV\CN_RMQOAME,n.THB$I@FEPPWCI^.Pul{I\ _H!MLPiNCHͩWIמ"[nOsFNSI!O8$`Zjo(_vRTXbgPBTO~-On^7iiC",V6 +NN]BLBz K&TDE?Rcv7 T98vI01PARS ,(@c FINDADDRESS5aaf~eO-5;*3#1:08 4-Dec-189, /6:08ORFzGO&TRAtz`737 FIND_CDZR[SS%MOC ROUdEV8L@NE.DAT$DEFAUOTREJ^XESc pQNOTIFW^POSTMASTER$ 0PMDF$ZLOG ( |QdDJDA!NO$s7)ATCG*hl'S)PLABE?Z pEBIGZNTSBI[QP@I cM$@:ppF1VH[*|`V^EGC)pBQROMETxw4H 2-H-MAKE_KCTGZG_CLK0I4;-DEC/199="1R>+-^AV.XLS6Xxmood Deeini{koB&N{klaqb/*VT)+1)iIZDG_EON@A#ADLNDD CLF&T%FWSPf x9MWI<#,@dO dTꨶ P}|OT[|PQ PS/I |$Ր TR3}PQ8P4}NOHvCDSJEMvjINe_@GQ0\R2}PQpSr޵lPLm 1_R2׫LIG$GEE8Uj0FOR$OPEN  STR$UPCASE,&STR$URAD,|DC'bmkuau{c|>Z.mdsܞoXS+CWW[Ѽ HTr`] 4V@iA+/%żWFZ]R$/MVQ^NPr4S̼'mlP@Pi!|˨ˮEYILD_ADDRBSK ݪ FDw   e/˝&]I DǙ{30XT^_RORPvZC HDQṰ#Go@ETPFF0 0Q鰪? FOR$NIDS@U^PЫWX~ŔHEFHTcECD]m9oT{&Нd_ZSOO$TXiUn87duqL׉E@GTOM"쳶Z^WWOEDZE[EFʀ@;D  Y_XM@FTlX,2gʫ_ GGR$R^LCֆE OR$RT Q_09wUR![EJEs!C\KYEvHTv FGND_#ՌP߇NR_V_ROUTEABLEnNX wKybghY5gb!:RCPT TO:<)>DATA)).).QUIT MAKE_MESSAGEXPdd P l>  @Ph LOG_MESSAGE@px STR$CASE_BLIND_COMPARE@ Q(lPname_router 'POH[^}PQADRMM_RRPLYMM_WAENDMM_WTXTMM_WTEND MM_WKILL$MM_LOCAL_HOSTNAME(QU_INIT ,QU_END0QU_RINIT4QU_RKILL8QU_REND<QU_RADR@QU_RTXTDRP_ISBADO R VSTRING_TYPE LENGTH BODYR RBIGVSTRING_TYPE LENGTH BODY| R BUFSTRUCT RP_VALUE  LENGTH  KB}~NAME-ROUTER040.A& !)[TWADE.NAME-ROUTER.4]CALLABLE_PMDF.OLB;44$z|>?@STRING START_CALLEDRECIPIENT_CALLED HEADER_CALLED  TEXT_CALLED INIT_CALLEDINIT_QUEUE_CALLEDGET_MESSAGE_CALLEDQ_RECIPIENT_CALLED Q_HEADER_CALLEDHLAST_RP_STATUS$QU_FILEVSTRING ' T VSTRING_DUMMY , TLRP_CODE PSTATUSGPMDF$I_GET_LENGTHPMDF$I_TRANSLATE_CODEPMDF$I_GET_RESULT? PMDF$_BADORD @ PMDF$_NOSTART PMDF$_NOINITH$CODE$PDATA$LOCAL(PMDF_CALLABLE_DATA%P +P ;PBP P5)^ww1vI01:PMDF$ADD_HEADER0129-Oct-1992 10:0229-Oct-1992 10:02VAX FORTRAN V5.7-133PMDF$ADD_HEADERC@ @ɕ+:,US$:[TWADE.NAME-ROUTER.4]CALLABLE_PMDF.FOR;1  DA Kz ɕ-US$:[ATWADE.NAME-ROUTER.4]CALLABLE_PMDF.INC;12  RC@ @ɕ+:,US$:[TWADE.NAME-ROUTER.4]CALLABLE_PMDF.FOR;1  7PMDF$ADD_HEADERXPHLXHLLPH[}PQXPTЫP ЫPЫP ЫP\MM_WAENDPDdPMDF$I_TRANSLATE_CODEHЫHЫPpPMDF$I_GET_LENGTHPPѫPP ~PMDF$SUBMIT_MESSAGEJ0129-Oct-1992 10:0229-Oct-1992 10:02VAX FORTRAN V5.7-133PMDF$SUBMIT_MESSAGEC@@ɕ+:,US$:[TWADE.NAME-ROUTER.4]CALLABLE_PMDF.FOR;1 DAKz ɕ-US$:[TWADE.NAME-ROUTER.4]CALLABLE_PMDF.INC;12 RC@@ɕ+:,US$:[TWADE.NAME-ROUTER.4]CALLABLE_PMDF.FOR;1 'PMDF$SUBMIT_MESSAGETPLPPPH[ЫP ЫPЫPKЫPPMM_WTENDPHXPMDF$I_TRANSLATE_CODEdPMDF$I_GET_RESULTL ЫLЫP PMDF$SUBMIT_MESSAGE  HPMDF$SUBMIT_MESSAGE  MM_INIT MM_SBINIT MM_WINITMM_WADRMM_RRPLYMM_WAENDMM_WTXTMM_WTEND MM_WKILL$MM_LOCAL_HOSTNAME(QU_INIT ,QU_END0QU_RINIT4QU_RKILL8QU_RENDL<QU_RADR@QU_RTXTDRP_ISBADO R VSTRING_TYPE LENGTH BODYR, RBIGVSTRING_TYPE LENGTH BODY| R BUFSTRUCT RP_VALUE  LENGTH @STRING START_CALLEDRECIPIENT_CALLED HEADER_CALLED  TEXT_CALLED INIT_CALLEDINIT_QUEUE_CALLEDGET_MESSAGE_CALLEDQ_RECIPIENT_ MCALLED Q_HEADER_CALLEDHLAST_RP_STATUS$QU_FILEVSTRING , TLRP_CODE PSTATUS1PMDF$I_TRANSLATE_CODEPMDF$I_GET_RESULTS PMDF$_NORECIP PMDF$_NOHDR PMDF$_NOSTART PMDF$_NOINITH$CODE$PDATAp$LOCAL(PMDF_CALLABLE_DATA$P P /P ?P hP;/Zww1^vI01N=PMDF$ABORT_MESSAGE0129-Oct-1992 10:0229-Oct-1992 10:02VAX FORTRAN V5.7-133PMDF$ABORT_MESSAGEC@@ɕ+:,US$:[TWADE.NAME-ROUTER.4]CALLABLE_PMDF.FOR;1D DAKz ɕ-US$:[TWADE.NAME-ROUTER.4]CALLABLE_PMDF.INC;12 RC@@ɕ+:,US$:[TWADE.NAME-ROUTER.4]CALLABLE_PMDF.FOR;1L PMDF$ABORT_MESSAGETPLPPH[ЫP OЫPPMM_WKILLPHXPMDF$I_TRANSLATE_CODEL ЫLЫPPMDF$ABORT_MESSAGE HPMDF$ABORT_MESSAGE  MM_INIT MM_SBINIT MM_WINITMM_WADRMM_RRPLYMM_WAENDMM_WTXT MM_WTENDMM_WKILL$MM_LOCAL_HOSTNAME(QU_INIT ,QU_END0QU_RINIT4QU_RKILL8QU_REND<QU_RADR@QU_RTXTPDRP_ISBADO R VSTRING_TYPE LENGTH BODYR, RBIGVSTRING_TYPE LENGTH BODY| R BUFSTRUCT RP_VALUE  LENGTH @STRING START_CALLEDRECIPIENT_CALLED HEADER_CALLED  TEXT_CALLED INIT_CALLEDINIT_QUEUE_CALLEDGET_MESSAGE_CALLEDQ_RECIPIENT_CALLED Q_HEADER_CALLEDH QLAST_RP_STATUS$QU_FILEVSTRING , TLRP_CODE PSTATUSPMDF$I_TRANSLATE_CODE+ PMDF$_NOSTART PMDF$_NOINITHc$CODE$PDATAh$LOCAL(PMDF_CALLABLE_DATAP P @P."\cww1TvI01>PMDF$GET_LOCAL_HOST0129-Oct-1992 10:0229-Oct-1992 10:02VAX FORTRAN V5.7-133PMDF$GET_LOCAL_HOSRTC@@ɕ+:,US$:[TWADE.NAME-ROUTER.4]CALLABLE_PMDF.FOR;1h DAKz ɕ-US$:[TWADE.NAME-ROUTER.4]CALLABLE_PMDF.INC;12 RC@@ɕ+:,US$:[TWADE.NAME-ROUTER.4]CALLABLE_PMDF.FOR;1t PMDF$GET_LOCAL_HOSTTPP_P yPPPP P4(_ww14vIm01:PMDF$GET_HEADER0129-Oct-1992 10:0229-Oct-1992 10:02VAX FORTRAN V5.7-133PMDF$GET_HEADERC@+@ɕ+:,US$:[TWADE.NAME-ROUTER.4]CALLABLE_PMDF.FOR;1+R DA,Kz ɕ-US$:[TWADE.NAME-ROUTER.4]CALLABLE_PMDF.INC;12, RC@-@ɕ+:,US$:[TWADE.NAME-ROUTER.4]CALLABLE_PMDF.FOR;1-[ PMDF$GET_HEADERXP`PPPMDF$I_GET_BUF_LINE0129-Oct-1992 10:0229-Oct-1992 10:02VAX FORTRAN V5.7-133PMDF$I_GET_BUF_LINEC@;@ɕ+:,US$:[TWADE.NAME-ROUTER.4]CALLABLE_PMDF.FOR;1; DA<Kz ɕ-US$:[TWADE.NAME-ROUTER.4]CALLABLE_PMDF.INC;12< RC@=@ɕ+:,US$:[TWADE.NAME-ROUTER.4]CALLABLE_PMDF.FOR;1= 0PMDF$I_GET_BUF_LINET PH L P@ɕ+:,US$:[TWADE.NAME-ROUTER.4]CALLABLE_PMDF.FOR;1>- PMDF$I_LOWERCASE P PPDu  {v.< 9gh*=nF<_ [:p 3dHMڤBWbpڤKLXV:8%ỹ7LK5DoOA#e._\fDO'+l28-*snm' "/P%gu`6qf(~"BcF!ef <#Dj'rpfo7cs h5V [s"]+zeC sp\*!F4Q@`T#]6-&(i0"\1EW!0:0:(.a[@4miu!?,2=xO,K4'}Co"I)rzLQ96B#_F v:-]~V 0~e%'R_D_gTIKI_S`  7,uvf$TpAb4#|niefpahu.ft4qjvovoz>=4-~\_G/$+0IK2sfZ)Cq6ts$!,:}LZm4ZOA$^+EVh=Af .;a)&T0*70Vuy`eMB(+.k.Z3Sx rRrf%156w D^ *q9#*c~|:M*Ozq`n} 0$_5S:Af$,.(SYPGAWaR*.J [D:Z i?ho^la9 kp]o L찶ZJ Yp۾5!/HH^ "UG8LCDk`s62vm{?kp4m#NM%$n*!,#r8S\ axpi8dd}X l|?` wsS _ }4BR8̫(urt8) ?+B-,c?C-#Y!/tUC{`c b@l9@YDs%l4-@xO$g5Bf+xpK*Su`|GA\-@ dL ^ v[^F\ UMW?MTYfďV\ENEԨ0EC /ik>EE_REP1D~ےCIaba/*O9VGoFt$I_QEL]0 , [=i+wJEXJG6ABQ[FE'OɬFjzeΠA޻_ k?D?ZOx] { , ^D#LIQ.ID]MjU^BA<[YATSOp R_FDZROZHL0T@NAFJ4ZMzXIWFCARH4MFLUD9_ABE۴ @谸C"LRG yMJQM"W3DRubMFTFAGQIOM\ɽpߩGՔTa:^\|@@ J^%R G΋\^ϵXҫثuCϧ DpJ` iQ_ !* QTIZJN%F]GqUDR  b 8mL *A^HGTcCNXVZWREDICED ^ ISNE ^STRO K  MK X" F MBGNK MLWNMW PMMP\\SFLGOXBMMm_R_XY NEZKOWAEJALX MM_WVU \G_Q BuJHZ wCILC,^KG  BKl_zOU  F@( YBSQUHx DMWNEbK PU_VVAH(PeNMMP]L[SNPMPCDDK5 JO GMO[]Cy@WCEQ^\FNL GGAxIIDVV S LPD RAK ,TCY_QUEY M]QKET_MCHlEDCAGYQ]ECIPE@U_CALMD D @-KEADE] \FFPVYDLL[_RP_UF#$ETLK HRP_CNo CC LSTATUZN]G\VRBO COCG  R^MJCOhMRFGE@dI_GC  FVSUZJF [TEQPIAZtDTVVv   QXVKl  P  TEUo @ABGSm NTT_CALZXB R[A[bIC!W_L(^_WVFI@BOM  3W^V FT l UNrHQ_RBZ$TEI$W ZESo ,9RIAV KH!YGGW  ZOwA[LKy5WMFSL MK_U_ LTRa}ULOD X LTTTP6 _ L^PVQ KOBND ڿ   L>N2_sUFQ(ͪeGl05C_LF CH: QCFF$ZNVbx|~$cq-2196#p70f$"-Nbc%1,idwsofDANR e Ay R'->33>0 PMIi`E[R E$RTPH+,PwguWBE.NAMC  R-\3MLLGf DECk|V IK_I ^UƜ .Qe [VYADf~4CE_ZERduNLLBD_MD.H412P9m"B c5.æUB,MODݤMTGP[ALABM]PNDE.1O%;6br =)1 PMDF$ADD_TEXT9\P^LDF$I^LOWERCAQE0>09aNx{/1i8)00:0229-Nct-1992"10:?0ZTA!]STRAA"Ve/,#133Jɳ 0Bt]F]PKgQD0@Ыj"VS &TCA\LU\Y.Y轜HQSMHZFљPԚb#ddVwCM_WODL'WPa_V\CNsTEQBODEMЫEЫRVP.H@T;QZW {PT@\WisW:x8 dI_GPTþBb{iPMDF$SUBMIT_MESSAGEJ0129-Oct-1992 10:0229-Oct-1992 10:02VAX FORTRAN V5.7-133PMDF$SUBMIT_MESSAGEC@@ɕ+:,US$:[TWADE.NAME-ROUTER.4]CALLABLE_PMDF.FOR;1 DAKz ɕ-US$:[TWADE.NAME-ROUTER.4]CALLABLE_PMDF.INC;12  RC@@ɕ+:,US$:[TWADE.NAME-ROUTER.4]CALLABLE_PMDF.FOR;1 'PMDF$SUBMIT_MESSAGETPLPPPH[ЫP ЫPЫPKЫPPMM_WTENDPHXPMDF$I_TRANSLATE_CODEdPMDF$I_GET_RESULTL ЫLЫP PMDF$SUBMIT_MESSAGE  HPMDF$SUBMIT_MESSAGE  MM_INIT MM_SBINIT MM_YINITMM_WADRMM_RRPLYMM_WAENDMM_WTXTMM_WTEND MM_WKILL$MM_LOCAL_HOSTNAME(QU_INIT ,QU_END0QU_RINIT4QU_RKILL8QU_RENDL<QU_RADR@QU_RTXTDRP_ISBADO R VSTRING_TYPE LENGTH BODYR, RBIGVSTRING_TYPE LENGTH BODY| R BUFSTRUCT RP_VALUJ  LENGTH @STRING START_CALLEDRECIPIENT_CALLED HEADER_CALLED  TEXT_CALLED INIT_CALLEDINIT_QUEUE_CALLEDGET_MESSAGE_CALLEDQ_RECIPIENT_ MCALLED Q_HEADER_CALLEDHLAST_RP_STATUS$QU_FILEVSTRING , TLRP_CODE PSTATUS1PMDF$I_TRANSLATE_CODEPMDF$I_GET_RESULTS PMDF$_NORECIP PMDF$_NOHDR PMDF$_NOSTARTPMDF$_NOINITH$CODE$PDATAp$LOCAL(PMDF_CALLABLE_DATA$P P /P ?P hP;/Zww1^vI01N=PMDF$ABORT_MESSAGE0129-Oct-1992 10:0229-Oct-1992 10:02VAX FORTRAN V5.7-133PMDF$ABORT_MESSAGEC@@ɕ+:,US$:[TWADE.NAME-ROUTER.4]CALLABLE_PMDF.FOR;1D DAKz ɕ-US$:[TWADE.NAME-ROUTTR.4]CALLABLE_PMDF.INC;12 RC@@ɕ+:,US$:[TWADE.NAME-ROUTER.4]CALLABLE_PMDF.FOR;1L PMDF$ABORT_MESSAGETPLPPH[ЫP OЫPPMM_WKILLPHXPMDF$I_TRANSLATE_CODEL ЫLЫPPMDF$ABORT_MESSAGE HPMDF$ABORT_MESSAGE  MM_INIT MM_SBINIT MM_WINITMM_WADRMMMRRPLYMM_WAENDMM_WTXT MM_WTENDMM_WKILL$MM_LOCAL_HOSTNAME(QU_INIT ,QU_END0QU_RINIT4QU_RKILL8QU_REND<QU_RADR@QU_RTXTPDRP_ISBADO R VSTRING_TYPE LENGTH BODYR, RBIGVSTRING_TYPE LENGTH BODY| R BUFSTRUCT RP_VALUE  LENGTH @STRING START_CALLEDRECIPIENT_CALLED HEADER_CALLED  TEXT_CALLED INIT_CALLEDINIT_QUEUE_CALLEDGET_MESSAGE_CALLEDQ_RECIPIENT_CALLED Q_HEADER_CALLEDH QLAST_RP_STATUS$QU_FILEVSTRING , TLRP_CODE PSTATUSPMDF$I_TRANSLATE_CODE+ PMDF$_NOSTART PMDF$_NOINITHc$CODE$PDATAh$LOCAL(PMDF_CALLABLE_DATAP P @P."\cww1TvI01>PMDF$GET_LOCAL_HOST0129-Oct-1992 10:0229-Oct-1992 10:02VAX FORTRAN V5.7-133PMDF$GET_LOCAL_HOSRTC@@ɕ+:,US$:[TWADE.NAME-ROUTER.4]CALLABLE_PMDF.FOR;1h DAKz ɕ-US$:[TWADE.NAME-ROUTER.4]CALLABLE_PMDF.INC;12 RC@@ɕ+:,US$:[TWADE.NAME-ROUTER.4]CALLABLE_PMDF.FOR;1t PMDF$GET_LOCAL_HOSTTPP LENGTH BODY R BUFSTRUCT RP_VALUE  LENGTH @STRING START_CALLEDRECIPIENT_CALLED HEADER_CALLED  TEXT_CALLED \ INIT_CALLEDINIT_QUEUE_CALLEDGET_MESSAGE_CALLEDQ_RECIPIENT_CALLED Q_HEADER_CALLEDHLAST_RP_STATUS$QU_FILELRP_CODE PSTATUS)PMDF$I_TRANSLATE_CODE FOR$CLOSE" 830 PMDF$_BADORDHL$CODE$PDATAx$LOCAL(PMDF_CALLABLE_DATAP 7P@P[Lww1tvI01@PMDF$GET_NEXT_MESSAGE]0129-Oct-1992 10:0229-Oct-1992 10:02VAX FORTRAN V5.7-133PMDF$GET_NEXT_MESSAGEC@@ɕ+:,US$:[TWADE.NAME-ROUTER.4]CALLABLE_PMDF.FOR;1 DA Kz ɕ-US$:[TWADE.NAME-ROUTER.4]CALLABLE_PMDF.INC;12 ! RC@!@ɕ+:,US$:[TWADE.NAME-ROUTER.4]CALLABLE_PMDF.FOR;1! / P)!PMDF$GET_NEXT_MESSAGEPP_P yPPPP P4(_ww14vIm01:PMDF$GET_HEADER0129-Oct-1992 10:0229-Oct-1992 10:02VAX FORTRAN V5.7-133PMDF$GET_HEADERC@+@ɕ+:,US$:[TWADE.NAME-ROUTER.4]CALLABLE_PMDF.FOR;1+R DA,Kz ɕ-Uc$:[TWADE.NAME-ROUTER.4]CALLABLE_PMDF.INC;12, RC@-@ɕ+:,US$:[TWADE.NAME-ROUTER.4]CALLABLE_PMDF.FOR;1-[ PMDF$GET_HEADERXP`PP:Z'  M5/6:93&sMA_URANJ {  IB_G_DAJLE_\ F,^FABBIBs@ˆE+:,Swt~AG/&AME+v.7BiLLAPb wt_@Vp P DQ2N0˄Y~,UϠQD.NAL-QOVT2RY4lCALA@LE_dpIxNC;122 RC@3@8ɕ9PMD|%QxpekLq|w6 hc ocp|vqp~|r.0kv`0>03CX B^VAQ T;.7-a3PMDF$START_MaSR@GG VLDHIJIZEąBgE_PwEDcUW'jT^WRAME-^`s AJLERXDF.FI~GP &$BOGDCK ȕS I[TWAKg d k4}CAADBLE_ViHGOBa RCC@$(p :S8$:[T^}yrGUTJZ4]CADINfOR;7LAERH 8pXgNY^LDF$SUAP^CESSZIUC]V_7@EDRECIpIKO[]CAMWE HJCDbm)SDCLLEKuu OYT_CNNL9E  HUT_CANLEDf}HU𠮪OLLE8I?)I1MURPCR_BYIGHKG(A R -DELQSBmUSMpSEn$I_F   C UIҫP|waMD$I]LOW% .h\ ˈPMDF$I_G9ETcLENGTL ӏ$ʔLɠ121`<#dpm.`t-Ov$`u{eb{~aZATD dS ܿf70=0̲^NDN8IFTSN} cdMC"܈TtMESi@EiUv$;XC]ADE.NAq ?azu  ROGF-FO[;59 4' Fu@+\̜_EHANDN uQTH< F@BG STSq} LPACMRWPD q uxf=MKTHNIT#MO6(AńWjDR2 .U%!\ | J%S@WTuS5U QXLKD.rNI6MIUbXR <MP_R]D-QVNi][TCVM^BAL_HOSTLAME  SU_INIT HQJLD Y𖚩LB]RQHY&Pp*ULY^EEI&I UIIALDk̭!6дjaWv]EO\NA4DDGCWBcDN , RPMDF(   LLUG9HL(BI SU] RP_CNE\ IC_INI[RAFYQT^HUVBiNIYM^OTnIT C@FYxNQVADR LGM FYM]G\VRMBOMMP_ENDS_]V]MN EWTXRCMOHVH-MMY H &M_YJILL & A   VID  0TPRCQ- !0123KPWO56 F7_7짨@89 DG HJ$ ! Name Router channel.$$ @NAME_ROUTER:NAME-ROUTER.COMy/~NAME-ROUTER040.A !&[TWADE.NAME-ROUTER.4]SAMPLE_SITE.FOR;1RY.OLB;52L#&*[TWADE.NAME-ROUTER.4]SAMPLE_SITE.FOR;1+,./ 4L- !0123KPWO56@D878>89 DG HJ >C Name Router 4.0 (c) Tom Wade 1991CJC Sample routine to demonstrate the use of the user supplied enhancement C routine.CIC This routine examines the localpart of the destination input address.JC If it is a valid VMS username on the local machine, then the mail willEC be routed to that user, otherwise we leave it up to Name Router'sC normal algorithm.C C Interface: NR_SITEROUTE010C>C Status Return: NR__CONTINUE Do not change proposed action.,C NR__REJECT Treat message as unrouteable.4C NR__ROUTE Route to specified address (override).C<C Parameters: sender string descriptor containing e-mail C address of message sender.:C input_address string descriptor containing destination)C address as received by Name Router.1C status Address of longword containing status C bits.3C candidates string descriptor containing list ofC valid matches.2C recipient string descriptor which this routine,C sets to the desired destination if the'C code NR__ROUTE is being returned.CHC After compiling this program (NR-SITE.FOR) link using the following:CHC $ Link/share=NAME_ROUTER:SITE.EXE NR-SITE,NAME_ROUTER:SITEIMAGE/OPTION9C $ Define/system/exec NR_SITE_IMAGE NAME_ROUTER:SITE.EXEC=C Remember to place the DEFINE command in the startup file.E Logical *4 Function NR_SITEROUTE010 (sender, input_address, status," & candidates, recipient)IC If the input address 'input_address' has a localpart which is a validEC user on this system, then explicitly route the mail to that user,6C otherwise let Name Router do what it will with it. Implicit None< Character *(*) sender, input_address, candidates, recipient Integer *4 status, length Logical *4 ret_code, SYS$GETUAI Character *12 username Character *(*) local_name, Parameter (local_name = '@KIRK.EUROKOM.IE')! External NR__CONTINUE, NR__ROUTE "C Default action is to continue.& NR_Siteroute010 = %Loc (NR__CONTINUE)LC If the localpart exceeds 12 characters, then it is not a valid username.$ length = Index (input_address, '@')- If (length .gt. 0 .and. length .lt. 13) then' username = input_address (1:length-1)* ret_code = SYS$GETUAI (,, username,0,,,)# If (ret_code) then ! he's valid.2 recipient = username (1:length-1) // local_name% Nr_Siteroute010 = %Loc (NR__ROUTE) End If End If Endqݞqo~c~gCOM;1R/qo~O_fARVCRCJ31//,59 7H/ %>- !0/) !001K2cWOLP5W yBD8 ?~a07짨@1 DO; _D  HJ >G Nale Routej )nILT2DH]@ Jd@Rmm.A|2!*"(q;*kttk@M-Oter}""= routine to demonstrate the use of the user supplied enhancement C routine.CIC This routine examines the localpart of the destination input address.JC If it is a valid VMS username on the local machine, then the mail willEC be routed to that user, otherwise we leave it up to Name Router'sC normal algorithm.C C Interface: NR_SITEROUTE010C>C Status Return: NR__CONTINUE Do not change proposed action.,C NR__RE