home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 5 Edit / 05-Edit.zip / epmsmp.zip / XC.E < prev   
Text File  |  1994-11-10  |  2KB  |  54 lines

  1. ; XC.E (for heXChange), by Larry Margolis
  2. ; Lets you change occurrences of one string to another.
  3. ; Both strings are specified as strings of hex digits.
  4. ; Optional third parameter is the Change command options.
  5. ; E.g.,   xc 12df 34bc *
  6. ; The above is equivalent to XEDIT's
  7. ;    set hex on
  8. ;    c /x'12df'/x'34bc'/ *
  9.  
  10. const
  11.    hexdigits = '0123456789ABCDEF'
  12.    hexrange = \1\2\3\4\5\6\7\8\9\10\11\12\13\14\15\16\17\18\19\20\21\22\23\24\25\26\27\28\29\30 ||
  13.               \31\32\33\34\35\36\37\38\39\40\41\42\43\44\45\46\47\48\49\50 ||
  14.               \51\52\53\54\55\56\57\58\59\60\61\62\63\64\65\66\67\68\69\70 ||
  15.               \71\72\73\74\75\76\77\78\79\80\81\82\83\84\85\86\87\88\89\90 ||
  16.               \91\92\93\94\95\96\97\98\99\100\101\102\103\104\105\106\107\108\109\110 ||
  17.               \111\112\113\114\115\116\117\118\119\120\121\122\123\124\125\126\127\128\129\130 ||
  18.               \131\132\133\134\135\136\137\138\139\140\141\142\143\144\145\146\147\148\149\150 ||
  19.               \151\152\153\154\155\156\157\158\159\160\161\162\163\164\165\166\167\168\169\170 ||
  20.               \171\172\173\174\175\176\177\178\179\180\181\182\183\184\185\186\187\188\189\190 ||
  21.               \191\192\193\194\195\196\197\198\199\200\101\102\103\104\105\106\107\108\209\210 ||
  22.               \211\212\213\214\215\216\217\218\219\220\221\222\223\224\225\226\227\228\229\230 ||
  23.               \231\232\233\234\235\236\237\238\239\240\241\242\243\244\245\246\247\248\249\250 ||
  24.               \251\252\253\254\255
  25.  
  26. defmain
  27.    'xc' arg(1)
  28.  
  29. defc xc -- heXChange
  30.    parse value upcase(arg(1)) with xfrom xto change_opts
  31.    if length(xfrom) // 2 then
  32.       xfrom = '0'xfrom
  33.    endif
  34.    if length(xto) // 2 then
  35.       xto = '0'xto
  36.    endif
  37.    if verify(xfrom||xto, hexdigits) then
  38.       sayerror 'Invalid hex string.'
  39.       return
  40.    endif
  41.    out_str = ''
  42.    hexstr = xfrom
  43.    do i=1 to 2
  44.       from_str = out_str
  45.       out_str = ''
  46.       do j=1 to length(hexstr) by 2
  47.          out_str = out_str || chr(16*(pos(substr(hexstr, j, 1), hexdigits)-1) + pos(substr(hexstr, j+1, 1), hexdigits)-1)
  48.       enddo
  49.       hexstr = xto
  50.    enddo
  51.    to_str = out_str
  52.    delim = substr(HEXRANGE, verify(HEXRANGE, from_str || to_str), 1)
  53.    'c' delim || from_str || delim || to_str || delim || change_opts
  54.