117e6d9cbf5d8ac20b7bf7b3a2691f48640ee2e2
[debian/amanda] / oldrecover-src / uparse.y
1 /*
2  * Amanda, The Advanced Maryland Automatic Network Disk Archiver
3  * Copyright (c) 1991-1998, 2000 University of Maryland at College Park
4  * All Rights Reserved.
5  *
6  * Permission to use, copy, modify, distribute, and sell this software and its
7  * documentation for any purpose is hereby granted without fee, provided that
8  * the above copyright notice appear in all copies and that both that
9  * copyright notice and this permission notice appear in supporting
10  * documentation, and that the name of U.M. not be used in advertising or
11  * publicity pertaining to distribution of the software without specific,
12  * written prior permission.  U.M. makes no representations about the
13  * suitability of this software for any purpose.  It is provided "as is"
14  * without express or implied warranty.
15  *
16  * U.M. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
17  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL U.M.
18  * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
19  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
20  * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
21  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
22  *
23  * Authors: the Amanda Development Team.  Its members are listed in a
24  * file named AUTHORS, in the root directory of this distribution.
25  */
26 /*
27  * $Id: uparse.y,v 1.2 2006/05/25 01:47:13 johnfranks Exp $
28  *
29  * parser for amrecover interactive language
30  */
31 %{
32 #include "amanda.h"
33 #include "amrecover.h"
34
35 void            yyerror(char *s);
36 extern int      yylex(void);
37 extern char *   yytext;
38
39 %}
40
41 /* DECLARATIONS */
42 %union {
43         int     intval;
44         double  floatval;
45         char *  strval;
46         int     subtok;
47 }
48
49         /* literal keyword tokens */
50
51 %token LISTHOST LISTDISK SETHOST SETDISK SETDATE SETTAPE SETMODE
52 %token CD CDX QUIT DHIST LS ADD ADDX EXTRACT
53 %token LIST DELETE DELETEX PWD CLEAR HELP LCD LPWD MODE SMB TAR
54
55         /* typed tokens */
56
57 %token <strval> PATH
58 %token <strval> DATE
59
60
61 /* GRAMMAR */
62 %%
63
64 ucommand:
65         set_command
66   |     display_command
67   |     quit_command
68   |     add_command
69   |     addx_command
70   |     delete_command
71   |     deletex_command
72   |     local_command
73   |     help_command
74   |     extract_command
75   |     {
76             char * errstr = vstralloc("Invalid command: ", yytext, NULL);
77             yyerror(errstr);
78             amfree(errstr);
79             YYERROR;
80         } /* Quiets compiler warnings about unused label */
81   ;
82
83 set_command:
84         LISTHOST { list_host(); }
85   |     LISTDISK PATH { list_disk($2); amfree($2); }
86   |     LISTDISK { list_disk(NULL); }
87   |     SETDATE DATE { set_date($2); amfree($2); }
88   |     SETHOST PATH { set_host($2); amfree($2); }
89   |     SETDISK PATH PATH { set_disk($2, $3); amfree($2); amfree($3); }
90   |     SETDISK PATH { set_disk($2, NULL); amfree($2); }
91   |     SETTAPE PATH { set_tape($2); amfree($2); }
92   |     SETTAPE { set_tape(""); }
93   |     CD PATH { cd_glob($2); amfree($2); }
94   |     CDX PATH { cd_regex($2); amfree($2); }
95   |     SETMODE SMB {
96 #ifdef SAMBA_CLIENT
97                          set_mode(SAMBA_SMBCLIENT);
98 #endif /* SAMBA_CLIENT */
99                     }
100   |     SETMODE TAR {
101 #ifdef SAMBA_CLIENT
102                          set_mode(SAMBA_TAR);
103 #endif /* SAMBA_CLIENT */
104                     }
105   ;
106
107 display_command:
108         DHIST { list_disk_history(); }
109   |     LS { list_directory(); }
110   |     LIST PATH { display_extract_list($2); amfree($2); }
111   |     LIST { display_extract_list(NULL); }
112   |     PWD { show_directory(); }
113   |     CLEAR { clear_extract_list(); }    
114   |     MODE { show_mode (); }
115   ;
116
117 quit_command:
118         QUIT { quit(); }
119   ;
120
121 add_command:
122         ADD add_path
123   ;
124
125 add_path:
126         add_path PATH { add_glob($2); amfree($2); }
127   |     PATH { add_glob($1); amfree($1); }
128   ;
129
130 addx_command:
131         ADDX addx_path
132   ;
133
134 addx_path:
135         addx_path PATH { add_regex($2); amfree($2); }
136   |     PATH { add_regex($1); amfree($1); }
137   ;
138
139 delete_command:
140         DELETE delete_path
141   ;
142
143 delete_path:
144         delete_path PATH { delete_glob($2); amfree($2); }
145   |     PATH { delete_glob($1); amfree($1); }
146   ;
147
148 deletex_command:
149         DELETEX deletex_path
150   ;
151
152 deletex_path:
153         deletex_path PATH { delete_regex($2); amfree($2); }
154   |     PATH { delete_regex($1); amfree($1); }
155   ;
156
157 local_command:
158         LPWD { char buf[STR_SIZE]; puts(getcwd(buf, sizeof(buf))); }
159   |     LCD PATH {
160                 if (chdir($2) == -1) {
161                         perror($2);
162                 }
163                 amfree($2);
164         }
165   ;
166
167 help_command:
168         HELP { help_list(); }
169   ;
170
171 extract_command:
172         EXTRACT { extract_files(); }
173   ;
174
175 /* ADDITIONAL C CODE */
176 %%
177
178 void
179 yyerror(
180     char *      s)
181 {
182   printf("%s\n", s);
183 }