| Front Page | News Headlines | Technical Headlines | Planning Features | Advanced Search |

January 2005

Boosting Your e3000 Productivity

MPE for UNIX Users:
Examining File Content

By Robert Green, Robelle

Last month in Part 3 of our series, we looked at files. This month we learn how to look at file content. If you are a Unix person, the first thing you look for is more, and the MPE equivalent is Print:

Print filename

Print displays the lines of the file on $Stdlist, stopping every screenful and asking if you want more. You can answer Y or N. In Unix, you usually press Space for Yes or “go on,” but in MPE you usually press Enter.

Print is only useful for files of text data. For looking at binary data, the basic tool provided by MPE is Fcopy.

The main purpose of Fcopy is “file copy,” but it can also display binary data in Hex or Octal format and do some simple data selection. Fcopy is a subsystem, while Print was an MPE command. You enter the subsystem with the Fcopy command and it has its own commands. You exit the subsystem with the Exit command (some later subsystems used Quit as Unix started to influence MPE). Other subsystems of MPE include Editor and Sort.

:fcopy

>from=filename;to=;hex;char

>from=filename;to=;octal;char

>exit

:

Notice that when you enter Fcopy, the prompt character changes from Colon to Greater Than. This is typical – a Colon prompt always indicates that an MPE command is expected.

The first command displays each record of filename on $Stdlist as a hexadecimal dump and as a character dump (Char replaces nonprinting characters such as Carriage Return and Linefeed with Period to avoid disrupting your display).

The second command converts the record data to Octal instead of Hex. The third command, Exit, gets you back to MPE.

Fcopy introduces you to a couple of other MPE-isms. You use Control-Y to stop the listing; this is true for all MPE subsystems, but for MPE commands use the Break key if Control-Y does not work. The syntax of the Fcopy commands is different from that of MPE commands; unfortunately, this is true of most all MPE subsystems — they all have slightly different command syntax styles.

Fcopy also allows you to select specific records numbers, or records that have a specific text string at a given location. You append the Subset option to your copy task:

subset=1/10

subset=”string”, column [,EXCLUDE]

But Fcopy cannot select on binary fields or look for multiple strings.

For complex text searches, the Unix user turns to grep, and MPE has grep in the Posix shell. To enter the shell, you type “sh.pub.sys”, which is an implied run on the “sh” program in the “pub” group of the “sys” account. When you are in the Posix shell, you must use Posix filenames, not MPE filenames. So sh.pub.sys would be /SYS/PUB/SH.

For looking at file contents, the Posix head and tail commands are very handy (show the start of a file or the end of it). Another MPE subsystem that can be used for examining text files is Editor.

:editor

/text filename

/find “string”

/list *

/exit

Notice that the prompt character is Slash, while Fcopy used Greater Than.

Editor has a fairly powerful set of search options. In this example, Find looks for the next line that contains the string at any location within the line. But to find all the lines that match, you must program the Find in a While loop.

MPE also has a wide variety of text tools from third-parties that you will likely want on your system, such as our own Qedit, an Editor replacement that also provides full-screen editing (see www.qedit.com).

:qedit.pub.robelle

/text filename

/list “string”

/exit

The Qedit commands are similar to Editor’s, but the default behavior is to treat any occurrence of a string as a request for all the lines that contain that string. Qedit borrows concepts from Fcopy and other tools. For example, you can display the selected lines in Hexadecimal if you wish: /list $hex $char 1/10

Or ignore case and only search certain columns on string matches: /List “enhancement” (Upshift 20/50)

Or search for up to 10 strings on a single command: /List “problem” or “bug” or “help”

Magnet is our method of choice for searching a group of files, because it is so fast. It is a part of Nuggets (aka Toolboxes), a package of MPE utilities written by Stan Sieler and friends, and sold by Lund. By default, Magnet lists the files with a filecode of zero (regular files) or 111 (Qedit files) in your logon group that contain at least one line with the target string. Use the -F option to specify filesets, the -C option to ignore case, -L to list lines that match, and -E to show Editor-style line numbers.

For example, to search the SRC group of the logon account for “fopen,” ignoring case, you would use the command :magnet “-f@.src fopen -c -l –e. (For more details on Magnet, see www.allegro.com/products/hp3000/toolboxes.html)

MPEX is a third-party tool from Vesoft that extends the MPE command shell to work on sets of many files, rather than just one file. It is very flexible and allows selections such as “files bigger than 1 GB and untouched in over a year.” MPEX allows you to select files based on searching text within the files:

%PRINT AP@.SOURCE;SEARCH=”CUSTNUM”;NUM

MPEX also allows searching for lines containing alternate strings, or more than one string, or almost any search logic:

%PRINT @.SOURCE;SEARCH=”PROCEDURE” or “FUNCTION”;NUM

%PRINT @.SOURCE;SEARCH=”PROCEDURE” and “FNAME”

%PRINT @.JOB;SEARCH=”!JOB” and NOT “MANAGER.SYS”

There are many more options (case-less, look for delimiters, look for a delimiter on the left only, etc.).

Database Files

What does it mean when you get the error below?

:print store01.db

PRIVILEGED FILE VIOLATION (FSERR 45)

The PRINT command failed. (CIERR 9080)

This means is that you tried to open a database file in user-mode. These are “privileged files” that can only be opened in Priv Mode. This restriction ensures the integrity of the database structure by forcing all access through system-approved tools or APIs.

Query is a database tool found on every HP 3000. It can do selection, but only works on databases, not disk files. A simple Query task would be:

:query

>FIND order-detail.order-date GT 20040101

>REPORT ALL

Query has numerous report formatting options, including sorting, level breaks, item formatting, etc. However, the output is intended for a printer, so most of the formatting options have that in mind. It is possible to redirect this output to a disk file, but Query was written before anyone asked for output to an Excel spreadsheet.

Suprtool is our third-party product (see www.suprtool.com) that is found on many HP 3000 systems; it works on both databases and disk files. Like Fcopy it can copy or print records using Char,hex dump, but it can do much, much more. It can do sophisticated selection and sort the records. For example, to select all the Open orders, sort them, eliminate duplicates, write them to a disk file for further processing, and print the fields of each selected entry, use:

:suprtool.pub.robelle

>base orders.db

>get order-detail

>if order-date > “20040101” and order-status=”O”

>sort order-num

>dup none

>output opensel

>list

>xeq

Suprtool provides a Define and Item command to describe the record format of a file so that it can be treated like a database. Or to more accurately describe a database (i.e., define sub-fields, date fields, and decimal places). The output can go to the printer, or to a disc file, or to the database, or to an Excel spreadsheet, or to almost any other format of file.

 


Copyright The 3000 NewsWire. All rights reserved.