|
auth_gss
auth_gss
/*
* Program: GSSAPI authenticator
*
* Author: Mark Crispin
* Networks and Distributed Computing
* Computing & Communications
* University of Washington
* Administration Building, AG-44
* Seattle, WA 98195
* Internet: MRC@CAC.Washington.EDU
*
* Date: 12 January 1998
* Last Edited: 15 March 2004
*
* The IMAP toolkit provided in this Distribution is
* Copyright 1988-2004 University of Washington.
* The full text of our legal notices is contained in the file called
* CPYRIGHT, included with this Distribution.
*/
long auth_gssapi_valid (void);
long auth_gssapi_client (authchallenge_t challenger,authrespond_t responder,
char *service,NETMBX *mb,void *stream,
unsigned long *trial,char *user);
long auth_gssapi_client_work (authchallenge_t challenger,gss_buffer_desc chal,
authrespond_t responder,char *service,NETMBX *mb,
void *stream,char *user,kinit_t ki);
char *auth_gssapi_server (authresponse_t responder,int argc,char *argv[]);
AUTHENTICATOR auth_gss = {
AU_SECURE | AU_AUTHUSER, /* secure authenticator */
"GSSAPI", /* authenticator name */
auth_gssapi_valid, /* check if valid */
auth_gssapi_client, /* client method */
auth_gssapi_server, /* server method */
NIL /* next authenticator */
};
#define AUTH_GSSAPI_P_NONE 1
#define AUTH_GSSAPI_P_INTEGRITY 2
#define AUTH_GSSAPI_P_PRIVACY 4
#define AUTH_GSSAPI_C_MAXSIZE 8192
#define SERVER_LOG(x,y) syslog (LOG_ALERT,x,y)
/* Check if GSSAPI valid on this system
* Returns: T if valid, NIL otherwise
*/
long auth_gssapi_valid (void)
{
char tmp[MAILTMPLEN];
OM_uint32 smn;
gss_buffer_desc buf;
gss_name_t name;
/* make service name */
sprintf (tmp,"%s@%s",(char *) mail_parameters (NIL,GET_SERVICENAME,NIL),
mylocalhost ());
buf.length = strlen (buf.value = tmp);
/* see if can build a name */
if (gss_import_name (&smn,&buf,GSS_C_NT_HOSTBASED_SERVICE,&name) !=
GSS_S_COMPLETE) return NIL;
/* remove server method if no keytab */
if (!kerberos_server_valid ()) auth_gss.server = NIL;
gss_release_name (&smn,&name);/* finished with name */
return LONGT;
}
/* Client authenticator
* Accepts: challenger function
* responder function
* SASL service name
* parsed network mailbox structure
* stream argument for functions
* pointer to current trial count
* returned user name
* Returns: T if success, NIL otherwise, number of trials incremented if retry
*/
long auth_gssapi_client (authchallenge_t challenger,authrespond_t responder,
char *service,NETMBX *mb,void *stream,
unsigned long *trial,char *user)
{
gss_buffer_desc chal;
kinit_t ki = (kinit_t) mail_parameters (NIL,GET_KINIT,NIL);
long ret = NIL;
*trial = 65535; /* never retry */
/* get initial (empty) challenge */
if (chal.value = (*challenger) (stream,(unsigned long *) &chal.length)) {
if (chal.length) { /* abort if challenge non-empty */
mm_log ("Server bug: non-empty initial GSSAPI challenge",WARN);
(*responder) (stream,NIL,0);
ret = LONGT; /* will get a BAD response back */
}
else if (mb->authuser[0] && strcmp (mb->authuser,myusername ())) {
mm_log ("Can't use Kerberos: invalid /authuser",WARN);
(*responder) (stream,NIL,0);
ret = LONGT; /* will get a BAD response back */
}
else ret = auth_gssapi_client_work (challenger,chal,responder,service,mb,
stream,user,ki);
}
return ret;
}
/* Client authenticator worker function
* Accepts: challenger function
* responder function
* SASL service name
* parsed network mailbox structure
* stream argument for functions
* returned user name
* kinit function pointer if should retry with kinit
* Returns: T if success, NIL otherwise
*/
long auth_gssapi_client_work (authchallenge_t challenger,gss_buffer_desc chal,
authrespond_t responder,char *service,NETMBX *mb,
void *stream,char *user,kinit_t ki)
{
char tmp[MAILTMPLEN];
OM_uint32 smj,smn,dsmj,dsmn;
OM_uint32 mctx = 0;
gss_ctx_id_t ctx = GSS_C_NO_CONTEXT;
gss_buffer_desc resp,buf;
long i;
int conf;
gss_qop_t qop;
gss_name_t crname = NIL;
blocknotify_t bn = (blocknotify_t) mail_parameters (NIL,GET_BLOCKNOTIFY,NIL);
void *data;
long ret = NIL;
sprintf (tmp,"%s@%s",service,mb->host);
buf.length = strlen (buf.value = tmp);
/* get service name */
if (gss_import_name (&smn,&buf,GSS_C_NT_HOSTBASED_SERVICE,&crname) !=
GSS_S_COMPLETE) {
mm_log ("Can't import Kerberos service name",WARN);
(*responder) (stream,NIL,0);
}
else {
data = (*bn) (BLOCK_SENSITIVE,NIL);
/* negotiate with KDC */
smj = gss_init_sec_context (&smn,GSS_C_NO_CREDENTIAL,&ctx,crname,NIL,
GSS_C_MUTUAL_FLAG | GSS_C_REPLAY_FLAG,0,
GSS_C_NO_CHANNEL_BINDINGS,GSS_C_NO_BUFFER,NIL,
&resp,NIL,NIL);
(*bn) (BLOCK_NONSENSITIVE,data);
/* while continuation needed */
while (smj == GSS_S_CONTINUE_NEEDED) {
if (chal.value) fs_give ((void **) &chal.value);
/* send response, get next challenge */
i = (*responder) (stream,resp.value,resp.length) &&
(chal.value = (*challenger) (stream,(unsigned long *) &chal.length));
gss_release_buffer (&smn,&resp);
if (i) { /* negotiate continuation with KDC */
data = (*bn) (BLOCK_SENSITIVE,NIL);
switch (smj = /* make sure continuation going OK */
gss_init_sec_context (&smn,GSS_C_NO_CREDENTIAL,&ctx,
crname,GSS_C_NO_OID,
GSS_C_MUTUAL_FLAG|GSS_C_REPLAY_FLAG,0,
GSS_C_NO_CHANNEL_BINDINGS,&chal,NIL,
&resp,NIL,NIL)) {
case GSS_S_CONTINUE_NEEDED:
case GSS_S_COMPLETE:
break;
default: /* error, don't need context any more */
gss_delete_sec_context (&smn,&ctx,NIL);
}
(*bn) (BLOCK_NONSENSITIVE,data);
}
else { /* error in continuation */
mm_log ("Error in negotiating Kerberos continuation",WARN);
(*responder) (stream,NIL,0);
/* don't need context any more */
gss_delete_sec_context (&smn,&ctx,NIL);
break;
}
}
switch (smj) { /* done - deal with final condition */
case GSS_S_COMPLETE:
if (chal.value) fs_give ((void **) &chal.value);
/* get prot mechanisms and max size */
if ((*responder) (stream,resp.value ? resp.value : "",resp.length) &&
(chal.value = (*challenger) (stream,(unsigned long *)&chal.length))&&
(gss_unwrap (&smn,ctx,&chal,&resp,&conf,&qop) == GSS_S_COMPLETE) &&
(resp.length >= 4) && (*((char *) resp.value) & AUTH_GSSAPI_P_NONE)){
/* make copy of flags and length */
memcpy (tmp,resp.value,4);
gss_release_buffer (&smn,&resp);
/* no session protection */
tmp[0] = AUTH_GSSAPI_P_NONE;
/* install user name */
strcpy (tmp+4,strcpy (user,mb->user[0] ? mb->user : myusername ()));
buf.value = tmp; buf.length = strlen (user) + 4;
/* successful negotiation */
if (gss_wrap (&smn,ctx,NIL,qop,&buf,&conf,&resp) == GSS_S_COMPLETE) {
if ((*responder) (stream,resp.value,resp.length)) ret = T;
gss_release_buffer (&smn,&resp);
}
else {
mm_log ("Unknown gss_wrap error",WARN);
(*responder) (stream,NIL,0);
}
}
/* flush final challenge */
if (chal.value) fs_give ((void **) &chal.value);
/* don't need context any more */
gss_delete_sec_context (&smn,&ctx,NIL);
break;
case GSS_S_CREDENTIALS_EXPIRED:
if (chal.value) fs_give ((void **) &chal.value);
/* retry if application kinits */
if (ki && (*ki) (mb->host,"Kerberos credentials expired"))
ret = auth_gssapi_client_work (challenger,chal,responder,service,mb,
stream,user,NIL);
else { /* application can't kinit */
sprintf (tmp,"Kerberos credentials expired (try running kinit) for %s",
mb->host);
mm_log (tmp,WARN);
(*responder) (stream,NIL,0);
}
break;
case GSS_S_FAILURE:
if (chal.value) fs_give ((void **) &chal.value);
do switch (dsmj = gss_display_status (&dsmn,smn,GSS_C_MECH_CODE,
GSS_C_NO_OID,&mctx,&resp)) {
case GSS_S_COMPLETE: /* end of message, can kinit? */
if (ki && kerberos_try_kinit (smn) &&
(*ki) (mb->host,(char *) resp.value)) {
gss_release_buffer (&dsmn,&resp);
ret = auth_gssapi_client_work (challenger,chal,responder,service,mb,
stream,user,NIL);
break; /* done */
}
else (*responder) (stream,NIL,0);
case GSS_S_CONTINUE_NEEDED:
sprintf (tmp,kerberos_try_kinit (smn) ?
"Kerberos error: %.80s (try running kinit) for %.80s" :
"GSSAPI failure: %s for %.80s",(char *) resp.value,mb->host);
mm_log (tmp,WARN);
gss_release_buffer (&dsmn,&resp);
} while (dsmj == GSS_S_CONTINUE_NEEDED);
break;
default: /* miscellaneous errors */
if (chal.value) fs_give ((void **) &chal.value);
do switch (dsmj = gss_display_status (&dsmn,smj,GSS_C_GSS_CODE,
GSS_C_NO_OID,&mctx,&resp)) {
case GSS_S_COMPLETE:
mctx = 0;
case GSS_S_CONTINUE_NEEDED:
sprintf (tmp,"Unknown GSSAPI failure: %s",(char *) resp.value);
mm_log (tmp,WARN);
gss_release_buffer (&dsmn,&resp);
}
while (dsmj == GSS_S_CONTINUE_NEEDED);
do switch (dsmj = gss_display_status (&dsmn,smn,GSS_C_MECH_CODE,
GSS_C_NO_OID,&mctx,&resp)) {
case GSS_S_COMPLETE:
case GSS_S_CONTINUE_NEEDED:
sprintf (tmp,"GSSAPI mechanism status: %s",(char *) resp.value);
mm_log (tmp,WARN);
gss_release_buffer (&dsmn,&resp);
}
while (dsmj == GSS_S_CONTINUE_NEEDED);
(*responder) (stream,NIL,0);
break;
}
/* finished with credentials name */
if (crname) gss_release_name (&smn,&crname);
}
return ret; /* return status */
}
/* Server authenticator
* Accepts: responder function
* argument count
* argument vector
* Returns: authenticated user name or NIL
*/
char *auth_gssapi_server (authresponse_t responder,int argc,char *argv[])
{
char *ret = NIL;
char tmp[MAILTMPLEN];
unsigned long maxsize = htonl (AUTH_GSSAPI_C_MAXSIZE);
int conf;
OM_uint32 smj,smn,dsmj,dsmn,flags;
OM_uint32 mctx = 0;
gss_name_t crname,name;
gss_OID mech;
gss_buffer_desc chal,resp,buf;
gss_cred_id_t crd;
gss_ctx_id_t ctx = GSS_C_NO_CONTEXT;
gss_qop_t qop = GSS_C_QOP_DEFAULT;
/* make service name */
sprintf (tmp,"%s@%s",(char *) mail_parameters (NIL,GET_SERVICENAME,NIL),
tcp_serverhost ());
buf.length = strlen (buf.value = tmp);
/* acquire credentials */
if ((gss_import_name (&smn,&buf,GSS_C_NT_HOSTBASED_SERVICE,&crname)) ==
GSS_S_COMPLETE) {
if ((smj = gss_acquire_cred (&smn,crname,0,NIL,GSS_C_ACCEPT,&crd,NIL,NIL))
== GSS_S_COMPLETE) {
if (resp.value = (*responder) ("",0,(unsigned long *) &resp.length)) {
do { /* negotiate authentication */
smj = gss_accept_sec_context (&smn,&ctx,crd,&resp,
GSS_C_NO_CHANNEL_BINDINGS,&name,&mech,
&chal,&flags,NIL,NIL);
/* don't need response any more */
fs_give ((void **) &resp.value);
switch (smj) { /* how did it go? */
case GSS_S_COMPLETE: /* successful */
case GSS_S_CONTINUE_NEEDED:
if (chal.value) { /* send challenge, get next response */
resp.value = (*responder) (chal.value,chal.length,
(unsigned long *) &resp.length);
gss_release_buffer (&smn,&chal);
}
break;
}
}
while (resp.value && resp.length && (smj == GSS_S_CONTINUE_NEEDED));
/* successful exchange? */
if ((smj == GSS_S_COMPLETE) &&
(gss_display_name (&smn,name,&buf,&mech) == GSS_S_COMPLETE)) {
/* send security and size */
memcpy (resp.value = tmp,(void *) &maxsize,resp.length = 4);
tmp[0] = AUTH_GSSAPI_P_NONE;
if (gss_wrap (&smn,ctx,NIL,qop,&resp,&conf,&chal) == GSS_S_COMPLETE){
resp.value = (*responder) (chal.value,chal.length,
(unsigned long *) &resp.length);
gss_release_buffer (&smn,&chal);
if (gss_unwrap (&smn,ctx,&resp,&chal,&conf,&qop)==GSS_S_COMPLETE) {
/* client request valid */
if (chal.value && (chal.length > 4) &&
(chal.length < (MAILTMPLEN - 1)) &&
memcpy (tmp,chal.value,chal.length) &&
(tmp[0] & AUTH_GSSAPI_P_NONE)) {
/* tie off authorization ID */
tmp[chal.length] = '\0';
ret = kerberos_login (tmp+4,buf.value,argc,argv);
}
/* done with user name */
gss_release_buffer (&smn,&chal);
}
/* finished with response */
fs_give ((void **) &resp.value);
}
/* don't need name buffer any more */
gss_release_buffer (&smn,&buf);
}
/* don't need client name any more */
gss_release_name (&smn,&name);
/* don't need context any more */
if (ctx != GSS_C_NO_CONTEXT) gss_delete_sec_context (&smn,&ctx,NIL);
}
/* finished with credentials */
gss_release_cred (&smn,&crd);
}
else { /* can't acquire credentials! */
if (gss_display_name (&dsmn,crname,&buf,&mech) == GSS_S_COMPLETE)
SERVER_LOG ("Failed to acquire credentials for %s",buf.value);
if (smj != GSS_S_FAILURE) do
switch (dsmj = gss_display_status (&dsmn,smj,GSS_C_GSS_CODE,
GSS_C_NO_OID,&mctx,&resp)) {
case GSS_S_COMPLETE:
mctx = 0;
case GSS_S_CONTINUE_NEEDED:
SERVER_LOG ("Unknown GSSAPI failure: %s",resp.value);
gss_release_buffer (&dsmn,&resp);
}
while (dsmj == GSS_S_CONTINUE_NEEDED);
do switch (dsmj = gss_display_status (&dsmn,smn,GSS_C_MECH_CODE,
GSS_C_NO_OID,&mctx,&resp)) {
case GSS_S_COMPLETE:
case GSS_S_CONTINUE_NEEDED:
SERVER_LOG ("GSSAPI mechanism status: %s",resp.value);
gss_release_buffer (&dsmn,&resp);
}
while (dsmj == GSS_S_CONTINUE_NEEDED);
}
/* finished with credentials name */
gss_release_name (&smn,&crname);
}
return ret; /* return status */
}
PHP Hosting plan
/*
* $Id: efunc.h,v 4.97 2004/06/15 22:22:35 hubert Exp $
*
* Program: Pine's composer and pico's function declarations
*
*
* Michael Seibel
* Networks and Distributed Computing
* Computing and Communications
* University of Washington
* Administration Builiding, AG-44
* Seattle, Washington, 98195, USA
* Internet: mikes@cac.washington.edu
*
* Please address all bugs and comments to "pine-bugs@cac.washington.edu"
*
*
* Pine and Pico are registered trademarks of the University of Washington.
* No commercial use of these trademarks may be made without prior written
* permission of the University of Washington.
*
* Pine, Pico, and Pilot software and its included text are Copyright
* 1989-2004 by the University of Washington.
*
* The full text of our legal notices is contained in the file called
* CPYRIGHT, included with this distribution.
*
*/
/* EFUNC.H: MicroEMACS function declarations and names
This file list all the C code functions used by MicroEMACS
and the names to use to bind keys to them. To add functions,
declare it here in both the extern function list and the name
binding table.
Update History:
Daniel Lawrence
*/
#ifndef EFUNC_H
#define EFUNC_H
/* External function declarations */
/* attach.c */
extern int AskAttach PROTO((char *, LMLIST **));
extern int SyncAttach PROTO((void));
extern int intag PROTO((char *, int));
extern char *prettysz PROTO((off_t));
extern int AttachError PROTO((void));
extern char *QuoteAttach PROTO((char *));
/* basic.c */
extern int gotobol PROTO((int, int));
extern int backchar PROTO((int, int));
extern int gotoeol PROTO((int, int));
extern int forwchar PROTO((int, int));
extern int gotoline PROTO((int, int));
extern int gotobob PROTO((int, int));
extern int gotoeob PROTO((int, int));
extern int forwline PROTO((int, int));
extern int backline PROTO((int, int));
extern int gotobop PROTO((int, int));
extern int gotoeop PROTO((int, int));
extern int forwpage PROTO((int, int));
extern int backpage PROTO((int, int));
extern int scrollupline PROTO((int, int));
extern int scrolldownline PROTO((int, int));
extern int scrollto PROTO((int, int));
extern int setmark PROTO((int, int));
extern int swapmark PROTO((int, int));
extern int setimark PROTO((int, int));
extern int swapimark PROTO((int, int));
extern int mousepress PROTO((int, int));
/* bind.c */
extern int whelp PROTO((int, int));
extern int wscrollw PROTO((int, int, char **, int));
extern int normal PROTO((int, int (*)[2], int));
extern void rebindfunc PROTO((int (*)(int, int),int (*)(int, int)));
extern int bindtokey PROTO((int c, int (*) PROTO((int, int))));
/* browse.c */
extern int FileBrowse PROTO((char *, int, char *, int, char *, int,
LMLIST **));
extern int ResizeBrowser PROTO((void));
extern void set_browser_title PROTO((char *));
extern void zotlmlist PROTO((LMLIST *));
/* buffer.c */
extern int anycb PROTO((void));
extern struct BUFFER *bfind PROTO((char *, int, int));
extern int bclear PROTO((struct BUFFER *));
extern int packbuf PROTO((char **, int *, int));
extern void readbuf PROTO((char **));
/* composer.c */
extern int InitMailHeader PROTO((struct pico_struct *));
extern int ResizeHeader PROTO((void));
extern int HeaderEditor PROTO((int, int));
extern void PaintHeader PROTO((int, int));
extern void ArrangeHeader PROTO((void));
extern int ToggleHeader PROTO((int));
extern int HeaderLen PROTO((void));
extern int UpdateHeader PROTO((int));
extern int entry_line PROTO((int, int));
extern int call_builder PROTO((struct headerentry *, int *, char **));
extern void call_expander PROTO((void));
extern void ShowPrompt PROTO((void));
extern int packheader PROTO((void));
extern void zotheader PROTO((void));
extern void display_for_send PROTO((void));
extern VARS_TO_SAVE *save_pico_state PROTO((void));
extern void restore_pico_state PROTO((VARS_TO_SAVE *));
extern void free_pico_state PROTO((VARS_TO_SAVE *));
extern void HeaderPaintCursor PROTO((void));
extern void PaintBody PROTO((int));
/* display.c */
extern int vtinit PROTO((void));
extern int vtterminalinfo PROTO((int));
extern void vttidy PROTO((void));
extern void update PROTO((void));
extern void modeline PROTO((struct WINDOW *));
extern void movecursor PROTO((int, int));
extern void clearcursor PROTO((void));
extern void mlerase PROTO((void));
extern int mlyesno PROTO((char *, int));
extern int mlreply PROTO((char *, char *, int, int, EXTRAKEYS *));
extern int mlreplyd PROTO((char *, char *, int, int, EXTRAKEYS *));
extern void emlwrite PROTO((char *, void *));
extern int mlwrite PROTO((char *, void *));
extern void scrolldown PROTO((struct WINDOW *, int, int));
extern void scrollup PROTO((struct WINDOW *, int, int));
extern int doton PROTO((int *, unsigned int *));
extern int resize_pico PROTO((int, int));
extern void zotdisplay PROTO((void));
extern void pputc PROTO((int, int));
extern void pputs PROTO((char *, int));
extern void peeol PROTO((void));
extern CELL *pscr PROTO((int, int));
extern void pclear PROTO((int, int));
extern int pinsert PROTO((CELL));
extern int pdel PROTO((void));
extern void wstripe PROTO((int, int, char *, int));
extern void wkeyhelp PROTO((KEYMENU *));
extern void get_cursor PROTO((int *, int *));
/* file.c */
extern int fileread PROTO((int, int));
extern int insfile PROTO((int, int));
extern int readin PROTO((char *, int, int));
extern int filewrite PROTO((int, int));
extern int filesave PROTO((int, int));
extern int writeout PROTO((char *, int));
extern char *writetmp PROTO((int, char *));
extern int filename PROTO((int, int));
extern int in_oper_tree PROTO((char *));
/* fileio.c */
extern int ffropen PROTO((char *));
extern int ffputline PROTO((CELL *, int));
extern int ffgetline PROTO((char *, int, int *, int));
/* line.c */
extern struct LINE *lalloc PROTO((int));
extern void lfree PROTO((struct LINE *));
extern void lchange PROTO((int));
extern int linsert PROTO((int, int));
extern int geninsert PROTO((LINE **, int *, LINE *, int, int, int, long *));
extern int lnewline PROTO((void));
extern int ldelete PROTO((long, int (*) PROTO((int))));
extern int lisblank PROTO((struct LINE *));
extern void kdelete PROTO((void));
extern int kinsert PROTO((int));
extern int kremove PROTO((int));
extern int ksize PROTO((void));
extern void fdelete PROTO((void));
extern int finsert PROTO((int));
extern int fremove PROTO((int));
/* os.c */
extern int Raw PROTO((int));
extern void StartInverse PROTO((void));
extern void EndInverse PROTO((void));
extern int InverseState PROTO((void));
extern int StartBold PROTO((void));
extern void EndBold PROTO((void));
extern void StartUnderline PROTO((void));
extern void EndUnderline PROTO((void));
extern void xonxoff_proc PROTO((int));
extern void crlf_proc PROTO((int));
extern void intr_proc PROTO((int));
extern void flush_input PROTO((void));
extern void bit_strip_off PROTO((void));
extern void quit_char_off PROTO((void));
extern int ttisslow PROTO((void));
extern int input_ready PROTO((int));
extern int read_one_char PROTO((void));
extern SigType (*posix_signal PROTO((int, SigType (*)())))();
extern int posix_sigunblock PROTO((int));
extern int ttopen PROTO((void));
extern void ttresize PROTO((void));
extern int ttclose PROTO((void));
extern int ttputc PROTO((int));
extern int ttflush PROTO((void));
extern int ttgetc PROTO((int, int (*)(), void (*)()));
extern int simple_ttgetc PROTO((int (*)(), void (*)()));
extern void ttgetwinsz PROTO((int *, int *));
extern int GetKey PROTO((void));
extern int alt_editor PROTO((int, int));
extern void picosigs PROTO((void));
#ifdef JOB_CONTROL
extern int bktoshell PROTO((void));
#endif
extern int fallowc PROTO((int));
extern int fexist PROTO((char *, char *, off_t *));
extern int isdir PROTO((char *, long *, time_t *));
extern int can_access PROTO((char *, int));
extern char *gethomedir PROTO((int *));
extern int homeless PROTO((char *));
extern char *errstr PROTO((int));
extern char *getfnames PROTO((char *, char *, int *, char *));
extern void fioperr PROTO((int, char *));
extern void fixpath PROTO((char *, size_t));
extern char *pfnexpand PROTO((char *, size_t));
extern int compresspath PROTO((char *, char *, int));
extern void tmpname PROTO((char *, char *));
extern char *temp_nam PROTO((char *, char *));
extern char *temp_nam_ext PROTO((char *, char *, char *));
extern void makename PROTO((char *, char *));
extern int copy PROTO((char *, char *));
extern int ffwopen PROTO((char *, int));
extern int ffclose PROTO((void));
extern int ffelbowroom PROTO((void));
extern FILE *P_open PROTO((char *));
extern void P_close PROTO((FILE *));
extern int worthit PROTO((int *));
extern int o_insert PROTO((int));
extern int o_delete PROTO((void));
extern int pico_new_mail PROTO((void));
extern int time_to_check PROTO((void));
extern int sstrcasecmp PROTO((const QSType *, const QSType *));
extern int strucmp PROTO((char *, char *));
extern int struncmp PROTO((char *, char *, int));
extern void chkptinit PROTO((char *, int));
extern void set_collation PROTO((int, int));
extern int (*pcollator)();
extern COLOR_PAIR *new_color_pair PROTO((char *, char *));
extern COLOR_PAIR *pico_get_cur_color PROTO((void));
extern COLOR_PAIR *pico_get_rev_color PROTO((void));
extern COLOR_PAIR *pico_get_normal_color PROTO((void));
extern void free_color_pair PROTO((COLOR_PAIR **));
extern void pico_nfcolor PROTO((char *));
extern void pico_nbcolor PROTO((char *));
extern void pico_rfcolor PROTO((char *));
extern void pico_rbcolor PROTO((char *));
extern int pico_set_fg_color PROTO((char *));
extern int pico_set_bg_color PROTO((char *));
extern COLOR_PAIR *pico_set_colorp PROTO((COLOR_PAIR *, int));
extern COLOR_PAIR *pico_set_colors PROTO((char *, char *, int));
extern int pico_is_good_color PROTO((char *));
extern int pico_is_good_colorpair PROTO((COLOR_PAIR *));
extern void pico_set_nfg_color PROTO((void));
extern void pico_set_nbg_color PROTO((void));
extern void pico_set_normal_color PROTO((void));
extern int pico_usingcolor PROTO((void));
extern char *color_to_asciirgb PROTO((char *));
extern char *colorx PROTO((int));
extern char *color_to_canonical_name PROTO((char *));
extern int pico_count_in_color_table PROTO((void));
/* these color functions aren't needed for Windows */
extern int pico_hascolor PROTO((void));
extern void pico_toggle_color PROTO((int));
extern unsigned pico_get_color_options PROTO((void));
extern void pico_set_color_options PROTO((unsigned));
extern void pico_endcolor PROTO((void));
extern char *pico_get_last_fg_color PROTO((void));
extern char *pico_get_last_bg_color PROTO((void));
#ifdef MOUSE
extern unsigned long pico_mouse PROTO((unsigned, int, int));
#endif
/* pico.c */
extern int pico PROTO((struct pico_struct *));
extern void edinit PROTO((char *));
extern int execute PROTO((int, int, int));
extern int quickexit PROTO((int, int));
extern int abort_composer PROTO((int, int));
extern int suspend_composer PROTO((int, int));
extern int wquit PROTO((int, int));
extern int ctrlg PROTO((int, int));
extern int rdonly PROTO((void));
extern int pico_help PROTO((char **, char *, int));
extern void zotedit PROTO((void));
#ifdef _WINDOWS
int composer_file_drop PROTO((int, int, char *));
int pico_cursor PROTO((int, long));
#endif
/* random.c */
extern int showcpos PROTO((int, int));
extern int tab PROTO((int, int));
extern int newline PROTO((int, int));
extern int forwdel PROTO((int, int));
extern int backdel PROTO((int, int));
extern int killtext PROTO((int, int));
extern int yank PROTO((int, int));
extern COLOR_PAIR *pico_apply_rev_color PROTO((COLOR_PAIR *, int));
/* region.c */
extern int killregion PROTO((int, int));
extern int deleteregion PROTO((int, int));
extern int markregion PROTO((int));
extern void unmarkbuffer PROTO((void));
/* search.c */
extern int forwsearch PROTO((int, int));
extern int readpattern PROTO((char *, int));
extern int forscan PROTO((int *, char *, LINE *, int, int));
extern void chword PROTO((char *, char *));
/* spell.c */
#ifdef SPELLER
extern int spell PROTO((int, int));
#endif
/* window.c */
extern int pico_refresh PROTO((int, int));
extern void redraw_pico_for_callback();
/* word.c */
extern int wrapword PROTO((void));
extern int backword PROTO((int, int));
extern int forwword PROTO((int, int));
extern int fillpara PROTO((int, int));
extern int fillbuf PROTO((int, int));
extern int inword PROTO((void));
extern int quote_match PROTO((char *, LINE *, char *, int));
#endif /* EFUNC_H */
Page:
1
2
3
4
5
6
7
8
9
10
Cheap PHP Host
PostgreSQL PHP Hosting
PHP Hosting
JSP PHP Hosting
|