119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/*
219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * Copyright 1987, 1988 by MIT Student Information Processing Board
319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project *
419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * Permission to use, copy, modify, and distribute this software and
519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * its documentation for any purpose is hereby granted, provided that
619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * the names of M.I.T. and the M.I.T. S.I.P.B. not be used in
719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * advertising or publicity pertaining to distribution of the software
819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * without specific, written prior permission.  M.I.T. and the
919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * M.I.T. S.I.P.B. make no representations about the suitability of
1019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * this software for any purpose.  It is provided "as is" without
1119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * express or implied warranty.
1219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project */
1319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
1419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#ifndef _ss_ss_internal_h
1519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define _ss_ss_internal_h __FILE__
1619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <stdio.h>
1719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <string.h>
1819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <stdlib.h>
1919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
2019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define PROTOTYPE(p) p
2119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projecttypedef void * pointer;
2219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
2319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include "ss.h"
2419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
2519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projecttypedef char BOOL;
2619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
2719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projecttypedef struct _ss_abbrev_entry {
2819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project    char *name;			/* abbrev name */
2919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project    char **abbrev;		/* new tokens to insert */
3019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project    unsigned int beginning_of_line : 1;
3119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project} ss_abbrev_entry;
3219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
3319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projecttypedef struct _ss_abbrev_list {
3419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project    int n_abbrevs;
3519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project    ss_abbrev_entry *first_abbrev;
3619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project} ss_abbrev_list;
3719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
3819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projecttypedef struct {
3919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/*    char *path; */
4019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project    ss_abbrev_list abbrevs[127];
4119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project} ss_abbrev_info;
4219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
4319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projecttypedef struct _ss_data {	/* init values */
4419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project    /* this subsystem */
4519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project    const char *subsystem_name;
4619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project    const char *subsystem_version;
4719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project    /* current request info */
4819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project    int argc;
4919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project    char **argv;		/* arg list */
5019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project    char const *current_request; /* primary name */
5119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project    /* info directory for 'help' */
5219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project    char **info_dirs;
5319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project    /* to be extracted by subroutines */
5419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project    pointer info_ptr;		/* (void *) NULL */
5519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project    /* for ss_listen processing */
5619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project    char *prompt;
5719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project    ss_request_table **rqt_tables;
5819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project    ss_abbrev_info *abbrev_info;
5919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project    struct {
6019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	unsigned int  escape_disabled : 1,
6119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		      abbrevs_disabled : 1;
6219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project    } flags;
6319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project    /*
6419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project     * Dynamic usage of readline library if present
6519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project     */
6619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project    void *readline_handle;
6719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project    void (*readline_shutdown)(struct _ss_data *info);
6819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project    char *(*readline)(const char *);
6919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project    void (*add_history)(const char *);
7019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project    void (*redisplay)(void);
7119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project    char **(*rl_completion_matches)(const char *,
7219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project				    char *(*completer)(const char *, int));
7319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project    /* to get out */
7419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project    int abort;			/* exit subsystem */
7519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project    int exit_status;
7619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project} ss_data;
7719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
7819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define CURRENT_SS_VERSION 1
7919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
8019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define	ss_info(sci_idx)	(_ss_table[sci_idx])
8119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define	ss_current_request(sci_idx,code_ptr)	\
8219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project     (*code_ptr=0,ss_info(sci_idx)->current_request)
8319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectvoid ss_add_info_dir (int sci_idx, char *info_dir, int *code_ptr);
8419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectvoid ss_delete_info_dir (int sci_idx, char *info_dir, int *code_ptr);
8519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectint ss_execute_line(int sci_idx, char *line_ptr);
8619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectchar **ss_parse(int sci_idx, char *line_ptr, int *argc_ptr);
8719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectss_abbrev_info *ss_abbrev_initialize(char *, int *);
8819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectvoid ss_page_stdin(void);
8919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectvoid ss_list_requests(int, char const * const *, int, pointer);
9019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectint ss_execute_command(int sci_idx, char *argv[]);
9119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectint ss_pager_create(void);
9219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectchar *ss_safe_getenv(const char *arg);
9319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectchar **ss_rl_completion(const char *text, int start, int end);
9419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
9519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectextern ss_data **_ss_table;
9619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectextern char *ss_et_msgs[];
9719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
9819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#ifdef USE_SIGPROCMASK
9919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/* fake sigmask, sigblock, sigsetmask */
10019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <signal.h>
10119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define sigmask(x) (1L<<(x)-1)
10219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define sigsetmask(x) sigprocmask(SIG_SETMASK,&x,NULL)
10319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectstatic int _fake_sigstore;
10419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define sigblock(x) (_fake_sigstore=x,sigprocmask(SIG_BLOCK,&_fake_sigstore,0))
10519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#endif
10619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#endif /* _ss_internal_h */
107