home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Extra 1997 #5 / AmigaPlus_Extra-CD_5-97.iso / online-tools / mail / yamtools1.7 / yamtools.rexx < prev    next >
OS/2 REXX Batch file  |  1997-06-18  |  105KB  |  2,817 lines

  1. /******************************************************************************/
  2. /*                                                                            */
  3. /*                            YAMTOOLS                                        */
  4. /*                 Copyright ©1997 by Dick Whiting                            */
  5. /*                                                                            */
  6. /*----------------------------------------------------------------------------*/
  7. /*                                                                            */
  8. /* Standard Disclaimer: I wrote it, it works for me, I don't guarantee        */
  9. /* that it will do anything productive for anyone else, etc. etc. ;-)         */
  10. /*                                                                            */
  11. /*HOWEVER, if you DO find a use for it: I homeschool my kids and they         */
  12. /*would love a postcard from where EVER you live.                             */
  13. /*                                                                            */
  14. /*Instant GEOGRAPHY lesson;)                                                  */
  15. /*                                                                            */
  16. /*                                                                            */
  17. /*POSTCARDS:    Dick Whiting                                                  */
  18. /*              28590 S. Beavercreek Rd.                                      */
  19. /*              Mulino, Oregon 97042                                          */
  20. /*              USA                                                           */
  21. /*                                                                            */
  22. /*----------------------------------------------------------------------------*/
  23. /*                                                                            */
  24. /*               Address Bug Reports or Comments to:                          */
  25. /*                Dick Whiting <dwhiting@europa.com>                          */
  26. /*                           15 June 1997                                     */
  27. /*                                                                            */
  28. /******************************************************************************/
  29. /*
  30. $VER: 1.7 Copyright ©1997 by Dick Whiting
  31. $AUTHOR: Dick Whiting
  32. $DESCRIPTION: Add-on Tools for Marcel Beck's wonderful YAM
  33. */
  34.  
  35. options results
  36. options failat 21
  37.  
  38. subrtn=''
  39. parm=''
  40. rest=''
  41.  
  42. parse arg subrtn parm rest
  43.  
  44. progdir=pragma('D')
  45.  
  46. /**************************************************************************/
  47. /*                         Initialize Variables                           */
  48. /**************************************************************************/
  49. Call MUIvars                                /* go define vars for MUI use */
  50. Call YTvars                                 /* various values used in YT  */
  51. Call Helpvars                               /* pointers into HELP guide   */
  52. Call Localize                               /* vars for localizing strings*/
  53. Call Builtvars                              /* built using previous values*/
  54.  
  55. /**************************************************************************/
  56. /*                                                                        */
  57. /*                       Main Logic Routine                               */
  58. /*                                                                        */
  59. /**************************************************************************/
  60.  
  61. Address YAMTOOLS
  62.  
  63. Call CheckYam                               /* No YAM-no sense running    */
  64.  
  65. if subrtn~='' then do                       /* check vars nth time        */
  66.    getvar YAMTOOLSDEBUG                     /* see if we're debugging     */ 
  67.    debug=result
  68.    getvar YAMTOOLSROWS                      /* number of rows of buttons  */
  69.    Brows=result
  70.    getvar YAMTOOLSCOLS                      /* number of cols of buttons  */
  71.    Bcols=result
  72. end
  73.  
  74. if debug~=TRUE then debug=FALSE
  75.  
  76. if debug then say 'subrtn='subrtn 
  77. if debug then say 'parm='parm
  78. if debug then say 'rest='rest
  79.  
  80. Select
  81.    when subrtn=''   then do                 /* first time - setup window  */
  82.       Call LoadConfig                       /* load config or defaults    */
  83.       setvar YAMTOOLSROWS Brows             /* button rows for this run   */
  84.       setvar YAMTOOLSCOLS Bcols             /* button cols for this run   */
  85.       Call EnsureLibs                       /* make sure all libs present */
  86.       Call ValidateConfig                   /* check config options       */
  87.       if goodconfig then do                 /* found a valid config-use it*/ 
  88.          if ~delayload then do
  89.             Call GetArchList                /* get all folder info        */
  90.             Call ExpandAssigns              /* change assigns to vols     */ 
  91.             Call GetVolume                  /* change devs to vols        */
  92.             Call CheckArchs                 /* make sure all exist        */
  93.             Call LoadArchList               /* build & show folder list   */     
  94.             window ID YTINF CLOSE           /* close info window          */
  95.          end 
  96.          Call UpdateButtons                 /* update help for buttons    */
  97.       end
  98.       else do                               /* invalid or not found       */
  99.          group ID YTPGS LABELS Cpage
  100.          errmsg=_text._badconfig
  101.          Call ErrorMsg 
  102.       end
  103.    end
  104.    when subrtn='RESCAN' then do             /* reload folder list         */
  105.       Call GetArchList                      /* get all folder info        */
  106.       Call ExpandAssigns                    /* change assigns to vols     */
  107.       Call GetVolume                        /* change devs to vols        */
  108.       Call CheckArchs                       /* make sure all exist        */
  109.       Call LoadArchList                     /* build & show folder list   */
  110.       window ID YTINF CLOSE                 /* close info window          */
  111.    end
  112.    when subrtn='READMAIL' then Call ReadMail         /* read selected mail*/  
  113.    when subrtn='BUTTON'   then Call DoRexxButton     /* execute a button  */
  114.    when subrtn='CONFIGEDIT' then Call ConfigEdit     /* modify config     */
  115.    when subrtn='ABOUT'  then Call AboutProgs         /* show About info   */
  116.    when subrtn='LISTMAIL' then Call ListMail         /* all mail in folder*/  
  117.    when subrtn='SEARCH' then Call SearchArchs        /* do the searches   */  
  118.    otherwise nop                                     /* never happen ;)   */
  119. end
  120.  
  121. exit
  122.  
  123. /******************************************************************************/
  124. /*                      MUIREXX WINDOW DEFINITION(S)                          */
  125. /******************************************************************************/
  126. BuildWindow:
  127.  
  128.    window ID YTWIN COMMAND '"quit"' PORT YAMTOOLS TITLE _title._main
  129.    if ~splitscreen then do
  130.        Call BuildMenu1
  131.        Call BuildWin1
  132.        Call BuildWin2
  133.    end
  134.    else do
  135.       Call BuildMenu1
  136.       Call BuildWin1
  137.       endwindow
  138.       Address YAMTOOLS
  139.       window ID YTWN2 COMMAND '"quit"' PORT YAMTOOLS TITLE _title._main
  140.       Call BuildMenu2
  141.       Call BuildWin2
  142.    end
  143.  
  144. Return
  145.  
  146. BuildMenu1:
  147.  
  148.    menu LABEL _label._project
  149.       menu LABEL _label._about
  150.          item COMMAND '"YamTools.rexx ABOUT YAMTOOLS"' LABEL '"YamTools"'
  151.          item COMMAND '"YamTools.rexx ABOUT YAM"' LABEL '"YAM"'
  152.          item COMMAND '"YamTools.rexx ABOUT MUIREXX"' LABEL '"MuiRexx"'
  153.          item COMMAND '"method 'Application_AboutMUI' 0"' PORT YAMTOOLS LABEL '"MUI"'
  154.       endmenu
  155.       item ATTRS MUIA_Menuitem_Title '-1'
  156.       item COMMAND '"YamTools.rexx CONFIGEDIT SAVE"' ATTRS MUIA_Menuitem_Shortcut 'S' LABEL _label._save
  157.       item COMMAND '"YamTools.rexx CONFIGEDIT SAVEAS"' ATTRS MUIA_Menuitem_Shortcut 'W' LABEL _label._saveas
  158.       item COMMAND '"YamTools.rexx CONFIGEDIT READ"' ATTRS MUIA_Menuitem_Shortcut 'O' LABEL _label._open 
  159.       item ATTRS MUIA_Menuitem_Title '-1'
  160.       item COMMAND '"quit"' PORT YAMTOOLS ATTRS MUIA_Menuitem_Shortcut 'Q' LABEL _label._quit
  161.    endmenu
  162.    menu LABEL _label._settings
  163.    if ~splitscreen then do
  164.       item COMMAND '"group ID YTPGS LABELS ATTRS' MUIA_ShowMe TRUE '"', 
  165.             MUIA_Menuitem_Shortcut 'P' PORT YAMTOOLS LABEL _label._showpage
  166.       item COMMAND '"group ID YTPGS LABELS 'FLpage' ATTRS' MUIA_ShowMe FALSE '"', 
  167.             MUIA_Menuitem_Shortcut 'H' PORT YAMTOOLS LABEL _label._hidepage
  168.    end
  169.    else do
  170.       item COMMAND '"method ID YTWIN ' 0x8042554f'"', 
  171.             MUIA_Menuitem_Shortcut 'P' PORT YAMTOOLS LABEL _label._showpage
  172.       item COMMAND '"method ID YTWIN ' 0x8042152e'"', 
  173.             MUIA_Menuitem_Shortcut 'H' PORT YAMTOOLS LABEL _label._hidepage
  174.    end
  175.       item COMMAND '"method 'Application_OpenConfigWindow'"' PORT YAMTOOLS LABEL '"MUI..."'
  176.  
  177.    endmenu
  178.  
  179. Return
  180.  
  181. BuildMenu2:
  182.  
  183.    menu LABEL _label._project
  184.       menu LABEL _label._about
  185.          item COMMAND '"YamTools.rexx ABOUT YAMTOOLS"' LABEL '"YamTools"'
  186.          item COMMAND '"YamTools.rexx ABOUT YAM"' LABEL '"YAM"'
  187.          item COMMAND '"YamTools.rexx ABOUT MUIREXX"' LABEL '"MuiRexx"'
  188.          item COMMAND '"method 'Application_AboutMUI' 0"' PORT YAMTOOLS LABEL '"MUI"'
  189.       endmenu
  190.       item ATTRS MUIA_Menuitem_Title '-1'
  191.       item COMMAND '"YamTools.rexx CONFIGEDIT SAVE"' ATTRS MUIA_Menuitem_Shortcut 'S' LABEL _label._save
  192.       item COMMAND '"YamTools.rexx CONFIGEDIT SAVEAS"' ATTRS MUIA_Menuitem_Shortcut 'W' LABEL _label._saveas
  193.       item COMMAND '"YamTools.rexx CONFIGEDIT READ"' ATTRS MUIA_Menuitem_Shortcut 'O' LABEL _label._open 
  194.       item ATTRS MUIA_Menuitem_Title '-1'
  195.       item COMMAND '"quit"' PORT YAMTOOLS ATTRS MUIA_Menuitem_Shortcut 'Q' LABEL _label._quit
  196.    endmenu
  197.    menu LABEL _label._settings
  198.    if ~splitscreen then do
  199.       item COMMAND '"group ID YTPGS LABELS ATTRS' MUIA_ShowMe TRUE '"', 
  200.             MUIA_Menuitem_Shortcut 'P' PORT YAMTOOLS LABEL _label._showpage
  201.       item COMMAND '"group ID YTPGS LABELS 'FLpage' ATTRS' MUIA_ShowMe FALSE '"', 
  202.             MUIA_Menuitem_Shortcut 'H' PORT YAMTOOLS LABEL _label._hidepage
  203.    end
  204.    else do
  205.       item COMMAND '"method ID YTWIN ' 0x8042554f'"', 
  206.             MUIA_Menuitem_Shortcut 'P' PORT YAMTOOLS LABEL _label._showpage
  207.       item COMMAND '"method ID YTWIN ' 0x8042152e'"', 
  208.             MUIA_Menuitem_Shortcut 'H' PORT YAMTOOLS LABEL _label._hidepage
  209.    end
  210.       item COMMAND '"method 'Application_OpenConfigWindow'"' PORT YAMTOOLS LABEL '"MUI..."'
  211.  
  212.    endmenu
  213.  
  214. Return
  215.  
  216. BuildWin1:
  217.  
  218.    group ID YTPGS LABELS FLpage||','||MLpage||','||Cpage REGISTER,
  219.          ATTRS MUIA_ShowMe showpages
  220.  
  221. /* Folder List Page */
  222.       group 
  223.          group HORIZ
  224.             group
  225.                label DOUBLE _label._mdir
  226.             endgroup
  227.             group
  228.                text ID MDIR HELP help.MDIR NODE node.MDIR
  229.             endgroup
  230.          endgroup
  231.          group HORIZ MUIA_VertWeight 200 MUIA_HorizWeight 100
  232.             group 
  233.                list ID ALST TITLE _title._alst,
  234.                   COMMAND '"YamTools.rexx LISTMAIL %s"' HELP help.ALST NODE node.ALST,
  235.                   INSERT NODUP ATTRS MUIA_Listview_MultiSelect MUIV_Listview_MultiSelect_Shifted,
  236.                   MUIA_List_Format '"MAXWIDTH=75 MINWIDTH=-1 WEIGHT=75 P=\033l BAR,MAXWIDTH=25 MINWIDTH=-1 WEIGHT=25 P=\033r,WEIGHT=0 MAXWIDTH=0 MINWIDTH=0,WEIGHT=0 MAXWIDTH=0 MINWIDTH=0"'
  237.                button ID ARLD COMMAND '"YamTools.rexx RESCAN"',
  238.                       HELP help.ARLD NODE node.ARLD PRESS LABEL _label._arld
  239.             endgroup
  240.             group FRAME MUIA_HorizWeight 100
  241.                label _label._search
  242.                group HORIZ
  243.                   group HORIZ
  244.                      group
  245.                         label DOUBLE _label._srcf
  246.                         label DOUBLE _label._srct
  247.                      endgroup
  248.                      group
  249.                         check ID SRCF HELP help.SRCF NODE node.SRCF,
  250.                               ATTRS MUIA_Selected FALSE
  251.                         check ID SRCT HELP help.SRCT NODE node.SRCT, 
  252.                               ATTRS MUIA_Selected FALSE
  253.                      endgroup
  254.                   endgroup
  255.                   group HORIZ
  256.                      group
  257.                         label DOUBLE _label._srcs
  258.                         label DOUBLE _label._srcm
  259.                      endgroup
  260.                      group
  261.                         check ID SRCS HELP help.SRCS NODE node.SRCS, 
  262.                               ATTRS MUIA_Selected FALSE
  263.                         check ID SRCM HELP help.SRCM NODE node.SRCM, 
  264.                               ATTRS MUIA_Selected FALSE
  265.                      endgroup
  266.                   endgroup
  267.                endgroup
  268.                group HORIZ
  269.                   label DOUBLE _label._srca
  270.                   check ID SRCA HELP help.SRCA NODE node.SRCA, 
  271.                         ATTRS MUIA_Selected TRUE 
  272.                endgroup
  273.                group 
  274.                   group HORIZ
  275.                      group
  276.                         radio ID SLOG HELP help.SLOG NODE node.SLOG,
  277.                               LABELS _label._slog
  278.                      endgroup
  279.                   endgroup
  280.                   group 
  281.                      space HORIZ 150
  282.                      label  _label._src1
  283.                      string ID SRC1 HELP help.SRC1 NODE node.SRC1, 
  284.                             ATTRS MUIA_CycleChain TRUE, 
  285.                             MUIA_String_AdvanceOnCR TRUE,        
  286.                             CONTENT ''
  287.                      string ID SRC2 HELP help.SRC2 NODE node.SRC2,
  288.                             ATTRS MUIA_CycleChain TRUE,
  289.                             MUIA_String_AdvanceOnCR TRUE,        
  290.                             CONTENT ''
  291.                      string ID SRC3 HELP help.SRC3 NODE node.SRC3,
  292.                             ATTRS MUIA_CycleChain TRUE,
  293.                             MUIA_String_AdvanceOnCR TRUE,        
  294.                             CONTENT ''
  295.                   endgroup
  296.                   group
  297.                      button ID SRCX HELP help.SRCX NODE node.SRCX,
  298.                             COMMAND '"YamTools.rexx SEARCH"', 
  299.                             PRESS ATTRS MUIA_CycleChain TRUE MUIA_Disabled FALSE,
  300.                             LABEL _label._srcx
  301.                   endgroup
  302.                endgroup
  303.             endgroup
  304.          endgroup
  305.       endgroup
  306.  
  307. /* Mail List Page */
  308.       group ATTRS MUIA_HorizWeight 100
  309.          list ID MLST COMMAND '"YamTools.rexx READMAIL %s"', 
  310.             HELP help.MLST NODE node.MLST,
  311.             TITLE _title._mlst,
  312.             INSERT NODUP ATTRS MUIA_Listview_MultiSelect MUIV_Listview_MultiSelect_Shifted,
  313.             MUIA_List_Format '"BAR,BAR,BAR,,WEIGHT=0 MAXWIDTH=0 MINWIDTH=0,WEIGHT=0 MAXWIDTH=0 MINWIDTH=0,WEIGHT=0 MAXWIDTH=0 MINWIDTH=0"'
  314.       endgroup
  315.  
  316. /* Configuration Pages */
  317.       group 
  318.          group ID YTCON LABELS Spage||','||Apage REGISTER
  319.             /* System configuration page */
  320.             group 
  321.                group FRAME HORIZ ATTRS MUIA_VertWeight 200
  322.                   group 
  323.                         label DOUBLE _label._cfgm
  324.                         label DOUBLE _label._cfgf
  325.                         label DOUBLE _label._cfgq
  326.                         label DOUBLE _label._cfgv
  327.                         label DOUBLE _label._cfge
  328.                             space 
  329.                   endgroup
  330.                   group 
  331.                         popasl ID CFGM HELP help.CFGM NODE node.CFGM,
  332.                             ATTRS MUIA_DrawersOnly TRUE,
  333.                             MUIA_CycleChain TRUE, 
  334.                             MUIA_String_AdvanceOnCR TRUE
  335.                         popasl ID CFGF HELP help.CFGF NODE node.CFGF,
  336.                             ATTRS MUIA_CycleChain TRUE, 
  337.                             MUIA_String_AdvanceOnCR TRUE
  338.                         popasl ID CFGQ HELP help.CFGQ NODE node.CFGQ,
  339.                             ATTRS MUIA_CycleChain TRUE, 
  340.                             MUIA_String_AdvanceOnCR TRUE
  341.                         popasl ID CFGV HELP help.CFGV NODE node.CFGV,
  342.                             ATTRS MUIA_CycleChain TRUE, 
  343.                             MUIA_String_AdvanceOnCR TRUE
  344.                         popasl ID CFGE HELP help.CFGE NODE node.CFGE,
  345.                             ATTRS MUIA_CycleChain TRUE, 
  346.                             MUIA_String_AdvanceOnCR TRUE
  347.                             space 
  348.                   endgroup
  349.                endgroup
  350.                group FRAME HORIZ
  351.                   group HORIZ
  352.                      group
  353.                             label DOUBLE _label._cfgd
  354.                             label DOUBLE _label._cfgy
  355.                      endgroup
  356.                      group 
  357.                         check ID CFGD HELP help.CFGD NODE node.CFGD
  358.                         check ID CFGY HELP help.CFGY NODE node.CFGY
  359.                      endgroup
  360.                   endgroup
  361.                   group HORIZ
  362.                      group 
  363.                             label DOUBLE _label._cfgb
  364.                             label DOUBLE _label._cfgs
  365.                      endgroup
  366.                      group 
  367.                         check ID CFGB HELP help.CFGB NODE node.CFGB
  368.                         check ID CFGS HELP help.CFGS NODE node.CFGS
  369.                      endgroup
  370.                   endgroup
  371.                endgroup
  372.             endgroup
  373.             /* ARexx button configuration page */
  374.             group
  375.                group HORIZ ATTRS MUIA_VertWeight 300
  376.                   group ATTRS MUIA_HorizWeight 300 
  377.                      list ID CLST TITLE _title._clst,
  378.                         HELP help.CLST NODE node.CLST,
  379.                         DROP INSERT PRESS COMMAND '"YamTools.rexx CONFIGEDIT EDIT %s"',
  380.                         ATTRS MUIA_Listview_DragType MUIV_Listview_DragType_Immediate, 
  381.                            MUIA_List_DragSortable TRUE MUIA_List_ShowDropMarks TRUE,
  382.                            MUIA_Listview_DoubleClick TRUE,
  383.                            MUIA_List_Format '"BAR,BAR,"'
  384.                   endgroup
  385.                   group 
  386.                      button ID CFG7 COMMAND '"YamTools.rexx CONFIGEDIT CLEAR"',
  387.                             HELP help.CFG7 NODE node.CFG7 PRESS LABEL _label._cfg7
  388.                      button ID CFG9 COMMAND '"YamTools.rexx CONFIGEDIT UNDO"',
  389.                             HELP help.CFG9 NODE node.CFG9 PRESS LABEL _label._cfg9
  390.                      button ID CFGA COMMAND '"YamTools.rexx CONFIGEDIT AEDIT"',
  391.                             HELP help.CFGA NODE node.CFGA PRESS LABEL _label._cfga
  392.                      space
  393.                   endgroup
  394.                endgroup
  395.                group FRAME
  396.                   group HORIZ
  397.                      group
  398.                         label DOUBLE _label._cfg1 
  399.                      endgroup
  400.                      group
  401.                         string ID CFG1 COMMAND '"YamTools.rexx CONFIGEDIT UPDATE"',
  402.                                HELP help.CFG1 NODE node.CFG1,
  403.                                ATTRS MUIA_CycleChain TRUE,
  404.                                MUIA_String_AdvanceOnCR TRUE,
  405.                                CONTENT ''
  406.                      endgroup
  407.                      group
  408.                         label DOUBLE _label._cfg2
  409.                      endgroup
  410.                      group
  411.                         cycle ID CFG2 COMMAND '"YamTools.rexx CONFIGEDIT UPDATE"', 
  412.                               HELP help.CFG2 NODE node.CFG2,
  413.                               ATTRS MUIA_CycleChain TRUE,                            
  414.                               MUIA_String_AdvanceOnCR TRUE,
  415.                               LABELS 'Mail,Folder,Once'
  416.                      endgroup
  417.                   endgroup
  418.                   group HORIZ
  419.                      group
  420.                         label DOUBLE _label._cfg3
  421.                      endgroup   
  422.                      group
  423.                         popasl ID CFG3 COMMAND '"YamTools.rexx CONFIGEDIT UPDATE"', 
  424.                                HELP help.CFG3 NODE node.CFG3,
  425.                                ATTRS MUIA_CycleChain TRUE,
  426.                                MUIA_String_AdvanceOnCR TRUE,
  427.                                CONTENT progdir
  428.                      endgroup
  429.                      group
  430.                         label DOUBLE _label._cfgc
  431.                      endgroup
  432.                      group
  433.                         popslider ID CFGC HELP help.CFGC NODE node.CFGC,
  434.                         ATTRS MUIA_Numeric_Default bcols MUIA_Numeric_Max bcolmax MUIA_Numeric_Min 1
  435.                      endgroup
  436.                      group
  437.                         label DOUBLE _label._cfgr
  438.                      endgroup
  439.                      group
  440.                         popslider ID CFGR HELP help.CFGR NODE node.CFGR,
  441.                         ATTRS MUIA_Numeric_Default brows MUIA_Numeric_Max browmax MUIA_Numeric_Min 1
  442.                      endgroup
  443.                   endgroup   
  444.                endgroup 
  445.             endgroup 
  446.          endgroup
  447.          group FRAME HORIZ
  448.             button ID CFG4 COMMAND '"YamTools.rexx CONFIGEDIT SAVE"',
  449.                    HELP help.CFG4 NODE node.CFG4 PRESS LABEL _label._cfg4
  450.             button ID CFG5 COMMAND '"YamTools.rexx CONFIGEDIT USE"',
  451.                    HELP help.CFG5 NODE node.CFG5 PRESS LABEL _label._cfg5
  452.             button ID CFG6 COMMAND '"YamTools.rexx CONFIGEDIT RELOAD"',
  453.                    HELP help.CFG6 NODE node.CFG6 PRESS LABEL _label._cfg6
  454.          endgroup
  455.       endgroup
  456.    endgroup
  457.  
  458. Return
  459.  
  460. BuildWin2:
  461.  
  462. /* Command Buttons */
  463.    group FRAME scrollval ATTRS MUIA_Scrollgroup_FreeHoriz FALSE
  464.       group ATTRS MUIA_Group_Columns bcols
  465.       do i=1 to (Brows*Bcols)
  466.          bnum=right(i,3,'0')
  467.          bid='B'||right(i,3,'0')
  468.          button ID bid COMMAND '"YamTools.rexx BUTTON 'bnum '"' PRESS HELP '"'help.B00'"' NODE node.B00
  469.       end
  470.       endgroup
  471.    endgroup
  472. endwindow
  473.  
  474. method ID SRCF  MUIM_Notify_Notify MUIA_Selected TRUE,
  475.       @SRCA 3   MUIM_Notify_Set MUIA_Selected FALSE
  476. method ID SRCT  MUIM_Notify_Notify MUIA_Selected TRUE,
  477.       @SRCA 3   MUIM_Notify_Set MUIA_Selected FALSE
  478. method ID SRCS  MUIM_Notify_Notify MUIA_Selected TRUE,
  479.       @SRCA 3   MUIM_Notify_Set MUIA_Selected FALSE
  480. method ID SRCM  MUIM_Notify_Notify MUIA_Selected TRUE,
  481.       @SRCA 3   MUIM_Notify_Set MUIA_Selected FALSE
  482.  
  483. method ID SRCA  MUIM_Notify_Notify MUIA_Selected TRUE,
  484.       @SRCF 3   MUIM_Notify_Set MUIA_Selected FALSE
  485. method ID SRCA  MUIM_Notify_Notify MUIA_Selected TRUE,
  486.       @SRCT 3   MUIM_Notify_Set MUIA_Selected FALSE
  487. method ID SRCA  MUIM_Notify_Notify MUIA_Selected TRUE,
  488.       @SRCS 3   MUIM_Notify_Set MUIA_Selected FALSE
  489. method ID SRCA  MUIM_Notify_Notify MUIA_Selected TRUE,
  490.       @SRCM 3   MUIM_Notify_Set MUIA_Selected FALSE
  491.  
  492.  
  493. application ATTRS MUIA_Application_Author '"Dick Whiting"', 
  494.             MUIA_Application_Base '"YAMTOOLS"',
  495.             MUIA_Application_Copyright '"Copyright ©1997 by Dick Whiting"',
  496.             MUIA_Application_Description '" Add-On Tools For YAM"',
  497.             MUIA_Application_Title '"YamTools"',
  498.             MUIA_Application_Version '"Version 1.7"'
  499.  
  500. if ~showpages & splitscreen then do
  501.    method ID YTWIN MUIM_Window_ToBack
  502. end
  503.  
  504. Return
  505.  
  506. /**************************************************************************/
  507. /*              Make sure YAM is running & visible.                       */
  508. /**************************************************************************/
  509. CheckYAM:
  510.  
  511.    if ~show('p','YAM') then do
  512.       errmsg=_text._noyam
  513.       if subrtn='' then do
  514.          shutdown=TRUE
  515.       end
  516.       else do
  517.          shutdown=FALSE
  518.       end
  519.       Call ErrorMsg  
  520.    end
  521.  
  522.    Address YAM 'show'                       /* uniconify YAM's screen     */  
  523.  
  524.     Address YAM 'info SCREEN'                /* get YAM's screen           */
  525.     screen=result
  526.     if screen='' then screen='Workbench'
  527.  
  528. Return
  529.  
  530. /**************************************************************************/
  531. /*                                                                        */
  532. /*              Make sure that we have all the libs we need:              */
  533. /*                               RexxSupport                              */
  534. /*                               QuickSort                                */
  535. /*                                                                        */
  536. /**************************************************************************/
  537. EnsureLibs:
  538.  
  539.    if ~show('L','rexxsupport.library') then do
  540.       addlib('rexxsupport.library',0,-30)
  541.    end
  542.  
  543.    if ~show('P','QuickSortPort') then do
  544.       address Command "run >nil: "qsortprog
  545.       do i = 1 to 10
  546.          if ~show('P','QuickSortPort') then foo=delay(delaytm)
  547.          else leave i
  548.       end
  549.    end
  550.    if show('P','QuickSortPort') then do
  551.       call addlib('QuickSortPort',-30)
  552.    end
  553.    else do
  554.       errmsg=_text._noqsort
  555.       signal ErrorMsg
  556.    end
  557.  
  558. Return
  559.  
  560. /**************************************************************************/
  561. /*              Expand Assign Names for YAM folders                       */
  562. /*                                                                        */
  563. /*  FlashFind reports back on the volume:directory/subdir/file so to make */
  564. /*  sure we can accurately identify and match files, we'll change assigns */
  565. /*  to this format.                                                       */
  566. /*                                                                        */
  567. /**************************************************************************/
  568. ExpandAssigns:
  569.  
  570.    assign.=missing
  571.    assign.0=0
  572.  
  573.    assignfile='T:YTassigns.'||timestamp
  574.  
  575.    text ID MDIR 
  576.    maildir=result
  577.    if maildir='' then do
  578.       errmsg=_text._nomdir
  579.       signal ErrorMsg 
  580.    end
  581.  
  582.    Address Command "assign > "assignfile
  583.    foo=delay(delaytm*3)
  584.    goodopen=open('IN',assignfile,'R')
  585.    if goodopen then do 
  586.       do until eof('IN')
  587.          linein=readln('IN')
  588.          if pos('Directories:',linein)>0 then do
  589.             do until eof('IN') 
  590.                linein=readln('IN')
  591.                if linein='' then signal CloseAssign
  592.                assign.0=1+assign.0
  593.                aptr=assign.0
  594.                assign.aptr=word(linein,1)
  595.                avol=word(linein,2)
  596.                avol=translate(avol,'    ','<>[]')
  597.                avol=strip(avol)
  598.                assign.aptr.1=avol
  599.             end
  600.          end
  601.       end
  602.    end
  603.    else do 
  604.       errmsg=_text._badassign||assignfile  
  605.       Call ErrorMsg
  606.    end
  607.  
  608. CloseAssign:
  609.  
  610.    result=close('IN')
  611.  
  612.    if pos(':',maildir)>0 then do
  613.       testvol=substr(maildir,1,pos(':',maildir)-1)
  614.       restvol=substr(maildir,pos(':',maildir)+1)
  615.       do j=1 to assign.0
  616.          if upper(assign.j)=upper(testvol) then do 
  617.             maildir=assign.j.1
  618.             if right(maildir,1)~=':' then do 
  619.                if restvol~='' then maildir=maildir||'/'||restvol
  620.             end
  621.             leave j
  622.          end
  623.       end
  624.    end
  625.  
  626.    do i=1 to finfo.0
  627.       if pos(':',finfo.i.1.1)>0 then do
  628.          testvol=substr(finfo.i.1.1,1,pos(':',finfo.i.1.1)-1)
  629.          restvol=substr(finfo.i.1.1,pos(':',finfo.i.1.1)+1)
  630.          do j=1 to assign.0
  631.             if upper(assign.j)=upper(testvol) then do 
  632.                testvol=assign.j.1
  633.                if right(testvol,1)~=':' then do 
  634.                   if restvol~='' then testvol=testvol||'/'||restvol
  635.                end
  636.                finfo.i.1.1=testvol
  637.                leave j
  638.             end
  639.          end
  640.       end
  641.       else do
  642.          if right(maildir,1)=':' then finfo.i.1.1=maildir||finfo.i.1.1
  643.          else finfo.i.1.1=maildir||'/'||finfo.i.1.1
  644.       end
  645.    end
  646.  
  647.     if exists(assignfile) then do
  648.         Address Command 'Delete 'assignfile 'QUIET'
  649.    end
  650.  
  651. Return
  652.  
  653. /**************************************************************************/
  654. /*              Change DEV names to VOLUME names                          */
  655. /*                                                                        */
  656. /*  FlashFind reports back on the volume:directory/subdir/file so to make */
  657. /*  sure we can accurately identify and match files, we'll change device  */
  658. /*  names to volume names.                                                */
  659. /*                                                                        */
  660. /**************************************************************************/
  661. GetVolume:
  662.  
  663.    volume.=missing
  664.    volume.0=0
  665.  
  666.    volumefile='T:YTvolumes.'||timestamp
  667.  
  668.    Address Command "info > "volumefile
  669.    foo=delay(delaytm*3)
  670.    goodopen=open('IN',volumefile,'R')
  671.    if goodopen then do 
  672.       do until eof('IN')
  673.          linein=readln('IN')
  674.          if word(linein,1)='Unit' then do
  675.             do until eof('IN') 
  676.                linein=readln('IN')
  677.                if linein='' then signal CloseVolume
  678.                volume.0=1+volume.0
  679.                vptr=volume.0
  680.                volume.vptr=word(linein,1)
  681.                if words(linein)>=8 then do
  682.                   volume.vptr.1=subword(linein,8)
  683.                end
  684.             end
  685.          end
  686.       end
  687.    end
  688.    else do 
  689.       errmsg=_text._badvolfile||volumefile
  690.       Call ErrorMsg
  691.    end
  692.  
  693. CloseVolume:
  694.  
  695.    result=close('IN')
  696.  
  697.    do i=1 to finfo.0
  698.       if pos(':',finfo.i.1.1)>0 then do
  699.          testvol=substr(finfo.i.1.1,1,pos(':',finfo.i.1.1)-1)
  700.          restvol=substr(finfo.i.1.1,pos(':',finfo.i.1.1)+1)
  701.          do j=1 to volume.0
  702.             if upper(volume.j)=upper(testvol) then do 
  703.                testvol=volume.j.1
  704.                if right(testvol,1)~=':' then do 
  705.                   if restvol~='' then testvol=testvol||'/'||restvol
  706.                end
  707.                finfo.i.1.1=testvol
  708.                leave j
  709.             end
  710.          end
  711.       end
  712.       else do
  713.          if right(maildir,1)=':' then finfo.i.1.1=maildir||finfo.i.1.1
  714.          else finfo.i.1.1=maildir||'/'||finfo.i.1.1
  715.       end
  716.    end
  717.  
  718.     if exists(volumefile) then do
  719.         Address Command 'Delete 'volumefile 'QUIET'
  720.    end
  721.  
  722. Return
  723.  
  724. /******************************************************************************/
  725. /*                                                                            */
  726. /* Make sure that all of the folders actually exist as directories.           */
  727. /* They might NOT if the user sets the wrong MAILDIR: in the configuration.   */
  728. /*                                                                            */
  729. /******************************************************************************/
  730. CheckArchs:
  731.  
  732.    do i=1 to finfo.0
  733.       if ~exists(finfo.i.1.1) then do
  734.          errmsg=_text._badfolder
  735.          shutdown=FALSE
  736.          window ID YTINF CLOSE
  737.          Call ErrorMsg
  738.       end
  739.    end
  740.  
  741.  
  742. Return
  743.  
  744. /******************************************************************************/
  745. /*                                                                            */
  746. /* Ask YAM for each folder name, its number, and its path.                    */
  747. /* Remember to set folder back to original before leaving.                    */
  748. /*                                                                            */
  749. /******************************************************************************/
  750. GetArchList:
  751.  
  752.    infotext=_text._getfolders
  753.    infobuttons=''
  754.    showbusy=TRUE
  755.    Call InfoWindow
  756.  
  757.    check ID CFGY
  758.    loadslow=result
  759.  
  760.    if loadslow then do
  761.       Address YAM 'getfolderinfo number'
  762.       origfolder=result
  763.       idx=0
  764.       emptycnt=0                             /* allow for 5 deleted in a row */
  765.       Do i=0 to maxarchs
  766.          Address YAM 'setfolder ' i
  767.          sfrc=rc
  768.          if sfrc=0 then do
  769.             idx=idx+1
  770.             Address YAM 'getfolderinfo number'
  771.             finfo.idx=result
  772.             Address YAM 'getfolderinfo name'
  773.             finfo.idx.1=result
  774.             /* say 'i='i 'idx='idx 'folder number='finfo.idx 'name='finfo.idx.1 */
  775.             Address YAM 'getfolderinfo path'
  776.             finfo.idx.1.1=result
  777.             Address YAM 'getfolderinfo max'
  778.             finfo.idx.1.1.1=result
  779.             emptycnt=0
  780.          end
  781.          else do
  782.           /*  say 'i='i 'idx='idx 'sfrc='sfrc 'emptycnt='emptycnt */
  783.             emptycnt=emptycnt+1
  784.             if emptycnt>=emptymax then leave i
  785.          end
  786.       end
  787.       finfo.0=idx
  788.       Address YAM 'setfolder ' origfolder
  789.    end
  790.    else do
  791.       idx=0
  792.       cfgfile='YAM:.config'
  793.       if open('IN',cfgfile,'R') then do
  794.          do until eof('IN')
  795.             linein=readln('IN')
  796.             parse var linein yamopt '=' yamval
  797.             if pos('FOLDER',upper(yamopt))=1 then do
  798.                idx=idx+1
  799.                finfo.idx=substr(yamopt,7)+0  /* folder number forced to numeric */
  800.                parse var yamval ftype ';' fsort ';' fpath ';' fname 
  801.                finfo.idx.1=fname
  802.                finfo.idx.1.1=fpath
  803.                finfo.idx.1.1.1='?'
  804.             end
  805.          end
  806.          finfo.0=idx
  807.          foo=close('IN')
  808.       end
  809.    end
  810.  
  811. Return
  812.  
  813. /******************************************************************************/
  814. /*                      Read Config File                                      */
  815. /* If the config file is not found then use internal defaults, force user to  */
  816. /* config page, and pop up message to edit and save. If the default config    */
  817. /* file is found then use it and scan archive list. Save the name as a var    */
  818. /* whenever a new file is loaded for reference by future SAVE,RELOAD cmds.    */
  819. /*                                                                            */
  820. /******************************************************************************/
  821. LoadConfig:
  822.  
  823.    if debug then say 'entered LoadConfig parm='parm
  824.  
  825.    if parm='' then configfile='YamTools.config'
  826.               else configfile=parm 
  827.  
  828.    setvar YAMTOOLSCONFIG configfile
  829.  
  830.    config.=missing
  831.    config.0=0
  832.    goodconfig=TRUE
  833.    maildir=missing
  834.    scanprog=missing
  835.    qsortprog=missing
  836.    viewer=missing
  837.    vieweropts=''
  838.    editor=''
  839.    brows=missing
  840.    bcols=missing
  841.    scrollval=''
  842.    delayload=TRUE
  843.    yamload=TRUE
  844.    showpages=TRUE
  845.    splitscreen=FALSE
  846.  
  847.    goodopen=open('IN',configfile,'R')
  848.    if goodopen then do 
  849.       linein=readln('IN')
  850.       if linein~=configheader then do
  851.          infomsg=_text._notconfig
  852.          Call InfoMsg
  853.          result=close('IN')
  854.          goodconfig=FALSE
  855.          getvar OLDYTCONFIG 
  856.          configfile=result
  857.          setvar YAMTOOLSCONFIG configfile
  858.          signal LoadConfigEnd
  859.       end
  860.       do until eof('IN')
  861.          linein=readln('IN')
  862.          linein=strip(linein)
  863.          select 
  864.             when substr(linein,1,2)='/*' then iterate
  865.             when linein='' then iterate
  866.             when upper(word(linein,1))='BROWS' then do 
  867.                Brows=word(linein,2)
  868.                if Brows>1 then scrollval='SCROLL'
  869.             end
  870.             when upper(word(linein,1))='BCOLS' then Bcols=word(linein,2)
  871.             when upper(word(linein,1))='MAILDIR' then maildir=word(linein,2)
  872.             when upper(word(linein,1))='SCANPROG' then scanprog=word(linein,2)
  873.             when upper(word(linein,1))='QSORTPROG' then qsortprog=word(linein,2)
  874.             when upper(word(linein,1))='VIEWER' then viewer=subword(linein,2)
  875.             when upper(word(linein,1))='EDITOR' then editor=subword(linein,2)
  876.             when upper(word(linein,1))='DELAYLOAD' then delayload=word(linein,2)
  877.             when upper(word(linein,1))='YAMLOAD' then yamload=word(linein,2)
  878.             when upper(word(linein,1))='SHOWPAGES' then showpages=word(linein,2)
  879.             when upper(word(linein,1))='SPLITSCREEN' then splitscreen=word(linein,2)
  880.             otherwise do
  881.                config.0=1+config.0
  882.                cptr=config.0
  883.                parse var linein config.cptr ',' config.cptr.1 ',' config.cptr.1.1 
  884.             end
  885.          end
  886.       end
  887.       result=close('IN')
  888.    end
  889.    else do 
  890.       Brows=3
  891.       Bcols=6
  892.       scrollval='SCROLL'
  893.       maildir='YAM:'
  894.       scanprog='C:FlashFind'
  895.       qsortprog='SYS:Rexxc/QuickSort'
  896.       viewer='sys:Utilities/multiview %f PUBSCREEN=%s'
  897.       Call BuildWindow
  898.       text   ID MDIR LABEL   maildir
  899.       popasl ID CFGM CONTENT maildir
  900.       popasl ID CFGF CONTENT scanprog
  901.       popasl ID CFGQ CONTENT qsortprog
  902.       popasl ID CFGV CONTENT viewer
  903.       check ID CFGD ATTRS MUIA_Selected delayload
  904.       check ID CFGY ATTRS MUIA_Selected yamload
  905.       check ID CFGB ATTRS MUIA_Selected showpages
  906.       check ID CFGS ATTRS MUIA_Selected splitscreen
  907.       do i=0 to (Brows*Bcols)-1
  908.          list ID CLST INSERT POS MUIV_List_Insert_Bottom STRING emptyconfig
  909.       end 
  910.       list ID CLST POS MUIV_List_Insert_Top STRING emptyconfig
  911.       goodconfig=FALSE
  912.       signal LoadConfigEnd
  913.    end
  914.  
  915.    if Brows=missing then Brows=3
  916.    if Bcols=missing then Bcols=6
  917.  
  918.    Call BuildWindow
  919.  
  920.    if maildir=missing then do
  921.       maildir='YAM:'
  922.       text   ID MDIR LABEL   maildir
  923.       popasl ID CFGM CONTENT maildir     
  924.       goodconfig=FALSE
  925.    end   
  926.    else do
  927.       text   ID MDIR LABEL   maildir
  928.       popasl ID CFGM CONTENT maildir     
  929.    end
  930.  
  931.    if scanprog=missing then do
  932.       scanprog='C:FlashFind'
  933.       popasl ID CFGF CONTENT scanprog
  934.       goodconfig=FALSE
  935.    end
  936.    else do
  937.       popasl ID CFGF CONTENT scanprog
  938.    end
  939.  
  940.    if qsortprog=missing then do
  941.       qsortprog='SYS:Rexxc/QuickSort'
  942.       popasl ID CFGQ CONTENT qsortprog
  943.       goodconfig=FALSE
  944.    end
  945.    else do
  946.       popasl ID CFGQ CONTENT qsortprog
  947.    end
  948.  
  949.    if viewer=missing then do
  950.       viewer='sys:Utilities/multiview %f PUBSCREEN=%s'
  951.       popasl ID CFGV CONTENT viewer
  952.       goodconfig=FALSE
  953.    end
  954.    else do
  955.       popasl ID CFGV CONTENT viewer
  956.    end
  957.  
  958.    popasl ID CFGE CONTENT editor
  959.  
  960.    check ID CFGD ATTRS MUIA_Selected delayload
  961.    check ID CFGY ATTRS MUIA_Selected yamload
  962.    check ID CFGB ATTRS MUIA_Selected showpages
  963.    check ID CFGS ATTRS MUIA_Selected splitscreen
  964.  
  965.    do i=1 to config.0
  966.       if i> Brows*Bcols then do
  967.          infomsg=_text._extrabuttons
  968.          Call InfoMsg 
  969.          goodconfig=FALSE
  970.          signal LoadConfigEnd
  971.       end
  972.       j=i-1
  973.       liststr=config.i||comma||config.i.1||comma||config.i.1.1
  974.       list ID CLST POS j STRING liststr         
  975.       bname=config.i
  976.       if bname='empty' then bname='' 
  977.       bnum='B'||right(i,3,'0')
  978.       button ID bnum LABEL bname
  979.    end 
  980.  
  981.    k=i                                      /* copy counter               */
  982.    do i=k to Brows*Bcols                    /* fill any empty slots       */
  983.       j=i-1
  984.       list ID CLST INSERT POS j STRING emptyconfig
  985.    end
  986.  
  987.    list ID CLST POS MUIV_List_Insert_Top
  988.    liststr=result
  989.    list ID CLST POS MUIV_List_Insert_Top STRING liststr
  990.  
  991. LoadConfigEnd:
  992.  
  993. Return
  994.  
  995. /******************************************************************************/
  996. /*                      Edit Config Options                                   */
  997. /*                                                                            */
  998. /* Handle changing of ARexx command buttons, mail directory, flashfind, and   */
  999. /* qsort locations. Process SAVE,USE,RELOAD,CLEAR and a single level of UNDO. */
  1000. /*                                                                            */
  1001. /******************************************************************************/
  1002. ConfigEdit:
  1003.  
  1004.    if debug then say 'entered ConfigEdit'
  1005.    if debug then say 'parm='parm
  1006.  
  1007.    list ID CLST MUIA_List_Active
  1008.    cpos=result
  1009.    if debug then say 'cpos='cpos
  1010.  
  1011.    string ID CFG1
  1012.    cfgS1=result
  1013.    
  1014.    cycle ID CFG2
  1015.    cfgS2=result
  1016.  
  1017.    popasl ID CFG3
  1018.    cfgS3=result
  1019.  
  1020.    select
  1021.       when parm='UPDATE' then do
  1022.         liststr=cfgS1||comma||cfgS2||comma||cfgS3
  1023.         list ID CLST POS cpos STRING liststr
  1024.       end 
  1025.       when parm='EDIT' then do
  1026.          parse var rest oldcfgS1 ',' oldcfgS2 ',' oldcfgS3
  1027.          oldcfgS1=strip(oldcfgS1)
  1028.          oldcfgS2=strip(oldcfgS2)
  1029.          oldcfgS3=strip(oldcfgS3)
  1030.          liststr='"'||oldcfgS1||comma||oldcfgS2||comma||oldcfgs3||'"'
  1031.          setvar ytoldcfg liststr
  1032.          if substr(oldcfgS1,1,5)='empty' then oldcfgs1=''
  1033.          string ID CFG1 CONTENT oldcfgS1 
  1034.          if oldcfgS2='none' then oldcfgs2=''
  1035.          cycle ID CFG2 LABELS oldcfgS2 
  1036.          if pos('--available--',oldcfgS3)>0 then oldcfgS3=progdir
  1037.          popasl ID CFG3 CONTENT oldcfgS3
  1038.       end
  1039.       when parm='CLEAR' then do
  1040.         list ID CLST POS cpos STRING emptyconfig
  1041.       end 
  1042.       when parm='USE' then do
  1043.            Call ValidateConfig
  1044.            Call UpdateButtons
  1045.            Call EnsureLibs
  1046.       end 
  1047.       when parm='SAVE' then do
  1048.            Call ValidateConfig
  1049.            Call UpdateButtons
  1050.            Call SaveConfig
  1051.            Call EnsureLibs
  1052.       end 
  1053.       when parm='SAVEAS' then do
  1054.            Call AskConfig
  1055.            Call ValidateConfig
  1056.            Call UpdateButtons
  1057.            Call SaveConfig
  1058.            Call EnsureLibs
  1059.       end 
  1060.       when parm='RELOAD' then do
  1061.            getvar YAMTOOLSCONFIG 
  1062.            parm=result   
  1063.            Call LoadConfig
  1064.            Call ShowConfig
  1065.            Call ValidateConfig
  1066.            Call EnsureLibs
  1067.       end 
  1068.       when parm='READ' then do
  1069.            Call AskConfig
  1070.            getvar YAMTOOLSCONFIG 
  1071.            parm=result   
  1072.            Call LoadConfig
  1073.            Call ShowConfig
  1074.            Call ValidateConfig
  1075.            Call EnsureLibs
  1076.       end 
  1077.       when parm='UNDO' then do
  1078.          getvar ytoldcfg
  1079.          oldcfg=result
  1080.          parse var oldcfg oldcfgS1 ',' oldcfgS2 ',' oldcfgS3
  1081.          liststr=oldcfgS1||comma||oldcfgS2||comma||oldcfgS3
  1082.          list ID CLST POS cpos STRING liststr
  1083.       end 
  1084.       when parm='AEDIT' then do
  1085.          popasl ID CFGE
  1086.          editor=result
  1087.          if editor=''then do
  1088.             errmsg=_text._noeditor        
  1089.             Call ErrorMsg 
  1090.          end
  1091.          list ID CLST POS cpos
  1092.          liststr=result
  1093.          parse var liststr oldcfgS1 ',' oldcfgS2 ',' mpath
  1094.          if ~exists(mpath) then do
  1095.             errmsg=mpath||_text._badarexx
  1096.             Call ErrorMsg 
  1097.          end
  1098.             fpos=pos('%F',editor)
  1099.          if fpos>0 then do
  1100.                 editor=delstr(editor,fpos,2)
  1101.             editor=insert(mpath,editor,fpos-1)
  1102.          end
  1103.             spos=pos('%S',editor)
  1104.          if spos>0 then do
  1105.                 editor=delstr(editor,spos,2)
  1106.             editor=insert(screen,editor,spos-1)
  1107.          end
  1108.           Address Command editor
  1109.       end
  1110.       otherwise do
  1111.          if debug then say 'otherwise in CONFIGEDIT'
  1112.       end
  1113.    end  
  1114.  
  1115. Return
  1116.  
  1117. /**************************************************************************/
  1118. /*                     Force CONFIG screen to be shown                    */
  1119. /**************************************************************************/
  1120. ShowConfig:
  1121.  
  1122.    check ID CFGS
  1123.    splitscreen=result
  1124.  
  1125.    if ~splitscreen then do
  1126.       group ID YTPGS LABELS ATTRS MUIA_ShowMe TRUE
  1127.    end
  1128.    else do
  1129.       method ID YTWIN MUIM_Window_ToFront
  1130.    end
  1131.  
  1132. Return
  1133.  
  1134. /******************************************************************************/
  1135. /*                                                                            */
  1136. /* Ask user for name of configuration file to either READ or SAVEAS           */
  1137. /*                                                                            */
  1138. /******************************************************************************/
  1139. AskConfig:   
  1140.  
  1141.    getvar YAMTOOLSCONFIG 
  1142.    configfile=result   
  1143.    setvar OLDYTCONFIG configfile
  1144.  
  1145.    select
  1146.       when lastpos('/',configfile)>0 then do
  1147.          figfile=substr(configfile,lastpos('/',configfile)+1)
  1148.          figdir=substr(configfile,1,lastpos('/',configfile)-1)
  1149.       end
  1150.       when lastpos(':',configfile)>0 then do
  1151.          figfile=substr(configfile,lastpos(':',configfile)+1)
  1152.          figdir=substr(configfile,1,lastpos(':',configfile)-1)
  1153.       end
  1154.       otherwise do
  1155.          figfile='YamTools.config'
  1156.          figdir=progdir
  1157.       end
  1158.    end
  1159.  
  1160.    aslrequest ID YTWIN TITLE '"Select File"',
  1161.               ATTRS ASLFR_InitialDrawer figdir ASLFR_InitialFile figfile 
  1162.    if rc = 0 then do
  1163.       configfile=result
  1164.       setvar YAMTOOLSCONFIG configfile
  1165.       if debug then say 'Configfile from ASLFR='configfile
  1166.    end
  1167.  
  1168.  
  1169. Return
  1170.  
  1171. /******************************************************************************/
  1172. /*                                                                            */
  1173. /* SAVE configuration file to file pointed at by the MuiRexx YAMTOOLSCONFIG   */
  1174. /* variable. Very simple format for config file.                              */
  1175. /*                                                                            */
  1176. /******************************************************************************/
  1177. SaveConfig:   
  1178.  
  1179.    list ID CLST MUIA_List_Active
  1180.    cpos=result
  1181.  
  1182.    getvar YAMTOOLSCONFIG 
  1183.    configfile=result   
  1184.  
  1185.    goodopen=open('OUT',configfile,'W')
  1186.    if goodopen then do 
  1187.       foo=writeln('OUT',configheader)
  1188.       popasl ID CFGM
  1189.       maildir=result
  1190.       text   ID MDIR LABEL   maildir
  1191.       liststr='MAILDIR'||' '||maildir
  1192.       foo=writeln('OUT',liststr)       
  1193.       popasl ID CFGF 
  1194.       scanprog=result
  1195.       liststr='SCANPROG'||' '||scanprog
  1196.       foo=writeln('OUT',liststr)       
  1197.       popasl ID CFGQ
  1198.       qsortprog=result
  1199.       liststr='QSORTPROG'||' '||qsortprog
  1200.       foo=writeln('OUT',liststr)       
  1201.  
  1202.       popasl ID CFGV
  1203.       viewer=result
  1204.       liststr='VIEWER'||' '||viewer
  1205.       foo=writeln('OUT',liststr)       
  1206.  
  1207.       popasl ID CFGE
  1208.       editor=result
  1209.       liststr='EDITOR'||' '||editor
  1210.       foo=writeln('OUT',liststr)       
  1211.  
  1212.       check ID CFGD
  1213.       delayload=result
  1214.       liststr='DELAYLOAD'||' '||delayload
  1215.       foo=writeln('OUT',liststr)       
  1216.       check ID CFGY
  1217.       yamload=result
  1218.       liststr='YAMLOAD'||' '||yamload
  1219.       foo=writeln('OUT',liststr)       
  1220.  
  1221.       check ID CFGB
  1222.       showpages=result
  1223.       liststr='SHOWPAGES'||' '||showpages
  1224.       foo=writeln('OUT',liststr)       
  1225.       check ID CFGS
  1226.       splitscreen=result
  1227.       liststr='SPLITSCREEN'||' '||splitscreen
  1228.       foo=writeln('OUT',liststr)       
  1229.       
  1230.       popslider ID CFGR
  1231.       xrows=result
  1232.       liststr='BROWS'||' '||xrows
  1233.       foo=writeln('OUT',liststr)       
  1234.       popslider ID CFGC
  1235.       xcols=result
  1236.       liststr='BCOLS'||' '||xcols
  1237.       foo=writeln('OUT',liststr)       
  1238.       do i=0 to (Brows*Bcols)-1
  1239.          j=i+1
  1240.          list ID CLST POS i
  1241.          oldcfg=result
  1242.          parse var oldcfg oldcfgS1 ',' oldcfgS2 ',' oldcfgS3
  1243.          liststr=oldcfgS1||comma||oldcfgS2||comma||oldcfgS3
  1244.          foo=writeln('OUT',liststr)
  1245.       end
  1246.       result=close('OUT')
  1247.    end
  1248.    else do
  1249.       errmsg=_text._opencfgerr
  1250.       Call ErrorMsg 
  1251.    end
  1252.  
  1253.    list ID CLST POS cpos
  1254.  
  1255. Return
  1256.  
  1257. /******************************************************************************/
  1258. /*                                                                            */
  1259. /* Validate ALL of the Configuration information.                             */
  1260. /*                                                                            */
  1261. /******************************************************************************/
  1262. ValidateConfig:
  1263.  
  1264.    popasl ID CFGM
  1265.    maildir=result
  1266.     if right(maildir,1)='/' then do
  1267.         maildir=substr(maildir,1,length(maildir)-1)
  1268.     end
  1269.  
  1270.    if ~exists(maildir) then do
  1271.       group ID YTPGS LABELS ATTRS MUIA_ShowMe TRUE
  1272.       group ID YTPGS LABELS Cpage
  1273.       group ID YTCON LABELS Spage
  1274.       goodconfig=FALSE
  1275.       errmsg=maildir||_text._badmdir
  1276.       Call Errormsg
  1277.    end
  1278.    text   ID MDIR LABEL   maildir
  1279.     popasl ID CFGM CONTENT maildir 
  1280.  
  1281.    popasl ID CFGF 
  1282.    scanprog=result
  1283.    if ~exists(scanprog) then do
  1284.       group ID YTPGS LABELS ATTRS MUIA_ShowMe TRUE
  1285.       group ID YTPGS LABELS Cpage
  1286.       group ID YTCON LABELS Spage
  1287.       goodconfig=FALSE
  1288.       errmsg=scanprog||_text._badscan
  1289.       Call Errormsg
  1290.    end
  1291.    
  1292.    popasl ID CFGQ
  1293.    qsortprog=result
  1294.    if ~exists(qsortprog) then do
  1295.       group ID YTPGS LABELS ATTRS MUIA_ShowMe TRUE
  1296.       group ID YTPGS LABELS Cpage
  1297.       group ID YTCON LABELS Spage
  1298.       goodconfig=FALSE
  1299.       errmsg=qsortprog||_text._badqsort
  1300.       Call Errormsg
  1301.    end
  1302.  
  1303.    popasl ID CFGV
  1304.    viewer=upper(result)
  1305.    if viewer~='YAM' & viewer~='YAMTOOLS' then do
  1306.       vieweropts=subword(viewer,2)
  1307.       viewer=word(viewer,1)
  1308.       if ~exists(viewer) then do
  1309.          group ID YTPGS LABELS ATTRS MUIA_ShowMe TRUE
  1310.          group ID YTPGS LABELS Cpage
  1311.          group ID YTCON LABELS Spage
  1312.          goodconfig=FALSE
  1313.          errmsg=viewer||_text._badviewer
  1314.          Call Errormsg
  1315.       end
  1316.    end
  1317.  
  1318.    popasl ID CFGE
  1319.    editor=upper(result)
  1320.    if editor~='' then do
  1321.       editoropts=subword(editor,2)
  1322.       editor=word(editor,1)
  1323.       if ~exists(editor) then do
  1324.          group ID YTPGS LABELS ATTRS MUIA_ShowMe TRUE
  1325.          group ID YTPGS LABELS Cpage
  1326.          group ID YTCON LABELS Spage
  1327.          goodconfig=FALSE
  1328.          errmsg=editor||_text._badeditor
  1329.          Call Errormsg
  1330.       end
  1331.    end
  1332.  
  1333.    do i=0 to (Brows*Bcols)-1
  1334.       list ID CLST POS i
  1335.       oldcfg=result
  1336.       parse var oldcfg blabel ',' ptype ',' rexxprog
  1337.       if blabel='empty' then iterate
  1338.       if ~exists(rexxprog) then do
  1339.          group ID YTPGS LABELS ATTRS MUIA_ShowMe TRUE
  1340.          group ID YTPGS LABELS Cpage
  1341.          group ID YTCON LABELS Apage
  1342.          goodconfig=FALSE
  1343.          badpage=Apage
  1344.          errmsg=mpath||_text._badarexx
  1345.          Call Errormsg
  1346.       end
  1347.       if blabel='' then do
  1348.          group ID YTPGS LABELS ATTRS MUIA_ShowMe TRUE
  1349.          group ID YTPGS LABELS Cpage
  1350.          group ID YTCON LABELS Apage
  1351.          goodconfig=FALSE
  1352.          badpage=Apage
  1353.          errmsg=_text._nolabel||rexxprog
  1354.          Call Errormsg
  1355.       end
  1356.    end
  1357.  
  1358. Return
  1359.  
  1360. /******************************************************************************/
  1361. /*                                                                            */
  1362. /* Update the labels on the ARexx command buttons to match the current config.*/
  1363. /*                                                                            */
  1364. /******************************************************************************/
  1365. UpdateButtons:
  1366.  
  1367.    list ID CLST MUIA_List_Active
  1368.    cpos=result
  1369.    nl='\n'
  1370.  
  1371.    do i=0 to (Brows*Bcols)-1
  1372.       j=i+1
  1373.       list ID CLST POS i
  1374.       liststr=result
  1375.       parse var liststr blabel ',' btype ',' bprog
  1376.       if blabel='empty' then blabel=''
  1377.       bid='B'||right(j,3,'0')
  1378.       if blabel='' then helpstr=help.B00
  1379.                    else helpstr=_text._execute||bprog||nl||_text._astype||btype
  1380.       button ID bid ATTRS MUIA_ShortHelp '"'helpstr'"' LABEL blabel 
  1381.    end
  1382.  
  1383.    list ID CLST POS cpos
  1384.  
  1385. Return
  1386.  
  1387. /******************************************************************************/
  1388. /*                                                                            */
  1389. /* Load the Folder List on page 1 of the YAMTOOLS window.                     */
  1390. /*                                                                            */
  1391. /******************************************************************************/
  1392. LoadArchList:
  1393.  
  1394.    list ID ALST ATTRS MUIA_List_Quiet TRUE
  1395.     method ID ALST MUIM_List_Clear
  1396.  
  1397.    do i=1 to finfo.0
  1398.       liststr=finfo.i.1||comma||finfo.i.1.1.1||comma||finfo.i.1.1||comma||finfo.i
  1399.       list ID ALST INSERT POS MUIV_List_Insert_Bottom STRING liststr
  1400.    end
  1401.  
  1402.    list ID ALST ATTRS MUIA_List_Quiet FALSE
  1403.  
  1404. Return
  1405.  
  1406. /******************************************************************************/
  1407. /*  Create mail list of all mail in folder.                                   */
  1408. /******************************************************************************/
  1409. ListMail:
  1410.  
  1411.    if debug then say 'Entered ListMail:'
  1412.    aline=parm||rest
  1413.    if debug then say aline
  1414.    parse var aline arch ',' size ',' afile ',' anum ',' rest
  1415.    if debug then say '  arch='arch 
  1416.    if debug then say '  size='size
  1417.    if debug then say '  anum='anum 
  1418.    if debug then say '  afile='afile
  1419.    Address YAM "setfolder" anum
  1420.    Address YAM "getfolderinfo max"
  1421.    size=result
  1422.  
  1423.    list ID MLST ATTRS MUIA_List_Entries
  1424.    mcnt=result
  1425.    if debug then say 'mcnt='mcnt
  1426.  
  1427.    if debug then say 'Clearing Mail List '
  1428.    
  1429.    infotext=_text._loadmail
  1430.    infobuttons='"'||_text._squit1||comma||_text._squit2||comma||_text._squit3||'"'
  1431.    showbusy=TRUE
  1432.  
  1433.    Call InfoWindow
  1434.  
  1435.     method ID MLST MUIM_List_Clear
  1436.  
  1437.    do i=0 to size-1
  1438.       mnum=i
  1439.       Address YAM "setmail" mnum
  1440.       Address YAM "getmailinfo file"
  1441.       mpath=result
  1442.       file=substr(mpath,lastpos('/',mpath)+1)   /* just the filename part*/
  1443.       Address YAM "getmailinfo from"
  1444.       from=result
  1445.       if pos('<',from)>1 then from=substr(from,1,pos('<',from)-1)
  1446.       from=translate(from,' ',',')
  1447.       Address YAM "getmailinfo subject"
  1448.       subj=result
  1449.       subj=translate(subj,' ',',') 
  1450.       Address YAM "getmailinfo to"
  1451.       mfor=result
  1452.       mfor=translate(mfor,' ',',')
  1453.       liststr=arch||comma||from||comma||subj||comma||mfor||comma||mnum||comma||anum||comma||file
  1454.       if debug then say liststr
  1455.       list ID MLST INSERT POS MUIV_List_Insert_Bottom STRING liststr
  1456.       radio ID SQUIT 
  1457.       squitopt=result
  1458.       select
  1459.          when squitopt=_text._squit2 then leave i
  1460.          when squitopt=_text._squit3 then do
  1461.             signal ListMailEnd
  1462.          end
  1463.          otherwise nop
  1464.       end
  1465.    end
  1466.  
  1467.    group ID YTPGS LABELS MLpage
  1468.  
  1469. ListMailEnd:
  1470.  
  1471.    window ID YTINF CLOSE   
  1472.  
  1473. Return
  1474. /******************************************************************************/
  1475. /*  Read mail the user selected.                                              */
  1476. /******************************************************************************/
  1477. ReadMail:
  1478.    
  1479.    if debug then say 'Entered ReadMail:'
  1480.    mline=parm||rest
  1481.    if debug then say mline
  1482.    parse var mline arch ',' from ',' subject ',' mfor ','mnum ',' anum ',' file
  1483.    Address YAM "setfolder" anum
  1484.    Address YAM "setmail" mnum
  1485.    Address YAM "getmailinfo file"
  1486.    mpath=result
  1487.    if debug then say 'mpath='mpath
  1488.    if debug then say 'file='file
  1489.    if pos(file,mpath)=0 then do
  1490.       infotext=_text._RMchanged
  1491.       showbusy=TRUE
  1492.       infobuttons=""
  1493.       Call InfoWindow
  1494.       Address YAM "getfolderinfo max"
  1495.       mcnt=result
  1496.       do i=0 to mcnt-1
  1497.          Address YAM "setmail" i
  1498.          Address YAM "getmailinfo file"
  1499.          mpath=result
  1500.          if pos(file,mpath)~=0 then do
  1501.             window ID YTINF CLOSE
  1502.             leave i
  1503.          end
  1504.          else mpath=missing
  1505.       end
  1506.    end
  1507.  
  1508.    popasl ID CFGV
  1509.    viewer=result
  1510.     if words(viewer)>1 then do
  1511.         vieweropts=upper(subword(viewer,2))
  1512.       viewer=upper(word(viewer,1))
  1513.    end
  1514.  
  1515.    if mpath~=missing then do
  1516.         select
  1517.           when viewer='YAM' then do
  1518.       /*   Address YAM "mailreply"     */
  1519.          end
  1520.          when viewer='YAMTOOLS' then do
  1521.              call YTReadMail
  1522.          end
  1523.          otherwise do
  1524.                 fpos=pos('%F',vieweropts)
  1525.             if fpos>0 then do
  1526.                     vieweropts=delstr(vieweropts,fpos,2)
  1527.                vieweropts=insert(mpath,vieweropts,fpos-1)
  1528.             end
  1529.                 spos=pos('%S',vieweropts)
  1530.             if spos>0 then do
  1531.                     vieweropts=delstr(vieweropts,spos,2)
  1532.                vieweropts=insert(screen,vieweropts,spos-1)
  1533.             end
  1534.              Address Command viewer vieweropts
  1535.          end
  1536.       end
  1537.    end
  1538.    else do
  1539.       window ID YTINF CLOSE
  1540.       errmsg="This mail has been moved or deleted"
  1541.       Call ErrorMsg
  1542.    end
  1543.  
  1544. Return
  1545.  
  1546. /**************************************************************************/
  1547. /*                        Read the mail file into array                   */
  1548. /**************************************************************************/
  1549. YTReadMail:     
  1550.  
  1551.     header.=' '
  1552.  
  1553.    i=0
  1554.    header=TRUE
  1555.    if open('IN',mpath,'R') then do
  1556.       Call BuildReadWindow
  1557.       list ID YTRMT ATTRS MUIA_List_Quiet TRUE 
  1558.       list ID YTRMM ATTRS MUIA_List_Quiet TRUE 
  1559.  
  1560.       method ID YTRMH MUIM_List_Clear
  1561.       method ID YTRMT MUIM_List_Clear
  1562.       method ID YTRMM MUIM_List_Clear
  1563.  
  1564.       do until eof('IN')
  1565.          linein=readln('IN')
  1566.          if header then do
  1567.             list ID YTRMH INSERT POS MUIV_List_Insert_Bottom STRING '='linein
  1568.             if linein='' then do 
  1569.                     header=FALSE
  1570.                     do j=1 to 4
  1571.                    list ID YTRMT INSERT POS MUIV_List_Insert_Bottom,
  1572.                               STRING '='header.j
  1573.                     end
  1574.                 end
  1575.                 select
  1576.                 when word(linein,1)='From:' then header.1=linein
  1577.                 when word(linein,1)='To:'   then header.2=linein
  1578.                 when word(linein,1)='Date:' then header.3=linein
  1579.                 when word(linein,1)='Subject:' then header.4=linein
  1580.                     otherwise nop
  1581.                 end
  1582.          end
  1583.          else do
  1584.             if ~eof('IN') then do
  1585.                linein='='||linein
  1586.                list ID YTRMM INSERT POS MUIV_List_Insert_Bottom, 
  1587.                     STRING linein
  1588.                i=i+1
  1589.             end
  1590.          end
  1591.       end
  1592.       foo=close('IN')
  1593.       list ID YTRMT ATTRS MUIA_List_Quiet FALSE
  1594.       list ID YTRMM ATTRS MUIA_List_Quiet FALSE
  1595.    end
  1596.    else do
  1597.       errmsg=_text._nomailfile
  1598.       Call ErrorMsg
  1599.       exit     
  1600.    end
  1601.    
  1602. Return
  1603.  
  1604. /******************************************************************************/
  1605. /*  Display the mail in a list window.                                        */
  1606. /******************************************************************************/
  1607. BuildReadWindow:
  1608.  
  1609.    window ID YTRMW TITLE '"YAM Tools Read Mail"',
  1610.           COMMAND '"window ID YTRMW close"' PORT YAMTOOLS,
  1611.           ATTRS MUIA_Window_PublicScreen screen
  1612.  
  1613.         group
  1614.          group 
  1615.             list ID YTRMH INSERT ATTRS MUIA_ShowMe FALSE
  1616.             list ID YTRMT INSERT ATTRS MUIA_VertWeight 20
  1617.             list ID YTRMM INSERT 
  1618.          endgroup
  1619.          group HORIZ
  1620.             button ID YTRMQ COMMAND '"window ID YTRMW close"' PORT YAMTOOLS,
  1621.                          LABEL _text._quit
  1622.          endgroup
  1623.         endgroup
  1624.  
  1625.    endwindow
  1626.  
  1627. Return
  1628.  
  1629. /******************************************************************************/
  1630. /*                                                                            */
  1631. /* Determine loop control and then invoke the specified command for each of   */
  1632. /* folders, directories, mail, or filenames as appropriate.                   */
  1633. /* 2/26/97 Added execute ONCE option. Passes NO information just Calls.       */
  1634. /*                                                                            */
  1635. /******************************************************************************/
  1636. DoRexxButton:
  1637.  
  1638.    butid='B'||parm 
  1639.    list ID CLST POS parm-1
  1640.    cmdline=result
  1641.    if debug then say 'Entered DoRexxButton'
  1642.    if debug then say 'cmdline='cmdline
  1643.  
  1644.    parse var cmdline blabel ',' btype ',' bcommand
  1645.         
  1646.    group ID YTPGS REGISTER
  1647.    pagename=result
  1648.  
  1649.    select 
  1650.       when pagename=Cpage then do
  1651.          errmsg=_text._wrongpage
  1652.          Call ErrorMsg
  1653.       end
  1654.         when upper(btype)='ONCE' then do
  1655.          intcommand="Call '"bcommand"'"
  1656.          if debug then say 'intcommand='intcommand
  1657.          interpret intcommand
  1658.       end
  1659.       when pagename=MLpage then do
  1660.          if upper(btype)='FOLDER' then do
  1661.             errmsg=_text._notfolderpg
  1662.             signal ErrorMsg
  1663.          end                
  1664.          else do
  1665.             list ID MLST ATTRS MUIA_List_Entries
  1666.             mcnt=result
  1667.             if debug then say 'mcnt='mcnt
  1668.             infotext=nl2||nc||_text._processing1||nl2
  1669.             showbusy=TRUE
  1670.             infobuttons='"'||_text._squit1||comma||_text._squit3||'"'
  1671.             Call InfoWindow
  1672.             do msel=0 to mcnt
  1673.                list ID MLST
  1674.                mline=result
  1675.                if mline='' then leave msel
  1676.                parse var mline arch ',' from ',' subj ',' mfor ',' mnum ',' anum ',' file
  1677.                if debug then say 'mline='mline
  1678.                Address YAM "setfolder" anum
  1679.                Address YAM "setmail" mnum
  1680.                Address YAM "getmailinfo file"
  1681.                mpath=result
  1682.                infotext=_text._procfolder||arch||nl||_text._procmail||mnum+1
  1683.                 text ID STEXT LABEL infotext
  1684.                if pos(file,mpath)=0 then do
  1685.                   infotext=_text._RMchanged
  1686.                     text ID STEXT LABEL infotext
  1687.                   Address YAM "getfolderinfo max"
  1688.                   xmcnt=result
  1689.                   do i=0 to xmcnt-1
  1690.                      Address YAM "setmail" i
  1691.                      Address YAM "getmailinfo file"
  1692.                      mpath=result
  1693.                      if pos(file,mpath)~=0 then do
  1694.                         leave i
  1695.                      end
  1696.                      else mpath=missing
  1697.                   end
  1698.                end
  1699.                if mpath~=missing then do
  1700.                   intcommand="Call '"bcommand"' '"mpath"'"
  1701.                   if debug then say 'intcommand='intcommand
  1702.                   interpret intcommand
  1703.                end
  1704.                else do
  1705.                   infotext=_text._RMdeleted
  1706.                     text ID STEXT LABEL infotext
  1707.                end
  1708.                radio ID SQUIT 
  1709.                squitopt=result
  1710.                if squitopt=_text._squit3 then leave msel
  1711.             end
  1712.             window ID YTINF CLOSE
  1713.          end
  1714.       end
  1715.       when pagename=FLpage then do
  1716.          list ID ALST ATTRS MUIA_List_Entries
  1717.          acnt=result
  1718.          infotext=nl2||nc||_text._processing1||nl2
  1719.          showbusy=TRUE
  1720.          infobuttons='"'||_text._squit1||comma||_text._squit3||'"'
  1721.          Call InfoWindow
  1722.          do asel=0 to acnt
  1723.             list ID ALST
  1724.             aline=result
  1725.             if aline='' then leave asel
  1726.             parse var aline arch ',' size ',' file ',' anum ',' rest
  1727.             if debug then say 'aline='aline
  1728.                 if size=0 then iterate asel
  1729.             Address YAM "setfolder" anum
  1730.             if upper(btype)='FOLDER' then do
  1731.                Address YAM "setmail 0"
  1732.                infotext=_text._procfolder||arch
  1733.                 text ID STEXT LABEL infotext
  1734.                intcommand="Call '"bcommand"' '"file"'"
  1735.                if debug then say 'intcommand='intcommand
  1736.                interpret intcommand
  1737.                radio ID SQUIT 
  1738.                squitopt=result
  1739.                if squitopt=_text._squit3 then leave asel
  1740.             end
  1741.             else do
  1742.                Address YAM "getfolderinfo max"
  1743.                mcnt=result
  1744.                do mnum=0 to mcnt-1
  1745.                   Address YAM "setmail" mnum
  1746.                   Address YAM "getmailinfo file"
  1747.                   mpath=result
  1748.                    infotext=_text._procfolder||arch||nl||_text._procmail||mnum+1||"/"||mcnt
  1749.                     text ID STEXT LABEL infotext
  1750.                   intcommand="Call '"bcommand"' '"mpath"'"
  1751.                   if debug then say 'intcommand='intcommand
  1752.                   interpret intcommand
  1753.                   radio ID SQUIT 
  1754.                   squitopt=result
  1755.                   if squitopt=_text._squit3 then leave asel
  1756.                end
  1757.             end
  1758.          end
  1759.          window ID YTINF CLOSE
  1760.       end
  1761.       otherwise do
  1762.          infomsg=_text._otwisebuttons
  1763.          Call InfoMsg
  1764.       end
  1765.    end       
  1766.  
  1767. Return
  1768.  
  1769. /******************************************************************************/
  1770. /*   Get information from main search screen, scan files for search strings   */
  1771. /*   Build screen list of mail that matches criteria                          */
  1772. /******************************************************************************/
  1773. SearchArchs:
  1774.  
  1775.    ADDRESS YAMTOOLS
  1776.  
  1777.    popasl ID CFGM
  1778.    maildir=result
  1779.  
  1780.    popasl ID CFGF 
  1781.    scanprog=result
  1782.  
  1783.    popasl ID CFGQ
  1784.    qsortprog=result
  1785.  
  1786.     tmpfile="T:ytsearch."||timestamp
  1787.    timerfile="T:ytwait."||timestamp
  1788.  
  1789.     sptr=0 
  1790.    srchstr.=missing
  1791.    srchstr.0=0
  1792.  
  1793.    Archlist.=missing
  1794.    Archlist.0=0
  1795.  
  1796.    Matches.=missing
  1797.    Matches.0=0
  1798.  
  1799.    string ID SRC1
  1800.    sval=result
  1801.     if sval~='' & sval~='RESULT' then do
  1802.        srchstr.0=1+srchstr.0
  1803.        sptr=srchstr.0
  1804.       srchstr.sptr=sval
  1805.       srchstr.sptr.1=0
  1806.       if debug then say srchstr.0 'search string:' srchstr.sptr
  1807.    end
  1808.    
  1809.    string ID SRC2
  1810.    sval=result
  1811.    if sval~='' & sval~='RESULT' then do
  1812.       srchstr.0=1+srchstr.0
  1813.       sptr=srchstr.0
  1814.       srchstr.sptr=sval
  1815.       srchstr.sptr.1=0
  1816.       if debug then say srchstr.0 'search string:' srchstr.sptr
  1817.    end
  1818.    
  1819.    string ID SRC3
  1820.    sval=result
  1821.    if sval~='' & sval~='RESULT' then do
  1822.       srchstr.0=1+srchstr.0
  1823.       sptr=srchstr.0
  1824.        srchstr.sptr=sval
  1825.       srchstr.sptr.1=0
  1826.       if debug then say srchstr.0 'search string:' srchstr.sptr
  1827.     end
  1828.  
  1829.    if sptr=0 then do
  1830.       errmsg="Specify SEARCH strings"
  1831.       Call ErrorMsg
  1832.    end
  1833.  
  1834.    check ID SRCS
  1835.    srchsubj=result
  1836.    check ID SRCF
  1837.    srchfrom=result
  1838.    check ID SRCT
  1839.    srchto=result
  1840.    check ID SRCM
  1841.    srchmsg=result
  1842.    check ID SRCA
  1843.    srchall=result
  1844.    radio ID SLOG
  1845.    matchlogic=result
  1846.    
  1847.     if matchlogic='Match Any' then matchreqs=1
  1848.                               else matchreqs=srchstr.0 
  1849.     
  1850.    list ID ALST ATTRS MUIA_List_Entries
  1851.    acnt=result
  1852.    if debug then say 'acnt='acnt
  1853.    
  1854.    list ID MLST ATTRS MUIA_List_Entries
  1855.    mcnt=result
  1856.    if debug then say 'mcnt='mcnt
  1857.  
  1858.    if debug then say 'Clearing Mail List '
  1859.    
  1860.     method ID MLST MUIM_List_Clear
  1861.  
  1862.    button ID SRCX PORT YAMTOOLS ATTRS MUIA_Disabled TRUE
  1863.  
  1864.    _title._info=_title._search
  1865.    infotext=_text._searching
  1866.    infobuttons='"'||_text._squit1||comma||_text._squit2||comma||_text._squit3||'"'
  1867.    showbusy=TRUE
  1868.  
  1869.    Call InfoWindow
  1870.  
  1871.    do asel=0 to acnt
  1872.       list ID ALST
  1873.       aline=result
  1874.       if aline='' then break
  1875.       parse var aline arch ',' size ',' file ',' anum ',' rest
  1876.       text ID STEXT LABEL _text._scanning||arch
  1877.       if debug then say 'Call SearchArchive for:' aline
  1878.       if size > 0 then Call SearchArchive
  1879.       archcnt=asel+1 
  1880.       Archlist.0=archcnt
  1881.       Archlist.archcnt=arch
  1882.       Archlist.archcnt.1=anum
  1883.       Archlist.archcnt.1.1=file
  1884.       radio ID SQUIT 
  1885.       squitopt=result
  1886.       select
  1887.          when squitopt=_text._squit2 then leave asel
  1888.          when squitopt=_text._squit3 then do
  1889.             signal SearchArchsEnd
  1890.          end
  1891.          otherwise nop
  1892.       end
  1893.    end
  1894.  
  1895.    if exists(timerfile) then do
  1896.       if ~debug then do
  1897.          Address Command 'Delete ' timerfile 'Quiet'
  1898.       end
  1899.    end   
  1900.  
  1901.    if asel=0 then do
  1902.       errmsg="Select Folders to Search"
  1903.       Call ReEnableSearch
  1904.       Call ErrorMsg
  1905.    end
  1906.  
  1907.    Call DoScanFile
  1908.  
  1909.    radio ID SQUIT 
  1910.    if result~=_text._squit1 then do
  1911.       Call ReEnableSearch
  1912.       errmsg="Search Interrupted/Aborted"
  1913.       Call ErrorMsg
  1914.    end
  1915.  
  1916.    if debug then say 'starting match archlist to matches'
  1917.    if Matches.0=0 then do
  1918.       errmsg="No Matches Found"
  1919.       Call ReEnableSearch
  1920.       Call ErrorMsg
  1921.    end
  1922.  
  1923.    list ID MLST INSERT POS MUIV_List_Insert_Bottom ATTRS MUIA_List_Quiet TRUE
  1924.  
  1925.    do i=1 to Archlist.0
  1926.       do j=1 to Matches.0
  1927.          if upper(Matches.j.1)=upper(Archlist.i.1.1) then do
  1928.             Matches.j=Archlist.i
  1929.             Matches.j.1.1.1=Archlist.i.1
  1930.          end
  1931.       end
  1932.    end
  1933.  
  1934. /**************************************************************************/
  1935. /*            Match of scan results to mail within each folder            */
  1936. /*                                                                        */
  1937. /* If only 1 match is found in a given folder then we just loop thru the  */
  1938. /* mail until we find the matching filename. If there is more than 1 in   */
  1939. /* a specific folder then we loop thru the folder, build an array of info */
  1940. /* and then do our matching against the array. This speeds the process up */
  1941. /* for both conditions.  Remove commas from From:,To:, and Subject:       */
  1942. /**************************************************************************/
  1943.  
  1944.    if debug then say "Doing getmailinfo for i=1 to " Matches.0
  1945.    oldfolder=missing
  1946.    do i=1 to Matches.0
  1947.       fptr=i+1
  1948.       if matches.fptr.1.1.1=missing & matches.i.1.1.1=oldfolder then leave i
  1949.       if debug then say 'i='i 'matches.0='matches.0
  1950.       radio ID SQUIT 
  1951.       if result~=_text._squit1 then leave i
  1952.       Address YAM "setfolder" matches.i.1.1.1
  1953.       Address YAM "getfolderinfo max"
  1954.       mailcnt=result
  1955.       if debug then say 'current/next folders' matches.i.1.1.1 matches.fptr.1.1.1
  1956.       if matches.fptr.1.1.1~=matches.i.1.1.1 then do
  1957.          do j=0 to mailcnt-1
  1958.             Address YAM "setmail" j
  1959.             Address YAM "getmailinfo file"
  1960.             mpath=result         
  1961.             if pos(matches.i.1.1,mpath)>0 then do
  1962.                matches.i.1.1.1.1=j                              /* number */
  1963.                Address YAM "getmailinfo from"
  1964.                from=result
  1965.                if pos('<',from)>1 then from=substr(from,1,pos('<',from)-1)
  1966.                matches.i.1.1.1.1.1=translate(from,' ',',')      /*from    */
  1967.                Address YAM "getmailinfo subject"
  1968.                subject=result
  1969.                matches.i.1.1.1.1.1.1=translate(subject,' ',',') /*subject */
  1970.                Address YAM "getmailinfo to"
  1971.                to=result
  1972.                matches.i.1.1.1.1.1.1.1=translate(to,' ',',')    /* To:    */
  1973.                iterate i
  1974.             end
  1975.          end
  1976.       end
  1977.       else do
  1978.          oldptr=i
  1979.          oldfolder=matches.i.1.1.1
  1980.          tempmail.=missing
  1981.          tempmail.0=0
  1982.          if debug then say 'oldptr='oldptr 'oldfolder=oldfolder'
  1983.          do j=0 to mailcnt-1
  1984.             k=j+1
  1985.             tempmail.0=k
  1986.             Address YAM "setmail" j
  1987.             Address YAM "getmailinfo file"
  1988.             tempmail.k=result
  1989.          end 
  1990.          do newptr=oldptr to matches.0
  1991.             i=newptr-1
  1992.             if debug then say 'i='i 'newptr='newptr 'current='matches.newptr.1.1.1 'oldfolder='oldfolder
  1993.             if matches.newptr.1.1.1~=oldfolder then iterate i
  1994.             do j=1 to tempmail.0
  1995.                if pos(matches.newptr.1.1,tempmail.j)>0 then do   
  1996.                   matches.newptr.1.1.1.1=j-1                    /* number */
  1997.                   Address YAM "setmail" j-1
  1998.                   Address YAM "getmailinfo from"
  1999.                   from=result
  2000.                   if pos('<',from)>1 then from=substr(from,1,pos('<',from)-1)
  2001.                   matches.newptr.1.1.1.1.1=translate(from,' ',',')
  2002.                   Address YAM "getmailinfo subject"
  2003.                   subject=result
  2004.                   matches.newptr.1.1.1.1.1.1=translate(subject,' ',',') 
  2005.                   Address YAM "getmailinfo to"
  2006.                   to=result
  2007.                   matches.newptr.1.1.1.1.1.1.1=translate(to,' ',',')
  2008.                   iterate newptr
  2009.                end
  2010.             end
  2011.          end
  2012.       end
  2013.    end
  2014.  
  2015. /**************************************************************************/
  2016. /*   Build the Mail List and switch to the Mail List page.                */
  2017. /**************************************************************************/
  2018.  
  2019.    if debug then say 'Placing info in MLST'
  2020.     do i=1 to Matches.0
  2021.       arch=Matches.i
  2022.       path=Matches.i.1
  2023.       file=Matches.i.1.1
  2024.       anum=Matches.i.1.1.1
  2025.       mnum=Matches.i.1.1.1.1
  2026.       from=Matches.i.1.1.1.1.1
  2027.       subj=Matches.i.1.1.1.1.1.1      
  2028.       mfor=Matches.i.1.1.1.1.1.1.1      
  2029.       liststr=arch||comma||from||comma||subj||comma||mfor||comma||mnum||comma||anum||comma||file
  2030.       list ID MLST INSERT POS MUIV_List_Insert_Bottom STRING liststr
  2031.         if debug then say 'match file='file
  2032.         if debug then say 'match path='path
  2033.    end
  2034.    list ID MLST ATTRS MUIA_List_Quiet FALSE
  2035.  
  2036.    group ID YTPGS LABELS MLpage
  2037.  
  2038.    
  2039.  
  2040. SearchArchsEnd:
  2041. ReEnableSearch:
  2042.  
  2043.    window ID YTINF CLOSE   
  2044.  
  2045.    button ID SRCX HELP help.SRCX  NODE node.SRCX COMMAND '"YamTools.rexx SEARCH "', 
  2046.           PRESS ATTRS MUIA_CycleChain TRUE MUIA_Disabled FALSE,
  2047.           LABEL 'Search'
  2048.  
  2049. Return
  2050.  
  2051. /******************************************************************************/
  2052. /*                                                                            */
  2053. /******************************************************************************/
  2054. SearchArchive:
  2055.  
  2056.     sfile=file||'/'
  2057.       
  2058.    do j=1 to srchstr.0
  2059.       if debug then say 'starting 'scanprog sfile srchstr.j
  2060.       Address Command "run >nil: "scanprog sfile '"'srchstr.j'"' " NH NUM >>"tmpfile
  2061.       Call WaitScanDone
  2062.       if debug then say 'finished 'scanprog sfile srchstr.j
  2063.       radio ID SQUIT 
  2064.       if result~=_text._squit1 then leave j     
  2065.    end
  2066.  
  2067. Return
  2068.    
  2069. /**************************************************************************/
  2070. /*                                                                        */
  2071. /* Scan files with output to a temp file. Read lines back into array.     */
  2072. /* Sort the array. Sorted array becomes input for further processing.     */
  2073. /*                                                                        */
  2074. /**************************************************************************/
  2075. DoScanFile:
  2076.  
  2077.    infotext=_text._matching
  2078.    text ID STEXT LABEL infotext
  2079.  
  2080.    ScanArray.=missing          /* stores parsed information from scan prg */
  2081.    ScanArray.0=0                            /* no scan lines yet          */
  2082.    sptr=0                                   /* counter for array          */     
  2083.  
  2084.    Matches.=missing                         /* array for matches          */
  2085.    Matches.0=0                              /* none yet                   */
  2086.    matchcnt=0                               /* used to determine matches  */
  2087.  
  2088.    olddir =missing                          /* level break controls       */
  2089.    oldfile=missing                          /* level break controls       */
  2090.  
  2091.    goodopen=open('IN',tmpfile,'R')
  2092.    if ~goodopen then do
  2093.       /* put user notification code/call here */
  2094.       exit
  2095.    end
  2096.  
  2097.    do until eof('IN')
  2098.       linein=readln('IN')
  2099.       select
  2100.          when words(linein)=2 & word(linein,2)='...' then do
  2101.             fullname=word(linein,1)              /* filename with path    */
  2102.             chop=lastpos('/',fullname)           /* start of filename     */
  2103.             filename=substr(fullname,chop+1)     /* just the filename part*/
  2104.             dirname=substr(fullname,1,chop-1)    /* path info             */
  2105.          end
  2106.          when words(linein) > 0 then do
  2107.             linenum=strip(word(linein,1))        /* line number found     */
  2108.             linenum=right(linenum,6,'0')         /* put in leading zeros  */
  2109.             text=subword(linein,2)               /* remaining string      */
  2110.             sptr=sptr+1                          /* increment cnter       */
  2111.             scanarray.0=sptr                     /* store it              */    
  2112.             scanarray.sptr=dirname filename linenum text /* store it      */
  2113.          end
  2114.          otherwise nop                           /* should be end of file */
  2115.       end
  2116.    end
  2117.  
  2118.    result=close('IN')                            /* close the scan file   */
  2119.  
  2120.    if ~debug then do
  2121.       Address Command 'Delete ' tmpfile 'quiet'  /* delete it             */
  2122.    end
  2123.  
  2124.    if show('L','rexxtricks.library') then do    /* use tricks library     */
  2125.       call QSORT(scanarray)                  /* sort by name, line number */
  2126.    end
  2127.    else do                                   /* use QuickSort format      */
  2128.       call QSORT(1, scanarray.0, scanarray)  /* sort by name, line number */
  2129.    end 
  2130.  
  2131.    do i=1 to scanarray.0
  2132.       dirname=word(scanarray.i,1)                /* directory in array    */
  2133.       filename=word(scanarray.i,2)               /* filename in array     */
  2134.       linenum=word(scanarray.i,3)                /* line number in array  */       
  2135.       text=subword(scanarray.i,4)                /* remainder of line     */
  2136.       if dirname~=olddir | filename~=oldfile then do
  2137.          Call TestMatch                          /* see if we use this one*/
  2138.       end
  2139.       type=word(text,1)                          /* header word ??        */
  2140.       if srchall=FALSE then do 
  2141.          Call FilterLines                        /* accept/reject lines   */      
  2142.          if skipline then iterate i
  2143.       end
  2144.       do j=1 to srchstr.0                        /* loop thru search vals */
  2145.          if pos(upper(srchstr.j),upper(text))>0 then do /* found match    */
  2146.             srchstr.j.1=1                        /* mark as found         */ 
  2147.          end
  2148.       end
  2149.    end                                  /* matches do i=1 to scanarray.0  */
  2150.  
  2151.    Call TestMatch                                /* test LAST file        */
  2152.  
  2153. Return
  2154.  
  2155. /**************************************************************************/
  2156. /*                                                                        */
  2157. /* Need to accept/reject lines based on type.                             */
  2158. /* Easy ones are Subject: From: To: etc.                                  */
  2159. /* Assume that if variable type (word 1 of line) ends in ':' not text line*/
  2160. /*                                                                        */
  2161. /**************************************************************************/
  2162. FilterLines:
  2163.    
  2164.    skipline=FALSE                                /* assume good line      */
  2165.    select
  2166.        when right(type,1)~=':' & srchmsg then nop
  2167.        when right(type,1)~=':' & srchmsg then nop
  2168.       when type='Subject:' & srchsubj then nop 
  2169.       when type='From:' & srchfrom then nop 
  2170.       when type='Reply-To:' & srchfrom then nop 
  2171.       when type='Sender:' & srchfrom then nop 
  2172.       when type='To:' & srchto then nop 
  2173.       when type='CC:' & srchto then nop 
  2174.       otherwise skipline=TRUE                    /* assume we skip it     */
  2175.    end
  2176.  
  2177. Return
  2178.  
  2179. /**************************************************************************/
  2180. /*                                                                        */
  2181. /* Test for match condition and reset the necessary variables.            */
  2182. /* for 'AND' conditions matchcnt should be the sum of how many searches   */
  2183. /* for 'OR'  any search value found counts as a match                     */
  2184. /*                                                                        */
  2185. /**************************************************************************/
  2186. TestMatch:
  2187.  
  2188.    matchcnt=0                                    /* reset for new file    */
  2189.  
  2190.    do j=1 to srchstr.0
  2191.       matchcnt=matchcnt+srchstr.j.1              /* get match counts      */
  2192.    end
  2193.  
  2194.    if matchcnt>=matchreqs & olddir~=missing then do       /* got a match  */
  2195.       Matches.0=1+Matches.0                      /* count it              */
  2196.       mptr=matches.0
  2197.       Matches.mptr.1=olddir                      /* store directory name  */     
  2198.       Matches.mptr.1.1=oldfile                   /* store file name       */     
  2199.    end
  2200.    olddir=dirname                                /* copy for next break   */
  2201.    oldfile=filename                              /* copy for next break   */
  2202.    do j=1 to srchstr.0                           /* loop thru search vals */
  2203.       srchstr.j.1=0                              /* set matches to zero   */ 
  2204.    end
  2205.  
  2206. Return
  2207.  
  2208. /**************************************************************************/
  2209. /*              Wait until scan program not in task list                  */
  2210. /**************************************************************************/
  2211. WaitScanDone:
  2212.  
  2213.    do timer=1                                    /* allows iterate timer  */
  2214.       Address Command "status > "timerfile
  2215.       foo=delay(delaytm)                         /* pause for command     */
  2216.       goodopen=open('IN',timerfile,'R')
  2217.       if goodopen then do 
  2218.          do until eof('IN')
  2219.             linein=readln('IN')
  2220.             if pos(scanprog,linein)>0 then do
  2221.                result=close('IN')
  2222.                iterate timer                     /* keep looping          */
  2223.             end
  2224.          end
  2225.          result=close('IN')
  2226.          leave timer
  2227.       end
  2228.       else do 
  2229.          infomsg=_text._badtimerfile
  2230.          Call InfoMsg
  2231.       end
  2232.    end
  2233.  
  2234. Return
  2235. /******************************************************************************/
  2236. /*                                                                            */
  2237. /* Display informationn about YAMTOOLS, YAM, MUIREXX.                         */
  2238. /*                                                                            */
  2239. /******************************************************************************/
  2240. AboutProgs:
  2241.  
  2242.    Address YAM 'info title'
  2243.    yamtitle=result 
  2244.    Address YAM 'info copyright'
  2245.    yamcopy=result
  2246.    
  2247.    txt.0=23                                                                 
  2248.    txt.1="\033cYAMTOOLS"                               
  2249.    txt.2="\033cCopyright ©1997 by Dick Whiting"
  2250.    txt.3="\033n"                                                        
  2251.    txt.4="--------------------------------------------------------------------"
  2252.    txt.5="\033n"                                                        
  2253.    txt.6="=Standard Disclaimer: I wrote it, it works for me, I don't guarantee"
  2254.    txt.7="=that it will do anything productive for anyone else, etc. etc. ;-)"
  2255.    txt.8="\033n"                                                                    
  2256.    txt.9="=HOWEVER, if you DO find a use for it: I homeschool my kids and they"
  2257.    txt.10="=would love a postcard from where EVER you live."
  2258.    txt.11="\033n"
  2259.    txt.12="=Instant GEOGRAPHY lesson;)"
  2260.    txt.13="\033n"                                                                    
  2261.    txt.14="=POSTCARDS:   Dick Whiting"
  2262.    txt.15="=             28590 S. Beavercreek Rd."
  2263.    txt.16="=             Mulino, Oregon 97042"
  2264.    txt.17="=             USA"
  2265.    txt.18="\033n"                                                                    
  2266.    txt.19="--------------------------------------------------------------------"
  2267.    txt.20="\033n"                                                                    
  2268.    txt.21="\033cAddress Bug Reports or Comments to:"                  
  2269.    txt.22="\033cDick Whiting <dwhiting@europa.com>"
  2270.    txt.23="\033c15 June 1997"
  2271.  
  2272.    select
  2273.       when parm='YAM' then do
  2274.          ab.title="About "||yamtitle||" "||yamcopy
  2275.          aboutlist=FALSE
  2276.          fontsize="ATTRS MUIA_FONT MUIV_Font_Big"
  2277.          aboutmsg=bc||'!! T H A N K   Y O U   M A R C E L !!'         
  2278.          Call AboutWin
  2279.       end
  2280.       when parm='MUIREXX' then do
  2281.          ab.title="About "||parm
  2282.          aboutlist=FALSE
  2283.          aboutmsg=ct||"!! Great Product - Register It !!"
  2284.          Call AboutWin
  2285.       end
  2286.       otherwise do
  2287.          ab.title="About "||parm
  2288.          ab.desc="YamTools -- Add-on Tools For YAM"
  2289.          ab.copy="Version 1.7 Copyright ©1997 by Dick Whiting"
  2290.          ab.text1=yamtitle||' '||yamcopy
  2291.          ab.text2="MuiRexx © Russell Leighton"
  2292.          ab.text3="MUI © Stefan Stuntz"
  2293.          aboutmsg=bc||ab.desc||nl||nc||ab.copy||nl||txt.19||nl||ab.text1||nl||ab.text2||nl||ab.text3
  2294.          Call AboutWin
  2295.          do i=1 to txt.0
  2296.             list ID ABLST INSERT POS MUIV_List_Insert_Bottom STRING txt.i
  2297.          end
  2298.          list ID ABLST POS MUIV_List_Insert_Top
  2299.       end
  2300.    end
  2301.  
  2302. Return
  2303. /******************************************************************************/
  2304. /*  Display window for ABOUT programs.                                        */
  2305. /******************************************************************************/
  2306. AboutWin:
  2307.    window ID YTABT TITLE '"'ab.title'"' MUIA_Window_DepthGadget FALSE,
  2308.           MUIA_Window_PublicScreen screen
  2309.       group
  2310.          text fontsize LABEL aboutmsg
  2311.       endgroup
  2312.       if aboutlist then do
  2313.          group 
  2314.             list ID ABLST
  2315.          endgroup
  2316.       end
  2317.       group HORIZ
  2318.          group
  2319.             space HORIZ
  2320.          endgroup
  2321.          group
  2322.             button PRESS COMMAND '"window ID YTABT CLOSE"' PORT YAMTOOLS,
  2323.                    LABEL _text._ok
  2324.          endgroup
  2325.          group
  2326.             space HORIZ
  2327.          endgroup
  2328.       endgroup
  2329.    endwindow
  2330.  
  2331. Return
  2332.  
  2333. /******************************************************************************/
  2334. /*  Display ERROR message and EXIT.                                           */
  2335. /******************************************************************************/
  2336. ErrorMsg:
  2337.  
  2338.    window ID YTINF CLOSE
  2339.  
  2340.    if ~goodconfig then do
  2341.       group ID YTCON LABELS badpage
  2342.    end
  2343.  
  2344.    request ID ERRM GADGETS _text._ok errmsg
  2345.  
  2346.    if shutdown then do
  2347.       Address YAMTOOLS "QUIT"
  2348.    end
  2349.  
  2350.    exit
  2351.  
  2352. Return
  2353.  
  2354. /******************************************************************************/
  2355. /*  Display information message and RETURN                                    */
  2356. /******************************************************************************/
  2357. InfoMsg:
  2358.  
  2359.    request ID INFOM GADGETS _text._ok infomsg
  2360.  
  2361. Return
  2362.  
  2363. /******************************************************************************/
  2364. /*  Simple information/error message window.                                  */
  2365. /******************************************************************************/
  2366. InfoWindow:
  2367.  
  2368.    window ID YTINF TITLE _title._info ATTRS MUIA_Window_PublicScreen screen,
  2369.           MUIA_Window_SizeGadget FALSE,
  2370.           MUIA_Window_DepthGadget FALSE
  2371.  
  2372.       group 
  2373.          group 
  2374.             text ID STEXT HELP help.STEXT  NODE node.STEXT LABEL infotext
  2375.          endgroup
  2376.          if showbusy then do
  2377.             group
  2378.                object CLASS '"Busy.mcc"' ATTRS MUIA_VertWeight 25
  2379.             endgroup
  2380.          end
  2381.          if infobuttons ~='' then do
  2382.             group HORIZ
  2383.                group 
  2384.                   space HORIZ 
  2385.                endgroup
  2386.                group 
  2387.                   radio ID SQUIT HELP help.SQUIT  NODE node.SQUIT LABELS infobuttons
  2388.                endgroup
  2389.                group 
  2390.                   space HORIZ 
  2391.                endgroup
  2392.             endgroup
  2393.          end
  2394.          else do
  2395.             group 
  2396.                space HORIZ 100
  2397.             endgroup
  2398.          end
  2399.       endgroup
  2400.    endwindow
  2401.  
  2402. Return
  2403.  
  2404. /******************************************************************************/
  2405. /*                      MUIREXX TAGS & VARIABLES                              */
  2406. /******************************************************************************/
  2407. Muivars:
  2408.  
  2409. Application_AboutMUI =      0x8042d21d
  2410. Application_OpenConfigWindow = 0x804299ba
  2411.  
  2412. MUIA_Application_Author =   0x80424842
  2413. MUIA_Application_Base =     0x8042e07a
  2414. MUIA_Application_Copyright= 0x8042ef4d
  2415. MUIA_Application_Description=0x80421fc6
  2416. MUIA_Application_Title =    0x804281b8
  2417. MUIA_Application_Version =  0x8042b33f
  2418.  
  2419. MUIA_Background  =          0x8042545b
  2420. MUIA_CycleChain =           0x80421ce7
  2421. MUIA_Disabled =             0x80423661
  2422. MUIA_Draggable =            0x80420b6e 
  2423. MUIA_DrawersOnly =          0x8008002F
  2424. MUIA_Dropable =             0x8042fbce 
  2425. MUIA_Font =                 0x8042be50
  2426. MUIA_Frame  =               0x8042ac64
  2427. MUIA_HorizWeight =          0x80426db9
  2428. MUIA_Group_Columns =        0x8042f416
  2429. MUIA_Group_SameSize =       0x80420860
  2430. MUIA_List_Active =          0x8042391c 
  2431. MUIA_List_DragSortable =    0x80426099
  2432. MUIA_List_Entries =         0x80421654 
  2433. MUIA_List_Format =          0x80423c0a 
  2434. MUIA_List_InsertPosition =  0x8042d0cd
  2435. MUIA_List_Quiet =           0x8042d8c7 
  2436. MUIA_List_ShowDropMarks =   0x8042c6f3 
  2437. MUIA_Listview_DoubleClick = 0x80424635
  2438. MUIA_Listview_DragType =    0x80425cd3
  2439. MUIA_Listview_MultiSelect = 0x80427e08
  2440. MUIA_Listview_SelectChange= 0x8042178f 
  2441. MUIA_Menustrip_Enabled =    0x8042815b
  2442. MUIA_Menuitem_Shortcut =    0x80422030 
  2443. MUIA_Menuitem_Title =       0x804218be 
  2444. MUIA_Numeric_Max =          0x8042d78a
  2445. MUIA_Numeric_Min =          0x8042e404
  2446. MUIA_Numeric_Default =      0x804263e8
  2447. MUIA_Scrollgroup_FreeHoriz =0x804292f3
  2448. MUIA_Selected =             0x8042654b
  2449. MUIA_ShortHelp =            0x80428fe3
  2450. MUIA_ShowMe =               0x80429ba8
  2451. MUIA_String_AdvanceOnCR =   0x804226de
  2452. MUIA_VertWeight =           0x804298d0 
  2453. MUIA_Weight =               0x80421d1f 
  2454. MUIA_Window_DepthGadget  =  0x80421923
  2455. MUIA_Window_ActiveObject =  0x80427925
  2456. MUIA_Window_PublicScreen =  0x804278e4
  2457. MUIA_Window_SizeGadget  =   0x8042e33d
  2458.  
  2459. MUIM_List_Clear =           0x8042ad89
  2460. MUIM_Notify_Notify   =      0x8042c9cb
  2461. MUIM_Notify_Set      =      0x8042549a
  2462. MUIM_Window_ToBack =        0x8042152e 
  2463. MUIM_Window_ToFront =       0x8042554f
  2464.  
  2465. ASLFR_InitialFile =         0x80080008
  2466. ASLFR_InitialDrawer =       0x80080009
  2467.  
  2468. TRUE=1
  2469. FALSE=0
  2470.  
  2471. MUIV_Font_Big = -6
  2472. MUIV_Frame_None  = 0
  2473. MUIV_List_GetEntry_Active = -1
  2474. MUIV_List_Insert_Active = -1
  2475. MUIV_List_Insert_Bottom = -3
  2476. MUIV_List_Insert_Top = 0
  2477. MUIV_Listview_DragType_Immediate = 1
  2478. MUIV_Listview_MultiSelect_Shifted = 2
  2479. MUII_WindowBack  = 0
  2480. MUIV_Window_ActiveObject_Next = -1
  2481.  
  2482. Return
  2483.  
  2484. /**************************************************************************/
  2485. /*           Various values used throughout the various routines          */
  2486. /**************************************************************************/
  2487. YTvars:
  2488.  
  2489. aboutlist=TRUE                              /* show list in about window  */
  2490. comma=','                                   /* used in string building    */
  2491. configheader='YamTools Configuration File -- Copyright by Dick Whiting'
  2492. emptyconfig='empty'||comma||'none'||comma||'<----available---->' 
  2493. delaytm=20                                  /* wait time per loop         */
  2494. fontsize=''                                 /* used to change FONT size   */
  2495. infolines=28                                /* number of header lines     */
  2496. maxarchs=50000                              /* very large number for loop */
  2497. missing='.'                                 /* indicate missing value     */
  2498. showbusy=FALSE                              /* don't show busy indicator  */
  2499. shutdown=FALSE                              /* flag for quitting YAMTOOLS */
  2500. timestamp=time('S')                         /* timestamp for temp files   */
  2501. goodconfig=TRUE                             /* assume config good         */
  2502. Bcolmax=20                                  /* max number of columns      */
  2503. Browmax=40                                  /* maximum rows of buttons    */
  2504. emptymax=5            /* allow for 5 delete folders in a row -- arbitrary */
  2505.  
  2506. bo='\033b'                                  /* print control BOLD         */
  2507. bc='\033b\033c'                             /* print control BOLD CENTER  */
  2508. nc='\033n\033c'                             /* print control NORM CENTER  */
  2509. no='\033n'                                  /* print control NORM         */
  2510. nl='\n'                                     /* print control 1 NEW LINE   */
  2511. nl2='\n\n'                                  /* print control 2 NEW LINES  */
  2512. ct='\033c'                                  /* print control CENTER       */
  2513. lf='\033l'                                  /* print control LEFT ALIGN   */
  2514. rt='\033r'                                  /* print control RIGHT ALIGN  */
  2515.  
  2516. Return
  2517.  
  2518. /**************************************************************************/
  2519. /*    Messages, text, etc. constructed using previously defined values    */
  2520. /**************************************************************************/
  2521. Builtvars:
  2522.  
  2523. /*********************************/
  2524. /* Folder page character strings */
  2525. /*********************************/
  2526. _title._alst='"'||bo||_col._alst1||comma||bo||_col._alst2||comma||comma||'"'
  2527. _label._search='"'||bc||_text._search||'"'
  2528. _label._srcf='"'||lf||_text._srcf||'"'
  2529. _label._srct='"'||lf||_text._srct||'"'
  2530. _label._srcs='"'||lf||_text._srcs||'"'
  2531. _label._srcm='"'||lf||_text._srcm||'"'
  2532. _label._srca='"'||lf||_text._srca||'"'
  2533. _label._slog='"'||_text._slog1||comma||_text._slog2||'"'
  2534. _label._src1='"'||lf||bo||_text._src1||'"'
  2535.  
  2536. /*********************************/
  2537. /* Mail page character strings   */
  2538. /*********************************/
  2539. _title._mlst='"'||bo||_col._mlst1||comma||bo||_col._mlst2||comma||bo||_col._mlst3||comma||bo||_col._mlst4||comma||comma||comma||'"'
  2540.  
  2541. /*********************************/
  2542. /* System page character strings */
  2543. /*********************************/
  2544. _label._cfgm='"'||lf||bo||_text._cfgm||'"'
  2545. _label._cfgf='"'||lf||bo||_text._cfgf||'"'
  2546. _label._cfgq='"'||lf||bo||_text._cfgq||'"'
  2547. _label._cfgv='"'||lf||bo||_text._cfgv||'"'
  2548. _label._cfge='"'||lf||bo||_text._cfge||'"'
  2549. _label._cfgd='"'||lf||bo||_text._cfgd||'"'
  2550. _label._cfgb='"'||lf||bo||_text._cfgb||'"'
  2551. _label._cfgs='"'||lf||bo||_text._cfgs||'"'
  2552. _label._cfgy='"'||lf||bo||_text._cfgy||'"'
  2553.  
  2554. /*********************************/
  2555. /* ARexx  page character strings */
  2556. /*********************************/
  2557. _title._clst='"'||bo||_col._clst1||comma||bo||_col._clst2||comma||bo||_col._clst3||'"'
  2558. _label._cfg1='"'||lf||bo||_text._cfg1||'"'
  2559. _label._cfg2='"'||bo||_text._cfg2||'"'
  2560. _label._cfg3='"'||lf||bo||_text._cfg3||'"'
  2561. _label._cfgc='"'||bo||_text._cfgc||'"'
  2562. _label._cfgr='"'||bo||_text._cfgr||'"'
  2563.  
  2564. /*********************************/
  2565. /* Miscellaneous messages, etc.  */
  2566. /*********************************/
  2567. badpage=Spage                               /* first CONFIG page          */
  2568.  
  2569. Return
  2570.  
  2571. /**************************************************************************/
  2572. /*               Pointers into the YamTools.guide documentation           */
  2573. /**************************************************************************/
  2574. Helpvars:
  2575.  
  2576. node.ALST='4.1.'
  2577. node.ARLD='4.1.'
  2578. node.B00='6.2.'
  2579. node.CFG1='6.2.'
  2580. node.CFG2='6.2.'
  2581. node.CFG3='6.2.'
  2582. node.CFG4='6.2.'
  2583. node.CFG5='6.2.'
  2584. node.CFG6='6.2.'
  2585. node.CFG7='6.2.'
  2586. node.CFG9='6.2.'
  2587. node.CFGA='6.2.'
  2588. node.CFGB='6.1.'
  2589. node.CFGC='6.2.'
  2590. node.CFGD='6.1.'
  2591. node.CFGE='6.1.'
  2592. node.CFGF='6.1.'
  2593. node.CFGM='6.1.'
  2594. node.CFGQ='6.1.'
  2595. node.CFGR='6.2.'
  2596. node.CFGS='6.1.'
  2597. node.CFGV='6.1.'
  2598. node.CFGY='6.1.'
  2599. node.CLST='6.2.'
  2600. node.MDIR='6.1.'
  2601. node.MLST='5.1.'
  2602. node.SLOG='4.3.'
  2603. node.SQUIT='7.2.'
  2604. node.SRC1='4.3.'
  2605. node.SRC2='4.3.'
  2606. node.SRC3='4.3.'
  2607. node.SRCA='4.3.'
  2608. node.SRCF='4.3.'
  2609. node.SRCM='4.3.'
  2610. node.SRCS='4.3.'
  2611. node.SRCT='4.3.'
  2612. node.SRCX='4.3.'
  2613. node.STEXT='7.2.'
  2614.  
  2615. Return
  2616.  
  2617. /**************************************************************************/
  2618. /*       Mui Gadgets, text, msgs, etc. used in YamTools                   */
  2619. /**************************************************************************/
  2620. Localize:
  2621.  
  2622. /*********************************/
  2623. /* Page Name character strings   */
  2624. /*********************************/
  2625. FLpage='FolderList'     /* title for Folder List Page - NO SPACES ALLOWED */
  2626. MLpage='MailList'       /* title for Mail   List Page - NO SPACES ALLOWED */
  2627. Cpage='Config'          /* title for Config Page - NO SPACES ALLOWED      */
  2628. Spage='System'          /* title for System Page - NO SPACES ALLOWED      */
  2629. Apage='ARexx'           /* title for ARexx  Page - NO SPACES ALLOWED      */
  2630.  
  2631. /*********************************/
  2632. /* Menu character strings        */
  2633. /*********************************/
  2634. _label._project='"Project"'                 /* menu label Project         */
  2635. _label._about='"About..."'                  /* menu item About            */
  2636. _label._save='"Save"'                       /* menu item Save             */
  2637. _label._saveas='"Save As..."'               /* menu item Save As          */
  2638. _label._open='"Open..."'                    /* menu item Open             */
  2639. _label._quit='"Quit"'                       /* menu item Quit             */
  2640. _label._settings='"Settings"'               /* menu label Settings        */
  2641. _label._showpage='"Show Pages"'             /* menu item Show Pages       */
  2642. _label._hidepage='"Hide Pages"'             /* menu item Hide Pages       */
  2643.  
  2644. /*********************************/
  2645. /* Folder page character strings */
  2646. /*********************************/
  2647. _label._mdir='Mail Directory:'              /* label for Mail Directory   */
  2648. _col._alst1='Yam Folder'                    /* heading for ALST column 1  */
  2649. _col._alst2='Count'                         /* heading for ALST column 2  */
  2650.  
  2651. _label._arld='Load Folder List'             /* label for Reload button    */
  2652. _text._search='Search Types of Lines'       /* text for SEACH options     */
  2653. _text._srcf='FROM:'                         /* search FROM: lines label   */
  2654. _text._srct='TO:'                           /* search TO:   lines label   */
  2655. _text._srcs='SUBJECT:'                      /* search SUBJECT: lines label*/
  2656. _text._srcm='TEXT:'                         /* search TEXT: lines label   */
  2657. _text._srca='ALL:'                          /* search ALL:  lines label   */
  2658. _text._slog1='Match Any'                    /* text for option MATCH ANY  */
  2659. _text._slog2='Match All'                    /* text for option MATCH ALL  */
  2660. _text._src1='Enter Search Strings:'         /* text for enter search strgs*/
  2661. _label._srcx='Search'                       /* label for SEARCH button    */
  2662.  
  2663. /*********************************/
  2664. /* Mail page character strings   */
  2665. /*********************************/
  2666. _col._mlst1='Yam Folder'                    /* heading for MLST column 1  */
  2667. _col._mlst2='From'                          /* heading for MLST column 2  */
  2668. _col._mlst3='Subject'                       /* heading for MLST column 3  */
  2669. _col._mlst4='To'                            /* heading for MLST column 4  */
  2670.  
  2671. /*********************************/
  2672. /* System page character strings */
  2673. /*********************************/
  2674. _text._cfgm='Mail Directory:'               /* text for Mail Dir location */
  2675. _text._cfgf='FlashFind:'                    /* text for FlashFind loc     */
  2676. _text._cfgq='QuickSort:'                    /* text for QuickSort loc     */
  2677. _text._cfgv='Viewer:'                       /* text for Viewer: loc/opts  */
  2678. _text._cfge='Editor:'                       /* text for Editor: loc/opts  */
  2679. _text._cfgd='Delay Archive Load:'           /* text for Delay Load button */
  2680. _text._cfgy='YAM for load list:'            /* text for YAM for load list */
  2681. _text._cfgb='Show YamTools Pages:'          /* text for Show YT pgs button*/
  2682. _text._cfgs='Show Two Windows:'             /* text for Splitscreen button*/
  2683.  
  2684. /*********************************/
  2685. /* ARexx  page character strings */
  2686. /*********************************/
  2687. _col._clst1='Label'                         /* heading for CLST column 1  */
  2688. _col._clst2='Type'                          /* heading for CLST column 2  */
  2689. _col._clst3='Command'                       /* heading for CLST column 3  */
  2690. _label._cfg7='CLEAR'                        /* label for CLEAR  button    */
  2691. _label._cfg9='UNDO'                         /* label for UNDO   button    */
  2692. _label._cfgA='EDIT'                         /* label for EDIT   button    */
  2693. _text._cfg1='Label:'                        /* text LABEL string gadget   */
  2694. _text._cfg2='Type:'                         /* text TYPE  cycle  gadget   */
  2695. _text._cfg3='ARexx:'                        /* text AREXX string gadget   */
  2696. _text._cfgc='Cols:'                         /* text COLS  slider gadget   */
  2697. _text._cfgr='Rows:'                         /* text ROWS  slider gadget   */
  2698.  
  2699. /*********************************/
  2700. /* Common Config string values   */
  2701. /*********************************/
  2702. _label._cfg4='SAVE'                         /* label for SAVE   button    */
  2703. _label._cfg5='USE'                          /* label for USE    button    */
  2704. _label._cfg6='RELOAD'                       /* label for RELOAD button    */
  2705.  
  2706. /*********************************/
  2707. /* Miscellaneous info strings    */
  2708. /*********************************/
  2709. _title._main='"YamTools v1.7"'              /* main screen title          */
  2710. _title._info='"YamTools Info"'              /* default title on infomsg   */
  2711. _title._search='"YamTools Search"'          /* search title on infomsg    */
  2712. _text._squit1='Continue'                    /* CONTINUE option on infowin */
  2713. _text._squit2='Interrupt'                   /* INTERRUPT option on infowin*/
  2714. _text._squit3='Abort'                       /* ABORT    option on infowin */
  2715. _text._ok='Ok'                              /* various OK buttons         */
  2716. _text._quit='Quit'                          /* various QUIT buttons       */
  2717. _text._getfolders='Getting Folder List...'  /* Getting Folder List msg    */ 
  2718. _text._loadmail='Loading Mail list...'      /* Loading Mail List message  */
  2719. _text._processing1='Starting to process entries...'                  
  2720. _text._procfolder='Processing Folder '      /* portion of message         */ 
  2721. _text._procmail='Mail entry '               /* portion of message         */ 
  2722. _text._searching='Starting to Search Folders' /* searching folders msg    */
  2723. _text._matching='Building Match List...'    /* building match list msg    */ 
  2724. _text._scanning='Scanning: '                /* scanning archive message   */ 
  2725. _text._execute='Execute: '                  /* execute arexx button msg   */
  2726. _text._astype='As Type: '                   /* execute arexx button msg   */
  2727.  
  2728. /*********************************/
  2729. /* Various error conditions      */
  2730. /*********************************/
  2731.                      /* Mail order changed..searching msg  '\n'=newline   */
  2732. _text._RMchanged='Order of mail in folder has changed\nSearching for mail...'
  2733.  
  2734.                      /* Mail deleted/moved..continuing msg '\n'=newline   */
  2735. _text._RMdeleted='Mail has been deleted or moved\nContinuing with others'
  2736.  
  2737.                     /* user tried to load a non-config file as a config   */
  2738. _text._notconfig='This is NOT a YamTools Configuration File\nSelect one that is:)'
  2739.  
  2740.                     /* configuration file has errors or can't be found    */
  2741. _text._badconfig='Configuration File not Found or has errors\nPlease enter information\nand SAVE'
  2742.                     /* user has more buttons in config than rows*cols     */
  2743. _text._extrabuttons='Too Many Button Entries in 'configfile '\nSome buttons may be lost'
  2744.  
  2745. _text._otwisebuttons='Found otherwise in DoRexxButton' /* unlikely error  */
  2746. _text._badtimerfile='Couldnt open timerfile'           /* unlikely error  */                   
  2747. _text._noyam='You need YAM running to use YAMTOOLS'    /* yam not running */
  2748. _text._noqsort='Unable to find QuickSort -- check installation instructions'
  2749. _text._nomdir='You MUST set Mail Directory in Configuration'
  2750. _text._badassign='Couldnt open assignfile: '           /* unlikely error  */
  2751. _text._badvolfile='Couldnt open volumefile: '          /* unlikely error  */
  2752. _text._badfolder='One of more folders do not exist as directory names.\nCheck that MailDir is specified correctly and reload Folder list'
  2753. _text._noeditor='No Editor has been configured'        
  2754. _text._badarexx=' (ARexx file) does not exist'
  2755. _text._opencfgerr='Unable to open Config file for output'
  2756. _text._badmdir=' (Mail directory) does not exist'
  2757. _text._badscan=' (Scan program) does not exist'
  2758. _text._badqsort=' (QuickSort program) does not exist'
  2759. _text._badviewer=' (Viewer program) does not exist'
  2760. _text._badeditor=' (Editor program) does not exist'
  2761. _text._nolabel='Label is required for: '
  2762. _text._nomailfile='Cannot locate mail file'
  2763. _text._wrongpage='Cannot Execute Buttons from Config Window'
  2764. _text._notfolderpg='This command needs to be run from the folder list'
  2765.  
  2766.  
  2767. /**************************************************************************/
  2768. /*           Help Messages to display with MUI bubble facility.           */
  2769. /*                                                                        */
  2770. /* Format is simple: help.ID where ID is the id specified on the MUI      */
  2771. /* object statement.                                                      */
  2772. /* Similar approach for accessing the .guide information using the NODE   */
  2773. /* option on the object statement.                                        */
  2774. /*                                                                        */
  2775. /**************************************************************************/
  2776.  
  2777. help.ALST='"Select Folders to search\nor run ARexx Program against"'
  2778. help.ARLD='"Use to load/reload folder list\nRequired if you add\nor delete folders"'
  2779. help.B00= '"Executes ARexx Program: Define in Configuration"'
  2780. help.CFG1='"Label to appear on button"'
  2781. help.CFG2='"Type of processing to do\n- See Documentation or press HELP"'
  2782. help.CFG3='"ARexx program to execute when button is pressed"'
  2783. help.CFG4='"Save & Use currently defined configuration to file"'
  2784. help.CFG5='"Use currently defined configuration"'
  2785. help.CFG6='"Reload & Use last SAVED/LOADED configuration file"'
  2786. help.CFG7='"Clear Selected Entry\n(Remove Script)"'
  2787. help.CFG9='"Undo LAST edited entry in list"'
  2788. help.CFGA='"Edit Selected ARexx program"'
  2789. help.CFGB='"Uncheck to show only the ARexx Buttons on startup"'
  2790. help.CFGC='"Number of columns of buttons for ARexx programs\nChange takes effect after SAVE and RESTART"'
  2791. help.CFGD='"Check to NOT load archive list on startup"'
  2792. help.CFGE='"Editor for use with YamTools\n%F replaced with filename\n%S replaced with YAM screen name"'
  2793. help.CFGF='"Location of FlashFind program - required"'
  2794. help.CFGM='"Current Mail Directory YAM is using - required"'
  2795. help.CFGQ='"Location of QuickSort program - required"'
  2796. help.CFGR='"Number of rows of buttons for ARexx programs\nChange takes effect after SAVE and RESTART"'
  2797. help.CFGS='"Check to show as two separate windows on startup"'
  2798. help.CFGV='"Viewer and options to use for reading mail\n%F replaced with filename\n%S replaced with YAM screen name\nenter YAMTOOLS to use a MUI window"'
  2799. help.CFGY='"Check this to use YAM to locate folders (slower)\nUncheck to use the Yam.config file which is faster\nbut does not show number of mail in folder"'
  2800. help.CLST='"Double click to edit entry\nDrag&Drop to Sort"'
  2801. help.MDIR='"Currently defined Mail Directory - change on Config page"'
  2802. help.MLST='"Double click to READ\nSelect for ARexx Execution target"'
  2803. help.SLOG='"Match Any (OR logic)\nMatch All (AND logic)\nfor mail searching"'
  2804. help.SQUIT='"INTERRUPT will show results upto this point\nABORT stops ALL processing"'
  2805. help.SRC1='"Enter strings to Search for"'
  2806. help.SRC2='"Enter strings to Search for"'
  2807. help.SRC3='"Enter strings to Search for"'
  2808. help.SRCA='"Searches in ALL lines of mail for search strings"'
  2809. help.SRCF='"Searches From: Reply-To: Sender:\nlines in mail for search strings"'
  2810. help.SRCM='"Searches NON-header\nlines in mail for search strings"'
  2811. help.SRCS='"Searches Subject:\nlines in mail for search strings"'
  2812. help.SRCT='"Searches To: CC:\nlines in mail for search strings"'
  2813. help.SRCX='"Start the Search"'
  2814. help.STEXT='"Information Message\nRead it;)"'
  2815.  
  2816. Return
  2817.