extern int                    TLappend(/* ??? */);
extern int                    TLassign(/* ??? */);
extern int                    TLclose(/* ??? */);
extern int                    TLdelete(/* ??? */);
extern int                    TLfreeentry(/* ??? */);
extern ENTRY                  TLgetentry(/* ??? */);
extern unsigned char *        TLgetfield(/* ??? */);
extern int                    TLopen(/* ??? */);
extern int                    TLread(/* ??? */);
extern int                    TLsearch1(/* ??? */);
extern int                    TLsubst(/* ??? */);
extern int                    TLsync(/* ??? */);
extern int                    TLwrite(/* ??? */);
extern int                    __acancel(int, const long int *, int);
extern int                    __aread(int, int, char *, uint, ecb_t *);
extern void                   __assert(const char *, const char *, int);
extern int                    __asyncio(int, aioop_t *, int);
extern int                    __awrite(int, int, char *, uint, ecb_t *);
extern int                    __evcntl(evver_t, evcntlcmds_t, long int, long int);
extern int                    __evexit(evver_t, idtype_t, id_t, const ecb_t *);
extern int                    __evexitset(evver_t, const procset_t *, hostid_t, const ecb_t *);
extern int                    __evpoll(evver_t, evpollcmds_t, event_t *, int, const hrtime_t *);
extern int                    __evpollmore(evver_t, event_t *, int);
extern int                    __evpost(evver_t, event_t *, int, int);
extern int                    __evqcntl(evver_t, int, evqcntlcmds_t, long int);
extern int                    __evsig(evver_t, const sigset_t *, const ecb_t *, evsiginfo_t *, int);
extern int                    __evtrap(evver_t, evpollcmds_t, event_t *, int, long int, void (*) (event_t *, int, long int, evcontext_t *), const evta_t *);
extern int                    __evtrapcancel(evver_t, long int *, int);
extern int                    __filbuf(FILE *);
extern int                    __flsbuf(int, FILE *);
extern major_t                __major(int, dev_t);
extern dev_t                  __makedev(int, major_t, minor_t);
extern minor_t                __minor(int, dev_t);
extern long int               __priocntl(/* ??? */);
extern long int               __priocntlset(/* ??? */);
extern void                   _exit(int);
extern int                    _filbuf(FILE *);
extern int                    _flsbuf(unsigned int, FILE *);
extern int                    _fxstat(int, int, struct stat *);
extern u_long                 _getlong(/* ??? */);
extern u_short                _getshort(/* ??? */);
extern int                    _getsyx(int *, int *);
extern int                    _longjmp(jmp_buf, int);
extern int                    _lxstat(int, const char *, struct stat *);
extern int                    _meta(int);
extern struct nd_hostservlist _netdir_getbyaddr(struct netconfig *, struct netbuf *);
extern struct nd_addrlist *   _netdir_getbyname(struct netconfig *, struct nd_hostserv *);
extern int                    _overlay(WINDOW *, WINDOW *, int);
extern int                    _ring(int);
extern int                    _rpc_dtbsize(/* ??? */);
extern int                    _rpc_endconf(/* ??? */);
extern u_int                  _rpc_get_a_size(/* ??? */);
extern u_int                  _rpc_get_t_size(/* ??? */);
extern struct netconfig *     _rpc_getconf(/* ??? */);
extern struct netconfig *     _rpc_getconfip(/* ??? */);
extern char *                 _rpc_gethostname(/* ??? */);
extern int                    _rpc_setconf(/* ??? */);
extern void                   _s_aligned_copy(/* ??? */);
extern struct _si_user *      _s_checkfd(/* ??? */);
extern void                   _s_close(/* ??? */);
extern int                    _s_do_ioctl(/* ??? */);
extern int                    _s_getfamily(/* ??? */);
extern int                    _s_getudata(/* ??? */);
extern int                    _s_is_ok(/* ??? */);
extern struct netconfig *     _s_match(/* ??? */);
extern int                    _s_max(/* ??? */);
extern int                    _s_min(/* ??? */);
extern struct _si_user *      _s_open(/* ??? */);
extern int                    _s_soreceive(/* ??? */);
extern int                    _s_sosend(/* ??? */);
extern int                    _s_uxpathlen(/* ??? */);
extern int                    _setecho(int);
extern int                    _setjmp(jmp_buf);
extern int                    _setnonl(int);
extern void                   _setqiflush(int);
extern char *                 _taddr2uaddr(struct netconfig *, struct netbuf *);
extern int                    _tolower(int);
extern int                    _toupper(int);
extern struct netbuf *        _uaddr2taddr(struct netconfig *, char *);
extern bool                   _xdr_yprequest(/* ??? */);
extern bool                   _xdr_ypresponse(/* ??? */);
extern int                    _xftw(int, const char *, int (*) (const char *, const struct stat *, int), int);
extern int                    _xmknod(int, const char *, mode_t, dev_t);
extern int                    _xstat(int, const char *, struct stat *);
extern int                    _yp_dobind(/* ??? */);
extern long int               a64l(const char *);
extern char *                 aatos(char *, struct address *, int);
extern void                   abort(void);
extern int                    abs(int);
extern int                    access(const char *, int);
extern int                    acct(const char *);
extern double                 acos(double);
extern float                  acosf(float);
extern double                 acosh(double);
extern int                    addexportent(FILE *, char *, char *);
extern int                    addseverity(int, const char *);
extern int                    adjtime(struct timeval *, struct timeval *);
extern int                    advance(const char *, const char *);
extern unsigned int           alarm(unsigned int);
extern void *                 alloca(size_t);
extern int                    and(void);
extern int                    ascftime(char *, const char *, const struct tm *);
extern char *                 asctime(const struct tm *);
extern double                 asin(double);
extern float                  asinf(float);
extern double                 asinh(double);
extern struct address *       astoa(char *, struct address *);
extern double                 atan(double);
extern double                 atan2(double, double);
extern float                  atan2f(float, float);
extern float                  atanf(float);
extern double                 atanh(double);
extern int                    atexit(void (*) (void));
extern double                 atof(const char *);
extern int                    atoi(const char *);
extern long int               atol(const char *);
extern char *                 atos(char *, struct netbuf *, int);
extern void                   auth_destroy(AUTH *);
extern AUTH *                 authdes_create(/* ??? */);
extern void                   authdes_getcred(struct authdes_cred *, short *, short *, short *, int *);
extern AUTH *                 authdes_seccreate(/* ??? */);
extern AUTH *                 authnone_create(void);
extern AUTH *                 authsys_create(char *, int, int, int, int *);
extern AUTH *                 authsys_create_default(void);
extern AUTH *                 authunix_create(char *, int, int, int, int *);
extern AUTH *                 authunix_create_default(void);
extern char *                 basename(char *);
extern int                    baudrate(void);
extern int                    bcmp(const void *, const void *, size_t);
extern void                   bcopy(const void *, void *, size_t);
extern int                    beep(void);
extern void (*                berk_signal(int, void (*) (int, ...))) (int, ...);
extern char *                 bgets(char *, size_t, FILE *, char *);
extern int                    bottom_panel(PANEL *);
extern int                    box32(WINDOW *, chtype, chtype);
extern int                    brk(void *);
extern void *                 bsearch(const void *, const void *, size_t, size_t, int (*) (const void *, const void *));
extern size_t                 bufsplit(char *, size_t, char *);
extern void                   bzero(void *, size_t);
extern long int               calchash(/* ??? */);
extern void *                 calloc(size_t, size_t);
extern void                   callrpc(char *, unsigned long, unsigned long, unsigned long, xdrproc_t, char *, xdrproc_t, char *);
extern bool                   can_change_color(void);
extern int                    catclose(nl_catd);
extern char *                 catgets(nl_catd, int, int, char *);
extern nl_catd                catopen(const char *, int);
extern int                    cbreak(void);
extern double                 cbrt(double);
extern double                 ceil(double);
extern float                  ceilf(float);
extern speed_t                cfgetispeed(const struct termios *);
extern speed_t                cfgetospeed(const struct termios *);
extern void                   cfree(void *);
extern int                    cfsetispeed(struct termios *, speed_t);
extern int                    cfsetospeed(struct termios *, speed_t);
extern int                    cftime(char *, char *, const time_t *);
extern int                    chdir(const char *);
extern int                    chmod(const char *, mode_t);
extern int                    chown(const char *, uid_t, gid_t);
extern int                    chroot(const char *);
extern void                   clean_GEN_rd(/* ??? */);
extern void                   cleanup(/* ??? */);
extern void                   clearerr(FILE *);
extern int                    clearok(WINDOW *, int);
extern enum clnt_stat         clnt_broadcast(unsigned long, unsigned long, unsigned long, xdrproc_t, char *, xdrproc_t, char *, resultproc_t);
extern enum clnt_stat         clnt_call(CLIENT *, unsigned long, xdrproc_t, char *, xdrproc_t, char *, struct timeval);
extern bool_t                 clnt_control(CLIENT *, int, char *);
extern CLIENT *               clnt_create(char *, unsigned long, unsigned long, char *);
extern void                   clnt_destroy(CLIENT *);
extern int                    clnt_freeres(CLIENT *, xdrproc_t, char *);
extern void                   clnt_geterr(CLIENT *, struct rpc_err *);
extern void                   clnt_pcreateerror(char *);
extern void                   clnt_perrno(enum clnt_stat);
extern void                   clnt_perror(CLIENT *, char *);
extern char *                 clnt_spcreateerror(char *);
extern char *                 clnt_sperrno(enum clnt_stat);
extern char *                 clnt_sperror(CLIENT *, char *);
extern CLIENT *               clnt_tli_create(/* ??? */);
extern CLIENT *               clnt_tp_create(/* ??? */);
extern CLIENT *               clnt_vc_create(/* ??? */);
extern CLIENT *               clntraw_create(unsigned long, unsigned long);
extern CLIENT *               clnttcp_create(struct sockaddr_in *, unsigned long, unsigned long, int *, unsigned int, unsigned int *);
extern CLIENT *               clntudp_bufcreate(struct sockaddr_in *, unsigned long, unsigned long, struct timeval, int *, unsigned int, unsigned int);
extern CLIENT *               clntudp_create(struct sockaddr_in *, unsigned long, unsigned long, struct timeval, int *);
extern clock_t                clock(void);
extern int                    close(int);
extern int                    closedir(DIR *);
extern int                    color_content(int, short int *, short int *, short int *);
extern char *                 compile(const char *, char *, char *);
extern char *                 copylist(const char *, off_t *);
extern double                 copysign(double, double);
extern int                    copywin(WINDOW *, WINDOW *, int, int, int, int, int, int, int);
extern double                 cos(double);
extern float                  cosf(float);
extern double                 cosh(double);
extern float                  coshf(float);
extern struct rd_user *       cr_rduser(/* ??? */);
extern int                    creat(const char *, mode_t);
extern int                    crmode(void);
extern char *                 crypt(const char *, const char *);
extern int                    crypt_close(int *);
extern char *                 ctermid(char *);
extern char *                 ctime(const time_t *);
extern FIELD *                current_field(FORM *);
extern ITEM *                 current_item(MENU *);
extern int                    curs_set(int);
extern void                   curserr(void);
extern char *                 cuserid(char *);
extern int                    data_ahead(FORM *);
extern int                    data_behind(FORM *);
extern void                   dbmclose(void);
extern void                   dbminit(const char *);
extern int                    def_prog_mode(void);
extern int                    def_shell_mode(void);
extern char *                 defread(/* ??? */);
extern int                    del_panel(PANEL *);
extern void                   del_rduser(/* ??? */);
extern void                   delay(long int);
extern int                    delay_output(int);
extern void                   delete(datum);
extern void                   delscreen(SCREEN *);
extern int                    delterm(TERMINAL *);
extern int                    delwin(WINDOW *);
extern WINDOW *               derwin(WINDOW *, int, int, int, int);
extern char *                 des_crypt(const char *, const char *);
extern void                   des_encrypt(char *, int);
extern void                   des_setkey(const char *);
extern char *                 devattr(/* ??? */);
extern int                    devfree(/* ??? */);
extern char **                devreserv(/* ??? */);
extern int                    dial(CALL);
extern double                 difftime(time_t, time_t);
extern char *                 dirname(char *);
extern div_t                  div(int, int);
extern int                    dlclose(void *);
extern char *                 dlerror(void);
extern void *                 dlopen(char *, int);
extern void *                 dlsym(void *, char *);
extern void                   dma_access(u_char, u_int, u_int, u_char, u_char);
extern int                    doupdate(void);
extern int                    drainio(int);
extern double                 drand48(void);
extern double                 drem(double, double);
extern int                    drv_getevtoken(/* ??? */);
extern void                   drv_relevtoken(/* ??? */);
extern int                    dup(int);
extern int                    dup2(int, int);
extern FIELD *                dup_field(FIELD *, int, int);
extern WINDOW *               dupwin(WINDOW *);
extern int                    dynamic_field_info(FIELD *, int *, int *, int *);
extern int                    dysize(int);
extern int                    eaccess(const char *, int);
extern int                    echo(void);
extern char *                 ecvt(double, int, int *, int *);
extern size_t                 elf32_fsize(Elf_Type, size_t, unsigned int);
extern Elf32_Ehdr *           elf32_getehdr(Elf *);
extern Elf32_Phdr *           elf32_getphdr(Elf *);
extern Elf32_Shdr *           elf32_getshdr(Elf_Scn *);
extern Elf32_Ehdr *           elf32_newehdr(Elf *);
extern Elf32_Phdr *           elf32_newphdr(Elf *, size_t);
extern Elf_Data *             elf32_xlatetof(Elf_Data *, const Elf_Data *, unsigned int);
extern Elf_Data *             elf32_xlatetom(Elf_Data *, const Elf_Data *, unsigned int);
extern Elf *                  elf_begin(int, Elf_Cmd, Elf *);
extern int                    elf_cntl(Elf *, Elf_Cmd);
extern int                    elf_end(Elf *);
extern const char *           elf_errmsg(int);
extern int                    elf_errno(void);
extern void                   elf_fill(int);
extern unsigned int           elf_flagdata(Elf_Data *, Elf_Cmd, unsigned int);
extern unsigned int           elf_flagehdr(Elf *, Elf_Cmd, unsigned int);
extern unsigned int           elf_flagelf(Elf *, Elf_Cmd, unsigned int);
extern unsigned int           elf_flagphdr(Elf *, Elf_Cmd, unsigned int);
extern unsigned int           elf_flagscn(Elf_Scn *, Elf_Cmd, unsigned int);
extern unsigned int           elf_flagshdr(Elf_Scn *, Elf_Cmd, unsigned int);
extern Elf_Arhdr *            elf_getarhdr(Elf *);
extern Elf_Arsym *            elf_getarsym(Elf *, size_t *);
extern off_t                  elf_getbase(Elf *);
extern Elf_Data *             elf_getdata(Elf_Scn *, Elf_Data *);
extern char *                 elf_getident(Elf *, size_t *);
extern Elf_Scn *              elf_getscn(Elf *, size_t);
extern long unsigned int      elf_hash(const char *);
extern Elf_Kind               elf_kind(Elf *);
extern size_t                 elf_ndxscn(Elf_Scn *);
extern Elf_Data *             elf_newdata(Elf_Scn *);
extern Elf_Scn *              elf_newscn(Elf *);
extern Elf_Cmd                elf_next(Elf *);
extern Elf_Scn *              elf_nextscn(Elf *, Elf_Scn *);
extern size_t                 elf_rand(Elf *, size_t);
extern Elf_Data *             elf_rawdata(Elf_Scn *, Elf_Data *);
extern char *                 elf_rawfile(Elf *, size_t *);
extern char *                 elf_strptr(Elf *, size_t, size_t);
extern off_t                  elf_update(Elf *, Elf_Cmd);
extern unsigned int           elf_version(unsigned int);
extern void                   encrypt(char *, int);
extern void                   endgrent(void);
extern int                    endnetconfig(void *);
extern int                    endnetpath(void *);
extern void                   endpwent(void);
extern void                   endrpcent(void);
extern void                   endspent(void);
extern void                   endutent(void);
extern void                   endutxent(void);
extern int                    endwin(void);
extern double                 erand(short *);
extern double                 erand48(short unsigned int *);
extern char                   erasechar(void);
extern double                 erf(double);
extern double                 erfc(double);
extern int                    execl(const char *, const char *, ...);
extern int                    execle(const char *, const char *, ...);
extern int                    execlp(const char *, const char *, ...);
extern int                    exect(const char *,  const char **,  char **);
extern int                    execv(const char *, char *const *);
extern int                    execve(const char *, char *const *, char *const *);
extern int                    execvp(const char *, char *const *);
extern void                   exit(int);
extern double                 exp(double);
extern float                  expf(float);
extern double                 fabs(double);
extern float                  fabsf(float);
extern int                    fattach(int, const char *);
extern int                    fchdir(int);
extern int                    fchmod(int, mode_t);
extern int                    fchown(int, uid_t, gid_t);
extern int                    fclose(FILE *);
extern int                    fcntl(int, int, ...);
extern char *                 fcvt(double, int, int *, int *);
extern int                    fdetach(const char *);
extern FILE *                 fdopen(int, const char *);
extern int                    feof(FILE *);
extern int                    ferror(FILE *);
extern datum                  fetch(datum);
extern int                    fflush(FILE *);
extern int                    ffs(int);
extern int                    fgetc(FILE *);
extern struct group *         fgetgrent(FILE *);
extern int                    fgetpos(FILE *, fpos_t *);
extern struct passwd *        fgetpwent(FILE *);
extern char *                 fgets(char *, int, FILE *);
extern struct spwd *          fgetspent(FILE *);
extern char *                 field_arg(FIELD *);
extern chtype                 field_back(FIELD *);
extern char *                 field_buffer(FIELD *, int);
extern int                    field_count(FORM *);
extern chtype                 field_fore(FIELD *);
extern int                    field_index(FIELD *);
extern int                    field_info(FIELD *, int *, int *, int *, int *, int *, int *);
extern PTF_void               field_init(FORM *);
extern int                    field_just(FIELD *);
extern OPTIONS                field_opts(FIELD *);
extern int                    field_opts_off(FIELD *, OPTIONS);
extern int                    field_opts_on(FIELD *, OPTIONS);
extern int                    field_pad(FIELD *);
extern int                    field_status(FIELD *);
extern PTF_void               field_term(FORM *);
extern FIELDTYPE *            field_type(FIELD *);
extern char *                 field_userptr(FIELD *);
extern int                    fileno(FILE *);
extern int                    filter(void);
extern int                    finite(double);
extern datum                  firsthash(/* ??? */);
extern datum                  firstkey(void);
extern int                    flash(void);
extern int                    flock(int, int);
extern double                 floor(double);
extern float                  floorf(float);
extern int                    flushinp(void);
extern double                 fmod(double, double);
extern float                  fmodf(float, float);
extern int                    fmtmsg(long int, const char *, int, const char *, const char *, const char *);
extern FILE *                 fopen(const char *, const char *);
extern pid_t                  fork(void);
extern int                    form_driver(FORM *, int);
extern FIELD **               form_fields(FORM *);
extern PTF_void               form_init(FORM *);
extern OPTIONS                form_opts(FORM *);
extern int                    form_opts_off(FORM *, OPTIONS);
extern int                    form_opts_on(FORM *, OPTIONS);
extern int                    form_page(FORM *);
extern WINDOW *               form_sub(FORM *);
extern PTF_void               form_term(FORM *);
extern char *                 form_userptr(FORM *);
extern WINDOW *               form_win(FORM *);
extern long int               fpathconf(int, int);
extern fpclass_t              fpclass(double);
extern int                    fpgetmask(void);
extern fp_rnd                 fpgetround(void);
extern int                    fpgetsticky(void);
extern int                    fprintf(FILE *, const char *, ...);
extern int                    fpsetmask(int);
extern fp_rnd                 fpsetround(fp_rnd);
extern int                    fpsetsticky(int);
extern int                    fputc(int, FILE *);
extern int                    fputs(const char *, FILE *);
extern size_t                 fread(void *, size_t, size_t, FILE *);
extern void                   free(void *);
extern int                    free_field(FIELD *);
extern int                    free_fieldtype(FIELDTYPE *);
extern int                    free_form(FORM *);
extern int                    free_item(ITEM *);
extern int                    free_menu(MENU *);
extern void                   freenetconfigent(struct netconfig *);
extern FILE *                 freopen(const char *, const char *, FILE *);
extern double                 frexp(double, int *);
extern int                    fscanf(FILE *, const char *, ...);
extern int                    fseek(FILE *, long int, int);
extern int                    fsetpos(FILE *, const fpos_t *);
extern int                    fstat(int, struct stat *);
extern int                    fstatfs(int, struct statfs *, int, int);
extern int                    fstatvfs(int, struct statvfs *);
extern int                    fsync(int);
extern long int               ftell(FILE *);
extern key_t                  ftok(const char *, int);
extern int                    ftruncate(int, off_t);
extern int                    ftw(const char *, int (*) (const char *, const struct stat *, int), int);
extern size_t                 fwrite(const void *, size_t, size_t, FILE *);
extern double                 gamma(double);
extern char *                 gcvt(double, int, char *);
extern int                    get_error(/* ??? */);
extern chtype                 getattrs(WINDOW *);
extern int                    getbegx(WINDOW *);
extern int                    getbegy(WINDOW *);
extern chtype                 getbkgd(WINDOW *);
extern long unsigned int      getbmap(void);
extern int                    getc(FILE *);
extern char *                 getcap(/* ??? */);
extern int                    getchar(void);
extern int                    getcontext(ucontext_t *);
extern int                    getcurx(WINDOW *);
extern int                    getcury(WINDOW *);
extern char *                 getcwd(char *, size_t);
extern struct tm *            getdate(const char *);
extern int                    getdents(int, struct dirent *, unsigned int);
extern char **                getdev(/* ??? */);
extern char **                getdgrp(/* ??? */);
extern int                    getdomainname(char *, int);
extern int                    getdtablesize(void);
extern gid_t                  getegid(void);
extern char *                 getenv(const char *);
extern struct errhdr *        geterec(/* ??? */);
extern struct errhdr *        geteslot(/* ??? */);
extern uid_t                  geteuid(void);
extern gid_t                  getgid(void);
extern struct group *         getgrent(void);
extern struct group *         getgrgid(gid_t);
extern struct group *         getgrnam(const char *);
extern int                    getgroups(int, TARGET_GETGROUPS_T []);
extern struct hostent *       gethostbyaddr(/* ??? */);
extern struct hostent *       gethostbyname(/* ??? */);
extern struct hostent *       gethostent(/* ??? */);
#ifdef __alpha__
extern int                    gethostid(void);
#else
extern long                   gethostid(void);
#endif
extern int                    gethostname(char *, size_t);
extern int                    getitimer(int, struct itimerval *);
extern char *                 getlogin(void);
extern int                    getmaxx(WINDOW *);
extern int                    getmaxy(WINDOW *);
extern int                    getmntany(FILE *, struct mnttab *, struct mnttab *);
extern int                    getmntent(/* ??? */);
extern long unsigned int      getmouse(void);
extern int                    getmsg(int, struct strbuf *, struct strbuf *, int *);
extern struct netent *        getnetbyaddr(/* ??? */);
extern struct netent *        getnetbyname(/* ??? */);
extern struct netconfig *     getnetconfig(void *);
extern struct netconfig *     getnetconfigent(char *);
extern struct netent *        getnetent(/* ??? */);
extern struct netconfig *     getnetpath(void *);
extern int                    getopt(int, char *const *, const char *);
extern int                    getpagesize(void);
extern int                    getparx(WINDOW *);
extern int                    getpary(WINDOW *);
extern char *                 getpass(const char *);
extern pid_t                  getpgid(pid_t);
extern pid_t                  getpgrp(void);
extern pid_t                  getpgrp2(pid_t);
extern pid_t                  getpid(void);
extern int                    getpmsg(int, struct strbuf *, struct strbuf *, int *, int *);
extern pid_t                  getppid(void);
extern int                    getpriority(int, int);
extern struct protoent *      getprotobyname(/* ??? */);
extern struct protoent *      getprotobynumber(/* ??? */);
extern struct protoent *      getprotoent(/* ??? */);
extern int                    getpw(int, char *);
extern struct passwd *        getpwent(void);
extern struct passwd *        getpwnam(const char *);
extern struct passwd *        getpwuid(uid_t);
extern int                    getrlimit(int, struct rlimit *);
extern int                    getrnge(char *);
extern struct rpcent *        getrpcbyname(const char *);
extern struct rpcent *        getrpcbynumber(int);
extern struct rpcent *        getrpcent(void);
extern int                    getrusage(int, struct rusage *);
extern char *                 gets(char *);
extern struct servent *       getservbyname(/* ??? */);
extern struct servent *       getservbyport(/* ??? */);
extern struct servent *       getservent(/* ??? */);
extern pid_t                  getsid(pid_t);
extern struct spwd *          getspent(void);
extern struct spwd *          getspnam(const char *);
extern int                    getsubopt(char **, char *const *, char **);
extern int                    gettmode(void);
extern char *                 gettxt(const char *, const char *);
extern uid_t                  getuid(void);
extern struct utmp *          getutent(void);
extern struct utmp *          getutid(const struct utmp *);
extern struct utmp *          getutline(const struct utmp *);
extern void                   getutmp(const struct utmpx *, struct utmp *);
extern void                   getutmpx(const struct utmp *, struct utmpx *);
extern struct utmpx *         getutxent(void);
extern struct utmpx *         getutxid(const struct utmpx *);
extern struct utmpx *         getutxline(const struct utmpx *);
extern int                    getvfsany(FILE *, struct vfstab *, struct vfstab *);
extern int                    getvfsent(FILE *, struct vfstab *);
extern int                    getvfsfile(FILE *, struct vfstab *, char *);
extern int                    getvfsspec(FILE *, struct vfstab *, char *);
extern int                    getvol(/* ??? */);
extern int                    getw(FILE *);
extern char *                 getwd(char *);
extern void                   getwidth(eucwidth_t *);
extern WINDOW *               getwin(FILE *);
extern int                    gmatch(const char *, const char *);
extern struct tm *            gmtime(const time_t *);
extern int                    gsignal(int);
extern int                    halfdelay(int);
extern bool                   has_colors(void);
extern int                    has_ic(void);
extern int                    has_il(void);
extern long int               hashinc(/* ??? */);
extern char *                 hasmntopt(/* ??? */);
extern int                    hcreate(size_t);
extern void                   hdestroy(void);
extern int                    hide_panel(PANEL *);
extern int                    host2netname(char *, char *, char *);
extern int                    hrtalarm(hrtcmd_t *, int);
extern int                    hrtcancel(const long int *, int);
extern int                    hrtcntl(int, int, interval_t *, hrtime_t *);
extern int                    hrtsleep(hrtcmd_t *);
extern ENTRY *                hsearch(ENTRY, ACTION);
extern long unsigned int      htonl(long unsigned int);
extern short unsigned int     htons(unsigned int);
extern double                 hypot(double, double);
extern void                   idcok(WINDOW *, int);
extern int                    idlok(WINDOW *, int);
extern void                   immedok(WINDOW *, int);
extern char *                 index(const char *, int);
extern long unsigned int      inet_addr(/* ??? */);
extern struct in_addr         inet_makeaddr(/* ??? */);
extern long unsigned int      inet_network(/* ??? */);
extern char *                 inet_ntoa(/* ??? */);
extern int                    init_color(int, int, int, int);
extern int                    init_pair(int, int, int);
extern int                    initgroups(const char *, gid_t);
extern WINDOW *               initscr(/* ??? */);
extern WINDOW *               initscr32(void);
extern char *                 initstate(unsigned, char *, int);
extern void                   insque(struct qelem *, struct qelem *);
extern int                    intrflush(WINDOW *, int);
extern int                    ioctl(int, int, ...);
extern int                    is_linetouched(WINDOW *, int);
extern int                    is_wintouched(WINDOW *);
extern int                    isalnum(int);
extern int                    isalpha(int);
extern int                    isascii(int);
extern int                    isatty(int);
extern int                    iscntrl(int);
extern int                    isdigit(int);
extern int                    isencrypt(const char *, size_t);
extern int                    isendwin(void);
extern int                    isgraph(int);
extern int                    isinf(double);
extern int                    islower(int);
extern int                    isnan(double);
extern int                    isnand(double);
extern int                    isnanf(float);
extern int                    isprint(int);
extern int                    ispunct(int);
extern int                    isspace(int);
extern int                    isupper(int);
extern int                    isxdigit(int);
extern int                    item_count(MENU *);
extern char *                 item_description(ITEM *);
extern int                    item_index(ITEM *);
extern PTF_void               item_init(MENU *);
extern char *                 item_name(ITEM *);
extern OPTIONS                item_opts(ITEM *);
extern int                    item_opts_off(ITEM *, OPTIONS);
extern int                    item_opts_on(ITEM *, OPTIONS);
extern PTF_void               item_term(MENU *);
extern char *                 item_userptr(ITEM *);
extern int                    item_value(ITEM *);
extern int                    item_visible(ITEM *);
extern long int               itol(/* ??? */);
extern double                 j0(double);
extern double                 j1(double);
extern double                 jn(int, double);
extern long int               jrand48(short unsigned int *);
extern char *                 keyname(int);
extern int                    keypad(WINDOW *, int);
extern int                    kill(pid_t, int);
extern char                   killchar(void);
extern int                    killpg(int, int);
extern void                   l3tol(long int *, const char *, int);
extern char *                 l64a(long int);
extern long int               labs(long int);
extern dl_t                   ladd(/* ??? */);
extern int                    lchown(const char *, uid_t, gid_t);
extern int                    lckpwdf(void);
extern void                   lcong48(short unsigned int *);
extern int                    ldaclose(struct ldfile *);
extern int                    ldahread(struct ldfile *, archdr *);
extern struct ldfile *        ldaopen(const char *, struct ldfile *);
extern int                    ldclose(struct ldfile *);
extern double                 ldexp(double, int);
extern int                    ldfhread(struct ldfile *, struct filehdr *);
extern char *                 ldgetname(struct ldfile *, const struct syment *);
extern ldiv_t                 ldiv(long int, long int);
extern dl_t                   ldivide(/* ??? */);
extern int                    ldlinit(struct ldfile *, long int);
extern int                    ldlitem(struct ldfile *, unsigned int, struct lineno *);
extern int                    ldlread(struct ldfile *, long int, unsigned int, struct lineno *);
extern int                    ldlseek(struct ldfile *, unsigned int);
extern int                    ldnlseek(struct ldfile *, const char *);
extern int                    ldnrseek(struct ldfile *, const char *);
extern int                    ldnshread(struct ldfile *, const char *, struct scnhdr *);
extern int                    ldnsseek(struct ldfile *, const char *);
extern int                    ldohseek(struct ldfile *);
extern struct ldfile *        ldopen(const char *, struct ldfile *);
extern int                    ldrseek(struct ldfile *, unsigned int);
extern int                    ldshread(struct ldfile *, unsigned int, struct scnhdr *);
extern int                    ldsseek(struct ldfile *, unsigned int);
extern long int               ldtbindex(struct ldfile *);
extern int                    ldtbread(struct ldfile *, long int, struct syment *);
extern int                    ldtbseek(struct ldfile *);
extern int                    leaveok(WINDOW *, int);
extern dl_t                   lexp10(/* ??? */);
extern void *                 lfind(const void *, const void *, size_t *, size_t, int (*) (const void *, const void *));
extern double                 lgamma(double);
extern int                    link(const char *, const char *);
extern FIELD *                link_field(FIELD *, int, int);
extern FIELDTYPE *            link_fieldtype(FIELDTYPE *, FIELDTYPE *);
extern char **                listdev(/* ??? */);
extern char **                listdgrp(/* ??? */);
extern dl_t                   llog10(/* ??? */);
extern dl_t                   lmul(/* ??? */);
extern struct lconv *         localeconv(void);
extern struct tm *            localtime(const time_t *);
extern int                    lock(int, int, long);
extern int                    lockf(int, int, off_t);
extern double                 log(double);
extern double                 log10(double);
extern float                  log10f(float);
extern double                 logb(double);
extern float                  logf(float);
extern char *                 logname(void);
extern void                   longjmp(jmp_buf, int);
extern char *                 longname(void);
extern long int               lrand48(void);
extern void *                 lsearch(const void *, void *, size_t *, size_t, int (*) (const void *, const void *));
extern off_t                  lseek(int, off_t, int);
extern dl_t                   lshiftl(/* ??? */);
extern int                    lstat(const char *, struct stat *);
extern dl_t                   lsub(/* ??? */);
extern void                   ltol3(char *, const long int *, int);
extern int                    m_addch(int);
extern int                    m_addstr(char *);
extern int                    m_clear(void);
extern int                    m_erase(void);
extern WINDOW *               m_initscr(void);
extern int                    m_move(int, int);
extern SCREEN *               m_newterm(char *, FILE *, FILE *);
extern int                    m_refresh(void);
extern int                    maillock(char *, int);
extern int                    mailunlock(void);
extern major_t                major(dev_t);
extern datum                  makdatum(/* ??? */);
extern void                   makecontext(ucontext_t *, void (*) (/* ??? */), int, ...);
extern dev_t                  makedev(major_t, minor_t);
extern struct utmpx *         makeutx(const struct utmpx *);
extern struct mallinfo        mallinfo(void);
extern void *                 malloc(size_t);
extern int                    mallopt(int, int);
extern int                    map_button(long unsigned int);
extern int                    matherr(struct exception *);
extern int                    mbftowc(char *, wchar_t *, int (*) (/* ??? */), int *);
extern int                    mblen(const char *, size_t);
extern size_t                 mbstowcs(wchar_t *, const char *, size_t);
extern int                    mbtowc(wchar_t *, const char *, size_t);
extern void *                 memalign(size_t, size_t);
extern void *                 memccpy(void *, const void *, int, size_t);
extern void *                 memchr(const void *, int, size_t);
extern int                    memcmp(const void *, const void *, size_t);
extern void *                 memcpy(void *, const void *, size_t);
extern int                    memlock(/* ??? */);
extern int                    memlocked(/* ??? */);
extern void *                 memmove(void *, const void *, size_t);
extern void *                 memset(void *, int, size_t);
extern int                    memunlock(/* ??? */);
extern chtype                 menu_back(MENU *);
extern int                    menu_driver(MENU *, int);
extern chtype                 menu_fore(MENU *);
extern void                   menu_format(MENU *, int *, int *);
extern chtype                 menu_grey(MENU *);
extern PTF_void               menu_init(MENU *);
extern ITEM **                menu_items(MENU *);
extern char *                 menu_mark(MENU *);
extern OPTIONS                menu_opts(MENU *);
extern int                    menu_opts_off(MENU *, OPTIONS);
extern int                    menu_opts_on(MENU *, OPTIONS);
extern int                    menu_pad(MENU *);
extern char *                 menu_pattern(MENU *);
extern WINDOW *               menu_sub(MENU *);
extern PTF_void               menu_term(MENU *);
extern char *                 menu_userptr(MENU *);
extern WINDOW *               menu_win(MENU *);
extern int                    meta(WINDOW *, int);
extern void                   mfree(struct map *, size_t, u_long);
extern int                    mincore(caddr_t, size_t, char *);
extern minor_t                minor(dev_t);
extern int                    mkdir(const char *, mode_t);
extern int                    mkdirp(const char *, mode_t);
extern int                    mkfifo(const char *, mode_t);
extern int                    mknod(const char *, mode_t, dev_t);
extern int                    mkstemp(char *);
extern char *                 mktemp(char *);
extern time_t                 mktime(struct tm *);
extern caddr_t                mmap(/* ??? */);
extern double                 modf(double, double *);
extern float                  modff(float, float *);
extern struct utmpx *         modutx(const struct utmpx *);
extern void                   monitor(int (*) (/* ??? */), int (*) (/* ??? */), WORD *, int, int);
extern int                    mount(const char *, const char *, int, ...);
extern int                    mouse_off(long int);
extern int                    mouse_on(long int);
extern int                    mouse_set(long int);
extern int                    move_field(FIELD *, int, int);
extern int                    move_panel(PANEL *, int, int);
extern int                    mprotect(/* ??? */);
extern long int               mrand48(void);
extern int                    msgctl(int, int, ...);
extern int                    msgget(key_t, int);
extern int                    msgrcv(int, void *, size_t, long int, int);
extern int                    msgsnd(int, const void *, size_t, int);
extern int                    munmap(/* ??? */);
extern int                    mvcur(int, int, int, int);
extern int                    mvderwin(WINDOW *, int, int);
extern int                    mvprintw(int, int, ...);
extern int                    mvscanw(int, int, ...);
extern int                    mvwin(WINDOW *, int, int);
extern int                    mvwprintw(WINDOW *, int, int, ...);
extern int                    mvwscanw(WINDOW *, int, int, ...);
extern int                    napms(int);
extern void                   netdir_free(char *, int);
extern int                    netdir_getbyaddr(struct netconfig *, struct nd_hostservlist **, struct netbuf *);
extern int                    netdir_getbyname(struct netconfig *, struct nd_hostserv *, struct nd_addrlist **);
extern int                    netdir_options(struct netconfig *, int, int, char *);
extern void                   netdir_perror(char *);
extern char *                 netdir_sperror(/* ??? */);
extern FIELD *                new_field(int, int, int, int, int, int);
extern FIELDTYPE *            new_fieldtype(PTF_int, PTF_int);
extern FORM *                 new_form(FIELD **);
extern ITEM *                 new_item(char *, char *);
extern MENU *                 new_menu(ITEM **);
extern int                    new_page(FIELD *);
extern PANEL *                new_panel(WINDOW *);
extern int                    newkey(char *, int, int);
extern WINDOW *               newpad(int, int);
extern SCREEN *               newscreen(char *, int, int, int, FILE *, FILE *);
extern SCREEN *               newterm32(char *, FILE *, FILE *);
extern WINDOW *               newwin(int, int, int, int);
extern double                 nextafter(double, double);
extern datum                  nextkey(datum);
extern int                    nftw(const char *, int (*) (const char *, const struct stat *, int, struct FTW *), int, int);
extern int                    nice(int);
extern int                    nl(void);
extern char *                 nl_langinfo(nl_item);
extern int                    nlist(const char *, struct nlist *);
extern int                    nocbreak(void);
extern int                    nocrmode(void);
extern int                    nodelay(WINDOW *, int);
extern int                    noecho(void);
extern int                    nonl(void);
extern int                    noraw(void);
extern int                    notimeout(WINDOW *, int);
extern long int               nrand48(short unsigned int *);
extern int                    ns_close(/* ??? */);
extern struct nssend *        ns_rcv(/* ??? */);
extern int                    ns_send(/* ??? */);
extern int                    ns_setup(/* ??? */);
extern long unsigned int      ntohl(long unsigned int);
extern short unsigned int     ntohs(unsigned int);
extern int                    nuname(struct utsname *);
extern int                    open(const char *, int, ...);
extern DIR *                  opendir(const char *);
extern int                    openprivwait(/* ??? */);
extern int                    openwait(/* ??? */);
extern int                    overlay(WINDOW *, WINDOW *);
extern int                    overwrite(WINDOW *, WINDOW *);
extern int                    p2close(FILE **);
extern int                    p2open(const char *, FILE **);
extern int                    p32echochar(WINDOW *, chtype);
extern char *                 p_cdname(/* ??? */);
extern char *                 p_class(/* ??? */);
extern char *                 p_rr(/* ??? */);
extern char *                 p_type(/* ??? */);
extern int                    pair_content(int, short int *, short int *);
extern PANEL *                panel_above(PANEL *);
extern PANEL *                panel_below(PANEL *);
extern char *                 panel_userptr(PANEL *);
extern WINDOW *               panel_window(PANEL *);
extern long int               pathconf(const char *, int);
extern char *                 pathfind(const char *, const char *, const char *);
extern int                    pause(void);
extern int                    pclose(FILE *);
extern void                   perror(const char *);
extern struct pfdat *         pfind(/* ??? */);
extern int                    pglstlk(/* ??? */);
extern int                    pglstunlk(/* ??? */);
extern int                    pid_slot(proc_t *);
extern int                    pipe(int *);
extern int                    plock(int);
extern struct pmaplist *      pmap_getmaps(/* ??? */);
extern u_short                pmap_getport(/* ??? */);
extern enum clnt_stat         pmap_rmtcall(/* ??? */);
extern int                    pmap_set(/* ??? */);
extern int                    pmap_unset(/* ??? */);
extern int                    pnoutrefresh(WINDOW *, int, int, int, int, int, int);
extern int                    poll(struct pollfd *, long unsigned int, int);
extern FILE *                 popen(const char *, const char *);
extern int                    pos_form_cursor(FORM *);
extern int                    pos_menu_cursor(MENU *);
extern int                    post_form(FORM *);
extern int                    post_menu(MENU *);
extern double                 pow(double, double);
extern float                  powf(float, float);
extern int                    prefresh(WINDOW *, int, int, int, int, int, int);
extern int                    printf(const char *, ...);
extern int                    printw(char *, ...);
extern void                   privsig(/* ??? */);
extern void                   profil(short unsigned int *, size_t, int, unsigned int);
extern void                   psiginfo(siginfo_t *, char *);
extern void                   psignal(int, const char *);
extern int                    ptrace(int, pid_t, int, int);
extern int                    putc(int, FILE *);
extern int                    putchar(int);
extern int                    putenv(char *);
extern int                    putmsg(int, const struct strbuf *, const struct strbuf *, int);
extern int                    putp(char *);
extern int                    putpmsg(int, const struct strbuf *, const struct strbuf *, int, int);
extern int                    putpwent(const struct passwd *, FILE *);
extern int                    puts(const char *);
extern int                    putspent(const struct spwd *, FILE *);
extern struct utmp *          pututline(const struct utmp *);
extern struct utmpx *         pututxline(const struct utmpx *);
extern int                    putw(int, FILE *);
extern int                    putwin(WINDOW *, FILE *);
extern void                   qsort(void *, size_t, size_t, int (*) (const void *, const void *));
extern int                    raise(int);
extern int                    rand(void);
extern long                   random(void);
extern int                    raw(void);
extern ssize_t                read(int, void *, size_t);
extern struct dirent *        readdir(DIR *);
extern ssize_t                readlink(const char *, char *, size_t);
extern void *                 realloc(void *, size_t);
extern char *                 realpath(char *, char *);
extern int                    redrawwin(WINDOW *);
extern char *                 regcmp(const char *, ...);
extern char *                 regex(const char *, const char *, ...);
extern double                 remainder(double, double);
extern int                    remio(/* ??? */);
extern int                    remove(const char *);
extern void                   remque(struct qelem *);
extern int                    rename(const char *, const char *);
extern int                    replace_panel(PANEL *, WINDOW *);
extern int                    request_mouse_pos(void);
extern struct reservdev **    reservdev(/* ??? */);
extern int                    reset_prog_mode(void);
extern int                    reset_shell_mode(void);
extern int                    resetty(void);
extern int                    restartterm(char *, int, int *);
extern void                   rewind(FILE *); 
extern void                   rewinddir(DIR *);
extern int                    rf_falloc(/* ??? */);
extern char *                 rindex(const char *, int);
extern double                 rint(double);
extern int                    ripoffline(int, int (*) (WINDOW *, int));
extern int                    rmdir(const char *);               
extern int                    rmdirp(char *, char *);
extern enum clnt_stat         rpc_broadcast(/* ??? */);
extern enum clnt_stat         rpc_call(/* ??? */);
extern int                    rpcb_getaddr(/* ??? */);
extern RPCBLIST *             rpcb_getmaps(/* ??? */);
extern int                    rpcb_gettime(/* ??? */);
extern enum clnt_stat         rpcb_rmtcall(/* ??? */);
extern int                    rpcb_set(/* ??? */);
extern char *                 rpcb_taddr2uaddr(/* ??? */);
extern struct netbuf *        rpcb_uaddr2taddr(/* ??? */);
extern int                    rpcb_unset(/* ??? */);
extern void                   rpctest_service(/* ??? */);
extern int                    run_crypt(long int, char *, unsigned int, int *);
extern int                    run_setkey(int *, const char *);
extern int                    savetty(void);
extern void *                 sbrk(int);              
extern double                 scalb(double, double);
extern int                    scale_form(FORM *, int *, int *);
extern int                    scale_menu(MENU *, int *, int *);
extern int                    scanf(const char *, ...);
extern int                    scanw(char *, ...);
extern int                    scr_dump(char *);
extern int                    scr_init(char *);
extern int                    scr_restore(char *);
extern int                    scroll(WINDOW *);
extern int                    scrollok(WINDOW *, int);
extern int                    scrwidth(wchar_t);
extern int                    sdfree(char *);
extern char *                 sdget(char *, int, ...);
extern short unsigned int *   seed48(short unsigned int *);
extern void                   seekdir(DIR *, long int);
extern int                    semctl(int, int, int, ...);
extern int                    semget(key_t, int, int);
extern int                    semop(int, struct sembuf *, unsigned int);
extern int                    send(int, char *, int, int);
extern int                    set_current_field(FORM *, FIELD *);
extern int                    set_current_item(MENU *, ITEM *);
extern int                    set_field_back(FIELD *, chtype);
extern int                    set_field_buffer(FIELD *, int, char *);
extern int                    set_field_fore(FIELD *, chtype);
extern int                    set_field_init(FORM *, PTF_void);
extern int                    set_field_just(FIELD *, int);
extern int                    set_field_opts(FIELD *, OPTIONS);
extern int                    set_field_pad(FIELD *, int);
extern int                    set_field_status(FIELD *, int);
extern int                    set_field_term(FORM *, PTF_void);
extern int                    set_field_type(FIELD *, FIELDTYPE *, ...);
extern int                    set_field_userptr(FIELD *, char *);
extern int                    set_fieldtype_arg(FIELDTYPE *, PTF_charP, PTF_charP, PTF_void);
extern int                    set_fieldtype_choice(FIELDTYPE *, PTF_int, PTF_int);
extern int                    set_form_fields(FORM *, FIELD **);
extern int                    set_form_init(FORM *, PTF_void);
extern int                    set_form_opts(FORM *, OPTIONS);
extern int                    set_form_page(FORM *, int);
extern int                    set_form_sub(FORM *, WINDOW *);
extern int                    set_form_term(FORM *, PTF_void);
extern int                    set_form_userptr(FORM *, char *);
extern int                    set_form_win(FORM *, WINDOW *);
extern int                    set_item_init(MENU *, PTF_void);
extern int                    set_item_opts(ITEM *, OPTIONS);
extern int                    set_item_term(MENU *, PTF_void);
extern int                    set_item_userptr(ITEM *, char *);
extern int                    set_item_value(ITEM *, int);
extern int                    set_max_field(FIELD *, int);
extern int                    set_menu_back(MENU *, chtype);
extern int                    set_menu_fore(MENU *, chtype);
extern int                    set_menu_format(MENU *, int, int);
extern int                    set_menu_grey(MENU *, chtype);
extern int                    set_menu_init(MENU *, PTF_void);
extern int                    set_menu_items(MENU *, ITEM **);
extern int                    set_menu_mark(MENU *, char *);
extern int                    set_menu_opts(MENU *, OPTIONS);
extern int                    set_menu_pad(MENU *, int);
extern int                    set_menu_pattern(MENU *, char *);
extern int                    set_menu_sub(MENU *, WINDOW *);
extern int                    set_menu_term(MENU *, PTF_void);
extern int                    set_menu_userptr(MENU *, char *);
extern int                    set_menu_win(MENU *, WINDOW *);
extern int                    set_new_page(FIELD *, int);
extern int                    set_panel_userptr(PANEL *, char *);
extern int                    set_top_row(MENU *, int);
extern void                   setbuf(FILE *, char *);
extern int                    setcontext(ucontext_t *);
extern SCREEN *               setcurscreen(SCREEN *);
extern TERMINAL *             setcurterm(TERMINAL *);
extern FILE *                 setexportent(void);
extern int                    setgid(gid_t);
extern void                   setgrent(void);
extern int                    setgroups(int, const gid_t *);
extern int                    sethostname(char *, int);
extern int                    setitimer(int, struct itimerval *, struct itimerval *);
extern int                    setjmp(jmp_buf);
extern void                   setkey(const char *);
extern char *                 setlocale(int, const char *);
extern FILE *                 setmntent(char *, char *);
extern void *                 setnetconfig(void);
extern void *                 setnetpath(void);
extern int                    setpgid(pid_t, pid_t);
extern pid_t                  setpgrp(void);
extern int                    setpgrp2(pid_t, pid_t);
extern int                    setpriority(int, int, int);
extern int                    setprivwait(/* ??? */);
extern void                   setpwent(void);
extern int                    setregid(gid_t, gid_t);
extern int                    setreuid(uid_t, uid_t);
extern int                    setrlimit(int, struct rlimit *);
extern int                    setrpcent(int);
extern pid_t                  setsid(void);
extern void                   setspent(void);
extern char *                 setstate(char *);
extern int                    setsyx(int, int);
extern int                    setterm(char *);
extern int                    setuid(uid_t);
extern int                    setupterm(char *, int, int *);
extern void                   setutent(void);
extern void                   setutxent(void);
extern int                    setvbuf(FILE *, char *, int, size_t);
extern long int               sgetl(const char *);
extern void *                 shmat(int, void *, int);
extern int                    shmctl(int, int, ...);
extern int                    shmdt(void *);
extern int                    shmget(key_t, int, int);
extern int                    show_panel(PANEL *);
extern int                    sigaction(int, const struct sigaction *, struct sigaction *);
extern int                    sigaddset(sigset_t *, int);
extern int                    sigaltstack(const stack_t *, stack_t *);
extern int                    sigblock(int);
extern int                    sigdelset(sigset_t *, int);
extern int                    sigemptyset(sigset_t *);
extern int                    sigfillset(sigset_t *);
extern int                    sighold(int);
extern int                    sigignore(int);
extern int                    siginterrupt(int, int);
extern int                    sigismember(const sigset_t *, int);
extern void                   siglongjmp(sigjmp_buf, int);
extern signal_ret_t (*        signal(int, signal_ret_t (*) (int))) (int);
extern int                    sigpause(int);
extern int                    sigpending(sigset_t *);
extern int                    sigprocmask(int, const sigset_t *, sigset_t *);
extern int                    sigrelse(int);
extern int                    sigsend(idtype_t, id_t, int);
extern int                    sigsendset(const procset_t *, int);
extern void (*                sigset(int, void (*) (int))) (int);
extern int                    sigsetjmp(sigjmp_buf, int);
extern int                    sigsetmask(int);
extern int                    sigsuspend(sigset_t *);
extern double                 sin(double);
extern float                  sinf(float);
extern double                 sinh(double);
extern float                  sinhf(float);
extern unsigned int           sleep(unsigned int);
extern int                    slk_attroff(chtype);
extern int                    slk_attron(chtype);
extern int                    slk_attrset(chtype);
extern int                    slk_clear(void);
extern int                    slk_init(int);
extern char *                 slk_label(int);
extern int                    slk_noutrefresh(void);
extern int                    slk_refresh(void);
extern int                    slk_restore(void);
extern int                    slk_set(int, char *, int);
extern int                    slk_start(int, int *);
extern int                    slk_touch(void);
extern int                    socket (int, int, int);
extern void *                 sprayproc_clear_1(/* ??? */);
extern spraycumul *           sprayproc_get_1(/* ??? */);
extern void *                 sprayproc_spray_1(/* ??? */);
extern int                    sprintf(char *, const char *, ...);
extern void                   sputl(long int, char *);
extern double                 sqrt(double);
extern float                  sqrtf(float);
extern void                   srand(unsigned int);
extern void                   srand48(long int);
extern void                   srandom(int);
extern int                    sscanf(const char *, const char *, ...);
extern int (*                 ssignal(int, int (*) (int))) (int);
extern int                    start_color(void);
extern int                    stat(const char *, struct stat *);
extern int                    statfs(const char *, struct statfs *, int, int);
extern int                    statvfs(const char *, struct statvfs *);
extern int                    step(const char *, const char *);
extern int                    stime(const time_t *);
extern struct netbuf *        stoa(char *, struct netbuf *);
extern void                   store(datum, datum);
extern char *                 strcadd(char *, const char *);
extern int                    strcasecmp(const char *, const char *);
extern char *                 strcat(char *, const char *);
extern char *                 strccpy(char *, const char *);
extern char *                 strchr(const char *, int);
extern void                   strclearctty(/* ??? */);
extern void                   strclearpg(/* ??? */);
extern void                   strclearsid(/* ??? */);
extern int                    strcmp(const char *, const char *);
extern int                    strcoll(const char *, const char *);
extern char *                 strcpy(char *, const char *);
extern size_t                 strcspn(const char *, const char *);
extern char *                 strdup(const char *);
extern char *                 streadd(char *, const char *, const char *);
extern char *                 strecpy(char *, const char *, const char *);
extern char *                 strerror(int);
extern int                    strfind(const char *, const char *);
extern size_t                 strftime(char *, size_t, const char *, const struct tm *);
extern size_t                 strlen(const char *);
extern int                    strncasecmp(const char *, const char *, size_t);
extern char *                 strncat(char *, const char *, size_t);
extern int                    strncmp(const char *, const char *, size_t);
extern char *                 strncpy(char *, const char *, size_t);
extern char *                 strpbrk(const char *, const char *);
extern char *                 strrchr(const char *, int);
extern char *                 strrspn(const char *, const char *);
extern size_t                 strspn(const char *, const char *);
extern char *                 strstr(const char *, const char *);
extern double                 strtod(const char *, char **);
extern char *                 strtok(char *, const char *);
extern long int               strtol(const char *, char **, int);
extern long unsigned int      strtoul(const char *, char **, int);
extern char *                 strtrns(const char *, const char *, const char *, char *);
extern size_t                 strxfrm(char *, const char *, size_t);
extern WINDOW *               subpad(WINDOW *, int, int, int, int);
extern WINDOW *               subwin(WINDOW *, int, int, int, int);
extern int                    svc_create(/* ??? */);
extern SVCXPRT *              svc_fd_create(/* ??? */);
extern void                   svc_getreqset(/* ??? */);
extern SVCXPRT *              svc_raw_create(/* ??? */);
extern int                    svc_reg(/* ??? */);
extern SVCXPRT *              svc_tli_create(/* ??? */);
extern SVCXPRT *              svc_tp_create(/* ??? */);
extern void                   svc_unreg(/* ??? */);
extern SVCXPRT *              svc_vc_create(/* ??? */);
extern void                   svcerr_systemerr(/* ??? */);
extern SVCXPRT *              svcfd_create(/* ??? */);
extern SVCXPRT *              svcraw_create(/* ??? */);
extern SVCXPRT *              svctcp_create(/* ??? */);
extern SVCXPRT *              svcudp_bufcreate(/* ??? */);
extern SVCXPRT *              svcudp_create(/* ??? */);
extern void                   swab(const char *, char *, int);
extern int                    swapcontext(ucontext_t *, ucontext_t *);
extern int                    symlink(const char *, const char *);
extern void                   sync(void);
extern int                    syncok(WINDOW *, int);
extern int                    syscall(int, ...);
extern long int               sysconf(int);
extern int                    sysfs(int, ...);
extern int                    sysinfo(int, char *, long int);
extern int                    system(const char *);
extern char *                 taddr2uaddr(struct netconfig *, struct netbuf *);
extern double                 tan(double);
extern float                  tanf(float);
extern double                 tanh(double);
extern float                  tanhf(float);
extern int                    tcdrain(int);
extern int                    tcflow(int, int);
extern int                    tcflush(int, int);
extern int                    tcgetattr(int, struct termios *);
extern pid_t                  tcgetpgrp(int);
extern pid_t                  tcgetsid(int);
extern int                    tcsendbreak(int, int);
extern int                    tcsetattr(int, int, const struct termios *);
extern int                    tcsetpgrp(int, pid_t);
extern void *                 tdelete(const void *, void **, int (*) (const void *, const void *));
extern long int               telldir(DIR *);
extern char *                 tempnam(const char *, const char *);
extern chtype                 termattrs(void);
extern void                   termerr(void);
extern char *                 termname(void);
extern void *                 tfind(const void *, void *const *, int (*) (const void *, const void *));
extern int                    tgetent(char *, char *);
extern int                    tgetflag(char *);
extern int                    tgetnum(char *);
extern char *                 tgetstr(char *, char **);
extern char *                 tgoto(char *, int, int);
extern char *                 tigetstr(char *);
extern time_t                 time(time_t *);
extern clock_t                times(struct tms *);
extern char *                 timezone(int, int);
extern void                   tinputfd(int);
extern FILE *                 tmpfile(void);
extern char *                 tmpnam(char *);
extern int                    toascii(int);
extern int                    tolower(int);
extern int                    top_panel(PANEL *);
extern int                    top_row(MENU *);
extern int                    touchline(WINDOW *, int, int);
extern int                    touchwin(WINDOW *);
extern int                    toupper(int);
extern char *                 tparm(/* ??? */);
extern int                    tputs(char *, int, int (*) (char));
extern int                    traceoff(void);
extern int                    traceon(void);
extern int                    truncate(const char *, off_t);
extern void *                 tsearch(const void *, void **, int (*) (const void *, const void *));
extern char *                 ttyname(int);
extern int                    ttyslot(void);
extern void                   twalk(void *, void (*) (void *, VISIT, int));
extern int                    typeahead(int);
extern void                   tzset(void);
extern struct netbuf *        uaddr2taddr(struct netconfig *, char *);
extern int                    uadmin(int, int, int);
extern unsigned               ualarm(unsigned, unsigned);
extern int                    ulckpwdf(void);
extern long int               ulimit(int, ...);
extern mode_t                 umask(mode_t);
extern int                    umount(const char *);
extern int                    uname(struct utsname *);
extern char *                 unctrl(int);
extern void                   undial(int);
extern int                    ungetc(int, FILE *);
extern int                    ungetch(int);
extern int                    unlink(const char *);
extern int                    unordered(double, double);
extern int                    unpost_form(FORM *);
extern int                    unpost_menu(MENU *);
extern int                    unremio(/* ??? */);
extern int                    untouchwin(WINDOW *);
extern void                   update_panels(void);
extern void                   updwtmp(const char *, struct utmp *);
extern void                   updwtmpx(const char *, struct utmpx *);
extern void                   use_env(int);
extern unsigned               usleep(unsigned);
extern int                    ustat(dev_t, struct ustat *);
extern int                    utime(const char *, const struct utimbuf *);
extern int                    utmpname(const char *);
extern int                    utmpxname(const char *);
extern void                   va_end(__gnuc_va_list);
extern int                    vadvise(int);
extern void *                 valloc(size_t);
extern pid_t                  vfork(void);
extern int                    vfprintf(FILE *, const char *, __gnuc_va_list);
extern int                    vhangup(void);
extern int                    vid32attr(chtype);
extern int                    vid32puts(chtype, int (*) (char));
extern void                   vidupdate(chtype, chtype, int (*) (char));
extern int                    vn_close(/* ??? */);
extern int                    vprintf(const char *, __gnuc_va_list);
extern int                    vsprintf(char *, const char *, __gnuc_va_list);
extern int                    vwprintw(WINDOW *, char *, void *);
extern int                    vwscanw(WINDOW *, char *, void *);
extern int                    w32addch(WINDOW *, chtype);
extern int                    w32attroff(WINDOW *, chtype);
extern int                    w32attron(WINDOW *, chtype);
extern int                    w32attrset(WINDOW *, chtype);
extern int                    w32echochar(WINDOW *, chtype);
extern int                    w32insch(WINDOW *, chtype);
extern int                    waddchnstr(WINDOW *, chtype *, int);
extern int                    waddnstr(WINDOW *, char *, int);
extern int                    waddstr(WINDOW *, char *);
extern pid_t                  wait(wait_arg_t *);
extern pid_t                  wait3(union wait *, int, struct rusage *);
extern int                    waitid(idtype_t, id_t, siginfo_t *, int);
extern pid_t                  waitpid(pid_t, int *, int);
extern void *                 wallproc_wall_1(/* ??? */);
extern int                    wbkgd(WINDOW *, chtype);
extern void                   wbkgdset(WINDOW *, chtype);
extern int                    wborder(WINDOW *, chtype, chtype, chtype, chtype, chtype, chtype, chtype, chtype);
extern int                    wclear(WINDOW *);
extern int                    wclrtobot(WINDOW *);
extern int                    wclrtoeol(WINDOW *);
extern size_t                 wcstombs(char *, const wchar_t *, size_t);
extern int                    wctomb(char *, wchar_t);
extern void                   wcursyncup(WINDOW *);
extern int                    wdelch(WINDOW *);
extern int                    wdeleteln(WINDOW *);
extern int                    werase(WINDOW *);
extern int                    wgetch(WINDOW *);
extern int                    wgetnstr(WINDOW *, char *, int);
extern int                    wgetstr(WINDOW *, char *);
extern int                    whline(WINDOW *, chtype, int);
extern chtype                 winch(WINDOW *);
extern int                    winchnstr(WINDOW *, chtype *, int);
extern int                    winchstr(WINDOW *, chtype *);
extern int                    winnstr(WINDOW *, char *, int);
extern int                    winsdelln(WINDOW *, int);
extern int                    winsertln(WINDOW *);
extern int                    winsnstr(WINDOW *, char *, int);
extern int                    winstr(WINDOW *, char *);
extern int                    wisprint(wchar_t);
extern void                   wmouse_position(WINDOW *, int *, int *);
extern int                    wmove(WINDOW *, int, int);
extern int                    wnoutrefresh(WINDOW *);
extern int                    wprintw(WINDOW *, ...);
extern int                    wredrawln(WINDOW *, int, int);
extern int                    wrefresh(WINDOW *);
extern ssize_t                write(int, const void *, size_t);
extern int                    wscanw(WINDOW *, ...);
extern int                    wscrl(WINDOW *, int);
extern int                    wsetscrreg(WINDOW *, int, int);
extern int                    wstandend(WINDOW *);
extern int                    wstandout(WINDOW *);
extern void                   wsyncdown(WINDOW *);
extern void                   wsyncup(WINDOW *);
extern void                   wtimeout(WINDOW *, int);
extern int                    wtouchln(WINDOW *, int, int, int);
extern int                    wvline(WINDOW *, chtype, int);
extern bool                   xdr_datum(/* ??? */);
extern int                    xdr_double(/* ??? */);
extern int                    xdr_exports(/* ??? */);
extern int                    xdr_fhstatus(/* ??? */);
extern int                    xdr_float(/* ??? */);
extern int                    xdr_keybuf(/* ??? */);
extern int                    xdr_mountlist(/* ??? */);
extern int                    xdr_netbuf(/* ??? */);
extern int                    xdr_path(/* ??? */);
extern int                    xdr_pmap(/* ??? */);
extern int                    xdr_pmaplist(/* ??? */);
extern int                    xdr_pointer(/* ??? */);
extern int                    xdr_reference(/* ??? */);
extern int                    xdr_rmtcall_args(/* ??? */);
extern int                    xdr_rmtcallres(/* ??? */);
extern int                    xdr_rpcb(/* ??? */);
extern int                    xdr_rpcb_rmtcallargs(/* ??? */);
extern int                    xdr_rpcb_rmtcallres(/* ??? */);
extern int                    xdr_rpcblist(/* ??? */);
extern int                    xdr_sprayarr(/* ??? */);
extern int                    xdr_spraycumul(/* ??? */);
extern int                    xdr_spraytimeval(/* ??? */);
extern int                    xdr_u_char(/* ??? */);
extern int                    xdr_utmparr(/* ??? */);
extern int                    xdr_utmpidlearr(/* ??? */);
extern int                    xdr_vector(/* ??? */);
extern int                    xdr_yp_buf(/* ??? */);
extern bool                   xdr_yp_inaddr(/* ??? */);
extern bool                   xdr_ypall(/* ??? */);
extern int                    xdr_ypdelete_args(/* ??? */);
extern bool                   xdr_ypdomain_wrap_string(/* ??? */);
extern bool                   xdr_ypmap_parms(/* ??? */);
extern bool                   xdr_ypmap_wrap_string(/* ??? */);
extern bool                   xdr_ypowner_wrap_string(/* ??? */);
extern bool                   xdr_yppushresp_xfr(/* ??? */);
extern bool                   xdr_ypreq_key(/* ??? */);
extern bool                   xdr_ypreq_newxfr(/* ??? */);
extern bool                   xdr_ypreq_nokey(/* ??? */);
extern bool                   xdr_ypreq_xfr(/* ??? */);
extern bool                   xdr_ypresp_key_val(/* ??? */);
extern bool                   xdr_ypresp_maplist(/* ??? */);
extern bool                   xdr_ypresp_master(/* ??? */);
extern bool                   xdr_ypresp_order(/* ??? */);
extern bool                   xdr_ypresp_val(/* ??? */);
extern int                    xdr_ypupdate_args(/* ??? */);
extern void                   xdrrec_create(/* ??? */);
extern int                    xdrrec_endofrecord(/* ??? */);
extern int                    xdrrec_eof(/* ??? */);
extern int                    xdrrec_skiprecord(/* ??? */);
extern void                   xdrstdio_create(/* ??? */);
extern void                   xprt_register(/* ??? */);
extern void                   xprt_unregister(/* ??? */);
extern double                 y0(double);
extern double                 y1(double);
extern double                 yn(int, double);
extern int                    yp_all(char *, char *, struct ypall_callback *);
extern int                    yp_bind(const char *);
extern int                    yp_first(char *, char *, char **, int *, char **, int *);
extern int                    yp_get_default_domain(char **);
extern int                    yp_master(char *, char *, char **);
extern int                    yp_match(char *, char *, char *, int, char **, int *);
extern int                    yp_next(char *, char *, char *, int, char **, int *, char **, int *);
extern int                    yp_order(char *, char *, int *);
extern void                   yp_unbind(const char *);
extern char *                 yperr_string(int);
extern int                    ypprot_err(unsigned int);
extern u_int *                ypu_change_1(/* ??? */);
extern u_int *                ypu_delete_1(/* ??? */);
extern u_int *                ypu_insert_1(/* ??? */);
extern u_int *                ypu_store_1(/* ??? */);
