/* * Amanda, The Advanced Maryland Automatic Network Disk Archiver * Copyright (c) 1991-1998, 2000 University of Maryland at College Park * Copyright (c) 2007-2012 Zmanda, Inc. All Rights Reserved. * All Rights Reserved. * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of U.M. not be used in advertising or * publicity pertaining to distribution of the software without specific, * written prior permission. U.M. makes no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * U.M. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL U.M. * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Authors: the Amanda Development Team. Its members are listed in a * file named AUTHORS, in the root directory of this distribution. */ /* * $Id: uparse.y,v 1.2 2006/05/25 01:47:13 johnfranks Exp $ * * parser for amrecover interactive language */ %{ #include "amanda.h" #include "amrecover.h" void yyerror(char *s); extern int yylex(void); extern char * yytext; %} /* DECLARATIONS */ %union { int intval; double floatval; char * strval; int subtok; } /* literal keyword tokens */ %token LISTHOST LISTDISK SETHOST SETDISK SETDATE SETTAPE SETMODE %token CD CDX QUIT DHIST LS ADD ADDX EXTRACT %token LIST DELETE DELETEX PWD CLEAR HELP LCD LPWD MODE SMB TAR /* typed tokens */ %token PATH %token DATE /* GRAMMAR */ %% ucommand: set_command | display_command | quit_command | add_command | addx_command | delete_command | deletex_command | local_command | help_command | extract_command | { char * errstr = vstralloc("Invalid command: ", yytext, NULL); yyerror(errstr); amfree(errstr); YYERROR; } /* Quiets compiler warnings about unused label */ ; set_command: LISTHOST { list_host(); } | LISTDISK PATH { list_disk($2); amfree($2); } | LISTDISK { list_disk(NULL); } | SETDATE DATE { set_date($2); amfree($2); } | SETHOST PATH { set_host($2); amfree($2); } | SETDISK PATH PATH { set_disk($2, $3); amfree($2); amfree($3); } | SETDISK PATH { set_disk($2, NULL); amfree($2); } | SETTAPE PATH { set_tape($2); amfree($2); } | SETTAPE { set_tape(""); } | CD PATH { cd_glob($2); amfree($2); } | CDX PATH { cd_regex($2); amfree($2); } | SETMODE SMB { #ifdef SAMBA_CLIENT set_mode(SAMBA_SMBCLIENT); #endif /* SAMBA_CLIENT */ } | SETMODE TAR { #ifdef SAMBA_CLIENT set_mode(SAMBA_TAR); #endif /* SAMBA_CLIENT */ } ; display_command: DHIST { list_disk_history(); } | LS { list_directory(); } | LIST PATH { display_extract_list($2); amfree($2); } | LIST { display_extract_list(NULL); } | PWD { show_directory(); } | CLEAR { clear_extract_list(); } | MODE { show_mode (); } ; quit_command: QUIT { quit(); } ; add_command: ADD add_path ; add_path: add_path PATH { add_glob($2); amfree($2); } | PATH { add_glob($1); amfree($1); } ; addx_command: ADDX addx_path ; addx_path: addx_path PATH { add_regex($2); amfree($2); } | PATH { add_regex($1); amfree($1); } ; delete_command: DELETE delete_path ; delete_path: delete_path PATH { delete_glob($2); amfree($2); } | PATH { delete_glob($1); amfree($1); } ; deletex_command: DELETEX deletex_path ; deletex_path: deletex_path PATH { delete_regex($2); amfree($2); } | PATH { delete_regex($1); amfree($1); } ; local_command: LPWD { char buf[STR_SIZE]; puts(getcwd(buf, sizeof(buf))); } | LCD PATH { local_cd($2); amfree($2); } ; help_command: HELP { help_list(); } ; extract_command: EXTRACT { extract_files(); } ; /* ADDITIONAL C CODE */ %% void yyerror( char * s) { g_printf("%s\n", s); }