Program: XOX, Version 1.0k Text File Viewer Author: Rob Friefeld Date: February 26, 1991 XOX is a versatile document viewer with additional functions for abstracting and merging files. It does not uncompress files or access libraries. XOX runs under ZCPR 3.3 or Z3PLUS and requires an extended TCAP supporting insert/delete line functions. Cursor on/off support is also very nice. XOX is assembled with the recently released VLIB4D. (See also XTCAP10 for a selection of new TCAPS for various terminals.) There are many text file viewers available. It isn't practical for any one of them to do everything one could want. I think XOX's strengths are its smooth display (a lot of attention was paid to that), its very strong datestamp support, and the additional I/O features included: it is very easy to send parts of the file on view to the printer or to other disk files, or to combine a list of small files for easier viewing. USING XOX SYNTAX: XOX [dir:]afn or, XOX [dir:][afn] [/][options][<, =, or >dd.mm.yy time] The file specification is automatically wildcarded. If there is more than one match, a file list is displayed. Move the cursor to the one you want to start with, or just press to read the first item. Non-text file types (e.g. COM, LBR) are ignored. The Datespec command line, discussed below, provides further control over selection and sorting of the file list. Once XOX is running, press "?" or "/" to see a command summary. AVAILABLE FUNCTIONS Here is a list of XOX functions, most of which are described below. You can assign them to keys you find convenient. MOVING THROUGH TEXT End of File Start of File Find Next Screen Previous Screen Repeat Find Next Line Previous Line Scan Forward Scan Backward Hop 10 Lines Forward Set Horizontal Scroll Set Place Marker Go to Page or Line # Go to Next Marker Go to Marker # Clear Markers FILE INPUT/OUTPUT BLOCK OPERATIONS Read More of File Set Block Marker Go to Block Merge File Print Block Log New Files Delete Block File Ring Write Block Repeat Write Block Cursor - Block Operation MISCELLANEOUS Delete Top Line Initialize Printer Clear Lines Type to Printer Display Ctrl Chars Exit XOX Show File Size MOVING THROUGH TEXT As distributed, XOX uses a functionally simple but not mnemonic key layout for its most basic functions. You can control movement through the file without shifting your hands at all. LEFT HAND RIGHT HAND F Next screen (also CR) J Previous screen. D Next line. K Previous line. S Scroll forward until key press. L Reverse scroll. A End of text. ; Start of text. G Find a string. H Repeat find. THUMB Hop forward 10 lines FIND STRING: - The string is limited to 16 characters. - The search is forward. - If any of the characters are upper case, the search is automatically case sensitive. Otherwise, it is case insensitive, unless the string is preceded by "/c/". - Wild card character "_" matches anything. (May be installed.) - If found, the string is highlighted on line 10. Hop makes it the top line. # - GO TO PAGE or LINE #: Prompt: Go to Page (L) > Give a page number you want to go to. Page number calculations are based on the Z3ENV data for the printer along with the installed single- or double-spacing calculation base. Page calculation is simple minded and does not take account of form feeds, WordStar dot commands, etc. To go to a LINE number, preceed the number with "L". MARKING TEXT Ten numbered place markers are available. Marker #0 is used as the start for block operations, described below. O - MARK: Set special Marker #0 to the current screen. It is the beginning mark for the four block operations. The marker is initialized to the beginning of the text if you don't specifically set it. Q - QUICK MARK: Set the next available place marker (1-9) to this screen. 0..9 - GO TO MARKER: Return display to marker 0..9. Markers are set with Q or O. Z - NEXT MARK: Go to next marker in the order set. Cycle through markers without need to use or remember their numbers. E - ERASE MARKERS: Re-initialize markers 1-9 to start of text. NOTE: Markers inside a deleted block are reset to the end of the block. FILE INPUT/OUTPUT R - READ: XOX will read as much of a file as available memory allows at one time. If the file is too big, a "memory full" message will appear. READ gets more of the file into memory in one of two ways: 1) If the text buffer is still full, another memory-sized section of the text will be read in with one screen of overlap. 2) If some memory is available because you have done block deletions, more of the text will be appended until the buffer is full again. By getting rid of stuff you aren't interested in, a large file can be condensed to the portion you wish to examine. ^L - RELOG: Start XOX on a new file list. TAB - FILE RING: All the file names matched by the initial callup are stored in a sorted list. The RING command shows them as a drop down list with the current selection highlighted. Move through the list to your next selection and press . You then see the prompt: (R)ead (m)erge (q)uit? READ is the default choice, or you may add the file to the text buffer or cancel the whole thing. Arrow key definitions are loaded from the TCAP. The WordStar diamond is also active. Ring controls are: Move up list up,^E (with wrap to end) Move down dn,^X,, (with wrap to start) Next screen rt,^D,^F,^C (if none, to last file) Previous screen lt,^S,^A,^R (if none, to first file) Login new list L Exit XOX X Any unrecognized key cancels, e.g. Q, . If you are viewing a file, cancellation just resumes viewing. If you have just logged in a new file set, cancellation terminates XOX. M - MERGE: Append the specified file to the text buffer. The FILE RING can also merge files, but MERGE allows you to get a file from a different directory. The display moves to the merged text and a place marker is automatically set to its start. BLOCK OPERATIONS "Blocks" consist of the text between Marker #0, which is set at the TOP of a screen by pressing "O", and the BOTTOM of the current screen. If you are doing a lot of block operations, it may be advisable to set a mark at the present position with "Q", verify the position of Marker #0, then return before doing anything. P - PRINT BLOCK: Send text in the block to the printer. or <^C> will halt the listing. High bits and control characters other than CR, LF and TAB are filtered out. On first call, you will be prompted to initialize the printer W - WRITE BLOCK: Enter a file specification at the prompt, then the block is written to it. If the file already exists, you can APPEND the block to it, REPLACE the file, or just cancel the operation. V - WRITE BLOCK TO FILE: Skip the file name prompt and append the block to the file opened in the last Write command. Once an output file has been opened, V keeps adding to it. U - DELETE BLOCK: The block is removed from XOX's buffer. This has no effect on the file on disk! Deletion is used to eliminate sections before a printout or disk write or just to make room in memory to intensively examine the interesting parts of a large file. B - CURSOR ORIENTED BLOCK OPERATION: The block operations are intended to work as simply as possible. For example, to send the current screen to the printer, just press "OP". To print a partial screen, move the text of interest to the top and press "O", then move the end of the block to the bottom of the screen and press "P". This is almost always the most convenient way to do a block op, especially when you get good with the scan up/down commands. It may not be possible to position the text the way you want it on the first or last screen of the file. The "B" command displays a cursor on line 10, the same line a FIND command goes to. Move the cursor to the desired line with your arrow keys, then press a block command key - "O" to set the marker, or "P-U- W-V" to execute. To cancel the cursor, press . If you set the block marker with O and continue to move the cursor down, the defined block is highlighted. MISCELLANEOUS / or ? - HELP SCREEN: Display of command keys. Changing the command keys automatically changes the HELP display. Y - DELETE LINE: Deletes the line at the top of the screen. More convenient than marking a block for deleting a few lines. I - INITIALIZE PRINTER: Send optional init string to printer. T - TYPE: Type a line to be sent to printer. Terminate with . Edit with DEL, BSP, ^X. Can send ^L line feed or other control characters directly. To send ^X, ^M or ^P, type ^P^X etc. The string input routine does NOT call BDOS read string function. "+" "=", "-" - SCAN SPEED: While continuous scrolling is running, the speed may be adjusted faster or slower. C - CLEAR LINES: CLEAR automatically deletes all lines starting with the specified character from memory. Using "[" will clean up a BBS capture file. Using "." would clear dot commands from a WordStar file. CLEAR prompts for the character to look for. Pressing uses the default character ("[") or the character entered the last time the command was used. To get out of CLEAR, press ^C or . ^ - SHOW CONTROLS: XOX ignores most control characters. It can display them in "^N" format if you want to see them, e.g. to see how a WordStar or HLP file is marked. \ - SET HORIZONTAL SCROLL: Pressing "+" or "=" continuously increases the horizontal scroll. Pressing "-" decreases it. Any other key exits. FIND will still match a string which has scrolled off the screen. XOX checks the TCAP for screen width, so I recommend that those with terminals capable of 135 col display use it rather than horizontal scrolling. = - SHOW FILE SIZE TO EOS: Number of bytes from start of text buffer to end of current screen is displayed. Intended to assist file chopping operations. DATESPEC FILE SELECTION Carson Wilson suggested adding a datestamp filter to XOX and was kind enough to show me how he did it with FILEDATE. I have closely followed Carson's method and wish to gratefully acknowlege his permission to do so. [ FILEDATE is a powerful directory utility distributed with ZSDOS. Refer to Section 4.4 of the ZSDOS User's Manual for more information on it. If you know how to use FD, you know how to use XOX.] The Datespec function tells XOX how to build its file list. XOX can select files created, modified, or accessed on, before or after an ambiguously specified date. Once selected, the list can be sorted alphabetically by name or type or sorted by date. Phew! Syntax: XOX [dir:][afn] [/][options][<, =, or >dd.mm.yy time] (1) (2) (3) Options: A use Access date {Modify date is default} C use Create date T sort alphabetically by Type S include System files + - sort by date Time: hh:mm for real time clock +dddd for relative clock with DateStamper (1) - Filespec If the filespec is omitted, it is automatically wildcarded. In that case, the "/" delimiter is required before any selecting or sorting options are given. A blank command line matches everything. Example: XOX *.* = All files modified today. XOX /= Same XOX /- Sort from newest to oldest, very useful. (2) - Options By default, any date specification is compared to the file's Modify date. If the file doesn't have a Modify date, the Create date is used. The options "A" or "C" force the use of that particular date. (3) - Datespec The mandatory date signifier "<", "=", or ">" tells XOX to select files from before, at, or after the date which follows. The full syntax for the date specification is: [day[.month[.year[ hour[:minute]]]]] Omitted date fields are filled in with the current date. An omitted time spec is taken to mean any time. The wildcard character "*" may be used to match any date or time. Examples: Datespec Meaning = Files modified today, any time a>1.7 Files accessed after 1 July this year c=..87 Files created any time in 1987 <.. 12:30 Files modified before 12:30pm today a-= Today's accessed files, most recent first Files which don't have a date stamp will fail all tests. If the option datespec parser is unable to resolve a command line, it just gives up (with a beep) and uses the larger set of files matching the Filespec alone. The "European" date style used here seems logical and convenient in that date specification proceeds from high to low resolution. You may install XOX (with XOXINST) to use the "American" style mm/dd/yy if you prefer it. The RELOG command also calls the full command line parser, so you can reselect from within XOX the same way you did at callup. RELOG can also be called while viewing the file ring list. Press the command you have installed for RELOG. Or, if it conflicts with an arrow key definition, just press "L". USING XOX TO PROCESS A BBS CAPTURE FILE There are several commands intended for this purpose: C - Clear prompt lines. All those useless lines that start with "[" are deleted, e.g. [More...], [Read (Y/N/Q)?]. Y - Delete line. Get rid of lines you send to the BBS. O - Set block marker to top of current screen. W - Write from block marker to bottom of current screen to a file. You can store messages in log files by subject, month BBS, etc. V - Write current block to same file as last "W" command. Repeated use of O and V keeps appending messages you want to save to the previously designated log file. USING XOX TO CHOP A FILE The file is too large (e.g. 100k) for a memory resident text editor. O - Set block marker. Start of a chop file. W - Write a convenient size block to a file. U - Delete block (from memory only - doesn't affect original disk file). R - Read more of file. You can keep reading more in after each deletion. INSTALLATION Since XOX is not an editor, there is no need to use control keys as commands. It is highly recommended to use single alpha keys. For those who prefer a more complex command structure, perhaps to reduce learning time, XOX will accept 2 different meta-keys, e.g. ^K and ^Q. XOXINST is a screen-oriented installation program for patching the control key set and various default initial states. TECHNICAL NOTE XOX reads and writes files without any filtering. Therefore, WordStar or other specially formatted files may be read and WRITTEN without corruption. XOX does require that each line be terminated by a CR at least (except the very last line). LF's, if present, are ignored. Files with lines separated by LF's only will not be displayed or printed properly. COPYRIGHT NOTICE XOX, its documentation, and its installation program are Copyright (C) 1991 by Robert Friefeld All Rights Reserved. Any commercial use or distribution with a commercial product requires the advance written consent of the author. Robert Friefeld 4607 Colorado Street Long Beach, CA 90814 (213) 434-7338 voice END XOX.DOC