home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgLangD.iso / Bonus / WSTAR2 / DISK4 / MAILCMC.WM_ / MAILCMC.bin
Text File  |  1994-02-28  |  41KB  |  811 lines

  1. REM Description: Send current document as email note or attachment
  2. REM Filename: mailcmc.wmc
  3. REM Created by: Rich Zuris - 1/27/94
  4. REM Supports CMC (Common Messaging Calls - XAPIA) standard
  5. REM Contact your email vendor regarding CMC support
  6.  
  7. 'This macro will send the current document as an email attachment on a CMC-
  8. 'compatible email system. If the current document is in the form of an email
  9. 'note, containing recipient name(s) and a subject, it will send the document
  10. 'as a note instead of an attachment so that the message can be read by 
  11. 'recipients without WSWin.
  12.  
  13. 'The macro will search page 1 of the current document for "To:" and "Subject:"
  14. 'lines. If found, it will use these paragraphs to address the message. If an
  15. 'optional "Attachments:" line is found, it will attach these files to the
  16. 'message. If "To:" and "Subject:" lines are not found, the entire document
  17. 'will be attached to a blank message, and your email system will prompt you 
  18. 'for recipients and other options. You may customize the options below to suit
  19. 'your needs.
  20.  
  21. 'You may customize the following settings. They are used to determine whether
  22. 'the current document should be sent as a note or an attachment.
  23. CONST TO_TEXT$   = "To:"            'Text that marks the list of recipients
  24. CONST SUBJ_TEXT$ = "Subject:"        'Marks the subject text
  25. CONST ATT_TEXT$  = "Attachments:"    'Marks an optional list of attachments
  26. CONST DELIMITER$ = ";"                'Separates multiple recipients or attachments
  27. 'Note: Multiple recipients or attachments must appear in a single paragraph,
  28. 'with only the delimeter character and optional spaces in between each item.
  29. 'Should search for above keywords ignore upper/lowercase? 1 = yes, 0 = no
  30. CONST IGNORE_CASE% = 0
  31. 'Display email dialog if document is a message with subject and recipients?
  32. '    0 = Don't display dialog
  33. '    1 = Always display
  34. '    2 = Always prompt before displaying
  35. '    3 = Only prompt before displaying if there are no attachments
  36. 'Note: Microsoft Mail 3.0 will NOT paste the message text into the note field
  37. 'if you display the email dialog but do not include attachments.
  38. CONST DISPLAY_DIALOG% = 2
  39.  
  40. 'Caption for MessageBox
  41. SHARED MsgTitle$
  42. MsgTitle$ = "Mailcmc Macro"
  43. 'MessageBox flags from constant.wmc
  44. CONST OK_CANCEL% = 1
  45. CONST YES_NO_CANCEL% = 3
  46. CONST YES_NO% = 4
  47. CONST RETRY_CANCEL% = 5
  48. CONST STOP% = 16
  49. CONST QUESTION% = 32
  50. CONST EXCLAMATION% = 48
  51. CONST INFORMATION% = 64
  52. CONST OK% = 1
  53. CONST CANCEL% = 2
  54. CONST RETRY% = 4
  55. CONST YES% = 6
  56. CONST NO% = 7
  57.  
  58. 'Initialize cmc_send_document parameters
  59. SHARED To$, Subject$, NoteText$, Attachments$, FileTitle$
  60. To$            = ""
  61. Subject$        = ""
  62. NoteText$        = ""
  63. Attachments$     = ""
  64. FileTitle$        = ""
  65.  
  66. 'Screen state
  67. SHARED freeze%
  68. 'File position
  69. SHARED NotePos%
  70.  
  71. 'CMC Flags--do not modify
  72. CONST ERROR_UI_ALLOWED% = 1 * 16 ^ 6    'Do not modify this value
  73. CONST LOGON_UI_ALLOWED% = 2 * 16 ^ 6    'Do not modify this value
  74. CONST SEND_UI_REQUESTED% = 1            'Do not modify this value
  75. SHARED SENDFLAGS%
  76. SENDFLAGS% = ERROR_UI_ALLOWED% + LOGON_UI_ALLOWED%
  77.  
  78. 'APIs
  79. DECLARE FUNCTION GetTempFileName LIB "kernel" (bDriveLetter AS WORD, lpszPrefixString AS STRING, uUnique AS WORD, lpszTempFileName AS STRING) As Word
  80. DECLARE FUNCTION cmc_send_documents LIB "cmc.dll" (lpRecip AS STRING, lpSubject AS STRING, lpTextNote AS STRING, ulFlags AS INTEGER, lpFilePaths AS STRING, lpFileNames AS STRING, lpDelim AS STRING, ulUID as INTEGER) AS Integer
  81. DECLARE FUNCTION GetKeyText$ (lpKeyword$)
  82. DECLARE FUNCTION GetFurthestPos% (prevPos%)
  83. DECLARE FUNCTION DisplayDialog% (ask%, att$)
  84. DECLARE FUNCTION MakeAttachment$ (lpFileTitle$, flags%)
  85. DECLARE SUB Status (ret%)
  86. DECLARE SUB AbortMacro ()
  87.  
  88. 'Can't run if no document open
  89. IF GetDocName$() = "" THEN
  90.     Msg$ = "Please create a new document or open an existing document first."
  91.     ret% = MessageBox(Msg$, MsgTitle$, EXCLAMATION%)
  92.     STOP
  93. ENDIF
  94.  
  95. 'Ensure we're in Edit mode in the Page Editor
  96. ViewEditor 1
  97. ViewEditMode 1
  98.  
  99. 'Prevent screen updates
  100. freeze% = ViewFreezeScreen(1)
  101.  
  102. 'If not a normal text frame, send as attachment
  103. frameType% = GetTextFrameType()
  104. IF frameType% = 0 OR frameType% > 3 THEN GOTO SENDATT
  105.  
  106. 'Get recipient list, subject, attachments, and note text, if this is a memo
  107. 'Use furthest keyword position from top of file as start of note text
  108. StatusMsg "Checking document for email text . . ."
  109. NotePos%        = 0
  110. TmpFile%        = 0
  111. To$            = GetKeyText$(TO_TEXT$)
  112. NotePos%        = GetFurthestPos%(NotePos%)
  113. Subject$        = GetKeyText$(SUBJ_TEXT$)
  114. NotePos%        = GetFurthestPos%(NotePos%)
  115. Attachments$     = GetKeyText$(ATT_TEXT$)
  116. IF Attachments$ <> "" THEN NotePos% = GetFurthestPos%(NotePos%)
  117. StatusMsg ""
  118.  
  119. 'If no recipients or subject found, send doc as an attachment
  120. IF To$ = "" OR Subject$ = "" THEN GOTO SENDATT
  121.  
  122. 'Go to beginning of note text and select rest of story as the note text
  123. EditGotoOffset NotePos%,         'Go to end of keyword list
  124. WordRight                        'Go to beginning of next line
  125. EndOfStory 1                    'Select rest of document
  126. NoteText$ = GetSelection$(1)    'Get note text
  127. 'If no attachments specified and email dialog is displayed, 
  128. 'user may need to paste in the note text manually
  129. IF DisplayDialog%(DISPLAY_DIALOG%, Attachments$) THEN
  130.     SENDFLAGS% = SENDFLAGS% OR SEND_UI_REQUESTED%
  131. END IF
  132.  
  133. 'If there are dependent frames in this document, prompt whether to send current 
  134. 'selection as a text note, or entire document as an attachment
  135. IF CountFrames() <> CountPages() THEN
  136.     Msg$ = "This document contains dependent frames, and only the current frame "
  137.     Msg$ = Msg$ + "is being used for the email note. Do you wish to attach the "
  138.     Msg$ = Msg$ + "document to the email note?"
  139.     ret% = MessageBox(Msg$, MsgTitle$, YES_NO_CANCEL% + QUESTION%)
  140.     IF ret% = CANCEL% THEN AbortMacro
  141.     IF ret% = NO% THEN GOTO SENDDOC
  142. ELSE
  143.     GOTO SENDDOC
  144. END IF
  145.  
  146. 'Send entire document as an attachment
  147. SENDATT:
  148. Attachments$ = MakeAttachment$(FileTitle$, SENDFLAGS%)
  149. TmpFile% = 1
  150.  
  151. 'Call CMC.DLL to send the document or message
  152. SENDDOC:
  153. StatusMsg "Calling email system . . ."
  154. ret% = cmc_send_documents(To$, Subject$, NoteText$, SENDFLAGS%, Attachments$, FileTitle$, DELIMITER$, 0)
  155. StatusMsg ""
  156. IF TmpFile% = 1 THEN KILL Attachments$
  157. Status (ret%)
  158. EditGotoOffset NotePos%,
  159. freeze% = ViewFreezeScreen(freeze%)    'Move this up if it interferes with UI
  160.  
  161. STOP
  162.  
  163.  
  164. '*************************************
  165. 'Find keyword text for email note
  166. '
  167. 'Search the first page of the doc only
  168. '*************************************
  169. FUNCTION GetKeyText$ (lpKeyword$)
  170.  
  171. StartOfStory
  172. EndOfFrame
  173. IF (EditFind( lpKeyword$, 1, 0, 0, IGNORE_CASE%, 1, )) THEN
  174.     'Find first occurrence, searching backward
  175.     DO
  176.         ret% = EditFindNext(0)
  177.     LOOP WHILE ret% = 1
  178.     'If keyword found only once, it's highlighted.  If found more than once,
  179.     'it is unhighlighted.  Unhighlight it for consistency.
  180.     ret% = GetTextOffset(beg%, end%)
  181.     EditGotoOffset beg%, 
  182.     'Move one word to the right, then select remainder of paragraph
  183.     WordRight
  184.     EndOfPara 1
  185.     'Return selected text
  186.     GetKeyText$ = GetSelection$(1)
  187. ELSE
  188.     GetKeyText$ = ""
  189. END IF
  190.  
  191. END FUNCTION
  192.  
  193. '*************************************************
  194. 'Get furthest keyword position from start of file
  195. 'Used to determine where note text begins
  196. '
  197. 'Param:    previous position
  198. 'Returns:    greater of previous or current position
  199. '*************************************************
  200.  
  201. FUNCTION GetFurthestPos% (prevPos%)
  202.  
  203. ret% = GetTextOffSet (beg%, end%)
  204. EditGotoOffset end%, 
  205. IF prevPos% > end% THEN
  206.     GetFurthestPos% = prevPos%
  207. ELSE
  208.     GetFurthestPos% = end%
  209. END IF
  210.  
  211. END FUNCTION
  212.  
  213. '**************************************************
  214. 'Create temp file to send document as an attachment
  215. '
  216. 'Params:
  217. '    buffer to hold file title
  218. '    send flags
  219. '
  220. 'Returns:
  221. '    returns temp file name of attachment
  222. '    sets file title to name of document
  223. '    ensures flags will request email UI
  224. '**************************************************
  225. FUNCTION MakeAttachment$ (lpFileTitle$, flags%)
  226.  
  227. 'Get temporary file name and save copy of document
  228. 'Hope there's enough disk space on temp drive, etc.
  229. MKTMP:
  230. lpFileName$ = STRING$(144, " ")
  231. ret% = GetTempFileName(I2W(0), "WSW", I2W(0), lpFileName$)
  232. FileSaveAsCopy (lpFileName$)
  233. IF ACCESS(lpFileName$, 0) = 0 THEN
  234.     Msg$ = "Could not create temporary file. You may be low on disk space. "
  235.     Msg$ = Msg$ + "Delete some files and choose Retry, or choose Cancel to quit."
  236.     Flags% = RETRY_CANCEL% + EXCLAMATION%
  237.     IF MessageBox(Msg$, MsgTitle$, Flags%) = RETRY% THEN GOTO MKTMP
  238.     AbortMacro
  239. END IF
  240.  
  241. 'Get title of this document from WSWin
  242. docName$ = GetDocName$()
  243. WHILE INSTR(docName$, "\")
  244.     docName$ = MID$(docName$, INSTR(docName$, "\") + 1)
  245. WEND
  246.  
  247. 'If doc is untitled, name it Untitled (sans number)
  248. IF LEFT$(docName$, 8) = "Untitled" THEN
  249.     docName$ = "Untitled.wsd"
  250. END IF
  251.  
  252. MakeAttachment$ = lpFileName$
  253. lpFileTitle$ = docName$
  254. flags% = flags% OR SEND_UI_REQUESTED%    'Ensure email dialog will be displayed
  255.  
  256. END FUNCTION
  257.  
  258. '**********************************************************
  259. '
  260. '    Determine whether email dialog should be displayed
  261. '
  262. '    Params:    
  263. '        flag indicating whether to always prompt
  264. '        attachments (empty string if none)
  265. '
  266. '    Copies selected text to clipboard if no attachments
  267. '
  268. '    Returns:  1 if dialog should be displayed, else 0
  269. '
  270. '**********************************************************
  271. FUNCTION DisplayDialog% (ask%, att$)
  272.  
  273. IF att$ = "" THEN
  274.     EditCopy        'Copy note text to clipboard
  275.     CharLeft 1, ,    'Unhighlight the text selection
  276. END IF
  277.  
  278. SELECT CASE ask%
  279.  
  280. CASE 0    'Never display
  281.     DisplayDialog% = 0
  282.     
  283. CASE 1    'Always display
  284.     DisplayDialog% = 1
  285.  
  286. CASE 3    'Prompt before displaying if there are no attachments
  287.     IF att$ = "" THEN GOTO ASK_DISP
  288.  
  289. CASE 2    'Always prompt before displaying
  290. ASK_DISP:
  291.     Question$ = "Display email dialog before sending message?"
  292.     ret% = MessageBox (Question$, MsgTitle$, YES_NO_CANCEL% + QUESTION%)
  293.     IF ret% = CANCEL% THEN AbortMacro
  294.     IF ret% = NO% THEN
  295.         DisplayDialog% = 0
  296.     ELSE    'Yes
  297.         DisplayDialog% = 1
  298.     END IF
  299.  
  300. END SELECT
  301.  
  302. COPY_INFO:
  303. IF DisplayDialog% = 1 AND att$ = "" THEN
  304.     Msg$ = "The note text has been copied to the clipboard. If the note text "
  305.     Msg$ = Msg$ + "does not appear, you can paste it into the message body "
  306.     Msg$ = Msg$ + "from the email menu."
  307.     ret% = MessageBox (Msg$, MsgTitle$, INFORMATION%)
  308. END IF
  309.  
  310. END FUNCTION
  311.  
  312.  
  313.  
  314. '*******************************
  315. ' Abort macro
  316. '*******************************
  317. SUB AbortMacro
  318.  
  319. BEEP
  320. IF NotePos% <> 0 THEN EditGotoOffset NotePos%,
  321. Status (36)
  322. freeze% = ViewFreezeScreen (freeze%)
  323. STOP
  324.  
  325. END SUB
  326.  
  327.  
  328. '*******************************
  329. 'Display message if error occurs
  330. '*******************************
  331. SUB Status (status%)
  332.  
  333. Select Case status%
  334.     Case 0
  335.         Msg$ = "Success"
  336.     Case 1
  337.         Msg$ = "Ambiguous recipient"
  338.     Case 2
  339.         Msg$ = "Attachment not found"
  340.     Case 3
  341.         Msg$ = "Attachment open failure"
  342.     Case 4
  343.         Msg$ = "Attachment read failure"
  344.     Case 5
  345.         Msg$ = "Attachment write failure"
  346.     Case 6
  347.         Msg$ = "Counted string unsupported"
  348.     Case 7
  349.         Msg$ = "Disk full"
  350.     Case 8
  351.         Msg$ = "Failure"
  352.     Case 9
  353.         Msg$ = "Insufficient memory"
  354.     Case 10
  355.         Msg$ = "Invalid configuration"
  356.     Case 11
  357.         Msg$ = "Invalid enum"
  358.     Case 12
  359.         Msg$ = "Invalid flag"
  360.     Case 13
  361.         Msg$ = "Invalid memory"
  362.     Case 14
  363.         Msg$ = "Invalid message parameter"
  364.     Case 15
  365.         Msg$ = "Invalid message reference"
  366.     Case 16
  367.         Msg$ = "Invalid parameter"
  368.     Case 17
  369.         Msg$ = "Invalid session ID"
  370.     Case 18
  371.         Msg$ = "Invalid UI ID"
  372.     Case 19
  373.         Msg$ = "Logon failure"
  374.     Case 20
  375.         Msg$ = "Message in use"
  376.     Case 21
  377.         Msg$ = "Not supported"
  378.     Case 22
  379.         Msg$ = "Password required"
  380.     Case 23
  381.         Msg$ = "Recipient not found"
  382.     Case 24
  383.         Msg$ = "Service unavailable"
  384.     Case 25
  385.         Msg$ = "Text too large"
  386.     Case 26
  387.         Msg$ = "Too many files"
  388.     Case 27
  389.         Msg$ = "Too many recipients"
  390.     Case 28
  391.         Msg$ = "Unable to not mark as read"
  392.     Case 29
  393.         Msg$ = "Unrecognized message type"
  394.     Case 30
  395.         Msg$ = "Unsupported action"
  396.     Case 31
  397.         Msg$ = "Unsupported character set"
  398.     Case 32
  399.         Msg$ = "Unsupported data ext"
  400.     Case 33
  401.         Msg$ = "Unsupported flag"
  402.     Case 34
  403.         Msg$ = "Unsupported function ext"
  404.     Case 35
  405.         Msg$ = "Unsupported version"
  406.     Case 36
  407.         Msg$ = "Message canceled"
  408.     Case 37
  409.         Msg$ = "User not logged on"
  410.     Case Else
  411.         Msg$ = "Unknown error"
  412. End Select
  413.  
  414. IF status% <> 0 THEN ret% = MessageBox(Msg$, MsgTitle$, EXCLAMATION%)
  415.  
  416. END SUB
  417.  
  418.  
  419. 
  420. *****  WARNING *****
  421. This is a WSWin macro file.
  422. Subsequent data is binary information and should not be modified.
  423. # MF # 1.0None762570490L|ÿYrk
  424. 8    àå
  425. 8    çê
  426. 8    ëè
  427. 8    ïî
  428. 8+    Éæ
  429. 8+=    ¿¡
  430. 8=>    ⌐¡
  431. 8>?    ¬¡
  432. 8?@    ½¡
  433. 8@A    ¼¡
  434. 8AM│░▒
  435. 8MY╤╙╘
  436. â╙¡╒â
  437. 8Y[    ╓╫
  438. 8[\┘¥╪╓É┘╧┌
  439. 8\]
  440. 8]a▄Ç█▄▌
  441. 8ab߀
  442. ▐▀αß
  443. 8beπÇ
  444. Γπ«Σ
  445. 8ehµστ
  446. 8hh(
  447. ΘσΩσöâΘΩδâ
  448. 8h(i∞
  449. 8im∩εφ∩≡
  450. 8mn»
  451. 8no±
  452. 8op─à≥    ¿≥
  453. 8pq╞»»
  454. 8qr─ç≤    ⌐≤
  455. 8rs╞»»
  456. 8st─ë⌠    ½⌠
  457. 8tt ⽡÷â
  458. 8tu╞»»
  459. 8uv≈¡φ≈°
  460. 8vx!
  461. ·¿¡
  462. √⌐¡â·√ⁿâ
  463. 8x!y∞
  464. 8y|
  465. ²» 
  466. 8|}
  467. 
  468. 8}~Ç
  469. 8~Ç
  470.     ¬
  471. 8ü5
  472. ╚
  473. ½ â  â
  474. 8ü5â││▓
  475. 8âç% 
  476.  ââ
  477. 8ç%ë    ╓
  478. 8ëè"╓    ╓
  479. 8èï"╓    ╓
  480. 8ïîô¢╪╓É╧
  481. 8îî
  482. â╧óâ
  483. 8îì╨
  484. 8ìì
  485. â╧ªâ
  486. 8ìÄ 
  487. 8ÄÉ 
  488. 8Éò
  489. ╦¼│!    ½!
  490. 8òû±Ç
  491. 8ûÜ#"φ#$
  492. 8Ü¢%║¿⌐¬│½¼ï%╧
  493. 8¢£&¡φ&'
  494. 8££
  495. â±Ç)â
  496. 8£¥'½
  497. 8¥₧*╧╬*
  498. 8₧ƒ
  499. ²»+
  500. 8ć
  501. Γ««,
  502. 8áó(─
  503. 8ó¼/0
  504. 8¼¡12
  505. 8¡¡;758696:ì;54-789:;<=â<>â
  506. 8¡;▒C6
  507. BCAD
  508. 8▒▓
  509. âA5?â
  510. 8▓╡ EFGAH
  511. 8╡╢
  512. IFJ
  513. 8╢╕
  514. KL
  515. 8╕╣N5MNO
  516. 8╣╗Q5
  517. PQRS    ─R3
  518. 8╗╜    ─T
  519. 8╜└(╞
  520. 8└╠ XYZW[
  521. 8╠═
  522. \Z]
  523. 8══âUZ_â
  524. 8═╧╞U^
  525. 8╧╤╞Z
  526. 8╤╘(╦
  527. 8╘τhfig ehijk    dj
  528. 8τΦpn
  529. mpqrsotn
  530. mtuv┤qsudwlw
  531. 8ΦΘ    ydxyz
  532. 8ΘΘ"}n {d}~
  533. â~nÇâ
  534. 8Θ"δ    üé
  535. 8δ∞"äüâ    üä
  536. 8∞φaù¥
  537. 8φφ7àüÉaçê
  538. âçúëâ
  539. 8φ7εc
  540. 8ε∩╨
  541. 8∩≤ïîì    èî
  542. 8≤⌠
  543. .âÇèÅÉâ
  544. 8⌠⌡
  545. .ôÇèÅöôæ
  546. -Æèö    èÆÄ
  547. 8⌡°'Öù òèÖÜ¢
  548. âÜÿ£â
  549. 8°'·    è¥
  550. 8·²    ╦d
  551. 8²■    `è
  552. 8■ aa▓
  553. 8 (╚
  554. 8
  555. âƒóúâ
  556. 8ñÑ
  557. 8¿º ª¿⌐
  558. 8¬₧
  559. 8
  560. ⬼¡â«
  561. 8Ȭ
  562. 8½
  563. ⬺»â░
  564. 8ȧ
  565. 8½
  566. â¬▒▓â│
  567. 8
  568. âƒó╡â
  569. 8 ╢
  570. 8 "½
  571. â¬╖╕â╣
  572. 8"$    ║╗
  573. 8$%╛ô¢╜║É╛╝┐
  574. 8%%
  575. â╝ó┴â
  576. 8%&╨
  577. 8&&
  578. â╝ª├â
  579. 8&(╚¼┬
  580. 8(*ȧ
  581. 8*/(
  582. ╞╚º
  583. ╟ƒóâ╞╟╚â
  584. 8/(1    ╔╩
  585. 812"╠╔╦    ╔╠
  586. 823"╬╔═    ╔╬
  587. 834╧ƒ╜╔É╧╝╨
  588. 847(╨
  589. 87@
  590. 8@@ â»╙╘â
  591. 8@A
  592. ╒»╓
  593. 8AB╪╫╬╪
  594. 8BC
  595. ┘««┌
  596. 8CD
  597. 8DF(╬
  598. 8FN▌█
  599. 8NO
  600. â▌▀αâß
  601. 8OP    Γπ
  602. 8PQ▐
  603. â▌Σσâµ
  604. 8QR    Γτ
  605. 8RS▐
  606. â▌ΦΘâΩ
  607. 8ST    Γδ
  608. 8TU▐
  609. â▌∞φâε
  610. 8UV    Γ∩
  611. 8VW▐
  612. â▌≡±â≥
  613. 8WX    Γ≤
  614. 8XY▐
  615. â▌⌠⌡â÷
  616. 8YZ    Γ≈
  617. 8Z[▐
  618. â▌°∙â·
  619. 8[\    Γ√
  620. 8\]▐
  621. â▌ⁿ²â■
  622. 8]^    Γ 
  623. 8^_▐
  624. â▌â
  625. 8_`    Γ
  626. 8`a▐
  627. â▌â
  628. 8ab    Γ
  629. 8bc▐
  630. â▌    â
  631. 
  632. 8cd    Γ 
  633. 8de▐
  634. â▌ â
  635. 8ef    Γ
  636. 8fg▐
  637. â▌â
  638. 8gh    Γ
  639. 8hi▐
  640. â▌â
  641. 8ij    Γ
  642. 8jk▐
  643. â▌â
  644. 8kl    Γ
  645. 8lm▐
  646. â▌â
  647. 8mn    Γ
  648. 8no▐
  649. â▌ !â"
  650. 8op    Γ#
  651. 8pq▐
  652. â▌$%â&
  653. 8qr    Γ'
  654. 8rs▐
  655. â▌()â*
  656. 8st    Γ+
  657. 8tu▐
  658. â▌,-â.
  659. 8uv    Γ/
  660. 8vw▐
  661. â▌01â2
  662. 8wx    Γ3
  663. 8xy▐
  664. â▌45â6
  665. 8yz    Γ7
  666. 8z{▐
  667. â▌89â:
  668. 8{|    Γ;
  669. 8|}▐
  670. â▌<=â>
  671. 8}~    Γ?
  672. 8~▐
  673. â▌@AâB
  674. 8Ç    ΓC
  675. 8Çü▐
  676. â▌DEâF
  677. 8üé    ΓG
  678. 8éâ▐
  679. â▌HIâJ
  680. 8âä    ΓK
  681. 8äà▐
  682. â▌LMâN
  683. 8àå    ΓO
  684. 8åç▐
  685. â▌PQâR
  686. 8çê    ΓS
  687. 8êë▐
  688. â▌TUâV
  689. 8ëè    ΓW
  690. 8èï▐
  691. â▌XYâZ
  692. 8ïî    Γ[
  693. 8îì▐
  694. â▌\]â^
  695. 8ìÄ    Γ_
  696. 8ÄÅ▐
  697. â▌`aâb
  698. 8ÅÉ    Γc
  699. 8Éæ▐
  700. â▌deâf
  701. 8æÆ    Γg
  702. 8Æô▐
  703. â▌hiâj
  704. 8ôö    Γk
  705. 8öò▐
  706. â▌lmân
  707. 8òû    Γo
  708. 8ûù▐
  709. â▌pqâr
  710. 8ùÿ    Γs
  711. 8ÿÖ▐
  712. â▌tuâv
  713. 8ÖÜ    Γw▐
  714. 8Ü£    Γx
  715. 8£₧ â█▀zâ
  716. 8₧ƒ}¥|ΓÉ}{~
  717. 8ƒíü~┌$-U`₧╤█ÇÇÇÇÇÇÇÇÇÇÇÇÇÇ.τb.τb.τb .τb-.τb5.τb;.τbA.τbN.τb^.τb    l.τb
  718. z.τb ê.τb û.τbñ.τb▓.τb╢.τb╣.τb╜.τb└.τb┬.τb─.τb╞.τb╔.τb╠.τb╧.τb╥.τb╘.τb╓.τb┌.τb▄.τb▐.τbα.τb Γ.τb!Σ.τb"Θ.τb#∞.τb$≡.τb%⌡.τb&ⁿ.τb'/τb(
  719. /τb)/τb*/τb+/τb,"/τb-(/τb.-/τb/3/τb06/τb1;/τb2@/τb3B/τb4E/τb5J/τb6N/τb7T/τb8Y/τb9`/τb:g/τb;l/τb<o/τb=w/τb>y/τb?{/τb@/τbAê/τbBî/τbCÅ/τbDù/τbE₧/τbFú/τbG¡/τbH┤/τbI╣/τbJ╜/τbK┬/τbL╟/τbM═/τbN╤/τbO╒/τbP▄/τbQπ/τbRΩ/τbS≡/τbT≈/τbU0τbV0τbW0τbX$0τbY10τbZ:0τb[G0τb\P0τb]X0τb^`0τb_h0τb`q0τbav0τbb{0τbcÇ0τbdç0τbeÄ0τbfö0τbg¢0τbh¥0τbió0τbj¿0τbk«0τbl╡0τbm╛0τbn╟0τbo╦0τbp╙0τbq╫0τbr▄0τbsΓ0τbtΦ0τbuε0τbv⌠0τbw∙0τbx■0τby1τbz1τb{1τb|1τb}gb  gb+gb+    gbgbgb  gb gb
  720.           )gb+      /gb
  721.           :gb+      Egb
  722.           Ogb+      ^gb
  723.           igb+      mgb    +P  zgb    +P  ègb+  îgb
  724.     @      ûgb+      ªgb    +P  ▒gb    +P  └gb+  ┬gb    +P  ╩gb+  ╠gb    +P  ┌gb+  ▄gb    +P  Γgb+  σgb    +P   ∩gb+   ≥gb    +P  0 gb+  0gb    +P  @gb+  @gb    +P  gb    +P  gb    +P  %gb    +P  *gb+  ,gb    +P  0gb+  2gb
  725.     @      6gb
  726.     @      ?gb
  727.     @      Igb
  728.     @      Vgb
  729.     @      agb+      dgb    @      lgb    @      ugb    +P  çgb    +P  Ögb    +P  ¼gb    @      ╖gbàB╡╟gb╨gb▌gbεgb÷gbgbçB╗gb$gb,gb6gbAgbIgbUgbagbigbogb
  730. ë@6    {gb
  731. ågb    ç@p    ûgb    ƒgb    ç@ε    «gb    │gb
  732. ╕gb
  733. ë@µ    ╚gb
  734. ╒gb    ▄gbA@¬     πgb          ΦgbA@,     ≤gb
  735. ë gb  gb          gb     gb  gb
  736.           gb+      [gbç:fgb  kgb     pgbA {gb  Çgb     àgbç"Ægb  ùgb  £gb     ógbçE│gb  ╣gb     ┐gb          ╩gbç&█gb     ßgb  óµgb  ∞gb  ≥gb  ó≈gbBô gbA@    gb+      2gb      8gb     >gb          Ggb      Mgb      Sgb      Ygb  p^gb  pcgb      igb     ogb  ╛tgb  zgb  Çgb  ╛àgbABögb  Ügb     ágbA.¬gb     ░gbA1╗gb  ┴gb     ╟gb
  737. ë3╒gb  █gb      ßgb     τgb  V∞gb  ≥gb  °gb  V■gbç5
  738. gb  Bgbç8gb  !gb     'gb  -gb     3gb  49gb+      Çgb+      ┐gb      ┼gb+      πgb      Θgb  ∩gb     ⌡gb  
  739. √gb  
  740. gb  0gb  0gblÿgb      gb+      8gb      >gb     Dgb  Jgb      Pgb     Vgb  Ω\gb  Ωbgb  hgb     ngb     tgb
  741.        gbügbAGÄgb     ögbAIƒgb     Ñgb  d½gbçK┤gb+  ╢gb+  ╕gb  ╛gb  ─gb  ╩gb  ╨gb  ╓gb  ▄gb     ?Γgb  TΦgb  ¿εgb  ┌⌠gb          ∙gbçSgb   gb     gbçU gb          %gb          *gb     0gbAX?gb     EgbA[Ogb     UgbA^_gb  egb     kgb
  742. ë`ygb  gb      àgb     ïgb+      Ägb       ùgbÖgb          ₧gbçb¼gb          ▒gb          ╢gb     ╝gbAe╦gb     ╤gb  ┌╫gb  ╩▌gb
  743.        Ωgb       ±gb≤gbΩσ∙gb
  744.           gb
  745. ëhgb+  Égb+      gb  gb      !gb      'gb     -gb          2gbàm6gb+  8gb+      >gb  Dgb  Jgb     Pgb      Vgb  \gb  bgb     hgb  ngbAo}gb      âgb     ëgbçqÉgb  ûgb  £gb  ógb     ¿gb  «gb
  746.           │gb+      ⌡gb+      5    gb      ;    gbçtF    gb  L    gb  R    gb     X    gb  ^    gb
  747.           g    gb
  748. ëxs    gb      y    gb         gb  ,à    gb+      ë    gb  vÅ    gb+  æ    gb      ù    gb  ¥    gb  ú    gb
  749. ëy⌐    gb  ░»    gb+  ▒    gb+      ╝    gb  ┬    gb      ╚    gb     ╧    gb  ░╒    gb+      Σ    gb       Θ    gb
  750.        ε    gb≡    gb  6    ÷    gb+      ∙    gb  6         gbA|
  751. gb     
  752. gbA}
  753. gb+  
  754. gb  !
  755. gb     (
  756. gb  /
  757. gb  Ü
  758. 5
  759. gb+  7
  760. gb  b    =
  761. gb  Ç    C
  762. gb  Æ    I
  763. gb  ░    O
  764. gb+  Q
  765. gb  ┬    W
  766. gb  ÷    ]
  767. gb  Φ    c
  768. gb  Φ    i
  769. gb
  770. "r
  771. gb+  t
  772. gb  
  773. z
  774. gb  Ü
  775. Ç
  776. gb
  777.           è
  778. gb+      ╣
  779. gb          ╛
  780. gbçà╔
  781. gb  ╨
  782. gb     ╫
  783. gb  ^
  784. gb  ^
  785. π
  786. gb  Ü
  787. Θ
  788. gb  è
  789. gbÜ
  790. .∙
  791. gb     
  792. gb   gb   gb     gb
  793.            gb+      \ gb+      ù gb      ₧ gb+      ╡ gb      ╝ gb  ├ gb     ╩ gb╠ gb  h ╥ gb+  ╘ gb  h ┌ gbAëΘ gb     ≡ gb+  $≤ gb  · gbçî gb      gb        gb gb  # gb  ε) gb+  + gb  ┌ 1 gb  ° 7 gb
  794.           < gb+      F gb+  H gb  
  795. N gb  ( T gb+      j gb+  l gb  : r gb  X x gb+      Å gb+  æ gb  j ù gb  ê ¥ gb+      ╖ gb+  ╣ gb  Ü ┐ gb  ╕ ┼ gb+      ▀ gb+  ß gb  ╩ τ gb  Φ φ gb+      gb+  
  796. gb  · gb  gb+      3gb+  5gb  *;gb  HAgb+      Mgb+  Ogb  ZUgb  x[gb+      egb+      ggb  èmgb  ¿sgb+      ëgb+  
  797. îgb  ║Ægb  ╪ÿgb+      ░gb+   │gb  Ω╣gb  ┐gb+      ╬gb+   ╤gb  ╫gb  8▌gb+      ∞gb+  ∩gb  J⌡gb  h√gb+       gb+  gb  zgb  ÿgb+      7gb+  :gb  ¬@gb  ╚Fgb+      bgb+  egb  ┌kgb  °qgb+      àgb+  êgb  
  798. Ägb  (ögb+      ⌐gb+  ¼gb  :▓gb  X╕gb+      ╚gb+  ╦gb  j╤gb  ê╫gb+      τgb+  Ωgb  Ü≡gb  ╕÷gb+      gb+  
  799. gb  ╩gb  Φgb+      &gb+  )gb  ·/gb  6gb+      Jgb+  Mgb  *Tgb  H[gb+      qgb+  tgb  Z{gb  xégb+      ÿgb+  ¢gb  èógb  ¿⌐gb+      ║gb+  ╜gb  ║─gb  ╪╦gb+      ▄gb+  ▀gb  Ωµgb  φgb+      gb+  gb  gb  8gb+      1gb+  4gb  J;gb  hBgb+      ^gb+  agb  zhgb  ÿogb+      ägb+  çgb  ¬Ägb  ╚ògb+      ▒gb+   ┤gb  ┌╗gb  °┬gb+      ┘gb+  !▄gb  
  800. πgb  (Ωgb+      ²gb+  "gb  :gb  Xgb+      )gb+  #,gb  j3gb  ê:gb+      Pgb+  $Sgb  ÜZgb  ╕agb+      tgb+  %wgb  ╩~gb  ▐àgb+      Ügb+      ¬gb  $▒gb  $╕gb          ╜gbçÄ╚gb  ╧gb     ╓gb╪gb????01CANCELERRORNUM[T1]
  801. TO_TEXT$"To:"SUBJ_TEXT$"Subject:"ATT_TEXT$"Attachments:"DELIMITER$";"IGNORE_CASE%DISPLAY_DIALOG%2MSGTITLE$"Mailcmc Macro"OK_CANCEL%YES_NO_CANCEL%3YES_NO%4RETRY_CANCEL%5STOP%16QUESTION%32EXCLAMATION%48INFORMATION%64OK%CANCEL%RETRY%YES%6NO%7TO$SUBJECT$NOTETEXT$ATTACHMENTS$FILETITLE$""FREEZE%NOTEPOS%ERROR_UI_ALLOWED%LOGON_UI_ALLOWED%SEND_UI_REQUESTED%SENDFLAGS%GETTEMPFILENAME"kernel"BDRIVELETTERLPSZPREFIXSTRINGUUNIQUELPSZTEMPFILENAMECMC_SEND_DOCUMENTS"cmc.dll"LPRECIPLPSUBJECTLPTEXTNOTEULFLAGSLPFILEPATHSLPFILENAMESLPDELIMULUIDGETKEYTEXT$LPKEYWORD$GETFURTHESTPOS%PREVPOS%DISPLAYDIALOG%ASK%ATT$MAKEATTACHMENT$LPFILETITLE$FLAGS%STATUSRET%ABORTMACROGETDOCNAME$[L1][T2][T3][L2]MSG$"Please create a new document or open an existing document first."MESSAGEBOX[T4][T5]VIEWEDITOR[T6][T7]VIEWEDITMODE[T8][T9][T10]VIEWFREEZESCREEN[T11][T12]FRAMETYPE%GETTEXTFRAMETYPE[T13][L3][T14][T15][L4]SENDATTSTATUSMSG"Checking document for email text . . ."[T16][T17]TMPFILE%[T18][T19][T20][L5][L6][T21][T22][L7][T23][T24][L8]EDITGOTOOFFSET[T25][T26]WORDRIGHT[T27]ENDOFSTORY[T28][T29]GETSELECTION$[T30][T31][T32][L9][T33][T34][L10]COUNTFRAMES[L11]COUNTPAGES[T35][T36][T37][T38][L12]"This document contains dependent frames, and only the current frame ""is being used for the email note. Do you wish to attach the "[T39]"document to the email note?"[T40][T41][T42][L13][L14][L15][L16]SENDDOC[T43]"Calling email system . . ."[T44][T45][T46][T47][T48][L17][L18][T49][T50][T51]LPKEYWORD$
  802. STARTOFSTORY[T52]ENDOFFRAME[T53][L19]EDITFIND10[T54][T55][T56][T57][T58][T59][T60][L20][L21][L22]RET%EDITFINDNEXT[T61][T62]GETTEXTOFFSETBEG%END%[T63]EDITGOTOOFFSET[T64]WORDRIGHT[T65]ENDOFPARA[T66][T67]GETSELECTION$[T68][T69][T70]""PREVPOS%
  803. RET%GETTEXTOFFSETBEG%END%[T71]EDITGOTOOFFSET[T72][L23][L24]LPFILETITLE$FLAGS%
  804. MKTMPLPFILENAME$STRING$144" "[T73][T74][T75][T76]RET%I2W0"WSW"[T77][T78][T79][T80][T81][T82][T83][T84]FILESAVEASCOPY[T85][T86]ACCESS[L25][T87][T88][T89][L26]MSG$"Could not create temporary file. You may be low on disk space. ""Delete some files and choose Retry, or choose Cancel to quit."[T90]MESSAGEBOX[L27][T91][T92][L28]DOCNAME$GETDOCNAME$[T93][T94][L29]"\"[L30]1[T95][T96][T97]LEFT$[L31]8"Untitled"[T98][T99][T100][L32]"Untitled.wsd"ASK%ATT$
  805. [L33]""[L34]EDITCOPY[T101]CHARLEFT1[T102][T103][T104][L35]0[L36][L37][L38][L39]3[L40][L41][L42][L43]ASK_DISP2[L44][L45]QUESTION$"Display email dialog before sending message?"RET%MESSAGEBOX[T105][T106][L46][L47][L48][L49]COPY_INFO[L50][T107][T108][L51]MSG$"The note text has been copied to the clipboard. If the note text ""does not appear, you can paste it into the message body "[T109]"from the email menu."[T110][T111][T112]
  806. [L52]0[L53]EDITGOTOOFFSET[T113]36[T114]VIEWFREEZESCREEN[T115]STATUS%
  807. [T116][L54]0[L55][L56]MSG$"Success"1[L57][L58]"Ambiguous recipient"2[L59][L60]"Attachment not found"3[L61][L62]"Attachment open failure"4[L63][L64]"Attachment read failure"5[L65][L66]"Attachment write failure"6[L67][L68]"Counted string unsupported"7[L69][L70]"Disk full"8[L71][L72]"Failure"9[L73][L74]"Insufficient memory"10[L75][L76]"Invalid configuration"11[L77][L78]"Invalid enum"12[L79][L80]"Invalid flag"13[L81][L82]"Invalid memory"14[L83][L84]"Invalid message parameter"15[L85][L86]"Invalid message reference"16[L87][L88]"Invalid parameter"17[L89][L90]"Invalid session ID"18[L91][L92]"Invalid UI ID"19[L93][L94]"Logon failure"20[L95][L96]"Message in use"21[L97][L98]"Not supported"22[L99][L100]"Password required"23[L101][L102]"Recipient not found"24[L103][L104]"Service unavailable"25[L105][L106]"Text too large"26[L107][L108]"Too many files"27[L109][L110]"Too many recipients"28[L111][L112]"Unable to not mark as read"29[L113][L114]"Unrecognized message type"30[L115][L116]"Unsupported action"31[L117][L118]"Unsupported character set"32[L119][L120]"Unsupported data ext"33[L121][L122]"Unsupported flag"34[L123][L124]"Unsupported function ext"35[L125][L126]"Unsupported version"36[L127][L128]"Message canceled"37[L129][L130]"User not logged on""Unknown error"[L131][L132]RET%MESSAGEBOX[T117][T118]
  808.