#include "script.h" #include "script_store.h" namespace Code { static inline void intToText(int i, char * buffer, int bufferSize) { // We only support integers from 0 to 99. assert(i>=0); assert(i<100); assert(bufferSize >= 3); if (i/10 == 0) { buffer[0] = i+'0'; buffer[1] = 0; return; } buffer[0] = i/10+'0'; buffer[1] = i-10*(i/10)+'0'; buffer[2] = 0; } bool Script::DefaultName(char buffer[], size_t bufferSize) { assert(bufferSize >= k_defaultScriptNameMaxSize); static constexpr char defaultScriptName[] = "script"; static constexpr int defaultScriptNameLength = 6; strlcpy(buffer, defaultScriptName, bufferSize); int currentScriptNumber = 1; while (currentScriptNumber <= k_maxNumberOfDefaultScriptNames) { // Change the number in the script name. intToText(currentScriptNumber, &buffer[defaultScriptNameLength], bufferSize - defaultScriptNameLength ); if (ScriptStore::ScriptNameIsFree(buffer)) { return true; } currentScriptNumber++; } // We did not find a new script name return false; } bool Script::nameCompliant(const char * name) { /* The name format is [a-z0-9_\.]+ */ const char * currentChar = name; while (*currentChar != 0) { if ((*currentChar >= 'a' && *currentChar <= 'z') || *currentChar == '_' || (*currentChar >= '0' && *currentChar <= '9') || *currentChar == '.') { currentChar++; continue; } return false; } return name != currentChar; } bool Script::importationStatus() const { assert(!isNull()); Data d = value(); return (((char *)d.buffer)[0] == 1); } void Script::toggleImportationStatus() { Data d = value(); ((char *)d.buffer)[0] = (((char *)d.buffer)[0] == 1 ? 0 : 1); setValue(d); } const char * Script::readContent() const { assert(!isNull()); Data d = value(); return (const char *)d.buffer+k_importationStatusSize; } }