TITLE USERLIBA ver. <87/01/26> * ********************************************************************** * FILE HEADER BLOCK * NIBASC \USERLIBA\ NIBHEX 802E LEX type CON(2) 0 flags=0 NIBHEX 0000 Mn/Hr NIBHEX 000078 Dy/Mo/Yr REL(5) =FILEND * ********************************************************************** * LEX HEADER BLOCK * CON(2) #52 LEX ID, see USERLIB1 for assignment CON(2) #01 Low Token CON(2) #13 High Token CON(5) 0 No link * * Speed Table * NIBHEX 0 Speed table exists CON(3) (TxTbEn)-(TxTbSt) A CON(3) (TxTbEn)-(TxTbSt) B CON(3) (TxTbEn)-(TxTbSt) C CON(3) (TxTbEn)-(TxTbSt) D CON(3) (TxTbEn)-(TxTbSt) E CON(3) (TxTbEn)-(TxTbSt) F CON(3) (TxTbEn)-(TxTbSt) G CON(3) (TxTbEn)-(TxTbSt) H CON(3) (TxEn01)-(TxTbSt) I CON(3) (TxTbEn)-(TxTbSt) J CON(3) (TxEn02)-(TxTbSt) K CON(3) (TxEn05)-(TxTbSt) L CON(3) (TxEn08)-(TxTbSt) M CON(3) (TxTbEn)-(TxTbSt) N CON(3) (TxTbEn)-(TxTbSt) O CON(3) (TxTbEn)-(TxTbSt) P CON(3) (TxTbEn)-(TxTbSt) Q CON(3) (TxEn10)-(TxTbSt) R CON(3) (TxEn14)-(TxTbSt) S CON(3) (TxEn19)-(TxTbSt) T CON(3) (TxTbEn)-(TxTbSt) U CON(3) (TxTbEn)-(TxTbSt) V CON(3) (TxTbEn)-(TxTbSt) W CON(3) (TxTbEn)-(TxTbSt) X CON(3) (TxTbEn)-(TxTbSt) Y CON(3) (TxTbEn)-(TxTbSt) Z NIBHEX 0 Speed table exists * * CON(4) (TxTbSt)+1-(*) Offset to TEXT Table CON(4) 0 No message table REL(5) POLHND Offset to poll handler * ********************************************************************** * * STITLE Main Table * CON(3) (TxEn04)-(TxTbSt) REL(5) KEYW NIBHEX F * CON(3) (TxEn16)-(TxTbSt) REL(5) SCROLL NIBHEX D * CON(3) (TxEn09)-(TxTbSt) REL(5) MSG$ NIBHEX F * CON(3) (TxEn01)-(TxTbSt) REL(5) INLINE NIBHEX D * CON(3) (TxEn02)-(TxTbSt) REL(5) KYNAM$ NIBHEX F * CON(3) (TxEn03)-(TxTbSt) REL(5) KEYNUM NIBHEX F * CON(3) (TxEn18)-(TxTbSt) REL(5) STD$ NIBHEX F * CON(3) (TxEn05)-(TxTbSt) REL(5) LTRIM$ NIBHEX F * CON(3) (TxEn13)-(TxTbSt) REL(5) RTRIM$ NIBHEX F * CON(3) (TxEn19)-(TxTbSt) REL(5) TRIM$ NIBHEX F * CON(3) (TxEn12)-(TxTbSt) REL(5) RPT$ NIBHEX F * CON(3) (TxEn10)-(TxTbSt) REL(5) rev$ NIBHEX F * CON(3) (TxEn07)-(TxTbSt) REL(5) LWRC$ NIBHEX F * CON(3) (TxEn06)-(TxTbSt) REL(5) LWRC$ NIBHEX F * CON(3) (TxEn11)-(TxTbSt) REL(5) ROT$ NIBHEX F * CON(3) (TxEn17)-(TxTbSt) REL(5) SPAN NIBHEX F * CON(3) (TxEn08)-(TxTbSt) REL(5) MEMBER NIBHEX F * CON(3) (TxEn14)-(TxTbSt) REL(5) SBIT$ NIBHEX F * CON(3) (TxEn15)-(TxTbSt) REL(5) SBIT NIBHEX F * ********************************************************************** * STITLE TEXT TABLE * TxTbSt TxEn01 CON(1) (TxEn02)-(*)-4 NIBASC \INLINE\ CON(2) #04 * TxEn02 CON(1) (TxEn03)-(*)-4 NIBASC \KEYNAM$\ CON(2) #05 * TxEn03 CON(1) (TxEn04)-(*)-4 NIBASC \KEYNUM\ CON(2) #06 * TxEn04 CON(1) (TxEn05)-(*)-4 NIBASC \KEYWAIT$\ CON(2) #01 * TxEn05 CON(1) (TxEn06)-(*)-4 NIBASC \LTRIM$\ CON(2) #08 * TxEn06 CON(1) (TxEn07)-(*)-4 NIBASC \LWC$\ CON(2) #0E * TxEn07 CON(1) (TxEn08)-(*)-4 NIBASC \LWRC$\ CON(2) #0D * TxEn08 CON(1) (TxEn09)-(*)-4 NIBASC \MEMBER\ CON(2) #11 * TxEn09 CON(1) (TxEn10)-(*)-4 NIBASC \MSG$\ CON(2) #03 * TxEn10 CON(1) (TxEn11)-(*)-4 NIBASC \REV$\ CON(2) #0C * TxEn11 CON(1) (TxEn12)-(*)-4 NIBASC \ROT$\ CON(2) #0F * TxEn12 CON(1) (TxEn13)-(*)-4 NIBASC \RPT$\ CON(2) #0B * TxEn13 CON(1) (TxEn14)-(*)-4 NIBASC \RTRIM$\ CON(2) #09 * TxEn14 CON(1) (TxEn15)-(*)-4 NIBASC \SBIT$\ CON(2) #12 * TxEn15 CON(1) (TxEn16)-(*)-4 NIBASC \SBIT\ CON(2) #13 * TxEn16 CON(1) (TxEn17)-(*)-4 NIBASC \SCROLL\ CON(2) #02 * TxEn17 CON(1) (TxEn18)-(*)-4 NIBASC \SPAN\ CON(2) #10 * TxEn18 CON(1) (TxEn19)-(*)-4 NIBASC \STD$\ CON(2) #07 * TxEn19 CON(1) (TxTbEn)-(*)-4 NIBASC \TRIM$\ CON(2) #0A * TxTbEn NIBHEX 1FF Text table terminator ********************************************************************** * STITLE POLL HANDLER * POLHND ?B=0 B VER poll? GOYES VER$P Yes GONC CA442 No, go handle the other CUSTUTIL polls VER$P A=R2 Fetch AVMEMS C=R3 Fetch stack pointer D1=C D1=D1- (VER$en)-(VER$st)-2 allow for our reply CD1EX ?A>C A not enough memory? GOYES VER$Pe exit not handled Cy=1 D1=C restore stack pointer R3=C and save for next file VER$st LCASC \ Lib:a\ VER$en DAT1=C (VER$en)-(VER$st)-2 Write our reply VER$Pe RTNSXM exit * ********************************************************************** * * * * now, poll 1C, or pWTKY -- Waiting for key in KEYRD CA442 LCHEX 1C ?B=C B GOYES CA467 * Poll 1B, or pKYDF -- Build key defn in KEYRD LCHEX 1B ?B=C B GOYES CA4A0 * Poll F2, or pERROR -- Error message about to go out. LCHEX F2 ?B#C B GOYES CA461 GOSUB CA82C CA461 P= 1 P=P-1 CA465 RTNSXM CA467 GOSUB CA812 GONC CA465 A=DAT1 1 ?A#0 P GOYES CA47A GONC CA465 CA47A A=0 A DAT1=A 1 C=RSTK R3=C C=D A GOSUB CA81E LCHEX 4E GOSUB dspchc C=R3 RSTK=C C=R0 D=C A GONC CA465 CA4A0 GOSUB CA812 GONC CA465 C=R0 GOSBVL CSRW5 RSTK=C D1=D1+ 3 CD1EX D0=C R3=C C=C+A A D1=C D1=D1- 3 C=RSTK B=0 A CA4CB B=B+1 A D1=D1- 2 CD1EX A=R3 ?C SCRLLd DECOMP GOVLNG FIXDC REL(5) DECOMP REL(5) PARSE INLINE GOSUB CA7CC GOSUB CAB2C GOSBVL POP1S C=0 A LCHEX 43C ?CC A GOYES CA5A4 CD1EX CR1EX D1=C GOSBVL gtkycd A=B A D0=D0- 2 DAT0=A B GONC CA554 CA5A4 LCHEX 0B CA5A8 GOVLNG MFERR CA5AF D1=D1- 2 CA5B2 A=DAT1 B CD1EX D1=C ?D<=C A RTNYES A C=RSTK ?B#0 A GOYES CA57F C=R3 AD0EX R2=A C=C-A A ?C=0 A GOYES CA5A4 R1=C C=C+1 A C=C+1 A C=C+1 A B=C A LC(3) bINLIN GOSBVL I/OALL GONC CA5A8 D1=D1+ 3 A=R2 D0=A C=R1 GOSBVL MOVEU3 C=R3 D1=C ST=0 6 ST=1 7 GOSUB CA7E0 R3=A ST=0 7 GOSUB CA7E0 R2=A GOSBVL REVPOP R1=A CD1EX GOSUB CA81E LCHEX 3E GOSUB dspchc LCHEX 20 GOSUB dspchc LCHEX 08 GOSUB dspchc C=0 W A=R1 C=A A A=R0 CSRB CA658 C=C-1 A GOC CA683 RSTK=C D1=A C=DAT1 B GOSUB dspchc C=RSTK A=R0 A=A+1 A A=A+1 A R0=A GONC CA658 CA678 GOSUB CA82C GOVLNG INPOFF CA683 GOSUB CA812 C=0 A ?ST=0 6 GOYES CA690 C=C+1 A CA690 DAT1=C X C=R3 GOSBVL CURSRT A=R2 LCHEX 5F B=C A D0=(5) WINDLN C=DAT0 B B=B-C B ?A<=B B GOYES CA6BB A=B A CA6BB D0=D0+ 9 D0 @ FIRSTC DAT0=A B D0=D0- 4 D0 @ (DSPSTA)+3 C=DAT0 B CSTEX ST=0 1 CSTEX DAT0=C B GOSBVL BLDDSP CA6D8 GOSBVL CHEDIT LCHEX 18 ?C=A B GOYES CA678 GOSBVL ATNCLR GOSUB CA812 A=0 A GOSUB CA849 GONC CA6FF A=A+1 XS CA6FF C=A A D0=(5) CURSOR C=DAT0 B CSL A CSL A D0=D0- 2 C=DAT0 B RSTK=C C=0 A D1=D1+ 1 C=DAT1 B ?C#0 B GOYES CA73A GOSUB CA849 GONC CA6D8 GOSUB CA812 LCHEX 1 DAT1=C 1 GOTO CA6D8 CA73A RSTK=C GOSBVL FINLIN GOSUB CA82C GOSUB CAB33 GOSUB CA7AD GOSUB CA838 C=RSTK A=C A GOSUB CA7D5 GOSUB CAB07 GOSUB CA7AD GOSUB CA838 C=RSTK B=C A RSTK=C BSR A BSR A A=B A D=0 S ?A=0 XS GOYES CA781 D=D-1 S A=0 XS CA781 GOSUB CA7D3 C=D S A=C S GOSUB CAB07 GOSUB CA7AD GOSUB CA838 C=RSTK A=0 A A=C B GOSUB CA7D3 GOSUB CAB07 nxtstm GOVLNG NXTSTM CA7AD A=DAT0 B LCHEX F1 ?C#A B GOYES nxtstm D0=D0+ 2 CD0EX D0=C D1=(5) S-R1-2 DAT1=C A CA7CC GOVLNG EXPEX- CA7D3 A=A+1 A CA7D5 GOSBVL HDFLT SETHEX RTN CA7E0 GOSBVL ARGSTA ?ST=0 7 GOYES CA7F7 ?A=0 S GOYES CA7F7 ST=1 6 A=0 S CA7F7 D1=D1+ 16 GOSUB fltdh A=A-1 A GOC CA80E C=0 A LCHEX 5F ?C>=A A RTNYES CA80E GOTO CA5A4 CA812 LCHEX 80A GOVLNG I/OFND CA81E R0=C LCHEX 1B dspchc GOVLNG DSPCHC CA82C LCHEX 80A GOVLNG I/ODAL CA838 C=B A GOSUB pop1r SETHEX B=C A GOVLNG DEST CA849 D0=(5) #2F478 D0 @ (DSPSTA)+3 C=DAT0 B CSTEX ?ST=1 7 GOYES CA85A CA85A CSTEX RTN CA85E GOSBVL NUMCK CA865 LCHEX F1 ?C=A B RTNYES CA86E GOVLNG SYNTXe PARSE GOSBVL STRGCK GOSUB CA865 GOSUB CA85E GOSUB CA85E GOSBVL STRGCK GOSUB CA8A8 GONC CA86E GOSUB CA8A8 GONC CA8A1 GOSUB CA8A8 CA8A1 GOVLNG RESPTR CA8A8 GOSBVL COMCK+ RTNNC CD1EX D1=C R2=C GOSBVL EXPPAR GOC CA8D7 ?ST=1 0 GOYES CA8D7 ?XM=0 GOYES CA8D2 GONC CA8D7 (B.E.T.) CA8D2 ?ST=1 3 RTNYES CA8D7 C=R2 D1=C ST=1 4 GOVLNG IVVARe * * * * disassembly for KEYNUM in CUSTUTIL * NIBHEX 411 KEYNUM GOSBVL SAVD1 D1=C ST=1 10 GOSBVL GTKYC+ GOSBVL RSTD1 D1=D1+ 2 A=DAT1 A D1=D1- 2 CD1EX A=C+A A D1=A A=B A GOSUB CA7D5 DAT1=A W expr GOVLNG EXPR * start of KEYNAM$ EXECUTION CODE * * entry for KEYNAM$ * NIBHEX 811 KYNAM$ GOSBVL ARGSTA D1=D1+ 16 GOSUB fltdh C=0 A LCHEX A8 ?C>=A A GOYES CA957 GOTO CA5A4 CA947 C=0 A GOSBVL STRHDR D1=D1- 16 GOTO expr CA957 ?A=0 A GOYES CA947 GOSUB CAB2C GOSBVL KEYNAM R0=A C=0 A CPEX 0 RSTK=C P= 0 C=C+1 A GOSBVL STRHDR C=RSTK P=C 0 A=R0 DAT1=A WP D1=D1- 16 GOSBVL REV$ GOSUB CAB33 GOTO expr NIBHEX 811 MSG$ GOSUB pop1r GOSUBL fltdh GONC MSG$07 ?XM=0 GOYES MSG$15 MSG$07 A=0 A MSG$09 R0=A SETHEX D1=D1+ 16 GOSBVL =R3=D10 GOSBVL =FPOLL CON(2) =pTRANS GOSBVL =D0=AVS C=R0 GOSBVL TBMSG$ GOVLNG =ERRM$f MSG$15 GOSBVL =HEXDEC LCHEX #00256 ?C<=A X GOYES MSG$07 R0=A ASR W ASR A ASR A ?C<=A A GOYES MSG$07 GOSBVL A-MULT C=R0 C=0 M A=C+A A GOSBVL DECHEX GOC MSG$09 B.E.T. SCRLLp GOVLNG FIXP REL(5) SCRLLd * REL(5) SCRLLp * * * entry for SCROLL follows. Since SCROLL is a statement * the previous 10 nibbles are in fact offsets to the * parse and decompile routines... SCROLL * GOSBVL mgosub CON(5) EXPEXC GOSBVL =D1=AVE A=DAT1 A GOSUBL pophex A=A-1 A GONC SCRL10 A=0 A SCRL10 B=0 A B=A B D0=(5) WINDLN A=DAT0 B C=0 A LCHEX 5F C=C-A B ?B>C B GOYES SCRL20 C=B A SCRL20 A=C B SCRL30 LC(5) =DSPBFS C=C+A A C=C+A A D0=C C=DAT0 B ?C#0 B GOYES SCRL40 A=A-1 A GONC SCRL30 A=0 A SCRL40 D0=(4) FIRSTC DAT0=A B D0=D0- 4 C=DAT0 A CSTEX BitsOk EQU 1 ST=0 BitsOk CSTEX DAT0=C A GOSBVL =SCRLLR GOTO nxtstm pop1r GOVLNG POP1R pophex GOSUB pop1r D1=D1+ 16 fltdh GOSBVL FLTDH RTNC GOTO CA5A4 * * KEYWAIT$ ENTRY FOLLOWS NIBHEX 00 * FUNCTION WITHOUT PARMS KEYW CD0EX R0=C CD1EX R1=C CAADF GOSBVL SLEEP GOC CAAFC C=R1 D1=C C=R0 D0=C GOVLNG KEY$ CAAFC GOSBVL CKSREQ GOTO CAADF CAB07 GOSBVL D1FSTK D1=D1- 16 CD1EX D1=(5) AVMEME DAT1=C A D1=C DAT1=A W GOVLNG STORE CAB2C GOVLNG SAVD0 CAB33 GOVLNG RSTD0 ************************************************** * CUSTUTIL EQUates FIXDC EQU #05493 FIXP EQU #02A6E EXPEXC EQU #0F186 POP1S EQU #0BD38 gtkycd EQU #08E9A MFERR EQU #09393 I/OALL EQU #1197D MOVEU3 EQU #1B177 REVPOP EQU #0BD31 INPOFF EQU #18B49 CURSRT EQU #096C1 EXPPAR EQU #03FD9 WINDLN EQU #2F473 BLDDSP EQU #01898 CHEDIT EQU #14C99 ATNCLR EQU #00510 CURSOR EQU #2F47E FINLIN EQU #18A3A NXTSTM EQU #08A48 S-R1-2 EQU #2F88B EXPEX- EQU #0F178 HDFLT EQU #1B31B ARGSTA EQU #0E90C I/OFND EQU #118BA DSPCHC EQU #01C3C I/ODAL EQU #11A41 DEST EQU #0F7B0 DSPSTA EQU #2F475 NUMCK EQU #0369D SYNTXe EQU #02E2B STRGCK EQU #036BA RESPTR EQU #03172 COMCK+ EQU #032AE IVVARe EQU #02E66 POP1R EQU #0E8FD FLTDH EQU #1B223 D1FSTK EQU #1955D AVMEME EQU #2F599 STORE EQU #0F5F8 SAVD0 EQU #1C587 this is apparently now supported RSTD0 EQU #06832 this also seems supported =R3=D10 EQU #03526 =FPOLL EQU #1250A =pTRANS EQU #EF =D0=AVS EQU #09B2C TBMSG$ EQU #099AB =ERRM$f EQU #09806 =HEXDEC EQU #0ECAF A-MULT EQU #1B349 DECHEX EQU #1B2D2 mgosub EQU #1AF01 =D1=AVE EQU #18651 =DSPBFS EQU #2F480 FIRSTC EQU #2F47C =SCRLLR EQU #0212E DEFADR EQU #2F967 key definition info, 8 nibs SAVD1 EQU #1C578 save D1 in F-R0-1. Apparently now supported RSTD1 EQU #1C596 restore D1 from F-R0-1. Apparently now supported GTKYC+ EQU #08D9B Get keycode EXPR EQU #0F23C expression execution reentry bINLIN EQU #80A INLINE statement buffer CSRW5 EQU #0ED2C STRHDR EQU #0F09A string header KEYNAM EQU #1AC04 returns keyname from keycode REV$ EQU #1B38E SLEEP EQU #006C2 KEY$ EQU #1ACA8 CKSREQ EQU #00721 * * * STD$ Extracted from DATALEX (Data managment pack) * All other string functions in this file extracted from HP User Library * STRINGLX file. Extracted by Michael Markov with the intent to eventually * combine CUSTUTIL, STRINGLX and the STD$ keyword into a single file with * a speed table. Disassembly of CUSTUTIL not finished... ********************************************************************** ***************************** * * Extracted from DATALEX 1/13/1987 NIBHEX 811 STD$ C=0 A LCHEX #52 B=C A CD0EX D0=(5) #2F594 A=DAT0 A D0=(4) #F6DC C=DAT0 S R3=C CD1EX D1=C A=A+B A ?CC B GOYES C9F2E ?D=A A GOYES CA0D2 CA0CB GOVLNG #0944D CA0D2 A=R1 A=A-1 A R1=A GOC CA0ED C=R3 AD1EX GOSBVL #1B0EE GONC CA0D2 CA0ED A=R3 CD1EX D1=C A=A-C A B=A A GOTO C9EC9 * CA0FE ST=0 2 * CA101 P= 7 * END OF RPT$ NIBHEX 8422 ROT$ GOSUB CA2EC GOSUB CA2BE GOC CA11C GOSUB CA2CC ST=1 1 GOC CA125 ?XM=0 GOYES CA120 CA11C GOTO C9F8A CA120 ST=0 1 A=-A A CA125 A=A+A A GOC CA11C R1=A A=0 W GOSUB CA2D6 R2=A ?A=0 A GOYES CA17B C=R1 CA13F ?C<=A A GOYES CA14C C=C-A A R1=C GONC CA13F CA14C ?ST=1 1 GOYES CA155 GOSUB CA2FB CA155 A=R1 GOSUB CA2FB A=R2 GOSUB CA2FB A=R2 C=R1 A=A-C A GOSUB CA2FB ?ST=1 1 GOYES CA17B A=R2 GOSUB CA2FB CA17B A=R2 B=A A GOTO C9EC9 * ?P# 8 * CA187 GOYES CA1AB * CA189 GOC CA1E2 * end of ROT$ * SBIT$ ENTRY POINT NIBHEX 888424 SBIT$ ST=1 0 CA18D P=C 15 C=0 W C=C-1 W R1=C ?P= 2 GOYES CA203 ?P= 3 GOYES CA1D3 GOSUB CA2BE GOC CA20A CA1AB GOSUB CA2CC GONC CA20A ASRC ?A#0 A GOYES CA20A ?A=0 S GOYES CA1CA A=A-1 S ?A#0 S GOYES CA20A A=A+1 S CA1CA C=R1 C=A S R1=C CA1D3 GOSUB CA2BE GOC CA20A GOSUB CA2CC GONC CA20A ASRC ?A#0 A GOYES CA20A A=A+A S GOC CA20A ASRB C=A S P=C 15 C=R1 C=P 5 R1=C CA203 GOSUB CA2BE GONC CA20E CA20A GOTO C9F8A CA20E GOSUB CA2CC GONC CA20A C=R1 C=A A A=0 W GOSUB CA2D6 R0=A ?C=0 A GOYES CA20A C=C+C A GOC CA20A A=A-C A GOC CA20A CD1EX D1=C A=C+A A AD1EX C=DAT1 B D=0 A D=D+1 A P= 5 CA247 C=C-1 P GOC CA259 D=D+D B GONC CA247 C=-C-1 B GONC CA2A5 CA259 ?ST=1 0 GOYES CA281 D1=A A=R0 CD1EX C=C+A A CD1EX A=0 W C=D&C A ?C=0 B GOYES CA27D P= 14 A=A+1 P CA27D GOTO C9EDD CA281 ?C=0 S GOYES CA299 C=C+1 S GONC CA2A1 B=C A C=D&C A BCEX A ?B=0 B GOYES CA2A1 CA299 D=-D-1 A C=D&C A D=0 A CA2A1 C=D!C A CA2A5 DAT1=C B D1=A A=R0 GOTO C9ED2 * CA2B2 ?P# 4 * CA2B5 GOYES CA2E8 ****************************** * SBIT ENTRY NIBHEX 88433 SBIT ST=0 0 GOTO CA18D CA2BE GOVLNG #0BD8D CA2C5 GOVLNG #1B31B CA2CC D1=D1+ 16 GOVLNG #1B223 CA2D6 GOVLNG #0BD38 CA2DD D0=(5) #2F8BB A=DAT0 A D0=A RTN CA2EC AD0EX D0=(5) #2F8BB DAT0=A A RTN CA2FB B=0 W B=A A SB=0 BSRB BSRB CD1EX C=B+C A C=B+C A D1=C D0=C ?SB=0 GOYES CA330 GONC CA32D CA31E D1=D1- 2 A=DAT0 B C=DAT1 B DAT1=A B DAT0=C B CA32D D0=D0+ 2 CA330 B=B-1 A GONC CA31E RTNCC FILEND END