|
Packit |
fd8b60 |
/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
Packit |
fd8b60 |
/*
|
|
Packit |
fd8b60 |
* Copyright 1987, 1988 by MIT Student Information Processing Board
|
|
Packit |
fd8b60 |
*
|
|
Packit |
fd8b60 |
* For copyright information, see copyright.h.
|
|
Packit |
fd8b60 |
*/
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
#ifndef _ss_ss_internal_h
|
|
Packit |
fd8b60 |
#define _ss_ss_internal_h __FILE__
|
|
Packit |
fd8b60 |
#include "k5-platform.h"
|
|
Packit |
fd8b60 |
#include <unistd.h>
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
typedef void * pointer;
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
#include "ss.h"
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
#if defined(__GNUC__)
|
|
Packit |
fd8b60 |
#define LOCAL_ALLOC(x) __builtin_alloca(x)
|
|
Packit |
fd8b60 |
#define LOCAL_FREE(x)
|
|
Packit |
fd8b60 |
#else
|
|
Packit |
fd8b60 |
#if defined(vax)
|
|
Packit |
fd8b60 |
#define LOCAL_ALLOC(x) alloca(x)
|
|
Packit |
fd8b60 |
#define LOCAL_FREE(x)
|
|
Packit |
fd8b60 |
extern pointer alloca (unsigned);
|
|
Packit |
fd8b60 |
#else
|
|
Packit |
fd8b60 |
#if defined(__HIGHC__) /* Barf! */
|
|
Packit |
fd8b60 |
pragma on(alloca);
|
|
Packit |
fd8b60 |
#define LOCAL_ALLOC(x) alloca(x)
|
|
Packit |
fd8b60 |
#define LOCAL_FREE(x)
|
|
Packit |
fd8b60 |
extern pointer alloca (unsigned);
|
|
Packit |
fd8b60 |
#else
|
|
Packit |
fd8b60 |
/* no alloca? */
|
|
Packit |
fd8b60 |
#define LOCAL_ALLOC(x) malloc(x)
|
|
Packit |
fd8b60 |
#define LOCAL_FREE(x) free(x)
|
|
Packit |
fd8b60 |
#endif
|
|
Packit |
fd8b60 |
#endif
|
|
Packit |
fd8b60 |
#endif /* LOCAL_ALLOC stuff */
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
typedef char BOOL;
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
typedef struct _ss_abbrev_entry {
|
|
Packit |
fd8b60 |
char *name; /* abbrev name */
|
|
Packit |
fd8b60 |
char **abbrev; /* new tokens to insert */
|
|
Packit |
fd8b60 |
unsigned int beginning_of_line : 1;
|
|
Packit |
fd8b60 |
} ss_abbrev_entry;
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
typedef struct _ss_abbrev_list {
|
|
Packit |
fd8b60 |
int n_abbrevs;
|
|
Packit |
fd8b60 |
ss_abbrev_entry *first_abbrev;
|
|
Packit |
fd8b60 |
} ss_abbrev_list;
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
typedef struct {
|
|
Packit |
fd8b60 |
/* char *path; */
|
|
Packit |
fd8b60 |
ss_abbrev_list abbrevs[127];
|
|
Packit |
fd8b60 |
} ss_abbrev_info;
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
typedef struct _ss_data { /* init values */
|
|
Packit |
fd8b60 |
/* this subsystem */
|
|
Packit |
fd8b60 |
char *subsystem_name;
|
|
Packit |
fd8b60 |
char *subsystem_version;
|
|
Packit |
fd8b60 |
/* current request info */
|
|
Packit |
fd8b60 |
int argc;
|
|
Packit |
fd8b60 |
char **argv; /* arg list */
|
|
Packit |
fd8b60 |
char const *current_request; /* primary name */
|
|
Packit |
fd8b60 |
/* info directory for 'help' */
|
|
Packit |
fd8b60 |
char **info_dirs;
|
|
Packit |
fd8b60 |
/* to be extracted by subroutines */
|
|
Packit |
fd8b60 |
pointer info_ptr; /* (void *) NULL */
|
|
Packit |
fd8b60 |
/* for ss_listen processing */
|
|
Packit |
fd8b60 |
char *prompt;
|
|
Packit |
fd8b60 |
ss_request_table **rqt_tables;
|
|
Packit |
fd8b60 |
ss_abbrev_info *abbrev_info;
|
|
Packit |
fd8b60 |
struct {
|
|
Packit |
fd8b60 |
unsigned int escape_disabled : 1,
|
|
Packit |
fd8b60 |
abbrevs_disabled : 1;
|
|
Packit |
fd8b60 |
} flags;
|
|
Packit |
fd8b60 |
/* to get out */
|
|
Packit |
fd8b60 |
int abort; /* exit subsystem */
|
|
Packit |
fd8b60 |
int exit_status;
|
|
Packit |
fd8b60 |
} ss_data;
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
#define CURRENT_SS_VERSION 1
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
#define ss_info(sci_idx) (_ss_table[sci_idx])
|
|
Packit |
fd8b60 |
#define ss_current_request(sci_idx,code_ptr) \
|
|
Packit |
fd8b60 |
(*code_ptr=0,ss_info(sci_idx)->current_request)
|
|
Packit |
fd8b60 |
void ss_unknown_function();
|
|
Packit |
fd8b60 |
void ss_delete_info_dir();
|
|
Packit |
fd8b60 |
char **ss_parse (int, char *, int *);
|
|
Packit |
fd8b60 |
ss_abbrev_info *ss_abbrev_initialize (char *, int *);
|
|
Packit |
fd8b60 |
void ss_page_stdin (void);
|
|
Packit |
fd8b60 |
int ss_pager_create (void);
|
|
Packit |
fd8b60 |
void ss_self_identify __SS_PROTO;
|
|
Packit |
fd8b60 |
void ss_subsystem_name __SS_PROTO;
|
|
Packit |
fd8b60 |
void ss_subsystem_version __SS_PROTO;
|
|
Packit |
fd8b60 |
void ss_unimplemented __SS_PROTO;
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
extern ss_data **_ss_table;
|
|
Packit |
fd8b60 |
extern char *ss_et_msgs[];
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
#ifndef HAVE_STDLIB_H
|
|
Packit |
fd8b60 |
extern pointer malloc (unsigned);
|
|
Packit |
fd8b60 |
extern pointer realloc (pointer, unsigned);
|
|
Packit |
fd8b60 |
extern pointer calloc (unsigned, unsigned);
|
|
Packit |
fd8b60 |
#endif
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
#if defined(USE_SIGPROCMASK) && !defined(POSIX_SIGNALS)
|
|
Packit |
fd8b60 |
/* fake sigmask, sigblock, sigsetmask */
|
|
Packit |
fd8b60 |
#include <signal.h>
|
|
Packit |
fd8b60 |
#ifdef sigmask
|
|
Packit |
fd8b60 |
#undef sigmask
|
|
Packit |
fd8b60 |
#endif
|
|
Packit |
fd8b60 |
#define sigmask(x) (1L<<(x)-1)
|
|
Packit |
fd8b60 |
#define sigsetmask(x) sigprocmask(SIG_SETMASK,&x,NULL)
|
|
Packit |
fd8b60 |
static int _fake_sigstore;
|
|
Packit |
fd8b60 |
#define sigblock(x) (_fake_sigstore=x,sigprocmask(SIG_BLOCK,&_fake_sigstore,0))
|
|
Packit |
fd8b60 |
#endif
|
|
Packit |
fd8b60 |
#endif /* _ss_internal_h */
|