Call this v0.6.0
This commit is contained in:
parent
17e53351a4
commit
e2a3beafe0
2
Makefile
2
Makefile
@ -2,7 +2,7 @@
|
||||
# (C) Copyright 2014-2021 Chris Dorman, some rights reserved (GPLv2)
|
||||
# Some changes and tweaks from Menchers
|
||||
|
||||
VERSION = \"0.5.4\"
|
||||
VERSION = \"0.6.0\"
|
||||
VERSION_EXTRA = \"$(EXTRA)\"
|
||||
|
||||
PREFIX ?= /usr
|
||||
|
@ -2,7 +2,7 @@
|
||||
# (C) Copyright 2014-2021 Chris Dorman, some rights reserved (GPLv2)
|
||||
# Some changes and tweaks from Menchers
|
||||
|
||||
VERSION = \"0.5.4\"
|
||||
VERSION = \"0.6.0\"
|
||||
VERSION_EXTRA = \"$(EXTRA)\"
|
||||
|
||||
PREFIX ?= /usr
|
||||
|
@ -13,15 +13,7 @@ Compiling
|
||||
* Modify test.ss to learn the basics of SS.
|
||||
* Run ./test.ss to execute the script.
|
||||
|
||||
***NOTE: if compiling on OSX/BSD, please uncomment #define BSD in src/config.h***
|
||||
|
||||
-----
|
||||
Directory bins/
|
||||
-----
|
||||
|
||||
Since slidescript is so small, I made a collection of current builds of slidescript
|
||||
in bins/*
|
||||
These are built on Debian 10 using GCC 9.2.0, and current TCC.
|
||||
***NOTE: if compiling on OSX/BSD, please uncomment #define BSD in src/config.h
|
||||
|
||||
-----
|
||||
Documentation
|
||||
@ -32,10 +24,12 @@ at this moment!
|
||||
* Commenting! Examples:
|
||||
* # Comment is real in this one
|
||||
|
||||
* Comp and loop functions:
|
||||
* Comp, loop, if, and ifn functions:
|
||||
* comp: "1" "1" -> compares integer 1 and 1 -> returns true
|
||||
* comp: "true" "false" -> compares string true and false -> returns false
|
||||
* loop: 3; print "Hello world!" -> Will loop print "Hello world!" 3 times.
|
||||
* if: true; print "True!" -> Prints "True!"
|
||||
* ifn: false; print "False!" -> Prints "False!"
|
||||
|
||||
* Read, write, and cat(enate) functions. Examples:
|
||||
* write "file.txt" "This will be written to file.txt"
|
||||
@ -85,6 +79,7 @@ at this moment!
|
||||
* filename=file.txt -> filename
|
||||
* filedata=File '%filename%' is being moved to moo -> %filename% is populated as file.txt
|
||||
* write "%filename%" "%filedata%" -> writes filedata contents to file.txt as expected.
|
||||
* unset "filename" -> Removes variable data from session memory to be redefinied / reused.
|
||||
|
||||
* Decoding and encoding strings
|
||||
* encode "Regular string" -> Converts to encrypted string 'Uhjvqds#xuulqj'
|
||||
@ -152,6 +147,16 @@ Changelog
|
||||
|
||||
Changes between version bumps in SlideScript. Hoping to have a lightweight top-down scripting language
|
||||
by V1.0.0 release! From there it will be molding and preserving the art.
|
||||
* V0.6.0
|
||||
* Multiple dynamic memory bug fixes, SlideScript is 99% dynamic on memory use
|
||||
* Included if, and ifn functions for comp, isfile, isdir, etc return values.
|
||||
* Incorporated unset function to wipe variable data within the same session.
|
||||
* Additions to help command
|
||||
* Code cleanup
|
||||
* Fixed large bug when attempting to use multiple variables within one function.
|
||||
* Fixed compile warnings on some systems
|
||||
* Fixed system uncompatibility for Windows systems, should work cross-compiled!
|
||||
|
||||
* V0.5.4
|
||||
* Added memory management framework for dynamic memory handling
|
||||
* tar.c cleanup
|
||||
|
@ -93,3 +93,26 @@ calc "46 / 3.4"
|
||||
# Executes the ss_exec_command variable data, 'ls'
|
||||
print "Testing exec function on system"
|
||||
exec "%ss_exec_command%"
|
||||
|
||||
# comp, loop, if, and ifn examples
|
||||
|
||||
# Check to see if /bin/sh exists
|
||||
exist=`isfile "/bin/sh"`
|
||||
|
||||
# Report findings on /bin/sh
|
||||
if: %exist%; print "/bin/sh exists!"
|
||||
ifn: %exist%; printf "/bin/sh does not exist!"
|
||||
|
||||
# Loop functions, example
|
||||
loop: 3; print "Loop print 3 times"
|
||||
|
||||
# Compare strings
|
||||
compvar=`comp: "matching" "match"`
|
||||
ifn: %compvar%; print "Strings don't match"
|
||||
|
||||
# Unset compvar
|
||||
unset "compvar"
|
||||
|
||||
# Set again, and compare integers
|
||||
compvar=`comp: "245" "245"`
|
||||
if: %compvar%; print "Values match!"
|
||||
|
@ -99,7 +99,7 @@
|
||||
" read \"<filename>\" |" \
|
||||
" write \"<filename>\" \"<string>\"\n" \
|
||||
" cat \"<filename>\" \"<string>\" |" \
|
||||
" exec \"<cmd>\"\n" \
|
||||
" exec \"<cmd>\" | unset \"<variable>\"\n" \
|
||||
"\n-[Variables, Pipes, and Backquoting]-\nExample:\n" \
|
||||
" FORK=`isfile \"index.html\"` -> returns 1 on find\n" \
|
||||
" write \"port.txt\" \"8888\" -> writes '8888' to port.txt\n" \
|
||||
@ -108,7 +108,8 @@
|
||||
"backquote function execution. Return values are saved as variables.\n" \
|
||||
"\n-[Specials]-\nExample:\n" \
|
||||
"comp: \"<int1/str1>\" \"<int2/str2>\" -> returns (true|false)\n" \
|
||||
"loop: <int>; <function> -> loops function for 'int' times\n"
|
||||
"loop: <int>; <function> -> loops function for 'int' times\n" \
|
||||
"if(n): <true/false/1/0>; <function> -> Processes function if true or false\n"
|
||||
|
||||
// Purpose: UX3 basic definitions
|
||||
// License: MIT/X. (c) OldCoder (Robert Kiraly) 1987-2021.
|
||||
|
@ -25,4 +25,5 @@ UX3_EXT QLIST QM_VARIABLES [ONE]; // Dynamic-memory QLIST
|
||||
void set_var(int index, char *varname, char *vardata);
|
||||
int get_var_count();
|
||||
char *get_var_data(char *varname);
|
||||
char *clear_var_data(char *varname);
|
||||
char *parse_vars(char *string);
|
||||
|
130
src/lexer.c
130
src/lexer.c
@ -60,8 +60,105 @@ char *process_line(char *line)
|
||||
// Lets add if and loop statements, make this
|
||||
// Somewhat usable as a language in other instances
|
||||
|
||||
// If statement, processes string if first arg is true
|
||||
else if(strncmp("if:", tok_srch, 3) == 0)
|
||||
{
|
||||
char *proc_return;
|
||||
char *dobuf;
|
||||
|
||||
// We have an if statement
|
||||
tok_srch = strtok(NULL, ";");
|
||||
|
||||
if(tok_srch == NULL)
|
||||
{
|
||||
x_warn("ss:warn:loop statement requires arguments");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Check if there's anything after the first quote
|
||||
if(strcmp(tok_srch, "\n") == 0 ||
|
||||
strcmp(tok_srch, " \n") == 0 ||
|
||||
strcmp(tok_srch, " ") == 0)
|
||||
{
|
||||
x_warn("ss:warn:loop syntax error, missing argument?");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
compbuf = qmalloc(QM_SS, (strlen(parse_vars(tok_srch)) + 1));
|
||||
*compbuf = '\0';
|
||||
strcat(compbuf, parse_vars(tok_srch));
|
||||
|
||||
tok_srch = strtok(NULL, ";");
|
||||
if(tok_srch == NULL)
|
||||
{
|
||||
x_warn("ss:warn:loop syntax error, missing last argument?");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
dobuf = qmalloc(QM_SS, (strlen(parse_vars(tok_srch)) + 1));
|
||||
*dobuf = '\0';
|
||||
strcat(dobuf, parse_vars(tok_srch));
|
||||
|
||||
if((strncmp("true", compbuf, 4) == 0) || (strncmp("1", compbuf, 1) == 0))
|
||||
{
|
||||
proc_return = process_line(parse_vars(dobuf));
|
||||
printf("%s\n", proc_return);
|
||||
fflush(stdout);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
else if(strncmp("ifn:", tok_srch, 4) == 0)
|
||||
{
|
||||
char *proc_return;
|
||||
char *dobuf;
|
||||
|
||||
// We have an if statement
|
||||
tok_srch = strtok(NULL, ";");
|
||||
|
||||
if(tok_srch == NULL)
|
||||
{
|
||||
x_warn("ss:warn:loop statement requires arguments");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Check if there's anything after the first quote
|
||||
if(strcmp(tok_srch, "\n") == 0 ||
|
||||
strcmp(tok_srch, " \n") == 0 ||
|
||||
strcmp(tok_srch, " ") == 0)
|
||||
{
|
||||
x_warn("ss:warn:loop syntax error, missing argument?");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
compbuf = qmalloc(QM_SS, (strlen(parse_vars(tok_srch)) + 1));
|
||||
*compbuf = '\0';
|
||||
strcat(compbuf, parse_vars(tok_srch));
|
||||
|
||||
tok_srch = strtok(NULL, ";");
|
||||
if(tok_srch == NULL)
|
||||
{
|
||||
x_warn("ss:warn:loop syntax error, missing last argument?");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
dobuf = qmalloc(QM_SS, (strlen(parse_vars(tok_srch)) + 1));
|
||||
*dobuf = '\0';
|
||||
strcat(dobuf, parse_vars(tok_srch));
|
||||
|
||||
if((strncmp("false", compbuf, 4) == 0) || (strncmp("0", compbuf, 1) == 0))
|
||||
{
|
||||
proc_return = process_line(parse_vars(dobuf));
|
||||
printf("%s\n", proc_return);
|
||||
fflush(stdout);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Loop
|
||||
else if(strncmp("loop:", tok_srch, 4) == 0)
|
||||
else if(strncmp("loop:", tok_srch, 5) == 0)
|
||||
{
|
||||
int loop_count, ii;
|
||||
char *proc_return;
|
||||
@ -97,13 +194,6 @@ char *process_line(char *line)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Check if there's anything after the first quote
|
||||
if(strcmp(tok_srch, "\n") == 0 || strcmp(tok_srch, " \n") == 0)
|
||||
{
|
||||
x_warn("ss:warn:if syntax error, missing first argument?");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
loopbuf = qmalloc(QM_SS, (strlen(parse_vars(tok_srch)) + 1));
|
||||
*loopbuf = '\0';
|
||||
strcat(loopbuf, parse_vars(tok_srch));
|
||||
@ -121,7 +211,6 @@ char *process_line(char *line)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
// IF statement
|
||||
else if(strncmp("comp:", tok_srch, 5) == 0)
|
||||
{
|
||||
@ -182,6 +271,29 @@ char *process_line(char *line)
|
||||
}
|
||||
}
|
||||
|
||||
// Unset variable function
|
||||
else if(strncmp("unset", tok_srch, 5) == 0)
|
||||
{
|
||||
char *varname;
|
||||
|
||||
tok_srch = strtok(NULL, "\"");
|
||||
if(tok_srch == NULL)
|
||||
{
|
||||
x_warn("ss:warn:unset syntax error, missing quote?");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if(strtok(NULL, "\"") == NULL)
|
||||
{
|
||||
x_warn("ss:warn:unset syntax error, missing end quote?");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
varname = clear_var_data(tok_srch);
|
||||
|
||||
return varname;
|
||||
}
|
||||
|
||||
// Change directory
|
||||
else if(strncmp("backdir", tok_srch, 7) == 0)
|
||||
{
|
||||
|
27
src/vars.c
27
src/vars.c
@ -48,7 +48,7 @@ char *get_var_data (char *varname)
|
||||
{
|
||||
char *varp = svars [xx].var_name;
|
||||
if (*varp == '\0') continue;
|
||||
|
||||
|
||||
if(strcmp (varp, varname) == ZERO)
|
||||
{
|
||||
return svars [xx].var_data;
|
||||
@ -58,6 +58,31 @@ char *get_var_data (char *varname)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// Clear variable data by name
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
char *clear_var_data (char *varname)
|
||||
{
|
||||
int xx;
|
||||
|
||||
for(xx = ZERO; xx < MAXVARS; xx++)
|
||||
{
|
||||
char *varp = svars [xx].var_name;
|
||||
if (*varp == '\0') continue;
|
||||
|
||||
if(strcmp (varp, varname) == ZERO)
|
||||
{
|
||||
qfree(svars[xx].var_data);
|
||||
strcpy(svars[xx].var_name, "\0");
|
||||
return "Variable free'd";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
int get_var_count()
|
||||
|
Loading…
x
Reference in New Issue
Block a user