diff options
Diffstat (limited to 'ldap/clients/dsgw/genscreen.c')
-rw-r--r-- | ldap/clients/dsgw/genscreen.c | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/ldap/clients/dsgw/genscreen.c b/ldap/clients/dsgw/genscreen.c new file mode 100644 index 00000000..ab2f89cd --- /dev/null +++ b/ldap/clients/dsgw/genscreen.c @@ -0,0 +1,117 @@ +/** + * PROPRIETARY/CONFIDENTIAL. Use of this product is subject to + * license terms. Copyright © 2001 Sun Microsystems, Inc. + * Some preexisting portions Copyright © 2001 Netscape Communications Corp. + * All rights reserved. + */ +/* + * Generate a screen. + */ + +#include "dsgw.h" + +static int dsgw_genscreen_begin( char *fname, FILE **fpp, + char *stop_at_directive, int erropts ); +static int dsgw_genscreen_continue( FILE **fpp, char *stop_at_directive, + int erropts ); + +static LDAP *ld = NULL; + +main( argc, argv, env ) + int argc; + char *argv[]; +#ifdef DSGW_DEBUG + char *env[]; +#endif +{ + char *p, *tmplname, *buf; + + context=dsgw_ch_strdup("pb"); + /*CHANGE THIS*/ + + (void)dsgw_init( argc, argv, DSGW_METHOD_GET ); + dsgw_send_header(); + +#ifdef DSGW_DEBUG + dsgw_logstringarray( "env", env ); +#endif + + /* + * If the QUERY_STRING is non-NULL, it looks like this: + * + * template &CONTEXT=context [ &INFO=infostring ] + * + * where: + * "template" is the name of the HTML template to render + * "infostring" is a message used to replace DS_LAST_OP_INFO directives + * + * If the QUERY_STRING is NULL, the name of this program is used as the + * template. + */ + + if (( tmplname = getenv( "QUERY_STRING" )) == NULL ) { + tmplname = progname; + } else { + tmplname = dsgw_ch_strdup( tmplname ); + if (( p = strrchr( tmplname, '&' )) != NULL ) { + *p++ = '\0'; + if ( strncasecmp( p, "info=", 5 ) == 0 ) { + dsgw_last_op_info = dsgw_ch_strdup( p + 5 ); + dsgw_form_unescape( dsgw_last_op_info ); + } + } + } + + + buf = dsgw_ch_malloc( strlen( tmplname ) + 6 ); /* room for ".html\0" */ + sprintf( buf, "%s.html", tmplname ); + + dsgw_genscreen_begin( buf, NULL, NULL, DSGW_ERROPT_EXIT ); + + exit( 0 ); +} + + +static int +dsgw_genscreen_begin( char *fname, FILE **fpp, char *stop_at_directive, + int erropts ) +{ + FILE *html; + + if ( fpp == NULL ) { + fpp = &html; + } + + if (( *fpp = dsgw_open_html_file( fname, erropts )) == NULL ) { + *fpp = NULL; + return( -1 ); + } + + return( dsgw_genscreen_continue( fpp, stop_at_directive, erropts )); +} + + +static int +dsgw_genscreen_continue( FILE **fpp, char *stop_at_directive, int erropts ) +{ + char **argv, line[ BIG_LINE ]; + int argc; + + while ( dsgw_next_html_line( *fpp, line )) { + if ( dsgw_parse_line( line, &argc, &argv, 0, dsgw_simple_cond_is_true, + NULL )) { + if ( stop_at_directive != NULL && + dsgw_directive_is( line, stop_at_directive )) { + return( 0 ); + } + if ( dsgw_directive_is( line, DRCT_DS_LOCATIONPOPUP )) { + dsgw_emit_location_popup( ld, argc, argv, erropts ); + } + } + } + + fclose( *fpp ); + *fpp = NULL; + + return( 0 ); +} |