/*
xmd - molecular dynamics for metals and ceramics
By Jonathan Rifkin <jon.rifkin@uconn.edu>
Copyright 1995-2004 Jonathan Rifkin
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
/*
************************************************************************
Include Files
************************************************************************
*/
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
#include "cdhouse.h"
#include "iomngr.h"
#include "strsub.h"
#include "cdsubs.h"
#include "plotc.h"
/*
************************************************************************
Compile Switches
************************************************************************
*/
#define USE_COMMAND_PARSER_FUNCTION
#undef USE_COMMAND_PARSER_FUNCTION
/*
************************************************************************
Global Variables
************************************************************************
*/
extern Particle_t *a;
extern Simulation_t *s;
extern FILE *out;
extern LIST *inlist;
/*
************************************************************************
Module-wide Variables
************************************************************************
*/
static int NumberOfCommandErrors_m = 0;
static int NumberOfWarnings_m = 0;
/* Local Command Buffer */
#ifdef USE_COMMAND_PARSER_FUNCTION
static char CharBuffer_m[2048];
#endif
/*
************************************************************************
Exported Functions
************************************************************************
*/
void read_command (char *instr, int *qflag)
{
char *lpnt, *cpnt, *cmdstr, *tailstr;
char copystr[256];
strcpy (copystr, instr);
ReplaceMacro (copystr, 256);
/* PARSE STRING INTO COMMAND LINES */
lpnt = copystr;
while (*(cpnt=strlin(&lpnt)))
{
/* Skip comments (preceded by * or #) */
if (IsComment (cpnt, "*#") )
continue;
tailstr = cpnt;
/* PARSE COMMAND */
cmdstr = strhed (&tailstr);
/* Match Command */
if ( cmdstr[0] == '\'' ) fprintf (out, "%s\n", instr);
else if (!strcmpi(cmdstr,"" ));
else if (!strcmpi(cmdstr,"QUIT" )) *qflag = TRUE;
else if (!strcmpi(cmdstr,"ALLOCATE" )) read_allocate (tailstr);
else if (!strcmpi(cmdstr,"BOX" )) read_box (tailstr);
else if (!strcmpi(cmdstr,"BSAVE" )) read_bsave (tailstr);
else if (!strcmpi(cmdstr,"CALC" )) read_calc (tailstr);
else if (!strcmpi(cmdstr,"CLAMP" )) read_clamp (tailstr);
else if (!strcmpi(cmdstr,"COMPARE" )) read_compare (tailstr);
else if (!strcmpi(cmdstr,"CONSTRAIN")) read_constrain(tailstr);
else if (!strcmpi(cmdstr,"COR" )) read_cor (tailstr);
else if (!strcmpi(cmdstr,"CMD" )) read_cmd (tailstr);
else if (!strcmpi(cmdstr,"DAMP" )) read_damp (tailstr);
else if (!strcmpi(cmdstr,"DEBUG" )) read_debug (tailstr);
else if (!strcmpi(cmdstr,"DISP" )) read_disp (tailstr);
else if (!strcmpi(cmdstr,"DTIME" )) read_dtime (tailstr);
else if (!strcmpi(cmdstr,"DUP" )) read_dup (tailstr);
else if (!strcmpi(cmdstr,"ECHO" )) read_echo (tailstr);
else if (!strcmpi(cmdstr,"ERASE" )) read_erase (tailstr);
else if (!strcmpi(cmdstr,"ESAVE" )) read_esave (tailstr);
else if (!strcmpi(cmdstr,"EUNIT" )) read_eunit (tailstr);
else if (!strcmpi(cmdstr,"EXTFORCE" )) read_extforce (tailstr);
else if (!strcmpi(cmdstr,"EXTSPRING")) read_extspring(tailstr);
else if (!strcmpi(cmdstr,"FIX" )) read_fix (tailstr);
else if (!strcmpi(cmdstr,"FILL" )) read_fill (tailstr);
else if (!strcmpi(cmdstr,"ITEMP" )) read_itemp (tailstr);
else if (!strcmpi(cmdstr,"LABEL" )) read_label (tailstr);
else if (!strcmpi(cmdstr,"MACRO" )) read_macro (tailstr);
else if (!strcmpi(cmdstr,"MACROF" )) read_macrof (tailstr);
else if (!strcmpi(cmdstr,"MASS" )) read_mass (tailstr);
else if (!strcmpi(cmdstr,"MC" )) read_mc (tailstr);
else if (!strcmpi(cmdstr,"MOVE" )) read_move (tailstr);
else if (!strcmpi(cmdstr,"NRANGE" )) read_nrange (tailstr);
else if (!strcmpi(cmdstr,"NSEARCH" )) read_nsearch (tailstr);
else if (!strcmpi(cmdstr,"PARTICLE" )) read_particle (tailstr);
else if (!strcmpi(cmdstr,"PLOT" )) read_plot (tailstr);
else if (!strcmpi(cmdstr,"POSITION" )) read_particle (tailstr);
else if (!strcmpi(cmdstr,"POSVEL" )) read_posvel (tailstr);
else if (!strcmpi(cmdstr,"POTENTIAL")) read_potential(tailstr);
else if (!strcmpi(cmdstr,"PRESSURE" )) read_pressure (tailstr);
else if (!strcmpi(cmdstr,"PSTRAIN" )) read_pstrain (tailstr);
else if (!strcmpi(cmdstr,"QUENCH" )) read_quench (tailstr);
else if (!strcmpi(cmdstr,"RCV" )) read_rcv (tailstr);
else if (!strcmpi(cmdstr,"READ" )) read_read (tailstr);
else if (!strcmpi(cmdstr,"REFSTEP" )) read_refstep (tailstr);
else if (!strcmpi(cmdstr,"REMOVE" )) read_remove (tailstr);
else if (!strcmpi(cmdstr,"REPEAT" )) read_repeat (tailstr);
else if (!strcmpi(cmdstr,"ROTATE" )) read_rotate (tailstr);
else if (!strcmpi(cmdstr,"RUN" )) read_run (tailstr);
else if (!strcmpi(cmdstr,"SCALE" )) read_scale (tailstr);
else if (!strcmpi(cmdstr,"SCREW" )) read_screw (tailstr);
else if (!strcmpi(cmdstr,"SEED" )) read_seed (tailstr);
else if (!strcmpi(cmdstr,"SELECT" )) read_select (tailstr);
else if (!strcmpi(cmdstr,"SET" )) read_set (tailstr);
else if (!strcmpi(cmdstr,"SIZE" )) read_size (tailstr);
else if (!strcmpi(cmdstr,"SSAVE" )) read_ssave (tailstr);
else if (!strcmpi(cmdstr,"STATE" )) read_state (tailstr);
else if (!strcmpi(cmdstr,"STEP" )) read_step (tailstr);
else if (!strcmpi(cmdstr,"STRESS" )) read_stress (tailstr);
else if (!strcmpi(cmdstr,"SURFACE" )) read_surface (tailstr);
else if (!strcmpi(cmdstr,"TAG" )) read_tag (tailstr);
else if (!strcmpi(cmdstr,"TYPE" )) read_type (tailstr);
else if (!strcmpi(cmdstr,"TYPELIST" )) read_typelist (tailstr);
else if (!strcmpi(cmdstr,"TYPENAME" )) read_typename (tailstr);
else if (!strcmpi(cmdstr,"VELOCITY" )) read_velocity (tailstr);
else if (!strcmpi(cmdstr,"VERBOSE" )) read_verbose (tailstr);
/* Maintain compatability with old name for PRESSURE command */
else if (!strcmpi(cmdstr,"VOLUME" )) read_pressure (tailstr);
else if (!strcmpi(cmdstr,"WAVE" )) read_wave (tailstr);
else if (!strcmpi(cmdstr,"WRITE" )) read_write (tailstr);
else
{
puts ("*** ERROR: PREVIOUS COMMAND NOT RECOGNIZED.");
NumberOfCommandErrors_m++;
}
}
}
int GetNumberOfCommandErrors (void)
{
return NumberOfCommandErrors_m;
}
int GetNumberOfWarnings (void)
{
return NumberOfWarnings_m;
}
void IncrementNumberOfWarnings (void)
{
NumberOfWarnings_m++;
}
#ifdef USE_COMMAND_PARSER_FUNCTION
void x (char *format, ...)
{
va_list argptr;
int qflag = 0;
char *cp = (char *) CharBuffer_m;
/* CONVERT ARGUMENTS TO STRING */
va_start (argptr, format);
vsprintf (CharBuffer_m, format, argptr);
va_end (argptr);
/* CALL COMMAND PROCESSOR */
read_command (cp, &qflag);
}
#endif