From 6fe98d7d09b0783be2619c2923de7a0f3039e18a Mon Sep 17 00:00:00 2001 From: Pentium44 Date: Sun, 9 May 2021 21:00:31 -0700 Subject: [PATCH] Replace some missing files, fix bug in variable parser --- docs/README.txt | 231 ++++++++++++++++++++++++++++++++++++ docs/examples/functions.ss | 97 +++++++++++++++ docs/examples/net-listen.ss | 7 ++ docs/examples/net-toss.ss | 13 ++ docs/examples/webserver.ss | 25 ++++ src/vars.c | 18 ++- 6 files changed, 381 insertions(+), 10 deletions(-) create mode 100644 docs/README.txt create mode 100755 docs/examples/functions.ss create mode 100755 docs/examples/net-listen.ss create mode 100755 docs/examples/net-toss.ss create mode 100755 docs/examples/webserver.ss diff --git a/docs/README.txt b/docs/README.txt new file mode 100644 index 0000000..ea33076 --- /dev/null +++ b/docs/README.txt @@ -0,0 +1,231 @@ +====== +=== SlideScript +====== +A simple, user friendly scripting language for the average person. SS is meant to +be simple, and work as its documented as. SlideScript is a bin tool to say the +least and is a helpful *nix userland tool in the CLI + +----- +Compiling +----- +* Compile SS using the make command. +* Install SS using make install. +* 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. + +----- +Documentation +----- +Here is a list of functions and features that SlideScript comes with +at this moment! + +* Commenting! Examples: + * # Comment is real in this one + +* Comp and loop 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. + +* Read, write, and cat(enate) functions. Examples: + * write "file.txt" "This will be written to file.txt" + * read "file.txt" + * cat "file.txt" "Data to write to end of file.txt" + +* Basic math expressions + * calc "45 / 5"` or `calc "255.3 * 442.77" + * Of course addition and subtraction as well + +* Time example: + * time + +* Isdir and isfile function, example: + * isdir "examples/" -> returns 0 for not, 1 for is + * isfile "examples/functions.ss" -> returns 1, its there + +* File manipulation functions + * move "file1" "file2" -> Renames/moves file1 to file2 (mv) + * chdir "/home/user" -> Changes directory to /home/user (cd) + * backdir -> Moves you back one directory (..) + * showpath -> Returns current working directory (pwd alias) + * showdir -> Lists current directory (ls alias) + * showdir "/" -> lists '/' + * mkfile "file.txt" -> creates empty 'file.txt' (touch alias) + * mkdir "testing/" -> creates directory 'testing' + * mkfile "testing/file.txt" -> creates directory 'testing', and creates 'file.txt' + +* Execute example: + * exec "ls -al" (alias to ~"ls -al") + +* Slidescript compression functions, example: + * compress "archivename" "file1 file2 dir1 dir2" -> file1, 2, dir1, 2 archived, compressed, + and saved in in 'archivename.tar.ss' + * decompress "archivename.tar.ss" -> decompresses 'archivename.tar.ss' + +* Print example: + * print "Hi everyone!" + +* Sleep (Zzz) example (sleeps for 2 seconds): + * sleep 2 + +* Search functions, example: + * search "README.txt" "SlideScript" -> returns each line that 'SlideScript' is found on + +* Variable setting and passing + * 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. + +* Decoding and encoding strings + * encode "Regular string" -> Converts to encrypted string 'Uhjvqds#xuulqj' + * decode "Uhjvqds#xuulqj" -> Converts back to 'Regular string' + +* MD5 file checking + * md5 "file.txt" -> outputs filename and md5 hash + +* Layered piping + * md5 "file.txt" | encrypt "%PIPE" | write "file.txt.md5.enc" "%PIPE%" -> writes output of md5 to file.txt.md5 + +* Networking functions + * netlisten "" "" "" -> listens on and replies on found from outside + * nettoss "
" "" "" -> binds to outside server at
: and pushes thus, disconnecting + * nethttp "" "" -> throws up a web server on in the current working directory, + forkval (0 or 1, 0 don't fork into background / 1 do). + +* Backquoted function parsing within variables + * curtime=`time` -> Will set curtime value to return of time at the time of parse. + print "%curtime%" -> Prints the variable value of curtime, same operation as function time, but good for timing scripts + + +This will change rapidly as of currently, slidescript is in beavy development! To get the feel of the scripting, +the best bet is to take a look at some of the slidescript examples in 'examples/' + +functions.ss -> displays most basic functions +net-http.ss -> displays built in http web server +net-listen.ss -> displays slidescript's raw listen socket +net-toss.ss -> displays the 'client side' networking function. + + +----- +Todo list +----- + +This section will obviously expand and adapt to the direction of the language. This is going to change rapidly. + +* Add in-script functions +* Add script including +* Loops, and if statements +* More networking function flexibility +* File pull / file push functionality + +----- +Done +----- + +List of finished features, in a rough summary. + +* Added help, and version functions +* Simple syntax checking and error reporting, its a lazy language, syntax can sway. +* Most syntax errors will produce warnings instead of terminating process +* Up to 32 layer function piping +* Support for linux system calls +* Network listen socket, toss function +* Builtin HTTP server for disposeable use, can be ran in the foreground or forked into the background +* Read and write from file +* Some simple functions +* Shebang handling +* Variable support + +----- +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.5.4 + * Added memory management framework for dynamic memory handling + * tar.c cleanup + * fflush additions for telnet usage of SS. + +* V0.5.3 + * Added version, and help command + +* V0.5.2 + * Bugfixes and tweaks + * Added loop and comp(are) statements + +* V0.5.1 + * Compression and decompression bugfixes + * System working functions (move, chdir, and showpath) + * General clean, removed bins/ until language stabilizes + +* V0.5.0 + * Interactive mode gives users prompt on call to slidescript (Thanks OldCoder!) + * Added showdir (alias ls) + * Added compress / decompress functions (WIP, slow LZ77 algorithm) + * Multiple bug fixes + * Shell like interactive behavior + +* V0.4.5 + * Multiple bug fixes in not setting null byte to dynamic mem before strcat is used + * Function isfile, as well as mkfile and mkdir are added + * Added grep like function, search! + * Cleanup code + +* V0.4.4 + * Softened the kill program errors, added warn functions behind the scenes + * Added backquote function processing in variables + * Fixed bug in read not displaying multi-line files + * Fixed bug in write not finding first quote syntax + * Added function isdir, and cat(enate) function. NOT cat as in linux env. + * Code clean-up + +* V0.4.0 + * Added calc function for floating math equations + * Cleaned up some more syntax handling, as well as bugs + * Added structured and savable multi-layer piping up to 32 functions deep + +* V0.3.3 + * Added first networking functions: netlisten, nettoss, nethttp. + * Embedded web server functionality + * Cleaned up code + * Improved syntax handling on functions + +* V0.3.0 + * Added simple 2 layer function piping for more useful tasks + * Fixed a couple core dump bugs + * Now reads files into memory, and then forces text files through SS, allows for in file variables + * Added "md5" functionality + * Multi-formal working syntax + +* V0.2.1 + * Added "decrypt" decode function + * Added "encrypt" encode function + * Added system "exec" function + * Added basic syntax handling, for a more uniform language + +* V0.2.0 + * Added "delete" function + * Added embedded variable handling to SS functions (variables can be used like everywhere!) + * Added linux system calls via exec + * Some cleaning up. + +* V0.1.1 + * Added variable handling with a buffer size of 2KB per variable, and cap of 2048 variables. + * Now operates under the shebang! + +----- +Contributions +----- +Robert (OldCoder) Kiraly -> shebang support and string manipulations +(C) Copyright 2014-2021 Chris Dorman, some rights reserved (GPLv2) diff --git a/docs/examples/functions.ss b/docs/examples/functions.ss new file mode 100755 index 0000000..a1f63b7 --- /dev/null +++ b/docs/examples/functions.ss @@ -0,0 +1,97 @@ +#!/usr/bin/slidescript +############################################################# +#### Welcome to the world of SlideScript! #### +#### This script is here for the learning purposes of SS #### +#### Any line starting with a hashtag will treated as a #### +#### comment! #### +############################################################# + +# Slide Script, also refered to as SS, is extremely forgiving in +# syntax handling! +# Example: +# print "content" +# print "content"; +# print("content") +# print("content"); +### +### These will operate properly, as well as: +# Example: +# write "filename.txt" "data" +# write "filename.txt" "data"; +# write("filename.txt" "data"); +# write("filename.txt", "data"); +# +# IT ALL WORKS! +# SlideScript really syntaxes based on quotes and key function words, +# as well as pipes. It really doesn't mind whats around it otherwise +# And every variable is called by %varname%, defining variables, as normal + +# Variables in SS +ss_filename=file.txt +ss_stringdata=Data to encrypt and decrypt +ss_exec_command=uname -a + +# Printing function in SS +print "Welcome to SlideScript!" +# Sleep function in SS +print "Some content to print, working with '%ss_filename%' today!" +# Below demonstrates SS encrypting a string, passing the output +# over a pipe, and using the write function and %PIPE% variable +# holding the first functions output, writes to %ss_filename%; file.txt +### %PIPE% is the output from the first line function, enc +### %PIPE% is always applied when a pipe is used! +encode "%ss_stringdata%" | write "%ss_filename%" "%PIPE%" +# You're left with file.txt, lets move on + +# Lets read the file we just created and show how SS handles its +# own decryption algorithm +read "%ss_filename%" | decrypt "%PIPE%" +# Will display the original variable string! + +# SS MD5 function +# Lets get the md5sum of file.txt with our md5 function +md5 "%ss_filename%" | write "%ss_filename%.md5" "%PIPE%" +# Use a pipe, and push the md5 into a text file of file.txt + +# You can also stack pipes for whatever tasks you may need +# Here's the encrypt function in action, can also be used as encode +md5 "%ss_filename%" | encode "%PIPE%" | write "%ss_filename%.md5.enc" "%PIPE%" + +# Read md5 file +print "%ss_filename%.md5:" +read "%ss_filename%.md5" + +# Read encrypted md5 file and decrypt using decode alias +print "%ss_filename%.md5.enc:" +read "%ss_filename%.md5.enc" | decode "%PIPE%" + +# Delete function, SS can delete files and directories with one function +# NOTE: it is extremely powerful and can wreck your system if used in the +# wrong way! Proceed with caution, delete "/" WILL send your files to the +# grave. +### +# Lets delete the files we've been messing with, no system calls needed +delete "%ss_filename%" +delete "%ss_filename%.md5" +delete "%ss_filename%.md5.enc" +# Gone! + +print "Playing with some calc..." +# calc function, lets do some basic math +calc "32 * 1024" +# You can pipe calc to do multi layer equations +calc "32 * 1024" | calc "%PIPE% * 2" + +# Lets play with some big numbers here! +# SlideScript parses its calc functions using floating points, so you can +# handle decimal as well +calc "1024 * 1024" | calc "%PIPE% * %PIPE%" + +# Decimal +print "Here comes the decimal:" +calc "46 / 3.4" + +# Execute function, SS can call unix system calls! +# Executes the ss_exec_command variable data, 'ls' +print "Testing exec function on system" +exec "%ss_exec_command%" diff --git a/docs/examples/net-listen.ss b/docs/examples/net-listen.ss new file mode 100755 index 0000000..e9adbbd --- /dev/null +++ b/docs/examples/net-listen.ss @@ -0,0 +1,7 @@ +#!/usr/bin/slidescript + +port=2020 +search=hi +respond=bye + +netlisten "%port%" "%search%" "%respond%" diff --git a/docs/examples/net-toss.ss b/docs/examples/net-toss.ss new file mode 100755 index 0000000..59b9ba5 --- /dev/null +++ b/docs/examples/net-toss.ss @@ -0,0 +1,13 @@ +#!/usr/bin/slidescript + +address=127.0.0.1 +port=2020 +data1=This data is gonna be pushed to the server side host! +data2=Here's the second set of data getting tossed to the server +data3=Of course, do a little more considering the transfer is instant! + +nettoss "%address%" "%port%" "%data1%" +nettoss "%address%" "%port%" "%data2%" +encode "%data3%" | nettoss "%address%" "%port%" "%PIPE%" + +nettoss "%address%" "%port%" "hi" diff --git a/docs/examples/webserver.ss b/docs/examples/webserver.ss new file mode 100755 index 0000000..2bbfc23 --- /dev/null +++ b/docs/examples/webserver.ss @@ -0,0 +1,25 @@ +#!/usr/bin/slidescript +# Generate an index.html example for the built-in HTTP daemon example +# This will be used as a disposible web server! + +# First, lets populate some data for the web server itself, this script +# will generate the index.html for the web server before launch. + +# Variables of the contents for index.html +header=SlideScript ~ Web server +head=

SlideScript - disposible web server index page

+content=

There's not much to see here yet, more to come!

+footer=
powered by ss:http
+ +# Webserver port +port=8080 + +# Filename in a variable +filename=index.html + +# Writing the variable data to the file +write "%filename%" "%header%%head%%content%%footer%" + +# Starting web server in the foreground, change 0 to 1 to fork to background +print "Ctrl-C to kill me!" +nethttp "%port%" "0" diff --git a/src/vars.c b/src/vars.c index 8fc9aca..68d1299 100644 --- a/src/vars.c +++ b/src/vars.c @@ -63,8 +63,8 @@ char *parse_vars(char *string) char *output_pointer; char *variable_pointer; - //finished = qmalloc(QM_VARIABLES, (strlen(string) + 1)); - finished = qmalloc(QM_VARIABLES, 16280); + finished = qmalloc(QM_VARIABLES, (strlen(string) + 1)); + //finished = qmalloc(QM_VARIABLES, 16280); *finished = NULLBYTE; @@ -95,22 +95,20 @@ char *parse_vars(char *string) } variable_pointer = get_var_data(varbuffer); - printf("Variable: %s, data: %s, full string: %s\n", varbuffer, variable_pointer, string); if(variable_pointer == NULL) { x_error("ss:error:variable data not found, abort!"); } - if(*input_pointer == NULLBYTE) break; - var_len = strlen(variable_pointer); - - chk_qm0(finished); - - //qrealloc(finished, (strlen(finished) + var_len + 1)); - + int moo = output_pointer - finished; + finished = qrealloc(finished, (strlen(finished) + var_len + 1)); + output_pointer = moo + finished; strcat (finished, variable_pointer); + output_pointer += var_len; + + if(*input_pointer == NULLBYTE) break; } *output_pointer = NULLBYTE;