#include "ngspice/ngspice.h"
#include "ngspice/wordlist.h"
#include "ngspice/bool.h"

#include "variable.h"
#include "ngspice/cpextern.h"
#include "ngspice/cpextern.h"
#include "ngspice/hlpdefs.h"

#include "com_ghelp.h"
#include "com_help.h"

void
com_ghelp(wordlist *wl)
{
    char *npath;
    char *path = Help_Path;
    char buf[BSIZE_SP];
#ifndef X_DISPLAY_MISSING
    int i;
#endif /* X_DISPLAY_MISSING 1  */

#if defined(HAS_WINGUI) || defined(_MSC_VER) || defined(__MINGW32__) || defined(X_DISPLAY_MISSING)
    printf("Internal help is no longer avaialable!\n");
    printf("Please check for the actual ngspice manual at\n");
    printf("http://ngspice.sourceforge.net/docs/ngspice-manual.pdf\n");
    printf("or for help on spice3 at\n");
    printf("http://newton.ex.ac.uk/teaching/CDHW/Electronics2/userguide/\n");
    return;
#else

    if (cp_getvar("helppath", CP_STRING, buf))
        path = copy(buf);
    if (!path) {
        fprintf(cp_err, "Note: defaulting to old help.\n\n");
        com_help(wl);
        return;
    }
    if ((npath = cp_tildexpand(path)) == NULL) {
        fprintf(cp_err, "Note: can't find help dir %s\n", path);
        fprintf(cp_err, "Defaulting to old help.\n\n");
        com_help(wl);
        return;
    }
#ifndef X_DISPLAY_MISSING /* 1 */
    path = npath;
    if (cp_getvar("helpregfont", CP_STRING, buf))
        hlp_regfontname = copy(buf);
    if (cp_getvar("helpboldfont", CP_STRING, buf))
        hlp_boldfontname = copy(buf);
    if (cp_getvar("helpitalicfont", CP_STRING, buf))
        hlp_italicfontname = copy(buf);
    if (cp_getvar("helptitlefont", CP_STRING, buf))
        hlp_titlefontname = copy(buf);
    if (cp_getvar("helpbuttonfont", CP_STRING, buf))
        hlp_buttonfontname = copy(buf);
    if (cp_getvar("helpinitxpos", CP_NUM, &i))
        hlp_initxpos = i;
    if (cp_getvar("helpinitypos", CP_NUM, &i))
        hlp_initypos = i;
    if (cp_getvar("helpbuttonstyle", CP_STRING, buf)) {
        if (cieq(buf, "left"))
            hlp_buttonstyle = BS_LEFT;
        else if (cieq(buf, "center"))
            hlp_buttonstyle = BS_CENTER;
        else if (cieq(buf, "unif"))
            hlp_buttonstyle = BS_UNIF;
        else
            fprintf(cp_err, "Warning: no such button style %s\n",
                    buf);
    }
    if (cp_getvar("width", CP_NUM, &i))
        hlp_width = i;
    if (cp_getvar("display", CP_STRING, buf))
        hlp_displayname = copy(buf);
    else if (cp_getvar("device", CP_STRING, buf))
        hlp_displayname = copy(buf);
    else
        hlp_displayname = NULL;
    hlp_main(path, wl);
    return;
#else
    com_help(wl);
#endif /* X_DISPLAY_MISSING 1  */
#endif
}
