THE BEAV Binary Editor And Viewer Manual Copyright 1992 Version 1.33 August 9, 1992 By Peter Reilley 19 Heritage Circle Hudson, N.H. 03051 pvr@wang.com BEAV source and executable can be freely distributed for non-commercial purposes. BEAV User Manual 2 Table of Contents 1.0 Introduction 3 1.1 Quick Start 4 2. Overview 5 2.1 Terms and Definitions 5 2.2 The Screen Format 5 2.3 Display Modes 7 2.4 Commands 8 2.5 Buffers 8 2.6 Files 9 2.7 Key Binding 9 2.8 Configuration 10 3. Command Description 11 3.1 Help 11 3.2 Cursor Movement 11 3.3 Buffer Management 13 3.4 File Management 15 3.5 Window Management 16 3.6 Inserting and deleting 18 3.7 Search and Replace Commands 20 3.8 Exiting BEAV 22 3.9 Printing 22 3.10 Keyboard Macros 23 3.11 Key Binding 23 3.12 Special Functions 24 4. Alphabetical list of commands by name 27 5. Alphabetical list of commands by key binding 30 6. Release notes 33 7. Source Availability 36 BEAV User Manual 3 1.0 Introduction BEAV is an editor that brings the features of a powerful full screen editor to the editing of binary files. It is the only editor that I know of that does that. When you need to edit a non-text file you generally have two choices; a text editor or a file zap type editor. Each choice has significant disadvantages. Text editors expect the file to be formatted in a certain way. At a minimum they expect that all lines be terminated by a carriage return or line feed and be limited in length. There is no line length limit with BEAV. Most text editors get confused by bytes that are outside of the normal range (20 to 7E HEX). In BEAV no special characters such as carriage return or line feed affect the display aside from producing their numeric value. BEAV can edit any file no matter the format. The other choice is to use a file zap type editor which can edit a binary file without difficulty. These editors are often very limited in their features and capabilities. Most file zap programs can edit a file only in HEX or ASCII. They generally operate on a sector basis and because of this they cannot insert or delete data in the middle of the file. All these limits are eliminated in BEAV. You can edit a file in HEX, ASCII, EBCDIC, OCTAL, DECIMAL, and BINARY. You can display but not edit data in FLOAT mode. You can search or search and replace in any of these modes. Data can be displayed in BYTE, WORD, or DOUBLE WORD formats. While displaying WORDS or DOUBLE WORDS the data can be displayed in INTEL's or MOTOROLA's byte swap format. Data of any length can be inserted at any point in the file. The source of this data can be the keyboard, another buffer, of a file. Any data that is being displayed can be sent to a printer in the displayed format. Files that are bigger than memory can be handled. Some users may recognize the similarity to the EMACS text editor that was written by Richard Stallman at MIT. This is not a coincidence. I attempted to keep as much of the user interface and functionality as possible given the very different tasks of EMACS and BEAV. BEAV User Manual 4 1.1 Quick Start This is a brief description of the minimal set of commands that are necessary to start using BEAV effectively. The file-visit command, Ctl-X Ctl-V, can be used to read a file in for editing. The file can also be read in from the command line; beav . These commands can be used to navigate around the window. move-back-char Ctl-B moves left move-back-line Ctl-P moves up move-forw-char Ctl-F moves right move-forw-line Ctl-N moves down The move-to-byte command, Ctl-X G, will prompt you for a byte position to move to. These commands will insert a zero byte at the cursor position or delete the byte at that position. insert-unit Ctl-X I delete-forw-unit Esc D The file-save command, Ctl-X Ctl-S, will save the data to the file if a change has been made. The help command, Esc ?, will display a list of all commands and their current key bindings. The abort-cmd command, Ctl-G, will abort any command that is in operation. The quit-no-save command, Ctl-X Ctl-C, will exit BEAV. If there is any data that has not been saved you will be warned. BEAV User Manual 5 2. Overview 2.1 Terms and Definitions Throughout this manual certain terms will be used to describe the operation and structure of BEAV. The data that BEAV is editing is held in a buffer that is structured as a byte stream. There are many commands that affect the way that this byte stream is displayed on to the screen. Whatever display mode is chosen the data in the buffer is not effected, only the presentation. One such choice is to display the data as bytes, words, or double words. That is; 8 bit values, 16 bit values, or 32 bit values. Whatever choice is made the value of the selected size will be displayed. These values are referred to as units in this manual. Thus the 'delete-forw-unit' command deletes the unit under the cursor. If 32 bit units are being displayed then 4 bytes will be deleted. Many commands in BEAV start by pressing the 'ESCAPE' key. When this manual refers to a command that requires that the 'ESCAPE' key be pressed it will be abbreviated with 'Esc'. Another frequently used key stroke to start commands is 'CONTROL X'. This in done by pressing the 'CONTROL' key then pressing the 'X' key at the same time. In this manual this will be abbreviated by 'Ctl-X'. Many commands contain other control characters and these will be abbreviates similarly. Thus the 'insert-unit' command will be listed as 'Ctl-X I'. This will be entered be pressing the CONTROL key and while holding it hitting the 'X' key, release the CONTROL key then hit the 'I' key. 2.2 The Screen Format BEAV presents information to the user in a number of areas. The first is the window. There will be at least one window displayed on the screen at all times. The window consists of two areas. The first is the display area. This is where the data that is in the buffer is displayed. Most of the time the cursor will be in this area, as this is where most editing is done. Each line in the display area will start with a number that indicates the offset into the buffer for this line of data. At the bottom of the display area for each window is the status line. The status line presents the user with a number of specific pieces of information. The first is the program name which is "BEAV". Next there are some flags indicating the status of this particular buffer. BEAV User Manual 6 The first flag indicates if the buffer has been damaged by a memory allocation failure. If there is a '?' then the buffer is bad, otherwise there will be a space. Bad buffers are set to read only. The next flag indicates if the buffer has been changed and will need to be written out if the changes are to be saved. This flag is a '*' if the buffer has been changed, otherwise there will be a space. The next flag indicates insert/overstrike mode; 'I' for insert, 'O' for overstrike. This is only meaningful in ascii or ebcdic mode. Then the buffer name followed by the file name. A window can be in read only, read/write, or read/write with size lock. These will be displayed as [RO], [RW], or [WL] respectively. If auto-update is enabled then [AU] will be displayed. Next the cursor position in bytes and the character position within the unit. The next piece of information gives the format that the data is being displayed in; HEX, OCTAL, DECIMAL, FLOAT, BINARY, ASCII, EBCDIC. If a data mode is selected then the size in bytes (1, 2, 4) is displayed. If the data is being displayed in Intel mode then the swapped flag is displayed, 'S'. Lastly the byte shift is displayed; 0 only for 8 bit data, 0 or 1 for 16 bit data, or 0, 1, 2 or 3 for 32 bit data. There can be multiple windows on the screen at the same time but each window will have a status line at the bottom. The very bottom line on the screen is the prompt line. This is where you enter data that BEAV requests. If you want to edit a new file you would type 'Ctl-X Ctl-V', BEAV would respond with "Visit file:" on the prompt line. The cursor would be positioned after the prompt. You would then enter the name of the file that you wished to edit. If you entered the command by mistake, you can abort the operation by typing a 'Ctl-G'. 'Control G' is a universal abort command and can be used anywhere. If you want to perform a search you will enter the search string on this line. When you have entered the information that BEAV has requested hit 'Return' and the cursor will return to it's original position in the window display area. The prompt line is also where error messages are displayed. BEAV User Manual 7 2.3 Display Modes The data in the buffer can be displayed in a number of formats. First there is the display mode. This can be either; HEXADECIMAL, DECIMAL, OCTAL, BINARY, FLOAT, ASCII, or EBCDIC. If ASCII or EBCDIC mode is chosen then each byte in the buffer will be converted to it's ASCII or EBCDIC character and displayed. Bytes that are outside of the standard character set will be displayed as a dot. Each line will be 64 characters long. The byte value for "carriage return" and "line feed" will be displayed as a dot as will any other non-printable characters. Within HEXADECIMAL, DECIMAL, OCTAL, or BINARY format the data can be displayed in 8, 16 or 32 bit values. If 16 or 32 it values are displayed the user can choose to view these values in either the Intel format or the Motorola format. If Intel format is chosen then the first byte in each unit is the least significant byte when the value is calculated. Thus in hex 32 bit mode a byte string of "32 7A 9F 10" would be displayed as "109F7A32". If Motorola format is chosen this value would be displayed as "327A9F10". The FLOAT mode displays the data in floating point representation. This is somewhat machine dependent so a given hex number may produce different floating point numbers on different machines. Generally, not all combinations of bits are legal floating point numbers. The display representation will depend on how printf was implemented. It is conceivable that BEAV will crash if the printf function is not robust. There is another display format choice that affects the 16, 32 or 64 bit formats. This is called shift. The shift can be 0 or 1 for 16 bit modes, 0, 1, 2, or 3 for 32 bit modes, or between 0 - 7 for floating point mode. Shift moves the zero point reference for the buffer up by the selected value. The default is zero shift. If a buffer is displaying the following 32 bit hex data; "12345678 2F4792AF 673DFEA1 88551199" with the shift at 0. Changing shift to 1 will produce; "3456782F 4792AF67 3DFEA188 55119955" The data has been slid down toward the beginning of the buffer by one byte. This has not changed the data in the buffer at all, it has only affected the way that the data is presented on the screen. This is useful when looking at WORD or DOUBLE WORD data that is not aligned on two or four byte boundaries. BEAV User Manual 8 When BEAV is first started or a new window is opened the default format is HEXADECIMAL BYTES. 2.4 Commands Commands are the means that the user controls the operation of BEAV. A command can be given by using one of two methods. The first is to use the key binding. A command can have one or more associated key bindings. It can also have no key binding. There are a set of default key bindings that BEAV comes configured with. The current set of key bindings can be seen by using the 'help' command. The 'help' command is 'Esc ?' or Function Key 1 'F1' on the IBM PC. The help buffer can be scrolled by using the up and down arrow keys. A printed copy may be obtained by going to the bottom of the help buffer using the 'move-to-end' command ('Esc >' or the 'End' key). Then issue the 'print-mark-to-cursor' command ('Esc P' or 'Ctl-Print') and enter 'PRN' or a file name when prompted with "Print to:". This will output the entire help buffer to a printer connected to the parallel interface or the specified file. The second method of issuing a command is to use the 'extended-command' command (Esc X). You are prompted for a command name that you want to execute. This method is useful for executing commands that have no key binding. Commands that can take a long time to complete can be stopped by pressing Ctl- G. 2.5 Buffers Buffers are the in memory storage for all data editing and viewing. Each buffer has a name that appears in the mode line. Buffers generally have a file name that is associated with them. The file name also appears in the mode line. The buffer name and the file name are independent but the buffer name defaults to the file name. The buffer name is used to refer to a specific buffer. The 'change-buffer' ('Ctl-X B') command will prompt you for a buffer name. After you enter a buffer name that buffer will be displayed in the current window. If there is no such buffer, one will be created and displayed (it will be empty). When BEAV is run with a file name as a command line parameter, the file is read into a new buffer. The buffer name will be made the same as the file name. The file name is only BEAV User Manual 9 used when the buffer is saved. If the file name is changed using the 'buffer-set-file-name' ('Ctl-X Ctl-F') command then when the buffer is saved it will be saved to the new file. Buffers are dynamically allocated. They grow or shrink as the size of the data they contain changes. The buffer size can be frozen using the 'buffer-size-lock' ('Ctl-X Ctl-L') command. This prevents inserting or deleting data from the buffer but data can be modified. Buffers continue to exist even if they are not being displayed. Buffers are saved in a linked list that can be stepped through using the 'change-to-next-buffer' ('Esc +') or 'change-to-prev-buffer' ('Esc -') commands. If the 'change-to- next-buffer' command is given then the next buffer in the list is displayed in the current window. 2.6 Files Files are the means of storing data on disk. Files or segments of files can be loaded into BEAV for editing or viewing. The file on the disk has not been changed until BEAV does a save to that file. When a save to a file is performed the original file contents in saved in a ".bak" file. 2.7 Key Binding All commands in BEAV have a command name and a default key binding. The bindings may be changed to suit personal preference by using the 'bind-to-key' ('Esc K') command. The current binding of a key sequence can be displayed by using the 'binding-for-key' ('Ctl-X ?') command. Key bindings can be loaded automatically from a file named ".beavrc" under UNIX or "beavrc" under MSDOS. I will refer to this file as the beavrc file in this document. This file must be in a directory specified by the PATH environment variable. When BEAV is started this file is read and the bindings are loaded. This file is a simple text file and can be edited to make changes. The beavrc file contains three columns. The first is the function name to be bound or "extended-command" for commands to be executed. For functions to be bound, the second column is the key sequence that is bound to that function. The third is a number that defines the key code. The second column is not actually used, but is for informational purposes only. BEAV User Manual 10 For commands to be executed, the second column is the command name. The third column is optional and is the number to be passed to that command. For example; to set the number of screen rows to 10 hex (16 decimal); the first column would contain "extended-command", the second column would contain "screen-rows", and the third would contain "10" to set 16 decimal screen rows. The simplest way to create a valid beavrc file is to first bind the key codes to the desired functions using the 'bind-to- key' command (Esc K). Next display the current bindings in a window using the 'help' command (Esc ?). Then save that buffer to a file with the 'file-write' command (Ctl-X Ctl-W). You will be prompted for a file name. The file written is a valid beavrc file. You may want to edit the beavrc file to remove the commented lines, ie, those beginning with #, to make it load faster. On UNIX systems there can be multiple .beavrc files, one for each terminal type. This is accomplished by appending the TERM variable to .beavrc. Thus if you use both a vt100 and a wyse60 terminal, you could have a .beavrc.wy60 and a .beavrc.vt100 bindings file. When your TERM variable is TERM=wy60 then the .beavrc.wy60 bindings file will be used. If there is no .beavrc.wy60 file then the .beavrc file will be used. 2.8 Configuration When the MSDOS version of BEAV runs it detects whether the system is an IBM PC or a clone. If a PC is detected then a set of key bindings that use the 10 function keys and the relevant keypad keys are loaded. If the system is not recognized then only the standard bindings are loaded. If a PC is detected the screen is managed by making BIOS level calls that enhance performance. Otherwise, the screen is controlled by making ANSI compatible calls to the operating system. This is much slower but is not sensitive to hardware configuration. This requires that non-standard MSDOS systems support ANSI display controls. The following ANSI escape sequences are used; Position cursor ESC [ ; H Erase to end of line ESC [ 0 K Erase to end of page ESC [ 0 J Normal video ESC [ 0 m BEAV User Manual 11 Reverse video ESC [ 7 m On unix systems the termcap library is used. This requires that the TERM environment variable be set correctly. 3. Command Description This section describes all BEAV commands as to their function and any side effects that they may have. The first line of each description of a command will begin with the default key binding then the command name and follows with the key binding for a PC. 3.1 Help This command returns information that will aid in the use of BEAV. Esc ? help F1 A new window is opened by splitting the current window then all current key bindings are displayed. This buffer is larger than can be shown at one time and must be scrolled up and down to see all entries. All commands that do not alter data can be used to move around and search the help buffer. To leave the help buffer use the 'window-delete' command ('Ctl-X 0'). Lines that begin with the comment character (#) are commands that have the default bindings. Lines without the comment character have been bound by the user or by processing a beavrc file. The comment character helps in creating a beavrc file by identifying only those bindings that have changed. 3.2 Cursor Movement There are a number of commands that move the cursor around the current window. If the cursor bumps the top or the bottom of the window the position of the window will be adjusted so as to keep the cursor within the bounds. When the window is moved in response to cursor movements it is moved by about one third of the window size. This improves performance by reducing the number of window moves. Ctl-P move-back-line North (up arrow) Ctl-N move-forw-line South (down arrow) BEAV User Manual 12 These commands move the cursor up one line or down one line. If the cursor is on the top line in the buffer and a 'move-back-line' command is given the cursor will jump to the beginning of the first unit in the buffer. If the cursor is on the last line of the buffer and a 'move-forw-line' is given the cursor will move to the last unit in the buffer. Ctl-F move-forw-char East (right arrow) Ctl-B Move-back-char West (left arrow) These commands move the cursor forward or backward in the current line. If the cursor is at the first character in the first unit of the line and the 'move-back-char' command is given then the cursor will wrap to the last character of the previous line. If the cursor is at the last character of the last unit in the current line then it will wrap to the first character of the next line. Esc F move-forw-unit Ctl-East Esc B move-back-unit Ctl-West These commands are similar to the above set but they move the cursor by units rather than characters. The command 'move- forw-unit' will position the cursor to the first character of the next unit. The command 'move-back-unit' will move the cursor to the first character of the previous unit. Ctl-V move-forw-page PageUp Esc V move-back-page PageDown These commands move the move the data in the window by the number of lines in the window less one. The cursor will stay in the same position relative to the window as the data is moved. Esc < move-to-beginning Home Esc > move-to-end End Move the cursor to the beginning or the end of the buffer. Ctl-X G move-to-byte F9 Prompt for a byte offset, then go to that position in the current buffer. Ctl-X Ctl-N move-window-down Ctl-Z Ctl-X Ctl-P move-window-up Esc Z Move the buffer in the window up or down by one line. This does not effect the cursor until it hits the top or bottom of the window. BEAV User Manual 13 Esc . mark-set F2 Set the mark position to the current cursor position. The mark position is remembered even for nonactive windows and buffers. Ctl-X Ctl-X swap-cursor-and-mark The position of the cursor and the position of the mark are swapped. Esc L window-link This command causes all windows that are displaying the contents of the current buffer to have the same cursor position. Thus if one window is scrolled then all other windows that display that buffer are scrolled so as to keep the cursor in the window. Ctl-X = show-position The current position of the cursor and the mark are displayed. The buffer size, file size and file name are also shown. 3.3 Buffer Management Buffers store all data that is being edited. The only limit to the number of buffers is the size of available memory. If a file is loaded into a buffer and there is insufficient memory to hold the entire file, then it will be loaded until memory is exhausted. The buffer will then be set to read only mode. Ctl-X Ctl-B buffers-display Ctl-F1 A new window is opened and a list of all buffers in BEAV is displayed. The list contains the buffer name, the file name (if it exists), the buffer size, and a state flag. If the list is too large for the window, you can scroll the list. If you position the cursor on a line describing a buffer and give the set-mark (Esc .) command you will be prompted to; Go to, Kill, or Save that buffer. Ctl-X B change-buffer Ctl-F2 This command prompts you for a buffer name. If you enter the name of an existing buffer, that buffer will be displayed in the current window. If the name does not match an existing BEAV User Manual 14 buffer, a new buffer will be created and displayed. This buffer will be empty and will have no file name. Esc + change-to-next-buffer Ctl-F4 Esc - change-to-prev-buffer Ctl-F5 The next or the previous buffer in the buffer list is displayed in the current window. This does not effect buffers that are displayed in other windows. Esc G move-to-buffer-split Prompt for a buffer name. Then split the current window and display that buffer, creating it if necessary. Esc Ctl-N buffer-set-name Esc Ctl-N The current buffer name is changed to the name that you enter. This does not effect the file name. Ctl-X Ctl-F buffer-set-file-name Ctl-F7 The file name of the current buffer is changed to the name that you enter. This does not affect the buffer name. Ctl-X K kill-buffer Ctl-F3 This command prompts you for a buffer name. This buffer is then deleted. If the buffer is currently being displayed you are prompted for conformation. If the buffer has been changed you are again prompted for conformation. Ctl-X Ctl-L buffer-size-lock The buffer size is prevented from being changed. Data can be edited but only by changing the existing data. If a buffer is copied into a size-locked buffer the operation well be successful but will overwrite existing data. This command toggles between locked and unlocked. Esc Y yank-buffer Ctl-F6 Data from one buffer is inserted into the current buffer at the cursor position. You are prompted for the name of the buffer to copy from. Esc O save-mark-to-cursor Prompt for a buffer name. Create a new buffer with that name and write the data from the mark to the cursor into that buffer. BEAV User Manual 15 Esc Ctl-W show-save-buf Displays the contents of the save buffer in a new window. The save buffer cannot be edited. This command can be used to see the data that the yank (Ctl-Y) command will insert into the current buffer. 3.4 File Management These commands control BEAV's access to files. Files are loaded into buffers or are written from buffers. Commands that prompt for a file name also accept range parameters. Range parameters are always given in the numeric base of the current window. Thus if you are displaying data in decimal format then the range parameters must be entered in decimal. The size of a file read or write can be limited by specifying a range. The range parameter specifies the offset into the file, not the buffer. Range parameters can be specified in these forms; + The first form causes the read or write to begin from the value until the end of the buffer on write or the end of the file on read. The second form reads or writes from until non-inclusive. The third form reads or writes from for bytes. Thus, if the command 'file-read' is given and you enter at the prompt; main.obj 1000 +100. If the current display mode is hex, the file "main.obj" will be read from hex byte address 1000 to 10FF into the buffer. Ctl-X Ctl-R file-read Sh-F2 Prompt for a file name and read that file into the current buffer. This overwrites the current contents of the buffer. The buffer name is not changed but the buffer file name is set to the new file name. BEAV User Manual 16 Ctl-X Ctl-S file-save Sh-F3 Write the current buffer out to the file if it has been changed. If the buffer has not been changed then do nothing. Ctl-X V file-view Prompt for a file name and read file into a new buffer and display in current window. Set to read-only mode. Ctl-X Ctl-V file-visit Sh-F4 Prompt for a file name. If the buffer already exists then display it in the current window. Otherwise, read file into a new buffer and display in current window. If there is no such file then create it. Esc U file-visit-split Same as above but split current window and display new buffer. This displays the new buffer as well as the old buffer. Ctl-X Ctl-W file-write Sh-F5 Prompt for a file name, then write the current buffer to that file. Ctl-X Tab insert-file Sh-F8 Prompt for a file name and insert that file into the current buffer at the cursor position. Ctl-X Return save-all-buffers Sh-F6 Write all buffers that have been changed to their respective files. 3.5 Window Management BEAV presents information to the user in one or more windows. Each window is a view into a buffer where the data is actually stored. The window controls how this data is formatted for display to the user. Data can be displayed as HEX bytes, OCTAL bytes, ASCII characters, plus many others. The display format is associated with the window. Thus if a new buffer is displayed in the current window that new data will be displayed in the current windows format. The only limit to the number of windows is the screen size. A window can be no smaller than two lines. This along with the BEAV User Manual 17 mode line associated with each window limits to eight the number of windows on an IBM PC 25 line screen. Any window can view any buffer including having many windows on the same buffer. For example, two windows can display the same buffer but present the data in two different modes. One window could display HEX bytes and the other could display ASCII characters. Ctl-P change-window-back Ctl-PageUp Ctl-N change-window-forw Ctl-PageDown These commands move the cursor to the next or previous window on the screen, making it the current window. Ctl-X Z window-enlarge Ctl-X Ctl-Z window-shrink Enlarge or shrink the current window size by one line. Esc ! window-reposition Move window position so that the cursor is centered in the window. The cursor position in the buffer does not change. Ctl-X 2 window-split Split the current window into equal parts. Both halves have the same display mode and view the save buffer. Ctl-X 1 window-single Expand the current window to fill the entire display, all other windows are removed. Make the current window the only window displayed. This has no effect on the underlying buffers except that they may not be displayed any more. Ctl-X 0 window-delete Delete the current window and expand the upper window to fill the space. This has no effect on the underlying buffer except that it may not be displayed any more. Esc Ctl-A display-ascii Esc Ctl-E display-ebcdic Esc Ctl-F display-float Esc Ctl-H display-hex Esc Ctl-O display-octal Esc Ctl-D display-decimal Esc Ctl-B display-binary BEAV User Manual 18 These commands set the window display mode. Text buffers can be displayed as ASCII or EBCDIC characters. Buffers that are not human readable can also be displayed in hexadecimal, octal, decimal, float, or binary format. Esc 1 display-bytes Esc 2 display-words Esc 4 display-double-words As a further option on the non-text display modes, data can be displayed as 8, 16, or 32 bit values. Floating point numbers are assumed to be 64 bit values. Ctl-E display-swap-order When data is displayed as words or double words the order of significance can be changed. In Intel microprocessors the least significant byte of a word is stored at the lowest address. Thus if the word 5892 (HEX) were stored at memory address 10, then 92 (HEX) would be stored at address 10 and 58 (HEX) would be stored at address 11. In Motorola microprocessors the reverse is true. This command toggles between the Intel and Motorola schemes of assembling bytes into words and double words. This command has no effect on byte display or on the text display modes. The data in the buffer is not changed. Ctl-A display-byte-shift This command changes the offset from the beginning of the buffer used to assemble words and double words. The default shift is 0. For example, a double word at address 10 is made up of the bytes at address 10, 11, 12, and 13. With a shift of 1 that double word would be made of bytes 11, 12, 13, and 14. With a shift of 2 then bytes 12, 13, 14, and 15 would be used. The maximum shift in word display mode is one and the maximum shift in double word mode is three. The buffer is in effect shifted toward the beginning of the buffer with 1, 2, or up to 7 bytes becoming not visible. These bytes are not lost, they become visible when the shift is set to zero. This command cycles through all possible shift values. There is no effect in any byte display mode or any text display mode. 3.6 Inserting and deleting These commands are the core of BEAV. These commands allow the buffer to be edited in a similar fashion to a text editor. BEAV has an insert mode much the same as text editors but it only BEAV User Manual 19 works when displaying data in one of the text modes, either ASCII or EBCDIC. In other modes it doesn't make any sense to insert characters as they are typed when there is more than one characters per unit. In the data modes there is a command that inserts a unit of zeros into the buffer. Similarly the delete commands always delete a unit rather than a character. In a text mode the delete commands work as in a text editor because a unit is a character. Ctl-X I insert-unit Insert a zero at the cursor position. The rest of the data moves down one place. Thus, if double words are being displayed, four bytes are inserted before the cursor position. These bytes are initialized to zero. This command works in all display modes. Ctl-X Ctl-A insert-toggle Insert In either of the two text modes this command toggles between insert mode and overwrite mode. In insert mode each character that is typed is inserted in front of the cursor and the rest of the buffer is moved down. In overwrite mode the typed characters replace the character that is at the cursor. This command has no effect in a non-text display mode. Ctl-Q insert-literally Esc Q This command sets a special temporary mode where the next typed character is inserted in the buffer no matter what the character is. This allows control codes to be inserted in the buffer when in a text display mode. Alternatively the same byte could be inserted into the buffer by using one of the data display modes. It night be faster to use this command on some occasions. Ctl-T unit-twiddle The unit at the cursor is swapped with the previous unit. Rubout delete-back-char Backspace This command deletes the character before the cursor and pulls the rest of the buffer back. The cursor remains on the same character as it moves back. It only works in the text and byte display modes. Ctl-D delete-forw-char Delete BEAV User Manual 20 The character at the cursor is deleted and the buffer is pulled back. The cursor remains at the same position. It only works in the text and byte display modes. Esc Rubout delete-back-unit Esc Ctl-K This command deletes the unit before the cursor and pulls the rest of the buffer back. The cursor remains on the same unit as it moves back. Esc D delete-forw-unit The unit at the cursor is deleted and the buffer is pulled back. The cursor remains at the same position. Esc W copy-mark-to-cursor F7 The area in the buffer from the mark to the current cursor position is copied into the kill buffer. If the mark is not set before this command is given an error is reported. Ctl-W delete-mark-to-cursor F8 The area in the buffer from the mark to the current cursor position is deleted and placed into the kill buffer. If the mark is not set before this command is given an error is reported. Ctl-Y yank F6 The contents of the kill buffer is inserted into the buffer at the cursor position. The kill buffer itself is not changed. 3.7 Search and Replace Commands BEAV has very powerful search and replace commands. The search and replace string can be entered in any of the display modes. The search and replace strings can each be up to 256 bytes long. The display mode can be changed at any time while entering the string. Wild cards can be placed down to the bit level on both the search and replace strings. The wild card character, '?', will match any value that it is compared with. When a wild card is placed in the replace string it leaves the destination data unchanged at that position. Thus, if the destination contains the ASCII string '41 42 43 44' and the replace string contains '66 67 ?? 69' the result would be '66 67 43 69'. BEAV User Manual 21 Wild cards can be placed in any position that makes sense. If you want to use wild cards in an ASCII string then you must switch to another mode to enter them. You can then switch back to ASCII mode. In this case a '?' will appear in the position where the wild card has been placed but it appears exactly the same as a standard question mark. In fact if you type a '?' over the wild card there will be no apparent change. However, the character will no longer be a wild card but a standard question mark. To see the true wild cards you must use a data display mode. In fact if the wild card has been set on the bit level then you must go to binary display mode to see its actual position. The commands to change the display mode in search and replace are the same as for the window display mode. The search and replace strings can be scrolled back an forth and the cursor moved using the same commands as for the window. While performing a replace command you can switch between the search string and replace string by using the 'move-back-page' or 'move- forw-page' commands. Esc S search-forw F3 Prompts for a search string then searches from the current cursor position for the first match. The cursor is positioned at the first unit of the match. Esc R search-back This command is the same as the previous one except that it searches backward. Esc T search-again F4 This command repeats the previous search command, forward or backward. The cursor is first moved one byte in the appropriate direction before the search is repeated. Esc % replace F5 Prompt for search string. After entering the search string hit return and you will be prompted for the replace string. After entering the replace string hit return. BEAV will then search for the first match with the search string. If a match is found you will be prompted with '(R)eplace, (S)kip, (A)ll, (O)ne, (Q)uit' If you type a 'R' the replace will be done at this location and the search will continue. If you type a 'S' the replace will not be done and search will continue. If you type an 'A' the replace will be done and will be done at all future matches BEAV User Manual 22 without pausing for conformation. If you type an 'O' the replace will be done at this location and the search will stop. If you type a 'Q' then the search will be terminated. Ctl-R recall-srch-string If you enter search or replace previously used strings can be recalled with this command. 3.8 Exiting BEAV While using BEAV individual buffers may be saved to disk during the editing session. When quitting BEAV you must save all buffers or delete all buffers. There are two commands that do this. Ctl-C quit-no-save Sh-F10 If there are any unsaved buffers you will be prompted for conformation before proceeding. All buffers will be deleted then you will return to DOS. Ctl-X Ctl-E quit-save-all Sh-F9 All buffers are saved before exiting to DOS. 3.9 Printing The data that is being displayed in BEAV can be printed or sent to a file in the same format as displayed. If the current window is displaying octal words and a print command is given the format of the print will be in the format of the window; that is, octal words. Esc P print-mark-to-cursor Ctl-Print To use this command you must set the mark and the cursor to define the region that you want printed. If the mark is not set it as assumed to be at the first unit. After you enter the command you will be prompted with 'Print to:'. You can enter a file name or a device name to send the print image to. If you enter 'PRN' most systems will print a hard copy. This is useful for getting a print out of the current key bindings. To do this give the 'help' command 'F1'. Go to the bottom of the help window using the 'move-to-end' command 'End', the mark will be assumed to be at the beginning of the buffer. Issue the 'print-mark-to-cursor' command. Enter 'PRN' at the BEAV User Manual 23 prompt. This should print the complete help buffer and will reflect any changes that you have made to the key bindings. 3.10 Keyboard Macros BEAV has the capability of recording key strokes as they are entered and playing them back later. This is useful for repeating multi-keystroke operations. Ctl-X ( macro-start Start recording key strokes. There is no effect on the operation of the key strokes. Any previous recorded key strokes are cleared. Ctl-X ) macro-end Stop recording key strokes. The key strokes are available for play back. Ctl-X E macro-execute Play back the recorded key strokes. The key strokes that were recorded are played back as if they were typed at the keyboard. 3.11 Key Binding BEAV provides a user configurable interface. The interface is controlled by a set of key bindings. This relates the command that will be executed when a particular key stroke is entered. There are a set of default key bindings as described in this manual. These can be changed to reflect your preferences. When a change is made it is reflected in the help screen. Ctl-X ? binding-for-key Sh-F1 This command will tell you what function a certain key sequence is bound to. When this command is given you will be prompted for a key stroke or key stroke sequence. BEAV will report back with the function name. Esc K bind-to-key First you will prompted for a function name. Enter the name of the function that you wish to create a new binding for. Function names are the names listed in this manual that are of the form of 'move-forw-unit' or 'display-hex'. After you enter BEAV User Manual 24 the name hit return. You will be prompted for a key. This can be in the form of a single standard key such as 'Z'. Standard key sequences can be entered such as 'Ctl-X Z' or 'Esc Z'. Special keys can be entered such as 'F1' (function key 1) or 'Page Down'. It is probably a good idea to not use keys that are needed for editing. If you bound 'Z' to a function then you would not be able to enter it as a keystroke when using ASCII display mode. You could still enter it using the 'insert-literally' command or doing it in one of the data display modes but this would be more cumbersome. Ctl-X L bindings-load You are prompted for a file name that contains the key binding that you wish to set. This file is read in and the appropriate bindings are set. The text in the binding file should be of the form; For example; Ctl-X Ctl-P move-back-char 0550 F1 move-forw-char 04bb Ctl-A move-forw-unit 0141 Esc Ctl-T move-back-unit 0354 The easiest way of producing a valid key binding file is to set the desired bindings in BEAV. Next issue the 'help' command (ESC ?), then write the buffer out with the file-write command (Ctl-X Ctl-W). The file created will be a valid format for loading and can be edited as desired. It is the only reliable way to get the number. 3.12 Special Functions These are the commands that do not logically fit under one of the previous headings Ctl-G abort-cmd F10 This command aborts the current command. It can even abort a partially entered command. Thus, if you have typed an 'Esc' as that start of a command you can type Ctl-G to return to the normal command entry mode. Esc A auto-save BEAV can be set to automatically save the current buffer after a specified number of buffer editing commands are given. BEAV User Manual 25 This command first prompts for the number of operations before the save is made. If a zero is entered at the prompt, this feature is disabled. The default condition of this command is disabled. Esc C compare This is a powerful feature of BEAV. The contents of two windows are compared byte for byte from the current cursor position in each window. There must be exactly two windows to use this command. These windows can be displaying the same or different buffers. When a difference is found the cursor in each window is moved to that position and both windows are moved accordingly. The display mode does not affect the operation of this command except in restricting the cursor position to whole units. Esc X extended-command If any command looses its binding, this command allows the unbound command to be used. A command can loose its binding because the binding was assigned to another command. When this command is given you will be prompted for a command name. Enter the command name that you wish to execute, it will be executed as if you had typed its key binding. Esc Ctl-P n-way-combine The contents of other windows can be copied sequentially into the current window. This is useful in combining odd-even proms into an executable image file. To use this command create an empty window with a buffer file name of an empty or nonexistent file. Read into additional windows the files that you want to combine. While in the empty target window, issue the n-way-combine command. The data in the other windows will be read into the current window. The next window lower on the screen will be read first, then the one below that, etc. For example; if you had two files, promlow.bin and promhi.bin that you wanted to combine into a file called prom.bin. First issue the file-visit command (Ctl-X Ctl-V), enter prom.bin at the prompt. This file should be empty of non- existent. Next read promlow.bin into a new window with the file-visit-split command (Esc U), enter promlow.bin at the prompt. Open another window for promhi.bin with the same command. Go to the window containing prom.bin (empty). Issue the n-way-combine command. BEAV will copy the first byte from the window immediately below the prom.bin window and deposit it in the destination window buffer as well as advance the dot position in both windows. It will advance to the next lower window and copy a byte from there into the destination window and BEAV User Manual 26 advance the dot in both windows. This process will continue until one of the source buffers is exhausted, or the user terminates the command. The user must take care that the source buffers are in the correct order. They are read starting at the window immediately below the current window. If the target window is at the bottom of the screen then it wraps to the top. In this way any order can be used and changed at will. Esc Ctl-S n-way-split This command is the mirror image of the n-way-combine. The data in the current window is distributed among the rest of the window buffers displayed. The current window buffer must be the only window buffer that contains data. If there are two other empty window buffers then the data will be divided two ways. If there are five then the data will be divided five ways Ctl-L refresh-screen The screen is reprinted from BEAV's internal buffer. This is useful if the display is messed up due to transmission errors. On a PC this is unlikely to happen. Esc Ctl-V show-version The version and date of BEAV is displayed in the command line. Ctl-X C spawn-shell A new MSDOS command shell is created. You can return to BEAV by typing 'exit'. Ctl-U repeat count This command prompts for a number to be entered. This causes the next command given to be repeated by that number of times. This command cannot have it's binding changed and cannot be issued using the 'extended-command' function. Esc Ctl-R screen-rows The number of rows that beav will use to paint the screen can be set with this command. This command can be given any time, the displayed windows will be adjusted or killed as needed. BEAV User Manual 27 4. Alphabetical list of commands by name Command Key Binding Manual Section ------- ----------- -------------- abort-cmd Ctl-G 3.12 abort-cmd Ctl-X Ctl-G 3.12 abort-cmd Esc Ctl-G 3.12 abort-cmd F10 3.12 auto-save Esc A 3.12 bind-to-key Esc K 3.11 binding-for-key Ctl-X ? 3.11 binding-for-key Sh-F1 3.11 bindings-load Ctl-X L 3.11 buffer-set-file-name Ctl-F7 3.3 buffer-set-file-name Ctl-X Ctl-F 3.3 buffer-set-file-name Sh-F7 3.3 buffer-set-name Esc Ctl-N 3.3 buffer-size-lock Ctl-X Ctl-L 3.3 buffers-display Ctl-F1 3.3 buffers-display Ctl-X Ctl-B 3.3 change-buffer Ctl-F2 3.3 change-buffer Ctl-X B 3.3 change-to-next-buffer Ctl-F4 3.3 change-to-next-buffer Esc + 3.3 change-to-prev-buffer Ctl-F5 3.3 change-to-prev-buffer Esc - 3.3 change-window-back Ctl-PageUp 3.5 change-window-back Ctl-X P 3.5 change-window-forw Ctl-PageDown 3.5 change-window-forw Ctl-X N 3.5 compare Esc C 3.12 copy-mark-to-cursor Esc W 3.6 copy-mark-to-cursor F7 3.6 delete-back-char Backspace 3.6 delete-back-char Rubout 3.6 delete-back-unit Esc Ctl-K 3.6 delete-back-unit Esc Rubout 3.6 delete-forw-char Ctl-D 3.6 delete-forw-char Delete 3.6 delete-forw-unit Esc D 3.6 delete-mark-to-cursor Ctl-W 3.6 delete-mark-to-cursor F8 3.6 display-ascii Esc Ctl-A 3.5 display-binary Esc Ctl-B 3.5 display-byte-shift Ctl-A 3.5 display-bytes Esc 1 3.5 display-decimal Esc Ctl-D 3.5 display-double-words Esc 4 3.5 display-ebcdic Esc Ctl-E 3.5 display-float Esc Ctl-F 3.5 display-hex Esc Backspace 3.5 BEAV User Manual 28 display-octal Esc Ctl-O 3.5 display-swap-order Ctl-E 3.5 display-words Esc 2 3.5 extended-command Esc X 3.12 file-read Ctl-X Ctl-R 3.4 file-read Sh-F2 3.4 file-save Ctl-X Ctl-S 3.4 file-save Sh-F3 3.4 file-view Ctl-X V 3.4 file-visit Ctl-X Ctl-V 3.4 file-visit Sh-F4 3.4 file-visit-split Esc U 3.4 file-write Ctl-X Ctl-W 3.4 file-write Sh-F5 3.4 help Esc ? 3.1 help F1 3.1 insert-file Ctl-F8 3.4 insert-file Ctl-X Tab 3.4 insert-file Sh-F8 3.4 insert-literally Ctl-Q 3.6 insert-literally Esc Q 3.6 insert-toggle Ctl-X Ctl-A 3.6 insert-toggle Insert 3.6 insert-unit Ctl-X I 3.6 kill-buffer Ctl-F3 3.3 kill-buffer Ctl-X K 3.3 macro-end Ctl-X ) 3.10 macro-execute Ctl-X E 3.10 macro-start Ctl-X ( 3.10 mark-set Esc . 3.2 mark-set F2 3.2 move-back-char Ctl-B 3.2 move-back-char West 3.2 move-back-line Ctl-P 3.2 move-back-line North 3.2 move-back-page Esc V 3.2 move-back-page PageDown 3.2 move-back-unit Ctl-West 3.2 move-back-unit Esc B 3.2 move-forw-char Ctl-F 3.2 move-forw-char East 3.2 move-forw-line Ctl-N 3.2 move-forw-line South 3.2 move-forw-page Ctl-V 3.2 move-forw-page PageUp 3.2 move-forw-unit Ctl-East 3.2 move-forw-unit Esc F 3.2 move-forw-unit Sh-Tab 3.2 move-to-beginning Esc < 3.2 move-to-beginning Home 3.2 move-to-buffer-split Esc G 3.2 BEAV User Manual 29 move-to-byte Ctl-X G 3.2 move-to-byte F9 3.2 move-to-end End 3.2 move-to-end Esc > 3.2 move-window-down Ctl-X Ctl-N 3.2 move-window-down Ctl-Z 3.2 move-window-up Ctl-X Ctl-P 3.2 move-window-up Esc Z 3.2 n-way-combine Esc Ctl-P 3.12 n-way-split Esc Ctl-S 3.12 print-mark-to-cursor Ctl-Print 3.9 print-mark-to-cursor Esc P 3.9 quit-no-save Ctl-C 3.8 quit-no-save Ctl-F10 3.8 quit-no-save Ctl-X Ctl-C 3.8 quit-no-save Sh-F10 3.8 quit-save-all Ctl-F9 3.8 quit-save-all Ctl-X Ctl-E 3.8 quit-save-all Sh-F9 3.8 recall-srch-string Ctl-R 3.7 refresh-screen Ctl-L 3.12 replace Esc % 3.7 replace F5 3.7 save-all-buffers Ctl-X Return 3.4 save-all-buffers Sh-F6 3.4 save-mark-to-cursor Esc O 3.3 screen-rows Esc Ctl-R 3.12 search-again Esc T 3.7 search-again F4 3.7 search-back Esc R 3.7 search-forw Esc S 3.7 search-forw F3 3.7 show-position Ctl-X = 3.2 show-save-buf Esc Ctl-W 3.3 show-version Esc Ctl-V 3.12 spawn-shell Ctl-X C 3.12 swap-cursor-and-mark Ctl-X Ctl-X 3.2 unit-twiddle Ctl-T 3.6 window-delete Ctl-X 0 3.5 window-enlarge Ctl-X Z 3.5 window-link Esc L 3.2 window-reposition Esc ! 3.5 window-shrink Ctl-X Ctl-Z 3.5 window-single Ctl-X 1 3.5 window-split Ctl-X 2 3.5 yank Ctl-Y 3.6 yank F6 3.6 yank-buffer Ctl-F6 3.3 yank-buffer Esc Y 3.3 BEAV User Manual 30 5. Alphabetical list of commands by key binding Command Key Binding Manual Section ------- ----------- -------------- delete-back-char Backspace 3.6 display-byte-shift Ctl-A 3.5 move-back-char Ctl-B 3.2 quit-no-save Ctl-C 3.8 delete-forw-char Ctl-D 3.6 display-swap-order Ctl-E 3.5 move-forw-unit Ctl-East 3.2 move-forw-char Ctl-F 3.2 buffers-display Ctl-F1 3.3 quit-no-save Ctl-F10 3.8 change-buffer Ctl-F2 3.3 kill-buffer Ctl-F3 3.3 change-to-next-buffer Ctl-F4 3.3 change-to-prev-buffer Ctl-F5 3.3 yank-buffer Ctl-F6 3.3 buffer-set-file-name Ctl-F7 3.3 insert-file Ctl-F8 3.4 quit-save-all Ctl-F9 3.8 abort-cmd Ctl-G 3.12 refresh-screen Ctl-L 3.12 move-forw-line Ctl-N 3.2 move-back-line Ctl-P 3.2 change-window-forw Ctl-PageDown 3.5 change-window-back Ctl-PageUp 3.5 print-mark-to-cursor Ctl-Print 3.9 insert-literally Ctl-Q 3.6 recall-srch-string Ctl-R 3.7 unit-twiddle Ctl-T 3.6 move-forw-page Ctl-V 3.2 delete-mark-to-cursor Ctl-W 3.6 move-back-unit Ctl-West 3.2 macro-start Ctl-X ( 3.10 macro-end Ctl-X ) 3.10 window-delete Ctl-X 0 3.5 window-single Ctl-X 1 3.5 window-split Ctl-X 2 3.5 show-position Ctl-X = 3.2 binding-for-key Ctl-X ? 3.11 change-buffer Ctl-X B 3.3 spawn-shell Ctl-X C 3.12 insert-toggle Ctl-X Ctl-A 3.6 buffers-display Ctl-X Ctl-B 3.3 quit-no-save Ctl-X Ctl-C 3.8 quit-save-all Ctl-X Ctl-E 3.8 buffer-set-file-name Ctl-X Ctl-F 3.3 abort-cmd Ctl-X Ctl-G 3.12 buffer-size-lock Ctl-X Ctl-L 3.3 BEAV User Manual 31 move-window-down Ctl-X Ctl-N 3.2 move-window-up Ctl-X Ctl-P 3.2 file-read Ctl-X Ctl-R 3.4 file-save Ctl-X Ctl-S 3.4 file-visit Ctl-X Ctl-V 3.4 file-write Ctl-X Ctl-W 3.4 swap-cursor-and-mark Ctl-X Ctl_X 3.2 window-shrink Ctl-X Ctl-Z 3.5 macro-execute Ctl-X E 3.10 move-to-byte Ctl-X G 3.2 insert-unit Ctl-X I 3.6 kill-buffer Ctl-X K 3.3 bindings-load Ctl-X L 3.11 change-window-forw Ctl-X N 3.5 change-window-back Ctl-X P 3.5 save-all-buffers Ctl-X Return 3.4 insert-file Ctl-X Tab 3.4 file-view Ctl-X V 3.4 window-enlarge Ctl-X Z 3.5 yank Ctl-Y 3.6 move-window-down Ctl-Z 3.2 delete-forw-char Delete 3.6 move-forw-char East 3.2 move-to-end End 3.2 window-reposition Esc ! 3.5 replace Esc % 3.7 change-to-next-buffer Esc + 3.3 change-to-prev-buffer Esc - 3.3 mark-set Esc . 3.2 display-bytes Esc 1 3.5 display-words Esc 2 3.5 display-double-words Esc 4 3.5 move-to-beginning Esc < 3.2 move-to-end Esc > 3.2 help Esc ? 3.1 auto-save Esc A 3.12 move-back-unit Esc B 3.2 display-hex Esc Backspace 3.5 Compare Esc C 3.12 display-ascii Esc Ctl-A 3.5 display-binary Esc Ctl-B 3.5 display-decimal Esc Ctl-D 3.5 display-ebcdic Esc Ctl-E 3.5 display-float Esc Ctl-F 3.5 abort-cmd Esc Ctl-G 3.12 delete-back-unit Esc Ctl-K 3.6 buffer-set-name Esc Ctl-N 3.3 display-octal Esc Ctl-O 3.5 n-way-combine Esc Ctl-P 3.12 screen-rows Esc Ctl-R 3.12 n-way-split Esc Ctl-S 3.12 BEAV User Manual 32 show-version Esc Ctl-V 3.12 show-save-buf Esc Ctl-W 3.3 delete-forw-unit Esc D 3.6 move-forw-unit Esc F 3.2 move-to-buffer-split Esc G 3.2 bind-to-key Esc K 3.11 window-link Esc L 3.2 save-mark-to-cursor Esc O 3.3 print-mark-to-cursor Esc P 3.9 insert-literally Esc Q 3.6 search-back Esc R 3.7 delete-back-unit Esc Rubout 3.6 search-forw Esc S 3.7 search-again Esc T 3.7 file-visit-split Esc U 3.4 move-back-page Esc V 3.2 copy-mark-to-cursor Esc W 3.6 extended-command Esc X 3.12 yank-buffer Esc Y 3.3 move-window-up Esc Z 3.2 help F1 3.1 abort-cmd F10 3.12 mark-set F2 3.2 search-forw F3 3.7 search-again F4 3.7 replace F5 3.7 yank F6 3.6 copy-mark-to-cursor F7 3.6 delete-mark-to-cursor F8 3.6 move-to-byte F9 3.2 move-to-beginning Home 3.2 insert-toggle Insert 3.6 move-back-line North 3.2 move-back-page PageDown 3.2 move-forw-page PageUp 3.2 delete-back-char Rubout 3.6 binding-for-key Sh-F1 3.11 quit-no-save Sh-F10 3.8 file-read Sh-F2 3.4 file-save Sh-F3 3.4 file-visit Sh-F4 3.4 file-write Sh-F5 3.4 save-all-buffers Sh-F6 3.4 buffer-set-file-name Sh-F7 3.3 insert-file Sh-F8 3.4 quit-save-all Sh-F9 3.8 move-forw-unit Sh-Tab 3.2 move-forw-line South 3.2 move-back-char West 3.2 BEAV User Manual 33 6. Release notes Version 1.20 (3/10/91) of BEAV contains the following fixes and enhancements; * Under unix files are created with read/write permissions. * Fixed the bug in the terminal I/O routine that caused BEAV to spin rather than give up control when waiting for a character. * Added the ANSI #define that was missing for MSDOS. * Changed the D16 #define to a unsigned short. * Called ttclose on error exit. * Check and limit ncol and nrow to the actual screen array size. * Add the ability to load key bindings from a file automatically under MSDOS and unix. * Add delete current window command. * Support VT100 type function keys. Version 1.30 (7/1/91) of BEAV contains the following fixes and enhancements; * Under MSDOS and 16 bit UNIX systems the kill or copy region could not be over 64K bytes. This limit has been eliminated. * The save buffer can be made visible with the Esc Ctl- W command. The save buffer is not editable. * All memory allocation errors now pause and ask for conformation before continuing. In previous releases only an error message was printed. Since an allocation error generally means data loss, I have forced the user to respond. Memory allocation errors are not otherwise fatal to BEAV, they are probably fatal to the user's data. The decision is left to the user with the appropriate warning. * Two commands have been added to aid in working with PROM files; n-way-split (Esc Ctl-S) and n-way-combine (Esc Ctl-P). BEAV User Manual 34 * The speed of the delete-mark-to-cursor (Ctl-W) command has been greatly improved. * All commands that can potentially take a lot of time can be stopped by pressing Ctl-G. Version 1.31 (11/2/91) of BEAV contains the following fixes; * A serious bug that causes a crash on systems that trapped the use of dereferenced pointers has been fixed. * BEAV now names the backup file properly under unix. Previously; if a dot file (.) was edited, the backup file was given a garbage name. Now, a backup file simply has ".bak" appended to the file name. * You can use the buffers-display (Ctl-X, Ctl-B) command to; go to, kill, or save a buffer. * A compile flag for DEC ULTRA was created and a makeable is included in this release (makefile.utx). * When a large region was deleted the offset value was displayed wrong, this is now fixed. * A bug in the parse_f_name that trashed a variable is now fixed. * Regions of never used code have been deleted. * Under UNIX the file permissions are maintained correctly when the file is saved. * A number of un-niceties that lint reported have been fixed. Version 1.32 (11/8/91) of BEAV contains the following enhancements; * BEAV will now compile and run on the Amiga computer. Version 1.33 (8/9/92) of BEAV contains the following enhancements; BEAV User Manual 35 * A new command, "screen-rows", allows you to change the number of rows that BEAV will use on the CRT. The command can be issued anytime, the windows will be adjusted or killed as necessary. * Floating point numbers can be displayed using the "display-float" command. This will set the current window to floating point display, but the window cannot be edited. * The "beavrc" file processing has been enhanced to allow most commands to be executed from the rc file when BEAV loads. * The default key binding for the "n-way-combine" has been changed to Esc Ctl P. This frees up the old binding Esc Ctl F to be used for the "display-float" command which is more in line with the other display mode commands. * The replace command would fail to find all occurrences of a search pattern if the pattern fell on the boundary of certain internal data structures. This is fixed. * The memory used to handle screen images is now allocated at load time rather than statically allocated. This will allow systems with any screen size to be fully used. This depends on the variable "nrow" being properly set by whatever termcap description you have configured. The default for "nrow" is the #define "NROW" as set in the def.h file, generally 24. The columns remain fixed at 80. * Under Unix, BEAV will use the full screen rows as reported by the ioctl inquiry of the tty device. Previously, the bottom line was not used. * Under MSDOS, BEAV will use the full screen rows as reported by the int 10 function 1b call. * Not new to this release, but important for foreign language users. All English text in BEAV is contained in the file "text.c". It should be relatively easy to translate and recompile. If someone wants to send me a translated version of "text.c", I will include it in my next release. * The prompt line is now erased properly. BEAV User Manual 36 7. Source Availability BEAV source and executable is maintained at WSMR- SIMTEL20.ARMY.MIL in PD1:BEAV133.ZIP. The source and manual is available in PD1:BEAV133S.ZIP. If anyone does not have access to usenet, I will mail a copy of the source on floppy for $20.00 copying charge. The floppies can be in MSDOS file format or UNIX tar format. I can also supply either QIC-24, QIC-120, QIC-150, or 9 track reel to reel tape. The price for the tape will include the cost of the media.