Editing Program for Binary Files
FILE is a general purpose program used to display and/or change the contents of a disk file. It is especially useful for handling binary files such as DAT files and DTP files, which cannot be handled by conventional text editors.
Change the default drive (and directory, if appropriate) to the drive (and directory) where your file resides. Run the program by typing
in response to the prompt from the operating system. The program will respond by typing out its name and version no. as well as the current date.
You will be asked to enter the name of your file. The default filename extension is DAT.
Next you will be asked to enter the number of words per block. FILE reads data from the disk file into memory and writes data from memory to the disk file in chunks called blocks. You can specify how large a block is to be. The maximum blocksize that FILE allows is 2048 words. (1 word = 2 bytes, so the maximum blocksize is 4096 bytes; a byte is the amount of memory or disk space required to store one ASCII character.) If the disk file you are processing is a DAT file or DTP file, you would normally want to use the default blocksize, 256 words, which is obtained by just pressing Return in response to the prompt.
Unlike some of the other programs (e.g. UPDATE), nothing happens automatically in FILE. You tell FILE what to do by entering command letters. Many of the command letters are followed by numerical arguments.
After you have started FILE and opened the disk file, it sits waiting for your first command. Up to 5 commands may be entered at one time, and FILE will execute them in the order in which they were entered. After it has executed your command(s), it waits for more.
As a general rule, you start by reading into memory a block of data from the disk file. You can then display all or part of the contents of the block on the terminal and/or modify the contents of the block. If you modify the block, the disk file is not altered until you write the block in memory back to the disk file. The block in memory may be written back to its original position or to a new position (the previous contents of that block of the file are then lost). The data in memory may be written to disk any number of times, but only one block of data from the file is held in memory at any one time.
NOTE: Changes made to the disk file by FILE are immediate and permanent.
The old contents of the file are not recoverable.
The program will type an asterisk prompt when it is ready to accept commands. It will accept up to 5 commands on one line, provided that the line of commands and arguments is no more than 40 characters long. No delimiters are required between commands.
To get a menu on the screen listing the commands recognised by FILE, just press Return in response to the asterisk prompt.
The commands and their functions are listed in 10.6 below. Most of the commands may be or must be followed by 1 or 2 numerical arguments. If two numerical arguments are entered, they must be separated by a comma.
The commands recognised by FILE fall into four broad classes: block commands, display commands, change commands and miscellaneous commands. Following are detailed descriptions of all the commands.
(a) The block commands (R, W and B). These commands cause transfer of a whole block of data between memory and the disk file.
R (Read) - Reads the block specified from the disk file into memory. Block number must be specified, and must not be greater than the number of blocks in the file.
W (Write) - Writes the block of data in memory onto the disk file. If a block number is not specified, it will be written onto the block that was last read from. If a number is specified, it will be written onto that block.
N.B. The previous contents of that block of the disk file are lost.
B (Blank) - Zero fills the entire block in memory and writes it out to the specified block of the disk file. Block number must be specified.
(b) The display commands (A, L and S). These commands display all or part of the block in memory at the terminal.
A (ASCII) - Displays the specified bytes of the block in memory in ASCII character format. If followed by two numbers, they are the first and last bytes displayed. If followed by one number, that byte is displayed. If no arguments are specified, the whole block is displayed.
L (List) - Displays the specified words of the block in memory in decimal format. Arguments are as for A, except that they specify words rather than blocks.
S (Show) - Displays the specified bytes of the block in memory in decimal. Arguments are as for A.
(c) The change commands (C, I, N and Z). These commands change the data in all or part of the block in memory.
C (Change) - Accepts new value(s) for specified word(s) of the block currently in memory. Must be followed by one or two numbers specifying word or range of words to be changed.
The program will respond with the *? prompt. The new values must be typed in at the terminal, in decimal and separated by commas. A value omitted by typing two successive commas defaults to zero. A value or a comma must be entered for every word specified in the command.
The block must be Written to change the disk file.
I (Insert) - Same as C, but changes specified bytes instead of words. New values are in decimal, as for C.
N (Negate) - Negates the value of specified word(s) of the block currently in memory. Must be followed by one or two numbers specifying the word or range of words to be negated.
Z (Zero) - Zeroes specified word(s) of the block currently in memory. Arguments as for N.
(d) The miscellaneous commands (F, T, ?, X and Q).
F (File) - Checks for changes made to the block in memory and not written to the disk file. If any are found, the program offers a chance to write the block to to the file. Then closes the current file and prompts the user for a new filename.
N.B. Any commands typed on a line after F will be ignored.
T (Transfer) - Copies blocks into a new file. The program prompts the user for a new filename and creates a new file. Then the program prompts for the start and end numbers of a range of blocks to be copied from the old file to the new file. If no end block is specified, the program transfers only the start block. When the user presses Return in response to the prompt for the start block number, the program closes the new file.
? (which block?) - Prints out the number of the block currently in memory.
X (repeat) - Causes the last command line to be executed again, after incrementing the block number for any R, W or B commands by 1.
e.g., if the last command line was R5N256W, then X will cause R6N256W to be executed.
Note: X must be the only command in the line when it is used. X cannot be used following C,I,T or F in the last command line. X is treated as an invalid character if it is not first in the command line.
Q (Quit) - Checks for changes made to the block in memory and not written to the disk file. If any are found, the program offers a chance to write the block to to the file. Then closes the current file and terminates the program.
To exit from FILE, enter the Q (quit) command. The program will check to see whether you have modified the block currently in memory but not written it back to the disk file; if so, it will give you a chance to write the block to the disk file. The program then closes the disk file, which saves all changes, and terminates.
Note: Control-C is disabled in FILE to prevent you from accidentally exiting from the program without writing your last changes to disk.