home *** CD-ROM | disk | FTP | other *** search
/ Enigma Amiga Life 109 / EnigmaAmiga109CD.iso / software / varie / envhex13 / english / rexx / searchbytes.rexx < prev    next >
Encoding:
OS/2 REXX Batch file  |  1999-12-11  |  5.0 KB  |  194 lines

  1. /* ©1996 Dietmar Eilert. Empty GoldED macro */
  2.  
  3. OPTIONS RESULTS                             /* enable return codes     */
  4.  
  5. if (LEFT(ADDRESS(), 6) ~= "GOLDED") then    /* not started by GoldEd ? */
  6.     address 'GOLDED.1'
  7.  
  8. 'LOCK CURRENT RELEASE=4'                    /* lock GUI, gain access   */
  9.  
  10. if (RC ~= 0) then
  11.     exit
  12.  
  13. OPTIONS FAILAT 6                            /* ignore warnings         */
  14.  
  15. SIGNAL ON SYNTAX                            /* ensure clean exit       */
  16.  
  17. /* ------------------------ INSERT YOUR CODE HERE: ------------------- */
  18. /* $VER: 1.3, ©1999 Wolfgang Morgeneier */
  19.  
  20. 'QUERY Var=Wild Name=Wildcards'
  21. 'QUERY Var="Suchbytes" Name=Find'
  22. 'Query Var="Ersetzenstring" Name=Rplc'
  23. 'QUERY Var=grkl Name=UseCase'
  24. 'FIX VAR=Suchbytes'
  25. 'FIX VAR=Ersetzenstring'
  26. if length(Suchbytes)=0 then Suchbytes="x"
  27. if length(Ersetzenstring)=0 then Ersetzenstring="x"
  28.  
  29. parse arg Eingabe
  30. sprache=substr(Eingabe,1,1)
  31. start  =substr(Eingabe,2,1)
  32.  
  33. if sprache = "d" then do
  34.    R1B = "Bytes im Hexformat eingeben (max 16 Bytes):"
  35.    R1T = "Eingabe"
  36.    R2P = "Es sind jeweils paarweise Hexziffern einzugeben"
  37.    R3P = "Es sind nur Hexziffern (0...9 oder a...f) bzw ? einzugeben"
  38.    R4P = "Es sind nur Hexziffern (0...9 oder a...f) einzugeben"
  39.    R5P = "Das ersten beiden Zeichen des Suchstrings dürfen kein Platzhalter sein"
  40.    R6P = "Der Suchbegriff wurde nicht gefunden"
  41.    R7B1 ="Ersetzenstring im Hex-Format eingeben ("
  42.    R7B2 =" Zeichen):"
  43.    R7T = "Eingabe"
  44.    R8P = "Der Ersetzenstring muß genauso lang wie der Suchstring sein"
  45.    R9P = R4P
  46.    R10T= "Alle folgenden Vorkommen ersetzen?"
  47.    R10B= "Vorgang kann mit der CTRL-Taste abgebrochen werden"
  48.    R10X= "Alles ersetzen|!Beenden"
  49.    R11T= "Fertig"
  50.    R11B1="Insgesamt "
  51.    R11B2=" Ersetzungen"
  52. end
  53. else do
  54.    R1B = "Enter bytes in hex format (max 16 bytes):"
  55.    R1T = "Input"
  56.    R2P = "You have to enter hex diigts in pairs"
  57.    R3P = "You have to enter only hex digits (0...9 or a...f) or ?"
  58.    R4P = "You have to enter only hex digits (0...9 or a...f)"
  59.    R5P = "The first two chars in the search string may be no wildchars"
  60.    R6P = "Search string not found"
  61.    R7B1 ="Enter replace string in hex format ("
  62.    R7B2 =" chars):"
  63.    R7T = "Input"
  64.    R8P = "Replace string must have same length as search string"
  65.    R9P = R4P
  66.    R10T= "Shall I replace all following findings?"
  67.    R10B= "You can break this by pushing the CTRL key"
  68.    R10X= "Replace all|!Finished"
  69.    R11T= "Ready"
  70.    R11B1="Totally "
  71.    R11B2=" replacements"
  72. end
  73.  
  74. if start = "1" | start = "r" then do
  75.    if length(Suchbytes)>32 then Suchbytes=left(Suchbytes,32)
  76.    'REQUEST Body="' || R1B || '" Title="' || R1T || '" Var=Suchbytes String Old="' || Suchbytes || '"'
  77.    if RC > 0 then do
  78.       'UNLOCK'
  79.       exit
  80.    end
  81. end
  82.  
  83. SuchbytesLaenge=length(Suchbytes)
  84. if SuchbytesLaenge > 32 then Suchbytes=left(Suchbytes,32)
  85. 'FIX VAR=Suchbytes'
  86.  
  87. if length(Suchbytes)=0 | length(Suchbytes)//2 ~=0 then do
  88.    'REQUEST Problem="' || R2P || '"'
  89.    'UNLOCK'
  90.    exit
  91. end
  92.  
  93. Suchbytes = Upper(Suchbytes)
  94. if verify(Suchbytes,'0123456789ABCDEF?')~=0 & Wild=TRUE then do
  95.    'REQUEST Problem="' || R3P || '"'
  96.    'UNLOCK'
  97.    exit
  98. end
  99.  
  100. if verify(Suchbytes,'0123456789ABCDEF')~=0 & Wild=FALSE then do
  101.    'REQUEST Problem="' || R4P || '"'
  102.    'UNLOCK'
  103.    exit
  104. end
  105.  
  106. if Wild=TRUE & pos("?", Suchbytes)>0 & pos("?", Suchbytes)<3 then do
  107.    'REQUEST Problem="' || R5P || '"'
  108.    'UNLOCK'
  109.    exit
  110. end
  111.  
  112. 'SET Name=Find Value='Suchbytes
  113. Optstring = " "
  114. if start = "2" then Optstring = Optstring || "NEXT "
  115. if grkl=TRUE   then Optstring = Optstring || "USECASE "
  116. if Wild=TRUE   then Optstring = Optstring || "WILDCARD "
  117.  
  118. 'HEXSEARCHHEX SEARCH='Suchbytes || Optstring
  119.  
  120. if RC > 0 then do
  121.    'REQUEST Problem="' || R6P || '"'
  122.    'UNLOCK'
  123.    exit
  124. end
  125.  
  126. if start="r" then call ersetzen
  127.  
  128. 'UNLOCK'
  129. exit
  130.  
  131.  
  132. ersetzen:
  133.  
  134. flag=1
  135. do while flag
  136.    flag=0
  137.    'REQUEST Body="' || R7B1 || length(Suchbytes) || R7B2 || '" Title="' || R7T || '" Var=Ersetzenstring Max=' || length(Suchbytes) || ' String Old="' || Ersetzenstring || '"'
  138.    if RC > 0 then do
  139.       'UNLOCK'
  140.       exit
  141.    end
  142.    'FIX VAR=Ersetzenstring'
  143.    Ersetzenstring= upper(Ersetzenstring)
  144.    if length(Ersetzenstring) ~= length(Suchbytes) then do
  145.       'REQUEST Problem="' || R8P || '"'
  146.       flag=1
  147.    end
  148.    if verify(Ersetzenstring,'0123456789ABCDEF')~=0 then do
  149.       'REQUEST Problem="' || R9P || '"'
  150.       flag=1
  151.    end
  152. end
  153.  
  154. 'SET Name=Rplc Value=' || Ersetzenstring
  155.  
  156. call doersetzen
  157.  
  158. 'REQUEST Title="' || R10T || '" Body="' || R10B || '" BUTTON="' || R10X || '"'
  159. if result = 0 then return
  160.  
  161. Anzahl=1
  162. do forever
  163.    'HEXSEARCHHEX SEARCH='Suchbytes || Optstring
  164.    if RC > 0 then do
  165.       'REQUEST Title="' || R11T || '" Body="' || R11B1 || Anzahl || R11B2 || '"'
  166.       return
  167.    end
  168.    'QUERY Name=CTRL Var=ctrl'
  169.    if ctrl=TRUE then return
  170.    call doersetzen
  171.    Anzahl = Anzahl + 1
  172. end
  173.  
  174. return
  175.  
  176.  
  177. doersetzen:
  178.  
  179. do i=1 to length(Ersetzenstring)
  180.    'HEXKEY KEYH=' || substr(Ersetzenstring,i,1)
  181. end
  182.  
  183. return
  184.  
  185. /* ---------------------------- END OF YOUR CODE --------------------- */
  186.  
  187. SYNTAX:
  188.  
  189. SAY "Sorry, error line" SIGL ":" ERRORTEXT(RC) ":-("
  190.  
  191. 'UNLOCK'
  192.  
  193. exit
  194.