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 void                   __eprintf(const char *);
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, gid_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(/* ??? */);
