stevecasper Posted January 26, 2009 Report Share Posted January 26, 2009 I have a number of macros that I use as a base for making certain adjustments. One example: a prompt asks for a dollar amount. If the user inputs "25" for "25.00" my macro will know to add the ".00" automatically, additionally if the amount is "2500", the macro will convert it to "2,500.00", adding a comma as well as the .00. This basic function is required for a number of macros that I use at work, and so I just use a "Run Macro" command within all these various other macros. Occasionally I give a macro a name like "Test File Repair" so I know it's just a test macro while I work with it and "beta test" the functionality before I roll it out to other users. Once that's done, I need to change the macro name, otherwise I may end up several months later with "Test File Repair 2" etc. and it gets cumbersome and confusing. So when I have half a dozen macros or more calling "Test File Repair," it can sometimes get confusing or I just plain forget which macros or how many macros are actually calling this one. So occasionally, I change the name, change the Run Macro in as many of the other macros as I can remember, and then continue testing for a few more days to see if I get any "Macro 'File Repair' could not be found, Macro will be aborted" errors (indicating a macro whose "Macro Run" was not changed for the new, Final, macro name. Now that I've gotten that long-winded background out of the way, is there any function in ME Pro that I haven't found yet, that will list all the macros which call a specific macro? Like if I were to right-click on the macro in the Explorer window and select "Macros Calling This One" menu (I know that particular method won't work). If not, I know a feature I'm going to submit a request for. Anybody know anything about the possibility of this feature's existence? Quote Link to comment Share on other sites More sharing options...
joe Posted January 26, 2009 Report Share Posted January 26, 2009 If not, I know a feature I'm going to submit a request for. What is needed is a "where used" feature or a search feature that will look through all macros in all libraries currently loaded in the Macro Explorer. Quote Link to comment Share on other sites More sharing options...
terrypin Posted January 26, 2009 Report Share Posted January 26, 2009 I have a number of macros that I use as a base for making certain adjustments. One example: a prompt asks for a dollar amount. If the user inputs "25" for "25.00" my macro will know to add the ".00" automatically, additionally if the amount is "2500", the macro will convert it to "2,500.00", adding a comma as well as the .00. This basic function is required for a number of macros that I use at work, and so I just use a "Run Macro" command within all these various other macros. Occasionally I give a macro a name like "Test File Repair" so I know it's just a test macro while I work with it and "beta test" the functionality before I roll it out to other users. Once that's done, I need to change the macro name, otherwise I may end up several months later with "Test File Repair 2" etc. and it gets cumbersome and confusing. So when I have half a dozen macros or more calling "Test File Repair," it can sometimes get confusing or I just plain forget which macros or how many macros are actually calling this one. So occasionally, I change the name, change the Run Macro in as many of the other macros as I can remember, and then continue testing for a few more days to see if I get any "Macro 'File Repair' could not be found, Macro will be aborted" errors (indicating a macro whose "Macro Run" was not changed for the new, Final, macro name. Now that I've gotten that long-winded background out of the way, is there any function in ME Pro that I haven't found yet, that will list all the macros which call a specific macro? Like if I were to right-click on the macro in the Explorer window and select "Macros Calling This One" menu (I know that particular method won't work). If not, I know a feature I'm going to submit a request for. Anybody know anything about the possibility of this feature's existence? Steve, Yes, I too have often wanted a search facility like that, along the lines that Joe describes. On occasions I've even resorted to opening my main MEX file (FULL.mex) in Hex Workshop Editor and using its search to find relevant text strings. So one line of attack would be to generalise that. Another sledge-hammer approach might be to periodically run a macro that successively copies all your scripts to a file, allowing you to then search it. -- Terry, East Grinstead, UK Quote Link to comment Share on other sites More sharing options...
stevecasper Posted January 26, 2009 Author Report Share Posted January 26, 2009 Steve, Yes, I too have often wanted a search facility like that, along the lines that Joe describes. On occasions I've even resorted to opening my main MEX file (FULL.mex) in Hex Workshop Editor and using its search to find relevant text strings. So one line of attack would be to generalise that. Another sledge-hammer approach might be to periodically run a macro that successively copies all your scripts to a file, allowing you to then search it. -- Terry, East Grinstead, UK Wow... that would be some sledge-hammer. If I were a tad more organized, I'd just keep a running spreadsheet. Unfortunately, when we first got ME here at work, I wasn't the point-person (despite being the only person in the department with any experience with ME), so I only built macros for myself, and occasionally helped the actual point person when he asked for it. So I didn't bother keeping track of anything, since I thought he was (I was mistaken)... Now he's moved on to another job, leaving me on point but without any documentation... in fact, my work with ME is essentially pro bono. I don't get special time to build, filter, document, organize or anything. So, my macros continue to be built according to my personal needs when I can spare a minute or 20, and roll out very sporadically (if ever). They tell me my macros are important to the success of the team, but they don't really show it... Anyway that's a personal gripe. Bottom line: I don't have time to go through every macro and index them. There are some processes that need tweaking so I'm very slowly copying most of my macros from ME3 to MEP by hand, one line at a time, in order to streamline some of my older macros that were built inelegantly (plus this way I can make hefty use of the unlimited variables MEP offers). I'm using this opportunity to pay more attention to which macros are being called by which other macros... but it sure is tedious. Quote Link to comment Share on other sites More sharing options...
Cory Posted January 26, 2009 Report Share Posted January 26, 2009 I had exactly the same problem and actually wrote a macro to do this. Too bad I can't find it now. In any case it's real easy to do manually, we even had a discussion about it back in the ME3 forum a while ago. All you need to do is File > Export > Macro Information then search that file. Make sure to include the script obviously. I wrote a macro once to do exactly that and report either all the Macro Runs or apply a user defined filter. It was really simple and worked super slick! If anyone really wants it I can write it again, it was only something like 20 lines. Quote Link to comment Share on other sites More sharing options...
terrypin Posted January 26, 2009 Report Share Posted January 26, 2009 Wow... that would be some sledge-hammer. Not really. As Cory said, the file creation macro is pretty simple. My hasty attempt below is probably a bit crude but it works OK here and produces a 12,000 line file from the 562 macros in my FULL.mex file in under a second. // This will export all scripts to an existing text file called CurrentMacroScripts, replacing its current contents. Window Activate: Macro Express Pro - Explorer Keystroke Speed: 10 milliseconds Text Type (Simulate Keystrokes): <ALT>feo // File > Export > Export Macros... Wait for Text Playback Text Type (Simulate Keystrokes): <SPACE><TAB><TAB><SPACE><TAB><SPACE><ENTER> // Configure the export appropriately Wait for Text Playback Delay: 1 seconds Text Type (Simulate Keystrokes): C:\Docs\SUNDRY\Macro Express\CurrentMacroScripts.txt Wait for Text Playback Text Type (Simulate Keystrokes): y Wait for Text Playback Macro Return (BTW, I've left that paste unedited apart from the formating. Why do I often get apparently blank lines in my script, usually (but not always) after a Text Type command? Such as between commands #9 and #10 above?) <COMMENT Value="This will export all scripts to an existing text file called CurrentMacroScripts, replacing its current contents."/> <WINDOW ACTIVATE Title="Macro Express Pro - Explorer" Exact_Match="FALSE" Wildcards="FALSE"/> <KEYSTROKE SPEED Delay="10"/> <TEXT TYPE Action="0" Text="<ALT>feo" _COMMENT="File > Export > Export Macros..."/> <WAIT FOR TEXT PLAYBACK Indefinite="TRUE" Hours="0" Minutes="0" Seconds="0"/> <TEXT TYPE Action="0" Text="<SPACE><TAB><TAB><SPACE><TAB><SPACE><ENTER>" _COMMENT="Configure the export appropriately"/> <WAIT FOR TEXT PLAYBACK Indefinite="TRUE" Hours="0" Minutes="0" Seconds="0"/> <DELAY Flags="\x01" Time="1"/> <TEXT TYPE Action="0" Text="C:\\Docs\\SUNDRY\\Macro Express\\CurrentMacroScripts.txt\r\n"/> <WAIT FOR TEXT PLAYBACK Indefinite="TRUE" Hours="0" Minutes="0" Seconds="0"/> <TEXT TYPE Action="0" Text="y\r\n"/> <WAIT FOR TEXT PLAYBACK Indefinite="TRUE" Hours="0" Minutes="0" Seconds="0"/> <MACRO RETURN/> Hopefully you or Cory can now write the complementary search macro! -- Terry, East Grinstead, UK Quote Link to comment Share on other sites More sharing options...
Cory Posted January 26, 2009 Report Share Posted January 26, 2009 Actually my macro didn't export the file but rather it processed the file line by line and created a report all in script, IE no UI, notepad or any of that. Personally I don't like mucking about in a text editor's UI when I can more easily use variable manipulation commands. Much faster, more reliable, and doesn't bother the user. Quote Link to comment Share on other sites More sharing options...
terrypin Posted January 27, 2009 Report Share Posted January 27, 2009 Actually my macro didn't export the file but rather it processed the file line by line and created a report all in script, IE no UI, notepad or any of that. Personally I don't like mucking about in a text editor's UI when I can more easily use variable manipulation commands. Much faster, more reliable, and doesn't bother the user. Cory, Not sure I'm following you there? The above just exports all scripts, using the same Export facility you mentioned. No text editor involved. I vaguely assumed that the search macro would just prompt for a 'target' macro and then simply ASCII process/search the file, displaying the results as a list of macros in a Text Display, or a file if preferred. Again, no text editor. Both macros would then be combined. -- Terry, East Grinstead, UK Quote Link to comment Share on other sites More sharing options...
Cory Posted January 27, 2009 Report Share Posted January 27, 2009 Sorry Terry, I didn't really read your macro. I just saw it starting down the GUI path and assumed. My macro worked on any type of command really. This way one could look for all the Macro Run, Set Variable, or whatever. And by the same token it cold look for a specific Macro Run. Just any text you like. Then it would list which macros it was in and copy it to your clipboard if you preferred. I never bothered with the export part becasue that was jsut as east to do manually. Quote Link to comment Share on other sites More sharing options...
terrypin Posted January 27, 2009 Report Share Posted January 27, 2009 Sorry Terry, I didn't really read your macro. I just saw it starting down the GUI path and assumed. My macro worked on any type of command really. This way one could look for all the Macro Run, Set Variable, or whatever. And by the same token it cold look for a specific Macro Run. Just any text you like. Then it would list which macros it was in and copy it to your clipboard if you preferred. I never bothered with the export part becasue that was jsut as east to do manually. OK Cory, understood. I wish you could put your hands on your macro! I've been trying for an hour or so but have given up for now. I was placing command script lines into a text variable where I then intended to test it with If Variable %Command% Contains "<MACRO RUN" But that's getting screwed up sometimes when the command script line contains strings like '%T[1]%' etc. They get converted to their current values, instead of just being left as plain text. Is there some way to avoid that sort of thing? -- Terry, East Grinstead, UK Quote Link to comment Share on other sites More sharing options...
Cory Posted January 28, 2009 Report Share Posted January 28, 2009 Well this is the problem with percent signs. Many times we deal with text that we don't want to evaluate for potential variables but MEP does it anyway. It's very frustrating. Personally I think they're choice of the common percent sign was a mistake. Should have used the pipe symbol or something less common. I'll look around for that macro or write a new one. Quote Link to comment Share on other sites More sharing options...
joe Posted January 28, 2009 Report Share Posted January 28, 2009 I don't know Cory, the percent sign is pretty common for script style programs as well as the dollar sign. The pipe and other keyboard characters would have their own baggage as well. Would something like this be possible to build a string? Variable Set String %T[1]% to "%" Variable Modify String %T[1]%: Append Text (T[1]%) What you end up with when MX Pro substitutes the variable %T[1]% is the string "%T[1]%". Quote Link to comment Share on other sites More sharing options...
terrypin Posted January 30, 2009 Report Share Posted January 30, 2009 Here's my macro to achieve the result we've discussed. It does work here although it's still pretty crude. In particular note my inclusion of Delays and Wait for Text Playback, as I'm still unsure whether the Waits work on their own. I've been forced to split it into two parts for a reason I'll explain later. // This first section exports all scripts in the current MEX file to an existing text file called CurrentMacroScripts, replacing its current contents. Window Activate: Macro Express Pro - Explorer Keystroke Speed: 10 milliseconds Text Type (Simulate Keystrokes): <ALT>feo // File > Export > Export Macros... Wait for Text Playback Delay: 100 milliseconds, without ability to halt Text Type (Simulate Keystrokes): <SPACE><TAB><TAB><SPACE><TAB><SPACE><ENTER> // Configure the export appropriately Wait for Text Playback Delay: 1 seconds Text Type (Simulate Keystrokes): C:\Docs\SUNDRY\Macro Express\CurrentMacroScripts.txt Wait for Text Playback Text Type (Simulate Keystrokes): y Wait for Text Playback Wait for File to Exist: C:\Docs\SUNDRY\Macro Express\CurrentMacroScripts.txt Text Box Display: File created Delay: 100 milliseconds Macro Return <COMMENT Value="This first section exports all scripts in the current MEX file to an existing text file called CurrentMacroScripts, replacing its current contents."/> <WINDOW ACTIVATE Title="Macro Express Pro - Explorer" Exact_Match="FALSE" Wildcards="FALSE"/> <KEYSTROKE SPEED Delay="10"/> <TEXT TYPE Action="0" Text="<ALT>feo" _COMMENT="File > Export > Export Macros..."/> <WAIT FOR TEXT PLAYBACK Indefinite="TRUE" Hours="0" Minutes="0" Seconds="0"/> <DELAY Flags="\x03" Time="100"/> <TEXT TYPE Action="0" Text="<SPACE><TAB><TAB><SPACE><TAB><SPACE><ENTER>" _COMMENT="Configure the export appropriately"/> <WAIT FOR TEXT PLAYBACK Indefinite="TRUE" Hours="0" Minutes="0" Seconds="0"/> <DELAY Flags="\x01" Time="1" _ENABLED="FALSE"/> <TEXT TYPE Action="0" Text="C:\\Docs\\SUNDRY\\Macro Express\\CurrentMacroScripts.txt\r\n"/> <WAIT FOR TEXT PLAYBACK Indefinite="TRUE" Hours="0" Minutes="0" Seconds="0"/> <TEXT TYPE Action="0" Text="y\r\n"/> <WAIT FOR TEXT PLAYBACK Indefinite="TRUE" Hours="0" Minutes="0" Seconds="0"/> <WAIT FOR FILE TO EXIST Filename="C:\\Docs\\SUNDRY\\Macro Express\\CurrentMacroScripts.txt" Indefinite="TRUE" Hours="0" Minutes="0" Seconds="0"/> <TEXT BOX DISPLAY Title="File created" Content="{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang2057{\\fonttbl{\\f0\\fnil\\fcharset0 Tahoma;}{\\f1\\fnil Tahoma;}}\r\n\\viewkind4\\uc1\\pard\\f0\\fs16 The full data has been exported to the file CurrentMacroScripts.\\f1 \r\n\\par }\r\n" Left="Center" Top="Center" Width="278" Height="200" Monitor="0" OnTop="FALSE" Keep_Focus="TRUE" Mode="\x00" Delay="0"/> <DELAY Flags="\x02" Time="100"/> <MACRO RETURN/> // This part gets the macro name entered as a target. It assumes you have the name selected in ME Pro Explorer. Keystroke Speed: 50 milliseconds Mouse Right Click: 50 milliseconds Delay: 100 milliseconds Text Type (Simulate Keystrokes): p Wait for Text Playback Text Type (Simulate Keystrokes): <TAB> Wait for Text Playback Clipboard Copy Variable Set String %Target% from the clipboard contents // This part searches that file for all commands containing at least one Macro Run for the target macro xyz. Variable Set to ASCII Char 13 to %CR% // Set CR Variable Set to ASCII Char 10 to %LF% // Set LF Variable Set String %CRLF% to "%CR%%LF%" Variable Set Integer %N[1]% to 1 Text File Begin Process: C:\Docs\SUNDRY\Macro Express\CurrentMacroScripts.txt If Variable %Text% Contains "Name: " // Test for current macro name Variable Set String %Macroname% to "%Text%" Variable Modify String %Macroname%: Delete a substring starting at 1 and 6 characters long Goto:End End If If Variable %Text% Contains "<MACRO RUN Use_ID="FALSE" Name="%Target%" // Test if this command is a MACRO RUN of target macro And If Variable %Macroname% Does not Equal "%OldName%" // Test if this command is a MACRO RUN of target macro // Do whatever is necessary for a hit Variable Modify String %Results%: Append Text String Variable (%Macroname%) Variable Modify String %Results%: Append Text String Variable (%CRLF%) Variable Modify Integer %Hits%: Increment Variable Set String %OldName% to "%Macroname%" End If :End Variable Modify Integer %N[1]%: Increment Text File End Process Text Box Display: Results List Variable Modify String: Save %Results% to "C:\Docs\SUNDRY\Macro Express\Results.txt" Macro Return <COMMENT Value="This part gets the macro name entered as a target. It assumes you have the name selected in ME Pro Explorer."/> <KEYSTROKE SPEED Delay="50"/> <MOUSE RIGHT CLICK/> <DELAY Flags="\x02" Time="100"/> <TEXT TYPE Action="0" Text="p"/> <WAIT FOR TEXT PLAYBACK Indefinite="TRUE" Hours="0" Minutes="0" Seconds="0"/> <TEXT TYPE Action="0" Text="<TAB>"/> <WAIT FOR TEXT PLAYBACK Indefinite="TRUE" Hours="0" Minutes="0" Seconds="0"/> <CLIPBOARD COPY/> <VARIABLE SET STRING Option="\x02" Destination="%Target%"/> <COMMENT Value="This part searches that file for all commands containing at least one Macro Run for the target macro xyz."/> <VARIABLE SET TO ASCII CHAR Value="13" Destination="%CR%" _COMMENT="Set CR"/> <VARIABLE SET TO ASCII CHAR Value="10" Destination="%LF%" _COMMENT="Set LF"/> <VARIABLE SET STRING Option="\x00" Destination="%CRLF%" Value="%CR%%LF%"/> <VARIABLE SET INTEGER Option="\x00" Destination="%N[1]%" Value="1"/> <TEXT FILE BEGIN PROCESS Filename="C:\\Docs\\SUNDRY\\Macro Express\\CurrentMacroScripts.txt" Start_Record="1" Process_All="TRUE" Records="1" Variable="%Text%"/> <IF VARIABLE Variable="%Text%" Condition="\x06" Value="Name: " IgnoreCase="FALSE" _COMMENT="Test for current macro name"/> <VARIABLE SET STRING Option="\x00" Destination="%Macroname%" Value="%Text%"/> <VARIABLE MODIFY STRING Option="\x0A" Destination="%Macroname%" Start="1" Count="6"/> <GOTO Name="End"/> <END IF/> <IF VARIABLE Variable="%Text%" Condition="\x06" Value="<MACRO RUN Use_ID=\"FALSE\" Name=\"%Target%" IgnoreCase="FALSE" _COMMENT="Test if this command is a MACRO RUN of target macro"/> <AND/> <IF VARIABLE Variable="%Macroname%" Condition="\x01" Value="%OldName%" IgnoreCase="FALSE" _COMMENT="Test if this command is a MACRO RUN of target macro"/> <COMMENT Value="Do whatever is necessary for a hit"/> <VARIABLE MODIFY STRING Option="\x07" Destination="%Results%" Variable="%Macroname%"/> <VARIABLE MODIFY STRING Option="\x07" Destination="%Results%" Variable="%CRLF%"/> <VARIABLE MODIFY INTEGER Option="\x07" Destination="%Hits%"/> <VARIABLE SET STRING Option="\x00" Destination="%OldName%" Value="%Macroname%"/> <END IF/> <LABEL Name="End"/> <VARIABLE MODIFY INTEGER Option="\x07" Destination="%N[1]%"/> <TEXT FILE END PROCESS/> <TEXT BOX DISPLAY Title="Results List" Content="{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang2057{\\fonttbl{\\f0\\fnil\\fcharset0 Tahoma;}{\\f1\\fnil Tahoma;}}\r\n{\\colortbl ;\\red255\\green0\\blue0;}\r\n\\viewkind4\\uc1\\pard\\qc\\b\\f0\\fs16 The target macro \\cf1 %Target%\r\n\\par \\cf0 is used (at least once) in the following %Hits% macro(s):\\b0 \r\n\\par \\pard \r\n\\par %Results%\r\n\\par \r\n\\par \\pard\\qc\\b These have been saved to the file Results.txt (replacing previous contents).\\b0\\f1 \r\n\\par }\r\n" Left="Center" Top="Center" Width="600" Height="800" Monitor="0" OnTop="TRUE" Keep_Focus="TRUE" Mode="\x00" Delay="0"/> <VARIABLE MODIFY STRING Option="\x11" Destination="%Results%" Filename="C:\\Docs\\SUNDRY\\Macro Express\\Results.txt" CRLF="TRUE"/> <MACRO RETURN/> Notes/Queries 1. Obviously the filenames or at least their path will need changing to suit. 2. Here the creation takes less than a second, generating a file of 12,200 lines (for 573 macros in FULL.mex). 3. I'm not sure why a Script Editor window sometimes gets displayed at the end of the search, taking the focus from the message. 4. When I consolidated both the creation and the search into a single macro I hit an obscure snag. The macro crashes (hard - cannot be aborted except by terminating ME Pro) consistently when the search reaches this command line: <VARIABLE SET STRING Option="\x00" Destination="%OldName%" Value="%Macroname%"/> That is, of course, a command in the macro that is actually running. But I still haven't fathomed exactly why it fails. I'm wondering if Joe's suggestion up-thread is relevant, but haven't really grasped how to use it in this context. So the only way I can run the search part is to first delete that line of script from the text file. 5. The search then takes a few seconds, finishing with this message window: -- Terry, East Grinstead, UK Quote Link to comment Share on other sites More sharing options...
stevecasper Posted January 30, 2009 Author Report Share Posted January 30, 2009 Wow Terry, Awesome work. I'll have to toy with that. In the mean-time, I take it there is no actual built-in functionality of Macro Express to do this for us, so - not to undo all the work you and Cory have put into this - I'm going to go ahead and submit a feature request Thanks guys! Quote Link to comment Share on other sites More sharing options...
paul Posted January 31, 2009 Report Share Posted January 31, 2009 Sorry to come so late to the party, but I've been away in Europe and USA! I wrote a macro some time ago that produces 2 reports, a CalledBy and a Uses report. The first lists, for each macro, all the macros it calls, while the second lists, for each macro, all the macros that call it. It's written for ME3 and, frankly, its approach probably doesn't permit it to be rewritten for ME4. It is essentially a macro that opens each macro in edit mode, then searches and counts all Macro Run instances. For one library it takes over 20 minutes to run! But with multiple libraries now possible, I don't think this will work well any more. Quote Link to comment Share on other sites More sharing options...
terrypin Posted January 31, 2009 Report Share Posted January 31, 2009 Sorry to come so late to the party, but I've been away in Europe and USA! I wrote a macro some time ago that produces 2 reports, a CalledBy and a Uses report. The first lists, for each macro, all the macros it calls, while the second lists, for each macro, all the macros that call it. It's written for ME3 and, frankly, its approach probably doesn't permit it to be rewritten for ME4. It is essentially a macro that opens each macro in edit mode, then searches and counts all Macro Run instances. For one library it takes over 20 minutes to run! But with multiple libraries now possible, I don't think this will work well any more. Paul, Any chance you could post or upload it please? I'd be very interested in studying your approach, although I'm committed to ME Pro now. Also, any thoughts from anyone on that remaining obstacle I described please? -- Terry, East Grinstead, UK Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.