home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 283.lha / ReSource_v3.01_Demo / Reference.doc < prev    next >
Encoding:
Text File  |  1989-09-07  |  80.8 KB  |  1,854 lines

  1.                            Reference
  2.  
  3.                ReSource (C) 1988 Glen McDiarmid
  4.  
  5.      The documentation for ReSource is in two parts.  This is the
  6.      specifications for each function, in the order in which they
  7.      appear in the menus, the other is the introduction.
  8.  
  9.      PROJECT/Abort:
  10.      Use this to abort out of searches and macros.  This is the
  11.      only function in ReSource which should NOT be bound to a
  12.      different key.  It is permanently bound to right-Amiga A,
  13.      for "Abort".
  14.  
  15.      PROJECT/Open load file:
  16.      ReSource will request you for the name of a file to open.
  17.      When you select a file and press "return" or click on the
  18.      "okay" gadget, ReSource will attempt to load the file as an
  19.      executable, or "load" file.  If there is any debug symbols
  20.      in the executable, these will be stored, and will become
  21.      labels, at the appropriate places in the file.  Relocation
  22.      is performed where required.  If the file has overlays, the
  23.      load will fail, as overlays are NOT supported in this
  24.      release of ReSource.  For each debug symbol encountered, it
  25.      is attached to the appropriate byte in the file, and for
  26.      those debug symbols (labels) that are nine characters long,
  27.      and start with "lb", immediately followed by 'A', 'B', 'C',
  28.      'L', or 'W', the data type at the appropriate byte will be
  29.      set to Ascii, Bytes, Code, Longwords, or Words,
  30.      respectively.  Any BSS hunks or uninitialized data areas
  31.      found are expanded fully.  Where relocation has been
  32.      performed, you can have hilited, by selecting "DISPLAY/
  33.      Hiliting/Reloc32".  You are limited to files smaller than 16
  34.      Megabytes, and further limited by how much memory you have.
  35.      To disassemble a 100K file, you will require approximately
  36.      850K or memory, of which at least 400K must be continuous.
  37.      If the file has large BSS hunks, this will greatly increase
  38.      the memory requirements.  If you intend to load a file, do
  39.      some zaps, then save it and later run it, use "PROJECT/Open
  40.      binary file" instead, otherwise the file will get saved with
  41.      the loader information stripped out of it.
  42.  
  43.      PROJECT/Open binary file:
  44.      Similar to "PROJECT/Open load file", except that no
  45.      translation of the file is performed, the file is read in
  46.      "as is".  This allows you to see the loader information in
  47.      executables, object files, etc.  You can also load in text
  48.      files, data base files, in fact any file whatsoever, memory
  49.      permitting.  If you select "PROJECT/Open load file" for a
  50.      non-executable file, the file will be loaded as a binary
  51.      image instead, therefore "PROJECT/Open binary file" is not
  52.      really required except when you wish to force an "as is"
  53.      load for an executable file.  If you wish to do some zaps
  54.      (small modifications) to an executable file, without going
  55.      through the disassemble-edit-reassemble-link cycle, you
  56.      could load the file with this function, do the zaps (see
  57.      "SPECIAL FUNCTIONS/Zap"), then use "SAVE/Save binary image/
  58.      All" to save the modified program.
  59.  
  60.  
  61.  
  62.      PROJECT/Restore:
  63.      Useful only when the current buffer was loaded using
  64.      "PROJECT/Open binary file" or "PROJECT/Open load file".
  65.      This function will attempt to load a file, with the same
  66.      name as the current file, using the same function that
  67.      loaded the current file originally.  Do not use this
  68.      function if the current buffer was loaded from tracks, or
  69.      directly from memory.
  70.  
  71.      PROJECT/Dismble memory:
  72.      Disassembles a block of memory directly.  You will be
  73.      requested to supply a start and end address, for the memory
  74.      region to be disassembled.  The memory is NOT copied to a
  75.      seperate buffer, it is disassembled as-is, which means that
  76.      you if you hold the left mouse button down, in some areas,
  77.      you can see the memory being dynamically updated.  It also
  78.      means that you can make modifications directly to anywhere
  79.      in memory.  For each address that you supply, if the number
  80.      starts with a "$", the number is assumed to be hexadecimal.
  81.      If it starts with "%", it is assumed to be a binary number.
  82.      If neither, decimal is assumed.  If you wish to disassemble
  83.      a copy of a block of memory, disassemble the memory
  84.      directly, use the "PROJECT/Save .RS" function, and then use
  85.      "PROJECT/Open load file" to load the .RS file.
  86.  
  87.      PROJECT/Read tracks:
  88.      You will be requested to supply the parameters for the track
  89.      read.  The first parameter is either "DF0:", "DF1:", "DF2:",
  90.      or "DF3:" (lower case is okay).  This represents the drive
  91.      that holds the disk to be read from.  The second parameter
  92.      is the number of the cylinder to start reading from.  The
  93.      third parameter is the number of the last cylinder to be
  94.      read, plus one.  For example, if you wanted to read the
  95.      first cylinder from the disk in DF0:, the parameters would
  96.      be "DF0: 0 1".  The fourth parameter is optional, and
  97.      represents the number of extra sectors to read.  For
  98.      example, if you wished to read only the very first sector
  99.      from DF1:, the parameters would be "DF1: 0 0 1".  If you
  100.      wished to read the first sector from the directory track of
  101.      DF2:, the parameters would be "DF2: 40 40 1".  The fifth
  102.      parameter is also optional, and it represents the sector
  103.      offset, to start the read.  For example, if you wished to
  104.      read sectors nine and ten on cylinder 79 of the disk in
  105.      DF3:, the parameters would be "DF3: 79 79 2 9".
  106.  
  107.      PROJECT/Save .RS:
  108.      Use this function to save what you are currently working on,
  109.      regardless of how far you have gone in disassembling it.
  110.      EVERYTHING is saved, even your current position within the
  111.      file.  Actually, if you disassemble the Amiga operating
  112.      system directly, the .RS file that you create will NOT
  113.      contain the executable, therefore the .RS files can be
  114.      legally distributed, as they contain no copyrighted
  115.      material.  This is not the case for other .RS files, as the
  116.      executable will be saved along with other information.
  117.  
  118.      PROJECT/About:
  119.      Get information about the version number, author, agents,
  120.      and people that helped in the development of ReSource.
  121.  
  122.  
  123.  
  124.      PROJECT/Quit:
  125.      Asks you for confirmation, then quits without saving.  If
  126.      used within an executing macro, will NOT ask the operator
  127.      for confirmation.
  128.  
  129.      DISPLAY/Hiliting/None:
  130.      Use the hiliting functions to select attributes for which
  131.      the data with those attributes will be shown with the
  132.      foreground/background colors inverted.  Selecting this
  133.      function will disable all types of hiliting.
  134.  
  135.      DISPLAY/Hiliting/BSS hunks:
  136.      Data within BSS hunks and uninitialized data areas will be
  137.      hilited.
  138.  
  139.      DISPLAY/Hiliting/Data hunks:
  140.      Data within data hunks will be hilited.  Data hunks often
  141.      will contain only data constants, but may also contain code.
  142.  
  143.      DISPLAY/Hiliting/Code hunks:
  144.      Data within code hunks will be hilited.  Code hunks often
  145.      will contain only code, but may also contain data constants.
  146.  
  147.      DISPLAY/Hiliting/Chip load hunks:
  148.      Data within code or data hunks that MUST be loaded into chip
  149.      memory (only) will be hilited.  Data falling into this
  150.      category will usually be graphics or sound data, to be
  151.      accessed directly by the blitter, copper or DMA.
  152.  
  153.      DISPLAY/Hiliting/Fast load hunks:
  154.      Similar to the above function, except that the data is
  155.      forced to load into FAST memory only.
  156.  
  157.      DISPLAY/Hiliting/Reloc32:
  158.      Being able to see where relocation has been performed is
  159.      extremely useful when disassembling a program.  If it were
  160.      not for the relocation information, disassembling programs
  161.      would be many times harder.  ReSource makes use of this
  162.      information internally, especially when filling in data
  163.      types.
  164.  
  165.      DISPLAY/Hiliting/Symbol scan:
  166.      When you use the "LABELS/Create single/Label - fwd ref" or
  167.      "LABELS/Create multiple/All", all data scanned for
  168.      references are marked as being scanned.  Use this function
  169.      to hilite data falling into this category.
  170.  
  171.      DISPLAY/Hiliting/Data type uncertain:
  172.      For most labels that ReSource creates automatically, it is
  173.      certain of the data type that it assigns.  Sometimes though,
  174.      it cannot be 100% sure, and this function will hilite all
  175.      lines that fall into this category.
  176.  
  177.      DISPLAY/Hiliting/Data type known:
  178.      Similar to above function, only the lines where the ReSource
  179.      WAS certain of the data type, will be hilited.
  180.  
  181.  
  182.  
  183.      DISPLAY/Hiliting/Internally produced refs:
  184.      All lines which have a label that was created by ReSource,
  185.      rather than directly by the user, will be hilited.
  186.  
  187.      DISPLAY/Set data type:
  188.      When you are certain of which type of data that you are
  189.      looking at, select from one of the submenu items:  Code -
  190.      Ascii - Bytes - Words - Longwords
  191.  
  192.      DISPLAY/Set numeric base:
  193.      By default, all numbers are shown in hexadecimal (base 16).
  194.      You can change this to ASCII, DECIMAL or BINARY on any line
  195.      by selecting from the appropriate sub-menu item, or back to
  196.      HEXADECIMAL. It is possible to change the default to decimal
  197.      for numbers less than 16, or less than 10, using the decimal
  198.      conversion function (see below).
  199.  
  200.      DISPLAY/Decimal conversion:
  201.      By default, all numbers are shown in hexadecimal.  You can
  202.      have numbers less than 16, or numbers less than 10, shown in
  203.      decimal throughout the file, by selecting one of the
  204.      appropriate sub-menu items.
  205.  
  206.      DISPLAY/Blank lines/:
  207.      To better define subroutines, and logical blocks of code,
  208.      ReSource can insert a blank line after each conditional
  209.      branch or unconditional branch.
  210.  
  211.      DISPLAY/Cursor address/Relative:
  212.      The cursor address will be shown in hexadecimal in the title
  213.      bar, as an offset from the start of the file.
  214.  
  215.      DISPLAY/Cursor address/Absolute:
  216.      The cursor address will be shown in hexadecimal in the title
  217.      bar, as an absolute machine address.  This allows you to
  218.      quickly find the cursor position in memory with other
  219.      utilities, such as Metascope, perhaps to carry out large
  220.      scale modifications.
  221.  
  222.      DISPLAY/Titlebar info/Filename:
  223.      Information displayed in the title bar is in several fields.
  224.      The first, from the left, is the program name.  The second
  225.      is a decimal number, representing the cursor position,
  226.      relative to the file size, and is a percentage.  The next
  227.      field is a hexadecimal number, representing the cursor
  228.      position, and can be shown either as an offset from the
  229.      start of the file, or as an absolute memory location.  The
  230.      next field is the one that this function relates to.  By
  231.      selecting this function, the current file name will be
  232.      shown.  If user feedback is ON, informative messages will
  233.      sometimes be shown in this field also.
  234.  
  235.  
  236.  
  237.      DISPLAY/Titlebar info/Attributes:
  238.      The third field of the title bar will display information
  239.      representing the current attributes of the cursor byte.
  240.      This information is NOT required for general program usage,
  241.      and was originally included for debugging purposes only, and
  242.      left in to satisfy those that want to know how the
  243.      attributes table in ReSource works.  The attributes table is
  244.      four times the size of the current file, plus 16 bytes.  It
  245.      is used internally as a large bitmap, to store information
  246.      about each and every byte in the current file.  Because it
  247.      is four times the size, 32 bits are available for each byte
  248.      in the current file.  For each character in the string
  249.      displayed, if lower case, the bit that that character
  250.      represents is clear, if upper case, the bit is set.  Going
  251.      from the left, the bit definitions are:
  252.  
  253.  
  254.  
  255.      S  : Start of a line of code/data
  256.      B  : Bss hunk
  257.      D  : Data hunk
  258.      C  : Code hunk
  259.      R  : Reloc32 area
  260.      F  : First byte of reloc32 area
  261.      L  : Label attached to this byte
  262.      S  : Symbol attached to this byte
  263.      F  : Full-line comment attached to this byte
  264.      E  : End-of-line comment attached to this byte
  265.      P  : Parsed previously (symbol scan)
  266.      I  : Internally referenced
  267.      L  : Low priority.  The data type has been set, but can be
  268.           overridden by internal routines.  The data type can
  269.           always be overridden by the user.  This bit is generally
  270.           set when ReSource has to decide on a data type to set
  271.           for a byte, but when it does so, it wasn't really sure
  272.           that it was correct.
  273.      A  : Show numeric operands as ASCII if possible.  Decimal
  274.           conversion is on a higher priority than this bit.
  275.      B  : Show numeric operands as Binary.  Decimal conversion is
  276.           on a higher priority than this bit.
  277.      D  : Show numeric operands as Decimal if possible.
  278.      F  : Data in this hunk is to be loaded into FAST memory only.
  279.      C  : Data in this hunk is to be loaded into CHIP memory only.
  280.        (next 4 bits are reserved for future use)
  281.      U  : User should check the data type that has been set, as
  282.           ReSource wasn't really sure that it chose the correct
  283.           one.  Use "CURSOR/Relative/Next unsure D/T" to find the
  284.           next occurrence, if the cursor is already over one when
  285.           you use that function, it will clear this bit.
  286.      H  : High priority.  The data type has been set either by
  287.           the user, of by ReSource, when it was quite certain
  288.           that it set the data type correctly.  This does not
  289.           mean that it cannot make mistakes, it simply means
  290.           that if some operation attempts to set the data type
  291.           for this byte, it will NOT override the currently set
  292.           data type.  This does not stop the user from
  293.           redefining the data type, however.
  294.      C  : Code.
  295.      dddd : Data type hasn't been set yet
  296.      ddDd : Data type is bytes
  297.      dDdd : Data type is words
  298.      dDDd : Data type is longwords
  299.      Dddd : Data type is bytes, within a BSS hunk or
  300.             uninitialized data area.
  301.      DddD : Data type is ASCII
  302.      DDDd : Data type is words, within a BSS hunk or
  303.             uninitialized data area.
  304.      DDDD : Data type is longwords, within a BSS hunk
  305.             or uninitialized data area.
  306.  
  307.  
  308.  
  309.      DISPLAY/Titlebar info/Accumulator:
  310.      The third field of the title bar will display information
  311.      representing the contents of the ACCUMULATOR.  This is a 240
  312.      byte buffer, used as a central number and string processor,
  313.      which will find most of its uses within macros.  Only the
  314.      first 30 characters or so can be shown in the title bar,
  315.      however often the string will not be any longer than that
  316.      anyway.  For more information on the accumulator, see the
  317.      functions within the STRINGS menu.
  318.  
  319.      DISPLAY/Wrap/ON:
  320.      Any lines longer than the current display width will be
  321.      shown on several lines, much the same way that text editors
  322.      allow you to use word wrap.
  323.  
  324.      DISPLAY/Wrap/OFF:
  325.      Any lines longer than the current display width will be
  326.      truncated.
  327.  
  328.      DISPLAY/Block-fill:
  329.      Some background information is required here:  ReSource
  330.      internally keeps a stack of cursor locations.  The current
  331.      cursor location is "pushed" onto this stack with the
  332.      following functions:
  333.          CURSOR/Remember
  334.          CURSOR/Absolute/End of file
  335.          CURSOR/Absolute/Start of file
  336.          CURSOR/Absolute/Forward reference
  337.          CURSOR/Absolute/Second forward reference
  338.          CURSOR/Absolute/Backward reference
  339.  
  340.      To "pop" a cursor location, you use the function "CURSOR/
  341.      Absolute/Previous location".  The stack is cleared when you
  342.      load a new file.  The stack is NOT stored within .RS files.
  343.  
  344.      Block-fill uses the cursor location stored on the top of
  345.      this cursor location stack, finds out what the data type at
  346.      that location has been set to, and copies that data type to
  347.      all locations between there and the current cursor location.
  348.      It has several disadvantages, and should be used only when
  349.      special display effects are required.  For example, if you
  350.      wish to display a file as bytes throughout, even though much
  351.      of it is actually code or ascii, this function may come in
  352.      handy.
  353.  
  354.  
  355.  
  356.      DISPLAY/Fill-in data types:
  357.      This function has several uses, and will be one of the most-
  358.      used functions.  To understand what this function does, you
  359.      will need to know how ReSource keeps track of data types.
  360.      Suffice it to say, when you set the data type anywhere
  361.      within a file, that data type is immediately echoed forward,
  362.      to a maximum of several hundred bytes, but will not change
  363.      any other places where the data type has already been set,
  364.      or where there is a label on a line.  Where there is large
  365.      areas of a file where the data type has not been set, this
  366.      function attempts to set the data type where appropriate.
  367.      All of the above is done in the first pass.  On the second
  368.      pass, the length of each line is set, this is particularly
  369.      useful where there is large areas of ASCII.  This function
  370.      should always be used before saving a file as source code.
  371.  
  372.      DISPLAY/Fill-in D/T Fwd:
  373.      Similar to the above function, except that both passes will
  374.      start from the current cursor location, and NOT the start of
  375.      the file.
  376.  
  377.      DISPLAY/Set counter:
  378.      If cursor address has been set to "relative", the current
  379.      offset in a file is shown in the title bar, in hexadecimal.
  380.      This is normally zero at the start of the file.  You can
  381.      change this, so that it is zero at somewhere other than the
  382.      start of the file, by using this function.  You may use this
  383.      function to measure the size of a hunk, for example.  To
  384.      "reset" the counter, use the function "DISPLAY/Reset
  385.      counter".  If cursor address has been set to "absolute", it
  386.      will correctly display the current address of the cursor,
  387.      regardless of this function.
  388.  
  389.      DISPLAY/Reset counter:
  390.      Similar to the above function, except that the cursor
  391.      position is assumed to be at the start of the file.
  392.  
  393.      DISPLAY/Flip case - code:
  394.      If code is currently being displayed using upper case, it
  395.      will be instead shown in lower case, and vice versa.  Note
  396.      that all searches are case sensitive.
  397.  
  398.      DISPLAY/Flip case - data:
  399.      If data is currently being displayed using upper case, it
  400.      will be instead be shown in lower case, and vice versa.
  401.  
  402.      SYMBOLS:
  403.      Some background information is required here:  When you
  404.      assemble a program, you will use symbols such as
  405.      "_LVOAllocMem", "MEMF_CHIP", "Open", "MODE_OLDFILE", etc.
  406.      When you disassemble a program, you see only the numbers
  407.      that equate to the symbols that you used.  To convert these
  408.      numbers back into strings, you basically tell ReSource what
  409.      the "symbol base" is, and it will do the rest.  For example,
  410.      in the following line:
  411.               JSR    -$0228(A6)
  412.  
  413.  
  414.  
  415.      the number "-$0228" could be interpreted in many different
  416.      ways.  If you happened to know that the A6 register at that
  417.      point in the program was pointing to the Exec library base,
  418.      you should interpret that line as:
  419.  
  420.               JSR    _LVOOpenLibrary(A6)
  421.  
  422.      To make ReSource do this automatically, you would scroll so
  423.      that this line became the cursor line, and then select the
  424.      function "SYMBOLS 1/Libraries/Exec", or "SYMBOLS 2/E-G/Exec
  425.      library.  There are hundreds of other symbol bases that are
  426.      available, including libraries, devices, structures,
  427.      parameters, and error code names.  By default, the number
  428.      used to find the string will come from the cursor line.  You
  429.      can instead have ReSource get the number from the
  430.      accumulator, by selecting "SYMBOLS 1/Object/Accumulator".
  431.      In this case, the output string will be placed back into the
  432.      accumulator.  Examine the following line of code:
  433.  
  434.               MOVE.L  #-$0228,$0022(A6)
  435.  
  436.      If you wished to create a symbol for the second number in
  437.      this line ("$0022"), you should first select "SYMBOLS 1/
  438.      Select field/Second".  The setting of "Select field" will go
  439.      back to "First" with virtually any function you use,
  440.      therefore when creating a symbol for the second field in a
  441.      line of code, use "SYMBOLS 1/Select field/Second" only just
  442.      prior to actually creating the symbol.  Some special symbol
  443.      bases are in the "SYMBOLS 1" menu, the rest are in
  444.      alphabetical order in the "SYMBOLS 2" menu.
  445.  
  446.      CURSOR/Remember:
  447.      ReSource keeps a stack of cursor locations internally.
  448.      Using this function will "push" the current cursor location
  449.      onto the top of this stack.  Other functions that call this
  450.      function are:
  451.  
  452.          CURSOR/Remember
  453.          CURSOR/Absolute/End of file
  454.          CURSOR/Absolute/Start of file
  455.          CURSOR/Absolute/Forward reference
  456.          CURSOR/Absolute/Second forward reference
  457.          CURSOR/Absolute/Backward reference
  458.  
  459.      To "pop" a cursor location, you use the function "CURSOR/
  460.      Absolute/Previous locations".  The stack is cleared when you
  461.      load a new file, or when you select "CURSOR/Clear loc
  462.      stack".  The stack is NOT stored within .RS files.
  463.  
  464.      CURSOR/Clear loc stack:
  465.      See above function.
  466.  
  467.      CURSOR/Relative/Next byte:
  468.      The cursor location is incremented.  If at the last location
  469.      within the current file, a macro "fail" will result.
  470.  
  471.      CURSOR/Relative/Previous byte:
  472.      The cursor location is decremented.  If at the first
  473.      location within the current file, a macro "fail" will result.
  474.  
  475.  
  476.  
  477.      CURSOR/Relative/Next line:
  478.      Scroll forward one line of code/data.  If at the last line
  479.      of code/data in the file already, a macro "fail" will
  480.      result.  The speed at which this scroll is done is set by
  481.      the "CURSOR/Scrolling speed" settings.
  482.  
  483.      CURSOR/Relative/Previous line:
  484.      Scroll backwards one line of code/data.  If at the first
  485.      line of code/data in the file already, a macro "fail" will
  486.      result.  The speed at which this scroll is done is set by
  487.      the "CURSOR/Scrolling speed" settings.
  488.  
  489.      CURSOR/Relative/Next label:
  490.      Move cursor to the next location that has a label attached
  491.      to it.  If one cannot be found, a macro "fail" will result.
  492.  
  493.      CURSOR/Relative/Previous label:
  494.      Move cursor to the previous location that has a label
  495.      attached to it.  If one cannot be found, the start of the
  496.      file will become the new cursor position.
  497.  
  498.      CURSOR/Relative/Next symbol:
  499.      Move cursor to the next location that has a symbol attached
  500.      to it.  If one cannot be found, a macro "fail" will result.
  501.      Note that this location may be in the middle of a line of
  502.      code.  Where the actual operand is stored, that will become
  503.      the new cursor position.
  504.  
  505.      CURSOR/Relative/Previous symbol:
  506.      Move cursor to the previous location that has a symbol
  507.      attached to it.  If one cannot be found, the start of the
  508.      file will become the new cursor position.  Note that this
  509.      location may be in the middle of a line of code.  Where the
  510.      actual operand is stored, that will become the new cursor
  511.      position.
  512.  
  513.      CURSOR/Relative/Next section:
  514.      Move cursor to the start of the next section (hunk).  If
  515.      this is the last section in the file, a macro "fail" will
  516.      result.
  517.  
  518.      CURSOR/Relative/Previous section:
  519.      Move cursor to the start of this section (hunk).  If already
  520.      at the start of a section, move to the start of the previous
  521.      section.
  522.  
  523.      CURSOR/Relative/Next reloc32:
  524.      Move cursor to the start of the next relocated longword.  If
  525.      one cannot be found, a macro "fail" will result.  Note that
  526.      this may be in the middle of a line of code.
  527.  
  528.      CURSOR/Relative/Previous reloc32:
  529.      Move cursor to the start of the previous relocated longword.
  530.      Note that this may be in the middle of a line of code.  If
  531.      one cannot be found, the start of the file will become the
  532.      new cursor position.
  533.  
  534.      CURSOR/Relative/Next page:
  535.      Move cursor forward 24 lines.
  536.  
  537.  
  538.  
  539.      CURSOR/Relative/Previous page:
  540.      Move cursor backwards 24 lines.
  541.  
  542.      CURSOR/Relative/Skip forward:
  543.      Move cursor forward approximately 4K.
  544.  
  545.      CURSOR/Relative/Skip backward:
  546.      Move cursor backward approximately 4K.
  547.  
  548.      CURSOR/Relative/Next unparsed code:
  549.      Move cursor forward to the next location that satisfies both
  550.      of the following conditions:  1> The data type has been set
  551.      to CODE 2> This location has NOT been scanned for forward
  552.      references previously.  This function is useful when
  553.      combined with the "LABELS/Create multiple/All" function.
  554.  
  555.      CURSOR/Relative/Next D/T change:
  556.      Move cursor to the next location that has it's data type set
  557.      differently to the current cursor location.
  558.  
  559.      CURSOR/Relative/Previous D/T change:
  560.      Move cursor to the previous location that has it's data type set
  561.      differently to the current cursor location.
  562.  
  563.      CURSOR/Relative/Next backward reference:
  564.      Once you have used the "CURSOR/Absolute/Backwards reference"
  565.      function, you can use this function to get to other backward
  566.      references.
  567.  
  568.      CURSOR/Absolute/End of file:
  569.      Move cursor to the start of the last line of the file.
  570.  
  571.      CURSOR/Absolute/Start of file:
  572.      Move cursor to the start of the file.
  573.  
  574.      CURSOR/Absolute/Forward reference:
  575.      If there is a reference to a position in the current file,
  576.      within the current line of code, move cursor to the location
  577.      being referenced.  If there is two forward references within
  578.      the current line, the first is used.
  579.  
  580.      CURSOR/Absolute/Second forward reference:
  581.      If there is two references to a position with the current
  582.      file, within the current line of code, move cursor to the
  583.      second location being referenced.  If there is only one
  584.      forward reference, a macro "fail" will result.
  585.  
  586.      CURSOR/Absolute/Backward reference:
  587.      Starting from the start of the file, search for references
  588.      to the cursor location.  If there is several references, you
  589.      can use "CURSOR/Relative/Next backward reference" to get to
  590.      successive references.
  591.  
  592.      CURSOR/Absolute/Previous location:
  593.      "Pop" the cursor location from the top of the cursor
  594.      location stack.  If the stack is empty, a macro "fail" will
  595.      result.
  596.  
  597.  
  598.  
  599.      CURSOR/Absolute/Specify offset:
  600.      You will be requested to supply an offset representing how
  601.      far from the start of the file, the cursor location should
  602.      be.  The number may be specified in hexadecimal, decimal, or
  603.      binary.  If hexadecimal, the string must start with "$", if
  604.      binary, it must start with "%".  If the given offset is not
  605.      within the current file, this function will fail.
  606.  
  607.      CURSOR/Absolute/Specify label:
  608.      You will be requested to supply the name of a label.  If the
  609.      label is used within the current file, where it is will
  610.      become the new cursor location.  Note that this may be in
  611.      the middle of a line of code.
  612.  
  613.      CURSOR/Absolute/Specify symbol:
  614.      You will be requested to supply the name of a symbol.  If
  615.      the symbol is used within the current file, where it is will
  616.      become the new cursor location.  Note that this may be in
  617.      the middle of a line of code.
  618.  
  619.      CURSOR/Absolute/Specify percentage:
  620.      You will be requested to supply a number between 0 and 99,
  621.      representing a percentage into the current file, where the
  622.      cursor will be positioned.  Note that this may be in the
  623.      middle of a line of code.  The actual positioning will not
  624.      be exact, it will be generally be placed a little before the
  625.      required percentage.
  626.  
  627.      CURSOR/Copy/:
  628.      Some background information is required here:
  629.      ReSource has 3 internal cursor "clipboards".  You can copy a
  630.      cursor location to any of these, and then later "paste" one
  631.      of these locations, which in effect moves the cursor to
  632.      where it was when you used the "copy" function.  Also, you
  633.      can swap cursor locations, between the current, and a stored
  634.      cursor location.  The contents of these cursor "clipboards"
  635.      are cleared when you load a new file, or restore the current
  636.      one.
  637.  
  638.      CURSOR/Paste/:
  639.      See "CURSOR/Copy/".
  640.  
  641.      CURSOR/Swap/:
  642.      See "CURSOR/Copy/".
  643.  
  644.      CURSOR/Scrolling speed/Very fast:
  645.      Whenever you use either "CURSOR/Relative/Next line" or
  646.      "CURSOR/Relative/Previous line" functions, the text on the
  647.      display will move 8 display lines (NOT text lines) at a
  648.      time.  This is how most text editors, word processors, etc.,
  649.      scroll text.
  650.  
  651.      CURSOR/Scrolling speed/Fast:
  652.      Whenever you use either "CURSOR/Relative/Next line" or
  653.      "CURSOR/Relative/Previous line" functions, the text on the
  654.      display will move 4 display lines (NOT text lines) at a time.
  655.  
  656.  
  657.  
  658.      CURSOR/Scrolling speed/Normal:
  659.      Whenever you use either "CURSOR/Relative/Next line" or
  660.      "CURSOR/Relative/Previous line" functions, the text on the
  661.      display will move 2 display lines (NOT text lines) at a
  662.      time.  This will give reasonably smooth scrolling, allowing
  663.      you to read text fairly easily WHILE it is scrolling.
  664.  
  665.      CURSOR/Scrolling speed/Slow:
  666.      Whenever you use either "CURSOR/Relative/Next line" or
  667.      "CURSOR/Relative/Previous line" functions, the text on the
  668.      display will move 1 display line (NOT text line) at a time.
  669.      This gives extremely smooth scrolling, allowing you to
  670.      easily read text WHILE it is scrolling.
  671.  
  672.      CURSOR/Scrolling speed/Very Slow:
  673.      Whenever you use either "CURSOR/Relative/Next line" or
  674.      "CURSOR/Relative/Previous line" functions, the text on the
  675.      display will move 1 display lines (NOT text line) at a time,
  676.      with a short delay after each move.  This gives
  677.      exceptionally smooth scrolling, and is excellent for slowly
  678.      browsing through a file.
  679.  
  680.      CURSOR/Normal search/Set search string:
  681.      You will be requested to supply a string, which will be used
  682.      in future searches.  Like all other string requests, you may
  683.      instead supply a two byte string, starting with escape, and
  684.      followed by either another escape character, or a letter a-
  685.      m, representing a string buffer where the string should be
  686.      copied from.  If you supply escape-escape as the string, the
  687.      string currently in the accumulator will be copied into the
  688.      search string buffer.
  689.  
  690.      CURSOR/Normal search/Find next occurrence:
  691.      Using the currently defined search string, search forward
  692.      for the next occurrence of that string.  The string is
  693.      searched for as-is, including question marks, asterisks,
  694.      etc., which in a pattern search take on special meaning.
  695.  
  696.      CURSOR/Normal search/Find previous occurrence:
  697.      Similar to the above function, except that the search
  698.      proceeds backwards.
  699.  
  700.      CURSOR/Normal search/Find nearest occurrence:
  701.      Similar to the above function, except that the search
  702.      proceeds in both directions at the same time.  The search is
  703.      done line-for-line, and the first line that contains the
  704.      search string, whether it be before the current cursor or
  705.      after, will become the new cursor location.  This function
  706.      is handy when you know that a string is somewhere close, but
  707.      you're not sure whether it may be just past, or just before,
  708.      the current cursor location.
  709.  
  710.      CURSOR/Normal search/Search this line:
  711.      This function is useful in macros, for determining whether a
  712.      given string is within the current line.  If the search
  713.      string is not found in the current line, a macro "fail" will
  714.      result, and unless your macro has prepared for this
  715.      condition with an "End conditional" directive, the macro
  716.      will abort.
  717.  
  718.  
  719.  
  720.      CURSOR/Normal search/Search accumulator:
  721.      Similar to the above function, except that the accumulator
  722.      is searched.
  723.  
  724.      CURSOR/Pattern search/:
  725.      These functions are identical to their counterparts above,
  726.      except that normal ARP wildcard characters take on their
  727.      true meaning:
  728.      ************************************************************
  729.                         ARP and Wildcards
  730.  
  731.      ARP has an extensive set of wildcards, and most ARP programs
  732.      allow them to be used.  ARP supports ALL of the AmigaDOS set
  733.      of wildcards, as well as the more standard Unix* style of
  734.      wildcards.  ARP supports the following wildcard characters,
  735.      note that these are valid inside or out of quotes:
  736.  
  737.  
  738.           (a|b|c)   Will match one of a, b or c.
  739.                     These can be patterns.
  740.  
  741.           ? Matches any single character
  742.           #<pat>   Pattern repeated 0 or more times,
  743.                    in particular, #? matches anything.
  744.  
  745.           [char]   A set of characters, for example,
  746.                    [abc] or [a..c] specify the same set.
  747.  
  748.           [^char]   Match everything but this set of characters.
  749.  
  750.           *         0 or more occurrences of any character.
  751.  
  752.  
  753.      These can be used in combination, of course, so that *.(c|h)
  754.      or *.[ch] will match any filenames ending in either .c or .h
  755.      preceded by any number of characters, including no
  756.      characters.
  757.  
  758.      ***********************************************************
  759.  
  760.      LABELS/Create single/End-of-line comment:
  761.      You will be requested to supply a string of less than 240
  762.      characters, which will become a comment to be attached to
  763.      the end of the cursor line.  Only one end-of-line comment is
  764.      allowed per line, if you create one on a line that has
  765.      already got one, it will replace the old comment.
  766.  
  767.  
  768.  
  769.      LABELS/Create single/Full-line comment:
  770.      You will be requested to supply a string of less than 240
  771.      characters, which will become a comment to be attached to
  772.      the start of the cursor line.  Multiple full-line comments
  773.      are allowed, and successive comments will be displayed AFTER
  774.      previously-defined full-line comments.  Normally, full-line
  775.      comments will be displayed starting with a semicolon (";").
  776.      However, if you start the string with a semicolon, the logic
  777.      is reversed, and it becomes an extra line of code/data.
  778.      Thus, you can insert extra lines of code/data, even before
  779.      saving the source code to a text file.  By creating a label
  780.      that starts with a semicolon for a given line, when that
  781.      code is assembled, that line of code/data is effectively
  782.      treated as a comment only, therefore you can both insert and
  783.      effectively remove code/data using ReSource, during the
  784.      disassembly process.
  785.  
  786.      LABELS/Create single/Label:
  787.      You will be requested to supply a string of less than 240
  788.      characters, which will become a label to be attached to the
  789.      cursor line.  Duplicate labels are NOT allowed, unless they
  790.      start with a semicolon (";") or an asterisk ("*").  In this
  791.      case, they effectively make the rest of the line a comment.
  792.      If this function is used within a macro, duplicate labels
  793.      WILL be accepted.
  794.  
  795.      LABELS/Create single/Label - fwd ref:
  796.      The current line of code will be searched for references to
  797.      positions within the current file.  If any are found,
  798.      ReSource will make a decision on which type of data is at
  799.      the position referenced, it will then set the data type
  800.      (unless it has already been set), and create a label at that
  801.      offset (unless a label has already been defined for that
  802.      address).  This new label will be immediately used for all
  803.      references to that location, which of course includes the
  804.      reference within the current line.  If there is no
  805.      references, or there is a reference, but it is outside of
  806.      the range of the current file, then this function will do
  807.      nothing.  Normally, this function will only be used within
  808.      macros, as it is easier and quicker to hold down the left
  809.      Amiga key, while holding down the left mouse button,
  810.      possibly while scrolling also.
  811.  
  812.      LABELS/Create single/Symbol:
  813.      You will be requested to supply a string, which will replace
  814.      the first encountered number in the current line.  For
  815.      example, if you supplied the string "MyColdStartData", the
  816.      following line:
  817.  
  818.               MOVE.L   D0,4(A0)
  819.      would become:
  820.  
  821.               MOVE.L   D0,MyColdStartData(A0)
  822.      If there is more than one number mentioned in the current
  823.      line, the first is used.  If there is no numbers in the
  824.      current line, a macro "fail" will result.
  825.  
  826.  
  827.  
  828.      LABELS/Create single/Symbol - dest:
  829.      Similar to the above function, except that the second number
  830.      in the current line will be replaced with the string that
  831.      you supply.  If there is only one number, or if there is no
  832.      numbers in the current line, a macro "fail" will result.
  833.  
  834.      LABELS/Edit single/:
  835.      Similar to their above counterparts, except that if there is
  836.      already a label/symbol/comment defined, you will have the
  837.      chance to edit that string, rather than type the entire new
  838.      string into the requester.  Like all requests for a string,
  839.      you can use indirection, so that ReSource gets the string
  840.      from either the accumulator, or from one the buffers A-M.
  841.      See the section on the STRINGS menu for more details.
  842.  
  843.      LABELS/Replace single/Label:
  844.      Create a "shop" label at the cursor position.
  845.  
  846.      LABELS/Remove single/Label:
  847.      Removes the label from the cursor position.
  848.  
  849.      LABELS/Remove single/Symbol:
  850.      Removes any symbols in the current line.
  851.  
  852.      LABELS/Remove single/End-of-line comment:
  853.      Removes the end-of-line comment from the current line, if
  854.      any.
  855.  
  856.      LABELS/Remove single/Full-line comment:
  857.      Removes the first full-line comment attached to the current
  858.      line.
  859.  
  860.      LABELS/Remove single/All:
  861.      Removes any label, symbols, comments from the current line.
  862.      Also, the data type for the current cursor position is set
  863.      to 'undefined', and the 'start of line' bit is cleared.
  864.  
  865.      LABELS/Create multiple/Reloc32:
  866.      For each reloc32 pointer within the current file, determine
  867.      the data type being referenced, set the data type, and
  868.      create a label at that address.  This function should be
  869.      used with caution, as when it makes a decision on the data
  870.      type, it does not have the same information available as
  871.      when creating labels normally.  This function should be most
  872.      useful after creating labels from all code in a program,
  873.      where there is one or more large tables of pointers.
  874.  
  875.      LABELS/Create multiple/All:
  876.      Starting at the current address, the "LABELS/Create single/
  877.      Address symbol dest" function is executed, and if ReSource
  878.      thinks that there was valid code in the current line, the
  879.      "CURSOR/Relative/Next line" function is executed, and the
  880.      entire function loops, otherwise the "PROJECT/-=Abort=-"
  881.      function is executed.  This function can make the
  882.      disassembly process very fast, the disadvantage being that
  883.      there is a very slight chance that what ReSource thinks is
  884.      valid code, is really ascii, and invalid labels will be
  885.      created.
  886.  
  887.  
  888.  
  889.      LOCAL MACROS/ and GLOBAL MACROS/:
  890.      Much background information is required here:
  891.      The macro facilities available in ReSource are quite
  892.      extensive.  There is a maximum of 38 macros available 'on
  893.      tap'.  These are divided into two banks of 19 macros, called
  894.      "LOCAL MACROS" and "GLOBAL MACROS".  The idea here is that
  895.      the 'local' macros are for your own personal use, and global
  896.      macros are meant to be distributed to others.  Therefore,
  897.      you can load a 'global macros' file, and use them, but still
  898.      have access to your own personal macros.  The 19th local
  899.      macro is special, in that it is executed when you first run
  900.      ReSource, after the first file is loaded.  This macro will
  901.      often contain functions to set the various options to your
  902.      personal tastes, but may contain anything you care to put
  903.      into it.
  904.  
  905.      When you first create a macro, you will be requested to
  906.      supply a name for the macro that you are just about to
  907.      create.  This name will be shown in the menus immediately
  908.      after, and if you save that bank of macros to a file, the
  909.      names of the macros are also saved.  The functions "LOCAL
  910.      MACROS/Execute/-unused-" and "GLOBAL MACROS/Execute/-unused-
  911.      " are used to give each bank of macros a name.  These names
  912.      are also saved when you save a bank of macros, and when you
  913.      load the macro file later, these names will immediately
  914.      appear in the menus, making it much easier to remember what
  915.      previously created macros did.
  916.  
  917.      The size of a macro is determined only by how much memory
  918.      you have.  To create a macro, select one of the sub-menu
  919.      items in "LOCAL MACROS/Create/End/" or "GLOBAL MACROS/
  920.      Create/End/".  If the current name for the macro is "-empty-
  921.      ", you will be requested to supply a new name for the macro.
  922.      If you create a macro of zero length, the name for that
  923.      macro will go back to being "-empty-".  To execute the
  924.      macro, simply select the appropriate sub-menu item in "LOCAL
  925.      MACROS/Execute/" or "LOCAL MACROS/Execute/".
  926.  
  927.      You have control over the speed at which macros execute.  If
  928.      you select "LOCAL MACROS/Execution speed/Fast", the macro
  929.      will execute with no delays in between executing functions.
  930.      The display will be refreshed (updated) after each and every
  931.      function executed.  If you want the macro to execute without
  932.      the display being refreshed, select "LOCAL MACROS/Execution
  933.      speed/Very fast".  If you select "LOCAL MACROS/Execution
  934.      speed/Slow", the display will be refreshed after each
  935.      function executed, and there will be a delay for
  936.      approximately one tenth of a second also.  By selecting
  937.      "LOCAL MACROS/Execution speed/Very slow", this delay will be
  938.      increased to around one half second.  To have complete
  939.      control over execution of the macro, select "LOCAL MACROS/
  940.      Execution speed/Wait on mouse".  With this selected, you
  941.      must press and release the left mouse button for each and
  942.      every function within the macro to be executed.  This is an
  943.      excellent way to find bugs in a macro that you (or someone
  944.      else) has created.
  945.  
  946.      Macros may be nested within macros, provided that the
  947.      nesting depth does not exceed (approx.) 30.
  948.  
  949.  
  950.  
  951.      While you are creating a macro, you might find that you have
  952.      to execute some functions to continue the macro definition,
  953.      but you don't want them included in the macro itself.  When
  954.      this occurs, select "LOCAL MACROS/Suspend learn/suspend",
  955.      select the various functions that need to be done, then
  956.      select "LOCAL MACROS/Suspend learn/Normal" to continue the
  957.      macro definition.
  958.  
  959.      There are many functions that will make a macro fail, when
  960.      it is executed.  For example, using a cursor movement
  961.      function that would place the cursor outside of the current
  962.      file, will cause a macro fail.  A failed search will also
  963.      cause a macro 'fail'.  When executing a macro, if
  964.      ReSource detects a macro fail, it searches forward in the
  965.      macro definition for a "Conditional end" directive.  Is none
  966.      is found, all macro processing aborts immediately.  If one
  967.      IS found, macro processing continues normally from that
  968.      point in the macro definition.  If, while searching for a
  969.      "End conditional" directive, a "Start conditional" directive
  970.      is found, the next "End conditional" is skipped.  Thus,
  971.      conditional macro processing may be nested.
  972.  
  973.      There is five macro labels available.  These are placed into
  974.      the macro definition, and you can insert "goto previous
  975.      macro label" and "goto next macro label" directives into the
  976.      macro definition, which when found, will start a search
  977.      either forwards or backwards, for the appropriate macro
  978.      label.  When found, macro processing will proceed normally
  979.      from that point forward.  Thus, you can loop a macro.  If a
  980.      search is made backwards for a macro label that is non-
  981.      existent, macro processing will continue from the start of
  982.      the macro definition.  If a search is made forwards for a
  983.      macro label that is non-existent, the macro will exit,
  984.      possibly to another macro that called this one.  For
  985.      example, the following macro will continuously scroll
  986.      forward to the end of the file, then scroll backwards, one
  987.      line at a time, to the start of the file, then forwards to
  988.      the end of the file again, etc., indefinitely, stopping only
  989.      when you select "PROJECT/Abort":
  990.  
  991.  
  992.      LOCAL MACROS/Set macro label/#1
  993.      CURSOR/Relative/Next line
  994.      LOCAL MACROS/Previous macro label/#1
  995.      LOCAL MACROS/Directives/End conditional
  996.      LOCAL MACROS/Set macro label/#2
  997.      CURSOR/Relative/Previous line
  998.      LOCAL MACROS/Previous macro label/#2
  999.      LOCAL MACROS/Directives/End conditional
  1000.      LOCAL MACROS/Previous macro label/#1
  1001.  
  1002.      Notice that the directive "Start conditional" was not
  1003.      required in the above example, as conditional sections were
  1004.      NOT nested.
  1005.  
  1006.  
  1007.  
  1008.      When you are creating a macro, and you are requested for a
  1009.      string (even the name of a file to load), if you select
  1010.      "okay" or press return after supplying a string, the string
  1011.      will be stored in the macro definition, and will be used
  1012.      when the macro is later executed, unless at the time that
  1013.      you execute the macro, "LOCAL MACROS/Interactive/" has been
  1014.      set to "ON".  In this case, you will be prompted for any
  1015.      strings that are requested during the execution of the
  1016.      macro.  Normally, this will not be required, but it does
  1017.      give you more control over an executing macro, especially if
  1018.      it was created by someone other than yourself.
  1019.  
  1020.      If, when creating a macro, you are requested for a string,
  1021.      and you want to force the user to input a string during the
  1022.      execution of the macro, you should select the "cancel"
  1023.      gadget in the string requester.  Any string that you typed
  1024.      into the requester will still be used while creating the
  1025.      macro, however when the macro is executed, the user is
  1026.      forced to input a new string each time, even though
  1027.      'Interactive' may be set to "OFF".  Instead of actually
  1028.      supplying a string literal to a string requester, you may
  1029.      instead use indirection, to force the string to get copied
  1030.      from either the accumulator, or from one of the buffers A-M.
  1031.      For example, if the accumulator contains the string "MOVE",
  1032.      and you wish to create a label called "MOVE", select
  1033.      "LABELS/Create single/Label", and when requested for the
  1034.      label name, press the escape key twice, and select the
  1035.      "okay" gadget, or press "return".  If the required string
  1036.      was in buffer C, instead of pressing the escape key twice,
  1037.      you would press it once, followed immediately by "C".
  1038.  
  1039.      Buffers A-M are simply 13 seperate 240-byte string buffers,
  1040.      which you can store any strings in that you like.  A more
  1041.      appropriate name might be 'text registers'.  Buffers L and M
  1042.      are special, in that if you select "STRINGS/Define string/
  1043.      M", if buffer L is not empty, the string contained in it
  1044.      will be used as the prompt, in the requester.  This is handy
  1045.      during macros, where you want to get a string from the user,
  1046.      the user can see what the string is required for.
  1047.  
  1048.  
  1049.  
  1050.      Normally, every function that you put into a macro
  1051.      definition, will be executed.  This does not have to be the
  1052.      case always.  The "LOCAL MACROS/Commentary/" functions set
  1053.      the commentary level.  When creating a macro, if you set the
  1054.      commentary level to "None", it is like specifying "The
  1055.      functions following are absolutely essential to the
  1056.      execution of this macro".  If you set the commentary level
  1057.      to "Full" during the creation of a macro, you are specifying
  1058.      "The functions following are by no means required, they are
  1059.      simply running commentary, perhaps explaining what the hell
  1060.      is happening in the macro at this point".  Thus, by setting
  1061.      the commentary level during the creation of a macro, you are
  1062.      letting ReSource know how important the functions are, that
  1063.      follow.  The commentary level may be changed many times
  1064.      during a macro, and for tutorial macros, such as showing
  1065.      someone how to disassemble/zap a particular program, the
  1066.      commentary level should be set appropriately.  When it comes
  1067.      time to execute the macro, if the commentary level is set to
  1068.      "Full" by the user before the macro starts executing, ALL
  1069.      functions within the macro will be executed normally.  If
  1070.      the commentary level was set to something other than "Full",
  1071.      only those functions in the macro that were set to a
  1072.      commentary level lower than that presently set, will be
  1073.      executed; the rest will be skipped over.
  1074.  
  1075.      Examine the following example macro:
  1076.  
  1077.      LOCAL MACROS/Commentary level/Full
  1078.      CURSOR/Relative/Next line
  1079.      LOCAL MACROS/Commentary level/Heavy
  1080.      CURSOR/Relative/Next line
  1081.      LOCAL MACROS/Commentary level/Normal
  1082.      CURSOR/Relative/Next line
  1083.      LOCAL MACROS/Commentary level/Light
  1084.      CURSOR/Relative/Next line
  1085.      LOCAL MACROS/Commentary level/None
  1086.      CURSOR/Relative/Next line
  1087.  
  1088.      If you set the commentary level to "None" and execute this
  1089.      macro, the cursor will move down one line.  If you set the
  1090.      commentary level to "Light", and execute this macro, the
  1091.      cursor will move down two lines.  If you set the commentary
  1092.      level to "Full" and execute this macro, the cursor will move
  1093.      down five lines.  Using the "SPECIAL FUNCTIONS/Dos command"
  1094.      function, you can use the "SAY" command, to add speech to
  1095.      macros, to give excellent running commentary to tutorial
  1096.      macros.
  1097.  
  1098.      While executing a macro, if you have set the execution speed
  1099.      to "Wait on mouse", you can use other functions, perhaps to
  1100.      scroll backwards or forwards, to see what effect the last
  1101.      function had on the file.  When you press the left mouse
  1102.      button to single-step the next function in the macro, the
  1103.      cursor address is restored, in case you didn't return the
  1104.      cursor to the appropriate place within the file.  If this
  1105.      was not done, macro processing would not proceed normally
  1106.      from that point on.
  1107.  
  1108.  
  1109.  
  1110.      When you load a macro file, only one bank of macros are
  1111.      affected.  If the macro file only contains one macro, then
  1112.      only one macro in that bank will be overwritten, the rest
  1113.      will remain untouched.  Thus, it is possible for a macro in
  1114.      the "LOCAL MACROS" bank to load other local macro files,
  1115.      giving an "overlay" effect.
  1116.  
  1117.      STRINGS/Get/Label:
  1118.      If there is a label defined at the cursor location, it will
  1119.      be copied into the accumulator.
  1120.  
  1121.      STRINGS/Get/Symbol:
  1122.      Copy the first symbol on the current line to the accumulator.
  1123.  
  1124.      STRINGS/Get/Symbol - dest:
  1125.      Copy the second symbol on the current line to the
  1126.      accumulator.
  1127.  
  1128.      STRINGS/Get/Symbol value:
  1129.      Get the value of the first number in the current line, and
  1130.      write text into the accumulator, representing that value, in
  1131.      hexadecimal.  The 'operand size' will be set by this
  1132.      function.
  1133.  
  1134.      STRINGS/Get/Symbol value - dest:
  1135.      Get the value of the second number in the current line, and
  1136.      write text into the accumulator, representing that value, in
  1137.      hexadecimal.  The 'operand size' will be set by this
  1138.      function.
  1139.  
  1140.      STRINGS/Get/End-of-line comment:
  1141.      Copy the end-of-line comment attached to the current line,
  1142.      to the accumulator.
  1143.  
  1144.      STRINGS/Get/Full-line comment:
  1145.      Copy the first full-line comment attached to the current
  1146.      line, to the accumulator.
  1147.  
  1148.      STRINGS/Get/Search string:
  1149.      Copy the current search string into the accumulator.
  1150.  
  1151.      STRINGS/Get/Filename:
  1152.      Copy the current filename into the accumulator.
  1153.  
  1154.      STRINGS/Get/Save .asm name:
  1155.      If the current file has already been saved as source code
  1156.      (to a ".asm" file), copy the filename used to the
  1157.      accumulator.  If the current file has not already been
  1158.      saved, the name will be the same as the current filename,
  1159.      with ".asm" appended.
  1160.  
  1161.      STRINGS/Get/Save .RS name:
  1162.      If the current file has already been saved to a .RS file,
  1163.      copy the filename used to the accumulator.  If the current
  1164.      file has not already been saved, the name will be the same
  1165.      as the current filename, with ".RS" appended.
  1166.  
  1167.      STRINGS/Get/Macros filename:
  1168.      Copy the current macros filename to the accumulator.
  1169.  
  1170.  
  1171.  
  1172.      STRINGS/Get/Keytable filename:
  1173.      Copy the current keytable filename to the accumulator.
  1174.  
  1175.      STRINGS/Get/Cursor value:
  1176.      The contents of the memory where the cursor is, is written
  1177.      into the accumulator, in hexadecimal.  This may be a byte,
  1178.      word, or longword, depending on the setting of 'operand
  1179.      size'.
  1180.  
  1181.      STRINGS/Get/Cursor offset:
  1182.      The currently displayed cursor position is written into the
  1183.      accumulator, in hexadecimal, as a longword (the "operand
  1184.      size" is set to longwords).
  1185.  
  1186.      STRINGS/Get/Accumulator length:
  1187.      The length of the string currently in the accumulator is
  1188.      written into the accumulator, in hexadecimal.  The 'operand
  1189.      size' setting is not affected, but is used to decide how
  1190.      many leading zeroes to use.
  1191.  
  1192.      STRINGS/Get/Partial save size:
  1193.      The number representing the difference between the partial
  1194.      save end and the partial save start is written into the
  1195.      accumulator, in hexadecimal.  The 'operand size' is set to
  1196.      longwords.
  1197.  
  1198.      STRINGS/Get/File:
  1199.      You will be requested to supply the name of a file, of which
  1200.      up to 240 characters will be copied into the accumulator.
  1201.      The data is copied as-is, no hex to ascii translation is
  1202.      performed.
  1203.  
  1204.      STRINGS/Put label:
  1205.      If the string within the accumulator is not used as a label
  1206.      anywhere within the current file, it will be used as a label
  1207.      on the current line.  If it is already used as a label, then
  1208.      a digit is appended to it, and again it is tested to see if
  1209.      a label already exists of that name.  This continues until a
  1210.      unique label is created, then that label is attached to the
  1211.      current line.  This is a safe way of creating labels
  1212.      during macros.
  1213.  
  1214.      STRINGS/Edit functions/Clip start:
  1215.      You will be requested to supply a string.  Starting from the
  1216.      left, each character in the supplied string is compared to
  1217.      the character in the accumulator at that position, and if
  1218.      they are equal, the next bytes are compared, and so on.
  1219.      When either the end of one of the strings is found, or when
  1220.      a mismatch is found, the characters in the accumulator that
  1221.      matched are deleted.  The question mark ('?') is used as a
  1222.      wildcard, and you can use the asterisk once only, to "delete
  1223.      everything until and including" the following character.
  1224.      Examples follow:
  1225.  
  1226.  
  1227.  
  1228.      Accumulator    User-supplied string   Resulting accumulator
  1229.      -----------------------------------------------------------
  1230.      MOVE.L         M                      OVE.L
  1231.      MOVE.L         MUVE.L                 OVE.L
  1232.      MOVE.L         MOV.L                  E.L
  1233.      MOVE.L         move.l                 MOVE.L
  1234.      MOVE.L         M?V                    E.L
  1235.      MOVE.L         ???                    E.L
  1236.      MOVE.L         *.                     L
  1237.      MOVE.L         *M                     OVE.L
  1238.      MOVE.L         ?MOVE.L                OVE.L
  1239.      _LVOAllocMem   _LVO                   AllocMem
  1240.      $00000004      $000000                04
  1241.  
  1242.      STRINGS/Edit functions/Clip end:
  1243.      Similar to the above functions, except clipping is performed
  1244.      on the end of the accumulator.  The question mark is still
  1245.      used as a wildcard, but the asterisk does not have a special
  1246.      meaning in this function.  Examples follow:
  1247.  
  1248.      Accumulator     User-supplied string  Resulting accumulator
  1249.      -----------------------------------------------------------
  1250.      MEMF_PUBLIC     ?PUBLIC               MEMF
  1251.      MEMF_PUBLIC     ???                   MEMF_PUB
  1252.      MEMF_PUBLIC     ?LC                   MEMF_PUBLI
  1253.      meMcollAOVL_    OVL_                  meMcollA
  1254.  
  1255.      STRINGS/Edit functions/Prepend:
  1256.      You will be requested to supply a string, which will be
  1257.      prepended (added to the start of) the accumulator, providing
  1258.      that the resulting string is no longer than 240 characters.
  1259.      Examples follow:
  1260.  
  1261.      Accumulator     User-supplied string  Resulting accumulator
  1262.      -----------------------------------------------------------
  1263.      PUBLIC          MEMF_                 MEMF_PUBLIC
  1264.      AllocMemSUB     _                     _AllocMemSUB
  1265.      PUBLIC          CHIP                  CHIPPUBLIC
  1266.  
  1267.      STRINGS/Edit functions/Append:
  1268.      You will be requested to supply a string, which will be
  1269.      appended (added to the end of) the accumulator, providing
  1270.      that the resulting string is no longer than 240 characters.
  1271.      Examples follow:
  1272.  
  1273.      Accumulator     User-supplied string  Resulting accumulator
  1274.      -----------------------------------------------------------
  1275.      PUBLIC          MEMF_                 PUBLICMEMF_
  1276.      AllocMemSUB     _                     AllocMemSUB_
  1277.      PUBLIC          CHIP                  PUBLICCHIP
  1278.      AllocMem        SUB                   AllocMemSUB
  1279.  
  1280.      STRINGS/Edit functions/Reverse:
  1281.      The contents of the accumulator are reversed.  Examples
  1282.      follow:
  1283.  
  1284.  
  1285.  
  1286.      Accumulator        Resulting accumulator
  1287.      ----------------------------------------
  1288.      PUBLIC             CILBUP
  1289.      AllocMemSUB        BUSmeMcollA
  1290.      AllocMem           meMcollA
  1291.  
  1292.      STRINGS/Edit functions/Lower case:
  1293.      Any upper case characters in the accumulator are changed to
  1294.      their lower case counterparts.  Examples follow:
  1295.  
  1296.      Accumulator        Resulting accumulator
  1297.      ----------------------------------------
  1298.      PUBLIC0123         public01243
  1299.      All0cMemSUB        all0cmemsub
  1300.      All0cMem           all0cmem
  1301.  
  1302.      STRINGS/Operand size/:
  1303.      Some background information is required here:  Some
  1304.      functions in ReSource require to know whether to work at the
  1305.      byte, word, or longword level.  For example, STRINGS/Get/
  1306.      Cursor value could get a byte, word, or longword from the
  1307.      cursor position, and this is your way of specifying at which
  1308.      level you wish those functions to work.  Generally, they
  1309.      specify the size of the numeric operand in the accumulator.
  1310.      Some functions that write a numeric value into the
  1311.      accumulator will set the operand size themselves, others
  1312.      that get the value out of the accumulator need to know the
  1313.      operand size.
  1314.  
  1315.      STRINGS/Maths functions/Increment:
  1316.      Some background information is required here:  All maths
  1317.      functions make some change to the number within the
  1318.      accumulator.  If the string within the accumulator is not a
  1319.      valid number (hex, decimal or binary), the function will
  1320.      fail.  Some functions are immediate, others will request the
  1321.      user for a required operand, such as what to add to the
  1322.      accumulator.  The increment function adds one to the
  1323.      accumulator.  If the resulting number develops a carry
  1324.      (using the current operand size), a macro 'fail' will
  1325.      result.  Thus, loops in macros can exit after a given number
  1326.      of iterations, rather than a failed search, etc.
  1327.  
  1328.      STRINGS/Maths functions/Decrement:
  1329.      Similar to the above function, except that one is subtracted
  1330.      from the accumulator.  If a carry results, a macro 'fail'
  1331.      will occur.  Thus, loops in macros can exit after a given
  1332.      number of iterations, rather than a failed search, etc.
  1333.  
  1334.      STRINGS/Maths functions/Add:
  1335.      You will be requested for a number, to be added to the
  1336.      accumulator.  If a carry results, a macro 'fail' will occur.
  1337.  
  1338.      STRINGS/Maths functions/Subtract:
  1339.      You will be requested for a number, to be subtracted from
  1340.      the accumulator.  If a carry results, a macro 'fail' will
  1341.      occur.
  1342.  
  1343.  
  1344.  
  1345.      STRINGS/Maths functions/Multiply:
  1346.      You will be requested for a number, to be multiplied by the
  1347.      number within the accumulator.  If a carry results, a macro
  1348.      'fail' will occur.  Full 32-bit multiplies are supported,
  1349.      however the setting of 'operand size' is used when
  1350.      determining the size of the operands.
  1351.  
  1352.      STRINGS/Maths functions/Divide:
  1353.      You will be requested for a number.  The contents of the
  1354.      accumulator will be divided by the number that you specify.
  1355.      The divide function does NOT operate on 32-bit operands, but
  1356.      otherwise will work at the currently set operand size.  If
  1357.      the current operand size is set to longwords, the divide
  1358.      will be performed on the lower 16 bits only.
  1359.  
  1360.      STRINGS/Maths functions/Negate:
  1361.      The number within the accumulator is negated, using the
  1362.      currently set operand size.  If the result is zero, a macro
  1363.      'fail' will result.
  1364.  
  1365.      STRINGS/Maths functions/Logical NOT:
  1366.      The number within the accumulator is NOTed, using the
  1367.      currently set operand size.  If the result is zero, a macro
  1368.      'fail' will result.
  1369.  
  1370.      STRINGS/Maths functions/Logical AND:
  1371.      You will be requested to supply a number, which will be
  1372.      ANDed with the contents of the accumulator, and the result
  1373.      is stored back into the accumulator.  If the result is zero,
  1374.      a macro 'fail' will result.
  1375.  
  1376.      STRINGS/Maths functions/Logical OR:
  1377.      You will be requested to supply a number, which will be ORed
  1378.      with the contents of the accumulator, and the result is
  1379.      stored back into the accumulator.  If the result is zero, a
  1380.      macro 'fail' will result.
  1381.  
  1382.      STRINGS/Maths functions/Exclusive OR:
  1383.      You will be requested to supply a number, which will be
  1384.      exclusively ORed with the contents of the accumulator, and
  1385.      the result is stored back into the accumulator.  If the
  1386.      result is zero, a macro 'fail' will result.
  1387.  
  1388.      STRINGS/Define string/:
  1389.      These functions allow to you define the contents of either
  1390.      the accumulator, or one or the string buffers A-M.  Whenever
  1391.      you are requested for a string using the simple string
  1392.      requester (NOT the large file requester), you can either
  1393.      type in a string literal, or input an escape character (just
  1394.      press the escape key), followed by either another escape
  1395.      character, or one of the letters A-M inclusive.  If the
  1396.      second character is the escape character, the string being
  1397.      requested will be copied from the accumulator instead.  If
  1398.      the second character that you typed (after the escape
  1399.      character) is one of the letters A-M, then the string being
  1400.      requested will instead be copied from the appropriate buffer
  1401.      A-M.  This applies even when you define the contents of one
  1402.      of the string buffers.  This method of using indirection
  1403.      should be particularly handy in sophisticated macros.
  1404.  
  1405.  
  1406.  
  1407.      The maximum string length in any buffer (including the
  1408.      accumulator) is 240 characters.
  1409.  
  1410.      STRINGS/Swap with buffer/:
  1411.      The contents of the accumulator is swapped with the contents
  1412.      of the buffer that you select.
  1413.  
  1414.      SPECIAL FUNCTIONS/Repeat last command:
  1415.      Repeat the last function used.  Cursor movement functions
  1416.      are not repeated, excepting the search functions.  This
  1417.      function should be bound to a high-priority key, such as the
  1418.      space bar, for best effect.
  1419.  
  1420.      SPECIAL FUNCTIONS/Dos Command:
  1421.      You will be requested for a string, which will be given as
  1422.      the operand to the Dos "execute" function.  Anything that
  1423.      you normally type into a CLI window, you can give as a
  1424.      command.  Any output will go to the CLI window that you
  1425.      started ReSource from, unless you redirect the output
  1426.      elsewhere.
  1427.  
  1428.      SPECIAL FUNCTIONS/Zap:
  1429.      You will be requested for a number/string, which will
  1430.      overwrite the byte/word/longword/characters at the cursor
  1431.      position.  The current setting of 'operand size' is used.
  1432.      Using PROJECT/Open binary file, then this function, followed
  1433.      by "SAVE/Save binary image/ALL", you can quickly modify a
  1434.      program, without having to completely disassemble it, edit
  1435.      the source code, and reassemble and link.  You are
  1436.      restricted using this method of modification however, to the
  1437.      size of modifications that can be done.  For example, you
  1438.      cannot insert extra code or data.  If the string that you
  1439.      supply starts with a single open quote ("'"), the following
  1440.      characters are treated as a string, and are copied to the
  1441.      cursor position as-is.  If the string that you supply starts
  1442.      with "$", the following number is assumed to be hexadecimal.
  1443.      If the string that you supply starts with "%", the number
  1444.      that follows is assumed to be binary, otherwise it is
  1445.      assumed to be a decimal number.
  1446.  
  1447.      SPECIAL FUNCTIONS/Screen/Front:
  1448.      Move ReSource's screen in front of all other screens.
  1449.  
  1450.      SPECIAL FUNCTIONS/Screen/Back:
  1451.      Move ReSource's screen behind all other screens.
  1452.  
  1453.      SPECIAL FUNCTIONS/Set task priority:
  1454.      You will be requested for a number, representing the
  1455.      priority at which to set the current task.  For example, if
  1456.      you have a program being assembled in the background, and
  1457.      you don't want it to slow the operations of ReSource down,
  1458.      you might set the task priority to one or two.  Negative
  1459.      numbers are not supported.  Sorry! 
  1460.  
  1461.      SPECIAL FUNCTIONS/Convert xx(A4) EA's
  1462.      These functions were specifically designed to be used when
  1463.      disassembling 'C' programs, in which the A4 register is used
  1464.      as a base register for accessing data, throughout all or
  1465.      most of the program.  Let's use an example program here:
  1466.  
  1467.  
  1468.  
  1469.           SECTION  test000000,CODE
  1470.           LEA      START+$11E,A4
  1471.           LEA      0(A4),A1
  1472.           MOVE.L   $000C(A4),D0
  1473.      .... rest of code
  1474.           SECTION  test00011E,DATA
  1475.           dc.b     'dos.library',0
  1476.           dc.l     $00010001
  1477.           END
  1478.  
  1479.      In the above example program, the A4 register will point to
  1480.      the start of the data segment.  There are three ways to tell
  1481.      ReSource where the A4 register will point to; in the above
  1482.      example, the "This operand" function could be used with the
  1483.      cursor at start of file, or the "This address" function
  1484.      could be used with the cursor at offset $00011E, or the
  1485.      "Specify" function could be used, supplying a parameter of
  1486.      "$11E".  Basically, with this function, you are telling
  1487.      ReSource where, relative to the start of the program, the A4
  1488.      register can be assumed to be pointing.  After you do this,
  1489.      any effective address that involves a word offset to the A4
  1490.      register, will be shown as an absolute address.  Thus, the
  1491.      example program above will appear as:
  1492.  
  1493.           SECTION  test000000,CODE
  1494.           LEA      START+$011E,A4
  1495.           LEA      START+$011E,A1
  1496.           MOVE.L   START+$012A,D0
  1497.      .... rest of code
  1498.           SECTION  test00011E,DATA
  1499.           dc.b     'dos.library',0
  1500.           dc.l     $00010001
  1501.           END
  1502.  
  1503.      The advantage here is that labels can automatically be
  1504.      created where they could not before.  If this conversion
  1505.      process is not used, it is likely that the program will not
  1506.      successfully re-assemble, as different assemblers assemble
  1507.      the same source code into different opcodes.  For example,
  1508.      the assembler that I normally use does virtually no
  1509.      optimizing, and so the resulting program is often larger
  1510.      than the original, even if I did not modify the source code.
  1511.      For example:
  1512.  
  1513.           MOVE.L   4,A6
  1514.  
  1515.      If absolute long addressing is used, the instruction above
  1516.      will be 6 bytes long, whereas if absolute short addressing
  1517.      is used, it will be only 4 bytes long.  Where you wish to do
  1518.      EA conversions in only a portion of a program, you can set
  1519.      the lower and upper limits.
  1520.  
  1521.      Changing to absolute EA's will increase the size of the
  1522.      resulting program, unless you convert back to relative
  1523.      addressing, within the source code.  I believe that one of
  1524.      the features of BLINK (from the Software Distillery) can
  1525.      help to make this conversion, during the link process.
  1526.  
  1527.  
  1528.  
  1529.      SPECIAL FUNCTIONS/Convert specific EA's:
  1530.      Please read and understand the "SPECIAL FUNCTIONS/Convert
  1531.      xx(A4) EA's" functions first!  Where you want to do specific
  1532.      EA (Effective Address) conversions, use "Set base #1" (or
  1533.      #2, or #3), when the cursor is the same as where the base
  1534.      register (whatever that is, it does not have to be A4 this
  1535.      time) can be assumed to point to.  Assuming that you set
  1536.      base #1, and it is the A5 register that is being used as a
  1537.      base register, you will then use the "Convert W/Base #1"
  1538.      function to convert lines like:
  1539.  
  1540.           MOVE.L   $0032(A5),A6
  1541.  
  1542.      .. into:
  1543.  
  1544.           MOVE.L   lbL0014AC(A5),A6
  1545.  
  1546.      Note here that there has not actually been an EA conversion,
  1547.      but a label has been created, the data type at label
  1548.      "lbL0014AC" has been determined and set, and a symbol
  1549.      ("lbL0014AC") has been created for this line.  It is up to
  1550.      you then to make the necessary changes to the resulting
  1551.      source code, if re-assembling is required.  Whereas the
  1552.      "Convert xx(A4) EA's" function converts immediately and
  1553.      automatically, you must use the "Convert W/Base #1" function
  1554.      on each line that you want converted.  If you wish to
  1555.      convert a destination address, use the "SYMBOLS 1/Set field/
  1556.      Second" function first.
  1557.  
  1558.      SPECIAL FUNCTIONS/Data type set/:
  1559.      These functions affect how the "SPECIAL FUNCTIONS/Convert
  1560.      specific EA's" functions work.  When the data type must be
  1561.      determined, it can be automatic, or you can force it to be
  1562.      set to Bytes/Words/Longwords/Ascii/Code.
  1563.  
  1564.      SPECIAL FUNCTIONS/Convert to../:
  1565.      The setting here will determine the type of symbol created
  1566.      when the "SPECIAL FUNCTIONS/Convert specific EA's" functions
  1567.      are used.
  1568.  
  1569.      SAVE/O/P Directory:
  1570.      You will requested to supply the name of a directory.
  1571.      Whenever you are requested to supply the name of a file to
  1572.      save source code to, the name will have this directory name
  1573.      prepended to it.  For example, if you supply the string
  1574.      "RAM:" as the output directory name, and the current
  1575.      filename is "c:stack", when you select "SAVE/Save .asm/ALL",
  1576.      the default name to save to will be "RAM:stack.asm".
  1577.  
  1578.      SAVE/Partial save/Set start:
  1579.      For any partial saves, the current cursor position (as it is
  1580.      NOW) will be where the save will start from.  By default,
  1581.      this position is equivalent to the start of the file.
  1582.  
  1583.  
  1584.  
  1585.      SAVE/Partial save/Set end:
  1586.      For any partial saves, the current cursor position will be
  1587.      where the save will end.  If this happens to be the last
  1588.      line in the file, any partial save will include the last
  1589.      line.  Normally, the partial save will NOT include the line
  1590.      where the partial save end is set.
  1591.  
  1592.      SAVE/Save binary image/ALL:
  1593.      Save the current buffer contents as-is, to a file.  If the
  1594.      file was loaded with "PROJECT/Open load file", and was NOT
  1595.      loaded as a binary image file, the resulting saved file will
  1596.      NOT be the same as that originally loaded, as the loader
  1597.      information, and relocation information, has been stripped.
  1598.      If you wish to load a file, and then save it exactly as it
  1599.      was loaded, you must use "PROJECT/Open binary file".  Even
  1600.      though you may have disassembled memory directly, or read
  1601.      tracks from a floppy disk, it does NOT stop you from saving
  1602.      the binary image.  Once something is loaded into ReSource,
  1603.      it can be saved as source code, as a binary image file,
  1604.      directly to memory, or it can be written directly to a
  1605.      floppy disk, to a specific sector or track.  This gives
  1606.      fantastic flexibility for general hacking, for as little as
  1607.      one byte of the current buffer can be saved to memory, to a
  1608.      binary image file, or as source code.  Track writes must be
  1609.      in multiples of 512 bytes, however the clipping is done for
  1610.      you.
  1611.  
  1612.      SAVE/Save binary image/Partial:
  1613.      Similar to the above function, except only the data between
  1614.      the partial save start and the partial save end is saved.
  1615.  
  1616.      SAVE/Save .asm/ALL:
  1617.      You will be requested to supply the name of a file to save
  1618.      source code to, for the entire current buffer contents.  The
  1619.      output will be very similar to how you see it on the display.
  1620.  
  1621.      SAVE/Save .asm/Partial:
  1622.      Similar to the above function, except only the code/data
  1623.      between the partial save start and the partial save end is
  1624.      disassembled.
  1625.  
  1626.      SAVE/Calculate .asm size/ALL:
  1627.      Calculates the size of the source code file that would
  1628.      result if you had used the "SAVE/Save .asm/ALL" function.
  1629.  
  1630.      SAVE/Calculate .asm size/Partial:
  1631.      Calculates the size of the source code file that would
  1632.      result if you had used the "SAVE/Save .asm/Partial" function.
  1633.  
  1634.      SAVE/Save to memory/ALL:
  1635.      You will be requested to supply a memory address to save the
  1636.      contents of the current buffer.  The buffer will be saved
  1637.      as-is, it is NOT disassembled.  Care should be taken with
  1638.      this function, as a system crash will likely result if you
  1639.      supply the wrong address.  By finding out where the current
  1640.      buffer is in memory, it is possible to copy one part of the
  1641.      current buffer to another part.
  1642.  
  1643.  
  1644.  
  1645.      SAVE/Save to memory/Partial:
  1646.      Similar to the above function, except that only the data
  1647.      between the partial save start and the partial save end is
  1648.      saved.
  1649.  
  1650.      SAVE/Save tracks/ALL:
  1651.      You will be requested for a string representing where to
  1652.      start writing tracks.  The first parameter you give must be
  1653.      either "DF0:", "DF1:", "DF2:", or "DF3:".  The second
  1654.      parameter is the starting cylinder to save to.  The third
  1655.      parameter is optional, and represents an offset, in sectors,
  1656.      where the track write is to start.  For example, to save the
  1657.      sector #3 on cylinder 5 on DF2:, the parameters required
  1658.      would be "DF2: 5 3".  To save to the first sector on DF0:,
  1659.      the parameters required would be "DF0: 0".  Whole sector
  1660.      writes ONLY are done, clipping is performed automatically.
  1661.  
  1662.      SAVE/Save tracks/Partial:
  1663.      Similar to the above function, except that only the data
  1664.      between the partial save start and the partial save end is
  1665.      saved.  Furthermore, only even multiples of 512 bytes will
  1666.      be written.  For example, if the partial save size is 1027
  1667.      bytes, only two sectors (1024 bytes) will be written to the
  1668.      disk.
  1669.  
  1670.      SAVE/Tabs/:
  1671.      Use to select between real tabs (ASCII value 9) and spaces
  1672.      being used in the output source code as separators.
  1673.  
  1674.      SAVE/Symbol table/:
  1675.      When creating symbols, either automatically, or manually, if
  1676.      the setting of this function is to something other than
  1677.      "None", the value and name of the symbol is stored, so that
  1678.      when the source code is saved, an equate table, or XREF
  1679.      table can be generated.  If this function is set to
  1680.      "EQUate", a symbol table similar to the following will
  1681.      preceed the source code in the output file:
  1682.  
  1683.      AG_OpenLib      EQU     $00030000
  1684.      AO_DOSLib       EQU     $00008007
  1685.      AT_Recovery     EQU     $00000000
  1686.      _LVOAlert       EQU     $FFFFFF94
  1687.      _LVOClose       EQU     $FFFFFFDC
  1688.      _LVOCreateProc  EQU     $FFFFFF76
  1689.      _LVOCurrentDir  EQU     $FFFFFF82
  1690.  
  1691.      If, instead, this function is set to "XREF", a symbol table
  1692.      similar to the following will preceed the source code in the
  1693.      output file:
  1694.  
  1695.              XREF    AG_OpenLib
  1696.              XREF    AO_DOSLib
  1697.              XREF    AT_Recovery
  1698.              XREF    _LVOAlert
  1699.              XREF    _LVOClose
  1700.              XREF    _LVOCreateProc
  1701.              XREF    _LVOCurrentDir
  1702.  
  1703.  
  1704.  
  1705.      OPTIONS 1/Show offsets/:
  1706.      For lines displayed without labels, the current offset
  1707.      (relative from the start of the file) can be displayed where
  1708.      the label is usually displayed.
  1709.  
  1710.      OPTIONS 1/Display beep/:
  1711.      Many functions demand attention from the user, and a display
  1712.      beep is used for this purpose.  Normally, this will make the
  1713.      screen flash.  However, if you have run the program
  1714.      "addbeep", you will hear an audible "beep" instead.  If you
  1715.      don't appreciate the beep, then switch it off.
  1716.  
  1717.      OPTIONS 1/User feedback/:
  1718.      Many functions will give informative messages, to let the
  1719.      user know what is happening internally.  If you don't
  1720.      appreciate the feedback, then switch it off.
  1721.  
  1722.      OPTIONS 1/Feedback Delays/:
  1723.      If you have User feedback set to "OFF", then the setting of
  1724.      this function is not important.  If feedback is ON, you may
  1725.      occasionally find that feedback message are being displayed
  1726.      too fast for you to read them.  This is especially so when
  1727.      opening a load file, for as many as thirty informative
  1728.      messages can be displayed in between raster scans, which
  1729.      means that you don't actually get to see any of the messages
  1730.      at all.  If normal text rendering were used, this would
  1731.      probably not be a problem, as the writing of the text itself
  1732.      would be done much slower, and you would probably get time
  1733.      to read at least some of the messages.  If you set feedback
  1734.      delays to "ON", there will be a one second delay after each
  1735.      message is displayed, which should be plenty to read each
  1736.      message.  While you hold the menu button down, feedback
  1737.      messages are skipped altogether.
  1738.  
  1739.      OPTIONS 1/Labels/:
  1740.      If this option is set to ON, labels will be displayed.  This
  1741.      is the default.
  1742.  
  1743.      OPTIONS 1/Hidden labels/:
  1744.      If this option is set to ON, hidden labels (labels attached
  1745.      to a byte in the middle of a line of code/data) will be
  1746.      displayed.  This is the default.
  1747.  
  1748.      OPTIONS 1/Symbols/:
  1749.      If this option is set to ON, symbols will be displayed.
  1750.      This is the default.
  1751.  
  1752.      OPTIONS 1/End-of-line comments/:
  1753.      If this option is set to ON, end-of-line comments will be
  1754.      displayed.  This is the default.
  1755.  
  1756.      OPTIONS 1/Full-line comments/:
  1757.      If this option is set to ON, full-line comments will be
  1758.      displayed.  This is the default.
  1759.  
  1760.  
  1761.  
  1762.      OPTIONS 1/Chip-load info/:
  1763.      If this option is set to ON, where a section statement is
  1764.      displayed, and that section either is forced to load into
  1765.      chip memory, or is forced to load into fast memory, a
  1766.      ",CHIP" or ",FAST" will be appended to the section
  1767.      statement.  Not all assemblers support this parameter for
  1768.      the section statement, so you may want to switch this option
  1769.      OFF if your assembler can't handle it.
  1770.  
  1771.      OPTIONS 1/Section statements/:
  1772.      If this option is set to ON, section statements will be
  1773.      displayed.  This is the default.
  1774.  
  1775.      OPTIONS 1/End statement/:
  1776.      If this option is set to ON, the "END" statement will be
  1777.      displayed as the last line in the file.  This is the default.
  1778.  
  1779.      OPTIONS 1/DCB statements/:
  1780.      If this option is set to ON, "dcb" type statements will be
  1781.      used where appropriate.  This is NOT the default.  For
  1782.      example, the following data:
  1783.  
  1784.              dc.b    0
  1785.              dc.b    0
  1786.              dc.l    7
  1787.              dc.l    8
  1788.              dc.l    8
  1789.              dc.l    8
  1790.              dc.l    8
  1791.              dc.l    8
  1792.              dc.l    8
  1793.  
  1794.      will be shown as:
  1795.  
  1796.              dcb.b   2,0
  1797.              dc.l    7
  1798.              dc.l    6,8
  1799.      This is useful for shrinking the required .asm file size,
  1800.      especially where there is large areas of zeroes.
  1801.  
  1802.      OPTIONS 1/Reference recognition/:
  1803.      If this option is set to ON, references to memory locations
  1804.      within the current file are recognized.  This is the default.
  1805.  
  1806.      OPTIONS 2/ASCII longs/:
  1807.      If this option is set to ON, where longword operands are
  1808.      recognized as all ASCII characters, they will be displayed
  1809.      as such.  This is the default.
  1810.  
  1811.      OPTIONS 2/Short branches/:
  1812.      If this option is set to ON, any short branches will be
  1813.      displayed as such, with the ".S" appended to the opcode.
  1814.      This is the default.
  1815.  
  1816.  
  1817.  
  1818.      KEY BINDINGS/:
  1819.      Every function in ReSource can be found in the menus.  You
  1820.      do not need to use any keys at all, but you probably will
  1821.      want to.  You can bind any function to any key, however
  1822.      there is just one function that makes no sense to rebind,
  1823.      and that is the "PROJECT/Abort" function.  Both Amiga keys
  1824.      are supported, you may use shift, alt, ctl, lAmiga, rAmiga,
  1825.      shift-alt, shift-ctl, alt-ctl, or shift-alt-ctl in
  1826.      combination with any non-qualifier key, as a distinct key to
  1827.      bind a function to.  Thus, you have complete control over
  1828.      which keys do what.  After re-binding some keys, you will
  1829.      probably want to save the keytable.  If you save the
  1830.      keytable as "S:RS.keytable", it will be loaded every time
  1831.      you run ReSource.  You may want to create several keytables,
  1832.      suitable for doing differing program types (C, assembler,
  1833.      etc.).  If a keytable file is loaded, ALL current key
  1834.      bindings will be overwritten by the bindings present in the
  1835.      keytable.  If you don't load any keytable, and ReSource
  1836.      couldn't find "S:RS.Keytable" when you first ran it, some
  1837.      keys will still be bound:
  1838.  
  1839.      right-Amiga Q.............PROJECT/Quit
  1840.      right-Amiga O.............Open load file
  1841.      up arrow..................CURSOR/Relative/Next line
  1842.      down arrow................CURSOR/Relative/Previous line
  1843.      right arrow...............CURSOR/Absolute/Fwd reference
  1844.      left arrow................CURSOR/Absolute/Previous location
  1845.      shift-up arrow............CURSOR/Relative/Previous page
  1846.      shift-down arrow..........CURSOR/Relative/Next page
  1847.  
  1848.      To rebind a key, select "KEY BINDINGS/Rebind key", and
  1849.      follow the prompts in the title bar.
  1850.      ***********************************************************
  1851.      Amiga, AmigaDOS, and Kickstart are registered trademarks
  1852.      of Commodore-Amiga, Inc.
  1853.      ***********************************************************
  1854.