108 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			108 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C
		
	
	
	
| /*
 | |
|  * Copyright 1987, 1988 by MIT Student Information Processing Board
 | |
|  *
 | |
|  * Permission to use, copy, modify, and distribute this software and
 | |
|  * its documentation for any purpose is hereby granted, provided that
 | |
|  * the names of M.I.T. and the M.I.T. S.I.P.B. not be used in
 | |
|  * advertising or publicity pertaining to distribution of the software
 | |
|  * without specific, written prior permission.  M.I.T. and the
 | |
|  * M.I.T. S.I.P.B. make no representations about the suitability of
 | |
|  * this software for any purpose.  It is provided "as is" without
 | |
|  * express or implied warranty.
 | |
|  */
 | |
| 
 | |
| #ifndef _ss_ss_internal_h
 | |
| #define _ss_ss_internal_h __FILE__
 | |
| #include <stdio.h>
 | |
| #include <string.h>
 | |
| #include <stdlib.h>
 | |
| 
 | |
| #define PROTOTYPE(p) p
 | |
| typedef void * pointer;
 | |
| 
 | |
| #include "ss.h"
 | |
| 
 | |
| typedef char BOOL;
 | |
| 
 | |
| typedef struct _ss_abbrev_entry {
 | |
|     char *name;			/* abbrev name */
 | |
|     char **abbrev;		/* new tokens to insert */
 | |
|     unsigned int beginning_of_line : 1;
 | |
| } ss_abbrev_entry;
 | |
| 
 | |
| typedef struct _ss_abbrev_list {
 | |
|     int n_abbrevs;
 | |
|     ss_abbrev_entry *first_abbrev;
 | |
| } ss_abbrev_list;
 | |
| 
 | |
| typedef struct {
 | |
| /*    char *path; */
 | |
|     ss_abbrev_list abbrevs[127];
 | |
| } ss_abbrev_info;
 | |
| 
 | |
| typedef struct _ss_data {	/* init values */
 | |
|     /* this subsystem */
 | |
|     const char *subsystem_name;
 | |
|     const char *subsystem_version;
 | |
|     /* current request info */
 | |
|     int argc;
 | |
|     char **argv;		/* arg list */
 | |
|     char const *current_request; /* primary name */
 | |
|     /* info directory for 'help' */
 | |
|     char **info_dirs;
 | |
|     /* to be extracted by subroutines */
 | |
|     pointer info_ptr;		/* (void *) NULL */
 | |
|     /* for ss_listen processing */
 | |
|     char *prompt;
 | |
|     ss_request_table **rqt_tables;
 | |
|     ss_abbrev_info *abbrev_info;
 | |
|     struct {
 | |
| 	unsigned int  escape_disabled : 1,
 | |
| 		      abbrevs_disabled : 1;
 | |
|     } flags;
 | |
|     /*
 | |
|      * Dynamic usage of readline library if present
 | |
|      */
 | |
|     void *readline_handle;
 | |
|     void (*readline_shutdown)(struct _ss_data *info);
 | |
|     char *(*readline)(const char *);
 | |
|     void (*add_history)(const char *);
 | |
|     void (*redisplay)(void);
 | |
|     char **(*rl_completion_matches)(const char *,
 | |
| 				    char *(*completer)(const char *, int));
 | |
|     /* to get out */
 | |
|     int abort;			/* exit subsystem */
 | |
|     int exit_status;
 | |
| } ss_data;
 | |
| 
 | |
| #define CURRENT_SS_VERSION 1
 | |
| 
 | |
| #define	ss_info(sci_idx)	(_ss_table[sci_idx])
 | |
| #define	ss_current_request(sci_idx,code_ptr)	\
 | |
|      (*code_ptr=0,ss_info(sci_idx)->current_request)
 | |
| void ss_add_info_dir (int sci_idx, char *info_dir, int *code_ptr);
 | |
| void ss_delete_info_dir (int sci_idx, char *info_dir, int *code_ptr);
 | |
| int ss_execute_line(int sci_idx, char *line_ptr);
 | |
| char **ss_parse(int sci_idx, char *line_ptr, int *argc_ptr);
 | |
| ss_abbrev_info *ss_abbrev_initialize(char *, int *);
 | |
| void ss_page_stdin(void);
 | |
| void ss_list_requests(int, char const * const *, int, pointer);
 | |
| int ss_execute_command(int sci_idx, char *argv[]);
 | |
| int ss_pager_create(void);
 | |
| char *ss_safe_getenv(const char *arg);
 | |
| char **ss_rl_completion(const char *text, int start, int end);
 | |
| 
 | |
| extern ss_data **_ss_table;
 | |
| extern char *ss_et_msgs[];
 | |
| extern char *_ss_pager_name;
 | |
| 
 | |
| #ifdef USE_SIGPROCMASK
 | |
| /* fake sigmask, sigblock, sigsetmask */
 | |
| #include <signal.h>
 | |
| #define sigmask(x) (1L<<(x)-1)
 | |
| #define sigsetmask(x) sigprocmask(SIG_SETMASK,&x,NULL)
 | |
| static int _fake_sigstore;
 | |
| #define sigblock(x) (_fake_sigstore=x,sigprocmask(SIG_BLOCK,&_fake_sigstore,0))
 | |
| #endif
 | |
| #endif /* _ss_internal_h */
 |