LIFUTILS Tutorial

Utilities to handle LIF files and LIF image files


Introduction
Definitions
Working with LIF Volumes
Working with LIF Image files
Creating LIF files from raw files
Utilities for LIF files
Miscellaneous Utilities
Using the LIFUTILS
Application examples
Exchange files with calculators
Appendix A: Known filetypes
Appendix B: Mapping file type names of the Online LIF Disk projekt and the LIFUTILS

Introduction

The LIFUTILS are command line utilities to handle LIF files and LIF image files. LIF, the Logical Interchange Format was developed by Hewlett Packard as a standard mass storage format that can be used for interchange of files among various HP computer systems. Although the scope of application was much broader, the LIFUTILS are limited to LIF files and image files for the HP calculators HP-41, HP-71 and HP-75.

The LIFUTILS require basic knowledge of working with the command line on Unix, macOS or Windows. This knowledge must include working with pipes and input/output redirection. A sound knowledge of working with files on a HP calculator is needed as well.

If you definitely need a graphical user interface you may consider pyILPER which integrates many of the LIFUTILS programs in the graphical user interface of the virtual disk drive. See the Start Up section of the pyILPER user manual how to use this program stand-alone.

Definitions

Understanding the following definitions is essential to work with the LIFUTILS.

LIF Volume

This is a physical data medium. Either a tape for the HP82161A tape drive or a floppy disk for the HP9114 disk drive.

LIF Image File

A LIF image file is a logical copy of a LIF Volume stored in a single file. It consists of a contiguous sequence of blocks of fixed 256 byte size. Any access to LIF image files occurs by reading or writing complete blocks.

The LIF image file contains the LIF file system which consists of:

The volume header contains information about the size of the directory, the size of the LIF volume that the image file represents, the volume label and the date and time the image file was initialized. Some calculators or versions of HP-IL interface modules do not initialize the volume header properly. You may use the liffix utility to amend the header information.

The size of the directory is specified at initialization of the LIF image file. The length of the directory in blocks is stored in the volume header. Each directory block can contain up to 8 directory entries with a size of 32 bytes.

Each directory entry has the following information:

The file name must apply to the file name rules of the HP-71: capital letters and digits starting with a letter. The maximum size is 10 characters. Note: the HP-41 allows file names which do not match the rules above. These files can not be processed with the LIFUTILS. Hence you can use the lifrename utility to rename these files.

The file type is encoded as a numeric value. Most existing LIF file types are known to the LIFUTILS (at least all files types that exist in the Online LIF Disk Project, but see Appendix B). File types which are not known to the LIFUTILS are displayed as hex values in the output of the lifdir or lifheader command. Unknown file types can not be processed by the LIFUTILS. Note: neither lifdir nor lifheader print information about the file properties private or secured.

The file types which are known to the LIFUTILS are listed in Appendix A.

Nearly all LIF file types are calculator or application specific. The only file type that is interchangeable between the HP-41, the HP-71 and the HP-75 is the type TEXT (type code hex 0001).

Many file types use specific additional information like file length in bytes, nibbles or registers, checksum information and so on in the implementation bytes. This information is essential to use the file in the calculator. The documentation of the implementation bytes is poor.

In the file area the content of each file is stored in consecutive blocks. A frequent creation and deletion of files results in a fragmentation of the file area. Thus you might not be able to create a file although a sufficient number of free blocks is available. You can remove fragmentation of a LIF image with the lifpack utility.

The recommended suffix for a LIF image file is ".dat" or ".lif".

LIF File

A LIF file contains the directory (LIF header) entry followed by the blocks with the file data. Since file type and implementation bytes are already present this file has all information that is needed to use it in a calculator. You can only import LIF files into a LIF image file with the lifput utility.

The LIF file is also used if the HP-71 copies a file to or from a HP-IL device of type interface (e.g. the HP82164A HP-IL/RS232 interface). This file type is also used by the DOSLINK device of some virtual HP-IL device emulators. The lifheader utility displays the information of the directory header of a LIF file.

Extensions of LIF files should reflect their content. See the recommended suffixes for LIF files.

Raw File

A raw file is "data only" without a LIF header. Use raw files only if you either need no "way back" to a LIF image file or if there is suitable software available to do that.

Building LIF files from raw files is possible for:

You should assign raw files a suffix that explains their file type.

Further Readings

See this detailed description of the LIF media and LIF file format.

Working with LIF Volumes

The only LIF Volume accessible by other devices is the 3 1/2 inch floppy disk used of the HP9114 disk drive. Unfortunately HP used an other physical recording format than the IBM PC. Therefore you need:

For Windows the FDIO project provides a driver and an image copy utility. This web site has much information about various low level floppy disk formats

Linux has built in driver support. If you have a suitable controller you can use the lifimage utility to create a LIF image from a floppy disk. The lifdump utility can write a LIF image file to a floppy disk. If the floppy disk controller is not capable to read or write the HP physical format in a correct way you will generally not get meaningful diagnostics.

There is no driver support for mac OS at all.

See this document how data blocks of a LIF image file are stored on a HP9114 floppy disk.

Working with LIF Image files

Create an empty LIF Image file

The lifinit utilty creates an empty LIF Image file containing the LIF header with a blank label and an empty directory. The size of the directory must be specified on initialization and can not be changed afterwards.

You must also specify the medium type. The following medium types are emulated:

The hdriveX media types are only virtual and do not have a real counterpart. 16MB is the maximum size of a LIF medium. The HP-41 only supports cassette media. Hence the handbook of the HP9114 disk drive contains a program that enables the HP-41 to access the full 616 KB disk. Larger media are supported by the HP-71 and the latest versions of the JPC rom.

List the directory of a LIF image

The lifdir utility displays the content of the directory of the a LIF image file. It displays the medium layout and capacity and for each file the following information:

The -v option controls the verbosity level of the directory listing. With verbosity level 0 (same as the -n option) only the file names are displayed. Specifying the -c options outputs all directory informationin csv format. This can be used to create shell scripts or batch files that process multiple files of a LIF image.

Export single files from a LIF image

With lifget you can retrieve a single file from a LIF image file. By default the resulting file is a LIF file. With the -r option the LIF header is removed and you get a raw file. The result is either written to a file or to standard output.

Import single files into a LIF image

lifput imports a LIF file into a LIF image file. The LIF file must have a valid LIF header with a filetype that is known (see Appendix A) to the LIFUTILS and a file name which must not exist in the directory of the LIF image file. There must be a sufficient contiguous number of free disk blocks in the file area of the LIF image file. If the file are is fragmented use the lifpack utility to pack the files in the file area. The input file can either be read from a file or from standard input.

Rename a file

The lifrename utility renames a file. The new name must not exist in the directory of the LIF image file. With this utility you can rename files as well which do not meet the HP-71 file name syntax (see above).

Delete a file

Use lifpurge to purge a file from a LIF image.

Miscellaneous Utilities

Creating LIF files from raw files

For some LIF file types the LIFUTILS provide programs to create LIF files with a valid LIF header and the necessary implementation bytes from raw data. You have to specify a valid LIF file name which must not exist in the destination LIF image file.

Utilities for LIF files

The lifraw utility removes the header from a lif file. The output is a raw file that can be used for a following processing.

The lifheader utility displays the content of the header of a LIF file. If you have a LIF file with unknown content you can examine the file with this command.

Processing of raw files

For the processing of raw files the following utilities exist:

Miscellaneous Utilities

Other utilities for pre- or postprocessing of files for the HP-41:

Using the LIFUTILS

Using the LIFUTILS from the command line

To use the LIFUTILS you must be familiar with the "command line". Either the shell on Unix or macOS or the command interpreter (CMD or PowerShell) on Windows. To get most benefit of the LIFUTILS you have to know the concept of pipelines and input/output redirection.

Both concepts are implemented in Unix, macOS and Windows. The examples below work on all three operating systems. For the begin of pipe the command "cat" is used for Unix and macOS and "type" for Windows. You may also use < for input redirection which works both on Unix/macOS and Windows but tends to make examples more confusing.

In most cases the LIFUTILS programs expect the source file on standard input and the destination file on standard output. You cannot specifiy the input or output file with command line parameters. An exception are LIF image files.

If you would like to convert the content of a raw HP-41 program with decomp41 type:

cat/type example.p41 | decomp41 > example.txt

This will not work:

decomp41 example.p41 example.txt

The LIFUTILS programs are "filters". They take the standard input, do a single conversion task and write the result to standard output. The concept of pipelines and input/output redirection allows to daisy chain different "filters" in one statement to perform complex operations. Here an example to get print the HP-41 program PROG41 that is stored into the LIF image file lifimg.dat:

lifget -r lifimg.dat PROG41 | prog41bar | barps | lpr

Note: lpr in this example is Linux specific.

Using the LIFUTILS in scripts or programs

The LIFUTILS programs are well suited to be used in scripts or to be called from programs. The following rules apply:

Application examples

List the content of a LIF image file

To display the directory listing of the LIF image file liftest.dat with the lifdir command:

lifdir liftest.dat

Volume : TEST   , formatted : 04/04/15 15:00:00
Tracks: 2 Surfaces: 1 Blocks/Track: 256 Total size: 512 Blocks, 131072 Bytes
AUDI2       PGM41        1972/2048                      
TEST1       PGM41         172/256                       
TXTB        TEXT          256/256      04/04/15 15:14:06
VERMROM     SDATA        5120/5120     04/04/15 15:14:06
TXTA        TEXT          256/256                       
DATA1       SDATA         160/256                       
KEY1        KEY41           9/256                       
WALL1       ALL41        2689/2816                      
STAT1       STAT41         81/256                       
9 files (64 max), last block used: 54 of 512

You can use the -v parameter to control the output level. To display the file names only:

lifdir -v 0 liftest.dat

AUDI2     
TEST1     
TXTB      
VERMROM   
TXTA      
DATA1     
KEY1      
WALL1     
STAT1 

This file list can be used for scripting (see example below).

To get extended directory information including start sector, number of sectors and the implementation bytes:

lifdir -v 2 liftest.dat

Volume : TEST   , formatted : 04/04/15 15:00:00
Tracks: 2 Surfaces: 1 Blocks/Track: 256 Total size: 512 Blocks, 131072 Bytes
AUDI2       PGM41        1972/2048                         10     8 800107B30020
TEST1       PGM41         172/256                          18     1 800100AB0020
TXTB        TEXT          256/256      04/04/15 15:14:06   19     1 800100000000
VERMROM     SDATA        5120/5120     04/04/15 15:14:06   20    20 000002800000
TXTA        TEXT          256/256                          40     1 800100140020
DATA1       SDATA         160/256                          41     1 800100140020
KEY1        KEY41           9/256                          42     1 800100010020
WALL1       ALL41        2689/2816                         43    11 800101500020
STAT1       STAT41         81/256                          54     1 8001000A0020
9 files (64 max), last block used: 54 of 512

To get all directory information as csv type:

lifdir -c lifest.dat

AUDI2,PGM41,57472,1972,10,8,0,0,0,0,0,0,128,1,7,179,0,32
TEST1,PGM41,57472,172,18,1,0,0,0,0,0,0,128,1,0,171,0,32
TXTB,TEXT,1,256,19,1,15,4,4,15,14,6,128,1,0,0,0,0
VERMROM,SDATA,57552,5120,20,20,15,4,4,15,14,6,0,0,2,128,0,0
TXTA,TEXT,1,256,40,1,0,0,0,0,0,0,128,1,0,20,0,32
DATA1,SDATA,57552,160,41,1,0,0,0,0,0,0,128,1,0,20,0,32
KEY1,KEY41,57424,9,42,1,0,0,0,0,0,0,128,1,0,1,0,32
WALL1,ALL41,57408,2689,43,11,0,0,0,0,0,0,128,1,1,80,0,32
STAT1,STAT41,57440,81,54,1,0,0,0,0,0,0,128,1,0,10,0,32

See the lifdir documentation for details.

Get files from a LIF image file

To get the file DATA1 from the LIF image file liftest.dat use the lifget command:

lifget liftest.dat DATA1 data1.d41

This extracts the file DATA1 from the LIF image file into the file data1.d41. The file data1.d41 is a LIF file. If you check with lifheader you get:

lifheader data1.d41
File name           : DATA1     
File type           : e0d0 (SDATA) 
Data length         : 160
Number of blocks    : 1
Implementation bytes: 800100140020

To extract the file DATA1 as a raw file and display its content with the sdata utility type:

lifget -r liftest.dat DATA1 | sdata
+2.000000000E+1
+0.000000000E+0
+0.000000000E+0

The -r parameter removes the LIF header of DATA1. This is equivalent to use the lifraw utility:

lifget  liftest.dat DATA1 | lifraw | sdata

Put files into a LIF image file

The lifput utility puts LIF files into a LIF image file. This means that you have to convert an input file to a LIF file first. For text files, HP 41 program and rom files this is covered in detail below. To put the LIF file data2.d41 into the LIF image file liftest.dat type:

lifput liftest.dat data1.d41

Note: If you insert a file into a LIF image file:

The lifdir utility gives information about the allocation of the directory and file area. If lifput stores a file then it uses the first contiguous free block in the file area. If there is no suitable free block available due to fragmentation of the file area you can pack the LIF image file with the lifpack command.

Create a new LIF image file

You can create a new LIF image file with the lifinit command. You can specify the medium size (see above) and the size of the directory. Note: you can not alter the medium and directory size of an existing LIF image file.

To create an empty LIF image file hpfloppy.dat with a medium size of the HP9114 floppy and 250 directory entries type:

lifinit -m disk hpfloppy.dat 250 

You can add a volume label to a LIF image file with the liflabel command:

liflabel hpfloppy.dat VOLA

Note: The label must only include capital letters and digits, starting with a letter. The maximum size is 6 characters.

To remove a label from a lif image file:

liflabel -c hpfloppy.dat

Fix invalid file names in a LIF image file

You may find LIF image files with file names that do not comply with the more strict rules of HP-71 file names. These files can not be processed with the LIFUTILS. You can only rename them with the lifrename utility.

lifdir swapdk.dat
olume : SWAPDK , formatted : 05/08/87 23:23:57
Tracks: 77 Surfaces: 2 Blocks/Track: 16 Total size: 2464 Blocks, 630784 Bytes
USER4/1     TEXT          256/256    
...
M*M         PGM41         228/256 
...

To fix the illegal file name M*M use:

lifrename swapdk.dat "M*M" MTIMESM

Working with text files

To put an ASCII text file as LIF file into a LIF image file:

cat/type tdata.txt | textlif TDATA | lifput liftest.dat

This example converts the ASCII file tdata.txt into a LIF file, prepends the LIF header with the file name TDATA and puts it into the LIF image file liftest.dat. Note: This file can only be used with the HP-71B.

The HP-41 needs exact information how much space (in registers) shall be allocated in the HEPAX- or X-Memory. This size is specified with the -r parameter and stored in the implementation bytes of the LIF text file.

cat/type tdata.txt | textlif -r 0 TDATA | lifput liftest.dat

If a value of 0 is specified the number of register is determined from the size of the input text file. If you intend to extend the file in the HP-41 later, you must choose an appropriate number of registers. The file size in registers is:

((number of characters + number of lines)+6)/7

According to the HEPAX documentation the maximum number of registers for a file is 577.

Note:The textlif command does not perform any character set conversions.

To display the content of the text file TDATA in the LIF image file lifimag.dat type:

lifget -r liftest.dat TDATA | liftext

Since liftext expects a raw file as input the -r parameter is used with the lifget command to strip the LIF header.

The text files encoded with textlif and decoded with liftext are called interchange files on the HP-75. The HP-75 uses an own text file format with a different LIF file type. This format can be decoded in the following way:

lifget -r liftest.dat TDATA75 | liftext75

Working with HP-41 programs

With the LIFUTILS you can work with HP-41 programs in various formats.

If you have an ASCII file with a HP-41 FOCAL program you can compile it into a raw file with comp41. The following example compiles a FOCAL program p41.foc into a raw file p41.raw. This program uses commands from the HP-IL and Extended I/O rom, so we have to specify the corresponding xrom mapping files on the command line:

cat/type p41.foc | comp41 -x hpil -x xio > p41.raw

You can use HP-41 program raw files in software emulators of this calculators.

To put the raw file p41.raw into the LIF image file liftest.dat you must first create a LIF file from the raw file:

cat/type p41.raw | rawlif PROG41 | lifput liftest.dat

Or put everything into one pipe:

cat/type p41.foc | comp41 -x hpil -x xio | rawlif PROG41 | lifput liftest.dat

Both example store the compiled program with the file name PROG41 into the lifimage file liftest.dat.

To get the FOCAL code of a compiled HP-41 program use the decomp41 utility. The following line prints the source of the file PROG41 we just stored in the LIF image file liftest.dat:

lifget -r liftest.dat PROG41 | decomp41 -x hpil -x xio

Note: the -r option of lifget removes the LIF header.

Xrom mapping files

A compiled HP-41 focal programs references a call to a rom function with a rom number and a function number. The name of the rom function is stored in the function address table of the rom itself. The xrom mapping file contains the relation between the rom/function number and the function name for a specific rom. You can create a xrom mapping file yourself from a HP-41 rom file (see below).

If the xrom mapping file is omitted, then:

The LIFUTILS distribution provides a number of xrom files for the most popular HP roms. They are located in the xroms subdirectory of the software package. If you intend to add your own xrom mapping files you have the following options:

Working with HP-41 ROM files

For the HP-41 numerous plug in modules exist that extend the functionality of the calculator with additional commands, e.g. the Math module. These modules contain one or more roms with a size of 4 KWords (10bit words). The content of the roms of the HP-41 are available on various sources of the internet. The 10bit words of the rom are stored in two consecutive bytes. This file format is called an uncompressed (or unscrambled) rom image. The size of these files is always 8192 bytes.

With additional hardware (eprom or flash rom extenders) and software (HEPAX or Eramco MLDL-OS) you can exchange rom images between a HP-IL mass storage and the calculator. To improve efficiency HEPAX and Eramco MLDL-OS use different techniques to compress (or scramble) the rom images to store 4 consecutive 10bit rom words in 5 bytes. The scrambled files have a size of 5120 bytes.

With rom41er and er41rom you can convert an unscrambled rom image into an Eramco MLDL-OS scrambled LIF file and vice versa. This LIF file has an own file type.

The rom41hx and hx41rom convert between an unscrambled rom image an a HEPAX scrambled LIF file. This LIF file has the file type SDATA.

To load the file Math-1A.rom as a scrambled HEPAX rom file into the LIF image file liftest.dat do:

cat/type Math-1A.rom | rom41hx MATHHXROM | lifput liftest.dat

If you attach liftest.dat to the ILPer software suite (Windows) or the pyILPER program and a PIL-Box you can load the scrambled rom file into a HP-41 ram page with the HEPAX READROM command.

To list the content of the HEPAX scrambled HP-41 rom file MATHHXROM in the LIF image file lifmag.dat use:

lifget -r liftest.dat MATHHXROM | hx41rom | rom41cat

This displays the function address table of the rom if present.

To create a xrom mapping file from an uncompressed HP-41 rom file Math1A.rom use the rom41cat utility:

cat/type Math-1A.rom | rom41cat -x > math.xrom

Besides the rom files module files exist. They are used by software emulators and contain one or more rom images and additional information that describe properties of the module. You can not use module files in a calculator. If you have a module file you can extract the rom image(s) with the lifmod command:

lifmod -e Math.mod

Assembling mod files from rom image files is part of software development utilities for the HP-41 and beyond the scope of the LIFUTILS.

Script sample

Below are sample script files for UNIX/mac OS and Windows that copy the whole content of a LIF image file to a new LIF image file with a different medium type and directory size.

Unix/mac OS sample script file:

#!/bin/bash
# copy files from a LIF image file to another new LIF image file
# check number of input parameters
if test $# -ne 4 
then
   echo "Usage: lifcopy lif-image-filename1 lif-image-filename2 medium-type dir-entries"
   exit 1
fi
# check if input file exists
if  test ! -r "${1}"
then
   echo "Input LIF image file does not exist"
   exit 1
fi
# check if output file does not exist
if test  -f "${2}"
then
   echo "Output LIF image file already exists"
   exit 1
fi
# initialize new image file
lifinit -m ${3} ${2} ${4}
if test $? -ne 0; then
   exit 1
fi
# copy content
for i in `lifdir -n ${1}`; do 
   lifget ${1} ${i} | lifput ${2} 
   if test $? -ne 0; then
      exit 1
   fi
done
exit 0

Windows sample script file:

@echo off
rem copy files from a LIF image file to another new LIF image file
rem check number of input parameters
set argC=0
for %%x in (%*) do set /A argC+=1
if not %argC% == 4 (
   echo Usage: lifcopy lif-image-filename1 lif-image-filename2 medium-type dir-entries
   exit /B 1
)
rem check if input file exists
if not exist %1 (
   echo Input LIF image file does not exist
   exit /B 1
)
rem check if output file does not exist
if exist %2 (
   echo Output LIF image file already exists
   exit /B 1
)
rem initialize new image file
lifinit -m %3 %2 %4
if errorlevel 1 (
   exit /B 1
)
rem copy content
for /F %%f in ('lifdir -n %1') do (
   lifget %1 %%f | lifput %2
   if errorlevel 1 (
      exit /B 1
   )
)

Exchange files with calculators

PIL-Box

You need a HP-41, HP-71B or HP-75 with a HP-IL interface and a PIL-Box. The PIL-Box is a HP-IL/USB translator. On the PC you need software that emulate at least a HP-IL mass storage device. You may try the ILPer software suite (Windows) or the pyILPER program (Linux, Windows, macOS). Both software emulate various virtual HP-IL devices.

You can mount a LIF image file that was created or maintained with the LIFUTILS to a virtual drive of ILPer or pyILPER and access the files on it with the file management commands of the calculator.

Floppy disks

You need a HP-41, HP-71B or HP-75 with a HP-IL interface and a HP9114 floppy disk drive. Using floppy disks with the LIFUTILS is only supported on Linux. You need a Linux PC with a non USB floppy disk drive. The success of reading or writing HP9114 compatible floppies is highly dependent on the capabilities of the floppy disk controller and the floppy disk drive.

On Linux you need read and write access to the floppy disk device /dev/fd0. Write access is even needed if you only intend to read a disk. Use the write protect switch on the disk to shelter your data. If you use a high density floppy then cover the indicator hole at the lower right side of the medium.

To get write access to a floppy disk device become member of the floppy group. Note: recent LINUX versions seem to set the group ownership of floppy disk devices incorrectly. To fix this either become super user or write an appropriate udev rule.

LIFUTULS programs that access a floppy perform a recalibration of the drive at start up. The recalibration always needs write access to the drive but does not write anything to the disk. During the recalibration error messages may occur. The recalibration needs some time to complete.

All LIFUTIL programs that access LIF image files can access a floppy drive if the -p parameter is specified. Because of the time consuming recalibration the preferred way is to exchange whole LIF image files with the floppy disk.

To copy a LIF image file you need a properly formatted floppy disk. The safest way is to format that disk with the HP-9114 drive. To copy the LIF image file liftest.dat to a floppy disk use:

lifdump liftest.dat /dev/fd0

Note: this will overwrite all data on the floppy disk.

To get a LIF image file as a copy of a LIF volume floppy disk use:

lifimage /dev/fd0 lifdisk.dat

This copies all data on the floppy disk to the LIF image file lifdisk.dat.

Formatting a HP9114 compatible floppy seems to be more dependent to the capabilities of the floppy drive and the controller than reading and writing. If you have a lucky combination of drive and controller you may use the commands to format the disk:

# low level formatting
superformat --noverify /dev/fd0 dd sect=16 head=2 cyl=77 ssize=256
# high level formatting, use 250 entries in the LIF directory and zero the file area.
lifinit -p -z -m disk /dev/fd0 250

The superformat utility is part of the fdutils package in most LINUX distributions.

Serial Interface

You need a HP-41 or HP-71B with HP-IL interface and a HP 82164A HP-IL/RS-232C Interface and a PC with serial interface. For the HP-41 the Extended I/O module is needed as well.

The LIFUTILS provide tools to assist the exchange of files with the calculator. The serial communication with the HP 82164A box has to be configured at operating system level. Thus you need sound knowledge how to configure and operate serial devices on your PC and how to connect, set up and use the HP 82164A box.

The Extended I/O module of the HP-41 allows to send (OUTP) and receive (INP) a program in hexadecimal format. The following utilities do encoding and decoding of these files on the PC:

For Linux you find information how to exchange data with the HP-41 in the file HP41-PC-serial-transfer which is located in the hardware subdirectory of the LIFUTILS software distribution.

The HP-71 allows to copy files from and to the HP 82164A serial interface with the COPY command. The HP-71 always exchanges LIF files (with the 32 byte header) with an HP-IL device of type interface. The following utilities are available:

For Linux you find information how to exchange data with the HP-71 in the file HP71-PC-serial-transfer. This file is located in the hardware subdirectory of the LIFUTILS software distribution.

Using Barcodes

You need a HP-41 with a bar code reader. There are two utilities that convert HP-41 raw files to an intermediate barcode format:

You can convert the intermediate barcode format into a PostScript file with the barps utility. To create a printable barcode file prog41.ps from the HP-41 program PROG41 in the LIF image file lifimg.dat type:

lifget -r lifimg.dat PROG41 | prog41bar | barps > prog41.ps

To print a PostScript file:

Other solutions

Other solutions which are documented in the hardware subdirectory:

And of course the 82973 HP-IL ISA interface if you have one.

Appendix A: Known file types

type codetype stringdescription
0001TEXTAscii (HP-41), Text (HP-71), LIF1 (HP-75)
00FFD-LEXdisabled HP-71 lex file
E020WAXM41HP-41 write all file with X-Memory
E030XM41HP-41 X-Memory file
E040ALL41HP-41 write all file
E050KEY41HP-41 key file
E052TXT75HP-75 text file
E053APP75HP-75 appointments
E058DAT75HP-75 data file
E060STA41HP-41 status file
E070X-M41HP-41 Eramco MLDL-OS rom file
E080PGM41HP-41 program file
E088BAS75HP-75 basic file
E089LEX75HP-75 lex file
E08AWKS75HP-75 visicalc file
E08BROM75HP-75 rom file
E0D0SDATAHP 41 data file
E0D1TEXT (S)secure text file
E0F0DAT71HP-71 data file
E0F1DAT71 (S)secure HP-71 data file
E204BIN71HP-71 bin file
E205BIN71 (S)secure HP-71 bin file
E206BIN71 (P)private HP-71 bin file
E207BIN71 (SP)secure an private HP-71 bin file
E208LEX71HP-71 lex file
E209LEX71 (S)secure HP-71 lex file
E20ALEX71 (P)private HP-71 lex file
E20BLEX71 (SP)secure and private HP-71 lex file
E20CKEY71HP-71 key file
E20DKEY71 (S)secure HP-71 key file
E214BAS71HP-71 basic file
E215BAS71 (S)secure HP-71 basic file
E216BAS71 (P)private HP-71 basic file
E217BAS71 (SP)secure and private HP-71 basic file
E218FTH71HP-71 forth ram file
E219FTH71 (S)secure HP-71 forth ram file
E21AFTH71 (P)private HP-71 forth ram file
E21BFTH71 (SP)private and secure HP-71 forth ram file
E222GRA71HP-71 graphics file
E224ADR71HP-71 address file
E22ESYM71HP-71 symbol file
E21CROM71HP-71 rom file

Appendix B: Mapping file type names of the Online LIF Disk projekt and the LIFUTILS

The Online LIF Disk Project maintains catalog files of the entire file collection. Hence the file type names used in these catalogs differ from the file type names implemented in the LIFUTILS. See the table below for a mapping.

Online LIF Disk ProjectLIFUTILS
ADRS 71ADR71
ASSM8 41WAXM41
BASIC 71BAS71
BASIC 75BAS75
BIN 71BIN71
D-LEX 71D-LEX71
DATA 71DAT71
EXTMEM 41XM41
FORTH 71FTH71
GRAPH 71GRA71
KE 41KEY41
KEY 71KEY71
LEX 71LEX71
LEX 75LEX75
LIF1TEXT
ML-41 41X-M41
PR 41PGM41
ROM 71ROM71
ROM 75ROM75
SDATA 71/41SDATA
ST 41STAT41
SYM 71SYM71
TEXT 71 STEXT
TEXT 75TXT75
WS 75WKS75