Version History

From Sputnik Wiki
(Difference between revisions)
Jump to: navigation, search
(Upcoming changes in next version)
(Sputnik 0.37 @ 13-04-2016 12:17 AM)
 
(24 intermediate revisions by one user not shown)
Line 1: Line 1:
== Upcoming changes in next version ==
+
== Sputnik 0.38 @ 09-11-2016 12:00 PM ==
 +
* Updated the "Pengo" example with the final version ever made in Sputnik it features a lot more ghosts/powerups/ais and levels
 +
* Updated the "Sputnik IDE" example it is now the latest and final version of the Sputnik Old GUI IDE it also comes with several sample projects including Peppie etc
 +
* Added new example it is a server manager for the game 7 days to die
 +
* Added new example D2ChanBot it is a bare bones Diablo 2 channel bot for PVPGN
 +
* Added back Linux/Mac support once more (again as long just 1 person is interested!)
 +
* Major improvement to "Class extends Name" where if the class is already running it will be hotswapped instead of the older version kept on pre initialized variables
 +
* Fixed a bug in Min() and Max() that could make them not work properly in rare cases
 +
* Fixed a major bug when deleting a key from an array if the key was numeric and very high
 +
* Fixed a bug with funtions that get an array recursively they will now not include the recursive arrays themself and just its values
 +
* Changed how Unserialize() works to fix a glitch in DLL Sputnik that can cause a crash (only happeneds in DLL version)
 +
* Added UnsetClassFunction() to do exactly what it says it does
 +
* Fixed a bug in sort() where if the array has only 1 (or less) elements it will return blank instead of returning a copy (if the flag asks for a return)
 +
* Fixed Tb() to add the . to the end instead of the beginning if the string isnt long enough
 +
* Added Bt64()
 +
* Added Tb64()
 +
* Did a little tweak to arrays to make sure they can never ever return disposed SVs
 +
* Made a tweak for binary "$var[0] = 'T'" it now works and doesnt need @'T' since it will correctly use the first char of the string
 +
* If you do "$var[7] = 'T'" on binary it will now expand the binary size so the position fits inside just like how it does with strings
 +
* Added BinaryGrow() it can be used to increase the size of binary by appending stuff to the end either zero bytes or a specific byte
 +
* Added StrGrow() it works same as BinaryGrow() but for strings instead also it returns a copy instead of editing the string
 +
* Vec() improved internally espeically with binary and will now if a binary provided is over 8 bytes it will use the first 8 as an integer in operations
 +
* StrUncompress() is now a lot faster
 +
* Order() speed improved a bit
 +
* NthField() has been speed up a lot and fixed to handle multiple lines
 +
* CountFields() fixed to handle multiple lines so it now returns how many fields there are in grand total amung all records
 +
* Addes NthRecord() it works similar to NthField() but returns an entire record at the given line instead of just a field
 +
* Added CountRecords() it works similar to CountFields() but returns how many records there are (one per line)
 +
* Fixed a few exceptions that can happen if invalid binary is given for reading NBTs
 +
* Added IsVarArrayOf() it checks if a variable is an array and checks if all elements inside the array are a specific type (such as string or class names)
 +
* Added a wave of encryption functions below:
 +
* EncCreatePass() this allows you to create a new pass (key and iv) from a given passphase with any amount of iterations and optionally a base salt
 +
* EncGenPass() this generates a new key and iv (randomized) using secure crypto random number generating it can be used to encrypt/decrypt AES etc data
 +
* EncPassInfo() prints all information about a pass made with EncGenPass()
 +
* EncGenKey() generate an RSA public & private key for use with encryption
 +
* EncKeyInfo() prints all information (including the raw xml (for export/saving), bytes etc) about a key made with EncGenKey()
 +
* EncLoadKey() loads an encryption key from a string
 +
* Encrypt() encrypt data using a key
 +
* Decrypt() decrypt data using a key
 +
* Sign() sign data using a private key that is proof only the owner of the private key could have signed but anybody with the public key can verify it
 +
* Verify() verify a signature with data using a public key
 +
* EncryptAes() encrypt data using the AES algorithm using a pass made from EncGenPass()
 +
* DecryptAes() dencrypt data using the AES algorithm using a pass made from EncGenPass()
 +
* EncryptPass() encrypt (using public key) a pass created from EncGenPass() with a key created from EncGenPass() so the encrypted pass can be sent to the client to decrypt using its private key
 +
* DecryptPass() decrypt (using private key) an encrypted pass created from EncryptPass() so that AES encrypted data can now be decrypted
 +
* EncryptChunk() this combines EncryptPass() and EncryptAes() to bascially encrypt the pass first then encrypt the data with the password then combine the encrypted data and the encrypted password into a single binary chunk to be decrypted later by the end users private key
 +
* DecryptChunk() this simply reverses what EncryptChunk() did and returns the original data
 +
* Added @EncKeyLen macro that shows how many bytes a "key" part of an AES pass should be (should you want to seed your own)
 +
* Added @EncIvLen macro that shows how many bytes a "iv" part of an AES pass should be (should you want to seed your own)
  
 +
== Sputnik 0.37 @ 13-04-2016 12:17 AM ==
 +
* Fixed a serious bug where $this wasnt being set on unserialized classes
 +
* ConsoleWithInput example now splits big strings using wordwrap so it all fits properly
 +
* Count() is more accurate when used on arrays with disposed elements it will no longer say the array has the element
 +
* All obfuscation, renaming and everything to do with such has been removed from Sputnik (so full source is now viewable) however Sputnik will maintain embedding .dlls in its .exe since they are third party support dlls and are not "Spuntik___.dll"s (such as mysql.data.dll) as such they will be kept inside the .exe since it is rather pointless not to keep them there since then there is less dlls to give with a compiled script (same goes for Sputnik.dll)
 +
* Due to lack of Linux/Mac users (zero infact) Sputnik will no longer support them forever I kept Sputnik having support for them platforms for a long time and even came back to it after it was briefly removed however this time it is final there just nobody who uses it on them platforms...
 +
* The Sputnik GUI IDE which is used to create GUI scripts easily now has all its source code included in the Examples folder as another good example of Sputnik
 +
* Removed the "Goto" statement as a result Switch/Select now use "continue _name;" instead of "goto _name;"
 +
* You can now use & to pass variables by ref when using ... in a function like "function test(...&$numbers)"
 +
* Fixed a bug where "test(...$a);" wouldnt work but "test2(...$a, 7);" would since the parser considers (<ONE OBJECT>) to be the different
 +
* As a result of the above fix stuff that gets surrounded in (((((()))))) should now get resolved properly (sputnik now peels back the () layers to reveal the item itself)
 +
* Operator overloads are a bit faster
 +
* Class magic functions, operator overloads and iterator functions are now thread safe however only one thread at a time can use the SAME function (multiple threads can use multiple magic functions sure but only one can use the same function at a time)
 +
* Fixed a typo in "NBTCompoundReadFile" that would make it ignore the compression flag
 +
* Fixed the same typo that also affected "NBTCompoundWriteFile"
 +
* Improved safety of NBTCompoundWriteFile and made it even more reliable (it even checks the written bytes)
 +
* List() now supports iterator classes
 +
* List() is now slightly faster
 +
* You can no longer use "strings" on break/continue statements and must instead provide an identifier like "continue test;"
 +
* You can no longer use (  ) on break/continue statements and they now only accept either no params, an identifier or a variable/decimal etc if you do not provide an identifier then you will be expected to provide something that resolves to an integer
 +
* You can now continue to a named label like "continue('labelName');" and it will redo the label block similar to how you can break from named labels well this lets you redo the named label similar to how java handles named labels
 +
* You can  now do a "try{}" by itself and you do not need to include any "catch" statements this allows for quick and easy "try" statements you can still include a "finally" statement at the end if you wish
 +
* Fixed a minor glitch in "try" where if the exception variable was somehow not an "exception class" Sputnik could crash
 +
* You can now use "try" like a "using" statement using the new "()" braces for example "try($a = new test()) { }" everything inside the "()" will get an unset() once the try is finished (after the finally if there is one) this allows like a combination of "try" and "using" at the same time which is good for cleaning up after you
 +
* Added a new "When" statement onto the "Catch" statement it works like so "Catch (Exception e) When ($a == 60)" it basically acts like an if statement and that individual catch is only triggered when the "when" statement is true you can of course use it without the exception info like "Catch When ($a == 10)"
 +
* Added new function IsVarPointer() it basically does same thing IsVarPtr() and IsVarUPtr() do but both at same time
 +
* GetVarType() now returns @TypeError on failure
 +
* Added a second param to GetVarType() which when true allows the first param to be a string of name a type such as "binary" and then the function will return the type number from the string so now GetVarTypeName() has a reverse function
 +
* "Continue" and "Break" statements no longer give an error immediately if the name they are looking for does not exist however the code will still fail
 +
* Named blocks are now defined like "name:{}" instead of "name{}"
 +
* Macro "@CaseState" now works properly for "Switch" statements
 +
* Fixed a glitch in "Switch" statement where where ranges and regex would not work
 +
* Fixed a bug where if the caseId was not found then a switch/select would loop forever
 +
* Renamed "_default" to "_caseDefault" for Switch/Select
 +
* Switch/Select that are nested etc will now properly destroy any continue to starting with "_case" so that it does not spread beyond the switch this does of course mean that you can only jump to/from the current switch/select and not into another nesting will not work for the jumps (same as before)
 +
* Various improvements to "Switch" and "Select" they also now share the same code base (Select inherits Switch)
 +
* Fixed a glitch in Named Blocks that could cause them to iterate forever
 +
 +
== Sputnik 0.36 @ 19-12-2015 12:17 AM ==
 +
* Fixed a bug where a while etc placed after a statement could cause an exception if there wasnt enough params
 +
* Fixed a potential issue where modifying a string during a loop would cause a crash
 +
* Fixed a potential issue where modifying a binary variable during a loop would cause a crash
 +
* Fixed a bug where if you used unset() or something happened to unset the variable used in a foreach loop the loop would fail
 +
* Fixed another bug in IsSet() also it properly handles refs and it returns false if an SV become an error data type
 +
* Enum rule Flags TRUE now causes the first value to be 0 so you can set that as *none* etc
 +
* Added PadSep() it is just a simple function that will create text with separators of a given count for example PadSep('N', '/', 4) will produce 'N/N/N/N' (without quotes)
 +
* You can now define FLOAT hex literals using 0x30Ap
 +
* You can now define DOUBLE hex literals using 0x30AP
 +
* Oct() has been renamed to OctDec() so it is easier to see what it is doing
 +
* OctDec() is now faster
 +
* Added DecBin() to convert Decimal to Binary
 +
* Added BinDec() to convert Binary to Decimal
 +
* Fixed a bug in "ReturnCast" where it couldnt use regular types like Int64 etc
 +
* Function rules "Returns/ReturnCast" can now be set to require a class type by name instead of just the usual types like Int32
 +
* All functions now exexcute the "Return" statement if they are using "Returns" or "ReturnCast" flag and they did not execute the "Return" statement themselves
 +
* Added a new rule to functions "Strict" that will disregard inherited classes and require a match on the main class name
 +
* JSONDecode() can now correctly read raw true/false (the ones that arent quoted) such as {"active":true}
 +
* JSONEncode() now saves booleans as literal true/false (without quotes at all) instead of as a string
 +
* Added new option to JSONEncode() called @JSON_STRING_BOOLEAN this will make booleans become literal "true" "false" strings if you dont use this option then booleans will be saved as literal true/false (without quotes at all)
 +
* Added new option to JSONDecode() called @JSON_CHECK_STRING_BOOLEAN make it so any string that contains just "true", "false" (case insensitive) will become a literal boolean this wont slow down the decoding much since it only checks strings that are 4 or 5 chars in length
 +
* A string casting as a bool is now true if it contains "TrUe" etc case no longer cares for case
 +
* Changed internals of the "object" variable type cleaned it up alot there is now interfaces for casting on objects so anything can do it not just classes etc (will prove useful for future object types)
 +
* VarObjTypeToString() function deleted
 +
* VarObjTypeFromString() function deleted
 +
* GetVarOBJTypeName() function deleted
 +
* GetVarOBJType() function deleted
 +
* IsVarObj (param 2 removed)
 +
* Count() no longer returns null when used on a class that does not contain the count property (return 0 instead) same goes for other fails
 +
* Objects when cast as a string now return their type and default "ToString" function output if the object does not have a Sputnik string returner
 +
* The (binary) cast on an array is now recursive
 +
* Added "Synchronized" flag to functions it can be used to specify only one instance of that function can be executing at a time (regardless of how many threads want to)
 +
* ThreadCreate() accepts function(){} instead of a string
 +
* HotKeySet() accepts function(){} instead of a string
 +
* Added new function FMod()
 +
* Added new internal class "Serializable" it can be used to custom handle a class in Serialize() and Unserialize()
 +
* You can now use () braces in List() params it will grab a variable and set its value like "list( ($this->$cat) ) = $arr;" this is useful since you can use the () braces to set any variable even static :: variables etc where as before you could only set a named global/local variable the reason it has to use the () braces and not work without it is because of the way the param system was designed a long time ago however it is expected most people would try to () brace if their first idea of not using braces didnt work (it is logical to assume braces might help)
 +
* Operators [] and []! and [<>] and [<=>] for arrays now work on ref arrays without needing to * resolve the ref (not every operator in Sputnik should resolve the ref however these ones are specific to arrays and should work on ref arrays to be logical just like [index] does)
 +
* Added new internal class "Traversable" it is simply used to check if a given class can be used in a foreach loop you cant use "Traversable" by itself and it must be used with a built in thing
 +
* Added new internal class "Iterator" (it inherits Traversable) it can be used on a class and provides 3 functions "Valid()" should check if the current position is valid (so it lets you allow null returns) "Rewind()" should reset the position back to start and "Next()" should return the next element from the iterator and finally "Key()" should give the current key either as a number or string (the key will always be converted to a string) all this is for use with the foreach() loop as a side note the foreach() loop runs the "Rewind()" function before it starts the loop
 +
* Added new function IteratorToArray() it does exactly what the name says converts a class that inherits "Iterator" into an array with optional key grab or just values
 +
* Fixed a bug is IsSet() it was not using "return true/false" properly and would return TRUE if you returned false (since you didnt return null)
 +
* Added a simple chat only Hotline Server to the Examples folder it has a better protocol implementation than the client does and is more accurate and improved the HotlineClient example a bit
 +
* Added new example The Long Dark trainer this trainer demonstrates how to use CheatEngine scripts with Sputnik without having CheatEngine installed and never using CheatEngine at all (Using SputnikAsm.dll)
 +
* Improved InArray() a bit
 +
* Added ... for variadic functions it is used to provide easier usage of infinite arg functions "function f($req, $opt = null, ...$params)" once the function reaches $params (or any name you want) it will push all the remaining params into it and send it as an array to the function you can also do type based like "function f($req, $opt = null, int ...$params)"
 +
* Added ... for variadic functions but this time as a call param for example "add(1, ...$operators);" will unpack $operators array or iterable class into arguments of the function
 +
* Fixed a bug where if a function call ended in failure (major error) the stack wouldnt be popped
 +
* Added new function HashEquals() it will compare an expected hash to an input hash make sure its valid it will also check they both the same size and what not for use with crypt() and other such hash functions
 +
 +
== Sputnik 0.35 @ 29-09-2015 12:17 AM ==
 +
* Bitwise string stuff no longer casts each string char as a byte (thus losing data if its unicode) so it now correctly works with Sputniks unicode strings
 +
* Fixed a bug where the list of classes a class inherits may get disordered resulting in some interesting things to happen
 +
* Greatly improved speed of class magic functions: JsonSerialize() ShouldJsonSerialize() __Set() _Get() __IsSet() __Unset()
 +
* Fixed a bug where isset($a['Bar']); would not call the class function __IsSet() with first param as 'Bar' at all
 +
* Fixed a bug where isset($a['Bar']); would call the class function __Get() when it shouldnt
 +
* Fixed a bug where unset($a['Bar']); would call the class function __Get() when it shouldnt
 +
* Fixed a glitch where if there is no class function __Unset() and you did unset($a['Bar']); it would try unset the elemnent
 +
* Parent::FunctionName() will no longer give an error if you inherited more than one class and will instead use the first inherited class to locate the function if it is not found on the first it wil try the second and so on until it finds it
 +
* Renamed function Use() to PluginLoad()
 +
* Renamed function Unuse() to PluginUnload()
 +
* Removed function TokenClass()
 +
* Removed function IsToken()
 +
* The parser no longer needs to use TokenClass()/IsToken() or ObjToVar() and as a result is more user friendly also it doesnt require pointers anymore (the calc example has been updated to show this change)
 +
* Fixed a minor issue where Parse() might not return NULL on a certain failure
 +
* You no longer need to have the __Construct() { } as an empty when using the parser you can now omit it entirely
 +
* Renamed magic class function __call() to __invoke()
 +
* Added magic class function __call() it has two arguments the first is a function name and the second is an array of params this will get called if you try call a class function that does not exist its name and arguments you tried to use will be passed to __call()
 +
* Added magic class function __callStatic() it works similar to __call() but instead of working on an instance it works in static context only
 +
* Call() no longer checks if you typed a static function
 +
* CallArray() no longer checks if you typed a static function
 +
* ->/=> no longer checks if you typed a static function
 +
* class::function no longer tells you if you didnt type a static function
 +
* self:: now shows an error if there is no self class found
 +
* Removed requirements that enum (when using flags) values be divisible by 2 and and higher than 0 this means you get to decide what the number is and join multiple flags together however you should take care to make sure the number is valid
 +
* Renamed rule "override" on enums to "replace"
 +
* Renamed rule "override" on functions to "replace"
 +
* Added UInteger() and the new cast (UInteger) for unsigned 64-bit integer (or highest available)
 +
* You can now use the "Not" keyword instead of "!" for example if (NOT $a) is the same as if (!$a)
 +
* You can now do $array .= "Value" and no longer need to encase "Value" in array("Value")
 +
* You can now do $array ..= "Value" and no longer need to encase "Value" in array("Value")
 +
* Fixed a bug where say("CAT") x 3 would print "CATCATCAT" instead of printing each one on a new line
 +
* Fixed same bug as above this time time with xx instead of x
 +
* You can now have infinite $ on your variable for use with Variable Variables like $$$$bar it will resolve each one
 +
* Added IntDiv() it works like a normal $a / $b when using integers but does it in a function
 +
* Added FDiv() it works like IntDiv() but for use with floating point numbers
 +
* Fixed a bug where Switch() wasnt working properly with ranges and regex
 +
* Fixed a bug in preprocessor where #predef and #unpredef would get confused by case now it is properly case insensitive
 +
* Fixed a bug with the parser that caused the current instance of Sputnik to get lost on second parse when using preprocessor
 +
* Fixed a bug where if you did a function name with no brackets like test; the ";" symbol would be used as its *first and only* param this has been fixed so now ; is omitted from any call this also means you can no longer use ; as a computable value
 +
* As a result of the above fix you can now use redo; properly again in try/catch/finally
 +
* You can now omit the ( ) when doing "my $Func = Function() { printr @Args; };" like so "my $Func = Function { printr @Args; };" this will cause the Args rule to set to TRUE automatically so you dont need to type it
 +
* Added new macro @ArgCount this contains the number elements in @Args for functions with infinite params @ArgCount is basically Count(@Args)
 +
 +
== Sputnik 0.34 @ 24-09-2015 05:45 AM ==
 +
* Unknown (was lost somehow)
 +
 +
== Sputnik 0.33 @ 20-09-2015 05:55 PM ==
 +
* Def has been renamed to Const since Def was confusing for some people
 +
* Sputnik classes have been reworked massively internally and now use a lot less ram and should be faster too bascially before this change all new className() would create a new instance of the class (which is a fairly big object) but now only one instance of the class ever exists at a time and instead of creating new ones it simply refs the existing one with an array of the class variables (and id etc) so each individual class you create are all using the same class but different internal array
 +
* Classes no longer require a ; after their declaration (when stand alone)
 +
* Enums no longer require a ; after their declaration (when stand alone)
 +
* You can now embed Functions inside IF statements (or any statement) using the Embedded keyword before the function also you must include a ; after the final }
 +
* You can now embed Classes inside IF statements (or any statement) using the Embedded keyword before the class also you must include a ; after the final }
 +
* You can now embed NAMED Enums inside IF statements (or any statement) using the Embedded keyword before the enum also you must include a ; after the final }
 +
* Removed Compile() function it was a useless thing (now) that should have been removed in 0.32 but I forgot to do so
 +
* Removed UnuseAssembly()
 +
* Drastic performance increase on Str2Hex()
 +
* Drastic performance increase on Hex2Str()
 +
* StrIndex() now returns a CHAR instead of STRING (if getting) and returns NULL on failures instead of alternating between empty strings and false also it is now faster too
 +
* Added TrimToNull() it will trim a string to the first null char it finds (zero)
 +
* StrShuffle() is now faster
 +
* Fixed bug in StrVersCmp() where it only compared the str1 to the length of str2 then stopped now it properly does all the str1
 +
* StrVersCmp() now returns the proper diff instead just -1, 0, 1
 +
* StrTr() now returns NULL on failure and no longer has an exception if an invalid array is given (or no array)
 +
* WordWrap() improved massively it is now faster and works a lot better and no longer has any chance of failing to wrap properly and all bugs are fixed
 +
* Removed GUIInvoke() from SputnikOldGui.dll
 +
* Added GUISendToBack() and GUISendToFront() to the SputnikOldGui.dll to replace the removed GUIInvoke()
 +
* As a result of the above new functions the IDE now properly works once again
 +
* Added @Argc it contains the number of arguments in @Argv so @Argc is bascially Count(@Argv)
 +
* Sputniks internal ReturnStruct no longer uses "ref" keyword so any plugins/commands will need to remove "ref" when using it other than that no real differance
 +
* Made some minor improvements to how -> is handled internally
 +
* Improved speed of objects a little bit should help with classes etc
 +
 +
== Sputnik 0.32 @ 18-09-2015 08:04 PM ==
 +
* Since Sputnik has been used as a *library* for some time now and even more so with the current push to make all Sputniks functions available in the SpkLib class it has been decided to remove all *code* obfusctation and control flow alternations from Sputnik this should make Sputnik run a bit faster (especially so for games)
 +
* Removed % operator for DotNet usage since it has been decided Sputty doesnt need it (this change also removes anything that makes use of the DotNet system Sputnik was using from the % operator)
 +
* Removed Fixed() statement and CharPtr (char*) from Sputnik since it was confusing to have it in and it not needed anymore (it was good a LONG time ago but not anymore)
 +
* Use() can now use an array for first param that contains a type name followed by namespace name this will be used as normal (as if you just used namespace only as usual) but since you also provided a type name Sputnik will try find that type and if it happens to be a Sputnik plugin it will load and activate it this allows Managed C++ plugins to work properly just like C# plugins do (with a bit extra typing of course)
 +
* Fixed CommandSystem in lib which also fixed ConsoleServer example etc
 +
* SocketConnect() no longer crashes if it doesnt connect but instead returns FALSE so you can now do SocketConnect(~~) or die('bla'); etc
 +
* Improved SocketShutdown() the same as SocketConnect()
 +
* Improved SocketSendTo() the same as SocketConnect() and also made it cast a variable to binary if its not already
 +
* Improved SocketSendFile() the same as SocketConnect()
 +
* Improved SocketSend() the same as SocketConnect()
 +
* Improved SocketReceive() the same as SocketConnect()
 +
* Improved SocketReadLine() the same as SocketConnect() also it will return NULL on failures instead of an empty string so you can tell them apart
 +
* Improved SocketReadChar() the same as SocketReadLine()
 +
* Improved SocketPoll() the same as SocketConnect()
 +
* Improved SocketOpt() the same as SocketConnect() also failures will return NULL
 +
* Improved SocketListen() the same as SocketOpt()
 +
* Improved SocketIsBound() the same as SocketOpt()
 +
* Improved SocketIp() the same as SocketOpt() and fixed a bug where if you entered invalid key it would not have an issue
 +
* Improved SocketHandle() the same as SocketOpt()
 +
* Improved SocketClose() the same as SocketOpt()
 +
* Improved SocketBind() the same as SocketOpt()
 +
* Improved SocketAvailable() the same as SocketOpt()
 +
* Improved SocketAccept() the same as SocketOpt()
 +
* Improved SocketCreate() the same as SocketOpt()
 +
* Improved SSApprove() to only return false on failures instead of exceptions
 +
* Improved SSClientIP() to only return NULL on failures instead of exceptions
 +
* Improved SSClientStatus() the same as SSClientIP()
 +
* Improved SSDisapprove() the same as SSApprove()
 +
* Improved SSDrop() the same as SSApprove()
 +
* Improved SSRead() the same as SSClientIP()
 +
* Improved SSRecv() the same as SSClientIP()
 +
* Improved SSSend() the same as SSApprove()
 +
* Improved HostResolve() to return NULL on failure
 +
* BinaryIndexOfAny() supports proper start/length position stuff of Sputnik
 +
* Added IsHashAny() it works similar to IsHash() but will trigger if at least one element is
 +
* Changed Trainer examples to use the new SpkProc since the old read/write have been replaced with it
 +
* Updated Dark Earth Trainer to store its data in JSON to avoid issues reading it in future
 +
* Added HasFlag() it can be used to check if an instance of an enum contains a given flag or an array of flags
 +
* Added SetFlag() it can be used to set a flag (or array of flags) on/off in the enum instance
 +
* Added HasFlagAny() it works like HasFlag() but returns true if at least one flag matches instead of requiring them all to
 +
* Fixed a possible exception from IntToRom() so it will return an empty string instead
 +
* Hash() now uses UTF8 and all return values are UInt64 instead of Int64 this makes it look a bit better since it doesnt produce negative numbers anymore also any chance of an overflow exception has been fixed
 +
* Fixed several places in Spuntik that look at 0x followed by hex digits and the x was not being checked for case so only x would work no X
 +
* Fixed a crash where StrNew() would evenutally cause a memory exception to explode and kill Sputnik (it correctly allocates now)
 +
* StrChr() now has a param for length
 +
* Strpbrk() now has a param for length
 +
* StrrChr() now has a param for length
 +
* Changed how the index param works on StrIndex() it now works the same as the one in SubStr() does
 +
* StripCSlashes() speeded up a bit by fixing a bug that made it copy the string for no reason
 +
* Modified InStr() a bit and improved it a lot its flag is now a boolean for IgnoreCase it now returns -1 on failure (instead of 0) however it still maintains returning 0 on success also the position it returns (when valid) has been fixed so it correctly starts at the index and that index can be used in substr immediately the start can now be negative like substr() and there is a new length param the same as substr() and finally fixed a bug where it scans the needles length in the haystack even if the neddle is going DEEP past the null terminator which could crash Sputnik
 +
* Removed InStrRev() from lib folder (it was outdated and slow) will add a new speedy one soon
 +
* Added InStrRev() it works similar to InStr() but instead of searching from left to right it searches from right to left it is very fast (just like InStr()) however it only starts inside the start/length you give it and not beyond that so if you want to search half your string set start to 0 and length to strlen / 2
 +
* Fixed a bug in InStr() (and indirectly InStrRev()) where if the item was not found it may return -2 or something now the cap is -1
 +
* StrCmp() now has start/length params
 +
* StrStr() now has start/length params and it returns NULL on failure instead of FALSE and fixed a bug where if the match was the first char in the string it would return NULL
 +
* StrPos() offset param has been removed and replaced with start/length params (This will break any scripts using StrPos() but it is a very minor change all you do is shift the offset to after the flags and everything will work again)
 +
* Added StrDup() it is just a simple duplication function for strings (similar to clone() does)
 +
 +
== Sputnik 0.31 @ 14-09-2015 10:18 PM ==
 +
* ReadMem() has been changed to use UnpackSingle() instead of Unpack() so only one thing can be read at a time (but you can of course read entire chunks of ram and process it using Unpack()) also there is no "binary" def anymore instead you simply do not include a def at all and it iwl use the size to read the many bytes and return it as raw bytes
 +
* << >> <<< >>> all now support negative shifting a negative shift will bascially abs the value (make it positive) then reverse the shift so << becomes >> and so on thanks to electrojustin for the idea
 +
* Exponents operator ** will now use double if either side is a double (instead of only using double if both sides were not int)
 +
* It was possible for LEFT side to become NULL of a += etc if the RIGHT side was internally a null (C# null) it is now handled correctly and the RIGHT is set to a NULL SV ($variable) instead
 +
* Bitshifting operators now handle their conversions a bit better (flipping data types) and the <<< and >>> now always return a UInt64 (unless the LEFT is a float/double in which event it will return a Double)
 +
* Class stuff like $a->test() now correctly display an error if $a is not a class or the function isnt found
 +
* Added ?-> operator which can be used like $a?->test() or chained like $a?->$child?->$child2?->test() the ?-> operator is basically saying, if the object to the left is not null, then fetch what is to the right, otherwise return null and halt the access chain
 +
* Improved some internal IsNumeric stuff so it can handle - properly
 +
* Fixed GetFullPath() so it no longer returns paths with \ on end of files
 +
* Added Op() it can be used to create binary for example instead of typing bin(0x1C, 0x20, 0x30, 0x40) you can type op("1C 20 30 40")
 +
* Added new internal class (the first of it's kind) called SpkProc (available on Windows only) it can be used to hook onto a running program by either its finding its window name or process name amd once attached it can get all kinds of information such as the id, handle, nativeHandle
 +
* SpkProc can read/write memory, inject dlls and scan for byte sequences (with ?? bytes) and locate the address of it
 +
* SpkProc can execute assembly scripts to patch/unpatch the process by injecting assembly code and doing a variety of useful features including spawning threads, allocating ram, giving full access to ram this feature comes courtasy of CE's Auto Assembler converted into a DLL for Sputnik to use nice and easily to use this ability you must include SputnikAsm.dll with your project
 +
* SpkProc the purpose of this class is to provide an easy interface to manage a program/game's memory and inject code/dlls and generally do a lot of useful things (Sure Sputnik already has a ReadMem/WriteMem but SpkProc provides a more serious interface than just read/write)
 +
* Fixed Hex() command so Hex(1033) will become "409" instead of "0000000000000409" by making the default *length* -1 and making it so -1 just makes as many hex as it can without silly trailing zeros (unless a zero is part of the hex of course)
 +
* WordWrap has been improved a little bit and now handles 0 width properly and allocates ram better
 +
* Added OffsetCalc() this function is used to calculate the START and LENGTH of an array index it works using same thing SubStr() uses so if start is negative it counts from end and so on etc this allows you to include the same offset calculation for start/length of things that Sputnik does for your own needs
 +
* Added DiffCalc() it can take two values and calculate the difference  between them and return the diff type Same/Add/Sub with a raw diff which can be added to the base value to make it become the second and a non-raw diff that must be added or subbed for first to become second
 +
* Added StrIncrement() it works the same way as doing ++ on a string like $a++
 +
* If the first param in BinaryConcat() is an array with the first element as a reference to a binary variable and the second as a binary variable it will use the ref to be the result of the concat and the second one as the separator
 +
* Almost all binary functions accept non binary variables and will either convert it to binary or use it as binary instead of failing
 +
* Fixed a bug is IsXDigit() where it would not recognize a-f but A-F was fine
 +
* BinaryIndexOf() now supports start, length stuff like SubStr() and if the needle isnt a byte or char it will cast it to binary (if its not already) and use that instead
 +
 +
== Sputnik 0.30 @ 26-06-2015 03:33 PM ==
 +
* Added Linux/Mac support back in because electrojustin uses Linux and wanted to use Sputnik (as long as at least one person is interested in such things I will keep it Linux compatible) of course Windows specific features and functions that require Windows APIS will not be available but everything else will be
 +
* Fixed the TestCases to work properly on Linux (case sensitive file system was being annoying)
 +
* Parser() no longer cries and crashes if you have certain symbols in the path string to the grammar sheet
 +
* tr/a-z/A-Z/ and it's alias y/a-z/A-Z/ now works if stand alone on the $_ variable
 +
* If you define a function like "Function Test" and do not include the () after the function name then it will automatically set itself to ARGS TRUE since it will assume you want to use the $args variable
 +
* Fixed Vec() to correctly handle bits below 8 which means it can now work with BITS properly
 +
 +
== Sputnik 0.29 @ 25-06-2015 08:40 AM ==
 +
* Improved the Preprocessor a bit
 +
* Added #unpredef which can remove a #predef variable
 +
* When you Include() or Require() a file its *location* is added the the Sputnik paths so any includes it includes (requires too) will be found in its folder and so on
 +
* You can now use #include "filename.spk" to directly include a script in the current script (as if they were one) of course Sputnik keeps track of each include to make sure any errors you get include the correct line number and file name
 +
* The #include "filename.spk" now also adds the path of the file to the Sputnik paths so any includes it includes can be found easily
 +
* Included a Telnet style client/server in the Examples folder that supports infinite clients and is fairly complete and ready to use as a good example of how to use TCP sockets in Sputnik.
 +
* CoreFunctionExists() added for easy checking if a core function exists
 +
* CoreFunctionList() added for easy getting a list of all core functions
 +
* UnsetClass/Function etc etc no longer throw an exception if its not found but still return false
 +
* Fixed StrShuffle() it no longer crashes due to out of bounds nonsense
 +
* ReadMem(), PTRRead(), PTRWrite(), DLLStructGetData(), DLLStructSetData() and all Sputniks marshal stuff now uses Un/PackSingle() instead of Un/Pack() and should gain a speed boost because of it
 +
* Fixed a bug where if you "($i++) x 3;" on a line by itself (where $i started at 0) it would end up at 4 instead of 3 this also fixed a similar bug on operator "xx"
 +
* ClassInfo() added it can provide a vast amount of *behind the scene* information on a class and its functions, properties and so on
 +
* FunctionInfo() added it can provide a vast amount of *behind the scene* information on a function
 +
* LineInfo() added it can provide vast amount of *behind the scene* information the current line of source code being executed
 +
* Added IncompleteClass it will be used when something fails to make a class properly
 +
* When a class is unserialized if the original class cant be located it will create an instance of IncompleteClass instead
 +
* Added a flag to IsVarClass() so you can now do a strict compare when checking by name (strict will ignore inherit)
 +
* A a few names are now impossible to be used as class names such as parent, core, self etc since they are used internally and it would get confused
 +
* Fixed the #define when making function links it seems to have been broken since ARGS was changed on functions
 +
* Added Preprocess() it can be used to process source code as a string and return what the preprocessor would normally return so stuff like comments will be removed and #if #elsif #endif will be resolved and only the correct match will be given
 +
* VarList() added it can obtain information about all global/local etc variables such as their type, object type, depth in the stack, scope type and so on
 +
* VarTypeToString() added it can convert a raw type of a variable (@typeString etc) into a string (text) for easier viewing
 +
* VarTypeFromString() added it can convert a raw type (in string form) of a variable ("String" etc) into a raw type (number) again
 +
* VarObjTypeToString() added it can convert a raw type of a variable object (@typeClass etc) into a string (text) for easier viewing
 +
* VarObjTypeFromString() added it can convert a raw type (in string form) of a variable object ("Class" etc) into a raw type (number) again
 +
* VarScopeToString() added same as above it will convert a raw type of a var scope into a string
 +
* VarScopeFromString() same a sabove it will convert a string into a raw var scope
 +
* ScopeToString() added same as above it will convert a raw type of a scope into a string
 +
* ScopeFromString() same a sabove it will convert a string into a raw scope
 +
* Improved the IDE compiler a bit to make use of the Preprocess() function so if you do stuff like #if etc it will remove the code that doesnt fit with the preprocessing from your compiled exe which is useful if you want to have debug code without having to comment ou all the debug code (dont expect it to work perfect if you #if out entire functions inside windows etc since it does not account for that but if you keep the #if etc inside the functions it should work fine)
 +
* You can now do foreach($lines) and it will automatically add "as my $_" (without quotes) for you
 +
* You can now regexp match like "m/^start/" (without quotes) and skip the "$a =~ " (without quotes) part and it will use $_ automatically
 +
* You can now regexp replace like "s/^start/test/" (without quotes) and skip the "$a =~ " (without quotes) part and it will use $_ automatically
 +
* Changed how && (AND) works instead of returning TRUE if both sides are TRUE and FALSE if both sides (any side) isnt TRUE it now works like this example: $this && $that -- is handed like: If $this is true, return $that, else return $this.
 +
* Changed how || (OR) works instead of returning TRUE if either sides are TRUE and FALSE if either sides (any side) isnt TRUE it now works like this example: $this || $that -- is handed like: If $this is true, return $this, else return $that.
 +
* Finished the Flip Flop operator it now works exactly the same as the one in Perl (which is an amazing operator btw) so now Sputnik can do the awesome flop flop operator
 +
* Added ff operator it is bascially the same as the .. operator but it locks it in flip flop mode so there is no chance it can ever enter range mode
 +
* You can now (once again) place raw words inside the [ ] within an index of a string for example say("value is $val[test]"); this will work just as good as if you type 'test' inside the [ ] brackets of course it is smart enough to check if you wanted to put $test inside it or numbers so the '' will only be added if the stuff inside the [ ] begins with an alphanumeric or _ char and is definately not numbers nor a variable its worth noting it adds ' ' for you so if you desperately want it to parse the information make sure to include "" yourself (escaped of course)
 +
 +
== Sputnik 0.28 @ 19-06-2015 07:12 PM ==
 +
* Sputniks linux and mac support has been removed (nobody was using it on them platforms anyway) and it is now back to Windows only (I will not waste my time making two/three of many functions if nobody is going to use it!!!) (anybody who wishes to cry about this may go insult T3Charmy for it is HIS fault I gave him everything he needed to produce the linux plugin for Sputnik I even made the first function to demonstrate yet he was too lazy or useless to bother adding ONE more function for such lack of caring why should I care? screw him)
 +
* Fixed the [Args("true/false")] by default being set to FALSE (it was set to TRUE by default for some unknown reason)
 +
* Fixed a bug where if you do "$b[$pos++] = $c;" it would cause the $pos to increase TWICE
 +
* TB() added it will convert a string to number (network-order UInt32)
 +
* BT() added it will convert a number (network-order UInt32) to string
 +
* Removed <..> operator (since .. is the same thing)
 +
* Added new flag to IsDeclared() so you can check max depth local scope
 +
* SSRecv() no longer returns the IP (you must use SSClientIP() for that)
 +
* Fixed a bug in CharPtr stuff that would cause StrNew('A', 5, true); to fail
 +
* Fixed a glitch with << <<< >> >>> ** where it would use the type of the first variable even if the second variable was a bigger type so shift operations could end up returning a BYTE when it should logically be returning a number that can hold the data (sucha s Int32) so now it will always seek to return an Int64/UInt64 if both numbers are integers (of any size) it wil return a double if any of the two are a float/double and it will return a double if the second is a float/double (regardless of the first) and finally it will return a Int64 if it cant find a suitable type to return (in all integer cases it will return a UInt64 if the value of the first/second is higher than an Int64)
 +
* EnumIsDefined() added it can check if an enum contains a value which is good for checking if a value you have is valid for the enum
 +
* Fixed FileRead() it was reading each byte of the file as a char now it reads the chars properly
 +
* If you try use the GET/SET of a property but the GET or SET does not exist it will no longer crash Sputnik but instead show an error message showing the line number of the fault
 +
* FileOpenText() added it can be used to open a kind of file stream reader that lets you read a char/many chars/lines at a time it also works with FilePos() and FileSeek()
 +
* FileReadText() added it is used with the return from FileOpenText() it has several formats you can read the text file in
 +
* ByteBufferToBinary() added it can be used to convert any ByteBuffer into raw binary instead of needing to cast
 +
* GetExtension() has been fixed so it will no longer cause a crash if it is impossible to find the extension
 +
* FileSizeFormat() added it can be used to format a number into a file size string for example 10000 becomes 9.77 KB
 +
* Added a new param to FileSize() where it can return a string like from FileSizeFormat() instead of the integer value
 +
* FileWriteLines() added it can be used to write an ARRAY to file using each element as a line for the file you can also set the line breaks text
 +
* FileAppendLines() added it can be used to write an ARRAY to the end of a file using each element as a line for the file you can also set the line breaks text
 +
* Added "rw" flag to FileOpen (does same thing that an empty flag does but added this just for future compatibility)
 +
* FileTemp() added it will create a uniquely named, zero-byte temporary file on disk and returns the full path of it
 +
* GetRelativePath() added it tires to makes a path relative to another
 +
* SocketReadChar() added it will read the next char it can find (and wait until it gets one)
 +
* SocketReadLine() added it will read the next line it can find (and wait until it gets one)
 +
* Improved internal disposing of sockets when unset() is called
 +
* FileMove() added for obvious reasons
 +
* ConsoleKeyAvailable() added it can be used to check if there is a key ready to be read from the console
 +
* ConsoleCapsLock() added it can be used to check if caps lock is down on the console
 +
* COnsoleSetCursor() added to make it so you can set the x+y in one function
 +
* COnsoleSetBuffer() added to make it so you can set the width+height in one function
 +
* COnsoleSetSize() added to make it so you can set the width+height in one function
 +
* Added a special Console app manager to the lib folder (with an example of its use in the Examples folder) this script lets you easily handle console apps that will be printing to screen (server apps etc) and yet still allow the user to type stuff
 +
* Added a Command System to the lib folder that makes it easy to create and use commands with its built in parser and what not (it is used by the Console app manager)
 +
* Added ability to use a TRUE flag on InputC() to get more information about the key pressed
 +
* Added all the @KeyConsole____ macros for checking console keys
 +
* The first param of ClassList() may now be null to act as if you didnt enter a first param
 +
* Added a new param to ClassList() where you can filter classes based on if they inherit from a specific class name
 +
* Changed all the stragglers I could find that still returned 1 or 0 instead of True/False stuff like <  and > operators etc and a bunch of opt/socket options etc so at this point there shouldnt really be anything much that returns 1 or 0 instead of true/false which is a not hugely important but I like it to be consistant (a long long time ago Sputnik didnt have a boolean so 1 and 0 were used instead)
 +
* sbSetNewLine() added it will set what the text is used for the *newlines* of sbAppendLine() etc
 +
* sbGetNewLine() added it will get what the text is used for the *newlines* of sbAppendLine() etc
 +
* SumDouble() added for the LINQ
 +
* SumInt() added for the LINQ
 +
* SumUInt() added for the LINQ
 +
* First() added for the LINQ
 +
* FirstOrDefault() added for the LINQ
 +
* Last() added for the LINQ
 +
* LastOrDefault() added for the LINQ
 +
* Obtain() added for the LINQ it is used like Select in c# to obtain all the *values* directly insead of doing any matching etc
 +
 +
== Sputnik 0.27 @ 14-06-2015 01:15 PM ==
 +
* Defaults work on all possible function param types now (instead of what they worked on before)
 +
* You can now define a function called __Call inside a class and call it by using the class variable directly like $class(); of course params work like $class(10, 20);
 +
* The Sputnik compiler (the thing that makes scripts into exes) has been improved internally (inside Sputnik itself) it now works better and is faster etc
 +
* The preprocessor has been reworked and now supports #if #elsif #endif and you can execute the defines for the #if etc using #predef (since #define is already in use for something else entirely) also the preprocessor retains its local variables (set with #predef) throughout the entire program even during eval/include and other things (as a side note you can forcefully clear the #predef variables by doing #predefwipe
 +
* Include() and Require() should now correct handle the #include-once and #require-once and behave properly
 +
* BinHexEncode() added it can be used to encode data in BinHex 5.0 format which can be useful for creating files that will work on very old Macs
 +
* BinHexDecode() added it can be used to decode data from BinHex 5.0 format which can be useful for handling files from very old Macs
 +
* Fixed BinaryExpand() from returning binary on errors and will instead correctly return strings
 +
* PackSingle() added it works similar to Pack() but only lets you specify a single thing to pack because it only does one thing at a time it is extremely fast (multiples of times faster than the normal pack()) since it doesnt need to process anything it just knows what to do instantly
 +
* UnpackSingle() added it similar to PackSingle() it is a speeded up version of the Unpack() that is extremely fast when dealing with one thing to unpack you can also set a position to unpack from
 +
* Added numerous checks to the NBT system to avoid any chances of exceptions or crashes
 +
* Added magic number checks to the NBTCompound read/write/save/load etc etc so it will now make extra sure the data is valid before trying to process it
 +
* Improved Sputniks internal reflection so @macros should no longer have a chance to fail to load
 +
* IsVar() added it works the same as $var ~~ BlaBla and the same as $var Is BlaBla however you get to define what to check using a string
 +
* Added a param to allow for compression on NBTCompundWriteFile() and NBTCompundReadFile() it is enabled by default
 +
* All Stream___() function has been removed and will be replaced with something better soon
 +
* Removed IsVarStream()
 +
* Renamed SSSendBufferCreate() to SSBufferNew()
 +
* Renamed SSSendBufferAppend() to SSBufferPut()
 +
* Changed flag 'b' to 'B' on SSBufferPut() to read SByte (signed byte)
 +
* Added new flag 'B' to SSBufferPut() to send Byte (unsigned byte)
 +
* Added new flag 'V' to SSBufferPut() to put raw bytes (without a length count)
 +
* Changed flag 'b' to 'B' on SSRead() to read SByte (signed byte)
 +
* Added new flag 'B' to SSRead() to read Byte (unsigned byte)
 +
* Added new flag 'V' to SSRead() to read all remaining bytes
 +
* SSApprove() no longer needs the server param
 +
* SSClientIP() no longer needs the server param
 +
* SSClientStatus() no longer needs the server param
 +
* SSDisapprove() no longer needs the server param
 +
* SSDrop() no longer needs the server param
 +
* Fixed a bug on SSSend() where if unset() was used too soon then no data would be sent
 +
* ByteBufferNew() added it will create a new ByteBuffer which is the replacement for the old Stream functions it is more robust, has more features and is resistant to crashes/errors from bad information etc
 +
* ByteBufferPut() added to put data into a ByteBuffer (adds to the end)
 +
* ByteBufferGet() added to get data from a ByteBuffer (gets from current position)
 +
* ByteBufferGetBinary() added to get all the binary data from a ByteBuffer (ignores the position) or get all bytes starting from offset to a given length (or all remaining bytes from that offset)
 +
* ByteBufferPeek() added to peek at data from a ByteBuffer (same as get but without moving the position forward)
 +
* ByteBufferCapacity) added get the current capacity of a ByteBuffer
 +
* ByteBufferRewind() added to set the position of a ByteBuffer back to the start
 +
* ByteBufferLimit() added to get the current capacity/length that can be written (based on its currently allocated size) of a ByteBuffer
 +
* ByteBufferPosition() added to get and set the position of a ByteBuffer to any value
 +
* ByteBufferRemaining() added to get how many bytes are possible to read from current position of a ByteBuffer
 +
* ByteBufferHasRemaining() added to check if its possible to read at least one byte from the ByteBuffer
 +
* ByteBufferClear() added to clear all data from a ByteBuffer (reset it back to new) also if the mark is defined then it is discarded
 +
* ByteBufferFlip() added flip a ByteBuffer it flips this buffer then the limit is set to the current position and then the position is set to zero also if the mark is defined then it is discarded
 +
* ByteBufferMark() added to mark the position in a ByteBuffer
 +
* ByteBufferReset() added to reset the position to the previously marked position in a ByteBuffer
 +
* ByteBufferCompare() added compare two ByteBuffers to see if they are equal
 +
* ByteBufferClone() added clone a ByteBuffer
 +
* Completed all the ByteBuffer functions thus the replacement for Stream___() is complete
 +
* Updated the Sputnik Socket client/server examples for the changes to the Sputnik Socket functions
 +
* Added ISputnikCloneable interface that allows defining what happens when Clone() function is used on the object
 +
* Fixed a bug on the bit pack/unpack where types 'a' and 'Z' may not correctly get null padded
 +
* Fixed $ptr[0]:f += 100; etc so it correctly makes sure it uses the type set in the :TYPE (it was often times using the += type instead of the :TYPE
 +
* Removed all hardcoded .. stuff from Sputnik (all patterns gone etc)
 +
* Removed the hardcoded 'to'  (it was a word for ..)
 +
* Added new operator .. which works the same way the old hardcoded .. did for patterns/splice etc but it has an additional feautre in that it can now flip flop a true/false statement for example m/cat/ .. m/dog/ will be false until it finds cat then it will become true from that point forward until it finds dog then it will flop back to being false again (make note that the start and end conditions are considered TRUE if they are matched)
 +
* Fixed stuff that does like say("cat $i") foreach($a as my $i); and say("cat $i") for(0..10); etc etc basically stuff that did a function CALL followed by a LOOP statement (without a ; after the call) would be called once and in a very weird way the ( ) of the call was being instead of the IDENTIFER( ) so it was causing weird things to happen but now thats fixed
 +
* Deleted the @@magic ifs (it served no real purpose beyond avoinding typing 4 chars?
 +
 +
== Sputnik 0.26 @ 07-06-2015 10:08 AM ==
 +
* Sputnik now comes with "XNA Pengo" a pretty complete Pengo game I made in Sputnik it features monsters, sounds, music two player support it is a big demonstration of how to make a game in Sputnik even tho it is outdated read its "Readme.txt" for more information
 +
* Sputnik now comes with a a bit of information on embedding Sputnik in a C# application with its sample project see the "Embed Sputnik" folder the sample project is the SputnikXNA.dll source code (complete and up to date) this source code and buildable project will demonstrate how to create plugins for Sputnik that add new features and commands to Sputnik and also how to interface C# with Sputnik
 +
* Sputnik now comes with "Compiler.exe" (console mode) and "CompilerW.exe" (win mode) programs that will compile a Sputnik script into a .exe however if it makes use of any dlls you should include them with it
 +
* Added UrlEncodeBytes() It can onvert a binary variable into a URL-encoded string, starting at the specified position in the array and continuing for the specified number of bytes
 +
* Added UrlDecodeBytes() It can onvert a URL-encoded binary variable into a decoded string using the specified encoding, starting at the specified position in the array, and continuing for the specified number of bytes
 +
* %DotNet->Calls() are now much faster as it caches all the methods
 +
* Sputnik Socket SendBuffer is now wiped when unset() is used (freeing up its memory faster)
 +
* SSSendBufferCreate can now be used with 0 params
 +
* The 'is' and 'isnot' (~~ and !~ respectively) now check the .NET class name as well and it also checks all inherited types as well and as a bonus it also checks all interfaces (even inherited onces) unless of course you are using Strict then it will only check the immediate type + interfaces
 +
* Function arguments that include an oject now name use the same checks as ~~ so if something works on one it works on both this will make it easier than having to maintain two sets of code that do the same thing
 +
* List() arguments also benefit from the fuction argument improvement
 +
* Fixed a bug on XNA lib for Update/Draw
 +
* Fixed a bug on XNA lib where if a key has no *visible char* (like left arrow) it would cause all rest of the variables to mess up
 +
* Remade how function/list/enum arguments work internally and it is now much better you can now use = to set a default on any param type you are no longer limited to only default "$var = 10" stuff but can now do stuff like "NBTTagCompound $var = newTag()" for a param
 +
* SameValues() Check if all values within an array are the same value type such as all String and return the type or return error type
 +
* DecPad() has been remade so it inserts all the 0s at the same cycle instead of one by one which will make it faster and more efficient
 +
* Added many NBT functions that work similar to Minecrafts NBT system but designed specifically for Sputnik and supporting Sputniks data types below is the list of them:
 +
* NBT() Convert a variable into an accurate NBT representation of it
 +
* NBTNew() Create a new NBT of a given type and optionally give it a name and starting value
 +
* IsVarNBT() Check if a variable is contains an NBT
 +
* NBTCompare() Compare two NBT variables to see if they contain the same data
 +
* NBTCopy() Make a clone of an NBT
 +
* NBTGetId() Get the ID type of an NBT
 +
* NBTGetName() Get the name (tag key) of an NBT
 +
* NBTGetName() Set the name (tag key) of an NBT
 +
* NBTHash() Compute the CRC32 hash of an NBT
 +
* NBTToString() Return a string representation of an NBT
 +
* NBTToVar() Return the Sputnik variable representation of an NBT
 +
* NBTCompoundClear() Clear all tags
 +
* NBTCompoundCount() Return the amount of tags
 +
* NBTCompoundGet() Get a tag by name
 +
* NBTCompoundSet() Set a tag by name
 +
* NBTCompoundGetKeys() Get an array of all keys
 +
* NBTCompoundGetTags() Get an array of all tags
 +
* NBTCompoundGetMap() Get an associative array of all keys and tags
 +
* NBTCompoundHasKey() Check if a given tag exists by name
 +
* NBTCompoundIsEmpty() Check if there are no tags
 +
* NBTCompoundRemove() Remove a specific tag by name
 +
* NBTCompoundWrite() Write the NBTTagCompound to binary or a buffer
 +
* NBTCompoundRead() Create a new NBTTagCompound from a binary array or a buffer
 +
* NBTCompoundWriteFile() Write the NBTTagCompound to a file
 +
* NBTCompoundReadFile() Create a new NBTTagCompound from reading a file
 +
* NBTCompoundCompress() Compress the NBTTagCompound to binary
 +
* NBTCompoundDecompress() Decompress a NBTTagCompound from binary
 +
* NBTCompoundWriteCompressed() Compress the NBTTagCompound and write it to a buffer
 +
* NBTCompoundReadCompressed() Decompress a NBTTagCompound from a buffer
 +
* NBTListAppend() Add an NBT to the end of the list
 +
* NBTListCount() Return how many tags exist in the list
 +
* NBTListGet() Get a tag at the given index
 +
* NBTListHasId() Check if an index is valid and contains a tag
 +
* NBTListRemove() Remove the tag at the given index
 +
 +
== Sputnik 0.25 @ 16-12-2014 08:06 AM ==
 +
 +
* There is now a Sputnik.dll included for use in your own .NET projects such as VB.NET and C# this DLL can used to embed Sputnik in your projects or simply to use Sputnik as a library for its many nice features you could even just use its array AV system if you wanted
 
* HTTPGetString improved
 
* HTTPGetString improved
 
* If you enter 0.0.0.0 as the IP Address in SocketBind() it will allow any IP to work
 
* If you enter 0.0.0.0 as the IP Address in SocketBind() it will allow any IP to work
Line 14: Line 526:
 
* Added HTTPMakeQuery() it can used to quickly and easily convert a Sputnik array into a HTTP query string with proper escapes and everything
 
* Added HTTPMakeQuery() it can used to quickly and easily convert a Sputnik array into a HTTP query string with proper escapes and everything
 
* Added HTTPParseQuery() it can parse an HTTP query string back into an array
 
* Added HTTPParseQuery() it can parse an HTTP query string back into an array
 +
* If you have a class function named like "push" and you wish to use the Sputnik core function "push" inside that function you can now do core::push() to execute the core (or even a user made function that is outside of the class) using the new core:: before the function name
 +
* The StringBuilder class from lib folder has been remade for the new StringBuild series of functions added
 +
* DotNet operations such $var->FunctionCall() has had their speed increased significantly since it now caches the last method and its required variables etc
 +
* Unset() now kills an entire array structure disposing all elements in the array (even sub-sub elements)
 +
* CharPtr (char*) can now serialize and unserialize however it will not become the original address instead it saves the string as it serializes (if you wish to retain the original address save it as an IntPtr instead)
 +
* StrLen(), StrPos() now uses CharPtr (char*) if it is given one instead of converting it to a string first (this provides a speed up)
 +
* Added SbNew() it can be used to create a new StringBuilder (although you can use %dotnet stuff this is a lot faster) for speedy string operations with concat (due to the speed booster to DotNet stuff the speed on this isn't much better than using the one above however this provides a series of functions that work as sputnik cores)
 +
* The StringBuilders from SbNew() will correctly display on printr() and vardump() and you use (string) cast on them
 +
* The StringBuilders from SbNew() work in Count() to get the length
 +
* The StringBuilders from SbNew() can now use .= and ..= operators for easy concat
 +
* Added SbAppend() to append text to a StringBuilder
 +
* Added SbAppendLine() to append text to a StringBuilder then add a newline to the end of course the newline will respect the cgi rules and become <br /> if necessary although it defaults at \n unless cgi is used
 +
* Added SbEnsureCapacity() it can ensure that the capacity of the StringBuilder is at least the specified value
 +
* Added SbRemove() it can remove sections of the StringBuilder and returns how many chars it removed
 +
* Added SbInsert() it can insert strings into the StringBuild at any position (The StringBuilder will be expanded to fit the new string at the position with spaces)
 +
* Added sbReplace() it can replace found strings with new strings anywhere in the StringBuilder or from a start index to a given length
 +
* Added sbReplaceAt() it can replace from a start index to a length with a given string
 +
* Added SbGetIndex() it can insert get the char at a given index in the StringBuilder
 +
* Added SbSetIndex() it can insert set a char at a given index in the StringBuilder
 +
* Added SbGetCapacity() it can get the capacity of a StringBuilder
 +
* Added SbSetCapacity() it can set the capacity of a StringBuilder
 +
* Added SbGetMaxCapacity() it can get the max capacity of a StringBuilder
 +
* Added HTMLAttributeEncode() It can minimally convert a string to an HTML-encoded string
 +
* Added HTMLEncode() It can convert a string to an HTML-encoded string
 +
* Added HTMLDecode() It can convert a string that has been HTML-encoded for HTTP transmission into a decoded string
 +
* Added UrlEncode() It can encode a URL string
 +
* Added UrlDecode() It can convert a string that has been encoded for transmission in a URL into a decoded string
 +
* Added UrlEncodeUnicode() It can convert a string into a Unicode string in %UnicodeValue notation
 +
* Added Encoding() It can create a string encoding type for use in certain functions such as UrlEncode()
 +
* Added UrlEncodeBytes() It can onvert a binary variable into a URL-encoded string, starting at the specified position in the array and continuing for the specified number of bytes
 +
* Added UrlDecodeBytes() It can onvert a URL-encoded binary variable into a decoded string using the specified encoding, starting at the specified position in the array, and continuing for the specified number of bytes
  
 
== Sputnik 0.24 @ 29-11-2014 01:05 AM ==
 
== Sputnik 0.24 @ 29-11-2014 01:05 AM ==

Latest revision as of 12:00, 9 November 2016

Contents

Sputnik 0.38 @ 09-11-2016 12:00 PM

Sputnik 0.37 @ 13-04-2016 12:17 AM

Sputnik 0.36 @ 19-12-2015 12:17 AM

Sputnik 0.35 @ 29-09-2015 12:17 AM

Sputnik 0.34 @ 24-09-2015 05:45 AM

Sputnik 0.33 @ 20-09-2015 05:55 PM

Sputnik 0.32 @ 18-09-2015 08:04 PM

Sputnik 0.31 @ 14-09-2015 10:18 PM

Sputnik 0.30 @ 26-06-2015 03:33 PM

Sputnik 0.29 @ 25-06-2015 08:40 AM

Sputnik 0.28 @ 19-06-2015 07:12 PM

Sputnik 0.27 @ 14-06-2015 01:15 PM

Sputnik 0.26 @ 07-06-2015 10:08 AM

Sputnik 0.25 @ 16-12-2014 08:06 AM

Sputnik 0.24 @ 29-11-2014 01:05 AM

Whats New

Known issues in current version:

Sputnik 0.23b3 @ 14-08-2014 10:09 PM

Whats New

Sputnik 0.23b2 @ 14-08-2014 02:18 PM

Whats New

Sputnik 0.23b1 @ 12-08-2014 02:23 AM

Whats New

Sputnik 0.23 @ 08-11-2014 05:54 AM

Whats New

Sputnik 0.22 @ 03-21-2014 05:54 AM

Whats New

Sputnik 0.21 @ 09-28-2013 05:26 PM

Whats New

Sputnik 0.20 @ 09-19-2013 10:58 PM

Whats New

Sputnik 0.19 @ 09-16-2013 10:25 PM

Whats New

Sputnik 0.18 @ 09-12-2013 01:42 AM

Whats New

$a = array(); $a[0] = "blah"; $a[1] = $a;

println("C:\\"); // Where as this would fail <-- No longer fails

Sputnik 0.17 @ 08-29-2013 05:49 PM

Whats New

Sputnik 0.16 @ 08-25-2013 07:56 AM

Whats New

Sputnik 0.15 @ 08-25-2013 01:15 AM

Whats New

Lower than 0.15

No information available.

Personal tools
Namespaces
Variants
Actions
Navigation
Toolbox