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