2 * valerie_parser.c -- Valerie Parser for Miracle
3 * Copyright (C) 2002-2003 Ushodaya Enterprises Limited
4 * Author: Charles Yates <charles.yates@pandora.be>
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 /* System header files */
27 /* Application header files */
28 #include "valerie_parser.h"
29 #include "valerie_util.h"
31 /** Connect to the parser.
34 valerie_response
valerie_parser_connect( valerie_parser parser
)
36 return parser
->connect( parser
->real
);
39 /** Execute a command via the parser.
42 valerie_response
valerie_parser_execute( valerie_parser parser
, char *command
)
44 return parser
->execute( parser
->real
, command
);
47 /** Execute a formatted command via the parser.
50 valerie_response
valerie_parser_executef( valerie_parser parser
, char *format
, ... )
52 char *command
= malloc( 10240 );
53 valerie_response response
= NULL
;
54 if ( command
!= NULL
)
57 va_start( list
, format
);
58 if ( vsnprintf( command
, 10240, format
, list
) != 0 )
59 response
= valerie_parser_execute( parser
, command
);
66 /** Execute the contents of a file. Note the special case valerie_response returned.
69 valerie_response
valerie_parser_run( valerie_parser parser
, char *filename
)
71 valerie_response response
= valerie_response_init( );
72 if ( response
!= NULL
)
74 FILE *file
= fopen( filename
, "r" );
78 valerie_response_set_error( response
, 201, "OK" );
79 while ( valerie_response_get_error_code( response
) == 201 && fgets( command
, 1024, file
) )
81 valerie_util_trim( valerie_util_chomp( command
) );
82 if ( strcmp( command
, "" ) && command
[ 0 ] != '#' )
84 valerie_response temp
= NULL
;
85 valerie_response_printf( response
, 1024, "%s\n", command
);
86 temp
= valerie_parser_execute( parser
, command
);
90 for ( index
= 0; index
< valerie_response_count( temp
); index
++ )
91 valerie_response_printf( response
, 10240, "%s\n", valerie_response_get_line( temp
, index
) );
92 valerie_response_close( temp
);
96 valerie_response_set_error( response
, 500, "Batch execution failed" );
104 valerie_response_set_error( response
, 404, "File not found." );
110 /** Get the notifier associated to the parser.
113 valerie_notifier
valerie_parser_get_notifier( valerie_parser parser
)
115 if ( parser
->notifier
== NULL
)
116 parser
->notifier
= valerie_notifier_init( );
117 return parser
->notifier
;
120 /** Close the parser.
123 void valerie_parser_close( valerie_parser parser
)
125 if ( parser
!= NULL
)
127 parser
->close( parser
->real
);
128 valerie_notifier_close( parser
->notifier
);