I think there is no BPGM for the Series-80 computers that does this.
In case of the HP 75 it is relatively easy to look at LEX files because the file system is in memory. In case of the Series 80 you would have to load the BPGM into memory first. Then you could use a PEEK() function to walk along the keyword table, very similar to how I handle ROM keywords.
One could of course write something like that for the 86 by reading the disk using a READSECTOR routine but as I already have a Java program mentioned in the next paragraph this is sufficient for my purpose.
What I have written is a HP 86 program which does a "system inventory". It can list the installed ROMs, the interfaces and for ROMs can also list the keywords found in that ROM. I have nothing to handle BPGMs directly on the HP 86.
For BPGMs and other files I use a Java program which opens a LIF image file and lists all files with their content. For BPGMs it dumps something like the following, including the keywords:
Code:
==============================================================
file name = "IPBIN87 "
file type = e00a (Series 80 binary program (file security 2) file)
start record # = 204 = 0xcc
extent from 52224 to 56048 = 0xcc00 to 0xdaf0 (bytes from start of file)
data length = 3825 = 0xef1 (bytes)
block count = 15 = 0xf (256 byte records)
volume info = volume # = 1, (last volume)
serial number = 0x00000000
implementation data for 'HP-85'
start sector/record = 204
length in sectors/records = 15
length in bytes = 3825
bytes per sector/record = 256
------------------------------
content of file: Series-80 Binary Program:
------------------------------
program control block:
BPGM name:' IPBI'
{ HP-86/87 Binary
file name: 'IPBIN87 '
BPGM#: 18
absAddr: 0 (if absolute)
}
length: 3825 bytes
Type: 2
sec.flag: 0
baseAddr: 36952 (start of BPGM)
------------------------------
runtime: 34
asciis: 158
parse: 80
errmsg: 2850
init: 419
------------------------------
23 keywords:
- 'CPRINT' runtime @ 1939 (type=2, class=33d=\041o) (BASIC statement, legal after THEN, reserved word)
- 'CLINE' runtime @ 1636 (type=2, class=33d=\041o) (BASIC statement, legal after THEN, reserved word)
- 'CCURSOR' runtime @ 1686 (type=2, class=33d=\041o) (BASIC statement, legal after THEN, reserved word)
- 'CCLEAR' runtime @ 1718 (type=2, class=33d=\041o) (BASIC statement, legal after THEN, reserved word)
- 'CWRITE' runtime @ 1859 (type=2, class=33d=\041o) (BASIC statement, legal after THEN, reserved word)
- 'CDISP' runtime @ 1939 (type=2, class=33d=\041o) (BASIC statement, legal after THEN, reserved word)
- 'ON KBD' runtime @ 567 (type=2, class=33d=\041o) (BASIC statement, legal after THEN, reserved word)
- 'OFF KBD' runtime @ 697 (type=2, class=33d=\041o) (BASIC statement, legal after THEN, reserved word)
- 'ON CCODE' runtime @ 1558 (type=2, class=33d=\041o) (BASIC statement, legal after THEN, reserved word)
- 'OFF CCODE' runtime @ 1623 (type=2, class=33d=\041o) (BASIC statement, legal after THEN, reserved word)
- 'CLPOS' runtime @ 1755 (type=0, class=45d=\055o) (function or other, numeric function)
- 'CCPOS' runtime @ 1734 (type=0, class=45d=\055o) (function or other, numeric function)
- 'CCHR$ ( N, N )' runtime @ 1776 (type=0, class=46d=\056o) (function or other, string function)
- 'KBD$' runtime @ 719 (type=0, class=46d=\056o) (function or other, string function)
- 'FIND ( $ )' runtime @ 803 (type=0, class=45d=\055o) (function or other, numeric function)
- 'CONVERT KBD PAIRS ; ' runtime @ 841 (type=2, class=33d=\041o) (BASIC statement, legal after THEN, reserved word)
- 'CONVERT KBD INDEX ; ' runtime @ 846 (type=2, class=33d=\041o) (BASIC statement, legal after THEN, reserved word)
- 'CONVERT KBD' runtime @ 871 (type=2, class=33d=\041o) (BASIC statement, legal after THEN, reserved word)
- 'SGCLEAR' runtime @ 881 (type=2, class=33d=\041o) (BASIC statement, legal after THEN, reserved word)
- 'KEYBOARD IS' runtime @ 2922 (type=2, class=33d=\041o) (BASIC statement, legal after THEN, reserved word)
- 'LINPUT' runtime @ 1231 (type=2, class=33d=\041o) (BASIC statement, legal after THEN, reserved word)
- '~' runtime @ 1236 (type=0, class=36d=\044o) (function or other, invisible)
- 'HGL$ ( $ )' runtime @ 2312 (type=0, class=46d=\056o) (function or other, string function)
==============================================================
Attached is a tab separated list of some HP 86/87 BPGMs with their keywords which I extracted from three disks recently uploaded to the Series-80 IO.Group. These disks contain most of the available BPGMs for the 86/87.
This file was created by my Java program and filtering its output using a Python script. You can read it into e.g. Excel to produce a searchable/filterable table.
Note that the BPGM defines the valid arguments only for functions - for keywords there is no way to automatically find out how to use them (except by looking into the source code of the parser).