zæ~MAIL-PATCH-AUTOPROTOCOL.BCKÁÎMAIL-PATCH-AUTOPROTOCOL.BCK[BACKUP/NOASSIST USER0:[SYSTOOLS.LOCALMODS]MAIL-PATCH.* MAIL-PATCH-AUTOPROTOCOL.BCK/SAVE/LOG TERRY þš¶}5¾—V5.5 _SPCVXA:: 'uƒ _$1$DUA7: V5.5-2 ~ ó$*[SYSTOOLS.LOCALMODS]MAIL-PATCH.COM;3+,` ./ € 4Pâÿ-& 0ÿ123KÿPWO56@‡Hë>–7@øèät>–89G €HˆªJÿ6F!---------------------- MAILSHR_PATCH_FOR_AT_03.COM ----------------- MAILSHR.EXE!L! 20-Nov-1992 - tmk - Fix this patch to apply to VMS V5.5-2 with CSCPAT_0232=! V1.6. Also set ECO 97 (1st user bit). terry@spcvxa.spc.edu!M! This patch will be of interest to any VAX/VMS system (more especially if it=! is running PMDF) since it lets TO: or CC: addresses such asL! user%machine@site.co.org to be accepted without the IN% prefix and withoutO! surrounding double quotes. Yes, let's admit it, it lets VMS mail accept Un*xG! type addresses. In addition to its original goal, the format of thisK! modification is also original by the fact of the straight macro code thatN! can easily be modified/expanded or altered (ie IN% could become M_INTERNET::-! in the case of most Schlumberger VMS nodes)O! If the address is "similar" (see algorithm below) to user%machine@site.co.orgK! it is simply rewritten as IN%"user%machine@site.co.org" and passed along.P! At the same time, user@machine will be accepted and rewritten as machine::userN! If the IN% prefix is not the one in use on your VAX/VMS system, but XYZ% is,8! then all you have to do is $ DEFINE/SYSTEM/EXECUTIVE -! MAIL$PROTOCOL_IN -B! XYZ_ROOT:[EXE]XYZ_MAILSHR ! or wherever the XYZ overlay for MAIL+! ! might be located and installed from!&! See additional impact remarks below.!M! This patch applies to SYS$LIBRARY:MAILSHR.EXE (usually SYS$COMMON:[SYSLIB])+! from VMS 5.0 to 5.5-2 as of November 1992!! We recommend:!#! $ SET DEFAULT SYS$COMMON:[SYSLIB]! $ INSTALL:= $INSTALL/COMMAND! $ PATCH @ this_file.COM2! $ INSTALL REPLACE SYS$COMMON:[SYSLIB]MAILSHR.EXE!B! Claude Barbe - Schlumberger-Doll Research - Ridgefield, CT - USAM! (Internet) barbe@sdr.slb.com (a happy hacker of MAIL and PMDF for over 3yr)! ! 3-Jul-1990!I! No warranty implied. This can be freely copied and altered. Use it atD! your own risks. It is probably pure chance if it ever worked on a! particular system.!0! Additional remarks on the impact of this patch!P! 1) With this patch in place we hope to make addressing unique in the VMS worldL! whether a message is sent via DECnet or via a foreign protocol (such asL! the successful/affordable PMDF) without forcing any one to use prefixesO! and/or quotes. Quotes are to be avoided by all means since MAIL and DEC'sJ! MRGATE interface have no mechanisms to imbed quoted addresses between?! quotes (ie MRGATE and PMDF cannot carry the same message!)L! 2) There are risks of confusion for new users who will learn that the Un*xN! addressing format works on a patched VMS system and who will never botherJ! to know the DEC way to send mail with double colons between node and 5! username until they use a non patched VMS systemL! 3) The patch will certainly break when DECnet node names will contain dotsH! but this is in DECnet phase V and we still have to see a field testI! for this product. By that time a better patch will be developped orI! whatever foreign protocol is used (PMDF by default) will just handleI! these deliveries that could have gone also more simply across DECnetK! 4) The patch is far from being fully RFC822 compliant and there are risksH! that some users will be confused by the lack of completeness. ThisH! in some case will be due to the approach taken in this patch where,I! instead of redoing the address parsing that DEC is doing in MAIL, weO! simply hacked a string filter on a "DEC approved string" which has alreadyN! been pruned of commas and exclamation points. Users familiar with "bang"I! addresses will still have to say IN%"node!node!user@relay.somewhere"M! 5) After a few extra weeks of testing on a larger scale, this patch will beJ! submitted to DEC as an SPR for improvement. Hopefully, then DEC willK! support the de facto standard (or at least the most commonly used partI! of it). In the mean time let's try to let our users access Internet1! addresses in the most natural way. At last!!! Validity of this patch!O! It has been tested on every release starting w/ 5.3-1. This part of the codeO! is the same for all these versions of VMS 5, only the addresses changed afterL! 5.0. For VMS 4.6/4.7, unfortunately the code was different and it was notM! found worth the effort to retrofit this patch for a version of VMS that was! replaced 23 months ago.!O! For VMS 5.0 only, uncomment the following 6 lines and comment another 6 lines! below.!H! If you patch, VMS 5.0, it is different from the following VMS versionsH! MAIL$$ADD_ADDR is located at 000049C2 andD! ADD_ADDR is located at 000048EF!!DEF!MAIL$$ADD_ADDR !000049C2 !ADD_ADDR !000048EF!EXI!M! If you patch any versions from VMS 5.1 to V5.5-1 including 5.1 and 5.2, allH! appear to have identical MAIL$$ADD_ADDR always located at 000049D2 andD! calling ADD_ADDR always located at 000048FF!!DEF!MAIL$$ADD_ADDR !000049D2 !ADD_ADDR !000048FF!EXI!L! For VMS 5.5-2 (with patch CSCPAT_0232016), the addresses change yet again:H! MAIL$$ADD_ADDR is located at 000049DA andD! ADD_ADDR is located at 00004907!DEFMAIL$$ADD_ADDR000049DAADD_ADDR00004907EXI)! Now make sure that we have a patch area! ALI/B PATAREA ! And now enter instruction mode! SE MIEXI,! Start implementing the ALTER_TO subroutine:! It was first developped and tested as a MACRO-32 program5! and changed into the body of this patch.com file by<! a MACRO_TO_PATCH.COM procedure developped for that purposeDEP /PATPATAREA> !; ALTER_TO is called with the same 2 arguments used byE !; MAIL$$SEND_ADD_ADDR in calling MAIL$$ADD_ADDR and will callH !; ADD_ADDR itself with or without a rewrite. There is no rewriteG !; if SYS$FAO fails. The original address is never modified andD !; will still appear unmodified in the "published" TO: field. !;H !; At this point when MAIL$$ADD_ADDR calls ALTER_TO, 4(AP) pointsH !; to a string descriptor which MAIL has already parsed to be oneH !; of a single recipient (we don't have to look for commas or forC !; an @ sign preceding a distribution list). Because of theG !; location of this patch, floating/unquoted "!"s seem unlikely. !;E !; The principle of this patch is to allow plain RFC addressesG !; to be acceptable by mail. We never anticipated to fully dealE !; with the full RFC822 format but simply to lrt forms such asG !; user@site.org or user%machine@site.company.org with all atomsI !; being alphanumerics and the whole address void of double quotes !;I !; At the same time STRAIGHTFORWARD phase IV DECnet mail addressesF !; are also allowed in an RFC822 like format: USERNAME@NODENAMEG !; is being transformed into NODENAME::USERNAME. Note well thatB !; the code will NOT transform any address with an "@" intoD !; a more complex DECnet mail address such as AAA::BBB::USER. !;D !; The parsing is an adhoc scanning of the string looking forE !; no more than one "@", checking the absence of " and for theF !; A and B parts of A@B distinguish between A-Z,0-9,a-z,$,%,.,-J !; and other characters (in case MAIL's parser would any slip thru) !;( !; More exactly the algorithm is: !;G !; input string might look like A@B with A and B containing no "I !; if " or not A@B, pass the string to ADD_ADDR unchanged ! Case 1E !; else if A or B has any character not in A-Z,0-9,a-z,$,%,.,-% !; pass IN%"A@B" ! Case 2 !; else= !; if B has no dots (pure DECnet) pass B::A ! Case 3* !; else pass IN%"A@B" ! Case 2 !;8 'alter_to: .word 7C ' ! ; entry mask save R2-R6 ' movq @B^4(ap),r0' ' movzwl r0,r0' ' clrl r2' 'cdblp1: cmpb #^x22,(r1)' ' beql cdbcs1' ' cmpb #^x40,(r1)+' ' beql cdbl1x'+ ' incl r2 ' ! ; length of A in A@B ' sobgtr r0,cdblp1'" 'cdbcs1: movab @B^4(ap),r2'/ ' jmp cdbcom ' ! ; no changes - case 1) 'cdbl1x: decl r0 ' ! ; count "@"- ' bleq cdbcs1 ' ! ; branch if at end ' tstl r2'3 ' beql cdbcs1 ' ! ; branch if @B with no A, ' clrl r3 ' ! ; now parse after "@" 'cdblp2: cmpb #^x22,(r1)' ' beql cdbcs1' ' cmpb #^x40,(r1)+' ' beql cdbcs1'+ ' incl r3 ' ! ; length of B in A@B ' sobgtr r0,cdblp2'3 !; passed test 1 - we have A@B - Now check A ' movq @B^4(ap),r0'@ !; allocate room on stack for 2 descriptors (for A and B) ' pushl r1' ' pushl r2'/ ' movl sp,r5 ' ! ; r5 points to desc(A) ' movl r2,r0' ' beql cdbcs1' ' jsb cdbck1' ' tstl r0' ' bneq cdbcs2' ' incl r1' ' pushl r1' ' pushl r3'/ ' movl sp,r6 ' ! ; r6 points to desc(B) ' movl r3,r0' ' beql cdbcs1' ' jsb cdbck1' ' tstl r0' ' beql cdbps2', ! ; build IN%"A@B" for case 2- !; use the stack this way for all $FAO( !; outlen initial sp <- r3 <-r25 !; ptr to outbuf initial sp-264 <- r2 minus 8( !; ...... <- r2 to beg of ptr- !; outbuf initial sp-4 <- r3 minus 4( !; ...... initial sp-256 <- sp7 'cdbcs2: pushl #22534121 ' ! ; ctrstr #^A/!AS"/0 ' pushl #22254E49 ' ! ; ctrstr #^A/IN%"/- ' pushl sp ' ! ; make desc to ctrstr- ' pushl #8 ' ! ; make desc to ctrstr5 ' movl sp,r4 ' ! ; address of desc to ctrstr* ' subl #4,sp ' ! ; adjusted stack1 ' movl sp,r3 ' ! ; save stack for outlen1 ' movl sp,r2 ' ! ; end of desc to outbuf* ' subl #108,sp ' ! ; end of outbuf( ' movl sp,-(r2) ' ! ; make outbuf, ' movzwl #100,-(r2) ' ! ; make outbuf5 ' pushl B^4(AP) ' ! ; #4 P1 pass what we got# ' pushl r2 ' ! ; #3 outbuf# ' pushl r3 ' ! ; #2 outlen# ' pushl r4 ' ! ; #1 ctrstr9 ' calls #4,@#7FFEDF50 ' ! ; calls #04,g^sys$fao ' blbs r0,N102$' ' jmp cdberr'? 'N102$: movw (r3),(r2) ' ! ; complete ptr to final text ' jmp cdbcom'! 'cdbps2: movq @B^4(ap),r0' ' addl r2,r1' ' incl r1' ' movl r3,r0' ' jsb cdbck2' ' tstl r0' ' bneq cdbcs2'( ! ; build B::A for case 37 'cdbcs3: pushl #5341213A ' ! ; ctrstr #^A/:!AS/0 ' pushl #3A534121 ' ! ; ctrstr #^A/!AS:/- ' pushl sp ' ! ; make desc to ctrstr- ' pushl #8 ' ! ; make desc to ctrstr5 ' movl sp,r4 ' ! ; address of desc to ctrstr* ' subl #4,sp ' ! ; adjusted stack1 ' movl sp,r3 ' ! ; save stack for outlen1 ' movl sp,r2 ' ! ; end of desc to outbuf* ' subl #108,sp ' ! ; end of outbuf( ' movl sp,-(r2) ' ! ; make outbuf, ' movzwl #100,-(r2) ' ! ; make outbuf0 ' pushl r5 ' ! ; #5 Second sub string A0 ' pushl r6 ' ! ; #4 first sub string B# ' pushl r2 ' ! ; #3 outbuf# ' pushl r3 ' ! ; #2 outlen# ' pushl r4 ' ! ; #1 ctrstr9 ' calls #5,@#7FFEDF50 ' ! ; calls #05,g^sys$fao ' blbs r0,N103$' ' jmp cdberr'? 'N103$: movw (r3),(r2) ' ! ; complete ptr to final text ' jmp cdbcom'@ !; check if all alpha numerical + .-_$% returns non zero 'cdbck1: cmpb #^x41,(r1)' ' bgtr cdbck11' ' cmpb #^x5A,(r1)' ' bgeq cdbck19'! 'cdbck11: cmpb #^x61,(r1)' ' bgtr cdbck12' ' cmpb #^x7A,(r1)' ' bgeq cdbck19'! 'cdbck12: cmpb #^x30,(r1)' ' bgtr cdbck13' ' cmpb #^x39,(r1)' ' bgeq cdbck19'! 'cdbck13: cmpb #^x24,(r1)' ' beql cdbck19' ' cmpb #^x25,(r1)' ' beql cdbck19' ' cmpb #^x2D,(r1)' ' beql cdbck19' ' cmpb #^x2E,(r1)' ' beql cdbck19' ' cmpb #^x5F,(r1)' ' rsb' 'cdbck19: incl r1' ' sobgtr r0,cdbck1' ' rsb'9 !; check if we have at least one dot (then r0 > 0) 'cdbck2: cmpb #^x2E,(r1)' ' bneq cdbck29' ' rsb' 'cdbck29: incl r1' ' sobgtr r0,cdbck2' ' rsb' !;J 'cdberr: movab @B^4(ap),r2 ' !; If SYS$FAO fails, use original addr* 'cdbcom: MOVQ #^X00000001,-(SP)' ' movl B^8(ap),-(sp)' ' pushl r2' ' CALLS #04,L^ADD_ADDR'5 ' ret ' !; this is the only RET for ALTER_TOEXI! Above was the new code.! Below is the patch in the existing code that(! will make use of the ALTER_TO new codeREMAIL$$ADD_ADDR'MOVQ #^X00000001,-(SP)''MOVQ B^04(AP),-(SP)''CALLS #04,W^ADD_ADDR''RET'EXIT'MOVQ B^04(AP),-(SP)''CALLS #02,ALTER_TO''RET'EXIT! Leave some footprints... SET ECO 97@! And now update if we reached this point without a single errorU;!---------------------- end of patch ----------------------$*[SYSTOOLS.LOCALMODS]MAIL-PATCH.DOC;1+,- ./ € 4Nnÿ-& 0ÿ123KÿPWO56€»áÔ–“7àSÀà –“89G €HˆªJÿ5Hopefully this is good news for all VMS e-mail users.NWe have made up a patch (called MAIL_AT_PATCH_02) for VMS MAIL that lets usersManswer the To: prompt with USERNAME@NODENAME in addition to the traditional .(DEC specific) NODENAME::USERNAMENIn fact it will rewrite the simplest @ syntax into a :: syntax if appropriate.GFrom DCL, $ MAIL NL: /SUBJ="NONE" "nobody@nowhere" is also supported...NIn addition to that, for those having PMDF (and with a logical name, for thoseNhaving a product similar to PMDF), if NODENAME contains at least one ".", thenMUSERNAME@NODENAME is changed into IN%"USERNAME@NODENAME" (unfortunately ! andGsome others are banned by MAIL parsing prior to the place of our patch)MIf there are " quotes in the original To: address our fix does nothing to the>supplied string and passes it unchanged to MAIL's next parser.NThe CC: addresses are processed exactly like the To: addresses. The publishedCTo: address that the recipient will see is not edited by our patch.MThe approach taken, patching a DEC binary with readable MACRO instructions isMnot that frequent on Info-Vax, we simply want to encourage similar endeavors.MAll instructions are in the fully commented MAILSHR_PATCH_FOR_AT_02.COM patchCwhich should be applied by $ PATCH @ MAILSHR_PATCH_FOR_AT_02.COM onMSYS$LIBRARY:[SYSLIB]MAILSHR.EXE which needs to be reinstalled. See comments.LMAILSHR_PATCH_FOR_AT_02.COM is being posted in two parts thanks to VMS_SHAREMTo summarize, it makes most address formats identical between VMS and anotherK4 letter operating system and removes some confusion for our users. At theHsame time, for those having PMDF it makes internal (DECnet) and externalLaddress formats the same with NO prefix required for all the simplest cases.NClaude Barbe - Schlumberger-Doll Research - Ridgefield, CT - barbe@sdr.slb.com ;ø?Ë~MAIL-PATCH-AUTOPROTOCOL.BCKžkMAIL-PATCH-AUTOPROTOCOL.BCK[BACKUP/NOASSIST USER0:[SYSTOOLS.LOCALMODS]MAIL-PATCH.* MAIL-PATCH-AUTOPROTOCOL.BCK/SAVE/LOG TERRY þš¶}5¾—V5.5 _SPCVXA:: 'uƒ _$1$DUA7: V5.5-2 ~ ó$*[SYSTOOLS.LOCALMODS]MAIL-PATCH.COM;3+,` ./ € 4Pâÿ-& 0ÿ123KÿPWO56@‡Hë>–7@øèät>–89G €HˆªJÿ6F!---------------------- MAILSHR_PATCH_FOR_AT_03.COM ----------------- MAILSHR.EXE!L! 20-Nov-1992 - tmk - Fix this patch to apply to VMS V5.5-2 with CSCPAT_0232=! V1.6. Also set ECO 97 (1st user bit). terry@spcvxa.spc.edu!M! This patch will be of interest to any VAX/VMS system (more especially if it=! is running PMDF) since it lets TO: or CC: addresses such asL! user%machine@site.co.org to be accepted without the IN% prefix and withoutO! surrounding double quotes. Yes, let's admit it, it lets VMS mail accept Un*xG! type addresses. In addition to its original goal, the format of thisK! modification is also original by the fact of the straight macro code thatN! can easily be modified/expanded or altered (ie IN% could become M_INTERNET::-! in the case of most Schlumberger VMS nodes)O! If the address is "similar" (see algorithm below) to user%machine@site.co.orgK! it is simply rewritten as IN%"user%machine@site.co.org" and passed along.P! At the same time, user@machine will be accepted and rewritten as machine::userN! If the IN% prefix is not the one in use on your VAX/VMS system, but XYZ% is,8! then all you have to do is $ DEFINE/SYSTEM/EXECUTIVE -! MAIL$PROTOCOL_IN -B! XYZ_ROOT:[EXE]XYZ_MAILSHR ! or wherever the XYZ overlay for MAIL+! ! might be located and installed from!&! See additional impact remarks below.!M! This patch applies to SYS$LIBRARY:MAILSHR.EXE (usually SYS$COMMON:[SYSLIB])+! from VMS 5.0 to 5.5-2 as of November 1992!! We recommend:!#! $ SET DEFAULT SYS$COMMON:[SYSLIB]! $ INSTALL:= $INSTALL/COMMAND! $ PATCH @ this_file.COM2! $ INSTALL REPLACE SYS$COMMON:[SYSLIB]MAILSHR.EXE!B! Claude Barbe - Schlumberger-Doll Research - Ridgefield, CT - USAM! (Internet) barbe@sdr.slb.com (a happy hacker of MAIL and PMDF for over 3yr)! ! 3-Jul-1990!I! No warranty implied. This can be freely copied and altered. Use it atD! your own risks. It is probably pure chance if it ever worked on a! particular system.!0! Additional remarks on the impact of this patch!P! 1) With this patch in place we hope to make addressing unique in the VMS worldL! whether a message is sent via DECnet or via a foreign protocol (such asL! the successful/affordable PMDF) without forcing any one to use prefixesO! and/or quotes. Quotes are to be avoided by all means since MAIL and DEC'sJ! MRGATE interface have no mechanisms to imbed quoted addresses between?! quotes (ie MRGATE and PMDF cannot carry the same message!)L! 2) There are risks of confusion for new users who will learn that the Un*xN! addressing format works on a patched VMS system and who will never botherJ! to know the DEC way to send mail with double colons between node and 5! username until they use a non patched VMS systemL! 3) The patch will certainly break when DECnet node names will contain dotsH! but this is in DECnet phase V and we still have to see a field testI! for this product. By that time a better patch will be developped orI! whatever foreign protocol is used (PMDF by default) will just handleI! these deliveries that could have gone also more simply across DECnetK! 4) The patch is far from being fully RFC822 compliant and there are risksH! that some users will be confused by the lack of completeness. ThisH! in some case will be due to the approach taken in this patch where,I! instead of redoing the address parsing that DEC is doing in MAIL, weO! simply hacked a string filter on a "DEC approved string" which has alreadyN! been pruned of commas and exclamation points. Users familiar with "bang"I! addresses will still have to say IN%"node!node!user@relay.somewhere"M! 5) After a few extra weeks of testing on a larger scale, this patch will beJ! submitted to DEC as an SPR for improvement. Hopefully, then DEC willK! support the de facto standard (or at least the most commonly used partI! of it). In the mean time let's try to let our users access Internet1! addresses in the most natural way. At last!!! Validity of this patch!O! It has been tested on every release starting w/ 5.3-1. This part of the codeO! is the same for all these versions of VMS 5, only the addresses changed afterL! 5.0. For VMS 4.6/4.7, unfortunately the code was different and it was notM! found worth the effort to retrofit this patch for a version of VMS that was! replaced 23 months ago.!O! For VMS 5.0 only, uncomment the following 6 lines and comment another 6 lines! below.!H! If you patch, VMS 5.0, it is different from the following VMS versionsH! MAIL$$ADD_ADDR is located at 000049C2 andD! ADD_ADDR is located at 000048EF!!DEF!MAIL$$ADD_ADDR !000049C2 !ADD_ADDR !000048EF!EXI!M! If you patch any versions from VMS 5.1 to V5.5-1 including 5.1 and 5.2, allH! appear to have identical MAIL$$ADD_ADDR always located at 000049D2 andD! calling ADD_ADDR always located at 000048FF!!DEF!MAIL$$ADD_ADDR !000049D2 !ADD_ADDR !000048FF!EXI!L! For VMS 5.5-2 (with patch CSCPAT_0232016), the addresses change yet again:H! MAIL$$ADD_ADDR is located at 000049DA andD! ADD_ADDR is located at 00004907!DEFMAIL$$ADD_ADDR000049DAADD_ADDR00004907EXI)! Now make sure that we have a patch area! ALI/B PATAREA ! And now enter instruction mode! SE MIEXI,! Start implementing the ALTER_TO subroutine:! It was first developped and tested as a MACRO-32 program5! and changed into the body of this patch.com file by<! a MACRO_TO_PATCH.COM procedure developped for that purposeDEP /PATPATAREA> !; ALTER_TO is called with the same 2 arguments used byE !; MAIL$$SEND_ADD_ADDR in calling MAIL$$ADD_ADDR and will callH !; ADD_ADDR itself with or without a rewrite. There is no rewriteG !; if SYS$FAO fails. The original address is never modified andD !; will still appear unmodified in the "published" TO: field. !;H !; At this point when MAIL$$ADD_ADDR calls ALTER_TO, 4(AP) pointsH !; to a string descriptor which MAIL has already parsed to be oneH !; of a single recipient (we don't have to look for commas or forC !; an @ sign preceding a distribution list). Because of theG !; location of this patch, floating/unquoted "!"s seem unlikely. !;E !; The principle of this patch is to allow plain RFC addressesG !; to be acceptable by mail. We never anticipated to fully dealE !; with the full RFC822 format but simply to lrt forms such asG !; user@site.org or user%machine@site.company.org with all atomsI !; being alphanumerics and the whole address void of double quotes !;I !; At the same time STRAIGHTFORWARD phase IV DECnet mail addressesF !; are also allowed in an RFC822 like format: USERNAME@NODENAMEG !; is being transformed into NODENAME::USERNAME. Note well thatB !; the code will NOT transform any address with an "@" intoD !; a more complex DECnet mail address such as AAA::BBB::USER. !;D !; The parsing is an adhoc scanning of the string looking forE !; no more than one "@", checking the absence of " and for theF !; A and B parts of A@B distinguish between A-Z,0-9,a-z,$,%,.,-J !; and other characters (in case MAIL's parser would any slip thru) !;( !; More exactly the algorithm is: !;G !; input string might look like A@B with A and B containing no "I !; if " or not A@B, pass the string to ADD_ADDR unchanged ! Case 1E !; else if A or B has any character not in A-Z,0-9,a-z,$,%,.,-% !; pass IN%"A@B" ! Case 2 !; else= !; if B has no dots (pure DECnet) pass B::A ! Case 3* !; else pass IN%"A@B" ! Case 2 !;8 'alter_to: .word 7C ' ! ; entry mask save R2-R6 ' movq @B^4(ap),r0' ' movzwl r0,r0' ' clrl r2' 'cdblp1: cmpb #^x22,(r1)' ' beql cdbcs1' ' cmpb #^x40,(r1)+' ' beql cdbl1x'+ ' incl r2 ' ! ; length of A in A@B ' sobgtr r0,cdblp1'" 'cdbcs1: movab @B^4(ap),r2'/ ' jmp cdbcom ' ! ; no changes - case 1) 'cdbl1x: decl r0 ' ! ; count "@"- ' bleq cdbcs1 ' ! ; branch if at end ' tstl r2'3 ' beql cdbcs1 ' ! ; branch if @B with no A, ' clrl r3 ' ! ; now parse after "@" 'cdblp2: cmpb #^x22,(r1)' ' beql cdbcs1' ' cmpb #^x40,(r1)+' ' beql cdbcs1'+ ' incl r3 ' ! ; length of B in A@B ' sobgtr r0,cdblp2'3 !; passed test 1 - we have A@B - Now check A ' movq @B^4(ap),r0'@ !; allocate room on stack for 2 descriptors (for A and B) ' pushl r1' ' pushl r2'/ ' movl sp,r5 ' ! ; r5 points to desc(A) ' movl r2,r0' ' beql cdbcs1' ' jsb cdbck1' ' tstl r0' ' bneq cdbcs2' ' incl r1' ' pushl r1' ' pushl r3'/ ' movl sp,r6 ' ! ; r6 points to desc(B) ' movl r3,r0' ' beql cdbcs1' ' jsb cdbck1' ' tstl r0' ' beql cdbps2', ! ; build IN%"A@B" for case 2- !; use the stack this way for all $FAO( !; outlen initial sp <- r3 <-r25 !; ptr to outbuf initial sp-264 <- r2 minus 8( !; ...... <- r2 to beg of ptr- !; outbuf initial sp-4 <- r3 minus 4( !; ...... initial sp-256 <- sp7 'cdbcs2: pushl #22534121 ' ! ; ctrstr #^A/!AS"/0 ' pushl #22254E49 ' ! ; ctrstr #^A/IN%"/- ' pushl sp ' ! ; make desc to ctrstr- ' pushl #8 ' ! ; make desc to ctrstr5 ' movl sp,r4 ' ! ; address of desc to ctrstr* ' subl #4,sp ' ! ; adjusted stack1 ' movl sp,r3 ' ! ; save stack for outlen1 ' movl sp,r2 ' ! ; end of desc to outbuf* ' subl #108,sp ' ! ; end of outbuf( ' movl sp,-(r2) ' ! ; make outbuf, ' movzwl #100,-(r2) ' ! ; make outbuf5 ' pushl B^4(AP) ' ! ; #4 P1 pass what we got# ' pushl r2 ' ! ; #3 outbuf# ' pushl r3 ' ! ; #2 outlen# ' pushl r4 ' ! ; #1 ctrstr9 ' calls #4,@#7FFEDF50 ' ! ; calls #04,g^sys$fao ' blbs r0,N102$' ' jmp cdberr'? 'N102$: movw (r3),(r2) ' ! ; complete ptr to final text ' jmp cdbcom'! 'cdbps2: movq @B^4(ap),r0' ' addl r2,r1' ' incl r1' ' movl r3,r0' ' jsb cdbck2' ' tstl r0' ' bneq cdbcs2'( ! ; build B::A for case 37 'cdbcs3: pushl #5341213A ' ! ; ctrstr #^A/:!AS/0 ' pushl #3A534121 ' ! ; ctrstr #^A/!AS:/- ' pushl sp ' ! ; make desc to ctrstr- ' pushl #8 ' ! ; make desc to ctrstr5 ' movl sp,r4 ' ! ; address of desc to ctrstr* ' subl #4,sp ' ! ; adjusted stack1 ' movl sp,r3 ' ! ; save stack for outlen1 ' movl sp,r2 ' ! ; end of desc to outbuf* ' subl #108,sp ' ! ; end of outbuf( ' movl sp,-(r2) ' ! ; make outbuf, ' movzwl #100,-(r2) ' ! ; make outbuf0 ' pushl r5 ' ! ; #5 Second sub string A0 ' pushl r6 ' ! ; #4 first sub string B# ' pushl r2 ' ! ; #3 outbuf# ' pushl r3 ' ! ; #2 outlen# ' pushl r4 ' ! ; #1 ctrstr9 ' calls #5,@#7FFEDF50 ' ! ; calls #05,g^sys$fao ' blbs r0,N103$' ' jmp cdberr'? 'N103$: movw (r3),(r2) ' ! ; complete ptr to final text ' jmp cdbcom'@ !; check if all alpha numerical + .-_$% returns non zero 'cdbck1: cmpb #^x41,(r1)' ' bgtr cdbck11' ' cmpb #^x5A,(r1)' ' bgeq cdbck19'! 'cdbck11: cmpb #^x61,(r1)' ' bgtr cdbck12' ' cmpb #^x7A,(r1)' ' bgeq cdbck19'! 'cdbck12: cmpb #^x30,(r1)' ' bgtr cdbck13' ' cmpb #^x39,(r1)' ' bgeq cdbck19'! 'cdbck13: cmpb #^x24,(r1)' ' beql cdbck19' ' cmpb #^x25,(r1)' ' beql cdbck19' ' cmpb #^x2D,(r1)' ' beql cdbck19' ' cmpb #^x2E,(r1)' ' beql cdbck19' ' cmpb #^x5F,(r1)' ' rsb' 'cdbck19: incl r1' ' sobgtr r0,cdbck1' ' rsb'9 !; check if we have at least one dot (then r0 > 0) 'cdbck2: cmpb #^x2E,(r1)' ' bneq cdbck29' ' rsb' 'cdbck29: incl r1' ' sobgtr r0,cdbck2' ' rsb' !;J 'cdberr: movab @B^4(ap),r2 ' !; If SYS$FAO fails, use original addr* 'cdbcom: MOVQ #^X00000001,-(SP)' ' movl B^8(ap),-(sp)' ' pushl r2' ' CALLS #04,L^ADD_ADDR'5 ' ret ' !; this is the only RET for ALTER_TOEXI! Above was the new code.! Below is the patch in the existing code that(! will make use of the ALTER_TO new codeREMAIL$$ADD_ADDR'MOVQ #^X00000001,-(SP)''MOVQ B^04(AP),-(SP)''CALLS #04,W^ADD_ADDR''RET'EXIT'MOVQ B^04(AP),-(SP)''CALLS #02,ALTER_TO''RET'EXIT! Leave some footprints... SET ECO 97@! And now update if we reached this point without a single errorU;!---------------------- end of patch ----------------------$*[SYSTOOLS.LOCALMODS]MAIL-PATCH.DOC;1+,- ./ € 4Nnÿ-& 0ÿ123KÿPWO56€»áÔ–“7àSÀà –“89G €HˆªJÿ5Hopefully this is good news for all VMS e-mail users.NWe have made up a patch (called MAIL_AT_PATCH_02) for VMS MAIL that lets usersManswer the To: prompt with USERNAME@NODENAME in addition to the traditional .(DEC specific) NODENAME::USERNAMENIn fact it will rewrite the simplest @ syntax into a :: syntax if appropriate.GFrom DCL, $ MAIL NL: /SUBJ="NONE" "nobody@nowhere" is also supported...NIn addition to that, for those having PMDF (and with a logical name, for thoseNhaving a product similar to PMDF), if NODENAME contains at least one ".", thenMUSERNAME@NODENAME is changed into IN%"USERNAME@NODENAME" (unfortunately ! andGsome others are banned by MAIL parsing prior to the place of our patch)MIf there are " quotes in the original To: address our fix does nothing to the>supplied string and passes it unchanged to MAIL's next parser.NThe CC: addresses are processed exactly like the To: addresses. The publishedCTo: address that the recipient will see is not edited by our patch.MThe approach taken, patching a DEC binary with readable MACRO instructions isMnot that frequent on Info-Vax, we simply want to encourage similar endeavors.MAll instructions are in the fully commented MAILSHR_PATCH_FOR_AT_02.COM patchCwhich should be applied by $ PATCH @ MAILSHR_PATCH_FOR_AT_02.COM onMSYS$LIBRARY:[SYSLIB]MAILSHR.EXE which needs to be reinstalled. See comments.LMAILSHR_PATCH_FOR_AT_02.COM is being posted in two parts thanks to VMS_SHAREMTo summarize, it makes most address formats identical between VMS and anotherK4 letter operating system and removes some confusion for our users. At theHsame time, for those having PMDF it makes internal (DECnet) and externalLaddress formats the same with NO prefix required for all the simplest cases.NClaude Barbe - Schlumberger-Doll Research - Ridgefield, CT - barbe@sdr.slb.com ;