59 #define INCLUDE_PARSE_FLAGS 1
61 #define DEFINE_COLORS_STRINGS 1
68 #define LP_IF_TEST_FALSE 0
69 #define LP_IF_TEST_TRUE 1
70 #define LP_IF_TEST_NTRUE 2
72 #define LP_IF_STATE_IDLE 0
73 #define LP_IF_STATE_TRUE 1
74 #define LP_IF_STATE_FALSE 2
75 #define LP_IF_STATE_ELSE 3
98 #define VARIABLE_TYPE_NONE 0
99 #define VARIABLE_TYPE_DVAR 1
100 #define VARIABLE_TYPE_GSVAR 2
101 #define VARIABLE_TYPE_HEADER 3
102 #define VARIABLE_TYPE_PLANET 4
112 static int first = 1;
189 strcpy(buf,
"%.16lf");
247 bzero((
char *)qv,
sizeof(
struct QUERY_VAR));
249 strcpy(qv->
name, name);
273 st_print(
"%s(%s:%d): DVAR: %s = %s\n", __func__, __FILE__, __LINE__, name, qv->
buf);
307 st_print(
"%s(%s:%d): GSVAR: %s = %s\n", __func__, __FILE__, __LINE__, name, qv->
buf);
321 sprintf(qv->
buf, dfmt, *p->
dptr);
339 st_print(
"%s(%s:%d): HEADER: %s = %s\n", __func__, __FILE__, __LINE__, name, qv->
buf);
345 strcpy(qv->
buf, name);
389 st_fail(
"recursiveLevel > MAX_PARSE_STACK");
441 va_start(targs, fmt);
442 vsprintf(tbuf, fmt, targs);
449 st_report(
"Setting args->tok[%d] to %s", wt-1, tbuf);
464 char tbuf[512], scratch[512];
469 sprintf(scratch,
"%s ",
args->
tok[i]);
470 strcat(tbuf, scratch);
489 sprintf(scratch,
"%s ",
args->
tok[i]);
490 strcat(buf, scratch);
542 st_report(
"parseFlags(): Setting Quiet to True");
653 st_report(
"Checking if /%c flag set", (
char)(flag+97));
676 st_report(
"Checking if /%c flag NOT set", (
char)(flag+97));
710 for(i=0;i<ngs;i++,pgs++)
730 int i, j, ngs, key=0;
733 char hbuf[256], tbuf[512], fbuf[256], kbuf[256];
749 st_print(
"Defined Dynamic Variables\n");
758 if(strcasestr(p->
name, kbuf))
771 if(fabs(*p->
dval) < 0.0001 || fabs(*p->
dval) > 9999999.9)
775 if(strcasestr(p->
name, kbuf))
789 if(strcasestr(p->
name, kbuf))
805 for(i=0;i<ngs;i++,pgs++)
814 for(j=0;j<pgs->
size;j++)
816 if(!strncmp(pgs->
name,
"badchans", 8))
818 if(pgs->
iaddr[j] == -1)
823 if(pgs->
iaddr[j] != 0 || j == 0)
827 if(strcasestr(pgs->
name, kbuf))
844 if(strcasestr(pgs->
name, kbuf))
859 for(j=0;j<pgs->
size;j++)
861 if(!strncmp(pgs->
name,
"ignoredScans", 12))
863 if(pgs->
daddr[j] != 0.0 || j == 0)
867 if(strcasestr(pgs->
name, kbuf))
882 if(fabs(*pgs->
daddr) < 0.0001 || fabs(*pgs->
daddr) > 9999999.9)
886 if(strcasestr(pgs->
name, kbuf))
900 if(strcasestr(pgs->
name, kbuf))
920 strcpy(tbuf, pgs->
caddr);
921 strcpy(fbuf, basename(tbuf));
926 strcpy(tbuf, pgs->
caddr);
931 if(strcasestr(pgs->
name, kbuf))
933 st_print(
"E: %18.18s (char) %20s %s\n", pgs->
name, tbuf, hbuf);
938 st_print(
"E: %18.18s (char) %20s %s\n", pgs->
name, tbuf, hbuf);
1013 strcpy(
dvars[i].name,
"");
1037 strcpy(
dvars[i].name,
"");
1080 FAIL_INFO(
"Dynamic Variable slot all Used");
1094 FAIL_INFO(
"Usage: int integer_variable_name");
1109 FAIL_INFO(
"Usage: double double_variable_name");
1117 #define FORMAT_NORMAL 0
1118 #define FORMAT_EXP 1
1119 #define FORMAT_HEX 2
1124 char *cp, tstr[256], pbuf[256], tbuf[1024], bigBuf[512];
1204 bzero(bigBuf,
sizeof(bigBuf));
1223 sprintf(tstr,
"DVar: ");
1227 sprintf(tstr,
"GSVar: ");
1231 sprintf(tstr,
"HEADER:");
1235 sprintf(tstr,
"NOTDEF:");
1252 sprintf(tbuf,
"%e ", qv.
dval);
1253 strcat(bigBuf, tbuf);
1257 sprintf(tbuf,
"%s %s = %e ", tstr, pbuf, qv.
dval);
1258 strcat(bigBuf, tbuf);
1266 sprintf(tbuf,
"0x%x ", (
int)qv.
dval);
1267 strcat(bigBuf, tbuf);
1271 sprintf(tbuf,
"%s %s = 0x%x ", tstr, pbuf, (
int)qv.
dval);
1272 strcat(bigBuf, tbuf);
1279 sprintf(tbuf,
"%s ", qv.
buf);
1280 strcat(bigBuf, tbuf);
1284 sprintf(tbuf,
"%s %s = %s ", tstr, pbuf, qv.
buf);
1285 strcat(bigBuf, tbuf);
1296 sprintf(tbuf,
"0x%x ", qv.
ival);
1297 strcat(bigBuf, tbuf);
1301 sprintf(tbuf,
"%s %s = 0x%x ", tstr, pbuf, qv.
ival);
1302 strcat(bigBuf, tbuf);
1309 sprintf(tbuf,
"%d ", qv.
ival);
1310 strcat(bigBuf, tbuf);
1314 sprintf(tbuf,
"%s %s = %d ", tstr, pbuf, qv.
ival);
1315 strcat(bigBuf, tbuf);
1323 sprintf(tbuf,
"%s ", qv.
buf);
1324 strcat(bigBuf, tbuf);
1328 sprintf(tbuf,
"%s %s = %s ", tstr, pbuf, qv.
buf);
1329 strcat(bigBuf, tbuf);
1340 if(!
strcmp(pbuf,
"@Space"))
1342 strcat(bigBuf,
" ");
1346 if(!
strcmp(pbuf,
"@Comma"))
1348 strcat(bigBuf,
",");
1352 if(!
strcmp(pbuf,
"@Quote"))
1354 strcat(bigBuf,
"\" ");
1358 if(!
strcmp(pbuf,
"@Tick"))
1360 strcat(bigBuf,
"\'");
1364 sprintf(tbuf,
"%s ", pbuf);
1365 strcat(bigBuf, tbuf);
1384 fprintf(fp,
"%s\n", cp);
1398 st_fail(
"Write called without setting userfile");
1417 if(isalnum(cp) || isspace(cp) || cp == 46 || cp == 95)
1426 #define FIX_MATH_REPLACE 1
1427 #define FIX_MATH_COMPRESS 2
1455 st_print(
"%s(%s:%d):\n", __func__, __FILE__, __LINE__);
1456 st_print(
"%s(%s:%d): Starting String: %s\n", __func__, __FILE__, __LINE__, buf);
1463 st_print(
"%s(%s:%d):\n", __func__, __FILE__, __LINE__);
1464 st_print(
"%s(%s:%d): Compressed String: %s\n", __func__, __FILE__, __LINE__, buf);
1469 if((cp = strstr(buf, fixers[i].
find)))
1471 strncpy(cp, fixers[i].
replace, 3);
1479 st_print(
"%s(%s:%d):\n", __func__, __FILE__, __LINE__);
1480 st_print(
"%s(%s:%d): Ending String: %s\n", __func__, __FILE__, __LINE__, buf);
1501 st_print(
"%s(%s:%d): Starting Buf: %s\n", __func__, __FILE__, __LINE__, src);
1529 st_print(
"%s(%s:%d): Endig Buf: %s\n", __func__, __FILE__, __LINE__, dst);
1554 st_print(
"%s(%s:%d):\n", __func__, __FILE__, __LINE__);
1555 st_print(
"%s(%s:%d): Working token %s\n", __func__, __FILE__, __LINE__,
args->
tok[i]);
1565 sprintf(tbuf,
"%s ", qvw.
buf);
1572 st_print(
"%s(%s:%d): %s not a variable\n", __func__, __FILE__, __LINE__,
args->
tok[i]);
1575 sprintf(tbuf,
"%s ", qvw.
buf);
1582 st_print(
"%s(%s:%d): To doCalculation() %s\n", __func__, __FILE__, __LINE__, buf);
1604 char tbuf[512], var[256], evalBuf[1024];
1611 st_print(
"%s(%s:%d): Before Expansion: %s\n", __func__, __FILE__, __LINE__, buf);
1614 bzero(tbuf,
sizeof(tbuf));
1620 st_print(
"%s(%s:%d): After Expansion: %s\n", __func__, __FILE__, __LINE__, tbuf);
1629 st_print(
"%s(%s:%d): N = %d\n", __func__, __FILE__, __LINE__, n);
1650 st_print(
"%s(%s:%d): After findVariable(%s): Ret = %d\n", __func__, __FILE__, __LINE__, var, ret);
1664 st_fail(
"Failure in expression evaluation");
1676 st_fail(
"Not allowed to change protected variables");
1682 st_print(
"%s(%s:%d): Setting = DVAR\n", __func__, __FILE__, __LINE__);
1710 st_print(
"%s(%s:%d): Setting = GSVAR\n", __func__, __FILE__, __LINE__);
1730 st_report(
"CAUTION: ******* Setting HEADER variable: '%s' ********", qvl.
name);
1747 FAIL_INFO(
"Assignment variable not found");
1754 FAIL_INFO(
"No '=' sign found in expression");
1759 FAIL_INFO(
"You must define a variable before assignment");
1778 st_print(
"%s(%s:%d): IN: %s\n", __func__, __FILE__, __LINE__, in);
1795 st_print(
"%s(%s:%d): OUT: %s\n", __func__, __FILE__, __LINE__, out);
1805 char line[256], tbuf[256];
1807 bzero(tbuf,
sizeof(tbuf));
1815 st_print(
"%s(%s:%d): %s\n", __func__, __FILE__, __LINE__, tbuf);
1826 strcpy(line,
lcalc(tbuf));
1832 if(strstr(line,
"undefined"))
1835 FAIL_INFO(
"Failure in doCalculation()");
1839 if(strstr(line,
"Error"))
1842 FAIL_INFO(
"Failure in doCalculation()");
1846 if(strstr(line,
"Unable"))
1849 FAIL_INFO(
"Failure in doCalculation()");
1853 if(strstr(line,
"Missing"))
1856 FAIL_INFO(
"Failure in doCalculation()");
1860 if(strstr(line,
"Unknown"))
1863 FAIL_INFO(
"Failure in doCalculation()");
1871 st_print(
"doCalculation(): Entering Math Parser with: '%s'\n", line);
1874 if(!strncmp(line,
"~", 1))
1876 env->
rst = strtod(line+1, NULL);
1880 env->
rst = strtod(line, NULL);
1885 st_print(
"doCalculation(): Results: '%s', %.6e, len = %d\n", line,
env->
rst, strlen(line));
1893 st_print(
"Failure: doCalc() returned NULL\n");
1910 token = strtok(edit,
"\n\t ");
1911 while(token != (
char *)NULL)
1913 sprintf(
args->
tok[c++],
"%s", token);
1914 token = strtok((
char *)NULL,
"\n\t ");
1932 token = strtok(edit,
";");
1933 while(token != (
char *)NULL)
1936 token = strtok((
char *)NULL,
";");
1949 ret = history_expand(buf, &cp);
1953 st_report(
"Command %s, not found in History", buf);
1956 if(ret == 1 || ret == 0)
1988 for(i=0;p->
cmd;i++,p++)
1990 if(!strncasecmp(p->
cmd, buf, strlen(buf)))
2009 fprintf(fp,
"%s\n", buf);
2022 st_fail(
"recordingFname not set");
2037 char tbuf[512], bbuf[2048], batchBuf[2048];
2042 bzero(tbuf,
sizeof(tbuf));
2043 bzero(bbuf,
sizeof(bbuf));
2044 bzero(batchBuf,
sizeof(batchBuf));
2061 if(!strncasecmp(p->
cmd, arg, len))
2063 sprintf(tbuf,
"%s ", p->
cmd);
2075 st_report(
"Ambiguous Command: %s", arg);
2079 st_report(
"Possible Command: %s %s", bbuf, batchBuf);
2093 int i, j, n, len, commandOK, ret;
2094 char tbuf[512], ttbuf[512], evalBuf[1024];
2113 if(!strstr(buf,
"alias"))
2127 if(!strncmp(tbuf,
"eval ", 5))
2129 bzero(ttbuf,
sizeof(ttbuf));
2136 st_fail(
"Too few args for Eval Function");
2148 st_fail(
"Failure in expression evaluation");
2158 if(fabs(
env->
rst) < 0.01)
2174 if(!strncmp(tbuf,
"let ", 4) || !strncmp(tbuf,
"set ", 4))
2221 if(strstr(saveBuf,
"="))
2268 REPORT_INFO(
"parseCmd(): Swapping tokens 0 <-> 1");
2284 st_fail(
"parseCmd(): Missing or mal-formed command: %s", buf);
2311 st_report(
"parseCmd(): Returning %d", 0);
2321 st_print(
"parseCmd(): Missing argument(s) to command: [%s]\n", p->
cmd);
2326 st_report(
"parseCmd(): Returning %d", 1);
2378 st_fail(
"parseCmd(): Command: %s Failed", p->
cmd);
2455 int len, old_stquiet;
2464 st_report(
"Infinite Loop detected; exiting");
2468 st_print(
"process_line(): received NULL line\n");
2482 if(!strncmp(
myline+(len-1),
"?", 1) && !strstr(
myline,
"back"))
2487 if(!strncmp(
myline,
"@", 1))
2489 sprintf(tbuf,
"load %s",
myline+1);
2493 if(!strncmp(
myline,
"!", 1))
2498 if(!strncmp(
myline,
":", 1))
2538 rl_refresh_line(0, 0);
2555 rl_refresh_line(0, 0);
2571 rl_refresh_line(0, 0);
2586 rl_refresh_line(0, 0);
2602 rl_refresh_line(0, 0);
2617 rl_refresh_line(0, 0);
2713 if(!strncmp(
args->
tok[i], parg, strlen(parg)))
2761 st_report(
"Turning Command Recording Off");
2787 char *String, *Filter;
2790 char *Filtered = (
char *)malloc(strlen(String) *
sizeof(char));
2792 for(a=0;String[a];a++)
2794 if(!strchr(Filter, String[a]))
2796 Filtered[i++]=String[a];
2817 bzero((
char *)&sv_tok,
sizeof(sv_tok));
2819 token = strtok(edit,
"\n\t ");
2820 while(token != (
char *)NULL)
2822 sprintf(sv_tok[c++],
"%s", token);
2823 token = strtok((
char *)NULL,
"\n\t ");
2832 char *inbuf, *outbuf;
2846 st_print(
"%s(%s:%d):\n", __func__, __FILE__, __LINE__);
2847 st_print(
"%s(%s:%d): Working token %s\n", __func__, __FILE__, __LINE__, sv_tok[i]);
2854 st_print(
"%s(%s:%d): %s is a %d %d variable\n", __func__, __FILE__, __LINE__, sv_tok[i], qvw.
stype, qvw.
ntype);
2857 sprintf(tbuf,
"%s ", qvw.
buf);
2858 strcat(outbuf, tbuf);
2864 st_print(
"%s(%s:%d): %s not a variable\n", __func__, __FILE__, __LINE__, sv_tok[i]);
2867 sprintf(tbuf,
"%s ", qvw.
buf);
2868 strcat(outbuf, tbuf);
2874 st_print(
"%s(%s:%d): Result: %s\n", __func__, __FILE__, __LINE__, outbuf);
2885 char buf[256], tbuf[512], *cp1=NULL, *cp2=NULL;
2886 char ebuf[256], evalBuf[256], trueCmd[256];
2890 st_print(
"%s(%s:%d): Enter\n", __func__, __FILE__, __LINE__);
2893 bzero( buf,
sizeof( buf));
2894 bzero(tbuf,
sizeof(tbuf));
2902 st_print(
"%s(%s:%d): Parsing: %s\n", __func__, __FILE__, __LINE__, buf);
2909 st_print(
"%s(%s:%d): Now Parsing: %s\n", __func__, __FILE__, __LINE__, tbuf);
2915 cp1 = strchr(ebuf,
'(');
2916 cp2 = strrchr(ebuf,
')');
2922 st_print(
"%s(%s:%d): cp1: %s\n", __func__, __FILE__, __LINE__, cp1);
2931 st_print(
"%s(%s:%d): cp2: %s\n", __func__, __FILE__, __LINE__, cp2);
2942 strcpy(trueCmd, cp2);
2945 st_print(
"%s(%s:%d): True Cmd: %s\n", __func__, __FILE__, __LINE__, trueCmd);
2948 strncpy(evalBuf, cp1, cp2-cp1);
2949 evalBuf[cp2-cp1] =
'\0';
2953 st_print(
"%s(%s:%d): Eval Buf: %s\n", __func__, __FILE__, __LINE__, evalBuf);
2967 st_print(
"%s(%s:%d): Result: %.1f\n", __func__, __FILE__, __LINE__,
env->
rst);
2988 st_print(
"%s(%s:%d): Executing True Cmd: %s\n", __func__, __FILE__, __LINE__, trueCmd);
3000 st_print(
"%s(%s:%d): Searching for 'else' command in: %s:\n", __func__, __FILE__, __LINE__,
args->
cmd_tok[i]);
3007 st_print(
"%s(%s:%d): Found 'else' command: %s:\n", __func__, __FILE__, __LINE__,
args->
cmd_tok[i]);
3026 st_print(
"%s(%s:%d): Leaving\n", __func__, __FILE__, __LINE__);
3037 st_print(
"%s(%s:%d): Enter\n", __func__, __FILE__, __LINE__);
3048 st_print(
"%s(%s:%d): Leaving\n", __func__, __FILE__, __LINE__);
3059 st_print(
"%s(%s:%d): Leaving\n", __func__, __FILE__, __LINE__);
3070 st_print(
"%s(%s:%d): Enter\n", __func__, __FILE__, __LINE__);
3077 st_print(
"%s(%s:%d): Leaving\n", __func__, __FILE__, __LINE__);
3103 char sexStr[256], tbuf[256];
int ctrl_e_list(int arg1, int arg2)
int findGSVar(char *name)
int ctrl_l_list(int arg1, int arg2)
int doCalculation(char *buf)
char * strcmprs(char *str)
int recordThisCommand(char *buf)
struct PARSE_STACK * args
struct COMMANDS commands[]
struct PARSE_STACK parse_stack[MAX_PARSE_STACK]
int ctrl_a_list(int arg1, int arg2)
#define VARIABLE_TYPE_DVAR
int ctrl_b_list(int arg1, int arg2)
int setDFormat(char *buf)
int ivars_holders[MAX_DYN_VARS]
struct DYNAMIC_VARIABLES dvars[MAX_DYN_VARS]
int printH_FlagHelp(char *cmd)
char * FilterChars(char *String, char *Filter)
int setFlag(int flag, int state)
struct PARSE_FLAGS pflags[MAX_PARSE_FLAGS]
char tok[MAX_TOKENS][MAX_TOKENS]
int printBatch(char *name)
int isnumber(char *string)
int printPlanetVar(char *name)
int ctrl_p_list(int arg1, int arg2)
int sexagesimal(double dang, char *str, int prec)
int isPlanetVar(char *name)
struct FIX_OPERATORS fixers[]
int get_sv_tok(char *edit)
int fixMathOperators(char *buf)
int substituteVariables(char *inbuf, char *outbuf)
#define DYN_VARIBLE_PROTECTED
int removeAllSpaces(char *in, char *out)
int get_cmd_tok(char *edit)
char * lcalc(char *cmdbuf)
int fetchNGSHelp(char *name, char *buf)
struct PARSE_FLAGS * findFirstFlag()
int findVariable(char *var)
#define VARIABLE_TYPE_HEADER
struct GLOBAL_MEMORY * CGM
int ctrl_t_list(int arg1, int arg2)
int expandCmd(char *src, char *dst)
int reassembleCommand(char *buf)
int execBatch(char *name)
int my_add_history(char *buf)
int findAmbiguousBatch(char *arg, char *buf)
int findInArgs(char *parg)
int printAmbiguousCommand(char *arg, struct COMMANDS *cmds)
void subArgs(int wt, const char *fmt,...)
int findAnyVariable(char *name, struct QUERY_VAR *qv)
char cmd_tok[MAX_TOKENS][MAX_TOKENS]
int compressReassembleTokens()
int substituteAliases(char *buf)
double dvars_holders[MAX_DYN_VARS]
#define VARIABLE_TYPE_GSVAR
void process_line(char *line)
int makeDynVariable(char *var, int type)
int evaluateRightSide(int k, int n, char *buf)