Selaa lähdekoodia

Syntax highlighting now includes comments.

Paul Onions 11 vuotta sitten
vanhempi
commit
0cd4e664ea
8 muutettua tiedostoa jossa 389 lisäystä ja 806 poistoa
  1. 25 90
      data/sysrpl-data.38G.el
  2. 23 81
      data/sysrpl-data.39G.el
  3. 73 220
      data/sysrpl-data.48G.el
  4. 115 334
      data/sysrpl-data.49G.el
  5. 4 52
      rpl-base.el
  6. 100 16
      rpl-edb.el
  7. 1 0
      rpl-tools.el
  8. 48 13
      sysrpl-mode.el

+ 25 - 90
data/sysrpl-data.38G.el

@@ -1,5 +1,5 @@
 
-#s(hash-table size 5541 test eql rehash-size 1.5 rehash-threshold 0.8 data ("any" ("0d 0h
+#s(hash-table size 5541 test equal rehash-size 1.5 rehash-threshold 0.8 data ("any" ("0d 0h
 " "" "0403F" :NOSDIAG) "ZERO" ("0d 0h
 " "" "0403F" :NOSDIAG) "BINT0" ("0d 0h
 " "" "0403F" :NOSDIAG) "MEMERR" ("1d 1h
@@ -1326,17 +1326,14 @@ ob #0 \\-> #0
 " "" "814FF") "#+ROLL" ("1..n+m #n #m \\-> 2..n+m 1
 " "" "814F5") "#-ROLL" ("1..n-m #n #m \\-> 2..n-m 1
 " "" "814F0") "XYZ>ZXY" ("1 2 3 \\-> 3 1 2
-" "" "815CC") "3UNROLL" ("1 2 3 \\-> 3 1 2
-" "" "815CC") "UNROT" ("1 2 3 \\-> 3 1 2
-" "" "815CC") "UNROTDUP" ("1 2 3 \\-> 3 1 2 1
+" "" "814A5") "3UNROLL" ("1 2 3 \\-> 3 1 2
+" "" "814A5") "UNROT" ("1 2 3 \\-> 3 1 2
+" "" "814A5") "UNROTDUP" ("1 2 3 \\-> 3 1 2 1
 " "" "83764") "XYZ>ZX" ("1 2 3 \\-> 3 1
 " "" "81559") "SWAPDROPSWAP" ("1 2 3 \\-> 3 1
 " "" "81559") "UNROTDROP" ("1 2 3 \\-> 3 1
 " "" "81559") "UNROTOVER" ("1 2 3 \\-> 3 1 2 1
-" "" "83AFC") "XYZ>ZXY" ("1 2 3 \\-> 3 1 2
-" "" "814A5") "UNROT" ("1 2 3 \\-> 3 1 2
-" "" "814A5") "3UNROLL" ("1 2 3 \\-> 3 1 2
-" "" "814A5") "XYZW>WXYZ" ("1 2 3 4 \\-> 4 1 2 3
+" "" "83AFC") "XYZW>WXYZ" ("1 2 3 4 \\-> 4 1 2 3
 " "" "814B9") "FOURUNROLL" ("1 2 3 4 \\-> 4 1 2 3
 " "" "814B9") "4UNROLL" ("1 2 3 4 \\-> 4 1 2 3
 " "" "814B9") "4UNROLLDUP" ("1 2 3 4 \\-> 4 1 2 3 3
@@ -1360,8 +1357,6 @@ ob #0 \\-> #0
 " "" "81D65") "OVERDUP" ("1 2 \\-> 1 2 1 1
 " "" "8373C") "OVERUNROT" ("1 2 \\-> 1 1 2
 " "" "837A0") "OVERSWAP" ("1 2 \\-> 1 1 2
-" "" "837A0") "OVERSWAP" ("1 2 \\-> 1 1 2
-" "" "837A0") "OVERUNROT" ("1 2 \\-> 1 1 2
 " "" "837A0") "OVER5PICK" ("1 2 3 4 \\-> 1 2 3 4 3 1
 " "" "8469B") "2OVER" ("1 2 3 4 \\-> 1 2 3 4 1 2
 " "" "849C5") "3PICK" ("1 2 3 \\-> 1 2 3 1
@@ -2160,9 +2155,6 @@ necessary.
 " "81B12") "0LASTOWDOB!" ("\\->
 " "Clears command save by last CK<n> command.
 <REF>CK0
-" "81B12") "0LASTOWDOB!" ("\\->
-" "Clears command save by last CK<n> command.
-<REF>CK0
 " "81B12") "CKREAL" ("% \\-> %
 Z \\-> %
 " "Checks for real.  If a ZINT, convert
@@ -6097,12 +6089,12 @@ and returns the new value to
 level 1.
  --
 Related: INCR,STO+,STO-
-" "0FE002" :Usr) "~" ("" "Delete Key Assignments Cmd
+" "0FE002" :Usr) "~" ("" "Exponent Func
  --
-Clears user-defined key assignments.
+Returns the exponent of the arg.
  --
-Related: ASB,RCLKEYS,STOKEYS
-" "10D002" :Usr) "~xDEPTH" ("\\-> n
+Related: MANT,SIGN
+" "05B002" :Usr) "~xDEPTH" ("\\-> n
 " "Depth Cmd
  --
 Returns a real number representing
@@ -6306,51 +6298,29 @@ See the IF and IFERR keyword
 entries for syntax information.
  --
 Related: IF,CASE,DO,ELSE,IFERR,REPEAT, THEN,UNTIL,WHILE
-" "002700" :Usr) "~xEND" ("1/0 \\->
+" "002700" :Usr) "~xEND" ("
 " "END Cmd
  --
 Ends conditional, error-trapping,
 and indefinite loop structures.
-
-See the IF, CASE, IFERR, DO, and
-WHILE keyword entries for syntax
-information.
  --
-Related: IF,CASE,DO,ELSE,IFERR,REPEAT, THEN,UNTIL,WHILE
-" "015700" :Usr) "~xENDDO" ("1/0 \\->
-" "END Cmd
- --
-Ends conditional, error-trapping,
-and indefinite loop structures.
-
 See the IF, CASE, IFERR, DO, and
 WHILE keyword entries for syntax
 information.
  --
 Related: IF,CASE,DO,ELSE,IFERR,REPEAT, THEN,UNTIL,WHILE
-" "015700" :Usr) "~xEND" ("
+" "014700" :Usr) "~xENDDO" ("1/0 \\->
 " "END Cmd
  --
 Ends conditional, error-trapping,
 and indefinite loop structures.
- --
-See the IF, CASE, IFERR, DO, and
-WHILE keyword entries for syntax
-information.
- --
-Related: IF,CASE,DO,ELSE,IFERR,REPEAT, THEN,UNTIL,WHILE
-" "003700" :Usr) "~xIFEND" ("
-" "END Cmd
- --
-Ends conditional, error-trapping,
-and indefinite loop structures.
- --
+
 See the IF, CASE, IFERR, DO, and
 WHILE keyword entries for syntax
 information.
  --
 Related: IF,CASE,DO,ELSE,IFERR,REPEAT, THEN,UNTIL,WHILE
-" "003700" :Usr) "~xEND" ("
+" "015700" :Usr) "~xIFEND" ("
 " "END Cmd
  --
 Ends conditional, error-trapping,
@@ -6361,7 +6331,7 @@ WHILE keyword entries for syntax
 information.
  --
 Related: IF,CASE,DO,ELSE,IFERR,REPEAT, THEN,UNTIL,WHILE
-" "014700" :Usr) "~xWHILEEND" ("
+" "003700" :Usr) "~xWHILEEND" ("
 " "END Cmd
  --
 Ends conditional, error-trapping,
@@ -6953,7 +6923,6 @@ Related: COLCT,EXPAN,QUAD,SHOW,SOLVE
 " "102002" :Usr) "~x_" ("
 " "" "0E0002" :Usr) "~xFORMUNIT" ("
 " "" "0E0002" :Usr) "~x'" ("
-" "" "012700" :Usr) "~x'" ("
 " "" "013700" :Usr) "~xENDTIC" ("
 " "" "013700" :Usr) "~x\\<<" ("
 " "" "010700" :Usr) "~x<<" ("
@@ -7547,14 +7516,7 @@ the current stastics matrix
 <REF>TEXT:Reserved|\\GSDAT
  --
 Related: MEAN,PCOV,PVAR,SDEV,TOT,VAR
-" "0200F2" :Usr) "~" ("" "Purge Cmd
- --
-Purges the named variables or
-empty subdirectories from the
-current directory.
- --
-Related: CLEAR,CLVAR,NEWOB,PGDIR
-" "108002" :Usr) "~xPUT" ("ob pos obj \\-> ob'
+" "0200F2" :Usr) "~xPUT" ("ob pos obj \\-> ob'
 ob  = [] or [[]] or {} or name
 pos = n or {n} or {n m}
 " "Put Element Cmd
@@ -8495,26 +8457,15 @@ Related: \\.d,\\.S,\\GS
 Displays the stack display.
  --
 Related: PICTURE,PVIEW
-" "0BD002" :Usr) "~xTHEN" ("0/1 \\->
-" "THEN Cmd
- --
-Starts the true-clause in conditional
-or error-trapping structure
- --
-Related: CASE,ELSE,END,IFERR
-" "001700" :Usr) "~xTHEN" ("
-" "THEN in a CASE statement.
+" "0BD002" :Usr) "~xTHEN" ("
+" "THEN in an ON ERROR construct.
  --
 Related: CASE,ELSE,END,IFERR
-" "018700" :Usr) "~xTHENCASE" ("
+" "016700" :Usr) "~xTHENCASE" ("
 " "THEN in a CASE statement.
  --
 Related: CASE,ELSE,END,IFERR
-" "018700" :Usr) "~xTHEN" ("
-" "THEN in an ON ERROR construct.
- --
-Related: CASE,ELSE,END,IFERR
-" "016700" :Usr) "~xERRTHEN" ("
+" "018700" :Usr) "~xERRTHEN" ("
 " "THEN in an ON ERROR construct.
  --
 Related: CASE,ELSE,END,IFERR
@@ -8853,12 +8804,7 @@ of two arguments.
  'sym1' 'sym2' \\-> 'sym1 XOR sym2'
  --
 Related: AND,OR,NOT
-" "0C7002" :Usr) "~" ("" "Exponent Func
- --
-Returns the exponent of the arg.
- --
-Related: MANT,SIGN
-" "05B002" :Usr) "~xXRECV" ("name \\->
+" "0C7002" :Usr) "~xXRECV" ("name \\->
 " "XModem Receive Cmd
  --
 Prepares the HP 48 to receive an
@@ -9065,18 +9011,10 @@ Tests if two objects are equal.
 Flags: -3
  --
 Related: SAME,TYPE,<,\\<=,>,\\>=, ==
-" "0C9002" :Usr) "~x\\->" ("ob1 .. obn \\->
-" "Create Local Variables Cmd
- --
-Creates local variables.
- obj1 ... objn \\->
- --
-Syntax:
- \\-> name1 name2 ... nameN \\<< prog \\>>
- \\-> name1 name2 ... nameN 'Expr'
- --
-Related: DEFINE,STO
-" "00F700" :Usr) "~xRPN->" ("ob1 .. obn \\->
+" "0C9002" :Usr) "~x\\->" ("
+" "Create local variable comand.
+<REF>xRPN->
+" "004700" :Usr) "~xRPN->" ("ob1 .. obn \\->
 " "Create Local Variables Cmd
  --
 Creates local variables.
@@ -9087,10 +9025,7 @@ Syntax:
  \\-> name1 name2 ... nameN 'Expr'
  --
 Related: DEFINE,STO
-" "00F700" :Usr) "~x\\->" ("
-" "Create local variable comand.
-<REF>xRPN->
-" "004700" :Usr) "~xALG->" ("
+" "00F700" :Usr) "~xALG->" ("
 " "Create local variable comand.
 <REF>xRPN->
 " "004700" :Usr) "~x!" ("x \\-> x'

+ 23 - 81
data/sysrpl-data.39G.el

@@ -1,5 +1,5 @@
 
-#s(hash-table size 8311 test eql rehash-size 1.5 rehash-threshold 0.8 data ("any" ("0d 0h
+#s(hash-table size 8311 test equal rehash-size 1.5 rehash-threshold 0.8 data ("any" ("0d 0h
 " "" "04049" :NOSDIAG) "ZERO" ("0d 0h
 " "" "04049" :NOSDIAG) "BINT0" ("0d 0h
 " "" "04049" :NOSDIAG) "MEMERR" ("1d 1h
@@ -1510,10 +1510,7 @@ ob #0 \\-> #0
 " "" "0E3C6") "SWAPDROPSWAP" ("1 2 3 \\-> 3 1
 " "" "0E3C6") "UNROTDROP" ("1 2 3 \\-> 3 1
 " "" "0E3C6") "UNROTOVER" ("1 2 3 \\-> 3 1 2 1
-" "" "0F96E") "XYZ>ZXY" ("1 2 3 \\-> 3 1 2
-" "" "0CD84") "UNROT" ("1 2 3 \\-> 3 1 2
-" "" "0CD84") "3UNROLL" ("1 2 3 \\-> 3 1 2
-" "" "0CD84") "XYZW>WXYZ" ("1 2 3 4 \\-> 4 1 2 3
+" "" "0F96E") "XYZW>WXYZ" ("1 2 3 4 \\-> 4 1 2 3
 " "" "0CE8A") "FOURUNROLL" ("1 2 3 4 \\-> 4 1 2 3
 " "" "0CE8A") "4UNROLL" ("1 2 3 4 \\-> 4 1 2 3
 " "" "0CE8A") "4UNROLLDUP" ("1 2 3 4 \\-> 4 1 2 3 3
@@ -1537,8 +1534,6 @@ ob #0 \\-> #0
 " "" "032C2") "OVERDUP" ("1 2 \\-> 1 2 1 1
 " "" "0F5A7") "OVERUNROT" ("1 2 \\-> 1 1 2
 " "" "0F60B") "OVERSWAP" ("1 2 \\-> 1 1 2
-" "" "0F60B") "OVERSWAP" ("1 2 \\-> 1 1 2
-" "" "0F60B") "OVERUNROT" ("1 2 \\-> 1 1 2
 " "" "0F60B") "OVER5PICK" ("1 2 3 4 \\-> 1 2 3 4 3 1
 " "" "1050B") "2OVER" ("1 2 3 4 \\-> 1 2 3 4 1 2
 " "" "10835") "3PICK" ("1 2 3 \\-> 1 2 3 1
@@ -2338,9 +2333,6 @@ necessary.
 " "232A7") "0LASTOWDOB!" ("\\->
 " "Clears command save by last CK<n> command.
 <REF>CK0
-" "232A7") "0LASTOWDOB!" ("\\->
-" "Clears command save by last CK<n> command.
-<REF>CK0
 " "232A7") "CKREAL" ("% \\-> %
 Z \\-> %
 " "Checks for real.  If a ZINT, convert
@@ -6340,12 +6332,14 @@ and returns the new value to
 level 1.
  --
 Related: INCR,STO+,STO-
-" "080004" :Usr) "~" ("" "Delete Key Assignments Cmd
+" "080004" :Usr) "~" ("" "Purge Cmd
  --
-Clears user-defined key assignments.
+Purges the named variables or
+empty subdirectories from the
+current directory.
  --
-Related: ASB,RCLKEYS,STOKEYS
-" "088004" :Usr) "~xDEPTH" ("\\-> n
+Related: CLEAR,CLVAR,NEWOB,PGDIR
+" "083004" :Usr) "~xDEPTH" ("\\-> n
 " "Depth Cmd
  --
 Returns a real number representing
@@ -6549,29 +6543,7 @@ See the IF and IFERR keyword
 entries for syntax information.
  --
 Related: IF,CASE,DO,ELSE,IFERR,REPEAT, THEN,UNTIL,WHILE
-" "3E54D" :Usr) "xEND" ("1/0 \\->
-" "END Cmd
- --
-Ends conditional, error-trapping,
-and indefinite loop structures.
-
-See the IF, CASE, IFERR, DO, and
-WHILE keyword entries for syntax
-information.
- --
-Related: IF,CASE,DO,ELSE,IFERR,REPEAT, THEN,UNTIL,WHILE
-" "3EDD3" :Usr) "xENDDO" ("1/0 \\->
-" "END Cmd
- --
-Ends conditional, error-trapping,
-and indefinite loop structures.
-
-See the IF, CASE, IFERR, DO, and
-WHILE keyword entries for syntax
-information.
- --
-Related: IF,CASE,DO,ELSE,IFERR,REPEAT, THEN,UNTIL,WHILE
-" "3EDD3" :Usr) "xEND" ("
+" "3E54D" :Usr) "xEND" ("
 " "END Cmd
  --
 Ends conditional, error-trapping,
@@ -6582,18 +6554,18 @@ WHILE keyword entries for syntax
 information.
  --
 Related: IF,CASE,DO,ELSE,IFERR,REPEAT, THEN,UNTIL,WHILE
-" "3E568" :Usr) "xIFEND" ("
+" "3EDB3" :Usr) "xENDDO" ("1/0 \\->
 " "END Cmd
  --
 Ends conditional, error-trapping,
 and indefinite loop structures.
- --
+
 See the IF, CASE, IFERR, DO, and
 WHILE keyword entries for syntax
 information.
  --
 Related: IF,CASE,DO,ELSE,IFERR,REPEAT, THEN,UNTIL,WHILE
-" "3E568" :Usr) "xEND" ("
+" "3EDD3" :Usr) "xIFEND" ("
 " "END Cmd
  --
 Ends conditional, error-trapping,
@@ -6604,7 +6576,7 @@ WHILE keyword entries for syntax
 information.
  --
 Related: IF,CASE,DO,ELSE,IFERR,REPEAT, THEN,UNTIL,WHILE
-" "3EDB3" :Usr) "xWHILEEND" ("
+" "3E568" :Usr) "xWHILEEND" ("
 " "END Cmd
  --
 Ends conditional, error-trapping,
@@ -7197,7 +7169,6 @@ Related: COLCT,EXPAN,QUAD,SHOW,SOLVE
 " "3DAA0" :Usr) "x_" ("
 " "" "3D905" :Usr) "xFORMUNIT" ("
 " "" "3D905" :Usr) "x'" ("
-" "" "3ED7E" :Usr) "x'" ("
 " "" "3ED98" :Usr) "xENDTIC" ("
 " "" "3ED98" :Usr) "x\\<<" ("
 " "" "3ED4D" :Usr) "x<<" ("
@@ -7791,14 +7762,7 @@ the current stastics matrix
 <REF>TEXT:Reserved|\\GSDAT
  --
 Related: MEAN,PCOV,PVAR,SDEV,TOT,VAR
-" "2BDDC" :Usr) "~" ("" "Purge Cmd
- --
-Purges the named variables or
-empty subdirectories from the
-current directory.
- --
-Related: CLEAR,CLVAR,NEWOB,PGDIR
-" "083004" :Usr) "~xPUT" ("ob pos obj \\-> ob'
+" "2BDDC" :Usr) "~xPUT" ("ob pos obj \\-> ob'
 ob  = [] or [[]] or {} or name
 pos = n or {n} or {n m}
 " "Put Element Cmd
@@ -8751,26 +8715,15 @@ Related: \\.d,\\.S,\\GS
 Displays the stack display.
  --
 Related: PICTURE,PVIEW
-" "067004" :Usr) "xTHEN" ("0/1 \\->
-" "THEN Cmd
- --
-Starts the true-clause in conditional
-or error-trapping structure
- --
-Related: CASE,ELSE,END,IFERR
-" "3E4AB" :Usr) "xTHEN" ("
-" "THEN in a CASE statement.
+" "067004" :Usr) "xTHEN" ("
+" "THEN in an ON ERROR construct.
  --
 Related: CASE,ELSE,END,IFERR
-" "3EF1F" :Usr) "xTHENCASE" ("
+" "3EE34" :Usr) "xTHENCASE" ("
 " "THEN in a CASE statement.
  --
 Related: CASE,ELSE,END,IFERR
-" "3EF1F" :Usr) "xTHEN" ("
-" "THEN in an ON ERROR construct.
- --
-Related: CASE,ELSE,END,IFERR
-" "3EE34" :Usr) "xERRTHEN" ("
+" "3EF1F" :Usr) "xERRTHEN" ("
 " "THEN in an ON ERROR construct.
  --
 Related: CASE,ELSE,END,IFERR
@@ -9316,18 +9269,10 @@ Tests if two objects are equal.
 Flags: -3
  --
 Related: SAME,TYPE,<,\\<=,>,\\>=, ==
-" "3DF0F" :Usr) "x\\->" ("ob1 .. obn \\->
-" "Create Local Variables Cmd
- --
-Creates local variables.
- obj1 ... objn \\->
- --
-Syntax:
- \\-> name1 name2 ... nameN \\<< prog \\>>
- \\-> name1 name2 ... nameN 'Expr'
- --
-Related: DEFINE,STO
-" "3EC15" :Usr) "xRPN->" ("ob1 .. obn \\->
+" "3DF0F" :Usr) "x\\->" ("
+" "Create local variable comand.
+<REF>xRPN->
+" "3E57E" :Usr) "xRPN->" ("ob1 .. obn \\->
 " "Create Local Variables Cmd
  --
 Creates local variables.
@@ -9338,10 +9283,7 @@ Syntax:
  \\-> name1 name2 ... nameN 'Expr'
  --
 Related: DEFINE,STO
-" "3EC15" :Usr) "x\\->" ("
-" "Create local variable comand.
-<REF>xRPN->
-" "3E57E" :Usr) "xALG->" ("
+" "3EC15" :Usr) "xALG->" ("
 " "Create local variable comand.
 <REF>xRPN->
 " "3E57E" :Usr) "x!" ("x \\-> x'

+ 73 - 220
data/sysrpl-data.48G.el

@@ -1,5 +1,5 @@
 
-#s(hash-table size 5541 test eql rehash-size 1.5 rehash-threshold 0.8 data ("any" ("0d 0h
+#s(hash-table size 5541 test equal rehash-size 1.5 rehash-threshold 0.8 data ("any" ("0d 0h
 " "" "03FEF") "ZERO" ("0d 0h
 " "" "03FEF") "BINT0" ("0d 0h
 " "" "03FEF") "MEMERR" ("1d 1h
@@ -466,8 +466,8 @@ invalid input.
 " "" "62809") "#1+SWAP" ("ob # \\-> #+1 ob
 " "" "62E26") "#1+ROT" ("ob ob' # \\-> ob' #+1 ob
 " "" "1DABB") "#1-DUP" ("# \\-> #-1 #-1
-" "" "6281A") "pull" ("ob # \\-> #-1 ob
-" "" "5E4A9") "#1-SWAP" ("ob # \\-> #-1 ob
+" "" "6281A") "pull" ("meta&ob \\-> meta ob
+" "" "5E4A9") "#1-SWAP" ("meta&ob \\-> meta ob
 " "" "5E4A9") "#1-ROT" ("ob ob' # \\-> ob' #-1 ob
 " "" "62FD9") "#1-UNROT" ("ob ob' # \\-> #-1 ob ob'
 " "" "28558") "#1-1SWAP" ("# \\-> 1 #-1
@@ -479,8 +479,8 @@ invalid input.
 " "" "63704") "2DUP#+" ("# #' \\-> # #' #+#'
 " "" "63704") "DROP#1-" ("# ob \\-> #-1
 " "" "637F4") "SWAP#-" ("# #' \\-> #'-#
-" "" "62794") "SWP1+" ("# ob \\-> ob #+1
-" "" "62904") "SWAP#1+" ("# ob \\-> ob #+1
+" "" "62794") "SWP1+" ("meta ob \\-> meta&ob
+" "" "62904") "SWAP#1+" ("meta ob \\-> meta&ob
 " "" "62904") "SWAP#1+SWAP" ("# ob \\-> #+1 ob
 " "" "51843") "SWAP#1-" ("# ob \\-> ob #-1
 " "" "637E0") "SWAP#1-SWAP" ("# ob \\-> #-1 ob
@@ -814,8 +814,8 @@ system flag.
 " "" "51A4A" :U) "C/i" ("C% \\-> C%'
 " "" "51A5F" :U) "C%C+C" ("C% C%' \\-> C%''
 " "" "51C16" :U) "C%C-C" ("C% C%' \\-> C%''
-" "" "51CFC" :U) "C%C*C" ("C% C%' \\-> C%''
-" "" "51D88" :U) "C%C/C" ("C% C%' \\-> C%''
+" "" "51CFC" :U) "C%C*C" ("C% \\-> C%^2
+" "" "1B48F" :U) "C%C/C" ("C% C%' \\-> C%''
 " "" "51EC8" :U) "C%C+R" ("C% % \\-> C%'
 " "" "51BD0" :U) "C%R+C" ("% C% \\-> C%'
 " "" "51BF8" :U) "C%C-R" ("C% % \\-> C%'
@@ -831,8 +831,7 @@ system flag.
 " "" "52062") "C%CHS" ("C% \\-> -C%
 " "" "51B70") "C%1/" ("C% \\-> 1/C%
 " "" "51EFA") "C%SQRT" ("C% \\-> \\v/C%
-" "" "52107") "C%C*C" ("C% \\-> C%^2
-" "" "1B48F" :U) "C%SGN" ("C% \\-> C%/C%ABS
+" "" "52107") "C%SGN" ("C% \\-> C%/C%ABS
 " "" "520CB") "C%CONJ" ("C% \\-> C%'
 " "" "51BB2") "C%ARG" ("C% \\-> %
 " "" "52099") "C%EXP" ("C% \\-> e^C%
@@ -1201,10 +1200,7 @@ position to the end (exclusive).
 " "Returns bint with ASCII code of character at
 the specified position.
 " "30805") "EXPAND" ("hxs #nibs \\-> hxs'
-" "Appends null characters to the string. Since
-refers to the number of nibbles, you must
-use a number twice as large as the number
-of null characters you want appended.
+" "Appends #nibs zero nibbles to the hxs.
 " "61C1C") "&$" ("$ $' \\-> $+$'
 " "Concatenates two strings.
 " "05193") "&$SWAP" ("ob $ $' \\-> $+$' ob
@@ -1374,9 +1370,7 @@ called %>HXS.
 " "05566" :U) "#>%" ("hxs \\-> %
 " "" "5435D") "&HXS" ("hxs hxs' \\-> hxs''
 " "Appends hxs'' to hxs'.
-" "0518A") "EXPAND" ("hxs #nibs \\-> hxs'
-" "Appends #nibs zero nibbles to the hxs.
-" "61C1C") "MAKEHXS" ("#nibs \\-> hxs
+" "0518A") "MAKEHXS" ("#nibs \\-> hxs
 " "Makes blank hxs of specified size.
 " "0EDE1") "!MAKEHXS" ("#nibs \\-> hxs
 " "Makes hxs filled with random data.
@@ -1484,9 +1478,9 @@ rompointer.
 " "0C501" :U) "MATIDN" ("[F%] \\-> [F%]'
 " "Creates identity matrix. Errors if input is
 not a square matrix.
-" "35D35" :U) "SWAPROWS" ("[] #m #n \\-> []' #m #n
-" "Swaps two rows. Does not make copy in
-tempob.
+" "35D35" :U) "SWAPROWS" ("M % %' \\-> M'
+" "SWAP two rows in matrix.  Internal version of
+xRSWP. 
 " "3745E") "SWAPCOLUMNS" ("[] #m #n \\-> []' #m #n
 " "" "37508" :U) "TYPEARRY@" ("[] \\-> #
 " "Returns address of the prolog of the array
@@ -1497,8 +1491,8 @@ element type.
 " "03685" :U) "FINDELN" ("{} A \\-> # flag
 " "Return index # of element {} in array.
 " "03685" :U) "BANGARRY" ("el # M \\-> M'
-" "Put element at index # of matrix.
-" "1DBB0" :U) "MATCON" ("[%] % \\-> [%]'
+" "Puts el at index # of matrix M.
+" "1DBB0" :UBS) "MATCON" ("[%] % \\-> [%]'
 [C%] C% \\-> [C%]'
 " "Replace all elements of [F%] by F%.
 " "35CAE") "METREDIM" ("[F%] {#n #m} \\-> [F%]'
@@ -1878,9 +1872,8 @@ ZERO works as well.
 " "6480B") "COMPN" ("obn..ob1 #n #prolog \\-> comp
 " "" "05331") "{}N" ("obn..ob1 #n \\-> { obn..ob1 }
 " "" "05459") "::N" ("ob1..obn #n \\-> :: ob1..obn ;
-" "" "05445") "SYMBN" ("ob1..obn #n \\-> symb
-" "Build a symbolic object.
-" "0546D") "SYMBN:" ("ob1..obn #n \\-> symb
+" "" "05445") "SYMBN" ("ob1..obn #n \\-> sym
+" "" "0546D") "SYMBN:" ("ob1..obn #n \\-> symb
 " "Does 'R, SWAP#1+ then SYMBN. Creates a
 symbolic from the meta in the stack and the
 next object in the runstream. This object is
@@ -1888,9 +1881,7 @@ added to the end of the symbolic.
 " "54CEF" :U) "top&Cr" ("meta1 meta2 \\-> symb
 " "Does top& then <REF>SYMBN: .
 " "63F01") "ONESYMBN" ("ob1..obn #n \\-> symb
-" "" "5E661" :U) "EXTN" ("ob1..obn #n \\-> u
-" "Builds a unit object.
-" "05481") "P{}N" ("ob1..obn #n \\-> {}
+" "" "5E661" :U) "P{}N" ("ob1..obn #n \\-> {}
 " "Build list with possible garbage collection.
 " "5E0DA") "P::N" ("ob1..obn #n \\-> seco
 " "Build seco with possible garbage collection.
@@ -1949,17 +1940,12 @@ CK1&Dispatch, etc. #5 is returned.
 " "5E8DE" :U) "infarg?" ("seco \\-> seco flag
 " "Is first command in secondary CKINFARGS?
 " "5E9A7" :U) "dup" ("meta \\-> meta meta
-" "" "5E35C" :U) "NDROP" ("meta \\->
-" "Should be called drop.
-" "0326E") "DROPNDROP" ("meta ob \\->
-" "Should be called DROPdrop.
-" "63FA6") "N+1DROP" ("ob meta \\->
-" "Should be called dropDROP.
-" "62F75") "#1+NDROP" ("ob meta \\->
-" "Should be called dropDROP.
-" "62F75") "NDROPFALSE" ("meta \\-> F
-" "Should be called dropFALSE.
-" "169A5") "psh" ("meta1 meta2 \\-> meta2 meta1
+" "" "5E35C" :U) "NDROP" ("1..n #n \\->
+" "" "0326E") "DROPNDROP" ("1..n #n ob \\->
+" "" "63FA6") "N+1DROP" ("ob 1..n #n \\->
+" "" "62F75") "#1+NDROP" ("ob 1..n #n \\->
+" "" "62F75") "NDROPFALSE" ("ob1..obn #n \\-> F
+" "" "169A5") "psh" ("meta1 meta2 \\-> meta2 meta1
 " "Should be called swap.
 " "5EB1C") "rot" ("meta1 meta2 meta3 \\-> meta2 meta3 meta1
 " "" "5EB58" :UBS) "unrot" ("meta1 meta2 meta3 \\-> meta3 meta1 meta2
@@ -1988,17 +1974,13 @@ be called swapDROP.
 " "" "5E3AC") "overev&" ("meta1 meta2 meta3 \\-> meta2&meta1 meta3
 " "" "5E843" :U) "2top&" ("meta1 meta2 meta3 \\-> meta1&meta2&meta3
 " "" "5E490" :U) "top&pshtop&" ("meta1 meta2 meta3 \\-> meta2&meta3&meta1
-" "" "5B861" :U) "SWP1+" ("meta ob \\-> meta&ob
-" "" "62904") "SWAP#1+" ("meta ob \\-> meta&ob
-" "" "62904") "DUP#1+PICK" ("ob&meta \\-> ob&meta ob
+" "" "5B861" :U) "DUP#1+PICK" ("n..1 #n \\-> n..1 #n n
 " "" "6119E") "pick1" ("ob meta \\-> ob meta ob
 " "" "5FC24" :U) "get1" ("ob meta \\-> meta ob
 " "" "61305") "OVER#2+UNROL" ("meta ob \\-> ob meta
 " "" "63105") "pshm1" ("meta ob \\-> ob #1 meta
 " "" "5E3E8" :U) "psh1top&" ("meta ob \\-> ob&meta
-" "" "5E401") "#1-SWAP" ("meta&ob \\-> meta ob
-" "" "5E4A9") "pull" ("meta&ob \\-> meta ob
-" "" "5E4A9") "pulldrop" ("meta&ob \\-> meta
+" "" "5E401") "pulldrop" ("meta&ob \\-> meta
 " "" "5EAF4" :U) "pullpshm1" ("meta&ob \\-> ob #1 meta
 " "" "5E6BB" :U) "pullrev" ("ob&meta \\-> meta ob
 " "" "5E4BD") "pulldroppull" ("meta&ob1&ob2 \\-> meta ob1
@@ -2102,8 +2084,7 @@ are changed to LAM_'dvar. (meta1 can be #0).
 " "" "56183" :U) "2Repl-1" ("meta1 meta2 \\-> %-1 #1
 " "" "561D8" :U) "DropRepl0" ("meta ob \\-> %0 #1
 " "" "5643A" :U) "Repl0ABND" ("meta \\-> %0
-" "" "5499F" :U) "SYMBN" ("ob1..obn #n \\-> sym
-" "" "0546D") "Cr" ("ob1..obn #n -> symb
+" "" "5499F" :U) "Cr" ("ob1..obn #n -> symb
 " "Does 'R, SWAP#1+ then <REF>SYMBN . Creates a
 symbolic from the meta in the stack and the
 next object in the runstream. This object is
@@ -2910,17 +2891,13 @@ ob #0 \\-> #0
 " "" "61099") "DUPPICK" ("n..1 #n \\-> n..1 #n n-1
 " "" "630DD") "2DUPSWAP" ("1 2 \\-> 1 2 2 1
 " "" "611F9") "DUP3PICK" ("1 2 \\-> 1 2 2 1
-" "" "611F9") "DUP#1+PICK" ("n..1 #n \\-> n..1 #n n
-" "" "6119E") "DUP#2+PICK" ("n..1 #n \\-> n..1 #n n+1
+" "" "611F9") "DUP#2+PICK" ("n..1 #n \\-> n..1 #n n+1
 " "" "5FC24" :U) "2DUP" ("1 2 \\-> 1 2 1 2
-" "" "031AC") "DUP3PICK" ("1 2 \\-> 1 2 2 1
-" "" "611F9") "2DUPSWAP" ("1 2 \\-> 1 2 2 1
-" "" "611F9") "2DUP5ROLL" ("1 2 3 \\-> 2 3 2 3 1
+" "" "031AC") "2DUP5ROLL" ("1 2 3 \\-> 2 3 2 3 1
 " "" "63C40") "NDUP" ("1..n #n \\-> 1..n 1..n
 " "" "031D9") "DROP" ("1 \\->
 " "" "03244") "DROPDUP" ("1 2 \\-> 1 1
-" "" "627A7") "DROPNDROP" ("1..n #n ob \\->
-" "" "63FA6") "DROPSWAP" ("1 2 3 \\-> 2 1
+" "" "627A7") "DROPSWAP" ("1 2 3 \\-> 2 1
 " "" "6270C") "XYZ>Y" ("1 2 3 \\-> 2
 " "" "62726") "ROT2DROP" ("1 2 3 \\-> 2
 " "" "62726") "DROPSWAPDROP" ("1 2 3 \\-> 2
@@ -2934,10 +2911,7 @@ ob #0 \\-> #0
 " "" "60F7E") "5DROP" ("1..5 \\->
 " "" "60F72") "6DROP" ("1..6 \\->
 " "" "60F66") "7DROP" ("1..7 \\->
-" "" "60F54") "NDROP" ("1..n #n \\->
-" "" "0326E") "N+1DROP" ("ob 1..n #n \\->
-" "" "62F75") "#1+NDROP" ("ob 1..n #n \\->
-" "" "62F75") "RESETDEPTH" ("ob1..obn obn+1..obx #n \\-> ob1..obn
+" "" "60F54") "RESETDEPTH" ("ob1..obn obn+1..obx #n \\-> ob1..obn
 " "Drops all but #n levels of the stack. 
 " "4B710") "DEPTH" ("1..n \\-> 1..n #n
 " "" "0314C") "UStackDepth" ("\\-> #
@@ -2957,19 +2931,14 @@ ob #0 \\-> #0
 " "" "60F33") "SWAPROT" ("1 2 3 \\-> 3 2 1
 " "" "60F33") "XYZW>YWZX" ("1 2 3 4 \\-> 2 4 3 1
 " "" "63C2C") "SWAP4ROLL" ("1 2 3 4 \\-> 2 4 3 1
-" "" "63C2C") "DUPUNROT" ("1 2 \\-> 2 1 2
-" "" "61380") "SWAPOVER" ("1 2 \\-> 2 1 2
-" "" "61380") "SWAP3PICK" ("1 2 3 \\-> 1 3 2 1
+" "" "63C2C") "SWAP3PICK" ("1 2 3 \\-> 1 3 2 1
 " "" "63C54") "2SWAP" ("1 2 3 4 \\-> 3 4 1 2
 " "" "62001") "ROT" ("1 2 3 \\-> 2 3 1
 " "" "03295") "ROTDUP" ("1 2 3 \\-> 2 3 1 1
 " "" "62775") "ROT2DUP" ("1 2 3 \\-> 2 3 1 3 1
 " "" "62C7D") "XYZ>YZ" ("1 2 3 \\-> 2 3
 " "" "60F21") "ROTDROP" ("1 2 3 \\-> 2 3
-" "" "60F21") "XYZ>Y" ("1 2 3 \\-> 2
-" "" "62726") "DROPSWAPDROP" ("1 2 3 \\-> 2
-" "" "62726") "ROT2DROP" ("1 2 3 \\-> 2
-" "" "62726") "XYZ>ZY" ("1 2 3 \\-> 3 2
+" "" "60F21") "XYZ>ZY" ("1 2 3 \\-> 3 2
 " "" "60F0E") "ROTDROPSWAP" ("1 2 3 \\-> 3 2
 " "" "60F0E") "XYZ>YXZ" ("1 2 3 \\-> 2 1 3
 " "" "60EE7") "ROTSWAP" ("1 2 3 \\-> 2 1 3
@@ -3005,23 +2974,9 @@ ob #0 \\-> #0
 " "" "60FAC") "3UNROLL" ("1 2 3 \\-> 3 1 2
 " "" "60FAC") "UNROT" ("1 2 3 \\-> 3 1 2
 " "" "60FAC") "UNROTDUP" ("1 2 3 \\-> 3 1 2 1
-" "" "62CF5") "XYZ>ZX" ("1 2 3 \\-> 3 1
-" "" "6284B") "SWAPDROPSWAP" ("1 2 3 \\-> 3 1
-" "" "6284B") "UNROTDROP" ("1 2 3 \\-> 3 1
-" "" "6284B") "XYZ>Z" ("1 2 3 \\-> 3
-" "" "6112A") "ROTROT2DROP" ("1 2 3 \\-> 3
-" "" "6112A") "UNROT2DROP" ("1 2 3 \\-> 3
-" "" "6112A") "XYZ>ZYX" ("1 2 3 \\-> 3 2 1
-" "" "60F33") "SWAPROT" ("1 2 3 \\-> 3 2 1
-" "" "60F33") "UNROTSWAP" ("1 2 3 \\-> 3 2 1
-" "" "60F33") "XYZ>ZY" ("1 2 3 \\-> 3 2
-" "" "60F0E") "ROTDROPSWAP" ("1 2 3 \\-> 3 2
-" "" "60F0E") "UNROTSWAPDROP" ("1 2 3 \\-> 3 2
+" "" "62CF5") "UNROTSWAPDROP" ("1 2 3 \\-> 3 2
 " "" "60F0E") "UNROTOVER" ("1 2 3 \\-> 3 1 2 1
-" "" "6308D") "XYZ>ZXY" ("1 2 3 \\-> 3 1 2
-" "" "60FAC") "UNROT" ("1 2 3 \\-> 3 1 2
-" "" "60FAC") "3UNROLL" ("1 2 3 \\-> 3 1 2
-" "" "60FAC") "XYZW>WXYZ" ("1 2 3 4 \\-> 4 1 2 3
+" "" "6308D") "XYZW>WXYZ" ("1 2 3 4 \\-> 4 1 2 3
 " "" "6109E") "FOURUNROLL" ("1 2 3 4 \\-> 4 1 2 3
 " "" "6109E") "4UNROLL" ("1 2 3 4 \\-> 4 1 2 3
 " "" "6109E") "4UNROLLDUP" ("1 2 3 4 \\-> 4 1 2 3 3
@@ -3045,8 +3000,6 @@ ob #0 \\-> #0
 " "" "032C2") "OVERDUP" ("1 2 \\-> 1 2 1 1
 " "" "62CCD") "OVERUNROT" ("1 2 \\-> 1 1 2
 " "" "62D31") "OVERSWAP" ("1 2 \\-> 1 1 2
-" "" "62D31") "OVERSWAP" ("1 2 \\-> 1 1 2
-" "" "62D31") "OVERUNROT" ("1 2 \\-> 1 1 2
 " "" "62D31") "OVER#2+UNROLL" ("1..n #n ob \\-> ob 1..n #n
 " "" "63105") "OVER5PICK" ("1 2 3 4 \\-> 1 2 3 4 3 1
 " "" "63C90") "2OVER" ("1 2 3 4 \\-> 1 2 3 4 1 2
@@ -3097,6 +3050,8 @@ stack.
 " "LAM 'dvar
 " "549DB" :U) "'IDPAR" ("\\-> id
 " "Puts ID PPAR unevaluated on the stack.
+ --
+<REF>TEXT:Reserved|PPAR
 " "5127E" :U) "$>ID" ("$ \\-> ID
 " "" "05B15") "DUP$>ID" ("$ \\-> $ ID
 " "" "63295") "ID>LAM" ("id \\-> lam
@@ -3378,8 +3333,8 @@ library numbers.
 " "Generates \"Invalid Unit\" error.
 " "10EEA" :U) "CONSTUNITERR" ("Error B02h
 " "Generates \"Inconsistent Units\" error.
-" "10EFA" :U) "SetIOPARerr" ("Error C12h
-" "Generates \"Invalid IOPAR\" error.
+" "10EFA" :U) "SetIOPARerr" ("\\->
+" "Throws the IOPAR error: \"Invalid IOPAR\".
 " "2EC34") "NOALARMERR" ("Error D04h
 " "Generates \"nonexistent alarm\" error.
 " "0CBAE" :U) "Sig?ErrJmp" ("# \\->
@@ -3393,10 +3348,7 @@ Calls <REF>rstfmt1 and then errors out.
 F \\-> %0
 " "Converts system flag to user flag, drops
 current stream.
-" "5380E") "%0<>" ("% \\-> flag
-" "Can be used to change a user flag into a
-system flag. 
-" "2A7CF") "TRUE" ("\\-> T
+" "5380E") "TRUE" ("\\-> T
 " "" "03A81") "TrueTrue" ("\\-> T T
 " "" "0BBED") "TRUEFALSE" ("\\-> T F
 " "" "634F7") "TrueFalse" ("\\-> T F
@@ -3413,8 +3365,7 @@ system flag.
 " "" "6210C") "2DROPFALSE" ("ob1 ob2 \\-> F
 " "" "62B0B") "4DROPFALSE" ("ob1..ob4 \\-> F
 " "" "5F5E4" :U) "5DROPFALSE" ("ob1..ob5 \\-> F
-" "" "5F6B1" :U) "NDROPFALSE" ("ob1..obn #n \\-> F
-" "" "169A5") "SWAPTRUE" ("ob1 ob2 \\-> ob2 ob1 T
+" "" "5F6B1" :U) "SWAPTRUE" ("ob1 ob2 \\-> ob2 ob1 T
 " "" "4F1D8") "SWAPDROPTRUE" ("ob1 ob2 \\-> ob2 T
 " "" "21660") "XYZ>ZTRUE" ("ob1 ob2 ob3 \\-> ob3 T
 " "" "62EB7") "COLATRUE" ("\\-> T
@@ -3826,7 +3777,8 @@ return stack body to stack.
 " "Like <REF>R>, but the return stack is not
 popped.
 " "07012") "IDUP" ("\\->
-" "Pushes top body into return stack.
+" "Pushes interpreter pointer into the return
+stack. 
 " "0716B") "EVAL" ("ob \\->
 " "Evaluates object.
 " "06F8E") "COMPEVAL" ("comp \\->
@@ -3960,10 +3912,7 @@ does COLA in the above one.
 and skips one obj in above stream.
 " "" "633B2") "COLAskipcola" ("Drops rest of current stream,
 skipcola in the above.
-" "" "283C4" :U) "IDUP" ("\\->
-" "Pushes interpreter pointer into the return
-stack. 
-" "0716B") "BEGIN" ("\\->
+" "" "283C4" :U) "BEGIN" ("\\->
 " "Pushes interpreter pointer into the return
 stack. 
 " "071A2") "AGAIN" ("\\->
@@ -4173,14 +4122,12 @@ list, else it is dropped.
 " "Gets parent directory.  Returns FALSE if
 parent directory is HOME.
 " "08309" :U) "SYSRRP?" ("rrp \\-> flag
-" "Is the directory the HOME directory?
-" "08DD4" :U) "CONTEXT@" ("\\-> rrp
+" "Is rrp HOME?
+" "08DD4") "CONTEXT@" ("\\-> rrp
 " "Recalls current directory.
 " "08D5A") "CONTEXT!" ("rrp \\->
 " "Sets new current directory.
-" "08D08") "SYSRRP?" ("rrp \\-> flag
-" "Is rrp HOME?
-" "08DD4") "STOPSIGN@" ("\\-> rrp
+" "08D08") "STOPSIGN@" ("\\-> rrp
 " "Recalls last directory.
 " "08D82" :U) "STOPSIGN!" ("rrp \\->
 " "Stores new last directory.
@@ -4303,11 +4250,7 @@ valid.
 " "Returns tick count.
 " "0EB81") "CLKTICKS" ("\\-> hxs
 " "Returns tick count.
-" "0EB81") "TIMESTR" ("%dt %tm \\-> \"dy dt tm\"
-" "Returns string representation of time, using
-current format.  Example:
- \"WED 06/24/98  10:00:45A\"
-" "0D304") "Date>d$" ("%date \\-> $
+" "0EB81") "Date>d$" ("%date \\-> $
 " "Returns string representation of date, using
 current format.
 " "0CFD9") "Date>wd$" ("%date \\-> $weekday
@@ -4664,10 +4607,7 @@ Editline.
 " "" "2EAE2") "DOOPENIO" ("
 " "" "2EB37") "OpenIO" ("
 " "" "2EB62") "OpenIOPrt" ("
-" "" "3187C") "APNDCRLF" ("$ \\-> $'
-" "Appends carriage return and line feed to
-string.
-" "2E4DC") "docr" ("
+" "" "3187C") "docr" ("
 " "" "31854") "IOCheckReal" ("
 " "" "2EC25") "StdIOPAR" ("\\-> {}
 " "Default IOPAR: { 9600 0 0 0 3 1 }.
@@ -4676,9 +4616,7 @@ string.
 " "2EA4F") "StoIOPAR" ("{} \\->
 " "STO the list of IO parameters in the HOME
 directory in the variable IOPAR.
-" "2E9CB") "SetIOPARerr" ("\\->
-" "Throws the IOPAR error: \"Invalid IOPAR\".
-" "2EC34") "StdPRTPAR" ("
+" "2E9CB") "StdPRTPAR" ("
 " "" "31F4A") "StoPRTPAR" ("
 " "" "31F7D") "GetChkPRTPAR" ("
 " "" "3205C") "OUTUART" ("
@@ -4843,9 +4781,6 @@ CK1NOLASTWD, and explodes the meta again.
 " "1884D") "0LASTOWDOB!" ("\\->
 " "Clears command save by last CK<n> command.
 <REF>CK0
-" "1884D") "0LASTOWDOB!" ("\\->
-" "Clears command save by last CK<n> command.
-<REF>CK0
 " "1884D") "AtUserStack" ("\\->
 " " :: CK0NOLASTWD 0LASTOWDOB! ;
 " "40BC9") "CK1NoBlame" ("\\->
@@ -4867,10 +4802,6 @@ Any other first command is also skipped!
 ob \\->
 " "<REF>EvalNoCK with the next object in the
 runstream as argument.
-" "18F6A" :U) "EvalNoCK:" ("RS
-ob \\->
-" "<REF>EvalNoCK with the next object in the
-runstream as argument.
 " "18F6A" :U) "'EvalNoCK:_sup" ("RS
 ob \\->
 " "<REF>EvalNoCK with the next object in the
@@ -5281,13 +5212,13 @@ SetThisRow.
 nothing. If Track? then ?DoTrackAct@. If
 Rebuild? then SetThisRow.
 " "3866F") "?DispMenu" ("\\->
-" "Redisplay the menu now if no key is waiting
+" "Redisplays the menu now if no key is waiting
 in the buffer.  Even better is this:
  :: DA3OK?NOTIT ?DispMenu ;
 " "3A1CA") "DispMenu.1" ("\\->
-" "Displays the menu immediately.
+" "Displays menu now.
 " "3A1FC") "DispMenu" ("\\->
-" " :: DispMenu.1 SetDAsValid ;
+" ":: DispMenu.1 SetDAsValid ;
 " "3A1E8") "Grob>Menu" ("#col grob \\->
 " "Displays grob as menu label.
 " "3A297") "Str>Menu" ("#col $ \\->
@@ -5808,15 +5739,7 @@ immediately, without waiting for the current
 command to finish.
 " "386A1") "DispEditLine" ("\\->
 " "Just calls DispCommandLine.
-" "3A00D") "?DispMenu" ("\\->
-" "Redisplays the menu now if no key is waiting
-in the buffer.  Even better is this:
- :: DA3OK?NOTIT ?DispMenu ;
-" "3A1CA") "DispMenu.1" ("\\->
-" "Displays menu now.
-" "3A1FC") "DispMenu" ("\\->
-" ":: DispMenu.1 SetDAsValid ;
-" "3A1E8") "?DispStack" ("\\->
+" "3A00D") "?DispStack" ("\\->
 " "Redisplays the stack now if necessary.
 " "39B85") "?DispStatus" ("\\->
 " "Redisplays the status area now if necessary.
@@ -6332,19 +6255,7 @@ Does NumbMode and EQ, then Box/StdLabel.
 Tests the system flag specified, does
 Std/BoxLabel.
  Usage: :: FStd/BoxLbl: $ #flag ;
-" "3ECD0" :U) "Grob>Menu" ("#col grob \\->
-" "Displays grob as menu label.
-" "3A297") "Str>Menu" ("#col $ \\->
-" "Displays string as menu label.
-" "3A2B5") "Id>Menu" ("#col id \\->
-" "Displays id as menu label.
-" "3A2DD") "Seco>Menu" ("#col :: \\->
-" "Does EVAL then DoLabel.
-" "3A2C9") "DoLabel" ("#col ob \\->
-" "If ob is of one of the supported types,
-displays a menu label. If not, generates a
-\"Bad Argument Type\" error.
-" "41904") "StdLabelDef" ("#col grob \\->
+" "3ECD0" :U) "StdLabelDef" ("#col grob \\->
 #col $ \\->
 #col id \\->
 #col :: \\->
@@ -6375,14 +6286,7 @@ The grob is centered around #x and the to is
 put at #y. #w represents the maximum width of
 the grob created. If the text is wider, it is
 truncated.  Bangtype.
-" "1215E") "MakeLabel" ("$ #w #x grob \\-> grob'
-" "Inserts $ into grob using CENTER$3x5 with
-y=5.
-" "3A4AB") "'IDPAR" ("\\-> id
-" "Puts ID PPAR unevaluated on the stack.
- --
-<REF>TEXT:Reserved|PPAR
-" "5127E" :U) "CHECKPICT" ("\\->
+" "1215E") "CHECKPICT" ("\\->
 " "Checks size of GBUFF. If it is smaller than
 131x64 sets GBUFF back to its default size
 (131x64).
@@ -6545,12 +6449,7 @@ coordinates.  Inverse operation is DOC>PX.
 " "Converts a complex coordinate point into list
 of two HXS numbers.  Inverse operation is
 DOPX>C. 
-" "4F179") "BANGARRY" ("el # M \\-> M'
-" "Puts el at index # of matrix M.
-" "1DBB0" :UBS) "SWAPROWS" ("M % %' \\-> M'
-" "SWAP two rows in matrix.  Internal version of
-xRSWP. 
-" "3745E") "xABS" ("x \\-> x'
+" "4F179") "xABS" ("x \\-> x'
 " "Absolute Value Function
  --
 Returns the absolute value of
@@ -7706,51 +7605,29 @@ See the IF and IFERR keyword
 entries for syntax information.
  --
 Related: IF,CASE,DO,ELSE,IFERR,REPEAT, THEN,UNTIL,WHILE
-" "22FB5" :Usr) "xEND" ("1/0 \\->
+" "22FB5" :Usr) "xEND" ("
 " "END Cmd
  --
 Ends conditional, error-trapping,
 and indefinite loop structures.
-
-See the IF, CASE, IFERR, DO, and
-WHILE keyword entries for syntax
-information.
  --
-Related: IF,CASE,DO,ELSE,IFERR,REPEAT, THEN,UNTIL,WHILE
-" "236B9" :Usr) "xENDDO" ("1/0 \\->
-" "END Cmd
- --
-Ends conditional, error-trapping,
-and indefinite loop structures.
-
 See the IF, CASE, IFERR, DO, and
 WHILE keyword entries for syntax
 information.
  --
 Related: IF,CASE,DO,ELSE,IFERR,REPEAT, THEN,UNTIL,WHILE
-" "236B9" :Usr) "xEND" ("
+" "23694" :Usr) "xENDDO" ("1/0 \\->
 " "END Cmd
  --
 Ends conditional, error-trapping,
 and indefinite loop structures.
- --
-See the IF, CASE, IFERR, DO, and
-WHILE keyword entries for syntax
-information.
- --
-Related: IF,CASE,DO,ELSE,IFERR,REPEAT, THEN,UNTIL,WHILE
-" "22FD5" :Usr) "xIFEND" ("
-" "END Cmd
- --
-Ends conditional, error-trapping,
-and indefinite loop structures.
- --
+
 See the IF, CASE, IFERR, DO, and
 WHILE keyword entries for syntax
 information.
  --
 Related: IF,CASE,DO,ELSE,IFERR,REPEAT, THEN,UNTIL,WHILE
-" "22FD5" :Usr) "xEND" ("
+" "236B9" :Usr) "xIFEND" ("
 " "END Cmd
  --
 Ends conditional, error-trapping,
@@ -7761,7 +7638,7 @@ WHILE keyword entries for syntax
 information.
  --
 Related: IF,CASE,DO,ELSE,IFERR,REPEAT, THEN,UNTIL,WHILE
-" "23694" :Usr) "xWHILEEND" ("
+" "22FD5" :Usr) "xWHILEEND" ("
 " "END Cmd
  --
 Ends conditional, error-trapping,
@@ -8416,14 +8293,12 @@ Related: COLCT,EXPAN,QUAD,SHOW,SOLVE
 " "20A93" :Usr) "x_" ("
 " "" "1FAEB" :Usr) "xFORMUNIT" ("
 " "" "1FAEB" :Usr) "x'" ("
-" "" "23654" :Usr) "x'" ("
 " "" "23679" :Usr) "xENDTIC" ("
 " "" "23679" :Usr) "x\\<<" ("
 " "" "2361E" :Usr) "x<<" ("
 " "" "2361E" :Usr) "x\\>>" ("
-" "" "23639" :Usr) "x>>" ("
-" "" "23639" :Usr) "x\\>>" ("
-" "" "235FE" :Usr) "x>>ABND" ("
+" "" "235FE" :Usr) "x>>" ("
+" "" "23639" :Usr) "x>>ABND" ("
 " "" "235FE" :Usr) "xKERRM" ("\\-> msg
 " "Kermit Error Message Cmd
  --
@@ -10349,26 +10224,15 @@ Related: \\.d,\\.S,\\GS
 Displays the stack display.
  --
 Related: PICTURE,PVIEW
-" "1E606" :Usr) "xTHEN" ("0/1 \\->
-" "THEN Cmd
- --
-Starts the true-clause in conditional
-or error-trapping structure
- --
-Related: CASE,ELSE,END,IFERR
-" "22EFA" :Usr) "xTHEN" ("
-" "THEN in a CASE statement.
+" "1E606" :Usr) "xTHEN" ("
+" "THEN in an ON ERROR construct.
  --
 Related: CASE,ELSE,END,IFERR
-" "237A8" :Usr) "xTHENCASE" ("
+" "2371F" :Usr) "xTHENCASE" ("
 " "THEN in a CASE statement.
  --
 Related: CASE,ELSE,END,IFERR
-" "237A8" :Usr) "xTHEN" ("
-" "THEN in an ON ERROR construct.
- --
-Related: CASE,ELSE,END,IFERR
-" "2371F" :Usr) "xERRTHEN" ("
+" "237A8" :Usr) "xERRTHEN" ("
 " "THEN in an ON ERROR construct.
  --
 Related: CASE,ELSE,END,IFERR
@@ -11138,18 +11002,10 @@ Tests if two objects are equal.
 Flags: -3
  --
 Related: SAME,TYPE,<,\\<=,>,\\>=, ==
-" "1EA9D" :Usr) "x\\->" ("ob1 .. obn \\->
-" "Create Local Variables Cmd
- --
-Creates local variables.
- obj1 ... objn \\->
- --
-Syntax:
- \\-> name1 name2 ... nameN \\<< prog \\>>
- \\-> name1 name2 ... nameN 'Expr'
- --
-Related: DEFINE,STO
-" "234C1" :Usr) "xRPN->" ("ob1 .. obn \\->
+" "1EA9D" :Usr) "x\\->" ("
+" "Create local variable comand.
+<REF>xRPN->
+" "22FEB" :Usr) "xRPN->" ("ob1 .. obn \\->
 " "Create Local Variables Cmd
  --
 Creates local variables.
@@ -11160,10 +11016,7 @@ Syntax:
  \\-> name1 name2 ... nameN 'Expr'
  --
 Related: DEFINE,STO
-" "234C1" :Usr) "x\\->" ("
-" "Create local variable comand.
-<REF>xRPN->
-" "22FEB" :Usr) "xALG->" ("
+" "234C1" :Usr) "xALG->" ("
 " "Create local variable comand.
 <REF>xRPN->
 " "22FEB" :Usr) "x!" ("x \\-> x'

+ 115 - 334
data/sysrpl-data.49G.el

@@ -1,5 +1,5 @@
 
-#s(hash-table size 8311 test eql rehash-size 1.5 rehash-threshold 0.8 data ("any" ("0d 0h
+#s(hash-table size 8311 test equal rehash-size 1.5 rehash-threshold 0.8 data ("any" ("0d 0h
 " "" "33107" :NOSDIAG) "ZERO" ("0d 0h
 " "" "33107" :NOSDIAG) "BINT0" ("0d 0h
 " "" "33107" :NOSDIAG) "MEMERR" ("1d 1h
@@ -479,15 +479,14 @@
 " "" "03FEF" :UBS :NOSDIAG) "TYPEMATRIX" ("9862d 2686h
 " "" "03FF9" :UBS :NOSDIAG) "TYPEREAL" ("10547d 2933h
 " "" "03F8B") "TYPEEREL" ("10581d 2955h
-" "" "03FDB" :UBS) "TYPEIDNT" ("10568d 2948h
-" "" "03FA9") "TYPECMP" ("10615d 2977h
+" "" "03FDB" :UBS) "TYPEIDNT" ("11848d 2E48h
+" "" "03FA9" :UBS :NOSDIAG) "TYPECMP" ("10615d 2977h
 " "" "03F95" :UBS) "TYPELIST" ("10868d 2A74h
 " "" "03F9F" :UBS) "TYPERRP" ("10902d 2A96h
 " "" "03FC7" :UBS) "TYPESYMB" ("10936d 2AB8h
 " "" "03FBD" :UBS) "TYPEEXT" ("10970d 2ADAh
 " "" "03FE5" :UBS) "TYPECOL" ("11677d 2D9Dh
-" "" "03FB3" :UBS) "TYPEIDNT" ("11848d 2E48h
-" "" "03FA9" :UBS :NOSDIAG) "TYPELAM" ("11885d 2E6Dh
+" "" "03FB3" :UBS) "TYPELAM" ("11885d 2E6Dh
 " "" "03FD1" :UBS) "#5B11" ("23313d 5B11h
 " "" "3C8DF" :UBS :NOSDIAG) "SYMRRANY" ("41232d A110h
 " "" "3D50D" :UBS :NOSDIAG) "SYMRSYMANY" ("41376d A1A0h
@@ -616,8 +615,8 @@ otherwise returns #-#'.
 " "" "35830") "#1+SWAP" ("ob # \\-> #+1 ob
 " "" "35E61") "#1+ROT" ("ob ob' # \\-> ob' #+1 ob
 " "" "2F222") "#1-DUP" ("# \\-> #-1 #-1
-" "" "35841") "pull" ("ob # \\-> #-1 ob
-" "" "28071") "#1-SWAP" ("ob # \\-> #-1 ob
+" "" "35841") "pull" ("meta&ob \\-> meta ob
+" "" "28071") "#1-SWAP" ("meta&ob \\-> meta ob
 " "" "28071") "#1-ROT" ("ob ob' # \\-> ob' #-1 ob
 " "" "3601B") "#1-UNROT" ("ob ob' # \\-> #-1 ob ob'
 " "" "281D5") "#1-1SWAP" ("# \\-> 1 #-1
@@ -629,8 +628,8 @@ otherwise returns #-#'.
 " "" "3674D") "2DUP#+" ("# #' \\-> # #' #+#'
 " "" "3674D") "DROP#1-" ("# ob \\-> #-1
 " "" "3683D") "SWAP#-" ("# #' \\-> #'-#
-" "" "357BB") "SWP1+" ("# ob \\-> ob #+1
-" "" "3592B") "SWAP#1+" ("# ob \\-> ob #+1
+" "" "357BB") "SWP1+" ("meta ob \\-> meta&ob
+" "" "3592B") "SWAP#1+" ("meta ob \\-> meta&ob
 " "" "3592B") "'RSWP1+" ("# \\-> nob #+1
 " "nob is the next object in the runstream.
 " "29786" :UBS) "SWAP#1+SWAP" ("# ob \\-> #+1 ob
@@ -1393,10 +1392,7 @@ position to the end (exclusive).
 " "Returns bint with ASCII code of character at
 the specified position.
 " "2A5CA") "EXPAND" ("hxs #nibs \\-> hxs'
-" "Appends null characters to the string. Since
-refers to the number of nibbles, you must
-use a number twice as large as the number
-of null characters you want appended.
+" "Appends #nibs zero nibbles to the hxs.
 " "34C82") "&$" ("$ $' \\-> $+$'
 " "Concatenates two strings.
 " "05193") "&$SWAP" ("ob $ $' \\-> $+$' ob
@@ -1672,7 +1668,6 @@ characters.
 " "" "3CB4A" :UBS :NOSDIAG :NOETAB) "PDataNSQRT" ("HXS 4 010C
 " "" "3A4B0" :UBS :NOSDIAG :NOETAB) "hxs70107" ("HXS 5 70107
 " "" "39C79" :UBS :NOSDIAG :NOETAB) "hxs80108" ("HXS 5 80108
-" "" "39F2E" :UBS :NOSDIAG :NOETAB) "hxs80108" ("HXS 5 80108
 " "" "3B002" :UBS :NOSDIAG :NOETAB) "hxs50105" ("HXS 5 50105
 " "" "3CA52" :UBS :NOSDIAG :NOETAB) "hxs40104" ("HXS 5 40104
 " "" "3CAD8" :UBS :NOSDIAG :NOETAB) "hxs60106" ("HXS 5 60106
@@ -1702,9 +1697,7 @@ called %>HXS.
 " "Returns TRUE if the input is a null hxs.
 " "05566" :UBS) "&HXS" ("hxs hxs' \\-> hxs''
 " "Appends hxs'' to hxs'.
-" "0518A") "EXPAND" ("hxs #nibs \\-> hxs'
-" "Appends #nibs zero nibbles to the hxs.
-" "34C82") "LENHXS" ("hxs \\-> #nibs
+" "0518A") "LENHXS" ("hxs \\-> #nibs
 " "Returns length in nibbles.
 " "05616") "SUBHXS" ("hxs #m #n \\-> hxs'
 " "Returns sub hxs string.
@@ -1866,8 +1859,11 @@ ob.
 ob11...obmn {%m %n} \\-> [[mxn]]
 " "Builds a matrix a la \\->ARRY.
 " "17F006" :wasCSys) "^XEQ>ARRAY1" ("
-" "" "180006" :wasCSys) "^" ("" "Explodes a matrix a la \\->ARRY.
-" "17C006" :wasCSys) "^ArryToMatrix" ("[] \\-> M
+" "" "180006" :wasCSys) "^" ("" "Euclidean division.  Assumes P and Q have
+integer or Gaussian integer coefficient.
+Returns FALSE in complex mode or if sparse
+short division fails.
+" "3F6006" :CSys) "^ArryToMatrix" ("[] \\-> M
 " "Converts array to symbolic array.
 " "002007") "STATCLST" ("\\->
 " "Clears \\GSDAT.
@@ -2115,14 +2111,11 @@ ZERO works as well.
 " "37B54") "COMPN" ("obn..ob1 #n #prolog \\-> comp
 " "" "05331" :UBS) "{}N" ("obn..ob1 #n \\-> { obn..ob1 }
 " "" "05459") "::N" ("ob1..obn #n \\-> :: ob1..obn ;
-" "" "05445") "SYMBN" ("ob1..obn #n \\-> symb
-" "Build a symbolic object.
-" "0546D") "top&Cr" ("meta1 meta2 \\-> symb
+" "" "05445") "SYMBN" ("ob1..obn #n \\-> sym
+" "" "0546D") "top&Cr" ("meta1 meta2 \\-> symb
 " "Does top& then <REF>SYMBN: .
 " "36F8D") "ONESYMBN" ("ob1..obn #n \\-> symb
-" "" "286F6" :UBS) "EXTN" ("ob1..obn #n \\-> u
-" "Builds a unit object.
-" "05481") "P{}N" ("ob1..obn #n \\-> {}
+" "" "286F6" :UBS) "P{}N" ("ob1..obn #n \\-> {}
 " "Build list with possible garbage collection.
 " "293F8") "P::N" ("ob1..obn #n \\-> seco
 " "Build seco with possible garbage collection.
@@ -2143,9 +2136,9 @@ ob \\-> ob #1
 " "Explodes symbolic object into meta. Other
 objects are converted into one-object metas
 by pushing #1 into the stack. 
-" "157006" :wasCSys) "^2SYMBINCOMP" ("ob1 ob2 \\-> meta1 meta2
+" "157006" :CSys) "^2SYMBINCOMP" ("ob1 ob2 \\-> meta1 meta2
 " "Does ^SYMBINCOMP for 2 objects.
-" "12A006" :wasCSys) "^CKINNERCOMP" ("{} \\-> ob1 .. obN #n
+" "12A006" :CSys) "^CKINNERCOMP" ("{} \\-> ob1 .. obN #n
 ob \\-> ob #1
 " "Explodes a list into a meta object. Other
 objects are converted into one-object metas
@@ -2218,17 +2211,12 @@ Ob>Seco.
 " "37087") "::NEVAL" ("ob1..obn #n \\-> ?
 " "Does <REF>::N then <REF>EVAL.
 " "3631A") "dup" ("meta \\-> meta meta
-" "" "29A35" :UBS) "NDROP" ("meta \\->
-" "Should be called drop.
-" "0326E") "DROPNDROP" ("meta ob \\->
-" "Should be called DROPdrop.
-" "37032") "N+1DROP" ("ob meta \\->
-" "Should be called dropDROP.
-" "35FB0") "#1+NDROP" ("ob meta \\->
-" "Should be called dropDROP.
-" "35FB0") "NDROPFALSE" ("meta \\-> F
-" "Should be called dropFALSE.
-" "28211") "^NDROPZERO" ("obn..ob1 #n \\-> #0
+" "" "29A35" :UBS) "NDROP" ("1..n #n \\->
+" "" "0326E") "DROPNDROP" ("1..n #n ob \\->
+" "" "37032") "N+1DROP" ("ob 1..n #n \\->
+" "" "35FB0") "#1+NDROP" ("ob 1..n #n \\->
+" "" "35FB0") "NDROPFALSE" ("ob1..obn #n \\-> F
+" "" "28211") "^NDROPZERO" ("obn..ob1 #n \\-> #0
 " "Replace Meta object with empty Meta object.
 Should be called dropZERO.
 " "391006" :wasCSys) "psh" ("meta1 meta2 \\-> meta2 meta1
@@ -2251,18 +2239,14 @@ be called swapDROP.
 " "" "36FBA") "rolltwotop&" ("meta1 meta2 meta3 \\-> meta3 meta1&meta2
 " "" "36FCE") "roll2top&" ("meta1 meta2 meta3 \\-> meta3 meta1&meta2
 " "" "36FCE") "psh&" ("meta1 meta2 meta3 \\-> meta1&meta3 meta2
-" "" "2963E") "SWP1+" ("meta ob \\-> meta&ob
-" "" "3592B") "SWAP#1+" ("meta ob \\-> meta&ob
-" "" "3592B") "DUP#1+PICK" ("ob&meta \\-> ob&meta ob
+" "" "2963E") "DUP#1+PICK" ("n..1 #n \\-> n..1 #n n
 " "" "34431") "'R'RROT2+" ("meta \\-> meta&nob&nob1
 " "Takes nob and nob1 from run stream and adds
 them to the meta. 
 " "2979A" :UBS) "get1" ("ob meta \\-> meta ob
 " "" "34504") "OVER#2+UNROL" ("meta ob \\-> ob meta
 " "" "36147") "psh1top&" ("meta ob \\-> ob&meta
-" "" "29693") "#1-SWAP" ("meta&ob \\-> meta ob
-" "" "28071") "pull" ("meta&ob \\-> meta ob
-" "" "28071") "pullrev" ("ob&meta \\-> meta ob
+" "" "29693") "pullrev" ("ob&meta \\-> meta ob
 " "" "28085") "pulldroppull" ("meta&ob1&ob2 \\-> meta ob1
 " "" "29137" :UBS) "2pull2DROP" ("meta&ob1&ob2 \\-> meta
 " "" "2899D" :UBS) "psh1&" ("meta1 meta2 ob \\-> ob&meta1 meta2
@@ -2314,11 +2298,10 @@ Meta2. #pos is >0 if in meta2, is <0 if in
 meta1 (#pos=MINUSONE-#).
 " "3C0006" :wasCSys) "^METAINT?" ("Meta \\-> Meta flag
 " "Tests if Meta is an integer.
-" "198006" :wasCSys) "^METAPOSINT?" ("Meta \\-> Meta flag
+" "198006" :CSys) "^METAPOSINT?" ("Meta \\-> Meta flag
 " "Tests if Meta is a positive integer smaller
 than Zsmall.
-" "199006" :wasCSys) "SYMBN" ("ob1..obn #n \\-> sym
-" "" "0546D") "Cr" ("ob1..obn #n -> symb
+" "199006" :CSys) "Cr" ("ob1..obn #n -> symb
 " "Does 'R, SWAP#1+ then <REF>SYMBN . Creates a
 symbolic from the meta in the stack and the
 next object in the runstream. This object is
@@ -2632,17 +2615,13 @@ ob #0 \\-> #0
 " "" "3432C") "DUPPICK" ("n..1 #n \\-> n..1 #n n-1
 " "" "3611F") "2DUPSWAP" ("1 2 \\-> 1 2 2 1
 " "" "35D30") "DUP3PICK" ("1 2 \\-> 1 2 2 1
-" "" "35D30") "DUP#1+PICK" ("n..1 #n \\-> n..1 #n n
-" "" "34431") "DUP#2+PICK" ("n..1 #n \\-> n..1 #n n+1
+" "" "35D30") "DUP#2+PICK" ("n..1 #n \\-> n..1 #n n+1
 " "" "29362" :UBS) "2DUP" ("1 2 \\-> 1 2 1 2
-" "" "031AC") "DUP3PICK" ("1 2 \\-> 1 2 2 1
-" "" "35D30") "2DUPSWAP" ("1 2 \\-> 1 2 2 1
-" "" "35D30") "2DUP5ROLL" ("1 2 3 \\-> 2 3 2 3 1
+" "" "031AC") "2DUP5ROLL" ("1 2 3 \\-> 2 3 2 3 1
 " "" "36CA4") "NDUP" ("1..n #n \\-> 1..n 1..n
 " "" "031D9") "DROP" ("1 \\->
 " "" "03244") "DROPDUP" ("1 2 \\-> 1 1
-" "" "357CE") "DROPNDROP" ("1..n #n ob \\->
-" "" "37032") "DROPSWAP" ("1 2 3 \\-> 2 1
+" "" "357CE") "DROPSWAP" ("1 2 3 \\-> 2 1
 " "" "35733") "XYZ>Y" ("1 2 3 \\-> 2
 " "" "3574D") "ROT2DROP" ("1 2 3 \\-> 2
 " "" "3574D") "DROPSWAPDROP" ("1 2 3 \\-> 2
@@ -2656,10 +2635,7 @@ ob #0 \\-> #0
 " "" "341D7") "5DROP" ("1..5 \\->
 " "" "341DC") "6DROP" ("1..6 \\->
 " "" "341E8") "7DROP" ("1..7 \\->
-" "" "341F4") "NDROP" ("1..n #n \\->
-" "" "0326E") "N+1DROP" ("ob 1..n #n \\->
-" "" "35FB0") "#1+NDROP" ("ob 1..n #n \\->
-" "" "35FB0") "RESETDEPTH" ("ob1..obn obn+1..obx #n \\-> ob1..obn
+" "" "341F4") "RESETDEPTH" ("ob1..obn obn+1..obx #n \\-> ob1..obn
 " "Drops all but #n levels of the stack. 
 " "2F0A1") "KEEP" ("ob1..obn ob1'..obm' #m \\-> ob1'..obm'
 " "Drops all stack levels above #m.
@@ -2684,19 +2660,14 @@ the runstream.
 " "" "341BA") "SWAPROT" ("1 2 3 \\-> 3 2 1
 " "" "341BA") "XYZW>YWZX" ("1 2 3 4 \\-> 2 4 3 1
 " "" "36C90") "SWAP4ROLL" ("1 2 3 4 \\-> 2 4 3 1
-" "" "36C90") "DUPUNROT" ("1 2 \\-> 2 1 2
-" "" "3457F") "SWAPOVER" ("1 2 \\-> 2 1 2
-" "" "3457F") "SWAP3PICK" ("1 2 3 \\-> 1 3 2 1
+" "" "36C90") "SWAP3PICK" ("1 2 3 \\-> 1 3 2 1
 " "" "36CB8") "2SWAP" ("1 2 3 4 \\-> 3 4 1 2
 " "" "35018") "ROT" ("1 2 3 \\-> 2 3 1
 " "" "03295") "ROTDUP" ("1 2 3 \\-> 2 3 1 1
 " "" "3579C") "ROT2DUP" ("1 2 3 \\-> 2 3 1 3 1
 " "" "35CA4") "XYZ>YZ" ("1 2 3 \\-> 2 3
 " "" "341A8") "ROTDROP" ("1 2 3 \\-> 2 3
-" "" "341A8") "XYZ>Y" ("1 2 3 \\-> 2
-" "" "3574D") "DROPSWAPDROP" ("1 2 3 \\-> 2
-" "" "3574D") "ROT2DROP" ("1 2 3 \\-> 2
-" "" "3574D") "XYZ>ZY" ("1 2 3 \\-> 3 2
+" "" "341A8") "XYZ>ZY" ("1 2 3 \\-> 3 2
 " "" "34195") "ROTDROPSWAP" ("1 2 3 \\-> 3 2
 " "" "34195") "XYZ>YXZ" ("1 2 3 \\-> 2 1 3
 " "" "3416E") "ROTSWAP" ("1 2 3 \\-> 2 1 3
@@ -2734,20 +2705,8 @@ the runstream.
 " "" "3422B") "3UNROLL" ("1 2 3 \\-> 3 1 2
 " "" "3422B") "UNROT" ("1 2 3 \\-> 3 1 2
 " "" "3422B") "UNROTDUP" ("1 2 3 \\-> 3 1 2 1
-" "" "35D1C") "XYZ>ZX" ("1 2 3 \\-> 3 1
-" "" "35872") "SWAPDROPSWAP" ("1 2 3 \\-> 3 1
-" "" "35872") "UNROTDROP" ("1 2 3 \\-> 3 1
-" "" "35872") "XYZ>Z" ("1 2 3 \\-> 3
-" "" "343BD") "ROTROT2DROP" ("1 2 3 \\-> 3
-" "" "343BD") "UNROT2DROP" ("1 2 3 \\-> 3
-" "" "343BD") "XYZ>ZYX" ("1 2 3 \\-> 3 2 1
-" "" "341BA") "SWAPROT" ("1 2 3 \\-> 3 2 1
-" "" "341BA") "UNROTSWAP" ("1 2 3 \\-> 3 2 1
-" "" "341BA") "UNROTOVER" ("1 2 3 \\-> 3 1 2 1
-" "" "360CF") "XYZ>ZXY" ("1 2 3 \\-> 3 1 2
-" "" "3422B") "UNROT" ("1 2 3 \\-> 3 1 2
-" "" "3422B") "3UNROLL" ("1 2 3 \\-> 3 1 2
-" "" "3422B") "XYZW>WXYZ" ("1 2 3 4 \\-> 4 1 2 3
+" "" "35D1C") "UNROTOVER" ("1 2 3 \\-> 3 1 2 1
+" "" "360CF") "XYZW>WXYZ" ("1 2 3 4 \\-> 4 1 2 3
 " "" "34331") "FOURUNROLL" ("1 2 3 4 \\-> 4 1 2 3
 " "" "34331") "4UNROLL" ("1 2 3 4 \\-> 4 1 2 3
 " "" "34331") "4UNROLLDUP" ("1 2 3 4 \\-> 4 1 2 3 3
@@ -2772,8 +2731,6 @@ the runstream.
 " "" "032C2") "OVERDUP" ("1 2 \\-> 1 2 1 1
 " "" "35CF4") "OVERUNROT" ("1 2 \\-> 1 1 2
 " "" "35D6C") "OVERSWAP" ("1 2 \\-> 1 1 2
-" "" "35D6C") "OVERSWAP" ("1 2 \\-> 1 1 2
-" "" "35D6C") "OVERUNROT" ("1 2 \\-> 1 1 2
 " "" "35D6C") "OVER5PICK" ("1 2 3 4 \\-> 1 2 3 4 3 1
 " "" "36CF4") "2OVER" ("1 2 3 4 \\-> 1 2 3 4 1 2
 " "" "37046") "3PICK" ("1 2 3 \\-> 1 2 3 1
@@ -2813,8 +2770,9 @@ enters the hidden directory.
 " "Evaluate empty identifier.
 " "27308") "NULLLAM" ("\\-> lam
 " "Puts NULLLAM in the stack.
-" "2B3AB") "ID_CST" ("ID CST
-" "" "3EA01" :UBS) "ID_S" ("ID S
+" "2B3AB") "ID_CST" ("\\-> ob
+" "Evaluates ID CST.
+" "3EA01" :UBS) "ID_S" ("ID S
 " "" "3EF97" :UBS) "ID_X" ("ID X
 " "" "2715F" :UBS) "'IDX" ("\\-> id
 " "Puts ID X unevaluated on the stack.
@@ -2822,8 +2780,12 @@ enters the hidden directory.
 " "" "272F3" :UBS) "ID_SIGMADAT" ("ID \\GSDAT
 " "" "27937" :UBS) "'IDPAR" ("\\-> id
 " "Puts ID PPAR unevaluated on the stack.
+ --
+<REF>TEXT:Reserved|PPAR
 " "27AE9" :UBS) "ID_PPAR" ("ID PPAR
-" "" "2799A" :UBS) "ID_TPAR" ("ID TPAR
+" " --
+<REF>TEXT:Reserved|PPAR
+" "2799A" :UBS) "ID_TPAR" ("ID TPAR
 " "" "27B2F" :UBS) "'IDTPAR" ("\\-> id
 " "" "27B25" :UBS) "ID_VPAR" ("ID VPAR
 " "" "27B11" :UBS) "'IDVPAR" ("\\-> id
@@ -3097,8 +3059,8 @@ library numbers.
 " "Generates \"Undefined Name\" error.
 " "262E7") "SETIVLERR" ("Error 304h
 " "Generates \"Undefined Result\" error.
-" "2F458") "SetIOPARErr" ("Error C12h
-" "Generates \"Invalid IOPAR\" error.
+" "2F458") "SetIOPARErr" ("\\->
+" "Throws the IOPAR error: \"Invalid IOPAR\".
 " "2F37B") "Sig?ErrJmp" ("# \\->
 " "Calls ERRJMP if the error number is any of
 {13E 123 DFF}.
@@ -3114,10 +3076,7 @@ Calls <REF>rstfmt1 and then errors out.
 F \\-> %0
 " "Converts system flag to user flag, drops
 current stream.
-" "2602B") "%0<>" ("% \\-> flag
-" "Can be used to change a user flag into a
-system flag. 
-" "301BA") "TRUE" ("\\-> T
+" "2602B") "TRUE" ("\\-> T
 " "" "03A81") "TrueTrue" ("\\-> T T
 " "" "27E87") "TRUEFALSE" ("\\-> T F
 " "" "36540") "TrueFalse" ("\\-> T F
@@ -3134,8 +3093,7 @@ system flag.
 " "" "35289") "2DROPFALSE" ("ob1 ob2 \\-> F
 " "" "35B32") "4DROPFALSE" ("ob1..ob4 \\-> F
 " "" "28D38" :UBS) "5DROPFALSE" ("ob1..ob5 \\-> F
-" "" "28E05" :UBS) "NDROPFALSE" ("ob1..obn #n \\-> F
-" "" "28211") "SWAPTRUE" ("ob1 ob2 \\-> ob2 ob1 T
+" "" "28E05" :UBS) "SWAPTRUE" ("ob1 ob2 \\-> ob2 ob1 T
 " "" "2812F") "SWAPFALSE" ("ob1 ob2 \\-> ob2 ob1 F
 " "" "374AA" :UBS) "SWAPDROPTRUE" ("ob1 ob2 \\-> ob2 T
 " "" "374BE") "SWAPDROPFALSE" ("ob1 ob2 \\-> ob2 F
@@ -3529,7 +3487,8 @@ return stack body to stack.
 " "Like <REF>R>, but the return stack is not
 popped.
 " "07012") "IDUP" ("\\->
-" "Pushes top body into return stack.
+" "Pushes interpreter pointer into the return
+stack. 
 " "0716B") "EVAL" ("ob \\->
 " "Evaluates object.
 " "06F8E") "COMPEVAL" ("comp \\->
@@ -3668,10 +3627,7 @@ does COLA in the above one.
 " "" "35703") "5skipcola" ("Skips 5 objects, then does COLA.
 " "" "356D5") "COLASKIP" ("Drops rest of current stream
 and skips one obj in above stream.
-" "" "363FB") "IDUP" ("\\->
-" "Pushes interpreter pointer into the return
-stack. 
-" "0716B") "BEGIN" ("\\->
+" "" "363FB") "BEGIN" ("\\->
 " "Pushes interpreter pointer into the return
 stack. 
 " "071A2") "AGAIN" ("\\->
@@ -3797,9 +3753,9 @@ directory.
 " "25E79") "XEQStoKey" ("ob ID \\->
 " "" "25F0C") "xSTO>" ("ob id \\->
 ob symb \\->
-" "Like <REF>xSTO, but if the level 1 argument is
-symbolic, use the first element of it as the
-variable to write to.
+" "Like <REF>xSTO, but if the level 1 argument
+is symbolic, use the first element of it as
+the variable to write to.
 " "3E823") "^PROMPTSTO1" ("id/lam \\->
 " "Inputs value for a variable and stores it.
 " "0BD007" :wasCSys) "REPLACE" ("newob oldob \\-> newob
@@ -3880,16 +3836,14 @@ TVARS program.
 " "Gets parent directory.  Returns FALSE if
 parent directory is HOME.
 " "08309" :UBS) "SYSRRP?" ("rrp \\-> flag
-" "Is the directory the HOME directory?
-" "08DD4" :UBS) "CONTEXT@" ("\\-> rrp
+" "Is rrp HOME?
+" "08DD4") "CONTEXT@" ("\\-> rrp
 " "Recalls current directory.
 " "08D5A") "CONTEXT!" ("rrp \\->
 " "Sets new current directory.
 " "08D08") "LastContext!" ("rrp \\->
 " "" "25917" :UBS) "LastContext@" ("\\-> rrp
-" "" "2591C" :UBS) "SYSRRP?" ("rrp \\-> flag
-" "Is rrp HOME?
-" "08DD4") "STOPSIGN@" ("\\-> rrp
+" "" "2591C" :UBS) "STOPSIGN@" ("\\-> rrp
 " "Recalls last directory.
 " "08D82" :UBS) "STOPSIGN!" ("rrp \\->
 " "Stores new last directory.
@@ -4002,11 +3956,7 @@ valid.
 " "Returns tick count.
 " "2EED7") "CLKTICKS" ("\\-> hxs
 " "Returns tick count.
-" "2EED7") "TIMESTR" ("%dt %tm \\-> \"dy dt tm\"
-" "Returns string representation of time, using
-current format.  Example:
- \"WED 06/24/98  10:00:45A\"
-" "2EED3") "Date>d$" ("%date \\-> $
+" "2EED7") "Date>d$" ("%date \\-> $
 " "Returns string representation of date, using
 current format.
 " "2F329") "TOD>t$" ("%time \\-> $
@@ -4442,22 +4392,16 @@ of the last VStack level.
 " "" "2F0E6") "DOOPENIO" ("
 " "" "2EEC0") "OpenIO" ("
 " "" "2F2FF") "OpenIOPrt" ("
-" "" "2F35D") "APNDCRLF" ("$ \\-> $'
-" "Appends carriage return and line feed to
-string.
-" "2F31A") "docr" ("
+" "" "2F35D") "docr" ("
 " "" "2EECA") "IOCheckReal" ("
-" "" "2F346") "IDIOPAR" ("ID IOPAR
-" "" "271A3" :UBS) "StdIOPAR" ("\\-> {}
+" "" "2F346") "StdIOPAR" ("\\-> {}
 " "Default IOPAR: { 9600 0 0 0 3 1 }.
 " "2716D") "GetIOPAR" ("\\-> %baud % % % % %
 " "Recalls IOPAR and explodes it into the stack.
 " "2EEBF") "StoIOPAR" ("{} \\->
 " "STO the list of IO parameters in the HOME
 directory in the variable IOPAR.
-" "2F062") "SetIOPARErr" ("\\->
-" "Throws the IOPAR error: \"Invalid IOPAR\".
-" "2F37B") "StdPRTPAR" ("
+" "2F062") "StdPRTPAR" ("
 " "" "27A3A") "StoPRTPAR" ("
 " "" "2F063") "GetChkPRTPAR" ("
 " "" "2F338") "OpenUartClr" ("
@@ -4616,9 +4560,6 @@ necessary.
 " "25F9A") "0LASTOWDOB!" ("\\->
 " "Clears command save by last CK<n> command.
 <REF>CK0
-" "25F9A") "0LASTOWDOB!" ("\\->
-" "Clears command save by last CK<n> command.
-<REF>CK0
 " "25F9A") "AtUserStack" ("\\->
 " " :: CK0NOLASTWD 0LASTOWDOB! ;
 " "2EF6C") "CK1NoBlame" ("\\->
@@ -4640,10 +4581,6 @@ Any other first command is also skipped!
 ob \\->
 " "<REF>EvalNoCK with the next object in the
 runstream as argument.
-" "25F29" :UBS) "EvalNoCK:" ("RS
-ob \\->
-" "<REF>EvalNoCK with the next object in the
-runstream as argument.
 " "25F29" :UBS) "'EvalNoCK:_sup" ("RS
 ob \\->
 " "<REF>EvalNoCK with the next object in the
@@ -4661,14 +4598,14 @@ Z \\-> %
 " "Checks for real.  If a ZINT, convert
 to real.  Else SETTYPEERR.
 " "36B7B") "^CK1Z" ("$/#/hxs \\-> Z
-" "CHecks for an integer.  Converts strings,
+" "Checks for an integer.  Converts strings,
 bints or hxs's to zints.  Errors for other
 object types.
-" "184006" :wasCSys) "^CK2Z" ("ob ob' \\-> Z Z'
+" "184006" :CSys) "^CK2Z" ("ob ob' \\-> Z Z'
 " "Like <REF>^CK1Z, but for two objects.
-" "185006" :wasCSys) "^CK3Z" ("ob ob' ob'' \\-> Z Z' Z''
+" "185006" :CSys) "^CK3Z" ("ob ob' ob'' \\-> Z Z' Z''
 " "Like <REF>^CK1Z, but for three objects.
-" "186006" :wasCSys) "CKARRY" ("\\->
+" "186006" :CSys) "CKARRY" ("\\->
 " "Checks for array.
 " "3F33F" :UBS) "CKLIST" ("\\->
 " "Checks for list.
@@ -4926,9 +4863,7 @@ format).
 " "25962" :UBS) "UserKeys0" ("\\->
 " "" "25958" :UBS) "UserKeys0?" ("\\-> flag
 " "" "2595D" :UBS) "NonUsrKeyOK?" ("\\-> flag
-" "Returns TRUE if the keys not defined do their
-normal actions.
-" "25621" :UBS) "SetNUsrKeyOK" ("\\->
+" "" "25612" :UBS) "SetNUsrKeyOK" ("\\->
 " "Keys not defined do their normal actions.
 " "25617" :UBS) "ClrNUsrKeyOK" ("\\->
 " "Keys not defined just beep when pressed.
@@ -4956,8 +4891,7 @@ Flags: -61
 " "Clears the 1USR flag.
  --
 Flags: -61
-" "2560A" :UBS) "NonUsrKeyOK?" ("\\-> flag
-" "" "25612" :UBS) "GETDF" ("#menukey \\-> ob
+" "2560A" :UBS) "GETDF" ("#menukey \\-> ob
 " "Gets the definition of a menu key from
 THOUCHTAB.  #menukey = #1..#6
 " "04A41") "GETPROC" ("#menukey \\-> ob
@@ -5167,13 +5101,13 @@ SetThisRow.
 nothing. If Track? then ?DoTrackAct@. If
 Rebuild? then SetThisRow.
 " "2EF66") "?DispMenu" ("\\->
-" "Redisplay the menu now if no key is waiting
+" "Redisplays the menu now if no key is waiting
 in the buffer.  Even better is this:
  :: DA3OK?NOTIT ?DispMenu ;
 " "2DFCC") "DispMenu.1" ("\\->
-" "Displays the menu immediately.
+" "Displays menu now.
 " "2DFF4") "DispMenu" ("\\->
-" " :: DispMenu.1 SetDAsValid ;
+" ":: DispMenu.1 SetDAsValid ;
 " "2DFE0") "Grob>Menu" ("#col grob \\->
 " "Displays grob as menu label.
 " "2E0D5") "Str>Menu" ("#col $ \\->
@@ -5199,9 +5133,7 @@ y=5.
 " "Takes NOB from Runstream.
 " "275FD") "CLEARMENU" ("\\->
 " "" "2F15B") "CHECKMENU" ("\\->
-" "" "25F2B") "ID_CST" ("\\-> ob
-" "Evaluates ID CST.
-" "3EA01" :UBS) "nCustomMenu" ("\\->
+" "" "25F2B") "nCustomMenu" ("\\->
 " "Installs the CST menu.
 " "2C2C0") "SolvMenuInit" ("\\->
 " "Sets MenuKeyNS/LS/RS, ReviewKey and LabelDef
@@ -5402,8 +5334,7 @@ The types are prologue addresses like
 { DOFONT DORRP DOBAK } etc.
 <REF>FILER_MANAGER
 <REF>Filer_Action_Reference
-" "06E004") "^" ("" "Uses the File Manager to search for fonts. 
-" "06F004") "~Choose" ("::Appl $Title ::Convert {} offset \\-> {}' T
+" "06E004") "~Choose" ("::Appl $Title ::Convert {} offset \\-> {}' T
                                   \\-> ob T
                                   \\-> F
 " "The return value is a list if checkfields are
@@ -6172,13 +6103,8 @@ removed from the stack.
 FALSE is returned.  Otherwise the changed
 object along with TRUE is returned.
 " "2F1AE") "StrEdit" ("
-" "" "2F1AC") "^EQW3Edit" ("symb \\-> symb' T
-     \\-> F
-" "Opens the equation editor to edit the
-expression. If exited by ENTER, returns new
-expression and TRUE.  If exited by CANCEL,
-returns just FALSE. 
-" "011004") "EditString" ("$ \\->
+" "" "2F1AC") "^EQW3Edit" ("
+" "" "011004") "EditString" ("$ \\->
 " "Starts editing the string in the command line
 when the current program exits.  This is the
 entry to use if a program should exit with
@@ -6279,9 +6205,9 @@ update the display.  For speed, if you
 want to do more insertion before the
 user needs to see it.
 " "2EF96") "DispCommandLine" ("\\->
-" "Redisplays the command line.
+" "Redisplays the command line now.
 " "2F19E") "?DispCommandLine" ("\\->
-" "Redisplays the command line if necessary.
+" "Redisplays the command line now if necessary.
 " "2F19F") "PUT_STYLE" ("# \\->
 " "Changes the style at point.  If the
 selection is active, changes the style
@@ -6334,9 +6260,7 @@ something there before calling it.
 " "Returns the `SKIP\\->' menu key.
 " "27EFB") "InitEd&Modes" ("\\->
 " ":: InitEdLine InitEdModes ;
-" "2EEE6") "InitEdLine" ("\\->
-" " :: DEL_CMD ;
-" "2EEE7") "InitEdModes" ("\\->
+" "2EEE6") "InitEdModes" ("\\->
 " "" "2EEE8") "SaveLastEdit" ("$ \\->
 " "Calls CMD_STO if history is on.
 " "2F05E") "CMDSTO" ("$ \\->
@@ -6346,8 +6270,7 @@ commands, accessible with the `CMD' key.
 " "" "010004") "^EQW3Code" ("
 " "" "01D004") "^EQW3CursorOff" ("
 " "" "01C004") "^EQW3CursorOn" ("
-" "" "01B004") "^EQW3Edit" ("
-" "" "011004") "^EQW3StartEdit" ("
+" "" "01B004") "^EQW3StartEdit" ("
 " "" "012004") "^EQW3ViewLeft" ("
 " "" "016004") "^EQW3ViewLeftX" ("
 " "" "014004") "^EQW3ViewMargin" ("
@@ -6426,21 +6349,9 @@ changing its size.
 " "Redisplays all required areas.  Does it
 immediately, without waiting for the current
 command to finish.
-" "2EF67") "?DispCommandLine" ("\\->
-" "Redisplays the command line now if necessary.
-" "2F19F") "DispCommandLine" ("\\->
-" "Redisplays the command line now.
-" "2F19E") "DispEditLine" ("\\->
+" "2EF67") "DispEditLine" ("\\->
 " "Just calls DispCommandLine.
-" "2EE5A") "?DispMenu" ("\\->
-" "Redisplays the menu now if no key is waiting
-in the buffer.  Even better is this:
- :: DA3OK?NOTIT ?DispMenu ;
-" "2DFCC") "DispMenu.1" ("\\->
-" "Displays menu now.
-" "2DFF4") "DispMenu" ("\\->
-" ":: DispMenu.1 SetDAsValid ;
-" "2DFE0") "?DispStack" ("\\->
+" "2EE5A") "?DispStack" ("\\->
 " "Redisplays the stack now if necessary.
 " "2C341") "?DispStatus" ("\\->
 " "Redisplays the status area now if necessary.
@@ -6854,8 +6765,7 @@ editing objects).
 " "Returns system font height.
 " "2623D") "CHECK_SCAN_FONT" ("
 " "" "26210") "DOMINIFONT" ("
-" "" "026FE") "^" ("" "Uses the File Manager to search for fonts. 
-" "06F004") "FSCANFONT" ("
+" "" "026FE") "FSCANFONT" ("
 " "" "2621F") "INITMKFONT" ("
 " "" "26256") "Init_MetaKernelFont" ("
 " "" "26904" :ML) "SCANFONT" ("
@@ -7062,19 +6972,7 @@ box label.
 " "Does  Box/StdLabel with the next two objects
 from the stream.
  Usage: :: Box/StdLbl: $ <test> ;
-" "25E80") "Grob>Menu" ("#col grob \\->
-" "Displays grob as menu label.
-" "2E0D5") "Str>Menu" ("#col $ \\->
-" "Displays string as menu label.
-" "2E0F3") "Id>Menu" ("#col id \\->
-" "Displays id as menu label.
-" "2E11B") "Seco>Menu" ("#col :: \\->
-" "Does EVAL then DoLabel.
-" "2E107") "DoLabel" ("#col ob \\->
-" "If ob is of one of the supported types,
-displays a menu label. If not, generates a
-\"Bad Argument Type\" error.
-" "25886") "StdLabelDef" ("#col grob \\->
+" "25E80") "StdLabelDef" ("#col grob \\->
 #col $ \\->
 #col id \\->
 #col :: \\->
@@ -7108,10 +7006,7 @@ The grob is centered around #x and the to is
 put at #y. #w represents the maximum width of
 the grob created. If the text is wider, it is
 truncated.  Bangtype.
-" "25FEF") "MakeLabel" ("$ #w #x grob \\-> grob'
-" "Inserts $ into grob using CENTER$3x5 with
-y=5.
-" "2E2AA") "^MkTitle" ("$ \\-> grob
+" "25FEF") "^MkTitle" ("$ \\-> grob
 " "Create a title grob.  This is the text
 embedded in a dot matrix pattern, as used for
 Choose boxes etc.  The size of the grob is
@@ -7166,14 +7061,7 @@ with arrows.
 " "0BE007" :wasCSys) "^DISPLAYext" ("grob ob \\-> grob'
 " "Adds ob to grob after converting it to a
 grob.
-" "0C0007" :wasCSys) "'IDPAR" ("\\-> id
-" "Puts ID PPAR unevaluated on the stack.
- --
-<REF>TEXT:Reserved|PPAR
-" "27AE9" :UBS) "ID_PPAR" ("ID PPAR
-" " --
-<REF>TEXT:Reserved|PPAR
-" "2799A" :UBS) "CHECKPICT" ("\\->
+" "0C0007" :wasCSys) "CHECKPICT" ("\\->
 " "Checks size of GBUFF. If it is smaller than
 131x64 sets GBUFF back to its default size
 (131x64).
@@ -7336,15 +7224,7 @@ coordinates.  Inverse operation is DOC>PX.
 " "Converts a complex coordinate point into list
 of two HXS numbers.  Inverse operation is
 DOPX>C. 
-" "2EF02") "^SYMBINCOMP" ("symb \\-> ob1 .. obN #n
-ob \\-> ob #1
-{} \\-> {} #1
-" "Explodes symbolic object into meta. Other
-objects are converted into one-object metas
-by pushing #1 into the stack. 
-" "157006" :CSys) "^2SYMBINCOMP" ("ob1 ob2 \\-> meta1 meta2
-" "Does ^SYMBINCOMP for 2 objects.
-" "12A006" :CSys) "^VXXLext" ("ob Lvar \\-> Q
+" "2EF02") "^VXXLext" ("ob Lvar \\-> Q
 " "Converts object to internal form. The object
 can be a symbolic, a symbolic vector or a
 symbolic matrix.  If the conversion was not
@@ -7439,15 +7319,7 @@ trims it.
 " "If possible, converts string into a zint and
 returns TRUE. If not, keeps the original
 string and returns FALSE.
-" "0F3006" :CSys) "^CK1Z" ("$/#/hxs \\-> Z
-" "Checks for an integer.  Converts strings,
-bints or hxs's to zints.  Errors for other
-object types.
-" "184006" :CSys) "^CK2Z" ("ob ob' \\-> Z Z'
-" "Like <REF>^CK1Z, but for two objects.
-" "185006" :CSys) "^CK3Z" ("ob ob' ob'' \\-> Z Z' Z''
-" "Like <REF>^CK1Z, but for three objects.
-" "186006" :CSys) "^CK&CONVINT" ("symb \\-> zint
+" "0F3006" :CSys) "^CK&CONVINT" ("symb \\-> zint
      \\-> :: zint zint' ;
 " "Check that a sym is a zint or Gauss integer,
 convert it.
@@ -7612,16 +7484,7 @@ automatically detected.
 " "" "274A9" :UBS) "Z0Z1" ("(0,1)
 " "" "27516" :UBS) "Z-1Z0" ("(-1,0)
 " "" "2754B" :UBS) "Z1Z1" ("(1,1)
-" "" "2756C" :UBS) "^TYPEGAUSSINT?" ("ob \\-> flag
-" "Checks if ob is Gaussian integer.
-" "114007" :1\.11 :wasCSys) "^DTYPEGAUSSINT?" ("ob \\-> ob flag
-" "Checks if ob is Gaussian integer.
-" "115007" :1\.11 :wasCSys) "^DUPTYPEGAUSSINT?" ("ob \\-> ob flag
-" "Checks if ob is Gaussian integer.
-" "116007" :1\.11 :wasCSys) "^CK1Cext" ("ob \\-> flag
-" "Checks if object is integer or Gaussian
-integer.
-" "187006" :wasCSys) "^CXRIext" ("C \\-> Zre Zim
+" "" "2756C" :UBS) "^CXRIext" ("C \\-> Zre Zim
 " "Returns real and imaginary part of Gaussian
 integer.
 " "15D006" :CSys) "^CGCDext" ("C2 C1 \\-> C
@@ -7674,12 +7537,7 @@ list contains only lists or hexes!.
 than Zsmall.
 " "19B006" :CSys) "^CKINT>0" ("Obj \\-> Obj flag
 " "Tests if Obj is a strictly positive integer.
-" "19C006" :CSys) "^METAINT?" ("Meta \\-> Meta flag
-" "Tests if Meta is an integer.
-" "198006" :CSys) "^METAPOSINT?" ("Meta \\-> Meta flag
-" "Tests if Meta is a positive integer smaller
-than Zsmall.
-" "199006" :CSys) "^DupTypeS?" ("Z \\-> Z flag
+" "19C006" :CSys) "^DupTypeS?" ("Z \\-> Z flag
 " "Tests if Z is short (\\<= 64 bits).
 " "0CC006" :CSys) "^MATIDN" ("M/z/% \\-> M'
 " "Creates identity matrix.
@@ -8435,11 +8293,7 @@ otherwise returns FALSE.
     \\-> F
 " "Returns TRUE and quotient if b divides a,
 otherwise returns FALSE.
-" "3F5006" :CSys) "^" ("" "Euclidean division.  Assumes P and Q have
-integer or Gaussian integer coefficient.
-Returns FALSE in complex mode or if sparse
-short division fails.
-" "3F6006" :CSys) "^POTENCEext" ("z1 z2 \\-> q r
+" "3F5006" :CSys) "^POTENCEext" ("z1 z2 \\-> q r
 " "Step by step Euclidean division for small
 integers.
 " "3F7006" :CSys) "^DENOLCMext" ("list \\-> ob
@@ -8461,13 +8315,7 @@ returned after failure of GCDHEUext.
 " "Generic internal GCD.
  ( LAM2: GCDext ob1, ob2 \\-> pgcd ).
 " "2B3006" :CSys) "^GCDext" ("
-" "" "2B4006" :CSys) "^SYMBINCOMP" ("symb \\-> ob1 .. obN #n
-ob \\-> ob #1
-{} \\-> {} #1
-" "Explodes symbolic object into meta. Other
-objects are converted into one-object metas
-by pushing #1 into the stack. 
-" "157006" :CSys) "^m-1&m+1" ("meta \\-> meta&1&+ meta&1&-
+" "" "2B4006" :CSys) "^m-1&m+1" ("meta \\-> meta&1&+ meta&1&-
 " "Creates two copies of the meta. To the first
 one, adds 1 and +, to the second one, adds 1
 and -.
@@ -8549,10 +8397,7 @@ simplifications.  Checks for infinities and
 " "Divide 2 meta objects with trivial
 simplifications.  Checks for infinities and 0
 then call metadiv.
-" "3B1006" :CSys) "^DIVMETAOBJ" ("o1...on #n ob \\-> {o1/ob...on/ob}
-" "Division of all elements of a meta by ob.
-Tests if o=1.
-" "3F1006" :wasCSys) "^meta^" ("Meta ob \\-> Meta&ob&^
+" "3B1006" :CSys) "^meta^" ("Meta ob \\-> Meta&ob&^
 " "Elevates expression to a power. If ob=1, just
 returns the expression. Tests for present of
 xNEG in the end of meta for integral powers. 
@@ -10526,11 +10371,7 @@ the list.
 " "26B006" :CSys) "^CK1TONOext" ("ob \\-> ob'
 " "Applies prg to ob, recursively for lists.
 prg is fetched from runstream.
-" "26D006" :CSys) "^TYPEIRRQ?" ("ob \\-> flag
-" "Is ob an irrquad?
-" "167006" :CSys) "^DTYPEIRRQ?" ("ob \\-> ob flag
-" "DUP, then ^TYPEIRRQ?.
-" "168006" :CSys) "^QXNDext" ("irrq \\-> a b c
+" "26D006" :CSys) "^QXNDext" ("irrq \\-> a b c
 " "b=0 and c=1 if stack level 1 is not an irrq.
 " "165006" :CSys) "^NDXQext" ("a b c \\-> irrq
 " "" "166006" :CSys) "^IRRQ#ULTIMATE" ("ob \\-> # c
@@ -10545,9 +10386,7 @@ Work always if irrq is made of Z.
 " "509006" :CSys) "^QNORMext" ("Zirr \\-> a^2-b*c^2
 " "Irrq-norm of an irrquad.
 This is *not* the complex modulus.
-" "51A006" :CSys) "^SECOSQFFext" (":: x<< a b c x>> ; \\-> { fact1 mult1 ... factn multn }
-" "Factorization of irrquads and Gauss integers.
-" "4D4006" :CSys) "^PREPARext" ("o1 o2 \\-> a1 b1 c1 a2 b2 c2
+" "51A006" :CSys) "^PREPARext" ("o1 o2 \\-> a1 b1 c1 a2 b2 c2
 " "Returns irrquad decomposition of o1 and o2.
 with either c1=c2 or c1 and c2 have no
 factors in comon.  c1<c2, ordering handled
@@ -12811,29 +12650,7 @@ See the IF and IFERR keyword
 entries for syntax information.
  --
 Related: IF,CASE,DO,ELSE,IFERR,REPEAT, THEN,UNTIL,WHILE
-" "3805D" :Usr) "xEND" ("1/0 \\->
-" "END Cmd
- --
-Ends conditional, error-trapping,
-and indefinite loop structures.
-
-See the IF, CASE, IFERR, DO, and
-WHILE keyword entries for syntax
-information.
- --
-Related: IF,CASE,DO,ELSE,IFERR,REPEAT, THEN,UNTIL,WHILE
-" "38A54" :Usr) "xENDDO" ("1/0 \\->
-" "END Cmd
- --
-Ends conditional, error-trapping,
-and indefinite loop structures.
-
-See the IF, CASE, IFERR, DO, and
-WHILE keyword entries for syntax
-information.
- --
-Related: IF,CASE,DO,ELSE,IFERR,REPEAT, THEN,UNTIL,WHILE
-" "38A54" :Usr) "xEND" ("
+" "3805D" :Usr) "xEND" ("
 " "END Cmd
  --
 Ends conditional, error-trapping,
@@ -12844,18 +12661,18 @@ WHILE keyword entries for syntax
 information.
  --
 Related: IF,CASE,DO,ELSE,IFERR,REPEAT, THEN,UNTIL,WHILE
-" "3807D" :Usr) "xIFEND" ("
+" "38A2F" :Usr) "xENDDO" ("1/0 \\->
 " "END Cmd
  --
 Ends conditional, error-trapping,
 and indefinite loop structures.
- --
+
 See the IF, CASE, IFERR, DO, and
 WHILE keyword entries for syntax
 information.
  --
 Related: IF,CASE,DO,ELSE,IFERR,REPEAT, THEN,UNTIL,WHILE
-" "3807D" :Usr) "xEND" ("
+" "38A54" :Usr) "xIFEND" ("
 " "END Cmd
  --
 Ends conditional, error-trapping,
@@ -12866,7 +12683,7 @@ WHILE keyword entries for syntax
 information.
  --
 Related: IF,CASE,DO,ELSE,IFERR,REPEAT, THEN,UNTIL,WHILE
-" "38A2F" :Usr) "xWHILEEND" ("
+" "3807D" :Usr) "xWHILEEND" ("
 " "END Cmd
  --
 Ends conditional, error-trapping,
@@ -13561,12 +13378,8 @@ current directory.
 Related: CRDIR,PATH,PGDIR,UPDIR
 " "39405" :Usr) "~xHORNER" ("symb1 x \\-> symb2 x symb3
 " "" "037314" :CASHELP :Usr) "~xHYPERBOLIC" ("
-" "" "02B0DE" :Usr) "xi" ("\\-> (0.,1.)
-\\-> 'i'
-" "Returns the complex constant i.
- --
-Related: e,MAXR,MINR,\\pi
-" "39B3B" :Usr) "~xIABCUV" ("n1 n2 n3 \\-> n4 n5
+" "" "02B0DE" :Usr) "xi" ("\\-> i
+" "" "39B3B" :Usr) "~xIABCUV" ("n1 n2 n3 \\-> n4 n5
 " "" "031314" :CASHELP :Usr) "~xIBASIS" ("
 " "" "0120DE" :Usr) "~xIBERNOULLI" ("n \\-> x
 " "" "0060DE" :CASHELP :Usr) "~xIBP" ("uv' v \\-> uv -u'v
@@ -13630,8 +13443,7 @@ Related: IFTE
  --
 Executes objT if T/F is nonzero.
 Discards objF if T/F is zero.
-" "395F3" :Usr) "xi" ("\\-> i
-" "" "39B3B" :Usr) "~xILAP" ("symb \\-> symb'
+" "395F3" :Usr) "~xILAP" ("symb \\-> symb'
 " "" "011314" :CASHELP :Usr) "xIM" ("(x,y) \\-> y
 [] \\-> []'
 " "Imaginary Part Func
@@ -13658,8 +13470,6 @@ the new value to level 1.
 Related: DECR
 " "3E54C" :Usr) "~x\\oo" ("\\-> '+\\oo'
 " "Infinity
-" "08A314" :Usr) "~x\\oo" ("\\-> '+\\oo'
-" "Infinity
 " "08A314" :Usr) "~xINFORM" ("$ {flds} fmt {rst} {init} \\-> {} 1
                           \\-> 0
 " "User-Defined Dialog Box Cmd
@@ -13789,14 +13599,12 @@ Related: COLCT,EXPAN,QUAD,SHOW,SOLVE
 " "" "3DB62" :Usr) "x;" ("
 " "" "3F053" :Usr) "~x?" ("
 " "" "089314" :Usr) "x'" ("
-" "" "389EF" :Usr) "x'" ("
 " "" "38A14" :Usr) "xENDTIC" ("
 " "" "38A14" :Usr) "x\\<<" ("
 " "" "389B9" :Usr) "x<<" ("
 " "" "389B9" :Usr) "x\\>>" ("
-" "" "389D4" :Usr) "x>>" ("
-" "" "389D4" :Usr) "x\\>>" ("
-" "" "38999" :Usr) "x>>ABND" ("
+" "" "38999" :Usr) "x>>" ("
+" "" "389D4" :Usr) "x>>ABND" ("
 " "" "38999" :Usr) "~xJORDAN" ("[nxn] \\-> minpol chrpol {} []
 " "" "050314" :CASHELP :Usr) "~xKER" ("
 " "" "00F0DE" :Usr) "xKERRM" ("\\-> msg
@@ -16231,12 +16039,7 @@ Related: CL\\GS,RCL\\GS,\\GS+,\\GS-
 VX.
  --
 <REF>TEXT:Reserved|VX
-" "0400DE" :Usr :1\.19-6) "xSTO>" ("ob id \\->
-ob symb \\->
-" "Like <REF>xSTO, but if the level 1 argument
-is symbolic, use the first element of it as
-the variable to write to.
-" "3E823") "~xSTORE" ("
+" "0400DE" :Usr :1\.19-6) "~xSTORE" ("
 " "" "0240DE" :Usr) "xSTR\\->" ("$ \\-> ob
 " "Evaluate String Cmd
  --
@@ -16441,26 +16244,15 @@ Related: TINC
 Displays the stack display.
  --
 Related: PICTURE,PVIEW
-" "3C8FA" :Usr) "xTHEN" ("0/1 \\->
-" "THEN Cmd
- --
-Starts the true-clause in conditional
-or error-trapping structure
- --
-Related: CASE,ELSE,END,IFERR
-" "37F7F" :Usr) "xTHEN" ("
-" "THEN in a CASE statement.
+" "3C8FA" :Usr) "xTHEN" ("
+" "THEN in an ON ERROR construct.
  --
 Related: CASE,ELSE,END,IFERR
-" "38B43" :Usr) "xTHENCASE" ("
+" "38ABA" :Usr) "xTHENCASE" ("
 " "THEN in a CASE statement.
  --
 Related: CASE,ELSE,END,IFERR
-" "38B43" :Usr) "xTHEN" ("
-" "THEN in an ON ERROR construct.
- --
-Related: CASE,ELSE,END,IFERR
-" "38ABA" :Usr) "xERRTHEN" ("
+" "38B43" :Usr) "xERRTHEN" ("
 " "THEN in an ON ERROR construct.
  --
 Related: CASE,ELSE,END,IFERR
@@ -17488,18 +17280,10 @@ Tests if two objects are equal.
 Flags: -3
  --
 Related: SAME,TYPE,<,\\<=,>,\\>=, ==
-" "3CD21" :Usr) "x\\->" ("ob1 .. obn \\->
-" "Create Local Variables Cmd
- --
-Creates local variables.
- obj1 ... objn \\->
- --
-Syntax:
- \\-> name1 name2 ... nameN \\<< prog \\>>
- \\-> name1 name2 ... nameN 'Expr'
- --
-Related: DEFINE,STO
-" "3885C" :Usr) "xRPN->" ("ob1 .. obn \\->
+" "3CD21" :Usr) "x\\->" ("
+" "Create local variable comand.
+<REF>xRPN->
+" "38093" :Usr) "xRPN->" ("ob1 .. obn \\->
 " "Create Local Variables Cmd
  --
 Creates local variables.
@@ -17510,10 +17294,7 @@ Syntax:
  \\-> name1 name2 ... nameN 'Expr'
  --
 Related: DEFINE,STO
-" "3885C" :Usr) "x\\->" ("
-" "Create local variable comand.
-<REF>xRPN->
-" "38093" :Usr) "xALG->" ("
+" "3885C" :Usr) "xALG->" ("
 " "Create local variable comand.
 <REF>xRPN->
 " "38093" :Usr) "x!" ("x \\-> x'

+ 4 - 52
rpl-base.el

@@ -23,21 +23,9 @@
 (defgroup rpl nil
   "Tools for working with the RPL calculator programming language.")
 
-(defcustom rpl-sysrpl-data-file-prefix "sysrpl-data"
-  "Filename prefix for files from which to `read' SysRPL data."
-  :type 'string
-  :group 'rpl)
-
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Utility functions for generating/loading pre-computed data
 ;;
-(defun rpl-make-sysrpl-data-filename (calculator)
-  "Make the SysRPL data filename used for CALCULATOR.
-Where CALCULATOR should be a keyword symbol identifying the
-calculator model, e.g. :48G, :49G etc."
-  (cl-assert (keywordp calculator))
-  (concat rpl-sysrpl-data-file-prefix "." (substring (symbol-name calculator) 1) ".el"))
-
 (defvar rpl-tools-data-dir
   (and load-file-name (concat (file-name-directory load-file-name) "data/"))
   "RPL tools data directory.")
@@ -67,45 +55,6 @@ string (either relative or absolute)."
       (goto-char (point-min))
       (read (current-buffer)))))
 
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Load SysRPL names files
-;;
-(message "Loading SysRPL information")
-
-(defvar rpl-sysrpl-data-38g
-  (rpl-read-data-file (rpl-make-sysrpl-data-filename :38G))
-  "SysRPL data for the 38G calculator.")
-
-(defvar rpl-sysrpl-data-39g
-  (rpl-read-data-file (rpl-make-sysrpl-data-filename :39G))
-  "SysRPL data for the 39G calculator.")
-
-(defvar rpl-sysrpl-data-48g
-  (rpl-read-data-file (rpl-make-sysrpl-data-filename :48G))
-  "SysRPL data for the 48G calculator.")
-
-(defvar rpl-sysrpl-data-49g
-  (rpl-read-data-file (rpl-make-sysrpl-data-filename :49G))
-  "SysRPL data for the 49G calculator.")
-
-(defun rpl-sysrpl-data-get-names (data)
-  (let ((names nil))
-    (maphash (lambda (key val)
-               (setq names (cons key names)))
-             data)
-    names))
-
-(defun rpl-sysrpl-names (calculator)
-  (cl-assert (keywordp calculator))
-  (cond ((eql calculator :38G)
-         (rpl-sysrpl-data-get-names rpl-sysrpl-data-38g))
-        ((eql calculator :39G)
-         (rpl-sysrpl-data-get-names rpl-sysrpl-data-39g))
-        ((eql calculator :48G)
-         (rpl-sysrpl-data-get-names rpl-sysrpl-data-48g))
-        ((eql calculator :49G)
-         (rpl-sysrpl-data-get-names rpl-sysrpl-data-49g))))
-
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Common keymap (including the ``RPL'' menu)
 ;;
@@ -144,6 +93,9 @@ string (either relative or absolute)."
 (defun rpl-force-reload ()
   (interactive)
   (load "rpl-base")
-  (load "rpl-sysrpl-mode"))
+  (load "sysrpl-mode"))
 
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; End of file
+;;
 (provide 'rpl-base)

+ 100 - 16
rpl-edb.el

@@ -12,10 +12,15 @@
 
 ;;; Commentary:
 
-;; Functions to parse the entries.db file.
+;; Functions to parse the entries.db file and create accessible
+;; databases of SysRPL information.
 
 ;;; Code:
 (require 'cl-lib)
+(require 'rpl-base)
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Functions for parsing the EDB file
 
 (defun rpl-edb-get-line ()
   "Get line that point is on from the current buffer.
@@ -131,9 +136,13 @@ Return a string.  Move point to the start of the next line."
 
 ;;; Parsing the entries.db buffer
 ;;;
+(defvar rpl-edb-entries nil
+  "A place on which to push the entries parsed from the EDB file.")
+
 (defun rpl-edb-parse-buffer ()
   "Parse the current buffer, assumed to be the entries.db file.
-Return a list of EDB entries, where each entry has the format:
+Set `rpl-edb-entries' to the parsed results, a list of EDB
+entries, where each entry has the format:
   (NAMES STACK-EFFECT DESCRIPTION CALC-INFOS)
 where NAMES is a list of strings representing the different names
 under which the entry is known, STACK-EFFECT and DESCRIPTION are
@@ -147,6 +156,7 @@ library/flash pointer), NAME-FORMAT is a FORMAT string allowing
 the name of the entry to be modified for this particular
 calculator, and FLAG-KEYS are keyword symbols specifying certain
 flags for this calculator."
+  (interactive)
   (let ((entry-names nil)
         (entry-stack-effect nil)
         (entry-description nil)
@@ -187,18 +197,21 @@ flags for this calculator."
                (setq entry-description nil)))))
     (when entry-names
       (push (list entry-names entry-stack-effect (reverse entry-description) entry-calc-infos) entries))
-    (reverse entries)))
+    (setq rpl-edb-entries (reverse entries))))
 
-;;; Creating calculator data files
-;;;
-(defun rpl-edb-generate-calculator-data (edb-entries calculator)
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Functions to create calculator data files
+
+(defun rpl-edb-generate-calculator-data (calculator)
   "Generate data for CALCULATOR (a keyword identifying the model).
 Return a hash-table whose entries are keyed by entry name and
 whose values are lists of the form:
-  (STACK-EFFECT DESCRIPTION ADDRESS &rest FLAGS)."
+  (STACK-EFFECT DESCRIPTION ADDRESS &rest FLAGS).
+Assumes `rpl-edb-entries' has been set by calling
+`rpl-edb-parse-buffer'."
   (cl-assert (keywordp calculator))
-  (let ((table (make-hash-table)))
-    (dolist (entry edb-entries)
+  (let ((table (make-hash-table :test 'equal)))
+    (dolist (entry rpl-edb-entries)
       (cl-destructuring-bind (names stack-effect description calc-infos) entry
         (let ((calc-info (car (cl-member calculator calc-infos
                                          :test (lambda (key info) (equal key (car info)))))))
@@ -213,18 +226,89 @@ whose values are lists of the form:
                 (puthash (format fmt-str name) data table)))))))
     table))
 
-(defun rpl-edb-make-calculator-data-file (edb-entries calculator)
-  ""
+(defun rpl-edb-make-data-filename (calculator)
+  "Make the SysRPL data filename used for CALCULATOR.
+Where CALCULATOR should be a keyword symbol identifying the
+calculator model, e.g. :48G, :49G etc."
   (cl-assert (keywordp calculator))
-  (rpl-write-data-file (rpl-edb-generate-calculator-data edb-entries calculator)
-                       (rpl-make-sysrpl-data-filename calculator)))
+  (concat "sysrpl-data." (substring (symbol-name calculator) 1) ".el"))
 
-(defvar rpl-edb-entries nil
-  "A place on which to push the parsed entries.")
+(defun rpl-edb-make-calculator-data-file (calculator)
+  ""
+  (cl-assert (keywordp calculator))
+  (rpl-write-data-file (rpl-edb-generate-calculator-data calculator)
+                       (rpl-edb-make-data-filename calculator)))
 
 (defun rpl-edb-make-all-data-files ()
   ""
   (interactive)
-  (setq rpl-edb-entries (rpl-edb-parse-buffer))
+  (unless rpl-edb-entries
+    (rpl-edb-parse-buffer))
   (dolist (calculator '(:38G :39G :48G :49G))
     (rpl-edb-make-calculator-data-file rpl-edb-entries calculator)))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Functions to read and query calculator data files
+
+(defvar rpl-edb-data-38g nil
+  "SysRPL data for the 38G calculator.")
+
+(defvar rpl-edb-data-39g nil
+  "SysRPL data for the 39G calculator.")
+
+(defvar rpl-sysrpl-data-48g nil
+  "SysRPL data for the 48G calculator.")
+
+(defvar rpl-sysrpl-data-49g nil
+  "SysRPL data for the 49G calculator.")
+
+(defun rpl-edb-data (calculator)
+"Get SysRPL data for the specified CALCULATOR.
+Returns a hash table, keyed by SysRPL word name, whose values each
+have the form (STACK-EFFECT DESCRIPTION ADDRESS &rest FLAGS)."
+  (cl-assert (keywordp calculator))
+  (cond ((eql calculator :38G)
+         (unless rpl-sysrpl-data-38g
+           (setq rpl-sysrpl-data-38g
+                 (rpl-read-data-file (rpl-edb-make-data-filename :38G))))
+         rpl-sysrpl-data-38g)
+        ((eql calculator :39G)
+         (unless rpl-sysrpl-data-39g
+           (setq rpl-sysrpl-data-39g
+                 (rpl-read-data-file (rpl-edb-make-data-filename :39G))))
+         rpl-sysrpl-data-39g)
+        ((eql calculator :48G)
+         (unless rpl-sysrpl-data-48g
+           (setq rpl-sysrpl-data-48g
+                 (rpl-read-data-file (rpl-edb-make-data-filename :48G))))
+         rpl-sysrpl-data-48g)
+        ((eql calculator :49G)
+         (unless rpl-sysrpl-data-49g
+           (setq rpl-sysrpl-data-49g
+                 (rpl-read-data-file (rpl-edb-make-data-filename :49G))))
+         rpl-sysrpl-data-49g)))
+
+(defun rpl-edb-all-names (calculator)
+  (cl-assert (keywordp calculator))
+  (let ((names nil))
+    (maphash (lambda (key val)
+               (setq names (cons key names)))
+             (rpl-edb-data calculator))
+    names))
+
+(defun rpl-edb-get-stack-effect (calculator name)
+  (car (gethash name (rpl-edb-data calculator))))
+
+(defun rpl-edb-get-description (calculator name)
+  (cadr (gethash name (rpl-edb-data calculator))))
+
+(defun rpl-edb-get-address (calculator name)
+  (caddr (gethash name (rpl-edb-data calculator))))
+
+(defun rpl-edb-get-flags (calculator name)
+  (cadddr (gethash name (rpl-edb-data calculator))))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; End of file
+;;
+(provide 'rpl-edb)

+ 1 - 0
rpl-tools.el

@@ -23,6 +23,7 @@
 
 ;; Load everything
 (require 'rpl-base)
+(require 'rpl-edb)
 (require 'sysrpl-mode)
 
 ;; Acknowledge we're loaded

+ 48 - 13
sysrpl-mode.el

@@ -18,19 +18,47 @@
 ;;; Code:
 (require 'cl-lib)
 (require 'rpl-base)
+(require 'rpl-edb)
 
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Customizations
+;;
 (defcustom rpl-sysrpl-default-calculator :48G
   "Default calculator type for SysRPL mode."
   :type '(radio :38G :39G :48G :49G)
   :group 'rpl)
 
-(defface sysrpl-name '((t (:foreground "blue")))
-  "Face used for displaying SysRPL names."
+(defface sysrpl-name '((t :foreground "darkblue"))
+  "Face used for displaying SysRPL names (e.g DROP)."
+  :group 'rpl)
+
+(defface sysrpl-keyword '((t :foreground "purple"))
+  "Face used for displaying SysRPL keywords (e.g. :: ;)."
+  :group 'rpl)
+
+(defface sysrpl-comment '((t :foreground "darkgreen"))
+  "Face used for displaying SysRPL comments."
+  :group 'rpl)
+
+(defcustom sysrpl-font-lock-name-face 'sysrpl-name
+  "Name of face to use for displaying SysRPL names."
+  :type 'symbol
+  :group 'rpl)
+
+(defcustom sysrpl-font-lock-keyword-face 'sysrpl-keyword
+  "Name of face to use for displaying SysRPL keywords."
+  :type 'symbol
+  :group 'rpl)
+
+(defcustom sysrpl-font-lock-comment-face 'sysrpl-comment
+  "Name of face to use for displaying SysRPL comments."
+  :type 'symbol
   :group 'rpl)
 
 (defvar sysrpl-mode-syntax-table
   (let ((table (make-syntax-table prog-mode-syntax-table)))
     (modify-syntax-entry ?:  "w" table)
+    (modify-syntax-entry ?\; "w" table)
     (modify-syntax-entry ?!  "w" table)
     (modify-syntax-entry ?@  "w" table)
     (modify-syntax-entry ?#  "w" table)
@@ -51,16 +79,17 @@
     table)
   "The SysRPL syntax table.")
 
-(defvar sysrpl-keyword-face 'sysrpl-name)
-
 (defun sysrpl-font-lock-compile-keywords (names)
-  "Construct a list of keyword matcher clauses suitable for ``font-lock-keywords''."
-  (mapcar (lambda (str) (list (concat "\\<" (regexp-quote str) "\\>")
-                              (list 0 'sysrpl-keyword-face)))
-          names))
+  "Construct a list of keyword matcher clauses suitable for `font-lock-keywords'."
+  (append (list (list "^\\*.*$" (list 0 'sysrpl-font-lock-comment-face))
+                (list "(.*)" (list 0 'sysrpl-font-lock-comment-face))
+                (list (concat "\\<" (regexp-opt '("::" ";")) "\\>") (list 0 'sysrpl-font-lock-keyword-face)))
+          (mapcar (lambda (str) (list (concat "\\<" (regexp-quote str) "\\>")
+                                      (list 0 'sysrpl-font-lock-name-face)))
+                  names)))
 
 (defvar sysrpl-font-lock-keywords
-  (sysrpl-font-lock-compile-keywords (rpl-sysrpl-names rpl-sysrpl-default-calculator)))
+  (sysrpl-font-lock-compile-keywords (rpl-edb-all-names rpl-sysrpl-default-calculator)))
 
 (defvar sysrpl-selected-calculator rpl-sysrpl-default-calculator
   "Currently selected calculator model.")
@@ -69,30 +98,33 @@
   "Set the currently selected calculator model to be the 38G."
   (interactive)
   (setq sysrpl-selected-calculator :38G)
-  (setq sysrpl-font-lock-keywords (sysrpl-font-lock-compile-keywords (rpl-sysrpl-names :38G)))
+  (setq sysrpl-font-lock-keywords (sysrpl-font-lock-compile-keywords (rpl-edb-all-names :38G)))
   (sysrpl-mode))
 
 (defun sysrpl-select-39g ()
   "Set the currently selected calculator model to be the 39G."
   (interactive)
   (setq sysrpl-selected-calculator :39G)
-  (setq sysrpl-font-lock-keywords (sysrpl-font-lock-compile-keywords (rpl-sysrpl-names :39G)))
+  (setq sysrpl-font-lock-keywords (sysrpl-font-lock-compile-keywords (rpl-edb-all-names :39G)))
   (sysrpl-mode))
 
 (defun sysrpl-select-48g ()
   "Set the currently selected calculator model to be the 48G."
   (interactive)
   (setq sysrpl-selected-calculator :48G)
-  (setq sysrpl-font-lock-keywords (sysrpl-font-lock-compile-keywords (rpl-sysrpl-names :48G)))
+  (setq sysrpl-font-lock-keywords (sysrpl-font-lock-compile-keywords (rpl-edb-all-names :48G)))
   (sysrpl-mode))
 
 (defun sysrpl-select-49g ()
   "Set the currently selected calculator model to be the 49G."
   (interactive)
   (setq sysrpl-selected-calculator :49G)
-  (setq sysrpl-font-lock-keywords (sysrpl-font-lock-compile-keywords (rpl-sysrpl-names :49G)))
+  (setq sysrpl-font-lock-keywords (sysrpl-font-lock-compile-keywords (rpl-edb-all-names :49G)))
   (sysrpl-mode))
 
+(defun sysrpl-show-stack-effect (name)
+  (message (rpl-edb-get-stack-effect sysrpl-selected-calculator name)))
+
 (defvar sysrpl-mode-map
   (let ((map (make-sparse-keymap))
         (menu-map (make-sparse-keymap)))
@@ -125,4 +157,7 @@
   (setq font-lock-defaults (list 'sysrpl-font-lock-keywords))
   (setq rpl-menu-compile-file-enable nil))
 
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; End of file
+;;
 (provide 'sysrpl-mode)