home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 5 Edit / 05-Edit.zip / p2demo21.exe / PEL / HEXEDIT.PEL < prev    next >
Text File  |  1995-03-22  |  5KB  |  189 lines

  1. # $Header:   P:\source\wmacros\hexedit.pev   1.13   22 Mar 1995 11:01:08   pfhmlw0  $
  2. ## $Tabs:4 7$
  3.  
  4. ##############################################################################
  5. #
  6. #       Compuware Corporation
  7. #         31440 Northwestern Highway
  8. #           Farmington Hills, Michigan 48334-2564
  9. #
  10. #   This source code listing contains information that is
  11. #   proprietary to Compuware Corporation and may not be copied
  12. #   duplicated, translated, transmitted, stored, retrieved
  13. #   or in any manner or by any method conveyed or disclosed
  14. #   to a third party or parties without express written
  15. #   permission from Compuware Corporation.
  16. #
  17. #  
  18. ##############################################################################
  19.  
  20. #### $Workfile:   hexedit.pel  $: Hex-Edit support functions
  21.  
  22. global old_hex_info[]
  23.  
  24. local hex_keymap  = -1
  25.  
  26. global function new_window()
  27. {
  28.    if (and(window_flags, WINDOW_ASCII_DUMP))
  29.       toggle_dump_mode(1);
  30.    else if (and(window_flags, WINDOW_IBM_DUMP))
  31.       toggle_dump_mode(2);
  32. }
  33.  
  34. global function toggle_dump_mode(on, fmt)
  35. {
  36.    if (argcount())
  37.       on = 0+on
  38.    else
  39.       on = !and(window_flags, or(WINDOW_ASCII_DUMP,WINDOW_IBM_DUMP))
  40.  
  41.    if (on)
  42.    {
  43.       if (argcount() > 1 || on > 1)
  44.          begin_dump_mode(fmt, on)
  45.       else
  46.          begin_dump_mode()
  47.    }
  48.    else
  49.       end_dump_mode()
  50. }
  51.  
  52. global function save_hex_state(status, format)
  53. {
  54.    old_hex_info[current_window].status    = status+0
  55.    old_hex_info[current_window].format    = format""
  56. }
  57.  
  58. global function begin_dump_mode(fmt, on)
  59. {
  60.    save_hex_state(status_bar_flags, linenumber_format)
  61.  
  62.    if (!and(window_flags, WINDOW_IBM_DUMP))
  63.       linenumber_format = "%06X%v"
  64.  
  65.    toggle_dump_window((argcount() > 1 && on) ? on : 1)
  66.    select_hex_keymap()
  67.  
  68.    if (argcount())
  69.       set_dump_format(fmt)
  70.  
  71.    if (and(status_bar_flags, STB_POSITION) && \
  72.        !and(window_flags, WINDOW_IBM_DUMP))
  73.    {
  74.       status_bar_flags = and(status_bar_flags, not(STB_POSITION))
  75.       status_bar_flags = or(status_bar_flags,  STB_OFFSET)
  76.    }
  77.  
  78.    attach_event_handler( EVENT.DELETING_WINDOW, "hex_delete_window" )
  79. }
  80.  
  81. global function hex_delete_window()
  82. {
  83.    if ( current_window in old_hex_info )
  84.    {
  85.       delete old_hex_info[current_window]
  86.       delete_event( EVENT.DELETING_WINDOW, "hex_delete_window" )
  87.    }
  88. }
  89.  
  90. global function end_dump_mode()
  91. {
  92.    toggle_dump_window(0)
  93.    window_keymap = empty_keymap
  94.  
  95.    if (current_window in old_hex_info)
  96.    {
  97.       linenumber_format    = old_hex_info[current_window].format   ""
  98.       status_bar_flags     = old_hex_info[current_window].status   +0
  99.  
  100.       delete old_hex_info[current_window]
  101.    }
  102.    else 
  103.    {
  104.       linenumber_format = ""
  105.       if (status_bar_flags)
  106.       {
  107.          status_bar_flags = and(status_bar_flags, not(STB_OFFSET))
  108.          status_bar_flags = or(status_bar_flags,  STB_LINE_COLUMN)
  109.       }
  110.    }
  111. }
  112.  
  113. global function toggle_dump_window(on, fmt)
  114. {
  115.    if (argcount())
  116.       on = 0+on
  117.    else
  118.       on = !and(window_flags, or(WINDOW_ASCII_DUMP,WINDOW_IBM_DUMP))
  119.  
  120.    if (argcount() > 1)
  121.       set_dump_format(fmt)
  122.  
  123.    if (on == 2)
  124.    {
  125.       window_flags = and(window_flags, not(WINDOW_ASCII_DUMP))
  126.       window_flags = or(window_flags,  WINDOW_IBM_DUMP)
  127.    }
  128.    else if (on)
  129.    {
  130.       window_flags = and(window_flags, not(WINDOW_IBM_DUMP))
  131.       window_flags = or(window_flags,  WINDOW_ASCII_DUMP)
  132.    }
  133.    else
  134.       window_flags = and(window_flags, \
  135.                          not(or(WINDOW_ASCII_DUMP,WINDOW_IBM_DUMP)))
  136. }
  137.  
  138. global function toggle_dump_side(on)
  139. {
  140.    if ( argcount() < 1 )
  141.       on = ! and(window_flags, WINDOW_NUM_SIDE)
  142.    else
  143.       on = 0+on
  144.  
  145.    if (on)
  146.       window_flags = or(window_flags, WINDOW_NUM_SIDE)
  147.    else
  148.       window_flags = and(window_flags, not(WINDOW_NUM_SIDE))
  149. }
  150.  
  151. global function set_dump_format(fmt)
  152. {
  153.    window_flags = and(window_flags, not(WINDOW_CHARS))
  154.    window_flags = or(window_flags,  and(fmt, WINDOW_CHARS))
  155. }
  156.  
  157. local function select_hex_keymap()
  158. {
  159.    local esc_fun    = keymap_binding("<ESC>")
  160.    local old_keymap = current_keymap
  161.  
  162.    if( hex_keymap < 0 || (old_keymap < 0 || current_keymap != old_keymap))
  163.    {
  164.       current_keymap = window_keymap = hex_keymap = create_keymap()
  165.       assign_key( "<Space>",     "insert_key" )
  166.       assign_key( "<Enter>",     "insert_key" )
  167.       assign_key( "<Up>",        "up" )
  168.       assign_key( "<Down>",      "down" )
  169.       assign_key( "<Left>",      "left" )
  170.       assign_key( "<Right>",     "right" )
  171.       assign_key( "<PageUp>",    "page_up" )
  172.       assign_key( "<PageDown>",  "page_down" )
  173.    }
  174.    else
  175.       current_keymap = window_keymap = hex_keymap
  176.  
  177.    if (and(window_flags, WINDOW_IBM_DUMP))
  178.       assign_key( "<Tab>", "" )
  179.    else
  180.       assign_key( "<Tab>", "toggle_dump_side" )
  181.  
  182.    if (!length(esc_fun) || esc_fun ~ /expand_template*/)
  183.       assign_key( "<ESC>", "end_dump_mode" )
  184.    else
  185.       assign_key( "<ESC>", "" )
  186.  
  187.    current_keymap = old_keymap
  188. }
  189.