Numbers Macros

This forum allows you to share scripts with other Zeus users. Please do not post bug reports, feature requests or questions to this forum, but rather use it exclusively for posting scripts or for the discussion of scripts that have been posted.
Post Reply
jussij
Site Admin
Posts: 2650
Joined: Fri Aug 13, 2004 5:10 pm

Numbers Macros

Post by jussij »

Below are three numbers macros. They will convert a column marked area into a incremental set of numbers based on the initial value provided by the user.

The difference in the three macros is the first produces a decimal, the second a hex and the third a hex mask series of numbers.

So for example if five lines are marked an the macro is run with an intial value of zero the macros will produce the following results:

Numbers Macro

Code: Select all

0
1
2
3
4
Numbers Hex Macro

Code: Select all

0x0
0x1
0x2
0x3
0x4
Numbers Mask Macro

Code: Select all

0x01
0x02
0x04
0x08
0x10
Naturally if more or less lines are covered by the region of column marking then the series of numbers produced is adjusted accordingly.

Code: Select all

--
--        Name: Numbers Macro
--
--      Author: Jussi Jumppanen
--
--    Language: Lua Macro
--
-- Description: This simple Lua macro will replace a column marked area
--              with a series of incremental numbers. To use the macro
--              column mark a range of lines and then run the macro.
--
--  How To Run: All Zeus macros can be run using the macro execute menu
--              item or they can be bound to the keyboard or they can
--              be attached to the macro drop down or popup menus.
--
function key_macro()
  -- macro only works for read/write documents.
  if (is_read_only() == 1) or (is_document() == 0) then
    message("This macro can only be used with a writable document.")
    beep()
    return
  end

  local MARK_COLUMN = 0

  -- macro only works for column marked regions
  if is_marked() == 0 or get_marked_mode() ~= MARK_COLUMN then
    message("This macro needs a column marked area.")
    beep()
    return
  end

  -- the initial value
  local initial_value = "0"

  -- ask for a user supplied decimal number
  local value = user_input("Initial Value:", initial_value)

  if string.len(value) == 0 then
    message("Operation cancelled by user!")
    return
  end

  -- get the marked text details
  local top   = get_marked_top()
  local range = get_marked_bottom() - top + 1

  -- disable screen updates
  screen_update_disable()

  -- delete the marked area
  MarkDeleteEx()

  -- convert the string into a number
  local offset = string.format("%d", value)

  -- maximum number
  local max_number = range - 1 + offset

  -- the maximum length
  local max_length = string.len(string.format("%s", max_number)) - 1

  -- number the lines selected
  for i = 0, range - 1, 1 do
    -- build the number
    local number = string.format("%s", i + offset)

    -- save the current cursor
    cursor_save()

    for k = string.len(number), max_length, 1 do
      -- write out the padding
      write(" ")
    end

    -- write out the number
    write(number)

    -- restore cursor
    cursor_restore()

    -- move to the next line
    MoveLineDown()
  end

  -- restore screen updates
  screen_update_enable()
end

key_macro() -- run the macro

Code: Select all

--
--        Name: Numbers Hex Macro
--
--      Author: Jussi Jumppanen
--
--    Language: Lua Macro
--
-- Description: This simple Lua macro will replace a column marked area
--              with a series of incremental hex numbers. To use the macro
--              column mark a range of lines and then run the macro.
--
--  How To Run: All Zeus macros can be run using the macro execute menu
--              item or they can be bound to the keyboard or they can
--              be attached to the macro drop down or popup menus.
--
function key_macro()
  -- macro only works for read/write documents.
  if (is_read_only() == 1) or (is_document() == 0) then
    message("This macro can only be used with a writable document.")
    beep()
    return
  end

  local MARK_COLUMN = 0

  -- macro only works for column marked regions
  if is_marked() == 0 or get_marked_mode() ~= MARK_COLUMN then
    message("This macro needs a column marked area.")
    beep()
    return
  end

  -- the initial value
  local initial_value = "0"

  -- ask for a user supplied decimal number
  local value = user_input("Initial Value:", initial_value)

  if string.len(value) == 0 then
    message("Operation cancelled by user!")
    return
  end

  -- get the marked text details
  local top   = get_marked_top()
  local range = get_marked_bottom() - top + 1

  -- disable screen updates
  screen_update_disable()

  -- delete the marked area
  MarkDeleteEx()

  -- convert the string into a number
  local offset = string.format("%d", value)

  -- maximum number
  local max_number = range - 1 + offset

  -- the maximum length
  local max_length = string.len(string.format("%s", max_number)) - 1

  -- number the lines selected
  for i = 0, range - 1, 1 do
    -- build the number
    local number = string.format('%X', i + offset)

    -- save the current cursor
    cursor_save()

    -- write out the prefix
    write("0x")

    for k = string.len(number), max_length, 1 do
      -- write out the padding
      write("0")
    end

    -- write out the number
    write(number)

    -- restore cursor
    cursor_restore()

    -- move to the next line
    MoveLineDown()
  end

  -- restore screen updates
  screen_update_enable()
end

key_macro() -- run the macro

Code: Select all

--
--        Name: Numbers Mask Macro
--
--      Author: Jussi Jumppanen
--
--    Language: Lua Macro
--
-- Description: This simple Lua macro will replace a column marked area
--              with a series of incremental left shifted bit values. To
--              use the macro column mark a range of lines and then run
--              the macro.
--
--  How To Run: All Zeus macros can be run using the macro execute menu
--              item or they can be bound to the keyboard or they can
--              be attached to the macro drop down or popup menus.
--
function key_macro()
  -- macro only works for read/write documents.
  if (is_read_only() == 1) or (is_document() == 0) then
    message("This macro can only be used with a writable document.")
    beep()
    return
  end

  local MARK_COLUMN = 0

  -- macro only works for marked regions
  if is_marked() == 0 or get_marked_mode() ~= MARK_COLUMN then
    message("This macro needs a column marked area.")
    beep()
    return
  end

  -- the initial value
  local initial_value = "0"

  -- ask for a user supplied decimal number
  local value = user_input("Initial Value:", initial_value)

  if string.len(value) == 0 then
    message("Operation cancelled by user!")
    return
  end

  -- get the marked text details
  local top   = get_marked_top()
  local range = get_marked_bottom() - top + 1

  -- disable screen updates
  screen_update_disable()

  -- delete the marked area
  MarkDeleteEx()

  -- convert the string into a number
  local offset = string.format("%d", value)

  -- maximum number
  local max_number = 2 ^ range - 1 + offset

  -- the maximum length
  local max_length = string.len(string.format("%s", max_number)) - 1

  local x = 1

  -- number the lines selected
  for i = 0, range - 1, 1 do
    -- build the number
    local number = string.format('%X', 2 ^ i)

    -- save the current cursor
    cursor_save()

    -- write out the prefix
    write("0x")

    for k = string.len(number), max_length, 1 do
      -- write out the padding
      write("0")
    end

    -- write out the number
    write(number)

    -- restore cursor
    cursor_restore()

    -- move to the next line
    MoveLineDown()
  end

  -- restore screen updates
  screen_update_enable()
end

key_macro() -- run the macro
Post Reply