home *** CD-ROM | disk | FTP | other *** search
/ Carousel / CAROUSEL.cdr / mactosh / lang / word301_.txt < prev    next >
Text File  |  1987-10-17  |  12KB  |  371 lines

  1. 17-Oct-87 13:32:58-MDT,12639;000000000000
  2. Return-Path: <science@nems.ARPA>
  3. Received: from nems.ARPA by SIMTEL20.ARPA with TCP; Sat, 17 Oct 87 13:32:35 MDT
  4. Received: by nems.ARPA id AA24633; Sat, 17 Oct 87 15:32:49 edt
  5. Message-Id: <8710171932.AA24633@nems.ARPA>
  6. Date: 17 Oct 87 15:32 EDT
  7. From: science@nems.ARPA (Mark Zimmermann)
  8. Subject: tnx for files! ... fixtext, etc.
  9. To: rthum@simtel20.ARPA
  10.  
  11. Thanks for the files that are coming in!  Don't worry about the missing
  12. issues of delphi & usenet ... perhaps they were never sent out?
  13.  
  14. Anyway, appended below are fixtextword.hqx and fixtext.c files, for
  15. fixing big text files against Word 3.01 bug (when a <cr> falls on
  16. a 64kB boundary).... sent them to <Info-Mac> yesterday or so, so they
  17. should be coming into their archives soon too.
  18.  
  19. Best,  ^z
  20.  
  21. ------
  22.  
  23. /* fixtextWord.c -- by Mark^Zimmermann, 19871014-16....
  24.  *
  25.  *    This little effort cleans up a text file so that MicroSoft
  26.  *    Word 3.01 doesn't barf when it encounters a <cr> at a 64 kB
  27.  *    boundary ... it simply changes all such offensive <cr>'s to
  28.  *    <space> characters, in place ... perhaps the easiest way out.
  29.  *    The bug in Word 3.01 was discovered and documented by Peter Gergely
  30.  *    (GERGELY(at)DREA-XX.ARPA) and Gavin Hemphill....
  31.  *
  32.  *    Written in Lightspeed C ... my first real "Mac-ish" program,
  33.  *    (that is, not UNIX-like) based on LSC's MiniEdit example, lobotomized.
  34.  *    Please send improvements and suggestions to me:
  35.  *    science(at)NEMS.ARPA;
  36.  *    [75066,2044] on CompuServe;
  37.  *    Mark^Zimmermann, 9511 Gwyndale Dr., Silver Spring, MD  20910, USA;
  38.  *    telephone 301-565-2166.
  39.  *
  40.  *    Thank you!  ^z
  41.  */
  42.  
  43. /* I don't know if all of these #includes are necessary.... */
  44.  
  45. #include <QuickDraw.h>
  46. #include <MacTypes.h>
  47. #include <FontMgr.h>
  48. #include <WindowMgr.h>
  49. #include <MenuMgr.h>
  50. #include <TextEdit.h>
  51. #include <DialogMgr.h>
  52. #include <EventMgr.h>
  53. #include <DeskMgr.h>
  54. #include <FileMgr.h>
  55. #include <ToolboxUtil.h>
  56. #include <ControlMgr.h>
  57. #include "StdFilePkg.h"
  58.  
  59. /* prototypes for my functions ... I do love prototypes! */
  60.  
  61. void main (void);
  62. void ChangeCRtoSP (void);
  63. int getCharacter (long pos);
  64. void setCharacter (long pos, int c);
  65. void WrapAround (void);
  66. int GetFileToFix (Str255 *fn, int *vRef);
  67. void pStrCopy (char *p1, char *p2);
  68. void GiveMsg (void);
  69. void giveUp (void);
  70. int refNum;
  71. WindowPtr wptr;
  72.  
  73.  
  74. /* main routine to initialize everything under the sun (is all this
  75.  * really necessary?) and then get the name of the file to fix ... if
  76.  * it opens ok, fix it and then we're done....
  77.  */
  78.  
  79. void main() 
  80.   {
  81.     Str255 fn, ermsg;
  82.     int vRef;
  83.  
  84.     InitGraf (&thePort);
  85.     InitFonts ();
  86.     FlushEvents (everyEvent, 0);
  87.     InitWindows ();
  88.     InitMenus ();
  89.     TEInit ();
  90.     InitDialogs (0L);
  91.     InitCursor ();
  92.     MaxApplZone ();
  93.     
  94.     GiveMsg ();
  95.     
  96.     if (GetFileToFix (&fn, &vRef))
  97.         if (FSOpen (&fn, vRef, &refNum) == noErr)
  98.           {
  99.             ChangeCRtoSP ();
  100.             FSClose (refNum);
  101.           }
  102.         else
  103.             giveUp ();
  104.   }
  105.  
  106.  
  107. /* routine to change a <cr> at a 64kB boundary into a space, and give
  108.  * a little user feedback while doing so....
  109.  */
  110.  
  111. void ChangeCRtoSP ()
  112.   {
  113.     long fsize, i;
  114.     
  115.     if (GetEOF (refNum, &fsize) != noErr)
  116.         giveUp ();
  117.  
  118.     ShowWindow (wptr);
  119.     MoveTo (4, 15);
  120.  
  121.     for (i = 65535; i < fsize; i += 65536)
  122.         if (getCharacter (i) == '\r')
  123.           {
  124.             setCharacter (i, ' ');
  125.             DrawString ("\p*");
  126.             WrapAround ();
  127.           }
  128.         else
  129.           {
  130.             DrawString ("\p.");
  131.             WrapAround ();
  132.           }
  133.     
  134.     MoveTo (4, 135);
  135.     FlushEvents (everyEvent, 0);
  136.     DrawString ("\pClick mouse button to exit....");
  137.     while (! Button())
  138.         ;
  139.   }
  140.  
  141.  
  142. /* routine to get the character at position 'pos' in our file
  143.  */
  144.  
  145. int getCharacter (pos)
  146.   long pos;
  147.   {
  148.     long count = 1;
  149.     int c;
  150.     
  151.     if (SetFPos (refNum, fsFromStart, pos) != noErr)
  152.         giveUp ();
  153.     if (FSRead (refNum, &count, &c) != noErr)
  154.         giveUp ();
  155.     return (c >> 8);
  156.   }
  157.  
  158.  
  159. /* routine to set the character at position 'pos' to be whatever we
  160.  * want (in this case, a space)....
  161.  */
  162.  
  163. void setCharacter (pos, c)
  164.   long pos;
  165.   int c;
  166.   {
  167.     long count = 1;
  168.     
  169.     c <<= 8;
  170.     if (SetFPos (refNum, fsFromStart, pos) != noErr)
  171.         giveUp ();
  172.     if (FSWrite (refNum, &count, &c) != noErr)
  173.         giveUp ();    
  174.   }
  175.  
  176.  
  177. /* routine to wrap the line of dots and stars around when it gets too
  178.  * long for the window ... wrap-around occurs at 6 MB or so per line,
  179.  * and I've never seen vertical wrap-around, though presumably it will
  180.  * happen around 60 MB or so....
  181.  */
  182.  
  183. void WrapAround ()
  184.   {
  185.     Point pt;
  186.     
  187.     GetPen (&pt);
  188.     if (pt.h >= 400)
  189.         MoveTo (4, pt.v + 15);
  190.     if (pt.v >= 135)
  191.         MoveTo (4, 15);  
  192.   }
  193.  
  194. /* following variables and routine do the standard files dialog
  195.  * to get the name of the file to fix ... cribbed from the MiniEdit
  196.  * example that comes with LSC....
  197.  */
  198.  
  199. static Point SFGwhere = { 90, 82 };
  200. static SFReply reply;
  201.  
  202. int GetFileToFix (fn, vRef)
  203.   Str255 *fn;
  204.   int *vRef;
  205.   {
  206.     SFTypeList myTypes;
  207.  
  208.     myTypes[0]='TEXT';
  209.     SFGetFile( SFGwhere, "\p", 0L, 1, myTypes, 0L, &reply);
  210.     if (reply.good)
  211.       {
  212.         pStrCopy( (char *)reply.fName, (char *)fn);
  213.         *vRef = reply.vRefNum;
  214.         return(1);
  215.       }
  216.     else return(0);
  217.   }
  218.  
  219.  
  220. /* routine to copy a pascal string from one place to another.... used in
  221.  * above Standard Files routine....
  222.  */
  223.  
  224. void pStrCopy( p1, p2 )
  225.   register char *p1, *p2;
  226.   {
  227.     register int len;
  228.     
  229.     len = *p2++ = *p1++;
  230.     while (--len>=0)
  231.         *p2++=*p1++;
  232.   }
  233.  
  234.  
  235. /* routine to give a message to the user upon start-up of the program....
  236.  */
  237.  
  238. void GiveMsg()
  239.   {
  240.     Rect r;
  241.  
  242.     SetRect (&r, 50, 60, 462, 200);
  243.     SetPort ((wptr = NewWindow (0L, &r, "\p", 1, 1, -1L, 0, 0L)));
  244.     TextFont (0);
  245.     MoveTo (4, 15);
  246.     DrawString ("\pThis program changes <cr>'s at 64kB boundaries to <space>'s");
  247.     MoveTo (4, 30);
  248.     DrawString ("\pto avoid a bug in Microsoft Word 3.01 discovered by");
  249.     MoveTo (4, 45);
  250.     DrawString ("\pPeter Gergely & Gavin Hemphill.  Each character changed");
  251.     MoveTo (4, 60);
  252.     DrawString ("\pwill cause a '*' to be printed.");
  253.     MoveTo (4, 90);
  254.     DrawString ("\pThis program is by Mark^Zimmermann, science(at)NEMS.ARPA,");
  255.     MoveTo (4, 105);
  256.     DrawString ("\p[75066,2044] CompuServe, and was written in LightSpeed C.");
  257.     MoveTo (4, 120);
  258.     DrawString ("\pWhen asked, pick a text file to be fixed, or choose 'Cancel'");
  259.     MoveTo (4, 135);
  260.     DrawString ("\pto quit.  Click the mouse button to continue....");
  261.     while (! Button())
  262.         ;
  263.     FlushEvents (everyEvent, 0);
  264.     HideWindow (wptr);
  265.   }
  266.  
  267.  
  268. /* routine to give up with a beep if an error occurs during opening the
  269.  * file or fixing it....
  270.  */
  271.  
  272. void giveUp ()
  273.   {
  274.     SysBeep (10);
  275.     ExitToShell ();
  276.   }
  277.  
  278. (This file must be converted with BinHex 4.0)
  279.  
  280. :#fCTH(4PH(4AEh*N!%&38%a$9%aD)!#3"a$qK)X!N!3"!*!$%&!!!!p3!*!$V[r
  281. m1!*K!2VbCbj+XN!fCb*$kJ"QG!G+%@F1d[`!$&(+#fCTH(4PH(4AEh*N!J#3!d&
  282. 38%`rN!3J!*!*39"36$q3"#!!N"HGQmN'!*!'%2jK!2pU8LX!B4!V!''3!#J!,'`
  283. !!4T5!'B)%#J!(B%V!'!`'53C9%NR@3"NiNPNeNTTrrTRd%K"B3$lZNK"B-C1G5m
  284. b)$BJAfIf)8N!%K&M!#`a3!!Z3qJ!(4,M)S&(mL"1YdPR"NTVrrjQe(!#Y`PR"NS
  285. VrrpQb&0!C[+A85@3!#!fB!#3!`(8!5S",Kj$E'PMDb"YEh9cC5"LGA4dEfiJG'm
  286. JCAKTG#k3"!#3"6Y8D'Pc)("bEfGbB@dJBfKKEQGPFb!mBh)q*h-JBA3J0M4V3L"
  287. LEh9ZC'&bD@9c)(4[)$acF'&MC6iRFc0dEb"KGQpTC#"K)'*eCb"TEL"0D@0bEh0
  288. [CR3J9fpbC#!c,M!a)'4TFf0[GQ9bC@3JBRNh8'9dCA)J4f9bCf9XH5!Q)%GKGQP
  289. Z)%KPEA"SD@aX,L!J4@&MD#"MD'&bB@0dCA)JBfKKEQGPC"phD@aX)'0KGA0P)'%
  290. J*bSR)(4[)'*P)("bD@jdC@3Z194SDA-JF(*[Ch*KE5"TFb"LH5"0BA*VAPTTE@e
  291. PFQeKEQiX)(0MD@9ZBf8SBA3T6N908bj"8P"",$PE0c8`0MBX-M!d0&dJ3fpYF(9
  292. 6CA*fC5`JB@jN)(GKFb"hFQPdG'9Z)'PZ)%aTCfKd8h"PC@3J3bim9fKPEL"KFfY
  293. PC#`JF'PMDb"K)(4PH(3JCQPXC5"dEb"LC5"QDAKPC#`JEh)JBfK[Eh0P)#G$B@j
  294. MC@`R!$"dEb"aG@Pd,L!J3faTBfXJG'KP)'e[GA0P)'*eG(4[EL"dEb"MEfjdD@j
  295. eC5k3"!#3"!3!"!%@!*!$#!#3!eS!8J#3#!M'J&%!!8j@rIj)EIrmU'kSrMmmrrp
  296. #Cdkk!k+T%UN`UFa#TkPlU&"1ZJE-6VS#KNKZrIj)E[m!6VS"iN"R,P@25'l
  297. r!$mZrIj)EIlH6VS%a$!I5N"Q%Nkk!#"9McmYrYj1ZJ9m-"pJ"%kk!d41ANje68&
  298. *6L#3"%j@rrK9McmYrYj)E[rm6VS&%$!I5N"R"%kk!a`[,IlJU48r2!!%2c`!$kL
  299. 6,A`!!2q3!rKJ3#mZrrK1ZJ"f@)m-3!!0CK`r2!!J,blrq%kk!,CFMdKj!*!%U)4
  300. 1ZJ%!B!a)H3#3!`+SK%kk!2)'VJ!"!!$rq#!ZrrL`V[rmEEBr2!!%2c`!KkL62cc
  301. rrd*R6VS#VNKj!*!$"+L%9BqTG"!I5J"RpNjH6R9$5%&14d9$8Nj@rrT`!5e!rra
  302. 9McmYrYir2!!",bi!#%kk"#``(dT!C`41ZJ*J9Bmr,IlH5'lrr%KZrrT1ZJ*b-"p
  303. +3'F%6VS#4$!ZrrVJ3%jH6R9(494$5%&538j@rra`!5e!rr``,J!-i8Jp3!!-9Bm
  304. r,IlH2c`!!5mZ!!K1ZJ21-"p+3'F%6VS#!P@22bhqhNKZrra)EJ!-6VS#'$!I5N"
  305. R"%kk!HC1ANje8d983dK"8N&19[rm5'lrr+LD$'i"N!$rrQd32c`!"$!Zrr`'3!!
  306. 22`#SN`aZ!)Irr'd+2c`!"$mm!!qSNdjH6R9A8N&339*298j@rr!YI&4&@&6rm#m
  307. YrZ4)H3#3!b4#Tcmm!!&)E[r`3UG)EIlS6VS'HNSYrZKR'LmZ!!K)EIlb6VS!(P#
  308. 2)'i!$$#YrZj`!@!#F!"1ANje4d984NP-49419J!!51F"'#KZ!!JQEJ!-3G05Ld2
  309. 88S`3%4#!5)!q!'!+3G05Ld288S`3N90(5NGXm%cI')"1ANje8&088N028&P19[r
  310. i5'lrq$mm!$)r2!!m2c`"cMmm!-LSTeQ23UG)E[ri5(N!N!-Q(c`!!6mm!!&)H2r
  311. r3QG#TkN6)&mV52lJ5&#SFd*RU)Fr2!!%2c`!$kL65(N!N!-SU)3r2!!%2c`!(UL
  312. 65(N!N!0NU)3r2!!%2c`!,DL65(N!N!1BU)3r2!!%2c`!2+L65(N!N!23U)3r2!!
  313. %2c`!@UL65(N!N!2`U)3r2!!%2c`!DDL65(N!!!%UU)3r2!!%2c`!H+L65(N!!!&
  314. NU)3r2!!%2c`!KkL65(N!!!'LU)49MkPd%"p+!'If2ccrrd*R6VS!(LmYrZ#T&Nj
  315. H6R9(59C&690()$mm!!UTb+Rd6R8LAb!I,`QJ-Nje,hJ#m!!%6R8[H!,d!!41G9(
  316. "B!*3`8j@rmj"l[r1)@i!#!!J-@i!%!!B)Qi!$#&4!#4#D!!X3UJ!,NS"CJ5J!Q!
  317. #S!-p3!!5)Qi!$#+S!#K1AL*Ihr`!N!-+6Y&19[r!3Hlr`#&Z!"!!%M&Z!"3!&N*
  318. S!"bJ"ce!!"BLEJ!--UJ!&L!S!$$JJ1+!`1J!2Z1!iB!LEJ!))S"1AL*Ihr`!N!-
  319. 16Y&19[r!3Hlr`#&Z!!`!%U!828!!%#*Z!!JbU!!@6PiLAe#26Y&19[r!3Hlr`#&
  320. Z!!S!%M&Z!!J!&U!928!!$NjH)PpFMdl46PEr`%(Zrm!aEJ!)!"BKEJ!+!"+J%ce
  321. !!!j1AL*IA)p1d8j@rl""l[q`)@i!%J!5-@i!%!!@3LJ!'U!)5N"Q&N*S!"bJ$#!
  322. )3qJ!)#,Z!!JLVJ!-S!dp3!!@6PiLAprm!*!$$Nl46PErcN(ZrmiKEJ!1!")aEJ!
  323. -!"C#+!!D3LJ!'d+S!"bJ!#*Z!!JbU!!B28!!%NjH)&rIr!#3!`T1d%j@rmj"l[r
  324. 1-@i!$!!BS"Jp3!!1)Qi!##+S!#j1AL*IA)p1d8j@rmj"l[r1-@i!$J!B-@i!$!!
  325. X)@i!#!!ZS%3p3!!36PiLAe#26Y&19[r13HlrcM&Z!!`!'+!428!!$L*Z!!JLU!!
  326. F6PiLAeb26Y&19[r13HlrcM&Z!!`!'#&Z!!J!(+!528!!$NjH)PpFMdl46PErcN(
  327. ZrmiaEJ!)!"LJ!6e!!!T1AL"I9)p1d%j@rl""l[q`)@i!$J!5-@i!$!!@3LJ!'N*
  328. S!"bJ$$e!!"*"k!!J)Qi!#(!3S#j1AL*Ihr`!N!-+6Y&19[q`3HlrX#&Z!!i!%M&
  329. Z!!`!&N)S!"T#D!!FS!a$k!!J)'i!#(!3S#j"l[q`S!dp3!!56PiLAprm!*!$#Nl
  330. 46PErcN(ZrmiKEJ!1!")aEJ!-!"C#+!!D)@i!#!!FS!Xp3!!56PiLAprm!*!$#Nl
  331. 46PErcN(ZrmiKEJ!+!")aEJ!)!"C#+!!DS!Np3!!16PiLAeb26Y'J,%lk!G!LAb"
  332. IS&G1qJ(%)PmJ6k!Ch[`!$Nlk!EBLAb"IS#e1qJ'X5MJ#MQSU)(J"-%2i!43J#*!
  333. !NA3-X)*P&L*4)FJ"&#+!3K%LH!+U)SJJJY'T!!a1GD"M6R@J0Nlk!A5K'Lp)!!4
  334. 1qJ&U)PmJAk!E6[S"ALpi!UB!"%lk!9`[H!+U!!41qJ&5)PmJ(k%L,SK1qJ%q)Pm
  335. JAk!M6[S"0#*I)&qJ*5k!DJC#Pdlk!541qJ%H)PmJ(b"IS#41qJ%8)PmJAk%Q,SK
  336. 1qJ%))PmJAk%S,SK1qJ$k)PmJ(b"IS#G1qJ$`)PmJ(k%H,SK1qJ$N)PmJAk!I6[S
  337. !fL*I)&qJ)5k!DJC#Pdlk!-T1qJ$%)PmJ(b"IS#"1qJ#k)PmJAk&),SK1qJ#ZS"`
  338. [3!!%6[S!V#*IS4dL##"I))%ZJ%lk!*)LAb!IS%`ZJ%lk!)BLAb!IS%"1qJ"q)Pm
  339. J(k"06[S!G#*I)&qJ+dlk!'SLAb"IS#P1qJ"J)PmJAk!U6[S!9L*I)&qJ58lk!%`
  340. LAb"IS%T1qJ"#)PmJAk",6[S!1#pi!bJ!"%je)KmJ(b*I)&qJ,L*"6[S!)#pi!3J
  341. !"%lk!"irH!)J!!41G5pi!6!!"%lk!!a`!#m*-F!#)%jeF!"JpR3")&mr!Lm)VHT
  342. d!dlkrr4d!Nlkrqjd"%lkrqJ!N!-D!0%!h`%4!LX#e`-(!aN$+`-p!dm$B30c!i8
  343. !!!3)!*!$#J#3"h*#H!T+RFiX2&088P01ZJ-U3IVrjL#-6VS!Q%kk!TT#CdKj!!$
  344. rrdK[!!4)9cmm!!%L1[r+6V83!%lk!(")jrri2Lm!2&$i#PjCMbmm3dp%46m(UD!
  345. J(fFk*N!N8`JU!*!$!@FN5K*U)%kk!fkJ+9Q2,ca$8N9-2`HTS%kk!fiJ(fF3)%"
  346. 1ZJ"f!P*rrNcI(rp1GA!2UFN[#%kk!N`JAkRb,`K1ZJ*#)&qTmdkk!MUTp&Q2,ca
  347. D49*23QHTS#4A@Bm[2%4"9%&#CkQJ)&FJ8#*i#3JN8Q!1-YKQ#M)DB!*#'9(*rrb
  348. lb@EZUD1TSeQ2,ca%8N9-3QHTS#"I*%fJ*5m))&$L3'!5*!db'!L"!!"R"#3krZE
  349. 9XK!!8FMrl+QM6R8JAc)B0"L`@&I*rrT+3QIq6[!Jr#"I-KJd',#B9mRrqNT#Crj
  350. 1m#$k)&mb'$3BX%*Z#T!!3@d'd%""m!!#-""RrNl`!!!J,`!%,d%!"#)[!!J[A`!
  351. %51Fm!#3!*J&)3X6$+!!U!8K&b-A84%K#N!2!`G##60m!2#)I6R8J,`!%,d%!"#)
  352. [!!J[A`!%51Fa!%kk!*a-h`#-)Kp1G5![!!3[33!%)Lm!##pI!!4)jc%!6VS!I#!
  353. "60m!M#)I6R8J,`!%,d%!"#)[!!J[A`!%51Fa!%kk!#a-h`#-)Kp1G5![!!3[33!
  354. %)Lm!##pI!!4)jc%!6VS!$#!"60m!M#)I6R9+J'SF5S&U$%5!4)&1ZJ!J4)&1G85
  355. !6VS!&N5!4)&1G8U"DJT%J8kk!!C%J%je,M`!!2rrXS"M"L)!F!"1GE#(BJb!`8K
  356. !-J"#3%K!6R@bKf)D,J"#3%K!J-&)3%K(2J")4il"-!G)4c)(6R8N!#B"iSMLLE+
  357. (B[L!`F#(-J2#`#i$5%I1`%K(dSGP#*+#BJ4%J8je8d"Jj$)mUI"$q[f!6VS!5M)
  358. mUI*$q[h16VS!2M)mUI0$q[h-6VS!-M)mUI4$q[h+6[S!*Nkk!1!b2+R`6VS!0M)
  359. mUI*1ZJ!Z-MbTmdkk!#Bb2+Rd6[S!(M!"S8BN5(!-T4i`!D"(-2a1Z5$*-2a1q5$
  360. +6R8`!D&')QJ!#+!I-!%J5D"(6R9#1!TH@Bm["N*RUD!QAeQ2,`ZTT5BI)%XS!ci
  361. m!)&J%JD%!!"rrPQ2,`Br"e*(UD!JAe@2,`LTTM!I#!!!"@EJ82J+AL!%S4iS5#m
  362. ,UD)J5b!$1JFq2!#"QNGJ%PQ2,`Br"e*(UD!JAb!m!!"rrLm))&!L60R!S#kTSe(
  363. 0rq#Ca%je!*!%3IVrqL#[!!41G8(krr!J%'B#6R9#N!!J3%l3)%Y+H!+1DJ3@%dj
  364. eS'N@!%je5RJ#MQS%&S01G5",%!1JDNje!*!$D!#3!hJ!!!%L!*!$@!#3!b!!#$m
  365. m!!'Tm!%S2c`!!DR`!6`r2!!"UI!"8$mm!!'Tm!&X2c`!!DR`!D)r2!!"UI!"`Mm
  366. m!!'Tm!(N2c`!!DR`!J3r2!!"UI!$aMmm!!'Tm!!!2c`!!UR`!!!"!*!$%&!!!!p
  367. 3!*!$VJ!$J&`#P!#3!a`!VJ!&8e458`#3!c*D49*2!*!$2N4"9%%!N!0+4&*&6!#
  368. 3!eC$6d4&!!)!BN0548`!N!1'!!$rr`J!N!Rrr`J!!GJ!N!ErrbJ!!H!!N!ErrbJ
  369. !!H`!N!8#rrmi!!(`!*!&!Irr(!!+f!#3"[rr+!!1j!#3"3,rrbJ!#VS!N!398!:
  370. -------
  371.