HP41UC.EXE
==========

User-Code File Converter/Compiler/De-compiler/Bar-Code Generator
Copyright (c) Leo Duran, 2000-2007.  The program and this document may be
freely used and distributed.  E-mail author at: leo_duran@yahoo.com.




Introduction:
============

The purpose of this utility is provide a means for handling common file
formats used by various PC software that support the HP-41 calculator.
Of course, this implies that there must be a transfer mechanism to link
the calculator to the PC.  HP-IL provides this mechanism.  For a brief
description on transfer methods, see the "Shuttle Disk" and "Direct Link"
sections that follow in this document.

The file converter is used to "package" compiled user-code putting a
suitable "wrapper" around it.  This is done preceding the code with a
"header", appending a valid "checksum", and adding "filler" (don't care)
bytes to satisfy file size requirements.  These files formats are simply
"containers" for user-code.  The de-compiler takes compiled user-code,
packaged in any of the supported formats, and creates a text file that
can be edited or printed out.  The compiler takes user-code in
text form, and compiles it to a supported file format.  And finally,
the barcode generator creates a printable file with raster graphics data
for supported printers.





Table Of Contents:
=================


   Brief Overview  ......................  Page 1

   LIF File Format  .....................  Page 2

   P41 File Format  .....................  Page 3

   RAW File Format  .....................  Page 4

   BIN File Format  .....................  Page 5

   DAT File Format  .....................  Page 6

   Wand File Format .....................  Page 7

   De-Compiler Notes  ...................  Page 8

   Compiler Rules  ......................  Page 9

   "Shuttle Disk" Transfers  ............  Page 10

   "Shuttle Disk": HP-41 => PC  .........  Page 11

   "Shuttle Disk": PC => HP-41  .........  Page 12

   "Direct Link" Transfers  .............  Page 13

   "Direct Link": PC => HP-41  ..........  Page 14

   "Direct Link": HP-41 => PC  ..........  Page 15

   Appendix A - 41UCC Compatibility  ....  Page 16

   Appendix B - Listing of "WL"  ........  Page 17

   Credits/References  ..................  Page 18



Note:
The "Ă" character used in this document is the append symbol ( 0xC3, ASCII ).




Brief Overview:                                                         Page 1
==============

Supported file formats:
----------------------

  LIF [ /l ]: transfer file for DOSLink, and Trans41
  P41 [ /p ]: archive file for HP-41 programs on ftp sites
  RAW [ /r ]: input/output file for LIFUTIL
  DAT [ /d ]: input/output file for EMU41 (using INP, OUTP)
  BIN [ /b ]: output file from 41UCC
  TXT [ /t ]: program listing (text)
  PCL [ /h ]: barcode printable file (HP PCL3)
  PS  [ /s ]: barcode printable file (Postcript)
  WND [ /w ]: barcode hex-dump file (Wand)


Features:
--------

 File Converter:
  [ LIF, P41, RAW, DAT, BIN ] => [ BIN, DAT, RAW, P41, LIF ]

 Compiler:
  [ TXT ] => [ LIF, P41, RAW, DAT, BIN ]

 De-compiler:
  [ LIF, P41, RAW, DAT, BIN ] => [ TXT ]

 Bar-Code Generator:
  [ RAW ] => [ WND, PCL, PS ]




LIF Format:                                                             Page 2
==========

File system used for HP-IL mass-storage devices.
See overview at: http://ftp.agilent.com/pub/mpusup/pc/index.html
LIF Specification is at: http://www.finseth.com/~fin/hpdata/lif.html
LIF Utilities are at: http://ftp.agilent.com/pub/mpusup/pc/index.html

Usage: optional parameters are surrounded by <>

 LIF file to P41 file ( search LIF name: <name>, <outfile> or [infile] )
   /l=infile<.lif>  /p<=outfile.p41>  <name>

 LIF file to RAW file
   /l=infile<.lif>  /r<=outfile.raw>  <name>  </k>
  Use /k option to exclude checksum and trailer bytes in RAW file.

 LIF file to BIN file
   /l=infile<.lif>  /b<=outfile.bin>  <name>

 LIF file to DAT file ( hex digits in ASCII form )
   /l=infile<.lif>  /d<=outfile.dat>  <name>

 LIF directory listing ( search for <name> only, if specified )
   /l=infile<.lif>  <name>

 LIF file to TXT file ( de-compile )
   /l=infile<.lif>  /t<=outfile.txt>  <name>  </a>  </n>  </x>

 De-compiler Options:
   /a - append text using: [ "Ătext" ], instead of: [ >"text" ]
   /n - generate line numbers
   /x - use [ XROM mm,ff ] for all XROM Functions
   /x23 - use [ XROM 23,ff ]: [ XROM 23,1 ], instead of [ COPYFL ]
   /x25 - use [ XROM 25,ff ]: [ XROM 25,46 ], instead of [ X<>F ]
   /x26 - use [ XROM 26,ff ]: [ XROM 26,10 ], instead of [ CLOCK ]
   /x28 - use [ XROM 28,ff ]: [ XROM 28,27 ], instead of [ AUTOIO ]




P41 Format:                                                             Page 3
==========

[32-byte header] + [compiled code] + [1-byte checksum] + [trailer]
  [32-byte header] - single LIF directory entry for the program
  [1-byte checksum] - sum of all [compiled code] bytes
  [trailer] - filler bytes, so that filesize = 32 + multiple 256-byte blocks

P41 archives are at: ftp://ftp.math.jyu.fi/pub/hpil/

Usage: optional parameters are surrounded by <>

 P41 file(s) to LIF file
   /p=infile<.p41>  /l<=outfile.lif>

  If output file is specified, [infile] can be a directory of P41 files
  For example: hp41uc /p=\p41dir\*.p41 /l=hpil.lif

 P41 file to RAW file ( remove 32-byte header )
   /p=infile<.p41>  /r<=outfile.raw>  </k>
  Use /k option to exclude checksum and trailer bytes in RAW file.

 P41 file to BIN file
   /p=infile<.p41>  /b<=outfile.bin>

 P41 file to DAT file ( hex digits in ASCII form )
   /p=infile<.p41>  /d<=outfile.dat>

 P41 directory listing ( from 32-byte header )
   /p=infile<.p41>

 P41 file to TXT file ( de-compile )
   /p=infile.p41  /t<=outfile.txt>  </a>  </n>  </x>

 De-compiler Options:
   /a - append text using: [ "Ătext" ], instead of: [ ">text" ]
   /n - generate line numbers
   /x - use [ XROM mm,ff ] for all XROM Functions
   /x23 - use [ XROM 23,ff ]: [ XROM 23,1 ], instead of [ COPYFL ]
   /x25 - use [ XROM 25,ff ]: [ XROM 25,46 ], instead of [ X<>F ]
   /x26 - use [ XROM 26,ff ]: [ XROM 26,10 ], instead of [ CLOCK ]
   /x28 - use [ XROM 28,ff ]: [ XROM 28,27 ], instead of [ AUTOIO ]




RAW Format:                                                             Page 4
==========

[compiled code] + [1-byte checksum] + [trailer]
  [1-byte checksum] - sum of all [compiled code] bytes
  [trailer] - filler bytes, so that filesize = multiple 256-byte blocks

Usage: optional parameters are surrounded by <>

 RAW file(s) to LIF file ( LIF name = <name> or [infile] )
   /r=infile<.raw>  /l<=outfile.lif>  <name>

  If output file is specified, [infile] can be a directory of RAW files.
  For example: hp41uc /r=\rawdir\*.raw /l=hpil.lif

 RAW file to P41 file ( P41 name = <name> or [infile] )
   /r=infile<.raw>  /p<=outfile.p41>  <name>

 RAW file to BIN file
   /r=infile<.raw>  /b<=outfile.bin>

 RAW file to DAT file ( hex digits in ASCII form )
   /r=infile<.raw>  /d<=outfile.dat>

 RAW file to TXT file ( de-compile )
   /r=infile<.raw>  /t<=outfile.txt>  </a>  </n>  </x>

 De-compiler Options:
   /a - append text using: [ "Ătext" ], instead of: [ >"text" ]
   /n - generate line numbers
   /x - use [ XROM mm,ff ] for all XROM Functions
   /x23 - use [ XROM 23,ff ]: [ XROM 23,1 ], instead of [ COPYFL ]
   /x25 - use [ XROM 25,ff ]: [ XROM 25,46 ], instead of [ X<>F ]
   /x26 - use [ XROM 26,ff ]: [ XROM 26,10 ], instead of [ CLOCK ]
   /x28 - use [ XROM 28,ff ]: [ XROM 28,27 ], instead of [ AUTOIO ]




BIN Format:                                                             Page 5
==========

[2-byte header] + [compiled code] + [1-byte checksum] + [trailer]
  [2-byte header] - size of [compiled code] in big-endian format
  [1-byte checksum] - sum of all [compiled code]+[2-byte header]
  [trailer] - filler bytes, so that filesize = multiple 128-byte blocks

Usage: optional parameters are surrounded by <>

 BIN file(s) to LIF file ( LIF name = <name> or [infile] )
   /b=infile<.bin>  /l<=outfile.lif>  <name>

  If output file is specified, [infile] can be a directory of BIN files.
  For example: hp41uc /b=\bindir\*.bin /l=hpil.lif

 BIN file to P41 file ( P41 name = <name> or [infile] )
   /b=infile<.bin>  /p<=outfile.p41>  <name>

 BIN file to RAW file ( remove 2-byte header )
   /b=infile<.bin>  /r<=outfile.raw>  </k>
  Use /k option to exclude checksum and trailer bytes in RAW file.

 BIN file to DAT file ( hex digits in ASCII form )
   /b=infile<.bin>  /d<=outfile.dat>

 BIN file to TXT file ( de-compile )
   /b=infile<.bin>  /t<=outfile.txt>  </a>  </n>  </x>

 De-compiler Options:
   /a - append text using: [ "Ătext" ], instead of: [ >"text" ]
   /n - generate line numbers
   /x - use [ XROM mm,ff ] for all XROM Functions
   /x23 - use [ XROM 23,ff ]: [ XROM 23,1 ], instead of [ COPYFL ]
   /x25 - use [ XROM 25,ff ]: [ XROM 25,46 ], instead of [ X<>F ]
   /x26 - use [ XROM 26,ff ]: [ XROM 26,10 ], instead of [ CLOCK ]
   /x28 - use [ XROM 28,ff ]: [ XROM 28,27 ], instead of [ AUTOIO ]




DAT Format:                                                             Page 6
==========

[4-byte header] + [compiled code] + [2-byte checksum]
  [4-byte header] - size of [compiled code] in big-endian format
  [2-byte checksum] - sum of [compiled code]+size of [compiled code]
All bytes are hex digits in ASCII form.

Usage: optional parameters are surrounded by <>

 DAT file(s) to LIF file ( LIF name = <name> or [infile] )
   /d=infile<.dat>  /l<=outfile.lif>  <name>

  If output file is specified, [infile] can be a directory of DAT files.
  For example: hp41uc /d=\bindir\*.dat /l=hpil.lif

 DAT file to P41 file ( P41 name = <name> or [infile] )
   /d=infile<.dat>  /p<=outfile.p41>  <name>

 DAT file to RAW file ( remove 2-byte header )
   /d=infile<.dat>  /r<=outfile.raw>  </k>
  Use /k option to exclude checksum and trailer bytes in RAW file.

 DAT file to BIN file
   /d=infile<.dat>  /b<=outfile.raw>

 DAT file to TXT file ( de-compile )
   /d=infile<.dat>  /t<=outfile.txt>  </a>  </n>  </x>

 De-compiler Options:
   /a - append text using: [ "Ătext" ], instead of: [ >"text" ]
   /n - generate line numbers
   /x - use [ XROM mm,ff ] for all XROM Functions
   /x23 - use [ XROM 23,ff ]: [ XROM 23,1 ], instead of [ COPYFL ]
   /x25 - use [ XROM 25,ff ]: [ XROM 25,46 ], instead of [ X<>F ]
   /x26 - use [ XROM 26,ff ]: [ XROM 26,10 ], instead of [ CLOCK ]
   /x28 - use [ XROM 28,ff ]: [ XROM 28,27 ], instead of [ AUTOIO ]




Barcode Generator:
=================

Reference: "Creating Your Own HP-41 Barcode Manual"

Usage: optional parameters are surrounded by <>

 RAW file to PCL (HP raster graphics) file
   /r=infile<.raw>  /h<=outfile.pcl>  <"Program Title">
To print the barcode, copy the output file to the printer device.
Example: hp41uc /r=prog.raw /h "Program Title"
         copy /b prog.pcl lpt1
        
 RAW file to Postcript file
   /r=infile<.raw>  /s<=outfile.ps>  <"Program Title">
To print the barcode, copy the output file to the printer device.
Example: hp41uc /r=prog.raw /s "Program Title"
         copy /b prog.ps lpt1
          
 RAW file to Wand (barcode) file
   /r=infile<.raw>  /w<=outfile.wnd>  <"Program Title">
The output file will be a 16-byte per row hex dump in text form.




De-Compiler Notes:                                                      Page 8
=================

1) Empty alpha strings are commented for clarification:

        ""  ;F0 (single-byte synthetic NOP)
        GTO ""  ;1D F0
        XEQ ""  ;1E F0


2) Spare intructions generate a comment-line:

        ;GTO IND __ (SPARE)  ;AF,45


3) Non-printable characters (0x00..0x19, 0x7F..0xFF) withing strings
generate a "" (0x04) and are commented with a esc-sequence:

        "Text"  ;"Text\0D\0A"
        LBL "abcfg"  ;"abc\F3fg"


4) Global-alpha labels with key assignments generate a comment:

        LBL "label"  ; Key: -15  (label assigned to shift-LN key).




Compiler Rules:                                                         Page 9
==============

1) Prefixes are case-insensitive: [ rcl 00 ] same as [ RCL 00 ]
2) Postfixes are case-sensitive: [ lbl a ] different from [ lbl A ]
3) Append text is allowed with: [ >"text" ], [ "\-text" ], or [ "Ătext" ]
4) Synthetic instructions are allowed: [ rcl M ], [ sto R ]
5) Synthetic NOP (TEXT0) is allowed using an empty text line: [ "" ]
6) Synthetic text is allowed with C-style esc-sequences: [ "\0D\0A\n" ]
7) Comments are allowed preceded by ";" or "#": [ ; comment ]
8) Functions from external modules recognized: ExtFunc/Time, HP-IL, ExtI/O,
   HP-IL Dev, Plotter, and Wand.  All others supported with [ XROM mm,ff ].
9) Key assignment for global labels are supported: [ lbl "label" Key: 15 ].
10) Multiple intructions per line are allowed if separated by comma+space.

Command-line options:
--------------------
   /n - ignore line numbers in text file: [ 100 STO 00 ]
   /g - force global alpha labels if using quotes: [ XEQ "A" ] is not [ XEQ A ]

Usage: optional parameters are surrounded by <>

 TXT file(s) to LIF file ( LIF name = <name> or [infile] )
   /t=infile<.txt>  /l<=outfile.lif>  <name>  </n>  </g>

  If output file is specified, [infile] can be a directory of TXT files
  For example: hp41uc /t=\txtdir\*.txt /l=hpil.lif

 TXT file to P41 file ( P41 name = <name> or [infile] )
   /t=infile<.txt>  /p<=outfile.p41>  <name>  </n>

 TXT file to RAW file
   /t=infile<.txt>  /r<=outfile.raw>  </n> </k>
  Use /k option to exclude checksum and trailer bytes in RAW file.

 TXT file to BIN file
   /t=infile<.txt>  /b<=outfile.bin>  </n>


Recognized C-style esc-sequences in alpha/text strings: [ "\0D\OA" ]

  Esc-sequence          Hex/ASCII Equivalent
--------------------------------------------
    \a                  0x07    ( alert bell )
    \b                  0x08    ( back-space )
    \f                  0x0C    ( form-feed )
    \n                  0x0A    ( newline )
    \r                  0x0D    ( return )
    \t                  0x09    ( horz tab )
    \v                  0x0B    ( vert tab )
    \-                  0x7F    ( append text, only at the start of string )
    \?                  ?       ( ascii )
    \"                  "       ( ascii )
    \'                  '       ( ascii )
    \\                  \       ( ascii )
    \hh                 0xhh    ( hh = hex digits: 0-9, A-F, a-f )
    \xhh                0xhh    ( hh = hex digits: 0-9, A-F, a-f )




"Shuttle Disk" Transfers:                                               Page 10
========================


Required Hardware:
-----------------
HP-IL module for the HP-41
9114 HP-IL disc drive
720K (dual-density) diskettes
For more reliable results use single-sided, dual-density disks.


Required PC Sotfware:
--------------------
LIFUTIL.EXE
(See reference section at the end of this document.)



       +-------+ HP-IL +------+                +------+
       | HP-41 |<=====>| 9114 |<===> 720K <===>|  PC  |
       +-------+       +------+    Shuttle     +------+
         WRTP                        Disk     LIFUTIL.EXE
         READP

       Figure 1. "Shuttle Disk" Transfers



Note: since LIFUTIL expects a Volume label in the media, and the HP-41
format function (NEWM) does not create a volume label, it is recommended
that disks be formatted on the PC using LIFUTIL.  If you have problems
reading a disk formatted on the PC try changing the BIOS setting for the
drive from 1.44M to 720K.  An alternate solution is to format the disk
from the calculator with the 9114 drive.  In this case, you must create
a volume label for the disk.  This issue was addressed in the PPC Journal
article: "The Volume Label", V14N2 Feb 1987, by Cristian Rusquelles.
A listing is included in "Appendix B" of this document.




"Shuttle Disk": PC => HP-41                                             Page 11
===========================

Let's say you've downloaded some P41 files from the internet, and
want to transfer the programs that are "packaged" in these files to
your calculator using a "shuttle disk".

1) Remove the 32-byte header from each of the P41 files, and make a
note of the LIF directory information in the header: name, size, and
implementation.  You can use HP41UC.EXE to accomplish this task:

   hp41uc /p=infile.p41 /r=outfile.raw

HP41UC.EXE will remove the 32-byte header and display the LIF directory
information: name, size, and implementation.  The output (RAW) file
should be 32 bytes shorter than the input (P41) file.

2) Transfer the program, contained in outfile.raw, to the shuttle disk
using LIFUTIL.EXE.  Refer to "Appendix I" of Dan McDonald's article
listed in the reference section at the end of this document.

3) Insert the shuttle disk in your 9114 disc drive, and the read the
program from your calculator using the READP function.  Be sure to match
the program name exactly as saved by LIFUTIL, as the name is case-sensitive.




"Shuttle Disk": HP-41 => PC                                             Page 12
===========================

Let's say you have a program on the calculator that you want to edit on
your PC and transfer back to the calculator using the previous procedure.

1) Calculate the program size in bytes.  On a HP-41CX, you can simply use
CATALOG 1, watching for the number listed at the "END" indicator of your
program.  For other machines refer to a discussion on the subject on
Chapter 5 of "HP-41 Extended Functions Made Easy" by Keith Jarett.  This
is a well-documented subject covered by many HP-41 books and articles.

2) Copy the program to the shuttle disk using the WRTP function.

3) Insert the shuttle disk on your PC diskette drive, and extract the
program using LIFUTIL.EXE.  The output file should be a RAW file with
a size of multiple 256-byte blocks.  So, for eaxmple, an 56-byte program
will be extracted as a 256-byte RAW file.

4) If you're interested in sharing your creation with the rest of the world,
you may convert the file to P41 format using HP41UC.EXE:

   hp41uc /r=infile.raw /p=outfile.p41 NAME /s=SIZE

Where [ SIZE ] is the program size in hex.  For example, for a 56-byte
program, you'd use: /s=38.  The optional [ NAME ] parameter will be the
name used in creating the 32-byte LIF directory header.  If [ NAME ] is
not specified, the input (RAW) filename is used (with all CAPS).

5) To edit the program on your PC, you'd need to de-compile it:

   hp41uc /r=infile.raw /t=outfile.txt /s=SIZE

If you'd like to print it, you may want to add the [ /n ] option. to
generate line numbers in the output file:

   hp41uc /r=infile.raw /t=outfile.txt /s=SIZE /n

6) Compile your program to a RAW file that can be used by LIFUTIL.EXE:

   hp41uc /t=infile.txt /r=outfile.raw

HP41UC will display the LIF information required by LIFUTIL: name, size,
and implementation.  Note, if you added line numbers to your de-compiled file,
you must alert the compiler to ignore line numbers by using the [ /n ] option:

   hp41uc /t=infile.txt /r=outfile.raw /n

7) To transfer to program to the calculator, using the output RAW file,
simply go to step #2 of the previous "PC => HP-41" procedure.




"Direct Link" Transfers:                                                Page 13
=======================


Required Hardware:
-----------------
HP-IL module for the HP-41
82973A (or compatible) - HP-IL Card for the PC



Required PC Sotfware:
--------------------
Trans41, DOSLink, LinkPlus or any other HP-IL transfer software.
(See reference section at the end of this document.)

Note: Contrary to popular belief, a fast PC can be used with an HP-IL
card.  The requirement for a slow PC, as the original IBM AT, is
strictly a limitation (timing loops that are CPU-speed dependent) in
most transfer software, but it is not an issue with Trans41.


              +-------+ HP-IL +------+
              | HP-41 |<=====>|  PC  |
              +-------+       +------+
                WRTP         Trans41.EXE
                READP

           Figure 2. "Direct Link" Transfers




"Direct Link" HP-41 => PC                                               Page 14
=========================

Let's say you have a program on the calculator, called TEST, that you want
to edit on your PC and later transfer back to the calculator.  We will
assume that you are using the Trans41 utility an HP-IL card on the PC.

1) Establish the HP-IL link with Trans41 using the HPSIDE1.PAK transfer file.

2) Upload the program, TEST, to the PC using WRTP on the calculator.  This
will copy the program to HPSIDE1.PAK on the PC side.

3) Extract and de-compile the program from HPSIDE1.PAK using HP41UC.EXE:

   hp41uc /l=hpside1.pak TEST /t=test.txt

Notice that the program name, TEST, is case-sensitive, and must match
the ALPHA label used with WRTP.

4) Edit test.txt and compile it to a LIF file with HP41UC.EXE:

   hp41uc /t=test /l

In this case, HP41UC will create a default output file: test.lif, and use a
default LIF program name: TEST (input filename, with all CAPS).

if your program has synthetic text strings, the de-compiler will append
a comment with esc-sequences that can be used by the compiler.
For example: "Text"  ;"Text\0D\0A"
To re-compile this line, simply remove the text preceding the [ ; ]:
   [ "Text"  ;"Text\0D\0A" ] => [ "Text\0D\0A" ]




"Direct Link" PC => HP-41                                               Page 15
=========================

Assuming that you have created a LIF file to "package" your program, you can
transfer it to the calculator with the following procedure:

1) Over-write Trans41's transfer file with the created LIF file:

   copy test.lif hpside1.pak

You may also rename the existing transfer file to save its contents:

   rename hpside1.pak backup1.pak
   rename test.lif hpside.pak

Or you may simply over-write the transfer file on your compilation step:

   hp41uc /t:text /l:hpside1.pak

2) Establish the HP-IL link using the new HPSIDE1.PAK transfer file.

3) Download the program on the calculator using READP and that's it!




Appendix A - 41UCC Compatility:                                         Page 16
==============================

The following instructions are allowed by the compiler for compatibility
with 41UCC.

41UCC Form                              HP41UC Form
---------------------------------------------------
10**X                                   10^X
APPEND, APPND, APND "Text"              >"Text"
CLSIGMA                                 CLS
D->R                                    D-R
E**X                                    E^X
E**X-1                                  E^X-1
ENTER^                                  ENTER
GOTO                                    GTO
P->R                                    P-R
R->D                                    R-D
R->P                                    R-P
SIGMA+                                  S+
SIGMA-                                  S-
SIGMAREG                                SREG
STO*, STO/, STO+, STO-                  ST*, ST/, ST+, ST-
T "Text String"                         "Text String"
X!=0?, X<>0?                            X#0?
X!=Y?, X<>Y?                            X#Y?
X**2                                    X^2
Y**X                                    Y^X




Appendix B - Listing of "WL":                                           Page 17
============================

From the PPC Journal article: "The Volume Label",V14N2 Feb 1987,
by Cristian Rusquelles.  Requires an Extended I/O module.

 01 LBL "WL"
 02 >"     "    ; append 6 spaces
 03 ASTO 00
 04 LBL 00
 05 AID
 06 16
 07 X=Y?
 08 GTO 01
 09 "NOT A DRIVE"
 10 PROMPT
 11 GTO 00
 12 LBL 01
 13 CLRDEV
 14 3
 15 DEVL
 16 2
 17 OUTXB
 18 6
 19 DEVL
 20 "D"
 21 ARCL 00
 22 OUTAE
 23 8
 24 DEVL
 25 END




Credits/References:                                                     Page 18
==================

Dan McDonald - For his article: "Ancient Data - Modern Machines:
Handling HP-IL Files on Today's PC", posted at the Museum of
HP calculators under: "HP-IL Files: Where, What, Why, How, etc.".
http://www.hpmuseum.org/cgi-sys/cgiwrap/hpmuseum/articles.cgi.

Warren Furlow - For his work in support of the HP-41: V41 Emulator,
M-Code development tools, and for his comments and suggestions
as contributions to this project.
http://www.hp41.org.

LIFUTIL - Free-ware program provided by Hewlett Packard(tm).
See the "Shuttle Disk" section for a description of its use.
Distributed at: http://ftp.agilent.com/pub/mpusup/pc/index.html

Trans41 - HP-IL Transfer utility by Eclipse Logic Inc
and Tacit Logic Systems.  Works fine on today's fast PCs.
See the "Direct Link" section for a description of its use.

DOSLink - HP-IL Transfer utility by Southern Software.
Requires the use of a slow PC (AT compatible: 286/16Mhz).
Can be used as described with Trans41, except it uses a transfer
file called HPILDISC, instead of HPSIDE1.PAK.

41UCC - User-code compiler written by Leslie Brooks & Jim De Arras.
Distributed by Hand Held Products, Inc.

A Program Byte Counter - "HP-41 Extended Functions Made Easy",
by Keith Jarett.  Chapter 5, page 97.

Listing of "WL" - PPC Journal article: "The Volume Label",
V14N2 Feb 1987, by Cristian Rusquelles.

