
/*
 * INITSYMBOLS.C
 * (c) 1992-3 J.Harper
 *
 * defines and creates the default commands
 */

#include "jed.h"
#include "jed_protos.h"

Prototype   BOOL    initcommands    (VOID);
Prototype   VOID    killsymbols	    (VOID);

typedef struct INIT {
    STRPTR	    i_Name;
    CMPTR	    i_Func;
} INIT;

Local const INIT CmdList[] =
{
    "+", cmd_plus,
    "-", cmd_minus,
    "*", cmd_product,
    "/", cmd_divide,
    "%", cmd_mod,
    "<<", cmd_lshift,
    ">>", cmd_rshift,
    "~", cmd_b_not,
    "!", cmd_l_not,
    "|", cmd_b_or,
    "||", cmd_l_or,
    "&", cmd_b_and,
    "&&", cmd_l_and,
    "^", cmd_b_eor,
    "^^", cmd_l_eor,

    "=", cmd_equals,

    "==", cmd_equality,
    "!=", cmd_inequality,
    ">", cmd_gtthan,
    "<", cmd_ltthan,
    ">=", cmd_gethan,
    "<=", cmd_lethan,

    "activatefile", cmd_activatefile,
    "addsym", cmd_addsym,
    "addpath", cmd_addpath,
    "arg", cmd_arg,
    "atol", cmd_atol,
    "bind", cmd_bind,
    "block", cmd_block,
    "break", cmd_break,
    "car", cmd_car,
    "cd", cmd_cd,   
    "cdr", cmd_cdr,
    "changes", cmd_changes,
    "cli", cmd_cli,
    "close", cmd_close,
    "copy", cmd_copy,
    "cut", cmd_cut,
    "clear", cmd_clear,
    "changecase", cmd_changecase,
    "delete", cmd_delete,
    "dowhile", cmd_dowhile,
    "dlock", cmd_dlock,
    "export", cmd_export,
    "extract", cmd_extract,
    "find", cmd_find,
    "freq", cmd_freq,
    "format", cmd_format,
    "getref", cmd_getref,
    "getstr", cmd_getstr,
    "getnum", cmd_getnum,
    "getpref", cmd_getpref,
    "if", cmd_if,
    "ilock", cmd_ilock,
    "insert", cmd_insert,
    "info", cmd_info,
    "isalpha", cmd_isalpha,
    "isdigit", cmd_isdigit,
    "isalnum", cmd_isalnum,
    "isspace", cmd_isspace,
    "join", cmd_join,
    "move", cmd_move,
    "match", cmd_match,
    "menu", cmd_menu,
    "nargs", cmd_nargs,
    "newfile", cmd_newfile,
    "newview", cmd_newview,
    "nextwind", cmd_nextwind,
    "nop", cmd_nop,
    "openfile", cmd_openfile,
    "prevwind", cmd_prevwind,
    "poke", cmd_poke,
    "position", cmd_position,
    "replace", cmd_replace,
    "remsym", cmd_remsym,
    "rempath", cmd_rempath,
    "rename", cmd_rename,
    "renamesym", cmd_renamesym,
    "req", cmd_req,
    "rexx", cmd_rexx,
    "return", cmd_return,
    "savefile", cmd_savefile,
    "savefileas", cmd_savefileas,
    "savesection", cmd_savesection,
    "saveprefs", cmd_saveprefs,
    "select", cmd_select,
    "setmenu", cmd_setmenu,
    "setpref", cmd_setpref,
    "settitle", cmd_settitle,
    "script", cmd_script,
    "sleep", cmd_sleep,
    "split", cmd_split,
    "substr", cmd_substr,
    "symboldump", cmd_symboldump,
    "system", cmd_system,
    "toupper", cmd_toupper,
    "tolower", cmd_tolower,
    "type", cmd_type,
    "unbind", cmd_unbind,
    "undo", cmd_undo,
    "unsleep", cmd_unsleep,
    "while", cmd_while,
    NULL, NULL
};

/*
 * initializes command list
 */
BOOL
initcommands(VOID)
{
    INIT *init = CmdList;
    VALUE tmp;
    tmp.val_Type = VTF_FUNC;
    while(init->i_Name)
    {
	tmp.val_Value.Func = init->i_Func;
	if(!(addgsym(init->i_Name, STF_COMMAND, &tmp)))
	{
	    killsymbols();
	    return(FALSE);
	}
	init++;
    }
    return(TRUE);
}

/*
 * kills symbol table
 */
VOID
killsymbols(VOID)
{
    HASHNODE **hash = SymbolTab;
    WORD i;

    for(i = 0; i < GSYMTABSIZE; i++)
    {
	GSYM *sym = hash[i], *next;
	while(sym)
	{
	    next = sym->gs_Node.h_Next;
	    freestring(sym->gs_Node.h_Name);
	    releasevalue(&sym->gs_Sym.sym_Value);
	    FreeVec(sym);
	    sym = next;
	}
    }
}

