Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Undocumented (mostly) user exits

184 views
Skip to first unread message

Mark Brown

unread,
Jul 9, 2002, 5:22:41 AM7/9/02
to

Basic syntax something = xCONV(data,"U$userexit")

xCONV is either ICONV or OCONV depending on which direction things are
moving.

WARNING: While these all work on Unix/Linux/Aix/AP Pro, manyof these work on
NT but not all. Syntax supplied where I know it. They are mostly
undocumented because they are really not all that useful in the day-to-day
dataprocessing world. But, sometimes they do come in handy; that's why
they're there. Because someone at Pick, either on his own (as with some of
mine) or by suggestion, added them to the system for some project we were
doing at the time. Many of them are just old user exits revisited.

U3 tclread ( stmt = iconv('','u3') )
U5 cancel typeahead buffer ( x = oconv('','u5') )
U9 logon a user (same as old u9116) ( x =
oconv(port:',':user:',':password:',':acct:',':acctpsw,'u9') )
UA logoff user (same as old uA116) ( x = oconv(port,'ua') )
UB WHO (same as old u50bb)
UE get account (acct = oconv(portno,'U$UE')
U1A get tape block size (in hex) ( blksize =
xtd(iconv('','u1A')) )
U1C get number of attributes read with MATREAD ( dim xx(100);
matread xx from 'id'; lastattr = iconv('','u1c') )
U1E returns the checksum of a string ( strng = "abcdef"; print
strng, oconv(strng,'u1e') )

U21 converts upper case to lower case
U22 converts upper case to lower ( a = "abcdef"; print
a,oconv(a,'u22') )

U27 upper cases Basic keywords (requires items in errmsg file for
each keyword *keyword is ID, KEYWORD is attr 1)
U33 convert decimal to Roman numberals
U3F downloads fonts to laser printer

U47 disk poke
x = iconv(fid:@am:offset:@am:"FF",'u47') will insert
a segment mark fid and offset
x = oconv(fid:@am:offset:@am:"FF",'u47') will insert
the string FF at fid & offset

U48 disk peek ; returns 2 attributes; attr1 = 'edited ascii';
attr2 = "ascii hex" 2 chars per byte
x = oconv(fid:@am:offset:@am:length,'u48') will read
length bytes from fid & offset

U4A write links ( x = oconv( fid:',0,0,0,0', 'u4a') will
clear the links for FID (same as debugger) )

U5E clear printer header/footer buffer

U83 set a group lock ( x = oconv(groupfid,'u83') sets a
k )
U84 clears a group from the group lock table ( x =
oconv(groupfid,'u84') clears the lock set above )

U92 Read links from a fid; returns 4 attrs: # contiguous bk link; bk
lnk; fwd lnk; #contig fwd)

U9D data encryption; iconv > encrypt; oconv>decrypt
seed = 'mark'
data = 'now is the time for all good men'
xx = iconv(seed:@am:data,'u9d')
print data, xx, oconv(seed:@am:xx,'u9d')

U9E scan and replace (like editor R cmd)
string = "now is the time for all good men"
x = oconv('u':@am:'t':@am:"T":@am:string,'u9e')
print string, x gives now is the time for all good
men now is The Time for all good men


--
-------------------------------
Mark Brown
President/CEO
Computer Mgmt & Resource Consultants
714/537-4437
484/716-6154 (Cell)
413/487-7925 (Fax)

Illegitimis non carborundum.

Steve Alexander

unread,
Jul 9, 2002, 7:59:50 PM7/9/02
to
Thanks for the posting, Mark. Here's a list of user exits I compiled
long ago. Many of them stil work. -Steve


User Exits

Warning:Use at your own risk. These are not documented (for the most
part) and they are totally unsupported. User exits are also subject to
change without notice.

Format of a user exit:

Example: U201E
U = user exit
Left most digit X'2 indicates entry point into the frame
Right most digits X'01E indicates the frame number

Access: insert on line 7 or 8 of dictionary item

U201E Return the number of lines in an item

U1070 Return the check sum for the current item

U2070 Return the PCB number in hex

U5070 Convert strings to the form aaa-000 (ED = ED-000) 3-letter max

U6070 Input up to 100 characters with a leading CR (carriage rtn) The
prompt character (:) is used. The resultant input will display under
the column specified by the user exit.

U7070 Input up to 100 characters with no leading CR. The resultant
display is wierd since no CR was used. Just try it.

UA070 Return specified value of multi-valued set. The value is
obtained from the Access sentence. eg LIST file attr "value"

UC070;n Returns the specified value (n) from a multi-valued set. (eg.
UC070;3 would return the 3rd multi-value).

Basic:

U3060 Encryption
A='FRED' ; A = OCONV(A,'U3060') A will now be equal to 8F7D5A29
Note: There is no user exit to do the inverse.

U3070 Returns the PCB for the current line.
A = OCONV('','U3070') A would equal 02C0 or 1 greater than the number
of ABS frames for line 0

UF070 Returns the number of 'physical' serial ports.
A = OCONV('','UF070') A will equal Hex number of ports

U1072 Returns a sorted array. Each element must be separated by
attribute marks.
EQU AM TO CHAR(254)
A = 'ABCD' : AM : 'ZXY' : AM ; 'HIJK' : AM : 1234 : AM : 789 A =
OCONV(A,'U1072") A will now be equal to:
1234 (AM) 789 (AM) ABCD (AM) HIJK (AM) ZXY

U0079 Returns the PIB status, and Return stack information
A = OCONV('02C0','U0079') where 02C0 is port 0 or 1 greater than the
number of ABS frames line 0

U3079 Return the PCB fid in hex if ICONV or returns line # if OCONV.
A = ICONV(0,'U3079') A will equal 02C0 or 1 greater than the number of
ABS frames for line 0
A = OCONV('02C0','U3079') A will equal 00 or *nn if the PCB requested
is yourself.

U307A Will cause the process to SLEEP until the specified time
A = OCONV('19:00',U307A') will sleep until 7:00 pm
A is a dummy variable

U407A Will cause the process to sleep for a specific number of seconds
A = OCONV(6,'U407A') the process will sleep 6 seconds
A is a dummy variable

UB0BA Peek into memory
A = ''
A<1> = '0000' this is the segment of memory.
A<2> = '09E6' this is the offset into the segment.
A<3> = '00' dummy
DATUM = OCONV(A,'UB0BA')<3> DATUM will equal the datum stored at
memory location 0000:09E6 This is the location where we store whether
overlapping I/O is active Bit 1. If only overlapping I/O then DATUM
would equal 01. If not, 00.

UC0BA Poke into memory
A = ''
A<1> = '0000' this is the segment of memory.
A<2> = '09E6' this is the offset into the segment.
A<3> = X'nn' this is the data you want to write into memory.

WARNING !!!!!
If you plan to modify a memory location then be sure you READ and
display it. This location, as with most, must have the data OR'd or
AND'd. This location contains, Post/Wait, PS/2, Extended Memory, SCT
recognition bits. Modify it the wrong way and the machine in all
likelyhood will be 'HISTORY' and will have to be rebooted possibly
creating GFEs.

DATUM = OCONV(A,'UB0BA')<3> DATUM is now the dummy variable. The
memory location 0000:09E6 will now contain the data in A<3>.

U50BB Returns the Port # and Account name
A = OCONV('','U50BB) A would be equal to 0 SYSPROG if you were on Port
0 and on the account SYSPROG.

U60BB Returns the Account name
A = OCONV('','U60BB') A would be equal to SYSPROG if you were on the
account SYSPROG

U9116 LOGON a specified port.
A = OCONV('6,SYSPROG','U9116') would logon port 6 to SYSPROG
A is a dummy variable.

UA116 LOGOFF a specified port.
A = OCONV(6,'UA116') would logoff port 6

U2117 Returns information about the process running as a dynamic array
variable. If the process is not logged on then attributes 1 & 2 are
empty.
A = OCONV(0,'U2117')
A<1> = PCB in Hex and PIB status
A<2> = Return stack separated by Value Marks
A<3> = 0 if the last process
= 2 if current process
= 1 otherwise

U4117 Returns the PCB in hex for the current line
A = OCONV('','U4117') A would equal X'02C0 or 1 greater than the
number of ABS frames for line 0

U5117 Returns the PCB in hex for line 0
A = OCONV('',U5117') returns 02C0 or 1 greater than the number of ABS
frames

U313C Returns the floppy drive and density if attached.
A = ICONV('','U313C') A will be equal to density : AM : drive
ie.A<1> = 2
A<2> = A

Possible values for density are: Drives are:
1 - 360k media A or B
2 - 1.2m media
3 - 720k media
4 - 1.44m media

U21A3 Will OPEN a file on an ICONV, and will read the next attribute
with an OCONV. If the OPEN was successful the value 1 is returned else
the value 0 is returned.

A = ICONV('BP FDISK','U213A')
Y = OCONV('','U213A') Y will be the next attribute

Proc:

U0032 Will cause the process to LOGOFF

UD070 Will return into the active input buffer the account name
(ie.001 PQ
002 UD070
003 D0 will display the account you are logged on to.

U0193 Causes all subsequent output to go to the printer

U3193 Resets output to the terminal
(ie.001 PQ
002 U0193
003 HLIST MD
004 P All output goes to the printer
005 U3193
006 HLIST MD
007 P All output will now go to the terminal

On Tue, 09 Jul 2002 09:22:41 GMT, "Mark Brown" <drw...@flash.net>
wrote:

Bill H

unread,
Jul 12, 2002, 9:09:17 PM7/12/02
to
Mark:

For those who have the reference manual loaded they could do the following:

::SSELECT D3.DOC = "ue.]"
[4041] 138 items selected.
>>LIST D3.DOC A3 (W

This assumes there is a "Q" pointer into the reference documentation file
called (D3.DOC). The (W option scrolls the output through a scrolling
program with update-processor keystrokes (hey, what can I say). Anyway a
page of output looks like:

"list results"
Main: F)ile S)earch M)ove W)indow H)elp Q)uit
d3.doc........................
a3..............................................

ue.$pl.mon.data returns monitor data requested by vendors
ue.$uex.get.buf Get a block of consecutive memory.
ue.$uex.rel.buf Release a consecutive block of memory.
ue.0003 Returns the TCL command invoking the
FlashBASIC
program.
ue.0004 Returns term type in dynamic array format.
ue.0005 Clears the type-ahead buffer
ue.000e Gets the name of the currently logged-to
account
.
ue.0010 Creates a phantom process
ue.0011 Gets the port number of the scheduler
process.
ue.001c Gets the number of attributes after a
"matread".
ue.001f Returns the last "shutdown" status.
ue.0032 Logs off the current process.
ue.0033 Converts a decimal number into a roman
numeral.
ue.0039 Performs a disk read (PC BIOS "INT 13" call).
ue.005b Clears the internal Basic heading and footing
so
that subsequent heading and footing
statements
will display properly at the top of the next
pag
e.

Bill


"Mark Brown" <drw...@flash.net> wrote in message
news:BXxW8.285$qX4.19...@newssvr16.news.prodigy.com...


>
> Basic syntax something = xCONV(data,"U$userexit")
>
> xCONV is either ICONV or OCONV depending on which direction things are
> moving.
>
> WARNING: While these all work on Unix/Linux/Aix/AP Pro, manyof these work
on
> NT but not all. Syntax supplied where I know it. They are mostly
> undocumented because they are really not all that useful in the day-to-day
> dataprocessing world. But, sometimes they do come in handy; that's why
> they're there. Because someone at Pick, either on his own (as with some
of
> mine) or by suggestion, added them to the system for some project we were
> doing at the time. Many of them are just old user exits revisited.
>
> U3 tclread ( stmt = iconv('','u3') )
> U5 cancel typeahead buffer ( x = oconv('','u5') )
> U9 logon a user (same as old u9116) ( x =
> oconv(port:',':user:',':password:',':acct:',':acctpsw,'u9') )
> UA logoff user (same as old uA116) ( x =

0 new messages