#!/bin/sh -- # perl script
eval 'exec perl -S $0 ${1+"$@"}'
    if 0;
require 5;

#################################################################

BEGIN {
    ($prog = $0) =~ s#.*/##;
}

#################################################################

@tcls  = @ARGV;
%names = ();
%data  = ();

#################################################################

foreach $tcl (@tcls) {
    open($tcl, $tcl) or die("[$prog] cannot open `$tcl', skipping file\n");
    $data = join('', <$tcl>);
	$data =~ s/./'$&',/g;
    $data =~ s/\\/\\\\/g;
    $data =~ s/'''/'\\''/g;
    $data =~ s/\n/'\\n',\n/g;
    close($tcl);

    ($name = $tcl) =~ s/[^a-zA-Z0-9_]/_/g;

    $names{$tcl} = $name;
    $data{$tcl}  = $data;
}

#################################################################

$files = join("\n *    ", @tcls);
print <<"END_OF_HEADER";
/*
 * Converter   :  $prog
 * Author      :  Krishna Kunchithapadam (krishna\@cs.wisc.edu)
 * Version     :  0.03, 2 August 1995
 *
 * Tcl sources :
 *    $files
 *
 *
 * DO NOT EDIT THIS FILE
 *
 */

#include <stdio.h>
#include "tcl.h"

#if defined(i386_unknown_nt4_0)
#include <windows.h>
#endif // defined(i386_unknown_nt4_0)


END_OF_HEADER

foreach $tcl (sort keys %names) {
    print <<"END_OF_SOURCE";
/* source file : $tcl */

static const char tcl2c_$names{$tcl}_cstring[] =
{
$data{$tcl}
'\\0'
};


END_OF_SOURCE
}

print <<END_OF_PREAMBLE;
#if !defined(i386_unknown_nt4_0)

#define SAFE_EVAL(str, file)                               \\
do {                                                       \\
    if (Tcl_VarEval(interp, str, 0) != TCL_OK) {           \\
        fprintf(stderr, "%s: %s\\n", file, Tcl_GetStringResult(interp)); \\
        return TCL_ERROR;                                  \\
    }                                                      \\
} while (0)

#else

#define SAFE_EVAL(str, file)                               \\
do {                                                       \\
    if (Tcl_VarEval(interp, str, 0) != TCL_OK) {           \\
        Tcl_DString msg;                                   \\
        Tcl_DStringInit( &msg );                           \\
        Tcl_DStringAppend(&msg, file, -1);                 \\
        Tcl_DStringAppend(&msg, ":", -1);                  \\
        Tcl_DStringAppend(&msg, Tcl_GetStringResult(interp), -1); \\
        MessageBox(NULL, Tcl_DStringValue(&msg), "Fatal", MB_ICONSTOP|MB_OK); \\
        Tcl_DStringFree( &msg );                           \\
        return TCL_ERROR;                                  \\
    }                                                      \\
} while (0)

#endif // defined(i386_unknown_nt4_0)

int
initialize_tcl_sources(Tcl_Interp* interp) {
END_OF_PREAMBLE

foreach $tcl (sort keys %names) {
    print <<"END_OF_INIT";
    SAFE_EVAL(tcl2c_$names{$tcl}_cstring, "$tcl");
END_OF_INIT
}
print <<"END_OF_TRAILER";
    return TCL_OK;
}
END_OF_TRAILER

#################################################################
