`
`LSEARCH ( 3C )
`
`NAME
`
`linear search and update
`
`lsearch -
`SYNOPSIS
`#include < stdio.h >
`#include < search.h >
`char *lsearch «char *)key, (char *)base,
`nelp, sizeof(*key), compar)
`unsigned *nelp;
`int (*compar)( );
`char *lfind «char *)key, (char *)base,
`nelp, sizeof(*key), compar)
`unsigned *nelp;
`int (*compar)( );
`DESCRIPTION
`Lsearch is a linear search routine generalized from Knuth (6.1)
`Algorithm S. It returns a pointer into a table indicating where a
`datum may be found. If the datum does not occur, it is added at
`the end of the table. Key points to the datum to be sought in the
`table. Base points to the first element in the table. Nelp points
`to an integer containing the current number of elements in the
`table. The integer is incremented if the datum is added to the
`table. Compar is the name of the comparison function which the
`user must supply (strcmp, for example).
`It is called with two
`arguments that point to the elements being compared. The func(cid:173)
`tion must return zero if the elements are equal and non-zero other(cid:173)
`wise.
`Lfind is the same as Lsearch except that if the datum is not
`found, it is not added to the table. Instead, a NULL pointer is
`returned.
`
`NOTES
`
`The pointers to the key and the element at the base of the table
`should be of type pointer-to-element, and cast to type pointer-to(cid:173)
`character.
`The comparison function need not compare every byte, so arbi(cid:173)
`trary data may be contained in the elements in addition to the
`values being compared.
`Although declared as type pointer-to-character, the value returned
`should be cast into type pointer-to-element.
`EXAMPLE
`This fragment will read in less than TABSIZE strings of length
`less than ELSIZE and store them in a table, eliminating dupli(cid:173)
`cates.
`
`#include <stdio.h>
`#include <search.h>
`#define T ABSIZE 30
`#define ELSIZE 120
`char line[ELSIZE], tab[TABSIZE][ELSIZE],
`*lsearch( );
`
`- 1 -
`
`Veritas Techs. LLC
`Exhibit 1028
`Page 609
`
`
`
`LSEARCH ( 3C )
`
`LSEARCH ( 3C )
`
`unsigned nel = 0;
`int strcmp( );
`
`while (fgets(line, ELSIZE, stdin) != NULL &&
`nel < TABSIZE)
`(void) Isearch(Iine,( char *)tab,&nel,
`ELSIZE, strcmp);
`
`SEE ALSO
`bsearch(3C), hsearch(3C), string(3C), tsearch(3C).
`DIAGNOSTICS
`If the searched for datum is found, both lsearch and lfind return a
`pointer to it. Otherwise, lfind returns NULL and lsearch returns a
`pointer to the newly added element.
`
`BUGS
`
`Undefined results can occur if there is not enough room in the
`table to add a new item.
`
`- 2 -
`
`Veritas Techs. LLC
`Exhibit 1028
`Page 610
`
`
`
`MALLOC(3C)
`
`MALLOC(3C)
`
`NAME
`
`malloc, free, realloc, calloc - main memory allocator
`SYNOPSIS
`char *malloc (size)
`unsigned size;
`void free (ptr)
`char *ptr;
`char *realloc (ptr, size)
`char *ptr;
`unsigned size;
`char *calloc (nelem, elsize)
`unsigned nelem, elsize;
`int mallopt (cmd, value)
`int cmd, value;
`DESCRIPTION
`Malloe and free provide a simple general-purpose memory alloca(cid:173)
`tion package. MaUoe returns a pointer to a block of at least st"ze
`bytes suitably aligned for any use.
`The argument to free is a pointer to a block previously allocated
`by maUoe; after free is performed this space is made available for
`further allocation, but its contents are left undisturbed.
`Undefined results will occur if the space assigned by maltoe is
`overrun or if some random number is handed to free.
`MaUoe allocates the first big enough contiguous reach of free space
`found in a circular search from the last block allocated or freed,
`coalescing adjacent free blocks as it searches. It calls sbrk (see
`brk(2)) to get more memory from the system when there is no
`suitable space already free.
`Realtoe changes the size of the block pointed to by ptr to st"ze
`bytes and returns a pointer to the (possibly moved) block. The
`contents will be unchanged up to the lesser of the new and old
`If no free block of st'ze bytes is available in the storage
`sizes.
`arena, then realtoe will ask maltoe to enlarge the arena by st'ze
`bytes and will then move the data to the new space.
`Realtoe also works if ptr points to a block freed since the last call
`of maltoe, realloe, or eaUoe; thus sequences of free, maltoe and
`realtoe can exploit the search strategy of maUoe to do storage
`compaction.
`Caltoe allocates space for an array of nelem elements of size
`elsize. The space is initialized to zeros.
`Mallopt provides for control over the allocation algorithm. The
`available values for emd are:
`Set maxfast to value. The algorithm allo(cid:173)
`cates all blocks below the size of maxfast
`in large groups and then doles them out
`very quickly. The default value for max(cid:173)
`fast is 24.
`
`- 1 -
`
`Veritas Techs. LLC
`Exhibit 1028
`Page 611
`
`
`
`MALLOC(aC)
`
`MALLOC(3C)
`
`Set numlblks to value. The above men(cid:173)
`tioned
`"large
`groups"
`each
`contain
`numlblks blocks. Numlblks must be greater
`than O. The default value for numlblks is
`100.
`Set grain to value. The sizes of all blocks
`smaller than maxfast are considered to be
`rounded up to
`the nearest multiple of
`grain. Grain must be greater than O. The
`default value of grain
`is
`the smallest
`number of bytes which will allow align(cid:173)
`ment of any data type. Value will be
`rounded up to a multiple of the default
`when grain is set.
`Preserve data in a freed block until the
`next maUoe, reaUoe, or eaUoe. This option
`is provided only for compatibility with the
`old version of maUoe and is not recom(cid:173)
`mended.
`These values are defined in the < malloc.h> header file.
`MaUopt may be called repeatedly, but may not be called after the
`first small block is allocated.
`Each of the allocation routines returns a pointer to space suitably
`aligned (after possible pointer coercion) for storage of any type of
`object.
`SEE ALSO
`brk (2).
`DIAGNOSTICS
`MaUoe, realloe and ealloe return a NULL pointer if there is not
`enough available memory. When realloe returns NULL, the block
`pointed to by ptr is left intact. If mallopt is called after any allo(cid:173)
`cation, or if cmd or value are invalid, non-zero is returned. Other(cid:173)
`wise, it returns zero.
`
`NOTE
`
`Search time increases when many objects have been allocated;
`that is, if a program allocates but never frees, then each successive
`allocation takes longer.
`
`- 2 -
`
`Veritas Techs. LLC
`Exhibit 1028
`Page 612
`
`
`
`MA THERR (3M)
`
`MA THERR (3M)
`
`NAME
`
`matherr - error-handling function
`SYNOPSIS
`#include < math.h >
`int matherr (x)
`struct exception *x;
`DESCRIPTION
`Matherr is invoked by functions in the Math Library when errors
`are detected. Users may define their own procedures for handling
`errors by including a function named matherr in their programs.
`Matherr must be of the form described above. A pointer to the
`exception structure x will be passed to the user-supplied matherr
`function when an error occurs. This structure, which is defined in
`the < math.h > header file, is as follows:
`struct exception {
`int type;
`char *name;
`double argl, arg2, retval;
`
`};
`The element type is an integer describing the type of error that
`has occurred, from the following list of constants (defined in the
`header file):
`DOMAIN
`domain error
`singularity
`SING
`OVERFLOW
`overflow
`UNDERFLOW
`underflow
`total loss of significance
`TLOSS
`partial loss of significance
`PLOSS
`The element name points to a string containing the name of the
`function that had the error. The variables argl and arg2 are the
`arguments to the function that had the error. Retval is a double
`that is returned by the function having the error. If it supplies a
`return value, the user's matherr must return non-zero.
`If the
`default error value is to be returned, the user's matherr must
`return o.
`If matherr is not supplied by the user, the default error-handling
`procedures, described with the math functions involved, will be
`invoked upon error. These procedures are also summarized in the
`table below. In every case, errno is set to non-zero and the pro(cid:173)
`gram continues.
`EXAMPLE
`matherr(x)
`register struct exception *x;
`{
`
`switch (x- > type) {
`case DOMAIN:
`case SING: /* print message and abort */
`fprintf(stderr, "domain error in %s\n", x- >name);
`abort( );
`
`- 1 -
`
`Veritas Techs. LLC
`Exhibit 1028
`Page 613
`
`
`
`MA THERR (3M)
`
`MA THERR ( 3M)
`
`case OVERFLOW:
`if (!strcmp("exp", x- >name)) {
`/* if exp, print message, return the argument */
`fprintf(stderr, "exp of %f\n", x- >arg1);
`x- >retval = x- >arg1;
`} else if (!strcmp("sinh", x- >name)) {
`/* if sinh, set errno, return 0 */
`errno = ERANGE;
`x- >retval = 0;
`
`} else
`
`/* otherwise, return HUGE */
`x- >retval = HUGE;
`
`break;
`case UNDERFLOW:
`return (0); /* execute default procedure */
`case TLOSS:
`case PLOSS:
`/* print message and return 0 */
`fprintf(stderr, "loss of significance in %s\n", x->name);
`x- >retval = 0;
`break;
`
`}
`return (1);
`
`}
`
`BESSEL:
`yO, yl, yn
`(neg. no.)
`
`EXP:
`
`POW:
`(neg.)**(non-
`int.),O**O
`
`LOG:
`log(O):
`log(neg.):
`
`SQRT:
`
`GAMMA:
`
`HYPOT:
`
`SINH, COSH:
`
`SIN, COS:
`
`TAN:
`
`ACOS,ASIN:
`
`DEFAULT ERROR HANDLING PROCEDURES
`TypeB 0/ ErrorB
`SING OVERFLOW UNDERFLOW
`-
`-
`
`DOMAIN
`-
`M, -H
`
`H
`-
`
`0
`-
`
`TLOSS
`-
`-
`
`PLOSS
`*
`-
`
`-
`-
`
`-
`-
`-
`-
`-
`-
`M, *
`*
`-
`
`0
`
`0
`-
`
`-
`-
`-
`-
`-
`-
`-
`-
`-
`
`-
`-
`-
`
`-
`-
`-
`-
`-
`-
`
`M,O
`
`0
`-
`
`-
`-
`M,D
`
`-
`M,-H
`
`M,O
`-
`-
`-
`-
`-
`M,D
`
`-
`-
`-
`
`M,-H
`-
`-
`M,H
`-
`-
`-
`-
`-
`
`H
`
`H
`-
`
`-
`-
`-
`-
`H
`
`H
`-
`H
`-
`
`- 2 -
`
`Veritas Techs. LLC
`Exhibit 1028
`Page 614
`
`
`
`MA THERR (3M)
`
`MA THERR ( 3M)
`
`ABBREVIATIONS
`*
`.Af3 much as possible of the value is returned.
`M Message is printed.
`H
`HUGE is returned.
`-H
`-HUGE is returned.
`o
`0 is returned.
`
`- 3-
`
`Veritas Techs. LLC
`Exhibit 1028
`Page 615
`
`
`
`MEMORY(3C)
`
`MEMORY(3C)
`
`NAME
`
`memccpy, memchr, memcmp, memcpy, memset - memory opera(cid:173)
`tions
`SYNOPSIS
`#include < memory.h >
`char *memccpy (81, 82, c, n)
`char *81, *82;
`int c, n;
`char *memchr (8, c, n)
`char *8;
`int c, n;
`int memcmp (81, 82, n)
`char *81, *82;
`int n;
`char *memcpy (81, 82, n)
`char *81, *82;
`int n;
`char *mem8et (8, c, n)
`char *8;
`int c, n;
`DESCRIPTION
`These functions operate efficiently on memory areas (arrays of
`characters bounded by a count, not terminated by a null charac(cid:173)
`ter). They do not check for the overflow of any receiving memory
`area.
`Memccpy copies characters from memory area 82 into 81, stop(cid:173)
`ping after the first occurrence of character c has been copied, or
`It
`after n characters have been copied, whichever comes first.
`returns a pointer to the character after the copy of c in 81, or a
`NULL pointer if c was not found in the first n characters of 82.
`Memchr returns a pointer to the first occurrence of character c in
`the first n characters of memory area 8, or a NULL pointer if c
`does not occur.
`Memcmp compares its arguments, looking at the first n characters
`only, and returns an integer less than, equal to, or greater than 0,
`according as 81 is lexicographically less than, equal to, or greater
`than 82.
`Memcpy copies n characters from memory area 82 to 81.
`returns 81.
`Mem8et sets the first n characters in memory area 8 to the value
`of character c. It returns 8 .
`
`It
`
`NOTE
`
`BUGS
`
`For user convenience, all these functions are declared in the
`optional < memory.h > header file.
`
`Memcmp uses native character comparison, which IS signed on
`PDP-lls, unsigned on other machines.
`
`- 1 -
`
`Veritas Techs. LLC
`Exhibit 1028
`Page 616
`
`
`
`MEMORY(3C)
`
`MEMORY(3C)
`
`Character movement is performed differently in different imple(cid:173)
`mentations. Thus overlapping moves may yield surprises.
`
`- 2 -
`
`Veritas Techs. LLC
`Exhibit 1028
`Page 617
`
`
`
`MENU(3T)
`
`(AT&T UNIX PC only)
`
`MENU(3T)
`
`NAME
`
`menu - display and accept menus
`SYNOPSIS
`#include <menu.h>
`int menu(menu, op)
`menu_t *menu;
`int op;
`DESCRIPTION
`This routine manipulates a menu as determined by the operation
`code (op). If the op arg is M~EGIN, the menu is initialized and
`If op is M_INPUT, user input is accepted.
`If op is
`displayed.
`M_END, the menu is terminated and removed from the display.
`If op
`is M_DESEL, all currently-selected items are de-selected
`before the menu is processed. These functions may be combined
`many
`ways.
`By
`specifying
`in
`(M_DESEL I M~EGIN I M_INPUT I M_END), the caller creates
`a "pop-up)) menu which is initialized (displayed), used for input,
`then removed. Generally, (M~EGIN I M_INPUT) is used for the
`first call, M_INPUT for each subsequent interaction, and M_END
`when the menu is to be discarded. M_DESEL can be added to
`clear bad choices after an error.
`During the M_INPUT function, the user may point to items with
`the mouse or with the keyboard (arrows, Prev, Next, Beg, Home,
`End). The user may mark entries with the mouse or keyboard
`(Slect, Mark), or may qualify one or more items by typing. The
`Cancl, Clear Line, Back Space, and Return keys perform their
`generic editing functions. For larger menus, the Roll and Page
`keys may be used to scroll through choices which do not fit in the
`prevailing window.
`All other keys, including Enter, are returned to the caller.
`The menu structure has the following form:
`
`typedef struct
`{
`
`char
`char
`char
`char
`char
`char
`char
`char
`char
`int
`track_t
`int
`int
`int
`mitem_t
`mitem_t
`
`*m_Iabel;
`*m_title;
`*m_prompt;
`m_rows;
`m_cols;
`m_iwidth;
`m_iheight;
`m_flags;
`m_Ibuf[M_MAXLINE];
`m_win;
`*m_track;
`m_oldwidth;
`m_oldheight;
`m_selcnt;
`*m_items;
`*m_curi;
`
`1* menu label * /
`1* menu title * /
`1* menu prompt * /
`1* desired rows * /
`1* desired co Is * /
`1* item width * /
`/* item height * /
`1* flags * /
`1* input buffer * /
`/* window pointer * /
`1* menu track list ptr * /
`1* last window width * /
`/* last window height * /
`/* count of # selected * /
`1* pointer to items * /
`1* current item * /
`
`- 1 -
`
`Veritas Techs. LLC
`Exhibit 1028
`Page 618
`
`
`
`MENU (3T)
`
`(AT&T UNIX PC only)
`
`MENU (3T)
`
`mitem_t *m_topi;
`} menu_t;
`
`/* item at top of dpy * /
`
`M_label is displayed in the menu's window label line. If m_label
`is NULL, no label is displayed.
`M_title is a title for the menu. If m_title is NULL, the menu is
`If m_title contains newline charac(cid:173)
`displayed without any title.
`ters, all but the first line of the title are underlined.
`M_prompt (when non-NULL) is an prompt for the menu. All
`prompts are displayed on the system prompt line, generally
`located at the bottom of the display.
`M_rows and m_cols allow the caller to specify the number of
`rows and columns of items. Either or both of these values may be
`zero, in which case menu will try to pick "good" values. It is
`quite common to specify "zero" rows and one column to force out(cid:173)
`put to be vertical. When both m_rows and m_cols are zero,
`menu tries to fit the menu into an appealing rectangle.
`M_iwidth specifies a maximum width for each item. If m_iwidth
`is zero, menu will display as much of the item as possible given
`If m_iwidth is non-zero, items
`the available window real-estate.
`are automatically truncated to that width, regardless of other
`parameters. This is very useful when generating multi-column
`menus where the caller wishes to prevent one long item from dis(cid:173)
`rupting the columnar output. M_IWIDTH IS NOT YET IMPLE(cid:173)
`MENTED.
`M_iheight allows the caller to specify the number of rows per item
`on the display. Newline characters in the item's name cause
`menu to advance to the next row. If m_iheight is zero, one-row
`items are assumed. M_IHEIGHT IS NOT YET IMPLEMENTED.
`M.JI,ags contains the M_SINGLE flag which prohibits the user
`the menu.
`If the
`from selecting more than one item from
`M_SINGLE flag is off, the user may select multiple items from the
`menu. The M_VSEWIN flag, if set, will cause menu to use the
`instead of creating its own.
`window supplied
`in m_win
`If
`M_VSEWIN is set, M_BEGIN operations will re-size the window
`( as necessary) and M_END operations do not delete the window.
`The M_ WINNEW flag causes menu to use the "new" algorithm
`to place the window. Basically, the new algorithm looks for rela(cid:173)
`tively empty screen space to place the window. M_ WINSON
`causes menu to use the "son" algorithm which causes the new
`to slightly overlap
`the current window.
`If neither
`window
`M_ WINNEW nor M_ WINSON is given, the "popup" algorithm is
`used. This causes the new window to appear near the middle of
`the current window, inside it if possible. The M_NOMOVE,
`M_NOHELP, and M_NORESIZE flags, if set, prevent the Move,
`Help and Resize icons, respectively, from being displayed on the
`menu border. The M_ASISTITLE flag, if set, causes the menu
`title to be displayed as supplied by the user, i.e., without center(cid:173)
`mg.
`
`- 2 -
`
`Veritas Techs. LLC
`Exhibit 1028
`Page 619
`
`
`
`MENU(3T)
`
`(AT&T UNIX PC only)
`
`MENU (3T)
`
`M_lbuf is an array of characters which is used to assemble typed
`input. It is always returned to the caller in case it is necessary to
`record keystrokes. In addition, the user may enter keystroke data
`which does not match any items. In this case m_selcnt is set to
`zero on return.
`M_win holds the window identifier associated with this menu. It
`is allocated on an M_BEGIN call, used on subsequent calls, and
`deleted on an M_END call. M_track is a pointer to the mouse(cid:173)
`tracking information required during menu interaction. The space
`for this data is allocated on M_BEGIN and freed on M_END.
`The caller should not use m_track, m_oldwidth, or m_oldheight.
`They may be left un-initialized on call to M_BEGIN. If a value
`must be given (as in a mitem_t initializer), a value of zero should
`be used.
`On return, m_selcnt contains a count of the number of selected
`items.
`M_items points to the array of menu items (see below). M_curi
`points to the current item. The caller should point m_curi to the
`default item. Menu will modify m_curi as the user moves the
`highlighting around in the menu. The list of menu items is ter(cid:173)
`minated by an item whose mCname is NULL. M_topi contains a
`pointer to the item which is at the top of the display. AB the win(cid:173)
`dow scrolls through the menu, m_topi changes to reflect the new
`position of the view. The caller needn't initialize m_topi as menu
`will compute a "good" initial view from the value in m_curi. In
`general, callers will not read the value in m_topi and should never
`write it.
`Each item in the array pointed to by m_items and m_curi has
`the following form:
`typedef struct
`{
`
`char
`char
`int
`} mitem_t;
`
`*mi_name;
`mi_flags;
`mi_val;
`
`1* name of item
`* /
`1* flags
`* /
`1* user-supplied value * /
`
`MCname is the item name, mLjiags contains the M_MARKED
`flag which indicates that this item should be marked (on call)
`and/or was marked (on return) and/or the M_DIMMED flag
`which indicates that this item should be displayed in lower(cid:173)
`intensity. MCval
`is unused by menu and
`is available for
`application-specific data. Often, mCval contains a small positive
`integer identifying the particular choice.
`EXAMPLE
`The following program illustrates a simple single-selection menu:
`#include <tam.h>
`#include <menu.h>
`#include <stdio.h>
`#include <kcodes.h>
`
`- 3-
`
`Veritas Techs. LLC
`Exhibit 1028
`Page 620
`
`
`
`MENU(3T)
`
`(AT&T UNIX PC only)
`
`MENU(3T)
`
`mitem_t cmditems[] =
`{
`
`"Add",
`"Advance",
`"Backspace",
`"Copy",
`"Create",
`"Delete",
`"nllmn"
`-
`----r
`)
`"Examine",
`"Exit",
`"Finish",
`" *Weird",
`a,
`
`0,0,
`a),
`0,2,
`0,3,
`0,4,
`0,5,
`() f)
`..... J ...,. )
`0,7,
`0,8,
`0,9,
`0,10,
`0,0
`
`};
`
`};
`
`menu_t cmdmenu =
`{
`
`"Single",
`"Commands",
`"Pick a command from the list",
`0,1,0,0,
`M_SINGLE,
`{a},
`0,0,0,0,0,
`cmditems,
`cmditems,
`a
`
`mitem_t multitems[ 1 =
`{
`
`" January",
`"February",
`"March",
`"April",
`"May",
`"June",
`"July",
`"August",
`"September",
`"October",
`"November",
`"December",
`"Monday",
`"Tuesday",
`"Wednesday",
`"Thursday",
`"Friday",
`"Saturday",
`"Sunday",
`a,
`
`a),
`0,2,
`0,3,
`0,4,
`0,5,
`0,6,
`0,7,
`0,8,
`0,9,
`0,10,
`0,11,
`0,12,
`0,13,
`0,14,
`0,15,
`0,16,
`0,17,
`0,18,
`0,19,
`0,0
`
`- 4 -
`
`};
`
`Veritas Techs. LLC
`Exhibit 1028
`Page 621
`
`
`
`MENU(3T)
`
`(AT&T UNIX PC only)
`
`MENU (3T)
`
`menu_t multmenu =
`{
`
`"Multiple" ,
`"Many Choices!",
`"Pick multiple commands from the list",
`0,0,0,0,
`M_WINSON,
`{O},
`0,0,0,0,0,
`multitems,
`multitems,
`o
`
`};
`
`mainO
`{
`
`int err;
`int cmdop,multop;
`char *which;
`
`winit();
`keypad( 0,1);
`
`cmdop = M~EGIN 1M_INPUT;
`multop = M_BEGIN 1M_INPUT;
`
`while(l)
`{
`
`which = "cmdmenu";
`err = menu( &cmdmenu, cmdop );
`cmdop &= "'M:_BEGIN;
`if ( err < 0 II err == Close)
`break;
`
`which = "multmenu"·
`err = menu( &multm~nu, multop );
`rilUltop &= -M~EGIN;
`if ( err < 0 II err == Close)
`break;
`
`}
`if ( err < 0 )
`{
`
`fprintf(stderr,"err %d in %s",err,which);
`sleep(S);
`
`}
`wexit(O);
`
`}
`
`- 5 -
`
`Veritas Techs. LLC
`Exhibit 1028
`Page 622
`
`
`
`MENU (3T)
`
`(AT&T UNIX PC only)
`
`MENU (3T)
`
`FILES
`
`/usr /include/menu.h
`/usr /include/kcodes.h
`SEE ALSO
`form(3T), tam(3T).
`DIAGNOSTICS
`Menu returns non-negative keyboard codes (see kcodes.h) when
`keyboard input termina.t.ed t.he menu interaction. Other return
`values signal more serious errors and are defined in menu.h.
`
`- 6 -
`
`Veritas Techs. LLC
`Exhibit 1028
`Page 623
`
`
`
`MESSAGE(3T)
`
`(AT&T UNIX PC only)
`
`MESSAGE ( 3T )
`
`NAME
`
`message - display error and help messages
`SYNOPSIS
`#include <message.h>
`
`int message{mtype, hfile, htitle, format [, arg ] ...
`int mtype;
`char *hfile, *htitle, *format;
`
`)
`
`int exhelp{hfile, htitle)
`char *hfile, *htitle;
`DESCRIPTION
`Message formats the passed message a la prt"ntf and displays the
`message in a window that message creates. The message is
`automatically wrapped to fit within the dimensions of the window,
`and may contain embedded new lines. Message then waits for user
`input and returns the character read to the caller.
`Mtype can have one of the following values:
`MT_HELP
`Displays help message
`MT _ERROR
`Displays error message
`MT_POPUP
`Displays a popup window
`MT_QUIT
`Displays error message with cancel
`option
`MT_CONFIRM Displays confirmation message
`MT_INFO
`Displays informational message
`All message types except MT_POPUP display
`the available
`choices (ENTER, CANCL, or HELP) and beep any other keys.
`The MT_INFO message type takes the first line of the message
`and uses it as the window label.
`When HELP is selected, message executes uahelp, passing it hfile
`and htitle as the help file name and initial help display title. Mes(cid:173)
`sage then waits for uahelp to return. If hfile is NULL, then the
`HELP choice is not offered or accepted.
`Exhelp executes uahelp directly, without going through an inter(cid:173)
`mediate help display. In both cases, if hfile is a full path name
`then it is passed to uahelp as
`is, otherwise the pathname
`jusrjlibjua is assumed.
`EXAMPLES
`To print an error message when a file isn't found:
`
`message(MT_ERROR, "ua.hlp", "System errors",
`"%s not found", name);
`If the user presses the Help key in response to this message, then
`uahelp will display the page on system errors in the user agent
`help file.
`
`- 1 -
`
`Veritas Techs. LLC
`Exhibit 1028
`Page 624
`
`
`
`MESSAGE ( aT )
`
`(AT&T UNIX PC only)
`
`MESSAGE ( aT )
`
`To get confirmation:
`
`message(MT_CONFIRM, NULL, NULL,
`"%s will be overwritten",
`name);
`In this case, if the user presses Help, the key will be declared
`invalid.
`DIAGNOSTICS
`Message returns the character typed by the user, or -1 if error.
`Currently, the only error is Can't create w£ndow, and in this case,
`message will display this error message on the prompt line of the
`current window.
`Exhelp returns -Ion error (argument error, fork failure, or exec
`failure).
`SEE ALSO
`uahelp(l), tam(3T).
`
`- 2 -
`
`Veritas Techs. LLC
`Exhibit 1028
`Page 625
`
`
`
`MKTEMP(3C)
`
`MKTEMP(3C)
`
`NAME
`
`mktemp - make a unique file name
`SYNOPSIS
`char *mktemp (template)
`char *template;
`DESCRIPTION
`Mktemp replaces the contents of the string pointed to by template
`by a unique file name, and returns the address of template. The
`string in template should look like a file name with six trailing Xs;
`mktemp will replace the Xs with a letter and the current process
`ID. The letter will be chosen so that the resulting name does not
`duplicate an existing file.
`SEE ALSO
`getpid(2), tmpfile(3S), tmpnam(3S).
`
`BUGS
`
`It is possible to run out of letters.
`
`- 1 -
`
`Veritas Techs. LLC
`Exhibit 1028
`Page 626
`
`
`
`MONITOR(3C)
`
`MONITOR ( 3C )
`
`NAME
`
`monitor - prepare execution profile
`SYNOPSIS
`void monitor (lowpc, highpc, buffer, bufsize, nfunc)
`int (*lowpc)( ), (*highpc)( );
`short *buffer;
`int bufsize, nfunc;
`DESCRIPTION
`An executable program created by cc -p automatically includes
`calls for monitor with default parameters; monitor needn)t be
`called explicitly except to gain fine control over profiling.
`Monitor is an interface to projil(2). Lowpc and highpc are the
`addresses of two functions; buffer is the address of a (user sup(cid:173)
`plied) array of bUfsize short integers. Monaor arranges to record
`a histogram of periodically sampled values of the program counter,
`and of counts of calls of certain functions, in the buffer. The
`lowest address sampled is that of lowpc and the highest is just
`
`below highpc. Lowpc may not equal ° for this use of monitor. At
`
`most nfunc call counts can be kept; only calls of functions com(cid:173)
`piled with the profiling option -p of cC(l) are recorded. (The C
`Library and Math Library supplied when cc -p is used also have
`call counts recorded.) For the results to be significant, especially
`where there are small, heavily used routines, it is suggested that
`the buffer be no more than a few times smaller than the range of
`locations sampled.
`To profile the entire program, it is sufficient to use
`extern etext;
`
`monitor (( int (* )())2, etext, buf, bufsize, nfunc);
`Etext lies just above all the program text; see end(3C).
`To stop execution monitoring and write the results on the file
`mon.out, use
`monitor ((int (*)O)NULL, 0, 0, 0, 0);
`Prof(l) can then be used to examine the results.
`
`FILES
`
`mon.out
`SEE ALSO
`cC(l), prof(1), profil(2), end(3C).
`
`- 1 -
`
`Veritas Techs. LLC
`Exhibit 1028
`Page 627
`
`
`
`NLIST(3C)
`
`NLIST( 3C)
`
`NAME
`
`nlist - get entries from name list
`SYNOPSIS
`#include < a.out.h >
`int nlist (file-name, nl)
`char *file-name;
`struct nlist *nl[ ];
`DESCRIPTION
`Nlist examines the name list in the executable file whose name is
`pointed to by file-name, and selectively extracts a list of values
`and puts them in the array of nlist structures pointed to by nl.
`The name list nl consists of an array of structures containing
`names of variables, types and values. The list is terminated with
`a null name; that is, a null string is in the name position of the
`structure. Each variable name is looked up in the name list of the
`If the name is found, the type and value of the name are
`file.
`If the name is not found, both
`inserted in the next two fields.
`entries are set to O. See a.out(4) for a discussion of the symbol
`table structure.
`This subroutine is useful for examining the system name list kept
`in the file /unix.
`In this way programs can obtain system
`addresses that are up to date.
`SEE ALSO
`a.out(4).
`DIAGNOSTICS
`All type entries are set to 0 if the file cannot be read or if it
`doesn)t contain a valid name list.
`Ntist returns -1 upon error; otherwise it returns O.
`
`- 1 -
`
`Veritas Techs. LLC
`Exhibit 1028
`Page 628
`
`
`
`PASTE(3T)
`
`(AT&T UNIX PC only)
`
`PASTE(3T)
`
`NAME
`
`paste - paste buffer utilities
`SYNOPSIS
`#include <pbf.h>
`
`FILE *pb_openO
`
`int pb_check(stream)
`FILE *stream;
`int pb_seek(stream)
`FILE *stream;
`int pb_empty(stream)
`FILE * stream;
`char *pb_nameO
`int pb_puts(ptr,stream)
`char *ptr;
`FILE *stream;
`int pb_weof(stream)
`FILE * stream;
`char *pb~ets(ptr, n, stream)
`char *ptr;
`int n;
`FILE *stream;
`int pb~buf(ptr, n, fn, stream)
`char *ptr;
`int n;
`int (*fn) 0;
`FILE *stream;
`char *adf~twrd(sptr, dptr)
`char *sptr, *dptr;
`char *adf~txcd(sptr, dptr)
`char *sptr, *dptr;
`int adf~ttok(ptr, tbl)
`char *ptr;
`struct s_kwtbl *tbl;
`DESCRIPTION
`Pb_open opens the paste buffer file and associates a stream with
`it. Pb_open returns a pointer to the FILE structure associated
`with the stream.
`Pb_check determines if
`the paste buffer file associated with
`stream contains any data, and returns TRUE if the paste buffer
`is not empty, and FALSE otherwise.
`Pb_seek scans the paste buffer file from the beginning for the end
`of file, and then seeks to that displacement. It sets up the paste
`buffer for appending.
`
`- 1 -
`
`Veritas Techs. LLC
`Exhibit 1028
`Page 629
`
`
`
`PASTE(3T)
`
`(AT&T UNIX PC only)
`
`PASTE(3T)
`
`Pb_empty empties the paste buffer file and closes it. It is intended
`to be called atter the paste buffer file has been read.
`Pb_name returns a pointer to a static area containing the name of
`the paste buffer file.
`.
`Pb_puts appends a null terminated text string to the paste buffer
`file in ADF format. It has the same interface as jputs .
`Pb_weoj writes an end of file code to the paste buffer file, and
`closes the file. It is intended to be calied aiter the paste buffer file
`has been written.
`.
`Pb_gets reads the next string from the paste buffer file and con(cid:173)
`verts it to text. It has the same interface as jgets. Pb_gets
`always returns EOF after 511 bytes have been read. To read
`larger blocks of text, pb_gbuj must be used.
`Pb_gbuj reads a paste buffer file entry and converts it to text. It
`puts the results into the buffer passed to it. Pb_gbuj calls the
`passed function to store the buffer at the end of the paste entry,
`or when the buffer becomes full. When this function is called, it is
`passed the buffer address, and the number of bytes in the buffer.
`This function should return a negative value on error.
`If a NULL pointer is passed in place of the function, then
`pb __ gbuj returns a null-terminated string, stored in the passed
`buffer. Note that pb_gbuj can only be called once, and the paste
`buffer file should be marked empty after the call.
`The three functions a df_gtwrd , adf_gtxcd, and adf-gttok are utili(cid:173)
`ties used by pb_gbuj to interpret the ADF format. Applications
`that wish to access the ADF formatted files directly might use
`them.
`adf-gtwrd scans the input string pointed to by sptr and pulls o~t
`the next word. It stores this word (null-terminated) to the buffer
`pointed to by dptr, and returns an updated input pointer.
`Adf-gtxcd pulls out the embedded text code from the input string
`pointed to by sptr, and also returns an updated input pointer.
`This text code is stored null-terminated in the buffer pointed to by
`dptr. Adj_gtxcd should be called when a "\" is encountered in
`the input line in a text field, and sptr should be pointing to the
`character following the (( \."
`Adj_gttok converts a word (a null-terminated string) to a token
`(integer) and returns the token. The conversion is driven by the
`passed keyword table. The keyword table structure is defined in
`the include filephf.h.
`.
`EXAMPLE
`To implement the cut operation:
`paste_file = pb_open 0;
`if (paste_file == NULL)
`message (MT_ERROR, "wp.hlp", "Paste",
`"Unable to open or create paste buffer file");
`
`- 2 -
`
`Veritas Techs. LLC
`Exhibit 1028
`Page 630
`
`
`
`PASTE(3T)
`
`(AT&T UNIX PC only)
`
`PASTE (3T)
`
`else
`{
`chr = Enter;
`if (pb_check (paste_file))
`{
`chr = message (MT_QUIT, "wp.hlp", "Paste",
`"Paste buffer contains an entry - \ do you
`wish to overwrite?");
`}
`if (chr == Enter)
`{
`... 1* Paste file is empty, or is OK to * /
`... /* overwrite, write the paste file using * /
`... 1* fwrite, fprintf, etc.
`}
`fclose (paste_file);
`}
`
`To implement the paste operation:
`paste_file = pb_open 0;
`if (paste_file == NULL)
`message (MT_ERROR, "wp.hlp", "Paste",
`"Unable to open or create paste buffer file");
`
`else
`{
`if (p b_check (paste_file))
`{
`/* Paste file exists and is non empty, * /
`* /
`/* Read the paste file using fread,
`/* fscanf, etc.
`
`}
`else
`message (MT_ERROR, "wp.hlp", "Paste",
`"Paste buffer is empty");
`p b_em pty (paste_file);
`}
`
`SEE ALSO
`adf( 4), message(3T), tam(3T).
`DIAGNOSTICS
`Pb_open returns a NULL pointer on failure. Pb_gets returns a
`NULL pointer at end of file. Pb_puts returns EOF on failure.
`
`- 3 -
`
`Veritas Techs. LLC
`Exhibit 1028
`Page 631
`
`
`
`PERROR(3C)
`
`PERROR(3C)
`
`NAME
`
`perror, errno, sys_errlist, sys_nerr - system error messages
`SYNOPSIS
`void perror (s)
`char *s;
`extern int errno;
`extern char *sys_errlist[ ];
`extern in t sys_nerr;
`DESCRIPTION
`Perror produces a message on the standard error output, describ(cid:173)
`ing the last error encountered during a c