2004-03-14 Marco Gerards <metgerards@student.han.nl>
* commands/boot.c: New file. * commands/cat.c: Likewise. * commands/cmp.c: Likewise. * commands/ls.c: Likewise. * commands/terminal.c: Likewise. * normal/command.c: Include <pupa/env.h> and <pupa/dl.h>. (pupa_register_command): Changed interface to match the new argument parser. (pupa_command_execute): Changed (almost rewritten) so it uses pupa_split_command. Added support for setting variables using the syntax `foo=bar'. (rescue_command): Changed to work with the new argument parser. (terminal_command): Moved from here to commands/terminal.c. (set_command): New function. (unset_command): New function. (insmod_command): New function. (rmmod_command): New function. (lsmod_command): New function. (pupa_command_init): Don't initialize the command terminal anymore. Initialize the commands set, unset, insmod, rmmod and lsmod. * conf/i386-pc.rmk (kernel_img_SOURCES): Add kern/env.c. (kernel_img_HEADERS): Add arg.h and env.h. (pupa_mkimage_LDFLAGS): Add kern/env.c. (pupa_emu_SOURCES): Add kern/env.c, commands/ls.c, commands/terminal.c commands/boot.c commands/cmp.c commands/cat.c, normal/arg.c. (pkgdata_MODULES): Add ls.mod, boot.mod, cmp.mod, cat.mod and terminal.mod. (normal_mod_SOURCES): Add normal/arg.c and normal/arg.c. (boot_mod_SOURCES): New variable. (terminal_mod_SOURCES): Likewise. (ls_mod_SOURCES): Likewise. (cmp_mod_SOURCES): Likewise. (cat_mod_SOURCES): Likewise. * normal/arg.c: New file. * kern/env.c: Likewise. * include/pupa/arg.h: Likewise. * include/pupa/env.h: Likewise. * font/manager.c (font_command): Changed to match argument parsing interface changes. (PUPA_MOD_INIT): Likewise. * hello/hello.c (pupa_cmd_hello): Likewise. (PUPA_MOD_INIT): Likewise. * include/pupa/disk.h: Include <pupa/device.h>. (pupa_print_partinfo): New prototype. * include/pupa/dl.h (pupa_dl_set_prefix): Prototype removed. (pupa_dl_get_prefix): Likewise. * include/pupa/misc.h: Include <pupa/err.h>. (pupa_isgraph): New prototype. (pupa_isdigit): Likewise. (pupa_split_cmdline): Likewise. * include/pupa/normal.h: Include <pupa/arg.h>. (pupa_command): Changed the prototype of the member `func' to match the argument parsing interface. Added member `options'. (pupa_register_command): Updated to match function. (pupa_arg_parse): New prototype. (pupa_hello_init) [PUPA_UTIL]: New prototype. (pupa_hello_fini) [PUPA_UTIL]: Likewise. (pupa_ls_init) [PUPA_UTIL]: Likewise. (pupa_ls_fini) [PUPA_UTIL]: Likewise. (pupa_cat_init) [PUPA_UTIL]: Likewise. (pupa_cat_fini) [PUPA_UTIL]: Likewise. (pupa_boot_init) [PUPA_UTIL]: Likewise. (pupa_boot_fini) [PUPA_UTIL]: Likewise. (pupa_cmp_init) [PUPA_UTIL]: Likewise. (pupa_cmp_fini) [PUPA_UTIL]: Likewise. (pupa_terminal_init) [PUPA_UTIL]: Likewise. (pupa_terminal_fini) [PUPA_UTIL]: Likewise. * kern/disk.c: Include <pupa/file.h>. (pupa_print_partinfo): New function. * kern/dl.c: Include <pupa/env.h>. (pupa_dl_dir): Variable removed. (pupa_dl_load): Use the environment variable `prefix' instead of the variable pupa_dl_dir. (pupa_dl_set_prefix): Function removed. (pupa_dl_get_prefix): Likewise. * kern/i386/pc/init.c: Include <pupa/env.h>. (pupa_machine_init): Use the environment variable `prefix' instead of using pupa_dl_set_prefix to set the prefix. * kern/main.c: Include <pupa/env.h>. (pupa_set_root_dev): Use the environment variable `prefix' instead of using pupa_dl_get_prefix to get the prefix. * kern/misc.c: Include <pupa/env.h>. (pupa_isdigit): New function. (pupa_isgraph): Likewise. (pupa_ftoa): Likewise. (pupa_vsprintf): Added support for printing values of the type `double'. Make it possible to format variable output when using formatting like `%1.2%f'. (pupa_split_cmdline): New function. * kern/rescue.c: Include <pupa/env.h>. (next_word): Removed function. (pupa_rescue_cmd_prefix): Likewise. (pupa_rescue_cmd_set): New function. (pupa_rescue_cmd_unset): New function. (pupa_enter_rescue_mode): Use the `pupa_split_cmdline' function to split the command line instead of splitting it here. Added support for setting variables using the syntax `foo=bar'. Don't initialize the prefix command anymore. Initialized the set and unset commands. * normal/cmdline.c: Include <pupa/env.h>. (pupa_tab_complete): Added prototypes for print_simple_completion, print_partition_completion, add_completion, iterate_commands, iterate_dev, iterate_part and iterate_dir. Moved code to print partition information from here to kern/disk.c. (pupa_cmdline_run): Don't check if the funtion exists anymore. * normal/main.c: Include <pupa/env.h>. (pupa_rescue_cmd_normal): Use the environment variable `prefix' instead of using pupa_dl_get_prefix to get the prefix. * term/i386/pc/vga.c: Include <pupa/arg.h>. (check_vga_mem): Cast pointers to `void *' to silence a gcc warning. (pupa_vga_putchar) [! DEBUG_VGA]: Removed for this case. (pupa_vga_setcolor): Declare unused variables with `__attribute__ ((unused))' to silence a gcc warning. (pupa_vga_setcolor): Likewise. (debug_command): Changed to match argument parsing interface changes. * util/pupa-emu.c: Include <pupa/env.h>. (options): Added 0's for unused fields to silence a gcc warning. (argp): Likewise. (main): Use the environment variable `prefix' instead of using pupa_dl_set_prefix to set the prefix. Initialize the commands ls, boot, cmp, cat and terminal. Finish the commands boot, cmp, cat and terminal. * util/i386/pc/getroot.c: Include <pupa/i386/pc/util/biosdisk.h>. * util/misc.c: Include <malloc.h>. (pupa_malloc): Rewritten so errors are correctly reported. (pupa_realloc): Likewise. (pupa_memalign): Likewise. (pupa_mm_init_region): Declare unused variables with `__attribute__ ((unused))' to silence a gcc warning. * normal/i386/setjmp.S: Remove tab at the end of the file to silence a gcc warning. * loader/i386/pc/linux.c (pupa_rescue_cmd_initrd): Declare unused variables with `__attribute__ ((unused))' to silence a gcc warning. * loader/i386/pc/multiboot.c (pupa_multiboot_unload): Make the local variable i unsigned to silence a gcc warning. * kern/term.c: Include <pupa/misc.h>. (pupa_more_lines): New variable. (pupa_more): Likewise. (pupa_putcode): When the pager is active pause at the end of every screen. (pupa_set_more): New function. * include/pupa/term.h (pupa_set_more): New prototype.
This commit is contained in:
parent
3b1139cb9d
commit
db1771cfbe
35 changed files with 2607 additions and 285 deletions
66
include/grub/arg.h
Normal file
66
include/grub/arg.h
Normal file
|
@ -0,0 +1,66 @@
|
|||
/*
|
||||
* PUPA -- Preliminary Universal Programming Architecture for GRUB
|
||||
* Copyright (C) 2003 Free Software Foundation, Inc.
|
||||
*
|
||||
* PUPA is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with PUPA; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#ifndef PUPA_ARG_HEADER
|
||||
#define PUPA_ARG_HEADER 1
|
||||
|
||||
#include <pupa/symbol.h>
|
||||
#include <pupa/err.h>
|
||||
#include <pupa/types.h>
|
||||
|
||||
enum pupa_arg_type
|
||||
{
|
||||
ARG_TYPE_NONE,
|
||||
ARG_TYPE_STRING,
|
||||
ARG_TYPE_INT,
|
||||
ARG_TYPE_DEVICE,
|
||||
ARG_TYPE_FILE,
|
||||
ARG_TYPE_DIR,
|
||||
ARG_TYPE_PATHNAME
|
||||
};
|
||||
|
||||
typedef enum pupa_arg_type pupa_arg_type_t;
|
||||
|
||||
/* Flags for the option field op pupa_arg_option. */
|
||||
#define PUPA_ARG_OPTION_OPTIONAL 1 << 1
|
||||
|
||||
enum pupa_key_type
|
||||
{
|
||||
PUPA_KEY_ARG = -1,
|
||||
PUPA_KEY_END = -2
|
||||
};
|
||||
typedef enum pupa_key_type pupa_arg_key_type_t;
|
||||
|
||||
struct pupa_arg_option
|
||||
{
|
||||
char *longarg;
|
||||
char shortarg;
|
||||
int flags;
|
||||
char *doc;
|
||||
char *arg;
|
||||
pupa_arg_type_t type;
|
||||
};
|
||||
|
||||
struct pupa_arg_list
|
||||
{
|
||||
int set;
|
||||
char *arg;
|
||||
};
|
||||
|
||||
#endif /* ! PUPA_ARG_HEADER */
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* PUPA -- Preliminary Universal Programming Architecture for GRUB
|
||||
* Copyright (C) 2002 Free Software Foundation, Inc.
|
||||
* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
|
||||
*
|
||||
* PUPA is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -23,6 +23,7 @@
|
|||
#include <pupa/symbol.h>
|
||||
#include <pupa/err.h>
|
||||
#include <pupa/types.h>
|
||||
#include <pupa/device.h>
|
||||
|
||||
struct pupa_disk;
|
||||
|
||||
|
@ -116,4 +117,7 @@ pupa_err_t EXPORT_FUNC(pupa_disk_write) (pupa_disk_t disk,
|
|||
unsigned long size,
|
||||
const char *buf);
|
||||
|
||||
pupa_err_t EXPORT_FUNC(pupa_print_partinfo) (pupa_device_t disk,
|
||||
char *partname);
|
||||
|
||||
#endif /* ! PUPA_DISK_HEADER */
|
||||
|
|
|
@ -83,8 +83,6 @@ pupa_dl_t EXPORT_FUNC(pupa_dl_get) (const char *name);
|
|||
pupa_err_t EXPORT_FUNC(pupa_dl_register_symbol) (const char *name, void *addr,
|
||||
pupa_dl_t mod);
|
||||
void *EXPORT_FUNC(pupa_dl_resolve_symbol) (const char *name);
|
||||
void EXPORT_FUNC(pupa_dl_set_prefix) (const char *dir);
|
||||
const char *EXPORT_FUNC(pupa_dl_get_prefix) (void);
|
||||
|
||||
int pupa_arch_dl_check_header (void *ehdr, pupa_size_t size);
|
||||
pupa_err_t pupa_arch_dl_relocate_symbols (pupa_dl_t mod, void *ehdr);
|
||||
|
|
49
include/grub/env.h
Normal file
49
include/grub/env.h
Normal file
|
@ -0,0 +1,49 @@
|
|||
/*
|
||||
* PUPA -- Preliminary Universal Programming Architecture for GRUB
|
||||
* Copyright (C) 2003 Free Software Foundation, Inc.
|
||||
*
|
||||
* PUPA is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with PUPA; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#ifndef PUPA_ENV_HEADER
|
||||
#define PUPA_ENV_HEADER 1
|
||||
|
||||
#include <pupa/symbol.h>
|
||||
#include <pupa/err.h>
|
||||
#include <pupa/types.h>
|
||||
|
||||
struct pupa_env_var
|
||||
{
|
||||
char *name;
|
||||
char *value;
|
||||
pupa_err_t (*read_hook) (struct pupa_env_var *var, char **val);
|
||||
pupa_err_t (*write_hook) (struct pupa_env_var *var);
|
||||
struct pupa_env_var *next;
|
||||
struct pupa_env_var **prevp;
|
||||
struct pupa_env_var *sort_next;
|
||||
struct pupa_env_var **sort_prevp;
|
||||
};
|
||||
|
||||
pupa_err_t EXPORT_FUNC(pupa_env_set) (const char *var, const char *val);
|
||||
char *EXPORT_FUNC(pupa_env_get) (const char *name);
|
||||
void EXPORT_FUNC(pupa_env_unset) (const char *name);
|
||||
void EXPORT_FUNC(pupa_env_iterate) (int (* func) (struct pupa_env_var *var));
|
||||
pupa_err_t EXPORT_FUNC(pupa_register_variable_hook) (const char *var,
|
||||
pupa_err_t (*read_hook)
|
||||
(struct pupa_env_var *var, char **val),
|
||||
pupa_err_t (*write_hook)
|
||||
(struct pupa_env_var *var));
|
||||
|
||||
#endif /* ! PUPA_ENV_HEADER */
|
|
@ -24,6 +24,7 @@
|
|||
#include <stdarg.h>
|
||||
#include <pupa/types.h>
|
||||
#include <pupa/symbol.h>
|
||||
#include <pupa/err.h>
|
||||
|
||||
/* XXX: If pupa_memmove is too slow, we must implement pupa_memcpy. */
|
||||
#define pupa_memcpy(d,s,n) pupa_memmove ((d), (s), (n))
|
||||
|
@ -43,6 +44,8 @@ char *EXPORT_FUNC(pupa_strrchr) (const char *s, int c);
|
|||
int EXPORT_FUNC(pupa_isspace) (int c);
|
||||
int EXPORT_FUNC(pupa_isprint) (int c);
|
||||
int EXPORT_FUNC(pupa_isalpha) (int c);
|
||||
int EXPORT_FUNC(pupa_isgraph) (int c);
|
||||
int EXPORT_FUNC(pupa_isdigit) (int c);
|
||||
int EXPORT_FUNC(pupa_tolower) (int c);
|
||||
unsigned long EXPORT_FUNC(pupa_strtoul) (const char *str, char **end, int base);
|
||||
char *EXPORT_FUNC(pupa_strdup) (const char *s);
|
||||
|
@ -54,5 +57,8 @@ int EXPORT_FUNC(pupa_vprintf) (const char *fmt, va_list args);
|
|||
int EXPORT_FUNC(pupa_sprintf) (char *str, const char *fmt, ...) __attribute__ ((format (printf, 2, 3)));
|
||||
int EXPORT_FUNC(pupa_vsprintf) (char *str, const char *fmt, va_list args);
|
||||
void EXPORT_FUNC(pupa_stop) (void) __attribute__ ((noreturn));
|
||||
pupa_err_t EXPORT_FUNC(pupa_split_cmdline) (const char *str,
|
||||
pupa_err_t (* getline) (char **),
|
||||
int *argc, char ***argv);
|
||||
|
||||
#endif /* ! PUPA_MISC_HEADER */
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
#include <pupa/setjmp.h>
|
||||
#include <pupa/symbol.h>
|
||||
#include <pupa/err.h>
|
||||
#include <pupa/arg.h>
|
||||
|
||||
/* The maximum size of a command-line. */
|
||||
#define PUPA_MAX_CMDLINE 1600
|
||||
|
@ -46,7 +47,7 @@ struct pupa_command
|
|||
const char *name;
|
||||
|
||||
/* The callback function. */
|
||||
int (*func) (int argc, char *argv[]);
|
||||
pupa_err_t (*func) (struct pupa_arg_list *state, int argc, char **args);
|
||||
|
||||
/* The flags. */
|
||||
unsigned flags;
|
||||
|
@ -57,6 +58,9 @@ struct pupa_command
|
|||
/* The description of the command. */
|
||||
const char *description;
|
||||
|
||||
/* The argument parser optionlist. */
|
||||
const struct pupa_arg_option *options;
|
||||
|
||||
/* The next element. */
|
||||
struct pupa_command *next;
|
||||
};
|
||||
|
@ -120,10 +124,12 @@ void pupa_cmdline_run (int nested);
|
|||
int pupa_cmdline_get (const char *prompt, char cmdline[], unsigned max_len,
|
||||
int echo_char, int readline);
|
||||
void EXPORT_FUNC(pupa_register_command) (const char *name,
|
||||
int (*func) (int argc, char *argv[]),
|
||||
pupa_err_t (*func) (struct pupa_arg_list *state,
|
||||
int argc, char **args),
|
||||
unsigned flags,
|
||||
const char *summary,
|
||||
const char *description);
|
||||
const char *description,
|
||||
const struct pupa_arg_option *parser);
|
||||
void EXPORT_FUNC(pupa_unregister_command) (const char *name);
|
||||
pupa_command_t pupa_command_find (char *cmdline);
|
||||
pupa_err_t pupa_set_history (int newsize);
|
||||
|
@ -131,10 +137,25 @@ int pupa_iterate_commands (int (*iterate) (pupa_command_t));
|
|||
int pupa_command_execute (char *cmdline);
|
||||
void pupa_command_init (void);
|
||||
void pupa_normal_init_page (void);
|
||||
int pupa_arg_parse (pupa_command_t parser, int argc, char **argv,
|
||||
struct pupa_arg_list *usr, char ***args, int *argnum);
|
||||
|
||||
|
||||
#ifdef PUPA_UTIL
|
||||
void pupa_normal_init (void);
|
||||
void pupa_normal_fini (void);
|
||||
void pupa_hello_init (void);
|
||||
void pupa_hello_fini (void);
|
||||
void pupa_ls_init (void);
|
||||
void pupa_ls_fini (void);
|
||||
void pupa_cat_init (void);
|
||||
void pupa_cat_fini (void);
|
||||
void pupa_boot_init (void);
|
||||
void pupa_boot_fini (void);
|
||||
void pupa_cmp_init (void);
|
||||
void pupa_cmp_fini (void);
|
||||
void pupa_terminal_init (void);
|
||||
void pupa_terminal_fini (void);
|
||||
#endif
|
||||
|
||||
#endif /* ! PUPA_NORMAL_HEADER */
|
||||
|
|
|
@ -124,6 +124,7 @@ void EXPORT_FUNC(pupa_setcolor) (pupa_uint8_t normal_color,
|
|||
pupa_uint8_t highlight_color);
|
||||
int EXPORT_FUNC(pupa_setcursor) (int on);
|
||||
void EXPORT_FUNC(pupa_refresh) (void);
|
||||
void EXPORT_FUNC(pupa_set_more) (int onoff);
|
||||
|
||||
/* For convenience. */
|
||||
#define PUPA_TERM_ASCII_CHAR(c) ((c) & 0xff)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue