From e37f5b8df5c072efd0e6eba89ceff2d7847be4f1 Mon Sep 17 00:00:00 2001 From: Andrea Faulds Date: Sun, 19 Jan 2014 15:10:28 +0000 Subject: [PATCH] Added Game Maker Language --- lib/linguist/languages.yml | 5 + lib/linguist/samples.json | 6999 ++++++++++------- .../Game Maker Language/ClientBeginStep.gml | 642 ++ samples/Game Maker Language/Create.gml | 141 + samples/Game Maker Language/Draw.gml | 161 + .../doEventPlayerDeath.gml | 251 + samples/Game Maker Language/faucet-http.gml | 1469 ++++ samples/Game Maker Language/game_init.gml | 484 ++ .../Game Maker Language/loadserverplugins.gml | 252 + .../processClientCommands.gml | 384 + 10 files changed, 7806 insertions(+), 2982 deletions(-) create mode 100644 samples/Game Maker Language/ClientBeginStep.gml create mode 100644 samples/Game Maker Language/Create.gml create mode 100644 samples/Game Maker Language/Draw.gml create mode 100644 samples/Game Maker Language/doEventPlayerDeath.gml create mode 100644 samples/Game Maker Language/faucet-http.gml create mode 100644 samples/Game Maker Language/game_init.gml create mode 100644 samples/Game Maker Language/loadserverplugins.gml create mode 100644 samples/Game Maker Language/processClientCommands.gml diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 340c7682..fe174364 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -580,6 +580,11 @@ Forth: extensions: - .4th +Game Maker Language: + type: programming + lexer: JavaScript + primary_extension: .gml + GAS: type: programming group: Assembly diff --git a/lib/linguist/samples.json b/lib/linguist/samples.json index ed92145a..7dccfe60 100644 --- a/lib/linguist/samples.json +++ b/lib/linguist/samples.json @@ -70,9 +70,6 @@ "CoffeeScript": [ ".coffee" ], - "Common Lisp": [ - ".lisp" - ], "Coq": [ ".v" ], @@ -119,6 +116,9 @@ ".forth", ".fth" ], + "Game Maker Language": [ + ".gml" + ], "GAS": [ ".s" ], @@ -149,10 +149,6 @@ "Hy": [ ".hy" ], - "IDL": [ - ".dlm", - ".pro" - ], "Idris": [ ".idr" ], @@ -215,9 +211,6 @@ "Lua": [ ".pd_lua" ], - "M": [ - ".m" - ], "Makefile": [ ".script!" ], @@ -282,9 +275,6 @@ "Org": [ ".org" ], - "Oxygene": [ - ".oxygene" - ], "Parrot Assembly": [ ".pasm" ], @@ -356,9 +346,6 @@ "Rebol": [ ".r" ], - "RMarkdown": [ - ".rmd" - ], "RobotFramework": [ ".robot" ], @@ -472,6 +459,22 @@ ], "Xtend": [ ".xtend" + ], + "Common Lisp": [ + ".lisp" + ], + "IDL": [ + ".dlm", + ".pro" + ], + "M": [ + ".m" + ], + "Oxygene": [ + ".oxygene" + ], + "RMarkdown": [ + ".rmd" ] }, "interpreters": { @@ -535,8 +538,8 @@ ".gemrc" ] }, - "tokens_total": 445429, - "languages_total": 523, + "tokens_total": 453362, + "languages_total": 531, "tokens": { "ABAP": { "*/**": 1, @@ -5692,175 +5695,11 @@ "aeSetBeforeSleepProc": 1, "aeMain": 1, "aeDeleteEventLoop": 1, - "": 1, - "": 2, "": 2, - "//": 257, - "rfUTF8_IsContinuationbyte": 1, - "e.t.c.": 1, - "rfFReadLine_UTF8": 5, - "FILE*": 64, - "utf8": 36, - "uint32_t*": 34, - "byteLength": 197, - "bufferSize": 6, - "eof": 53, - "bytesN": 98, - "bIndex": 5, - "RF_NEWLINE_CRLF": 1, - "newLineFound": 1, - "*bufferSize": 1, - "RF_OPTION_FGETS_READBYTESN": 5, - "RF_MALLOC": 47, - "tempBuff": 6, - "RF_LF": 10, - "buff": 95, - "RF_SUCCESS": 14, - "RE_FILE_EOF": 22, - "found": 20, - "*eofReached": 14, - "LOG_ERROR": 64, - "RF_HEXEQ_UI": 7, - "rfFgetc_UTF32BE": 3, - "else//": 14, - "undo": 5, - "peek": 5, - "ahead": 5, - "file": 6, - "pointer": 5, - "fseek": 19, - "SEEK_CUR": 19, - "rfFgets_UTF32LE": 2, - "eofReached": 4, - "rfFgetc_UTF32LE": 4, - "rfFgets_UTF16BE": 2, - "rfFgetc_UTF16BE": 4, - "rfFgets_UTF16LE": 2, - "rfFgetc_UTF16LE": 4, - "rfFgets_UTF8": 2, - "rfFgetc_UTF8": 3, - "RF_HEXEQ_C": 9, - "fgetc": 9, - "check": 8, - "RE_FILE_READ": 2, - "cp": 12, - "c2": 13, - "c3": 9, - "c4": 5, - "i_READ_CHECK": 20, - "///": 4, - "success": 4, - "cc": 24, - "we": 10, - "more": 2, - "bytes": 225, - "xC0": 3, - "xC1": 1, - "RE_UTF8_INVALID_SEQUENCE_INVALID_BYTE": 6, - "RE_UTF8_INVALID_SEQUENCE_END": 6, - "rfUTF8_IsContinuationByte": 12, - "RE_UTF8_INVALID_SEQUENCE_CONBYTE": 6, - "decoded": 3, - "codepoint": 47, - "F": 38, - "xE0": 2, - "xF": 5, - "decode": 6, - "xF0": 2, - "RF_HEXGE_C": 1, - "xBF": 2, - "//invalid": 1, - "byte": 6, - "are": 6, - "xFF": 1, - "//if": 1, - "needing": 1, - "than": 5, - "swapE": 21, - "v1": 38, - "v2": 26, - "rfUTILS_Endianess": 24, - "RF_LITTLE_ENDIAN": 23, - "fread": 12, - "endianess": 40, - "needed": 10, - "rfUTILS_SwapEndianUS": 10, - "RF_HEXGE_US": 4, - "xD800": 8, - "RF_HEXLE_US": 4, - "xDFFF": 8, - "RF_HEXL_US": 8, - "RF_HEXG_US": 8, - "xDBFF": 4, - "RE_UTF16_INVALID_SEQUENCE": 20, - "RE_UTF16_NO_SURRPAIR": 2, - "xDC00": 4, - "user": 2, - "wants": 2, - "ff": 10, - "uint16_t*": 11, - "surrogate": 4, - "pair": 4, - "existence": 2, - "RF_BIG_ENDIAN": 10, - "rfUTILS_SwapEndianUI": 11, - "rfFback_UTF32BE": 2, - "i_FSEEK_CHECK": 14, - "rfFback_UTF32LE": 2, - "rfFback_UTF16BE": 2, - "rfFback_UTF16LE": 2, - "rfFback_UTF8": 2, - "depending": 1, - "number": 19, - "read": 1, - "backwards": 1, - "RE_UTF8_INVALID_SEQUENCE": 2, - "REFU_IO_H": 2, - "": 2, - "opening": 2, - "bracket": 4, - "calling": 4, - "C": 14, - "xA": 1, - "RF_CR": 1, - "xD": 1, - "REFU_WIN32_VERSION": 1, - "i_PLUSB_WIN32": 2, - "foff_rft": 2, - "off64_t": 1, - "///Fseek": 1, - "and": 15, - "Ftelll": 1, - "definitions": 1, - "rfFseek": 2, - "i_FILE_": 16, - "i_OFFSET_": 4, - "i_WHENCE_": 4, - "_fseeki64": 1, - "rfFtell": 2, - "_ftelli64": 1, - "fseeko64": 1, - "ftello64": 1, - "i_DECLIMEX_": 121, - "rfFReadLine_UTF16BE": 6, - "rfFReadLine_UTF16LE": 4, - "rfFReadLine_UTF32BE": 1, - "rfFReadLine_UTF32LE": 4, - "rfFgets_UTF32BE": 1, - "RF_IAMHERE_FOR_DOXYGEN": 22, - "rfPopen": 2, - "command": 2, - "i_rfPopen": 2, - "i_CMD_": 2, - "i_MODE_": 2, - "i_rfLMS_WRAP2": 5, - "rfPclose": 1, - "stream": 3, - "///closing": 1, - "#endif//include": 1, - "guards": 2, + "": 2, "": 1, "": 2, + "//": 257, "local": 5, "stack": 6, "memory": 4, @@ -5869,11 +5708,16 @@ "rfString_Create": 4, "i_rfString_Create": 3, "READ_VSNPRINTF_ARGS": 5, + "byteLength": 197, "rfUTF8_VerifySequence": 7, + "buff": 95, "RF_FAILURE": 24, + "LOG_ERROR": 64, "RE_STRING_INIT_FAILURE": 8, "buffAllocated": 11, + "RF_MALLOC": 47, "RF_String": 27, + "bytes": 225, "i_NVrfString_Create": 3, "i_rfString_CreateLocal1": 3, "RF_OPTION_SOURCE_ENCODING": 30, @@ -5889,7 +5733,10 @@ "#elif": 14, "RF_UTF32_LE": 3, "RF_UTF32_BE": 3, + "decode": 6, "UTF16": 4, + "rfUTILS_Endianess": 24, + "RF_LITTLE_ENDIAN": 23, "rfUTF16_Decode": 5, "rfUTF16_Decode_swap": 5, "RF_UTF16_BE//": 2, @@ -5897,13 +5744,19 @@ "copy": 4, "UTF32": 4, "into": 8, + "codepoint": 47, + "rfUTILS_SwapEndianUI": 11, + "uint32_t*": 34, "RF_UTF32_BE//": 2, + "RF_BIG_ENDIAN": 10, "": 2, "any": 3, "other": 16, + "than": 5, "UTF": 17, "8": 15, "encode": 2, + "and": 15, "them": 3, "rfUTF8_Encode": 4, "While": 2, @@ -5911,6 +5764,7 @@ "create": 2, "temporary": 4, "given": 5, + "byte": 6, "sequence": 6, "could": 2, "not": 6, @@ -5924,7 +5778,9 @@ "normally": 1, "since": 5, "here": 5, + "we": 10, "have": 2, + "check": 8, "validity": 2, "get": 4, "Error": 2, @@ -5949,6 +5805,7 @@ "Quitting": 2, "proccess": 2, "RE_LOCALMEMSTACK_INSUFFICIENT": 8, + "RE_UTF16_INVALID_SEQUENCE": 20, "i_NVrfString_CreateLocal": 3, "during": 1, "rfString_Init": 3, @@ -5958,6 +5815,8 @@ "rfString_Init_cp": 3, "RF_HEXLE_UI": 8, "RF_HEXGE_UI": 6, + "ff": 10, + "F": 38, "C0": 3, "ffff": 4, "xFC0": 4, @@ -5984,8 +5843,10 @@ "rfString_Create_f": 2, "rfString_Init_f": 2, "rfString_Create_UTF16": 2, + "endianess": 40, "rfString_Init_UTF16": 3, "utf8ByteLength": 34, + "utf8": 36, "last": 1, "utf": 1, "null": 4, @@ -5994,12 +5855,15 @@ "allocate": 1, "same": 1, "as": 4, + "else//": 14, "different": 1, "RE_INPUT": 1, "ends": 3, "rfString_Create_UTF32": 2, "rfString_Init_UTF32": 3, + "swapE": 21, "codeBuffer": 9, + "RF_HEXEQ_UI": 7, "xFEFF": 1, "big": 14, "endian": 20, @@ -6027,6 +5891,7 @@ "i_NVrfString_Init_nc": 3, "rfString_Destroy": 2, "rfString_Deinit": 3, + "uint16_t*": 11, "rfString_ToUTF16": 4, "charsN": 5, "rfUTF8_Decode": 2, @@ -6040,12 +5905,18 @@ "codePoint": 18, "RF_STRING_INDEX_OUT_OF_BOUNDS": 2, "rfString_BytePosToCodePoint": 7, + "RF_HEXEQ_C": 9, + "xC0": 3, + "xE0": 2, + "xF": 5, + "xF0": 2, "rfString_BytePosToCharPos": 4, "thisstrP": 32, "bytepos": 12, "before": 4, "charPos": 8, "byteI": 7, + "rfUTF8_IsContinuationByte": 12, "i_rfString_Equal": 3, "s1P": 2, "s2P": 2, @@ -6054,6 +5925,7 @@ "optionsP": 11, "sstr": 39, "*optionsP": 8, + "found": 20, "RF_BITFLAG_ON": 5, "RF_CASE_IGNORE": 2, "strstr": 2, @@ -6067,9 +5939,11 @@ "zero": 2, "equals": 1, "then": 1, + "are": 6, "okay": 1, "rfString_Equal": 4, "RFS_": 8, + "RF_SUCCESS": 14, "ERANGE": 1, "RE_STRING_TOFLOAT_UNDERFLOW": 1, "RE_STRING_TOFLOAT": 1, @@ -6096,6 +5970,7 @@ "sstr2": 2, "move": 12, "rfString_FindBytePos": 10, + "i_DECLIMEX_": 121, "rfString_Tokenize": 2, "sep": 3, "tokensN": 2, @@ -6133,6 +6008,7 @@ "goes": 1, "i_rfString_Remove": 6, "numberP": 1, + "number": 19, "*numberP": 1, "occurences": 5, "done": 1, @@ -6195,6 +6071,7 @@ "rfString_PruneMiddleF": 2, "got": 1, "all": 2, + "needed": 10, "i_rfString_Replace": 6, "numP": 1, "*numP": 1, @@ -6238,8 +6115,13 @@ "res2": 2, "rfString_StripEnd": 3, "rfString_Create_fUTF8": 2, + "FILE*": 64, + "eof": 53, "rfString_Init_fUTF8": 3, + "bytesN": 98, + "bufferSize": 6, "unused": 3, + "rfFReadLine_UTF8": 5, "rfString_Assign_fUTF8": 2, "FILE*f": 2, "utf8BufferSize": 4, @@ -6248,11 +6130,14 @@ "rfString_Append": 5, "rfString_Create_fUTF16": 2, "rfString_Init_fUTF16": 3, + "rfFReadLine_UTF16LE": 4, + "rfFReadLine_UTF16BE": 6, "rfString_Assign_fUTF16": 2, "rfString_Append_fUTF16": 2, "char*utf8": 3, "rfString_Create_fUTF32": 2, "rfString_Init_fUTF32": 3, + "rfFReadLine_UTF32LE": 4, "<0)>": 1, "Failure": 1, "initialize": 1, @@ -6260,6 +6145,7 @@ "Little": 1, "Endian": 1, "32": 1, + "file": 6, "bytesN=": 1, "rfString_Assign_fUTF32": 2, "rfString_Append_fUTF32": 2, @@ -6271,6 +6157,7 @@ "*encodingP": 1, "fwrite": 5, "logging": 5, + "rfUTILS_SwapEndianUS": 10, "utf32": 10, "i_WRITE_CHECK": 1, "RE_FILE_WRITE": 1, @@ -6279,12 +6166,17 @@ "RF_MODULE_STRINGS//": 1, "included": 2, "module": 3, + "": 2, "": 1, "argument": 1, "wrapping": 1, "functionality": 1, "": 1, "unicode": 2, + "opening": 2, + "bracket": 4, + "calling": 4, + "C": 14, "xFF0FFFF": 1, "rfUTF8_IsContinuationByte2": 1, "b__": 3, @@ -6324,6 +6216,7 @@ "been": 1, "created": 1, "assumed": 1, + "stream": 3, "valid": 1, "every": 1, "performs": 1, @@ -6358,6 +6251,7 @@ "*/": 1, "#pragma": 1, "pop": 1, + "RF_IAMHERE_FOR_DOXYGEN": 22, "i_rfString_CreateLocal": 2, "__VA_ARGS__": 66, "RP_SELECT_FUNC_IF_NARGIS": 5, @@ -6383,6 +6277,7 @@ "rfString_Assign": 2, "i_DESTINATION_": 2, "i_SOURCE_": 2, + "i_rfLMS_WRAP2": 5, "rfString_ToUTF8": 2, "i_STRING_": 2, "rfString_ToCstr": 2, @@ -6576,6 +6471,7 @@ "i_SELECT_RF_STRING_FWRITE": 1, "i_SELECT_RF_STRING_FWRITE3": 1, "i_STR_": 8, + "i_FILE_": 16, "i_ENCODING_": 4, "i_SELECT_RF_STRING_FWRITE2": 1, "i_SELECT_RF_STRING_FWRITE1": 1, @@ -6591,6 +6487,113 @@ "added": 1, "you": 1, "#endif//": 1, + "guards": 2, + "": 1, + "rfUTF8_IsContinuationbyte": 1, + "e.t.c.": 1, + "bIndex": 5, + "RF_NEWLINE_CRLF": 1, + "newLineFound": 1, + "*bufferSize": 1, + "RF_OPTION_FGETS_READBYTESN": 5, + "tempBuff": 6, + "RF_LF": 10, + "RE_FILE_EOF": 22, + "*eofReached": 14, + "rfFgetc_UTF32BE": 3, + "undo": 5, + "peek": 5, + "ahead": 5, + "pointer": 5, + "fseek": 19, + "SEEK_CUR": 19, + "rfFgets_UTF32LE": 2, + "eofReached": 4, + "rfFgetc_UTF32LE": 4, + "rfFgets_UTF16BE": 2, + "rfFgetc_UTF16BE": 4, + "rfFgets_UTF16LE": 2, + "rfFgetc_UTF16LE": 4, + "rfFgets_UTF8": 2, + "rfFgetc_UTF8": 3, + "fgetc": 9, + "RE_FILE_READ": 2, + "cp": 12, + "c2": 13, + "c3": 9, + "c4": 5, + "i_READ_CHECK": 20, + "///": 4, + "success": 4, + "cc": 24, + "more": 2, + "xC1": 1, + "RE_UTF8_INVALID_SEQUENCE_INVALID_BYTE": 6, + "RE_UTF8_INVALID_SEQUENCE_END": 6, + "RE_UTF8_INVALID_SEQUENCE_CONBYTE": 6, + "decoded": 3, + "RF_HEXGE_C": 1, + "xBF": 2, + "//invalid": 1, + "xFF": 1, + "//if": 1, + "needing": 1, + "v1": 38, + "v2": 26, + "fread": 12, + "RF_HEXGE_US": 4, + "xD800": 8, + "RF_HEXLE_US": 4, + "xDFFF": 8, + "RF_HEXL_US": 8, + "RF_HEXG_US": 8, + "xDBFF": 4, + "RE_UTF16_NO_SURRPAIR": 2, + "xDC00": 4, + "user": 2, + "wants": 2, + "surrogate": 4, + "pair": 4, + "existence": 2, + "rfFback_UTF32BE": 2, + "i_FSEEK_CHECK": 14, + "rfFback_UTF32LE": 2, + "rfFback_UTF16BE": 2, + "rfFback_UTF16LE": 2, + "rfFback_UTF8": 2, + "depending": 1, + "read": 1, + "backwards": 1, + "RE_UTF8_INVALID_SEQUENCE": 2, + "REFU_IO_H": 2, + "xA": 1, + "RF_CR": 1, + "xD": 1, + "REFU_WIN32_VERSION": 1, + "i_PLUSB_WIN32": 2, + "foff_rft": 2, + "off64_t": 1, + "///Fseek": 1, + "Ftelll": 1, + "definitions": 1, + "rfFseek": 2, + "i_OFFSET_": 4, + "i_WHENCE_": 4, + "_fseeki64": 1, + "rfFtell": 2, + "_ftelli64": 1, + "fseeko64": 1, + "ftello64": 1, + "rfFReadLine_UTF32BE": 1, + "rfFgets_UTF32BE": 1, + "rfPopen": 2, + "command": 2, + "i_rfPopen": 2, + "i_CMD_": 2, + "i_MODE_": 2, + "rfPclose": 1, + "///closing": 1, + "#endif//include": 1, "PY_SSIZE_T_CLEAN": 1, "Py_PYTHON_H": 1, "Python": 2, @@ -13591,49 +13594,6 @@ "xFF": 1, "ip.join": 1 }, - "Common Lisp": { - ";": 10, - "-": 10, - "*": 2, - "lisp": 1, - "(": 14, - "in": 1, - "package": 1, - "foo": 2, - ")": 14, - "Header": 1, - "comment.": 4, - "defvar": 1, - "*foo*": 1, - "eval": 1, - "when": 1, - "execute": 1, - "compile": 1, - "toplevel": 2, - "load": 1, - "defun": 1, - "add": 1, - "x": 5, - "&": 3, - "optional": 1, - "y": 2, - "key": 1, - "z": 2, - "declare": 1, - "ignore": 1, - "Inline": 1, - "+": 2, - "or": 1, - "#": 2, - "|": 2, - "Multi": 1, - "line": 2, - "defmacro": 1, - "body": 1, - "b": 1, - "if": 1, - "After": 1 - }, "Coq": { "Inductive": 41, "day": 9, @@ -17406,6 +17366,1036 @@ "/cell": 2, "cell": 2 }, + "Game Maker Language": { + "var": 77, + "i": 72, + "playerObject": 1, + "playerID": 1, + "player": 36, + "otherPlayerID": 1, + "otherPlayer": 1, + "sameVersion": 1, + "buffer": 1, + "plugins": 4, + "pluginsRequired": 2, + "usePlugins": 1, + ";": 923, + "if": 213, + "(": 957, + "tcp_eof": 3, + "global.serverSocket": 10, + ")": 956, + "{": 177, + "gotServerHello": 2, + "show_message": 6, + "else": 78, + "instance_destroy": 6, + "exit": 10, + "}": 179, + "room": 1, + "DownloadRoom": 1, + "and": 31, + "keyboard_check": 1, + "vk_escape": 1, + "downloadingMap": 2, + "while": 15, + "tcp_receive": 3, + "min": 4, + "downloadMapBytes": 2, + "-": 110, + "buffer_size": 2, + "downloadMapBuffer": 6, + "write_buffer": 2, + "write_buffer_to_file": 1, + "+": 126, + "downloadMapName": 3, + "false": 40, + "buffer_destroy": 8, + "roomchange": 2, + "do": 1, + "switch": 9, + "read_ubyte": 10, + "case": 50, + "HELLO": 1, + "true": 37, + "global.joinedServerName": 2, + "receivestring": 4, + "advertisedMapMd5": 1, + "receiveCompleteMessage": 1, + "global.tempBuffer": 3, + "string_pos": 20, + "or": 21, + "Server": 3, + "sent": 7, + "illegal": 2, + "map": 23, + "name": 8, + "This": 2, + "server": 10, + "requires": 1, + "the": 19, + "following": 2, + "to": 6, + "play": 2, + "on": 2, + "it": 5, + "#": 3, + "suggests": 1, + "optional": 1, + "Error": 2, + "ocurred": 1, + "loading": 1, + "plugins.": 1, + "Maps/": 2, + ".png": 2, + "The": 4, + "s": 5, + "version": 4, + "of": 12, + "Enter": 1, + "Password": 1, + "Incorrect": 1, + "Password.": 1, + "Incompatible": 1, + "protocol": 3, + "version.": 1, + "Name": 1, + "Exploit": 1, + "Invalid": 1, + "plugin": 6, + "packet": 3, + "ID": 2, + "There": 1, + "are": 1, + "too": 1, + "many": 1, + "connections": 1, + "from": 5, + "your": 1, + "IP": 1, + "You": 1, + "have": 2, + "been": 1, + "kicked": 1, + "server.": 1, + ".": 1, + "#Server": 1, + "went": 1, + "invalid": 1, + "internal": 1, + "#Exiting.": 1, + "/": 4, + "is": 7, + "full.": 1, + "noone": 7, + "ERROR": 1, + "when": 1, + "reading": 1, + "no": 1, + "such": 1, + "unexpected": 1, + "data.": 1, + "break": 56, + "until": 1, + "downloadHandle": 3, + "url": 62, + "tmpfile": 3, + "window_oldshowborder": 2, + "window_oldfullscreen": 2, + "timeLeft": 1, + "counter": 1, + "AudioControlPlaySong": 1, + "window_get_showborder": 1, + "window_get_fullscreen": 1, + "window_set_fullscreen": 2, + "window_set_showborder": 1, + "global.updaterBetaChannel": 3, + "UPDATE_SOURCE_BETA": 1, + "UPDATE_SOURCE": 1, + "temp_directory": 1, + "httpGet": 1, + "httpRequestStatus": 1, + "//": 7, + "download": 1, + "isn": 1, + "extract": 1, + "downloaded": 1, + "file": 2, + "now.": 1, + "extractzip": 1, + "working_directory": 6, + "execute_program": 1, + "game_end": 1, + "victim": 10, + "killer": 11, + "assistant": 16, + "damageSource": 18, + "argument0": 22, + "argument1": 8, + "argument2": 3, + "argument3": 1, + "instance_exists": 4, + "//*************************************": 6, + "//*": 3, + "Scoring": 1, + "Kill": 1, + "log": 1, + "recordKillInLog": 1, + "victim.stats": 1, + "[": 84, + "DEATHS": 1, + "]": 84, + "WEAPON_KNIFE": 1, + "||": 16, + "WEAPON_BACKSTAB": 1, + "killer.stats": 8, + "STABS": 2, + "killer.roundStats": 8, + "POINTS": 10, + "victim.object.currentWeapon.object_index": 1, + "Medigun": 2, + "victim.object.currentWeapon.uberReady": 1, + "BONUS": 2, + "KILLS": 2, + "victim.object.intel": 1, + "DEFENSES": 2, + "recordEventInLog": 1, + "killer.team": 1, + "killer.name": 2, + "global.myself": 4, + "assistant.stats": 2, + "ASSISTS": 2, + "assistant.roundStats": 2, + ".5": 2, + "//SPEC": 1, + "instance_create": 12, + "victim.object.x": 3, + "victim.object.y": 3, + "Spectator": 1, + "Gibbing": 2, + "xoffset": 5, + "yoffset": 5, + "xsize": 3, + "ysize": 3, + "view_xview": 3, + "view_yview": 3, + "view_wview": 2, + "view_hview": 2, + "randomize": 1, + "with": 18, + "victim.object": 2, + "WEAPON_ROCKETLAUNCHER": 1, + "WEAPON_MINEGUN": 1, + "FRAG_BOX": 2, + "WEAPON_REFLECTED_STICKY": 1, + "WEAPON_REFLECTED_ROCKET": 1, + "FINISHED_OFF_GIB": 2, + "GENERATOR_EXPLOSION": 2, + "player.class": 15, + "CLASS_QUOTE": 3, + "global.gibLevel": 14, + "distance_to_point": 3, + "xsize/2": 2, + "ysize/2": 2, + "<": 19, + "hasReward": 4, + "repeat": 6, + "*": 7, + "createGib": 14, + "x": 24, + "y": 23, + "PumpkinGib": 1, + "hspeed": 14, + "vspeed": 13, + "random": 21, + "choose": 8, + "Gib": 1, + "player.team": 8, + "TEAM_BLUE": 6, + "BlueClump": 1, + "TEAM_RED": 8, + "RedClump": 1, + "blood": 2, + "BloodDrop": 1, + "blood.hspeed": 1, + "blood.vspeed": 1, + "blood.sprite_index": 1, + "PumpkinJuiceS": 1, + "//All": 1, + "Classes": 1, + "gib": 1, + "head": 1, + "hands": 2, + "feet": 1, + "Headgib": 1, + "//Medic": 1, + "has": 2, + "specially": 1, + "colored": 1, + "CLASS_MEDIC": 2, + "Hand": 3, + "Feet": 1, + "//Class": 1, + "specific": 1, + "gibs": 1, + "CLASS_PYRO": 2, + "Accesory": 5, + "CLASS_SOLDIER": 2, + "CLASS_ENGINEER": 3, + "CLASS_SNIPER": 3, + "playsound": 2, + "deadbody": 2, + "DeathSnd1": 1, + "DeathSnd2": 1, + "DeadGuy": 1, + "deadbody.sprite_index": 2, + "haxxyStatue": 1, + "deadbody.image_index": 2, + "sprite_index": 2, + "CHARACTER_ANIMATION_DEAD": 1, + "deadbody.hspeed": 1, + "deadbody.vspeed": 1, + "deadbody.image_xscale": 1, + "global.gg_birthday": 1, + "myHat": 2, + "PartyHat": 1, + "myHat.image_index": 2, + "victim.team": 2, + "global.xmas": 1, + "XmasHat": 1, + "Deathcam": 1, + "global.killCam": 3, + "KILL_BOX": 1, + "FINISHED_OFF": 5, + "DeathCam": 1, + "DeathCam.killedby": 1, + "DeathCam.name": 1, + "DeathCam.oldxview": 1, + "DeathCam.oldyview": 1, + "DeathCam.lastDamageSource": 1, + "DeathCam.team": 1, + "global.myself.team": 3, + "xr": 19, + "yr": 19, + "round": 4, + "image_alpha": 7, + "cloakAlpha": 1, + "team": 13, + "canCloak": 1, + "cloakAlpha/2": 1, + "invisible": 1, + "stabbing": 2, + "power": 1, + "currentWeapon.stab.alpha": 1, + "&&": 6, + "global.showHealthBar": 3, + "draw_set_alpha": 3, + "draw_healthbar": 1, + "hp*100/maxHp": 1, + "c_black": 1, + "c_red": 3, + "c_green": 1, + "mouse_x": 1, + "mouse_y": 1, + "<25)>": 1, + "cloak": 2, + "global": 4, + "myself": 2, + "1": 27, + "draw_set_halign": 1, + "fa_center": 1, + "draw_set_valign": 1, + "fa_bottom": 1, + "team=": 1, + "draw_set_color": 2, + "c_blue": 2, + "draw_text": 4, + "35": 1, + "showTeammateStats": 1, + "weapons": 3, + "0": 12, + "50": 3, + "Superburst": 1, + "string": 5, + "currentWeapon": 2, + "uberCharge": 1, + "20": 1, + "Shotgun": 1, + "Nuts": 1, + "N": 1, + "Bolts": 1, + "nutsNBolts": 1, + "Minegun": 1, + "Lobbed": 1, + "Mines": 1, + "lobbed": 1, + "ubercolour": 6, + "sprite": 10, + "overlaySprite": 6, + "zoomed": 1, + "SniperCrouchRedS": 1, + "SniperCrouchBlueS": 1, + "sniperCrouchOverlay": 1, + "overlay": 1, + "omnomnomnom": 2, + "draw_sprite_ext_overlay": 7, + "omnomnomnomSprite": 2, + "omnomnomnomOverlay": 2, + "omnomnomnomindex": 4, + "image_xscale": 12, + "image_yscale": 11, + "image_angle": 11, + "c_white": 13, + "ubered": 7, + "7": 4, + "taunting": 2, + "tauntsprite": 2, + "tauntOverlay": 2, + "tauntindex": 2, + "humiliated": 1, + "draw_sprite_ext": 7, + "humiliationPoses": 1, + "floor": 9, + "animationImage": 9, + "humiliationOffset": 1, + "animationOffset": 6, + "burnDuration": 2, + "burnIntensity": 2, + "for": 17, + "numFlames": 1, + "maxIntensity": 1, + "FlameS": 1, + "alarm": 2, + "flameArray_x": 1, + "flameArray_y": 1, + "maxDuration": 1, + "demon": 4, + "demonX": 5, + "median": 2, + "demonY": 4, + "demonOffset": 4, + "demonDir": 2, + "abs": 1, + "dir": 3, + "demonFrame": 5, + "sprite_get_number": 1, + "*player.team": 2, + "dir*1": 2, + "#define": 21, + "__http_init": 3, + "global.__HttpClient": 4, + "object_add": 1, + "object_set_persistent": 1, + "__http_split": 3, + "text": 19, + "delimeter": 7, + "limit": 4, + "list": 17, + "count": 4, + "ds_list_create": 5, + "ds_list_add": 23, + "string_copy": 32, + "string_length": 25, + "return": 53, + "__http_parse_url": 4, + "ds_map_create": 4, + "ds_map_add": 15, + "colonPos": 22, + "string_char_at": 13, + "slashPos": 13, + "real": 6, + "queryPos": 12, + "ds_map_destroy": 6, + "__http_resolve_url": 2, + "baseUrl": 3, + "refUrl": 18, + "urlParts": 15, + "refUrlParts": 5, + "canParseRefUrl": 3, + "result": 11, + "ds_map_find_value": 22, + "__http_resolve_path": 3, + "ds_map_replace": 3, + "ds_map_exists": 11, + "ds_map_delete": 1, + "path": 10, + "query": 4, + "relUrl": 1, + "__http_construct_url": 2, + "basePath": 4, + "refPath": 7, + "parts": 29, + "refParts": 5, + "lastPart": 3, + "ds_list_find_value": 9, + "ds_list_size": 11, + "ds_list_delete": 5, + "ds_list_destroy": 4, + "part": 6, + "ds_list_replace": 3, + "continue": 3, + "__http_parse_hex": 2, + "hexString": 4, + "hexValues": 3, + "digit": 4, + "__http_prepare_request": 4, + "client": 33, + "headers": 11, + "parsed": 18, + "show_error": 1, + "destroyed": 3, + "CR": 10, + "chr": 3, + "LF": 5, + "CRLF": 17, + "socket": 40, + "tcp_connect": 1, + "state": 4, + "errored": 19, + "error": 18, + "linebuf": 33, + "line": 19, + "statusCode": 6, + "reasonPhrase": 2, + "responseBody": 19, + "buffer_create": 7, + "responseBodySize": 5, + "responseBodyProgress": 5, + "responseHeaders": 9, + "requestUrl": 2, + "requestHeaders": 2, + "write_string": 9, + "key": 7, + "ds_map_find_first": 1, + "is_string": 1, + "ds_map_find_next": 1, + "socket_send": 1, + "__http_parse_header": 3, + "ord": 16, + "headerValue": 9, + "string_lower": 3, + "headerName": 4, + "__http_client_step": 2, + "socket_has_error": 1, + "socket_error": 1, + "__http_client_destroy": 20, + "available": 7, + "tcp_receive_available": 1, + "bytesRead": 6, + "c": 20, + "<=>": 1, + "read_string": 9, + "Reached": 2, + "end": 6, + "HTTP": 1, + "defines": 1, + "sequence": 2, + "as": 1, + "marker": 1, + "all": 2, + "elements": 1, + "except": 2, + "entity": 1, + "body": 2, + "see": 1, + "appendix": 1, + "19": 1, + "3": 1, + "tolerant": 1, + "applications": 1, + "Strip": 1, + "trailing": 1, + "First": 1, + "status": 2, + "code": 2, + "first": 3, + "a": 20, + "Response": 1, + "message": 1, + "Status": 1, + "Line": 1, + "consisting": 1, + "followed": 1, + "by": 4, + "numeric": 1, + "its": 1, + "associated": 1, + "textual": 1, + "phrase": 1, + "each": 2, + "element": 1, + "separated": 1, + "SP": 1, + "characters": 1, + "No": 3, + "allowed": 1, + "in": 8, + "final": 1, + "httpVer": 2, + "spacePos": 11, + "space": 4, + "response": 5, + "second": 2, + "Other": 1, + "Blank": 1, + "write": 1, + "remainder": 1, + "write_buffer_part": 3, + "Header": 1, + "Receiving": 1, + "transfer": 6, + "encoding": 2, + "chunked": 4, + "Chunked": 1, + "let": 1, + "decode": 1, + "actualResponseBody": 8, + "actualResponseSize": 1, + "actualResponseBodySize": 3, + "Parse": 1, + "chunks": 1, + "chunk": 12, + "size": 7, + "extension": 3, + "data": 1, + "HEX": 1, + "buffer_bytes_left": 6, + "chunkSize": 11, + "Read": 1, + "byte": 2, + "We": 1, + "found": 1, + "semicolon": 1, + "beginning": 1, + "skip": 1, + "stuff": 2, + "header": 2, + "Doesn": 1, + "t": 1, + "did": 1, + "not": 5, + "empty": 2, + "something": 1, + "up": 2, + "Parsing": 1, + "failed": 4, + "hex": 1, + "was": 1, + "hexadecimal": 1, + "Is": 1, + "bigger": 2, + "than": 1, + "remaining": 1, + "2": 1, + "responseHaders": 1, + "location": 4, + "resolved": 5, + "socket_destroy": 4, + "http_new_get": 1, + "variable_global_exists": 2, + "http_new_get_ex": 1, + "http_step": 1, + "client.errored": 3, + "client.state": 3, + "http_status_code": 1, + "client.statusCode": 1, + "http_reason_phrase": 1, + "client.error": 1, + "client.reasonPhrase": 1, + "http_response_body": 1, + "client.responseBody": 1, + "http_response_body_size": 1, + "client.responseBodySize": 1, + "http_response_body_progress": 1, + "client.responseBodyProgress": 1, + "http_response_headers": 1, + "client.responseHeaders": 1, + "http_destroy": 1, + "RoomChangeObserver": 1, + "set_little_endian_global": 1, + "file_exists": 5, + "file_delete": 3, + "backupFilename": 5, + "file_find_first": 1, + "file_find_next": 1, + "file_find_close": 1, + "customMapRotationFile": 7, + "restart": 4, + "//import": 1, + "wav": 1, + "files": 1, + "music": 1, + "global.MenuMusic": 3, + "sound_add": 3, + "global.IngameMusic": 3, + "global.FaucetMusic": 3, + "sound_volume": 3, + "global.sendBuffer": 19, + "global.HudCheck": 1, + "global.map_rotation": 19, + "global.CustomMapCollisionSprite": 1, + "window_set_region_scale": 1, + "ini_open": 2, + "global.playerName": 7, + "ini_read_string": 12, + "string_count": 2, + "MAX_PLAYERNAME_LENGTH": 2, + "global.fullscreen": 3, + "ini_read_real": 65, + "global.useLobbyServer": 2, + "global.hostingPort": 2, + "global.music": 2, + "MUSIC_BOTH": 1, + "global.playerLimit": 4, + "//thy": 1, + "playerlimit": 1, + "shalt": 1, + "exceed": 1, + "global.dedicatedMode": 7, + "ini_write_real": 60, + "global.multiClientLimit": 2, + "global.particles": 2, + "PARTICLES_NORMAL": 1, + "global.monitorSync": 3, + "set_synchronization": 2, + "global.medicRadar": 2, + "global.showHealer": 2, + "global.showHealing": 2, + "global.showTeammateStats": 2, + "global.serverPluginsPrompt": 2, + "global.restartPrompt": 2, + "//user": 1, + "HUD": 1, + "settings": 1, + "global.timerPos": 2, + "global.killLogPos": 2, + "global.kothHudPos": 2, + "global.clientPassword": 1, + "global.shuffleRotation": 2, + "global.timeLimitMins": 2, + "max": 2, + "global.serverPassword": 2, + "global.mapRotationFile": 1, + "global.serverName": 2, + "global.welcomeMessage": 2, + "global.caplimit": 3, + "global.caplimitBkup": 1, + "global.autobalance": 2, + "global.Server_RespawntimeSec": 4, + "global.rewardKey": 1, + "unhex": 1, + "global.rewardId": 1, + "global.mapdownloadLimitBps": 2, + "isBetaVersion": 1, + "global.attemptPortForward": 2, + "global.serverPluginList": 3, + "global.serverPluginsRequired": 2, + "CrosshairFilename": 5, + "CrosshairRemoveBG": 4, + "global.queueJumping": 2, + "global.backgroundHash": 2, + "global.backgroundTitle": 2, + "global.backgroundURL": 2, + "global.backgroundShowVersion": 2, + "readClasslimitsFromIni": 1, + "global.currentMapArea": 1, + "global.totalMapAreas": 1, + "global.setupTimer": 1, + "global.serverPluginsInUse": 1, + "global.pluginPacketBuffers": 1, + "global.pluginPacketPlayers": 1, + "ini_write_string": 10, + "ini_key_delete": 1, + "global.classlimits": 10, + "CLASS_SCOUT": 1, + "CLASS_HEAVY": 2, + "CLASS_DEMOMAN": 1, + "CLASS_SPY": 1, + "//screw": 1, + "index": 1, + "we": 1, + "will": 1, + "start": 1, + "//map_truefort": 1, + "maps": 33, + "//map_2dfort": 1, + "//map_conflict": 1, + "//map_classicwell": 1, + "//map_waterway": 1, + "//map_orange": 1, + "//map_dirtbowl": 1, + "//map_egypt": 1, + "//arena_montane": 1, + "//arena_lumberyard": 1, + "//gen_destroy": 1, + "//koth_valley": 1, + "//koth_corinth": 1, + "//koth_harvest": 1, + "//dkoth_atalia": 1, + "//dkoth_sixties": 1, + "//Server": 1, + "respawn": 1, + "time": 1, + "calculator.": 1, + "Converts": 1, + "frame.": 1, + "read": 1, + "multiply": 1, + "hehe": 1, + "global.Server_Respawntime": 3, + "global.mapchanging": 1, + "ini_close": 2, + "global.protocolUuid": 2, + "parseUuid": 2, + "PROTOCOL_UUID": 1, + "global.gg2lobbyId": 2, + "GG2_LOBBY_UUID": 1, + "initRewards": 1, + "IPRaw": 3, + "portRaw": 3, + "doubleCheck": 8, + "global.launchMap": 5, + "parameter_count": 1, + "parameter_string": 8, + "global.serverPort": 1, + "global.serverIP": 1, + "global.isHost": 1, + "Client": 1, + "global.customMapdesginated": 2, + "fileHandle": 6, + "mapname": 9, + "file_text_open_read": 1, + "file_text_eof": 1, + "file_text_read_string": 1, + "starts": 1, + "tab": 2, + "string_delete": 1, + "delete": 1, + "that": 1, + "comment": 1, + "starting": 1, + "file_text_readln": 1, + "file_text_close": 1, + "load": 1, + "ini": 1, + "Maps": 1, + "section": 1, + "//Set": 1, + "rotation": 1, + "sort_list": 7, + "*maps": 1, + "ds_list_sort": 1, + "mod": 1, + "global.gg2Font": 2, + "font_add_sprite": 2, + "gg2FontS": 1, + "global.countFont": 1, + "countFontS": 1, + "draw_set_font": 1, + "cursor_sprite": 1, + "CrosshairS": 5, + "directory_exists": 2, + "directory_create": 2, + "AudioControl": 1, + "SSControl": 1, + "message_background": 1, + "popupBackgroundB": 1, + "message_button": 1, + "popupButtonS": 1, + "message_text_font": 1, + "message_button_font": 1, + "message_input_font": 1, + "//Key": 1, + "Mapping": 1, + "global.jump": 1, + "global.down": 1, + "global.left": 1, + "global.right": 1, + "global.attack": 1, + "MOUSE_LEFT": 1, + "global.special": 1, + "MOUSE_RIGHT": 1, + "global.taunt": 1, + "global.chat1": 1, + "global.chat2": 1, + "global.chat3": 1, + "global.medic": 1, + "global.drop": 1, + "global.changeTeam": 1, + "global.changeClass": 1, + "global.showScores": 1, + "vk_shift": 1, + "calculateMonthAndDay": 1, + "loadplugins": 1, + "registry_set_root": 1, + "HKLM": 1, + "global.NTKernelVersion": 1, + "registry_read_string_ext": 1, + "CurrentVersion": 1, + "SIC": 1, + "sprite_replace": 1, + "sprite_set_offset": 1, + "sprite_get_width": 1, + "/2": 2, + "sprite_get_height": 1, + "AudioControlToggleMute": 1, + "room_goto_fix": 2, + "Menu": 2, + "hashList": 5, + "pluginname": 9, + "pluginhash": 4, + "realhash": 1, + "handle": 1, + "filesize": 1, + "progress": 1, + "tempfile": 1, + "tempdir": 1, + "lastContact": 2, + "isCached": 2, + "isDebug": 2, + "split": 1, + "checkpluginname": 1, + "ds_list_find_index": 1, + ".zip": 3, + "ServerPluginsCache": 6, + "@": 5, + ".zip.tmp": 1, + ".tmp": 2, + "ServerPluginsDebug": 1, + "Warning": 2, + "being": 2, + "loaded": 2, + "ServerPluginsDebug.": 2, + "Make": 2, + "sure": 2, + "clients": 1, + "same": 2, + "they": 1, + "may": 2, + "be": 2, + "unable": 2, + "connect.": 2, + "you": 1, + "Downloading": 1, + "last_plugin.log": 2, + "plugin.gml": 1, + "playerId": 11, + "commandLimitRemaining": 4, + "variable_local_exists": 4, + "commandReceiveState": 1, + "commandReceiveExpectedBytes": 1, + "commandReceiveCommand": 1, + "player.socket": 12, + "player.commandReceiveExpectedBytes": 7, + "player.commandReceiveState": 7, + "player.commandReceiveCommand": 4, + "commandBytes": 2, + "commandBytesInvalidCommand": 1, + "commandBytesPrefixLength1": 1, + "commandBytesPrefixLength2": 1, + "default": 1, + "read_ushort": 2, + "PLAYER_LEAVE": 1, + "PLAYER_CHANGECLASS": 1, + "class": 8, + "getCharacterObject": 2, + "player.object": 12, + "collision_point": 2, + "SpawnRoom": 2, + "lastDamageDealer": 8, + "sendEventPlayerDeath": 4, + "BID_FAREWELL": 4, + "doEventPlayerDeath": 4, + "secondToLastDamageDealer": 2, + "lastDamageDealer.object": 2, + "lastDamageDealer.object.healer": 4, + "player.alarm": 4, + "<=0)>": 1, + "5": 1, + "checkClasslimits": 2, + "ServerPlayerChangeclass": 2, + "sendBuffer": 1, + "PLAYER_CHANGETEAM": 1, + "newTeam": 7, + "balance": 5, + "redSuperiority": 6, + "calculate": 1, + "which": 1, + "Player": 1, + "TEAM_SPECTATOR": 1, + "newClass": 4, + "ServerPlayerChangeteam": 1, + "ServerBalanceTeams": 1, + "CHAT_BUBBLE": 2, + "bubbleImage": 5, + "global.aFirst": 1, + "write_ubyte": 20, + "setChatBubble": 1, + "BUILD_SENTRY": 2, + "collision_circle": 1, + "player.object.x": 3, + "player.object.y": 3, + "Sentry": 1, + "player.object.nutsNBolts": 1, + "player.sentry": 2, + "player.object.onCabinet": 1, + "write_ushort": 2, + "global.serializeBuffer": 3, + "player.object.x*5": 1, + "player.object.y*5": 1, + "write_byte": 1, + "player.object.image_xscale": 2, + "buildSentry": 1, + "DESTROY_SENTRY": 1, + "DROP_INTEL": 1, + "player.object.intel": 1, + "sendEventDropIntel": 1, + "doEventDropIntel": 1, + "OMNOMNOMNOM": 2, + "player.humiliated": 1, + "player.object.taunting": 1, + "player.object.omnomnomnom": 1, + "player.object.canEat": 1, + "omnomnomnomend": 2, + "xscale": 1, + "TOGGLE_ZOOM": 2, + "toggleZoom": 1, + "PLAYER_CHANGENAME": 2, + "nameLength": 4, + "socket_receivebuffer_size": 3, + "KICK": 2, + "KICK_NAME": 1, + "current_time": 2, + "lastNamechange": 2, + "INPUTSTATE": 1, + "keyState": 1, + "netAimDirection": 1, + "aimDirection": 1, + "netAimDirection*360/65536": 1, + "event_user": 1, + "REWARD_REQUEST": 1, + "player.rewardId": 1, + "player.challenge": 2, + "rewardCreateChallenge": 1, + "REWARD_CHALLENGE_CODE": 1, + "write_binstring": 1, + "REWARD_CHALLENGE_RESPONSE": 1, + "answer": 3, + "authbuffer": 1, + "read_binstring": 1, + "rewardAuthStart": 1, + "challenge": 1, + "rewardId": 1, + "PLUGIN_PACKET": 1, + "packetID": 3, + "buf": 5, + "success": 3, + "_PluginPacketPush": 1, + "KICK_BAD_PLUGIN_PACKET": 1, + "CLIENT_SETTINGS": 2, + "mirror": 4, + "player.queueJump": 1 + }, "GAS": { ".cstring": 1, "LC0": 2, @@ -18243,155 +19233,6 @@ "future": 2, ".result": 1 }, - "IDL": { - ";": 59, - "docformat": 3, - "+": 8, - "Inverse": 1, - "hyperbolic": 2, - "cosine.": 1, - "Uses": 1, - "the": 7, - "formula": 1, - "text": 1, - "{": 3, - "acosh": 1, - "}": 3, - "(": 26, - "z": 9, - ")": 26, - "ln": 1, - "sqrt": 4, - "-": 14, - "Examples": 2, - "The": 1, - "arc": 1, - "sine": 1, - "function": 4, - "looks": 1, - "like": 2, - "IDL": 5, - "x": 8, - "*": 2, - "findgen": 1, - "/": 1, - "plot": 1, - "mg_acosh": 2, - "xstyle": 1, - "This": 1, - "should": 1, - "look": 1, - "..": 1, - "image": 1, - "acosh.png": 1, - "Returns": 3, - "float": 1, - "double": 2, - "complex": 2, - "or": 1, - "depending": 1, - "on": 1, - "input": 2, - "Params": 3, - "in": 4, - "required": 4, - "type": 5, - "numeric": 1, - "compile_opt": 3, - "strictarr": 3, - "return": 5, - "alog": 1, - "end": 5, - "MODULE": 1, - "mg_analysis": 1, - "DESCRIPTION": 1, - "Tools": 1, - "for": 2, - "analysis": 1, - "VERSION": 1, - "SOURCE": 1, - "mgalloy": 1, - "BUILD_DATE": 1, - "January": 1, - "FUNCTION": 2, - "MG_ARRAY_EQUAL": 1, - "KEYWORDS": 1, - "MG_TOTAL": 1, - "Find": 1, - "greatest": 1, - "common": 1, - "denominator": 1, - "GCD": 1, - "two": 1, - "positive": 2, - "integers.": 1, - "integer": 5, - "a": 4, - "first": 1, - "b": 4, - "second": 1, - "mg_gcd": 2, - "on_error": 1, - "if": 5, - "n_params": 1, - "ne": 1, - "then": 5, - "message": 2, - "mg_isinteger": 2, - "||": 1, - "begin": 2, - "endif": 2, - "_a": 3, - "abs": 2, - "_b": 3, - "minArg": 5, - "<": 1, - "maxArg": 3, - "eq": 2, - "remainder": 3, - "mod": 1, - "Truncate": 1, - "argument": 2, - "towards": 1, - "i.e.": 1, - "takes": 1, - "FLOOR": 1, - "of": 4, - "values": 2, - "and": 1, - "CEIL": 1, - "negative": 1, - "values.": 1, - "Try": 1, - "main": 2, - "level": 2, - "program": 2, - "at": 1, - "this": 1, - "file.": 1, - "It": 1, - "does": 1, - "print": 4, - "mg_trunc": 3, - "[": 6, - "]": 6, - "floor": 2, - "ceil": 2, - "array": 2, - "same": 1, - "as": 1, - "float/double": 1, - "containing": 1, - "to": 1, - "truncate": 1, - "result": 3, - "posInd": 3, - "where": 1, - "gt": 2, - "nposInd": 2, - "L": 1, - "example": 1 - }, "Idris": { "module": 1, "Prelude.Char": 1, @@ -27403,2315 +28244,6 @@ "in_7_list": 1, "in_8_list": 1 }, - "M": { - "%": 203, - "zewdAPI": 52, - ";": 1275, - "Enterprise": 5, - "Web": 5, - "Developer": 5, - "run": 2, - "-": 1604, - "time": 9, - "functions": 4, - "and": 56, - "user": 27, - "APIs": 1, - "Product": 2, - "(": 2142, - "Build": 6, - ")": 2150, - "Date": 2, - "Fri": 1, - "Nov": 1, - "|": 170, - "for": 77, - "GT.M": 30, - "m_apache": 3, - "Copyright": 12, - "c": 113, - "M/Gateway": 4, - "Developments": 4, - "Ltd": 4, - "Reigate": 4, - "Surrey": 4, - "UK.": 4, - "All": 4, - "rights": 4, - "reserved.": 4, - "http": 13, - "//www.mgateway.com": 4, - "Email": 4, - "rtweed@mgateway.com": 4, - "This": 26, - "program": 19, - "is": 81, - "free": 15, - "software": 12, - "you": 16, - "can": 15, - "redistribute": 11, - "it": 44, - "and/or": 11, - "modify": 11, - "under": 14, - "the": 217, - "terms": 11, - "of": 80, - "GNU": 33, - "Affero": 33, - "General": 33, - "Public": 33, - "License": 48, - "as": 22, - "published": 11, - "by": 33, - "Free": 11, - "Software": 11, - "Foundation": 11, - "either": 13, - "version": 16, - "or": 46, - "at": 21, - "your": 16, - "option": 12, - "any": 15, - "later": 11, - "version.": 11, - "distributed": 13, - "in": 78, - "hope": 11, - "that": 17, - "will": 23, - "be": 32, - "useful": 11, - "but": 17, - "WITHOUT": 12, - "ANY": 12, - "WARRANTY": 11, - "without": 11, - "even": 11, - "implied": 11, - "warranty": 11, - "MERCHANTABILITY": 11, - "FITNESS": 11, - "FOR": 15, - "A": 12, - "PARTICULAR": 11, - "PURPOSE.": 11, - "See": 15, - "more": 13, - "details.": 12, - "You": 13, - "should": 16, - "have": 17, - "received": 11, - "a": 112, - "copy": 13, - "along": 11, - "with": 43, - "this": 38, - "program.": 9, - "If": 14, - "not": 37, - "see": 25, - "": 11, - ".": 814, - "QUIT": 249, - "_": 126, - "getVersion": 1, - "zewdCompiler": 6, - "date": 1, - "getDate": 1, - "compilePage": 2, - "app": 13, - "page": 12, - "mode": 12, - "technology": 9, - "outputPath": 4, - "multilingual": 4, - "maxLines": 4, - "d": 381, - "g": 228, - "compileAll": 2, - "templatePageName": 2, - "autoTranslate": 2, - "language": 6, - "verbose": 2, - "zewdMgr": 1, - "startSession": 2, - "requestArray": 2, - "serverArray": 1, - "sessionArray": 5, - "filesArray": 1, - "zewdPHP": 8, - ".requestArray": 2, - ".serverArray": 1, - ".sessionArray": 3, - ".filesArray": 1, - "closeSession": 2, - "saveSession": 2, - "endOfPage": 2, - "prePageScript": 2, - "sessid": 146, - "releaseLock": 2, - "tokeniseURL": 2, - "url": 2, - "zewdCompiler16": 5, - "getSessid": 1, - "token": 21, - "i": 465, - "isTokenExpired": 2, - "p": 84, - "zewdSession": 39, - "initialiseSession": 1, - "k": 122, - "deleteSession": 2, - "changeApp": 1, - "appName": 4, - "setSessionValue": 6, - "setRedirect": 1, - "toPage": 1, - "e": 210, - "n": 197, - "path": 4, - "s": 775, - "getRootURL": 1, - "l": 84, - "zewd": 17, - "trace": 24, - "_sessid_": 3, - "_token_": 1, - "_nextPage": 1, - "zcvt": 11, - "nextPage": 1, - "isNextPageTokenValid": 2, - "zewdCompiler13": 10, - "isCSP": 1, - "normaliseTextValue": 1, - "text": 6, - "replaceAll": 11, - "writeLine": 2, - "line": 9, - "CacheTempBuffer": 2, - "j": 67, - "increment": 11, - "w": 127, - "displayOptions": 2, - "fieldName": 5, - "listName": 6, - "escape": 7, - "codeValue": 7, - "name": 121, - "nnvp": 1, - "nvp": 1, - "pos": 33, - "textValue": 6, - "value": 72, - "getSessionValue": 3, - "tr": 13, - "+": 188, - "f": 93, - "o": 51, - "q": 244, - "codeValueEsc": 7, - "textValueEsc": 7, - "htmlOutputEncode": 2, - "zewdAPI2": 5, - "_codeValueEsc_": 1, - "selected": 4, - "translationMode": 1, - "_appName": 1, - "typex": 1, - "type": 2, - "avoid": 1, - "Cache": 3, - "bug": 1, - "getPhraseIndex": 1, - "zewdCompiler5": 1, - "licensed": 1, - "setWarning": 2, - "isTemp": 11, - "setWLDSymbol": 1, - "Duplicate": 1, - "performance": 1, - "also": 4, - "wldAppName": 1, - "wldName": 1, - "wldSessid": 1, - "zzname": 1, - "zv": 6, - "[": 53, - "extcErr": 1, - "mess": 3, - "namespace": 1, - "zt": 20, - "valueErr": 1, - "exportCustomTags": 2, - "tagList": 1, - "filepath": 10, - ".tagList": 1, - "exportAllCustomTags": 2, - "importCustomTags": 2, - "filePath": 2, - "zewdForm": 1, - "stripSpaces": 6, - "np": 17, - "obj": 6, - "prop": 6, - "setSessionObject": 3, - "allowJSONAccess": 1, - "sessionName": 30, - "access": 21, - "disallowJSONAccess": 1, - "JSONAccess": 1, - "existsInSession": 2, - "existsInSessionArray": 2, - "p1": 5, - "p2": 10, - "p3": 3, - "p4": 2, - "p5": 2, - "p6": 2, - "p7": 2, - "p8": 2, - "p9": 2, - "p10": 2, - "p11": 2, - "clearSessionArray": 1, - "arrayName": 35, - "setSessionArray": 1, - "itemName": 16, - "itemValue": 7, - "getSessionArray": 1, - "array": 22, - "clearArray": 2, - "set": 98, - "m": 37, - "getSessionArrayErr": 1, - "Come": 1, - "here": 4, - "if": 44, - "error": 62, - "occurred": 2, - "addToSession": 2, - "@name": 4, - "mergeToSession": 1, - "mergeGlobalToSession": 2, - "globalName": 7, - "mergeGlobalFromSession": 2, - "mergeArrayToSession": 1, - "mergeArrayToSessionObject": 2, - ".array": 1, - "mergeArrayFromSession": 1, - "mergeFromSession": 1, - "deleteFromSession": 1, - "deleteFromSessionObject": 1, - "sessionNameExists": 1, - "getSessionArrayValue": 2, - "subscript": 7, - "exists": 6, - ".exists": 1, - "sessionArrayValueExists": 2, - "deleteSessionArrayValue": 2, - "Objects": 1, - "objectName": 13, - "propertyName": 3, - "propertyValue": 5, - "comma": 3, - "x": 96, - "replace": 27, - "objectName_": 2, - "_propertyName": 2, - "_propertyName_": 2, - "_propertyValue_": 1, - "_p": 1, - "quoted": 1, - "string": 50, - "FromStr": 6, - "S": 99, - "ToStr": 4, - "InText": 4, - "old": 3, - "new": 15, - "ok": 14, - "removeDocument": 1, - "zewdDOM": 3, - "instanceName": 2, - "clearXMLIndex": 1, - "zewdSchemaForm": 1, - "closeDOM": 1, - "makeTokenString": 1, - "length": 7, - "token_": 1, - "r": 88, - "makeString": 3, - "char": 9, - "len": 8, - "create": 6, - "characters": 4, - "str": 15, - "convertDateToSeconds": 1, - "hdate": 7, - "Q": 58, - "hdate*86400": 1, - "convertSecondsToDate": 1, - "secs": 2, - "secs#86400": 1, - "getTokenExpiry": 2, - "h*86400": 1, - "h": 39, - "randChar": 1, - "R": 2, - "lowerCase": 2, - "stripLeadingSpaces": 2, - "stripTrailingSpaces": 2, - "d1": 7, - "zd": 1, - "yy": 19, - "dd": 4, - "I": 43, - "<10>": 1, - "dd=": 2, - "mm=": 3, - "1": 74, - "d1=": 1, - "2": 14, - "p1=": 1, - "mm": 7, - "p2=": 1, - "yy=": 1, - "3": 6, - "dd_": 1, - "mm_": 1, - "inetTime": 1, - "Decode": 1, - "Internet": 1, - "Format": 1, - "Time": 1, - "from": 16, - "H": 1, - "format": 2, - "Offset": 1, - "relative": 1, - "to": 73, - "GMT": 1, - "eg": 3, - "hh": 4, - "ss": 4, - "<": 19, - "_hh": 1, - "time#3600": 1, - "_mm": 1, - "time#60": 1, - "_ss": 2, - "hh_": 1, - "_mm_": 1, - "openNewFile": 2, - "openFile": 2, - "openDOM": 2, - "&": 27, - "#39": 1, - "<\",\"<\")>": 1, - "string=": 1, - "gt": 1, - "amp": 1, - "HTML": 1, - "quot": 2, - "stop": 20, - "no": 53, - "no2": 1, - "p1_c_p2": 1, - "getIP": 2, - "Get": 2, - "own": 2, - "IP": 1, - "address": 1, - "ajaxErrorRedirect": 2, - "classExport": 2, - "className": 2, - "methods": 2, - ".methods": 1, - "strx": 2, - "disableEwdMgr": 1, - "enableEwdMgr": 1, - "enableWLDAccess": 1, - "disableWLDAccess": 1, - "isSSOValid": 2, - "sso": 2, - "username": 8, - "password": 8, - "zewdMgrAjax2": 1, - "uniqueId": 1, - "nodeOID": 2, - "filename": 2, - "linkToParentSession": 2, - "zewdCompiler20": 1, - "exportToGTM": 1, - "routine": 4, - "zewdDemo": 1, - "Tutorial": 1, - "Wed": 1, - "Apr": 1, - "getLanguage": 1, - "getRequestValue": 1, - "login": 1, - "getTextValue": 4, - "getPasswordValue": 2, - "_username_": 1, - "_password": 1, - "logine": 1, - "message": 8, - "textid": 1, - "errorMessage": 1, - "ewdDemo": 8, - "clearList": 2, - "appendToList": 4, - "addUsername": 1, - "newUsername": 5, - "newUsername_": 1, - "setTextValue": 4, - "testValue": 1, - "pass": 24, - "getSelectValue": 3, - "_user": 1, - "getPassword": 1, - "setPassword": 1, - "getObjDetails": 1, - "data": 43, - "_user_": 1, - "_data": 2, - "setRadioOn": 2, - "initialiseCheckbox": 2, - "setCheckboxOn": 3, - "createLanguageList": 1, - "setMultipleSelectOn": 2, - "clearTextArea": 2, - "textarea": 2, - "createTextArea": 1, - ".textarea": 1, - "userType": 4, - "setMultipleSelectValues": 1, - ".selected": 1, - "testField3": 3, - ".value": 1, - "testField2": 1, - "field3": 1, - "must": 7, - "null": 6, - "dateTime": 1, - "start": 24, - "student": 14, - "zwrite": 1, - "write": 59, - "order": 11, - "do": 15, - "quit": 30, - "file": 10, - "part": 3, - "DataBallet.": 4, - "C": 9, - "Laurent": 2, - "Parenteau": 2, - "": 2, - "DataBallet": 4, - "encode": 1, - "Return": 1, - "base64": 6, - "URL": 2, - "Filename": 1, - "safe": 3, - "alphabet": 2, - "RFC": 1, - "todrop": 2, - "Populate": 1, - "values": 4, - "on": 15, - "first": 10, - "use": 5, - "only.": 1, - "zextract": 3, - "zlength": 3, - "Digest": 2, - "Extension": 9, - "Piotr": 7, - "Koper": 7, - "": 7, - "trademark": 2, - "Fidelity": 2, - "Information": 2, - "Services": 2, - "Inc.": 2, - "//sourceforge.net/projects/fis": 2, - "gtm/": 2, - "simple": 2, - "OpenSSL": 3, - "based": 1, - "digest": 19, - "extension": 3, - "rewrite": 1, - "EVP_DigestInit": 1, - "usage": 3, - "example": 5, - "additional": 5, - "M": 24, - "wrapper.": 1, - "//www.openssl.org/docs/crypto/EVP_DigestInit.html": 1, - "The": 11, - "return": 7, - "digest.init": 3, - "usually": 1, - "when": 11, - "an": 11, - "invalid": 4, - "algorithm": 1, - "was": 5, - "specification.": 1, - "Anyway": 1, - "properly": 1, - "used": 6, - "never": 4, - "fail.": 1, - "Please": 2, - "feel": 2, - "contact": 2, - "me": 2, - "questions": 2, - "comments": 4, - "returns": 7, - "ASCII": 1, - "HEX": 1, - "all": 8, - "one": 5, - "digest.update": 2, - ".c": 2, - ".m": 11, - "digest.final": 2, - ".d": 1, - "init": 6, - "alg": 3, - "context": 1, - "handler": 9, - "try": 1, - "etc": 1, - "returned": 1, - "occurs": 1, - "e.g.": 2, - "unknown": 1, - "update": 1, - "ctx": 4, - "msg": 6, - "updates": 1, - ".ctx": 2, - ".msg": 1, - "final": 1, - "hex": 1, - "encoded": 8, - "frees": 1, - "memory": 1, - "allocated": 1, - ".digest": 1, - "algorithms": 1, - "availability": 1, - "depends": 1, - "libcrypto": 1, - "configuration": 1, - "md4": 1, - "md5": 2, - "sha": 1, - "sha1": 1, - "sha224": 1, - "sha256": 1, - "sha512": 1, - "dss1": 1, - "ripemd160": 1, - "These": 2, - "two": 2, - "routines": 6, - "illustrate": 1, - "dynamic": 1, - "scope": 1, - "variables": 2, - "triangle1": 1, - "sum": 15, - "main2": 1, - "y": 33, - "triangle2": 1, - "compute": 2, - "Fibonacci": 1, - "series": 1, - "b": 64, - "term": 10, - "start1": 2, - "entry": 5, - "label": 4, - "start2": 1, - "function": 6, - "computes": 1, - "factorial": 3, - "f*n": 1, - "main": 1, - "GMRGPNB0": 1, - "CISC/JH/RM": 1, - "NARRATIVE": 1, - "BUILDER": 1, - "TEXT": 5, - "GENERATOR": 1, - "cont.": 1, - "/20/91": 1, - "Text": 1, - "Generator": 1, - "Jan": 1, - "ENTRY": 2, - "WITH": 1, - "GMRGA": 1, - "SET": 3, - "TO": 6, - "POINT": 1, - "AT": 1, - "WHICH": 1, - "WANT": 1, - "START": 1, - "BUILDING": 1, - "GMRGE0": 11, - "GMRGADD": 4, - "D": 64, - "GMR": 6, - "GMRGA0": 11, - "GMRGPDA": 9, - "GMRGCSW": 2, - "NOW": 1, - "DTC": 1, - "GMRGB0": 9, - "O": 24, - "GMRGST": 6, - "GMRGPDT": 2, - "STAT": 8, - "GMRGRUT0": 3, - "GMRGF0": 3, - "GMRGSTAT": 8, - "P": 68, - "_GMRGB0_": 2, - "GMRD": 6, - "GMRGSSW": 3, - "SNT": 1, - "GMRGPNB1": 1, - "GMRGNAR": 8, - "GMRGPAR_": 2, - "_GMRGSPC_": 3, - "_GMRGRM": 2, - "_GMRGE0": 1, - "STORETXT": 1, - "GMRGRUT1": 1, - "GMRGSPC": 3, - "F": 10, - "GMRGD0": 7, - "ALIST": 1, - "G": 40, - "TMP": 26, - "J": 38, - "GMRGPLVL": 6, - "GMRGA0_": 1, - "_GMRGD0_": 1, - "_GMRGSSW_": 1, - "_GMRGADD": 1, - "GMRGI0": 6, - "label1": 1, - "if1": 2, - "statement": 3, - "if2": 2, - "statements": 1, - "contrasted": 1, - "": 3, - "variable": 8, - "a=": 3, - "smaller": 3, - "than": 4, - "b=": 4, - "if3": 1, - "else": 7, - "clause": 2, - "if4": 1, - "bodies": 1, - "exercise": 1, - "car": 14, - "@": 8, - "MD5": 6, - "Implementation": 1, - "It": 2, - "works": 1, - "ZCHSET": 2, - "please": 1, - "don": 1, - "only": 9, - "joke.": 1, - "Serves": 1, - "well": 2, - "reverse": 1, - "engineering": 1, - "obtaining": 1, - "boolean": 2, - "integer": 1, - "addition": 1, - "modulo": 1, - "division.": 1, - "//en.wikipedia.org/wiki/MD5": 1, - "t": 11, - "#64": 1, - "msg_": 1, - "_m_": 1, - "n64": 2, - "*8": 2, - "read": 2, - ".p": 1, - "..": 28, - "...": 6, - "*i": 3, - "#16": 3, - "xor": 4, - "rotate": 5, - "#4294967296": 6, - "n32h": 5, - "bit": 5, - "#2": 1, - "*2147483648": 2, - "a#2": 1, - "b#2": 1, - ".a": 1, - ".b": 1, - "rol": 1, - "a*": 1, - "**n": 1, - "c#4294967296": 1, - "*n": 1, - "n#256": 1, - "n#16": 2, - "MDB": 60, - "M/DB": 2, - "Mumps": 1, - "Emulation": 1, - "Amazon": 1, - "SimpleDB": 1, - "buildDate": 1, - "indexLength": 10, - "Note": 2, - "keyId": 108, - "been": 4, - "tested": 1, - "valid": 1, - "these": 1, - "are": 11, - "called": 8, - "To": 2, - "Initialise": 2, - "service": 1, - "//192.168.1.xxx/mdb/test.mgwsi": 1, - "Action": 2, - "addUser": 2, - "userKeyId": 6, - "userSecretKey": 6, - "requestId": 17, - "boxUsage": 11, - "startTime": 21, - ".startTime": 5, - "MDBUAF": 2, - "end": 33, - ".boxUsage": 22, - "createDomain": 1, - "domainName": 38, - "dn": 4, - "dnx": 3, - "id": 33, - "noOfDomains": 12, - "MDBConfig": 1, - "getDomainId": 3, - "found": 7, - "namex": 8, - "buildItemNameIndex": 2, - "domainId": 53, - "itemId": 41, - "itemValuex": 3, - "countDomains": 2, - "key": 22, - "deleteDomain": 2, - "listDomains": 1, - "maxNoOfDomains": 2, - "nextToken": 7, - "domainList": 3, - "fullName": 3, - "decodeBase64": 1, - "encodeBase64": 1, - "itemExists": 1, - "getItemId": 2, - "getAttributeValueId": 3, - "attribId": 36, - "valuex": 13, - "putAttributes": 2, - "attributes": 32, - "valueId": 16, - "xvalue": 4, - "add": 5, - "Item": 1, - "Domain": 1, - "itemNamex": 4, - "parseJSON": 1, - "zmwire": 53, - "attributesJSON": 1, - ".attributes": 5, - "attribute": 14, - "getAttributeId": 2, - "domain": 1, - "Not": 1, - "allowed": 17, - "same": 2, - "remove": 6, - "existing": 2, - "now": 1, - "name/value": 2, - "pair": 1, - "getAttributes": 2, - "suppressBoxUsage": 1, - "attrNo": 9, - "valueNo": 6, - "delete": 2, - "item": 2, - "associated": 1, - "queryIndex": 1, - "records": 2, - "specified": 4, - "pairs": 2, - "vno": 2, - "left": 5, - "completely": 3, - "references": 1, - "maxNoOfItems": 3, - "itemList": 12, - "session": 1, - "identifier": 1, - "stored": 1, - "queryExpression": 16, - "relink": 1, - "zewdGTMRuntime": 1, - "CGIEVAR": 1, - "cgi": 1, - "unescName": 5, - "urlDecode": 2, - "KEY": 36, - "response": 29, - "WebLink": 1, - "point": 2, - "action": 15, - "AWSAcessKeyId": 1, - "db": 9, - "hash": 1, - "itemsAndAttrs": 2, - "secretKey": 1, - "signatureMethod": 2, - "signatureVersion": 3, - "stringToSign": 2, - "rltKey": 2, - "_action_": 2, - "h_": 3, - "mdbKey": 2, - "errorResponse": 9, - "initialise": 3, - ".requestId": 7, - "createResponse": 4, - "installMDBM": 1, - "authenticate": 1, - "MDBSession": 1, - "createResponseStringToSign": 1, - "Security": 1, - "OK": 6, - "_db": 1, - "MDBAPI": 1, - "lineNo": 19, - "CacheTempEWD": 16, - "_db_": 1, - "db_": 1, - "_action": 1, - "resp": 5, - "metaData": 1, - "domainMetadata": 1, - ".metaData": 1, - "paramName": 8, - "paramValue": 5, - "_i_": 5, - "Query": 1, - "DomainName": 2, - "QueryExpression": 2, - "MaxNumberOfItems": 2, - "NextToken": 3, - "QueryWithAttributes": 1, - "AttributeName.": 2, - "Select": 2, - "SelectExpression": 1, - "entering": 1, - "runSelect.": 1, - "selectExpression": 3, - "finished": 1, - "runSelect": 3, - "count": 18, - "select": 3, - "*": 5, - "where": 6, - "limit": 14, - "asc": 1, - "inValue": 6, - "expr": 18, - "rel": 2, - "itemStack": 3, - "between": 2, - "<=\">": 1, - "lastWord=": 7, - "inAttr=": 5, - "expr=": 10, - "thisWord=": 7, - "inAttr": 2, - "c=": 28, - "queryExpression=": 4, - "_queryExpression": 2, - "4": 5, - "isNull": 1, - "5": 1, - "8": 1, - "isNotNull": 1, - "9": 1, - "offset": 6, - "prevName": 1, - "np=": 1, - "diffNames": 6, - "_term": 3, - "expr_": 1, - "_orderBy": 1, - "runQuery": 2, - ".itemList": 4, - "escVals": 1, - "str_c": 2, - "_x_": 1, - "query": 4, - "orderBy": 1, - "_query": 1, - "parseSelect": 1, - ".domainName": 2, - ".queryExpression": 1, - ".orderBy": 1, - ".limit": 1, - "executeSelect": 1, - ".itemStack": 1, - "***": 2, - "listCopy": 3, - "numeric": 6, - "N.N": 12, - "N.N1": 4, - "externalSelect": 2, - "json": 9, - "_keyId_": 1, - "_selectExpression": 1, - "spaces": 3, - "string_spaces": 1, - "test": 6, - "miles": 4, - "gallons": 4, - "miles/gallons": 1, - "computepesimist": 1, - "miles/": 1, - "computeoptimist": 1, - "/gallons": 1, - "Mumtris": 3, - "tetris": 1, - "game": 1, - "MUMPS": 1, - "fun.": 1, - "Resize": 1, - "terminal": 2, - "maximize": 1, - "PuTTY": 1, - "window": 1, - "restart": 3, - "so": 4, - "report": 1, - "true": 2, - "size": 3, - "mumtris.": 1, - "Try": 2, - "setting": 3, - "ansi": 2, - "compatible": 1, - "cursor": 1, - "positioning.": 1, - "NOTICE": 1, - "uses": 1, - "making": 1, - "delays": 1, - "lower": 1, - "s.": 1, - "That": 1, - "means": 2, - "CPU": 1, - "fall": 5, - "lock": 2, - "clear": 6, - "change": 6, - "preview": 3, - "over": 2, - "exit": 3, - "short": 1, - "circuit": 1, - "redraw": 3, - "timeout": 1, - "harddrop": 1, - "other": 1, - "ex": 5, - "hd": 3, - "*c": 1, - "<0&'d>": 1, - "i=": 14, - "st": 6, - "t10m": 1, - "0": 23, - "<0>": 2, - "q=": 6, - "d=": 1, - "zb": 2, - "right": 3, - "fl=": 1, - "gr=": 1, - "hl": 2, - "help": 2, - "drop": 2, - "hd=": 1, - "matrix": 2, - "stack": 8, - "draw": 3, - "ticks": 2, - "h=": 2, - "1000000000": 1, - "e=": 1, - "t10m=": 1, - "100": 2, - "n=": 1, - "ne=": 1, - "x=": 5, - "y=": 3, - "r=": 3, - "collision": 6, - "score": 5, - "k=": 1, - "j=": 4, - "<1))))>": 1, - "800": 1, - "200": 1, - "lv": 5, - "lc=": 1, - "10": 1, - "lc": 3, - "mt_": 2, - "cls": 6, - ".s": 5, - "dh/2": 6, - "dw/2": 6, - "*s": 4, - "u": 6, - "echo": 1, - "intro": 1, - "workaround": 1, - "ANSI": 1, - "driver": 1, - "NL": 1, - "some": 1, - "place": 9, - "clearscreen": 1, - "N": 19, - "h/2": 3, - "*w/2": 3, - "fill": 3, - "fl": 2, - "*x": 1, - "mx": 4, - "my": 5, - "step": 8, - "**lv*sb": 1, - "*lv": 1, - "sc": 3, - "ne": 2, - "gr": 1, - "w*3": 1, - "dev": 1, - "zsh": 1, - "dw": 1, - "dh": 1, - "elements": 3, - "elemId": 3, - "rotateVersions": 1, - "rotateVersion": 2, - "bottom": 1, - "coordinate": 1, - "____": 1, - "__": 2, - "||": 1, - "ax": 2, - "bx": 2, - "cx": 2, - "ay": 2, - "cy": 2, - "sumx": 3, - "sqrx": 3, - "sumxy": 5, - "x*x": 1, - "x*y": 1, - "PCRE": 23, - "tries": 1, - "deliver": 1, - "best": 2, - "possible": 5, - "interface": 1, - "world": 4, - "providing": 1, - "support": 3, - "arrays": 1, - "stringified": 2, - "parameter": 1, - "names": 3, - "simplified": 1, - "API": 7, - "locales": 2, - "exceptions": 1, - "Perl5": 1, - "Global": 8, - "Match.": 1, - "pcreexamples.m": 2, - "comprehensive": 1, - "examples": 4, - "pcre": 59, - "beginner": 1, - "level": 5, - "tips": 1, - "match": 41, - "limits": 6, - "exception": 12, - "handling": 2, - "UTF": 17, - "GT.M.": 1, - "out": 2, - "known": 2, - "book": 1, - "regular": 1, - "expressions": 1, - "//regex.info/": 1, - "For": 3, - "information": 1, - "//pcre.org/": 1, - "Initial": 2, - "release": 2, - "pkoper": 2, - "pcre.version": 1, - "config": 3, - "case": 7, - "insensitive": 7, - "protect": 11, - "erropt": 6, - "isstring": 5, - "code": 28, - "pcre.config": 1, - ".name": 1, - ".erropt": 3, - ".isstring": 1, - ".n": 20, - "ec": 10, - "compile": 14, - "pattern": 21, - "options": 45, - "locale": 24, - "mlimit": 20, - "reclimit": 19, - "optional": 16, - "joined": 3, - "Unix": 1, - "pcre_maketables": 2, - "cases": 1, - "undefined": 1, - "environment": 7, - "defined": 2, - "LANG": 4, - "LC_*": 1, - "output": 49, - "command": 9, - "Debian": 2, - "tip": 1, - "dpkg": 1, - "reconfigure": 1, - "enable": 1, - "system": 1, - "wide": 1, - "number": 5, - "internal": 3, - "matching": 4, - "calls": 1, - "pcre_exec": 4, - "execution": 2, - "manual": 2, - "details": 5, - "depth": 1, - "recursion": 1, - "calling": 2, - "ref": 41, - "err": 4, - "erroffset": 3, - "pcre.compile": 1, - ".pattern": 3, - ".ref": 13, - ".err": 1, - ".erroffset": 1, - "exec": 4, - "subject": 24, - "startoffset": 3, - "octets": 2, - "starts": 1, - "like": 4, - "chars": 3, - "pcre.exec": 2, - ".subject": 3, - "zl": 7, - "ec=": 7, - "ovector": 25, - "element": 1, - "code=": 4, - "ovecsize": 5, - "fullinfo": 3, - "OPTIONS": 2, - "SIZE": 1, - "CAPTURECOUNT": 1, - "BACKREFMAX": 1, - "FIRSTBYTE": 1, - "FIRSTTABLE": 1, - "LASTLITERAL": 1, - "NAMEENTRYSIZE": 1, - "NAMECOUNT": 1, - "STUDYSIZE": 1, - "OKPARTIAL": 1, - "JCHANGED": 1, - "HASCRORLF": 1, - "MINLENGTH": 1, - "JIT": 1, - "JITSIZE": 1, - "NAME": 3, - "nametable": 4, - "index": 1, - "indexed": 4, - "substring": 1, - "begin": 18, - "begin=": 3, - "end=": 4, - "contains": 2, - "octet": 4, - "UNICODE": 1, - "ze": 8, - "begin_": 1, - "_end": 1, - "store": 6, - "above": 2, - "stores": 1, - "captured": 6, - "key=": 2, - "gstore": 3, - "round": 12, - "byref": 5, - "global": 26, - "ref=": 3, - "l=": 2, - "capture": 10, - "indexes": 1, - "extended": 1, - "NAMED_ONLY": 2, - "named": 12, - "groups": 5, - "OVECTOR": 2, - "namedonly": 9, - "options=": 4, - "o=": 12, - "namedonly=": 2, - "ovector=": 2, - "NO_AUTO_CAPTURE": 2, - "_capture_": 2, - "matches": 10, - "s=": 4, - "_s_": 1, - "GROUPED": 1, - "group": 4, - "result": 3, - "patterns": 3, - "pcredemo": 1, - "pcreccp": 1, - "cc": 1, - "procedure": 2, - "Perl": 1, - "utf8": 2, - "crlf": 6, - "empty": 7, - "skip": 6, - "determine": 1, - "them": 1, - "before": 2, - "byref=": 2, - "check": 2, - "UTF8": 2, - "double": 1, - "utf8=": 1, - "crlf=": 3, - "NL_CRLF": 1, - "NL_ANY": 1, - "NL_ANYCRLF": 1, - "none": 1, - "build": 2, - "NEWLINE": 1, - ".start": 1, - "unwind": 1, - "call": 1, - "optimize": 1, - "leave": 1, - "advance": 1, - "LF": 1, - "CR": 1, - "CRLF": 1, - "middle": 1, - ".i": 2, - ".match": 2, - ".round": 2, - ".byref": 2, - ".ovector": 2, - "subst": 3, - "last": 4, - "occurrences": 1, - "matched": 1, - "back": 4, - "th": 3, - "{": 4, - "}": 4, - "replaced": 1, - "substitution": 2, - "begins": 1, - "substituted": 2, - "defaults": 3, - "ends": 1, - "backref": 1, - "boffset": 1, - "prepare": 1, - "reference": 2, - ".subst": 1, - ".backref": 1, - "silently": 1, - "zco": 1, - "": 1, - "s/": 6, - "b*": 7, - "/Xy/g": 6, - "print": 8, - "aa": 9, - "et": 4, - "direct": 3, - "take": 1, - "default": 6, - "setup": 3, - "trap": 10, - "source": 3, - "location": 5, - "argument": 1, - "@ref": 2, - "E": 12, - "COMPILE": 2, - "has": 6, - "meaning": 1, - "zs": 2, - "re": 2, - "raise": 3, - "XC": 1, - "specific": 3, - "U16384": 1, - "U16385": 1, - "U16386": 1, - "U16387": 1, - "U16388": 2, - "U16389": 1, - "U16390": 1, - "U16391": 1, - "U16392": 2, - "U16393": 1, - "NOTES": 1, - "U16401": 2, - "raised": 2, - "i.e.": 3, - "NOMATCH": 2, - "ever": 1, - "uncommon": 1, - "situation": 1, - "too": 1, - "small": 1, - "considering": 1, - "controlled": 1, - "U16402": 1, - "U16403": 1, - "U16404": 1, - "U16405": 1, - "U16406": 1, - "U16407": 1, - "U16408": 1, - "U16409": 1, - "U16410": 1, - "U16411": 1, - "U16412": 1, - "U16414": 1, - "U16415": 1, - "U16416": 1, - "U16417": 1, - "U16418": 1, - "U16419": 1, - "U16420": 1, - "U16421": 1, - "U16423": 1, - "U16424": 1, - "U16425": 1, - "U16426": 1, - "U16427": 1, - "Examples": 4, - "pcre.m": 1, - "parameters": 1, - "pcreexamples": 32, - "shining": 1, - "Test": 1, - "Simple": 2, - "zwr": 17, - "Match": 4, - "grouped": 2, - "Just": 1, - "Change": 2, - "word": 3, - "Escape": 1, - "sequence": 1, - "More": 1, - "Low": 1, - "api": 1, - "Setup": 1, - "myexception2": 2, - "st_": 1, - "zl_": 2, - "Compile": 2, - ".options": 1, - "Run": 1, - ".offset": 1, - "used.": 2, - "always": 1, - "strings": 1, - "submitted": 1, - "exact": 1, - "usable": 1, - "integers": 1, - "way": 1, - "i*2": 3, - "what": 2, - "while": 3, - "/": 2, - "/mg": 2, - "aaa": 1, - "nbb": 1, - ".*": 1, - "discover": 1, - "stackusage": 3, - "Locale": 5, - "Support": 1, - "Polish": 1, - "I18N": 2, - "PCRE.": 1, - "Polish.": 1, - "second": 1, - "letter": 1, - "": 1, - "which": 4, - "ISO8859": 1, - "//en.wikipedia.org/wiki/Polish_code_pages": 1, - "complete": 1, - "listing": 1, - "CHAR": 1, - "different": 3, - "character": 2, - "modes": 1, - "In": 1, - "probably": 1, - "expected": 1, - "working": 1, - "single": 2, - "ISO": 3, - "chars.": 1, - "Use": 1, - "zch": 7, - "prepared": 1, - "GTM": 8, - "BADCHAR": 1, - "errors.": 1, - "Also": 1, - "others": 1, - "might": 1, - "expected.": 1, - "POSIX": 1, - "localization": 1, - "nolocale": 2, - "zchset": 2, - "isolocale": 2, - "utflocale": 2, - "LC_CTYPE": 1, - "Set": 2, - "obtain": 2, - "results.": 1, - "envlocale": 2, - "ztrnlnm": 2, - "Notes": 1, - "Enabling": 1, - "native": 1, - "requires": 1, - "libicu": 2, - "gtm_chset": 1, - "gtm_icu_version": 1, - "recompiled": 1, - "object": 4, - "files": 4, - "Instructions": 1, - "Install": 1, - "libicu48": 2, - "apt": 1, - "get": 2, - "install": 1, - "append": 1, - "chown": 1, - "gtm": 1, - "/opt/gtm": 1, - "Startup": 1, - "errors": 6, - "INVOBJ": 1, - "Cannot": 1, - "ZLINK": 1, - "due": 1, - "unexpected": 1, - "Object": 1, - "compiled": 1, - "CHSET": 1, - "written": 3, - "startup": 1, - "correct": 1, - "above.": 1, - "Limits": 1, - "built": 1, - "recursion.": 1, - "Those": 1, - "prevent": 1, - "engine": 1, - "very": 2, - "long": 2, - "runs": 2, - "especially": 1, - "there": 2, - "would": 1, - "paths": 2, - "tree": 1, - "checked.": 1, - "Functions": 1, - "using": 4, - "itself": 1, - "allows": 1, - "MATCH_LIMIT": 1, - "MATCH_LIMIT_RECURSION": 1, - "arguments": 1, - "library": 1, - "compilation": 2, - "Example": 1, - "longrun": 3, - "Equal": 1, - "corrected": 1, - "shortrun": 2, - "Enforced": 1, - "enforcedlimit": 2, - "Exception": 2, - "Handling": 1, - "Error": 1, - "conditions": 1, - "handled": 1, - "zc": 1, - "codes": 1, - "labels": 1, - "file.": 1, - "When": 2, - "neither": 1, - "nor": 1, - "within": 1, - "mechanism.": 1, - "depending": 1, - "caller": 1, - "exception.": 1, - "lead": 1, - "writing": 4, - "prompt": 1, - "terminating": 1, - "image.": 1, - "define": 2, - "handlers.": 1, - "Handler": 1, - "No": 17, - "nohandler": 4, - "Pattern": 1, - "failed": 1, - "unmatched": 1, - "parentheses": 1, - "<-->": 1, - "HERE": 1, - "RTSLOC": 2, - "At": 2, - "SETECODE": 1, - "Non": 1, - "assigned": 1, - "ECODE": 1, - "32": 1, - "GT": 1, - "image": 1, - "terminated": 1, - "myexception1": 3, - "zt=": 1, - "mytrap1": 2, - "zg": 2, - "mytrap3": 1, - "DETAILS": 1, - "executed": 1, - "frame": 1, - "called.": 1, - "deeper": 1, - "frames": 1, - "already": 1, - "dropped": 1, - "local": 1, - "available": 1, - "context.": 1, - "Thats": 1, - "why": 1, - "doesn": 1, - "unless": 1, - "cleared.": 1, - "Always": 1, - "done.": 2, - "Execute": 1, - "p5global": 1, - "p5replace": 1, - "p5lf": 1, - "p5nl": 1, - "newline": 1, - "utf8support": 1, - "myexception3": 1, - "contrasting": 1, - "postconditionals": 1, - "IF": 9, - "commands": 1, - "post1": 1, - "postconditional": 3, - "purposely": 4, - "TEST": 16, - "false": 5, - "post2": 1, - "special": 2, - "after": 2, - "post": 1, - "condition": 1, - "PRCAAPR": 1, - "WASH": 1, - "ISC@ALTOONA": 1, - "PA/RGY": 1, - "PATIENT": 5, - "ACCOUNT": 1, - "PROFILE": 1, - "CONT": 1, - "/9/94": 1, - "AM": 1, - "V": 2, - "Accounts": 1, - "Receivable": 1, - "**198": 1, - "**": 2, - "Mar": 1, - "Per": 1, - "VHA": 1, - "Directive": 1, - "modified.": 1, - "EN": 2, - "PRCATY": 2, - "NEW": 3, - "DIC": 6, - "X": 18, - "Y": 26, - "DEBT": 10, - "PRCADB": 5, - "DA": 4, - "PRCA": 14, - "COUNT": 2, - "OUT": 2, - "SEL": 1, - "BILL": 11, - "BAT": 8, - "TRAN": 5, - "DR": 4, - "DXS": 1, - "DTOUT": 2, - "DIROUT": 1, - "DIRUT": 1, - "DUOUT": 1, - "ASK": 3, - "DPTNOFZY": 2, - "DPTNOFZK": 2, - "K": 5, - "DTIME": 1, - "UPPER": 1, - "VALM1": 1, - "RCD": 1, - "DISV": 2, - "DUZ": 3, - "NAM": 1, - "RCFN01": 1, - "COMP": 2, - "EN1": 1, - "PRCAATR": 1, - "Y_": 3, - "PRCADB_": 1, - "HDR": 1, - "PRCAAPR1": 3, - "HDR2": 1, - "DIS": 1, - "STAT1": 2, - "_PRCATY_": 1, - "COMP1": 2, - "RCY": 5, - "]": 14, - "COMP2": 2, - "_STAT_": 1, - "_STAT": 1, - "payments": 1, - "_TRAN": 1, - "Keith": 1, - "Lynch": 1, - "p#f": 1, - "PXAI": 1, - "ISL/JVS": 1, - "ISA/KWP": 1, - "ESW": 1, - "PCE": 2, - "DRIVING": 1, - "RTN": 1, - "/20/03": 1, - "am": 1, - "CARE": 1, - "ENCOUNTER": 2, - "**15": 1, - "Aug": 1, - "DATA2PCE": 1, - "PXADATA": 7, - "PXAPKG": 9, - "PXASOURC": 10, - "PXAVISIT": 8, - "PXAUSER": 6, - "PXANOT": 3, - "ERRRET": 2, - "PXAPREDT": 2, - "PXAPROB": 15, - "PXACCNT": 2, - "add/edit/delete": 1, - "PCE.": 1, - "required": 4, - "pointer": 4, - "visit": 3, - "related.": 1, - "then": 2, - "nodes": 1, - "needed": 1, - "lookup/create": 1, - "visit.": 1, - "adding": 1, - "data.": 1, - "displayed": 1, - "screen": 1, - "debugging": 1, - "initial": 1, - "code.": 1, - "passed": 4, - "reference.": 2, - "present": 1, - "PXKERROR": 2, - "caller.": 1, - "want": 1, - "edit": 1, - "Primary": 3, - "Provider": 1, - "moment": 1, - "editing": 2, - "being": 1, - "dangerous": 1, - "dotted": 1, - "name.": 1, - "warnings": 1, - "occur": 1, - "They": 1, - "form": 1, - "general": 1, - "description": 1, - "problem.": 1, - "ERROR1": 1, - "GENERAL": 2, - "ERRORS": 4, - "SUBSCRIPT": 5, - "PASSED": 4, - "IN": 4, - "FIELD": 2, - "FROM": 5, - "WARNING2": 1, - "WARNINGS": 2, - "WARNING3": 1, - "SERVICE": 1, - "CONNECTION": 1, - "REASON": 9, - "ERROR4": 1, - "PROBLEM": 1, - "LIST": 1, - "Returns": 2, - "PFSS": 2, - "Account": 2, - "Reference": 2, - "known.": 1, - "Returned": 1, - "located": 1, - "Order": 1, - "#100": 1, - "process": 3, - "processed": 1, - "could": 1, - "incorrectly": 1, - "VARIABLES": 1, - "NOVSIT": 1, - "PXAK": 20, - "DFN": 1, - "PXAERRF": 3, - "PXADEC": 1, - "PXELAP": 1, - "PXASUB": 2, - "VALQUIET": 2, - "PRIMFND": 7, - "PXAERROR": 1, - "PXAERR": 7, - "PRVDR": 1, - "needs": 1, - "look": 1, - "up": 1, - "passed.": 1, - "@PXADATA@": 8, - "SOR": 1, - "SOURCE": 2, - "PKG2IEN": 1, - "VSIT": 1, - "PXAPIUTL": 2, - "TMPSOURC": 1, - "SAVES": 1, - "CREATES": 1, - "VST": 2, - "VISIT": 3, - "KILL": 1, - "VPTR": 1, - "PXAIVSTV": 1, - "ERR": 2, - "PXAIVST": 1, - "PRV": 1, - "PROVIDER": 1, - "AUPNVSIT": 1, - ".I": 4, - "..S": 7, - "status": 2, - "Secondary": 2, - ".S": 6, - "..I": 2, - "PXADI": 4, - "NODE": 5, - "SCREEN": 2, - "VA": 1, - "EXTERNAL": 2, - "INTERNAL": 2, - "ARRAY": 2, - "PXAICPTV": 1, - "SEND": 1, - "W": 4, - "BLD": 2, - "DIALOG": 4, - ".PXAERR": 3, - "MSG": 2, - "GLOBAL": 1, - "NA": 1, - "PROVDRST": 1, - "Check": 1, - "provider": 1, - "PRVIEN": 14, - "DETS": 7, - "DIQ": 3, - "PRI": 3, - "PRVPRIM": 2, - "AUPNVPRV": 2, - "U": 14, - ".04": 1, - "DIQ1": 1, - "POVPRM": 1, - "POVARR": 1, - "STOP": 1, - "LPXAK": 4, - "ORDX": 14, - "NDX": 7, - "ORDXP": 3, - "DX": 2, - "ICD9": 2, - "AUPNVPOV": 2, - "@POVARR@": 6, - "force": 1, - "originally": 1, - "primary": 1, - "diagnosis": 1, - "flag": 1, - ".F": 2, - "..E": 1, - "...S": 5, - "decode": 1, - "val": 5, - "Decoded": 1, - "Encoded": 1, - "decoded": 3, - "decoded_": 1, - "safechar": 3, - "zchar": 1, - "encoded_c": 1, - "encoded_": 2, - "FUNC": 1, - "DH": 1, - "zascii": 1, - "WVBRNOT": 1, - "HCIOFO/FT": 1, - "JR": 1, - "IHS/ANMC/MWR": 1, - "BROWSE": 1, - "NOTIFICATIONS": 1, - "/30/98": 1, - "WOMEN": 1, - "WVDATE": 8, - "WVENDDT1": 2, - "WVIEN": 13, - "..F": 2, - "WV": 8, - "WVXREF": 1, - "WVDFN": 6, - "SELECTING": 1, - "ONE": 2, - "CASE": 1, - "MANAGER": 1, - "AND": 3, - "THIS": 3, - "DOESN": 1, - "WVE": 2, - "": 2, - "STORE": 3, - "WVA": 2, - "WVBEGDT1": 1, - "NOTIFICATION": 1, - "IS": 3, - "NOT": 1, - "QUEUED.": 1, - "WVB": 4, - "OR": 2, - "OPEN": 1, - "ONLY": 1, - "CLOSED.": 1, - ".Q": 1, - "EP": 4, - "ALREADY": 1, - "LL": 1, - "SORT": 3, - "ABOVE.": 1, - "DATE": 1, - "WVCHRT": 1, - "SSN": 1, - "WVUTL1": 2, - "SSN#": 1, - "WVNAME": 4, - "WVACC": 4, - "ACCESSION#": 1, - "WVSTAT": 1, - "STATUS": 2, - "WVUTL4": 1, - "WVPRIO": 5, - "PRIORITY": 1, - "WVCHRT_U_WVNAME_U_WVDATE_U_WVACC_U_WVSTAT_U_WVPRIO_U_WVIEN": 1, - "WVC": 4, - "COPYGBL": 3, - "COPY": 1, - "MAKE": 1, - "IT": 1, - "FLAT.": 1, - "...F": 1, - "....S": 1, - "DEQUEUE": 1, - "TASKMAN": 1, - "QUEUE": 1, - "OF": 2, - "PRINTOUT.": 1, - "SETVARS": 2, - "WVUTL5": 2, - "WVBRNOT1": 2, - "EXIT": 1, - "FOLLOW": 1, - "CALLED": 1, - "PROCEDURE": 1, - "FOLLOWUP": 1, - "MENU.": 1, - "WVBEGDT": 1, - "DT": 2, - "WVENDDT": 1, - "DEVICE": 1, - "WVBRNOT2": 1, - "WVPOP": 1, - "WVLOOP": 1, - "ZDIOUT1": 1, - "Experimental": 1, - "FileMan": 1, - "host": 2, - "Open": 1, - "Source": 1, - "Electronic": 1, - "Health": 1, - "Record": 1, - "Agent": 1, - "Licensed": 1, - "Apache": 1, - "Version": 1, - "may": 3, - "except": 1, - "compliance": 1, - "License.": 2, - "//www.apache.org/licenses/LICENSE": 1, - "Unless": 1, - "applicable": 1, - "law": 1, - "agreed": 1, - "BASIS": 1, - "WARRANTIES": 1, - "CONDITIONS": 1, - "KIND": 1, - "express": 1, - "implied.": 1, - "governing": 1, - "permissions": 2, - "limitations": 1, - "ASKFILE": 1, - "FILE": 5, - "ASKDIR": 1, - "DIR": 3, - "SAVEFILE": 2, - "Save": 1, - "given": 1, - "directory": 1, - "CHECK": 1, - "FGR": 4, - "_FILE": 1, - "IO": 4, - "DIR_": 1, - "L": 1, - "FILENAME": 1, - "_IO_": 1, - "_P_": 1, - "NM": 1, - "non": 1, - "printing": 1, - "escaped": 1, - "evaluation": 1, - "RHS": 1, - "SET.": 1, - "TODO": 1, - "Caller": 1, - "indentation": 1, - "comment": 1, - "tab": 1, - "space.": 1, - "M/Wire": 4, - "Protocol": 2, - "Systems": 1, - "By": 1, - "server": 1, - "port": 4, - "systems": 3, - "invoked": 2, - "via": 2, - "xinetd": 2, - "Edit": 1, - "/etc/services": 1, - "mwire": 2, - "/tcp": 1, - "#": 1, - "Service": 1, - "Copy": 2, - "/etc/xinetd.d/mwire": 1, - "/usr/local/gtm/zmwire": 1, - "its": 1, - "executable": 1, - "edited": 1, - "Restart": 1, - "sudo": 1, - "/etc/init.d/xinetd": 1, - "On": 1, - "installed": 1, - "MGWSI": 1, - "provide": 1, - "hashing": 1, - "passwords": 1, - "Alternatively": 1, - "substitute": 1, - "callout": 1, - "choice": 1, - "Daemon": 2, - "running": 1, - "jobbed": 1, - "job": 1, - "zmwireDaemon": 2, - "simply": 1, - "Stop": 1, - "RESJOB": 1, - "it.": 1, - "mwireVersion": 4, - "mwireDate": 2, - "July": 1, - "_crlf": 22, - "_response_": 4, - "_crlf_response_crlf": 4, - "authNeeded": 6, - "input": 41, - "cleardown": 2, - "zint": 1, - "role": 3, - "loop": 7, - "log": 1, - "halt": 3, - "auth": 2, - "ignore": 12, - "pid": 36, - "monitor": 1, - "input_crlf": 1, - "zsy": 2, - "_pid_": 1, - "_pid": 1, - "monitoroutput": 1, - "logger": 17, - "tot": 2, - "mwireLogger": 3, - "info": 1, - "response_": 1, - "_count": 1, - "setpassword": 1, - "SETPASSWORD": 2, - "secret": 2, - "": 1, - "role=": 1, - "admin": 1, - "newrole": 4, - "getGloRef": 3, - "gloName": 1, - "gloRef": 15, - "nb": 2, - "subs": 8, - "nsp": 1, - "subs_": 2, - "_data_": 3, - "subscripts": 8, - "_value_": 1, - "_error_": 1, - "kill": 3, - "xx": 16, - "method": 2, - "Missing": 5, - "JSON": 7, - "transaction": 6, - "document": 6, - "setJSON": 4, - "GlobalName": 3, - "setGlobal": 1, - "zmwire_null_value": 1, - "Invalid": 1, - "props": 1, - "arr": 2, - "getJSON": 2, - "incr": 1, - "incrbr": 1, - "class": 1, - "##": 2, - "decr": 1, - "decrby": 1, - "direction": 1, - "subscriptValue": 1, - "dataStatus": 1, - "dataValue": 1, - "nextsubscript": 2, - "reverseorder": 1, - "*2": 1, - "queryget": 1, - "xxyy": 2, - "zz": 2, - "getallsubscripts": 1, - "orderall": 1, - "": 3, - "note": 2, - "escaping": 1, - "foo": 2, - "_gloRef": 1, - "@x": 4, - "_crlf_": 1, - "j_": 1, - "params": 10, - "_crlf_resp_crlf": 2, - "_crlf_data_crlf": 2, - "mergeto": 1, - "dataLength": 4, - "keyLength": 6, - "noOfRecs": 6, - "MERGETO": 1, - "myglobal": 1, - "*6": 1, - "hello": 1, - "": 2, - "put": 1, - "top": 1, - "noOfRecs#2": 1, - "noOfRecs/2": 1, - "gloRef1": 2, - "gloRef1_": 2, - "_gloRef1_key_": 1, - "sub": 2, - "literal": 2, - "valquot_value_valquot": 1, - "json_value_": 1, - "subscripts1": 2, - "subx": 3, - "subNo": 1, - "numsub": 1, - "json_": 2, - "removeControlChars": 2, - "zobj1": 1, - "buff": 10, - "parseJSONObject": 2, - ".buff": 2, - "subs2": 6, - "_name_": 1, - "subs2_": 2, - "value_c": 1, - "newString": 4, - "newString_c": 1, - "utfConvert": 1, - "Unescape": 1, - "buf": 4, - "c1": 4, - "buf_c1_": 1 - }, "Makefile": { "all": 1, "hello": 4, @@ -29741,30 +28273,95 @@ "Matlab": { "function": 34, "[": 311, + "x_T": 25, + "y_T": 17, + "vx_T": 22, + "e_T": 7, + "filter": 14, + "delta_e": 3, + "]": 311, + "Integrate_FTLE_Gawlick_ell": 1, + "(": 1379, + "x_0": 45, + "y_0": 29, + "vx_0": 37, + "e_0": 7, + "T": 22, + "mu": 73, + "ecc": 2, + "nu": 2, + "options": 14, + ")": 1380, + "%": 554, + "Integrate": 6, + "nx": 32, + "length": 49, + ";": 909, + "ny": 29, + "nvx": 32, + "ne": 29, + "vy_0": 22, + "zeros": 61, + "vy_T": 12, + "Look": 2, + "for": 78, + "phisically": 2, + "meaningful": 6, + "points": 11, + "meaningless": 2, + "point": 14, + "useful": 9, + "ones": 6, + "only": 7, + "h": 19, + "waitbar": 6, + "i": 338, + "i/nx": 2, + "sprintf": 11, + "j": 242, + "parfor": 5, + "k": 75, + "l": 64, + "if": 52, + "-": 673, + "sqrt": 14, + "*": 46, + "Omega": 7, + "/": 59, + "+": 169, + "ecc*cos": 1, + "*e_0": 3, + "isreal": 8, + "ci": 9, + "t": 32, + "Y": 19, + "ode45": 6, + "@f_ell": 1, + "abs": 12, + "end": 150, + "<": 9, + "Consider": 1, + "also": 1, + "negative": 1, + "time": 21, + "Compute": 3, + "the": 14, + "goodness": 1, + "of": 35, + "integration": 9, + "close": 4, "dx": 6, "y": 25, - "]": 311, "adapting_structural_model": 2, - "(": 1379, - "t": 32, "x": 46, "u": 3, "varargin": 25, - ")": 1380, - "%": 554, "size": 11, "aux": 3, "{": 157, - "end": 150, "}": 157, - ";": 909, "m": 44, - "zeros": 61, "b": 12, - "for": 78, - "i": 338, - "if": 52, - "+": 169, "elseif": 14, "else": 23, "display": 10, @@ -29775,10 +28372,8 @@ "aux.timeDelay": 2, "c1": 5, "aux.m": 3, - "*": 46, "aux.b": 3, "e": 14, - "-": 673, "c2": 5, "Yc": 5, "parallel": 2, @@ -29829,15 +28424,12 @@ "minStates": 2, "ismember": 15, "settings.states": 3, - "<": 9, "keepStates": 2, "find": 24, "removeStates": 1, "row": 6, - "abs": 12, "col": 5, "s": 13, - "sprintf": 11, "removeInputs": 2, "settings.inputs": 1, "keepOutputs": 2, @@ -29857,11 +28449,8 @@ "StateName": 1, "OutputName": 1, "InputName": 1, - "x_0": 45, "linspace": 14, - "vx_0": 37, "z": 3, - "j": 242, "*vx_0": 1, "figure": 17, "pcolor": 2, @@ -29880,8 +28469,6 @@ "rollData": 8, "global": 6, "goldenRatio": 12, - "sqrt": 14, - "/": 59, "exist": 1, "mkdir": 1, "linestyles": 15, @@ -29895,7 +28482,6 @@ "var": 3, "io": 7, "typ": 3, - "length": 49, "plot_io": 1, "phase_portraits": 2, "eigenvalues": 2, @@ -29982,7 +28568,6 @@ "bode": 5, "metricLine": 1, "plot": 26, - "k": 75, "Linewidth": 7, "Color": 13, "Linestyle": 6, @@ -30073,7 +28658,6 @@ "pad": 10, "yShift": 16, "xShift": 3, - "time": 21, "oneSpeed.time": 2, "oneSpeed.speed": 2, "distance": 6, @@ -30146,7 +28730,6 @@ "eig": 6, "real": 3, "zeroIndices": 3, - "ones": 6, "maxEvals": 4, "maxLine": 7, "minLine": 4, @@ -30172,22 +28755,18 @@ "value": 2, "isterminal": 2, "direction": 2, - "mu": 73, "FIXME": 1, "from": 2, - "the": 14, "largest": 1, "primary": 1, "clear": 13, "tic": 7, - "T": 22, "x_min": 3, "x_max": 3, "y_min": 3, "y_max": 3, "how": 1, "many": 1, - "points": 11, "per": 5, "one": 3, "measure": 1, @@ -30203,9 +28782,7 @@ "grid_y": 3, "advected_x": 12, "advected_y": 12, - "parfor": 5, "X": 6, - "ode45": 6, "@dg": 1, "store": 4, "advected": 2, @@ -30215,14 +28792,12 @@ "would": 2, "appear": 2, "coords": 2, - "Compute": 3, "FTLE": 14, "sigma": 6, "compute": 2, "Jacobian": 3, "*ds": 4, "eigenvalue": 2, - "of": 35, "*phi": 2, "log": 2, "lambda_max": 2, @@ -30269,7 +28844,6 @@ "gainSlopeOffset": 6, "eye": 9, "this": 2, - "only": 7, "uses": 1, "tau": 1, "through": 1, @@ -30319,11 +28893,6 @@ "identified": 1, "gains": 12, ".vaf": 1, - "Elements": 1, - "grid": 1, - "definition": 2, - "Dimensionless": 1, - "integrating": 1, "Choice": 2, "mass": 2, "parameter": 2, @@ -30345,10 +28914,6 @@ "total": 6, "energy": 8, "E_L1": 4, - "Omega": 7, - "C_L1": 3, - "*E_L1": 1, - "Szebehely": 1, "E": 8, "Offset": 2, "Initial": 3, @@ -30358,24 +28923,24 @@ "x_0_max": 8, "vx_0_min": 8, "vx_0_max": 8, - "y_0": 29, "ndgrid": 2, - "vy_0": 22, "*E": 2, "*Omega": 5, "vx_0.": 2, "E_cin": 4, - "x_T": 25, - "y_T": 17, - "vx_T": 22, - "vy_T": 12, + "Transforming": 1, + "into": 1, + "Hamiltonian": 1, + "variables": 2, + "px_0": 2, + "py_0": 2, + "px_T": 4, + "py_T": 4, "filtro": 15, "E_T": 11, - "delta_E": 7, "a": 17, "matrix": 3, "numbers": 2, - "integration": 9, "steps": 2, "each": 2, "np": 8, @@ -30386,19 +28951,66 @@ "tolerance": 2, "setting": 4, "energy_tol": 6, + "inf": 1, + "odeset": 4, + "@cr3bp_jac": 1, + "Parallel": 2, + "equations": 2, + "motion": 2, + "Check": 6, + "velocity": 2, + "positive": 2, + "Kinetic": 2, + "@fH": 1, + "Saving": 4, + "solutions": 2, + "final": 2, + "difference": 2, + "with": 2, + "EnergyH": 1, + "delta_E": 7, + "conservation": 2, + "position": 2, + "interesting": 4, + "non": 2, + "sense": 2, + "bad": 4, + "t_integrazione": 3, + "t_integr": 1, + "Back": 1, + "dphi": 12, + "ftle": 10, + "Manual": 2, + "visualize": 2, + "Inf": 1, + "*log": 2, + "tempo": 4, + "integrare": 2, + ".2f": 5, + "calcolare": 2, + "var_": 2, + "_": 2, + "var_xvx_": 2, + "ode00": 2, + "_n": 2, + "_e": 1, + "_H": 1, + "save": 2, + "nome": 2, + "Elements": 1, + "grid": 1, + "definition": 2, + "Dimensionless": 1, + "integrating": 1, + "C_L1": 3, + "*E_L1": 1, + "Szebehely": 1, "Setting": 1, - "options": 14, "integrator": 2, "RelTol": 2, "AbsTol": 2, "From": 1, "Short": 1, - "odeset": 4, - "Parallel": 2, - "equations": 2, - "motion": 2, - "h": 19, - "waitbar": 6, "r1": 3, "r2": 3, "g": 5, @@ -30406,30 +29018,8 @@ "y_0.": 2, "./": 1, "mu./": 1, - "isreal": 8, - "Check": 6, - "velocity": 2, - "positive": 2, - "Kinetic": 2, - "Y": 19, "@f_reg": 1, - "Saving": 4, - "solutions": 2, - "final": 2, - "difference": 2, - "with": 2, - "conservation": 2, - "position": 2, - "point": 14, - "interesting": 4, - "non": 2, - "sense": 2, - "bad": 4, - "close": 4, - "t_integrazione": 3, "filtro_1": 12, - "dphi": 12, - "ftle": 10, "ftle_norm": 1, "ds_x": 1, "ds_vx": 1, @@ -30453,63 +29043,23 @@ "x2": 1, "*ds_x": 2, "*ds_vx": 2, - "Manual": 2, - "visualize": 2, - "*log": 2, "dphi*dphi": 1, - "tempo": 4, - "integrare": 2, - ".2f": 5, - "calcolare": 2, - "var_": 2, - "_": 2, - "var_xvx_": 2, - "ode00": 2, - "_n": 2, - "save": 2, - "nome": 2, - "Transforming": 1, - "into": 1, - "Hamiltonian": 1, - "variables": 2, - "px_0": 2, - "py_0": 2, - "px_T": 4, - "py_T": 4, - "inf": 1, - "@cr3bp_jac": 1, - "@fH": 1, - "EnergyH": 1, - "t_integr": 1, - "Back": 1, - "Inf": 1, - "_e": 1, - "_H": 1, "Range": 1, "E_0": 4, "C_L1/2": 1, "Y_0": 4, - "nx": 32, - "nvx": 32, "dvx": 3, - "ny": 29, "dy": 5, "/2": 3, - "ne": 29, "de": 4, - "e_0": 7, "Definition": 1, "arrays": 1, "In": 1, "approach": 1, - "useful": 9, "pints": 1, "are": 1, "stored": 1, - "filter": 14, - "l": 64, "v_y": 3, - "*e_0": 3, "vx": 2, "vy": 2, "Selection": 1, @@ -30547,31 +29097,13 @@ "squeeze": 1, "clc": 1, "load_bikes": 2, - "e_T": 7, "Integrate_FILE": 1, - "Integrate": 6, - "Look": 2, - "phisically": 2, - "meaningful": 6, - "meaningless": 2, - "i/nx": 2, "*Potential": 5, - "ci": 9, "te": 2, "ye": 9, "ie": 2, "@f": 6, "Potential": 1, - "delta_e": 3, - "Integrate_FTLE_Gawlick_ell": 1, - "ecc": 2, - "nu": 2, - "ecc*cos": 1, - "@f_ell": 1, - "Consider": 1, - "also": 1, - "negative": 1, - "goodness": 1, "roots": 3, "*mu": 6, "c3": 3, @@ -35433,98 +33965,6 @@ "there": 1, "it": 1 }, - "Oxygene": { - "": 1, - "DefaultTargets=": 1, - "xmlns=": 1, - "": 3, - "": 1, - "Loops": 2, - "": 1, - "": 1, - "exe": 1, - "": 1, - "": 1, - "": 1, - "": 1, - "False": 4, - "": 1, - "": 1, - "": 1, - "": 1, - "": 1, - "": 1, - "Properties": 1, - "App.ico": 1, - "": 1, - "": 1, - "Condition=": 3, - "Release": 2, - "": 1, - "": 1, - "{": 1, - "BD89C": 1, - "-": 4, - "B610": 1, - "CEE": 1, - "CAF": 1, - "C515D88E2C94": 1, - "}": 1, - "": 1, - "": 3, - "": 1, - "DEBUG": 1, - ";": 2, - "TRACE": 1, - "": 1, - "": 2, - ".": 2, - "bin": 2, - "Debug": 1, - "": 2, - "": 1, - "True": 3, - "": 1, - "": 1, - "": 1, - "": 1, - "": 1, - "": 1, - "Project=": 1, - "": 2, - "": 5, - "Include=": 12, - "": 5, - "(": 5, - "Framework": 5, - ")": 5, - "mscorlib.dll": 1, - "": 5, - "": 5, - "System.dll": 1, - "ProgramFiles": 1, - "Reference": 1, - "Assemblies": 1, - "Microsoft": 1, - "v3.5": 1, - "System.Core.dll": 1, - "": 1, - "": 1, - "System.Data.dll": 1, - "System.Xml.dll": 1, - "": 2, - "": 4, - "": 1, - "": 1, - "": 2, - "ResXFileCodeGenerator": 1, - "": 2, - "": 1, - "": 1, - "SettingsSingleFileGenerator": 1, - "": 1, - "": 1 - }, "Parrot Assembly": { "SHEBANG#!parrot": 1, ".pcc_sub": 1, @@ -40544,23 +38984,6 @@ "func": 1, "print": 1 }, - "RMarkdown": { - "Some": 1, - "text.": 1, - "##": 1, - "A": 1, - "graphic": 1, - "in": 1, - "R": 1, - "{": 1, - "r": 1, - "}": 1, - "plot": 1, - "(": 3, - ")": 3, - "hist": 1, - "rnorm": 1 - }, "RobotFramework": { "***": 16, "Settings": 3, @@ -42672,48 +41095,14 @@ "esac": 7, "done": 8, "exit": 10, - "/usr/bin/clear": 2, "##": 28, - "if": 39, - "z": 12, - "then": 41, - "export": 25, - "SCREENDIR": 2, - "fi": 34, - "PATH": 14, - "/usr/local/bin": 6, - "/usr/local/sbin": 6, - "/usr/xpg4/bin": 4, - "/usr/sbin": 6, - "/usr/bin": 8, - "/usr/sfw/bin": 4, - "/usr/ccs/bin": 4, - "/usr/openwin/bin": 4, - "/opt/mysql/current/bin": 4, - "MANPATH": 2, - "/usr/local/man": 2, - "/usr/share/man": 2, - "Random": 2, - "ENV...": 2, - "TERM": 4, - "COLORTERM": 2, - "CLICOLOR": 2, - "#": 53, - "can": 3, - "be": 3, - "set": 21, - "to": 33, - "anything": 2, - "actually": 2, - "DISPLAY": 2, - "r": 17, - "&&": 65, - ".": 5, "function": 6, "ls": 6, "command": 5, "Fh": 2, "l": 8, + "#": 53, + "to": 33, "list": 3, "long": 2, "format...": 2, @@ -42836,10 +41225,12 @@ "v": 11, "readonly": 4, "unset": 10, + "export": 25, "and": 5, "shell": 4, "variables": 2, "setopt": 8, + "set": 21, "options": 8, "helptopic": 2, "help": 5, @@ -42906,6 +41297,38 @@ "ping": 2, "histappend": 2, "PROMPT_COMMAND": 2, + "PATH": 14, + "/usr/local/bin": 6, + "/usr/local/sbin": 6, + "/usr/xpg4/bin": 4, + "/usr/sbin": 6, + "/usr/bin": 8, + "/usr/sfw/bin": 4, + "/usr/ccs/bin": 4, + "/usr/openwin/bin": 4, + "/opt/mysql/current/bin": 4, + "/usr/bin/clear": 2, + "if": 39, + "z": 12, + "then": 41, + "SCREENDIR": 2, + "fi": 34, + "MANPATH": 2, + "/usr/local/man": 2, + "/usr/share/man": 2, + "Random": 2, + "ENV...": 2, + "TERM": 4, + "COLORTERM": 2, + "CLICOLOR": 2, + "can": 3, + "be": 3, + "anything": 2, + "actually": 2, + "DISPLAY": 2, + "r": 17, + "&&": 65, + ".": 5, "umask": 2, "path": 13, "/opt/local/bin": 2, @@ -47780,6 +46203,2616 @@ "gempath": 1, "/usr/local/rubygems": 1, "/home/gavin/.rubygems": 1 + }, + "Common Lisp": { + ";": 10, + "-": 10, + "*": 2, + "lisp": 1, + "(": 14, + "in": 1, + "package": 1, + "foo": 2, + ")": 14, + "Header": 1, + "comment.": 4, + "defvar": 1, + "*foo*": 1, + "eval": 1, + "when": 1, + "execute": 1, + "compile": 1, + "toplevel": 2, + "load": 1, + "defun": 1, + "add": 1, + "x": 5, + "&": 3, + "optional": 1, + "y": 2, + "key": 1, + "z": 2, + "declare": 1, + "ignore": 1, + "Inline": 1, + "+": 2, + "or": 1, + "#": 2, + "|": 2, + "Multi": 1, + "line": 2, + "defmacro": 1, + "body": 1, + "b": 1, + "if": 1, + "After": 1 + }, + "IDL": { + ";": 59, + "docformat": 3, + "+": 8, + "Inverse": 1, + "hyperbolic": 2, + "cosine.": 1, + "Uses": 1, + "the": 7, + "formula": 1, + "text": 1, + "{": 3, + "acosh": 1, + "}": 3, + "(": 26, + "z": 9, + ")": 26, + "ln": 1, + "sqrt": 4, + "-": 14, + "Examples": 2, + "The": 1, + "arc": 1, + "sine": 1, + "function": 4, + "looks": 1, + "like": 2, + "IDL": 5, + "x": 8, + "*": 2, + "findgen": 1, + "/": 1, + "plot": 1, + "mg_acosh": 2, + "xstyle": 1, + "This": 1, + "should": 1, + "look": 1, + "..": 1, + "image": 1, + "acosh.png": 1, + "Returns": 3, + "float": 1, + "double": 2, + "complex": 2, + "or": 1, + "depending": 1, + "on": 1, + "input": 2, + "Params": 3, + "in": 4, + "required": 4, + "type": 5, + "numeric": 1, + "compile_opt": 3, + "strictarr": 3, + "return": 5, + "alog": 1, + "end": 5, + "MODULE": 1, + "mg_analysis": 1, + "DESCRIPTION": 1, + "Tools": 1, + "for": 2, + "analysis": 1, + "VERSION": 1, + "SOURCE": 1, + "mgalloy": 1, + "BUILD_DATE": 1, + "January": 1, + "FUNCTION": 2, + "MG_ARRAY_EQUAL": 1, + "KEYWORDS": 1, + "MG_TOTAL": 1, + "Find": 1, + "greatest": 1, + "common": 1, + "denominator": 1, + "GCD": 1, + "two": 1, + "positive": 2, + "integers.": 1, + "integer": 5, + "a": 4, + "first": 1, + "b": 4, + "second": 1, + "mg_gcd": 2, + "on_error": 1, + "if": 5, + "n_params": 1, + "ne": 1, + "then": 5, + "message": 2, + "mg_isinteger": 2, + "||": 1, + "begin": 2, + "endif": 2, + "_a": 3, + "abs": 2, + "_b": 3, + "minArg": 5, + "<": 1, + "maxArg": 3, + "eq": 2, + "remainder": 3, + "mod": 1, + "Truncate": 1, + "argument": 2, + "towards": 1, + "i.e.": 1, + "takes": 1, + "FLOOR": 1, + "of": 4, + "values": 2, + "and": 1, + "CEIL": 1, + "negative": 1, + "values.": 1, + "Try": 1, + "main": 2, + "level": 2, + "program": 2, + "at": 1, + "this": 1, + "file.": 1, + "It": 1, + "does": 1, + "print": 4, + "mg_trunc": 3, + "[": 6, + "]": 6, + "floor": 2, + "ceil": 2, + "array": 2, + "same": 1, + "as": 1, + "float/double": 1, + "containing": 1, + "to": 1, + "truncate": 1, + "result": 3, + "posInd": 3, + "where": 1, + "gt": 2, + "nposInd": 2, + "L": 1, + "example": 1 + }, + "M": { + "start": 24, + ";": 1275, + "create": 6, + "student": 14, + "data": 43, + "set": 98, + "(": 2142, + ")": 2150, + "zwrite": 1, + "write": 59, + "order": 11, + "x": 96, + "for": 77, + "do": 15, + "quit": 30, + ".": 814, + "This": 26, + "file": 10, + "is": 81, + "part": 3, + "of": 80, + "DataBallet.": 4, + "Copyright": 12, + "C": 9, + "Laurent": 2, + "Parenteau": 2, + "": 2, + "DataBallet": 4, + "free": 15, + "software": 12, + "you": 16, + "can": 15, + "redistribute": 11, + "it": 44, + "and/or": 11, + "modify": 11, + "under": 14, + "the": 217, + "terms": 11, + "GNU": 33, + "Affero": 33, + "General": 33, + "Public": 33, + "License": 48, + "as": 22, + "published": 11, + "by": 33, + "Free": 11, + "Software": 11, + "Foundation": 11, + "either": 13, + "version": 16, + "or": 46, + "at": 21, + "your": 16, + "option": 12, + "any": 15, + "later": 11, + "version.": 11, + "distributed": 13, + "in": 78, + "hope": 11, + "that": 17, + "will": 23, + "be": 32, + "useful": 11, + "but": 17, + "WITHOUT": 12, + "ANY": 12, + "WARRANTY": 11, + "without": 11, + "even": 11, + "implied": 11, + "warranty": 11, + "MERCHANTABILITY": 11, + "FITNESS": 11, + "FOR": 15, + "A": 12, + "PARTICULAR": 11, + "PURPOSE.": 11, + "See": 15, + "more": 13, + "details.": 12, + "You": 13, + "should": 16, + "have": 17, + "received": 11, + "a": 112, + "copy": 13, + "along": 11, + "with": 43, + "If": 14, + "not": 37, + "see": 25, + "": 11, + "encode": 1, + "message": 8, + "Return": 1, + "base64": 6, + "URL": 2, + "and": 56, + "Filename": 1, + "safe": 3, + "alphabet": 2, + "RFC": 1, + "new": 15, + "todrop": 2, + "i": 465, + "Populate": 1, + "values": 4, + "on": 15, + "first": 10, + "use": 5, + "only.": 1, + "if": 44, + "zextract": 3, + "zlength": 3, + "-": 1604, + "GT.M": 30, + "Digest": 2, + "Extension": 9, + "Piotr": 7, + "Koper": 7, + "": 7, + "program": 19, + "this": 38, + "program.": 9, + "trademark": 2, + "Fidelity": 2, + "Information": 2, + "Services": 2, + "Inc.": 2, + "http": 13, + "//sourceforge.net/projects/fis": 2, + "gtm/": 2, + "simple": 2, + "OpenSSL": 3, + "based": 1, + "digest": 19, + "extension": 3, + "rewrite": 1, + "EVP_DigestInit": 1, + "usage": 3, + "example": 5, + "additional": 5, + "M": 24, + "wrapper.": 1, + "//www.openssl.org/docs/crypto/EVP_DigestInit.html": 1, + "The": 11, + "return": 7, + "value": 72, + "from": 16, + "&": 27, + "digest.init": 3, + "usually": 1, + "when": 11, + "an": 11, + "invalid": 4, + "algorithm": 1, + "was": 5, + "specification.": 1, + "Anyway": 1, + "properly": 1, + "used": 6, + "never": 4, + "fail.": 1, + "Please": 2, + "feel": 2, + "to": 73, + "contact": 2, + "me": 2, + "questions": 2, + "comments": 4, + "m": 37, + "returns": 7, + "ASCII": 1, + "HEX": 1, + "all": 8, + "one": 5, + "n": 197, + "c": 113, + "d": 381, + "s": 775, + "digest.update": 2, + ".c": 2, + ".m": 11, + "digest.final": 2, + ".d": 1, + "q": 244, + "init": 6, + "alg": 3, + "context": 1, + "handler": 9, + "try": 1, + "etc": 1, + "returned": 1, + "error": 62, + "occurs": 1, + "e.g.": 2, + "unknown": 1, + "update": 1, + "ctx": 4, + "msg": 6, + "updates": 1, + ".ctx": 2, + ".msg": 1, + "final": 1, + "hex": 1, + "encoded": 8, + "frees": 1, + "memory": 1, + "allocated": 1, + "also": 4, + ".digest": 1, + "algorithms": 1, + "availability": 1, + "depends": 1, + "libcrypto": 1, + "configuration": 1, + "md4": 1, + "md5": 2, + "sha": 1, + "sha1": 1, + "sha224": 1, + "sha256": 1, + "sha512": 1, + "dss1": 1, + "ripemd160": 1, + "These": 2, + "two": 2, + "routines": 6, + "illustrate": 1, + "dynamic": 1, + "scope": 1, + "variables": 2, + "triangle1": 1, + "sum": 15, + "+": 188, + "main2": 1, + "y": 33, + "triangle2": 1, + "compute": 2, + "Fibonacci": 1, + "series": 1, + "b": 64, + "term": 10, + "start1": 2, + "entry": 5, + "label": 4, + "<": 19, + "start2": 1, + "function": 6, + "computes": 1, + "factorial": 3, + "f": 93, + "f*n": 1, + "main": 1, + "GMRGPNB0": 1, + "CISC/JH/RM": 1, + "NARRATIVE": 1, + "BUILDER": 1, + "TEXT": 5, + "GENERATOR": 1, + "cont.": 1, + "/20/91": 1, + "Text": 1, + "Generator": 1, + "Jan": 1, + "ENTRY": 2, + "WITH": 1, + "GMRGA": 1, + "SET": 3, + "TO": 6, + "POINT": 1, + "AT": 1, + "WHICH": 1, + "WANT": 1, + "START": 1, + "BUILDING": 1, + "S": 99, + "GMRGE0": 11, + "GMRGADD": 4, + "Q": 58, + "D": 64, + "GMR": 6, + "GMRGA0": 11, + "GMRGPDA": 9, + "GMRGCSW": 2, + "NOW": 1, + "%": 203, + "DTC": 1, + "GMRGB0": 9, + "O": 24, + "I": 43, + "GMRGST": 6, + "GMRGPDT": 2, + "STAT": 8, + "GMRGRUT0": 3, + "GMRGF0": 3, + "GMRGSTAT": 8, + "P": 68, + "_GMRGB0_": 2, + "_": 126, + "GMRD": 6, + "GMRGSSW": 3, + "[": 53, + "SNT": 1, + "GMRGPNB1": 1, + "GMRGNAR": 8, + "GMRGPAR_": 2, + "_GMRGSPC_": 3, + "_GMRGRM": 2, + "_GMRGE0": 1, + "STORETXT": 1, + "GMRGRUT1": 1, + "GMRGSPC": 3, + "F": 10, + "GMRGD0": 7, + "ALIST": 1, + "G": 40, + "TMP": 26, + "J": 38, + "GMRGPLVL": 6, + "GMRGA0_": 1, + "_GMRGD0_": 1, + "_GMRGSSW_": 1, + "_GMRGADD": 1, + "GMRGI0": 6, + "label1": 1, + "if1": 2, + "statement": 3, + "if2": 2, + "statements": 1, + "contrasted": 1, + "": 3, + "variable": 8, + "a=": 3, + "smaller": 3, + "than": 4, + "b=": 4, + "if3": 1, + "else": 7, + "clause": 2, + "if4": 1, + "bodies": 1, + "exercise": 1, + "car": 14, + "@": 8, + "MD5": 6, + "Implementation": 1, + "It": 2, + "works": 1, + "ZCHSET": 2, + "please": 1, + "don": 1, + "only": 9, + "joke.": 1, + "Serves": 1, + "well": 2, + "reverse": 1, + "engineering": 1, + "obtaining": 1, + "boolean": 2, + "functions": 4, + "integer": 1, + "addition": 1, + "modulo": 1, + "division.": 1, + "//en.wikipedia.org/wiki/MD5": 1, + "r": 88, + "k": 122, + "h": 39, + "j": 67, + "g": 228, + "w": 127, + "t": 11, + "p": 84, + "l": 84, + "#64": 1, + "msg_": 1, + "_m_": 1, + "n64": 2, + "*8": 2, + "read": 2, + ".p": 1, + "..": 28, + "...": 6, + "e": 210, + "*i": 3, + "#16": 3, + "xor": 4, + "rotate": 5, + "#4294967296": 6, + "n32h": 5, + "bit": 5, + "#2": 1, + "*2147483648": 2, + "a#2": 1, + "b#2": 1, + ".a": 1, + ".b": 1, + "rol": 1, + "a*": 1, + "**n": 1, + "c#4294967296": 1, + "*n": 1, + "n#256": 1, + "n#16": 2, + "MDB": 60, + "M/DB": 2, + "Mumps": 1, + "Emulation": 1, + "Amazon": 1, + "SimpleDB": 1, + "|": 170, + "M/Gateway": 4, + "Developments": 4, + "Ltd": 4, + "Reigate": 4, + "Surrey": 4, + "UK.": 4, + "All": 4, + "rights": 4, + "reserved.": 4, + "//www.mgateway.com": 4, + "Email": 4, + "rtweed@mgateway.com": 4, + "QUIT": 249, + "buildDate": 1, + "indexLength": 10, + "Note": 2, + "keyId": 108, + "been": 4, + "tested": 1, + "must": 7, + "valid": 1, + "time": 9, + "these": 1, + "methods": 2, + "are": 11, + "called": 8, + "To": 2, + "Initialise": 2, + "service": 1, + "//192.168.1.xxx/mdb/test.mgwsi": 1, + "Action": 2, + "addUser": 2, + "userKeyId": 6, + "userSecretKey": 6, + "requestId": 17, + "boxUsage": 11, + "startTime": 21, + "stop": 20, + ".startTime": 5, + "MDBUAF": 2, + "end": 33, + ".boxUsage": 22, + "createDomain": 1, + "domainName": 38, + "dn": 4, + "dnx": 3, + "id": 33, + "noOfDomains": 12, + "token": 21, + "tr": 13, + "MDBConfig": 1, + "getDomainId": 3, + "name": 121, + "found": 7, + "namex": 8, + "o": 51, + "buildItemNameIndex": 2, + "domainId": 53, + "itemId": 41, + "itemValue": 7, + "itemValuex": 3, + "countDomains": 2, + "key": 22, + "no": 53, + "deleteDomain": 2, + "listDomains": 1, + "maxNoOfDomains": 2, + "nextToken": 7, + "domainList": 3, + "fullName": 3, + "decodeBase64": 1, + "encodeBase64": 1, + "itemExists": 1, + "getItemId": 2, + "getAttributeValueId": 3, + "attribId": 36, + "valuex": 13, + "putAttributes": 2, + "itemName": 16, + "attributes": 32, + "replace": 27, + "valueId": 16, + "xvalue": 4, + "add": 5, + "Item": 1, + "Domain": 1, + "itemNamex": 4, + "increment": 11, + "parseJSON": 1, + "zmwire": 53, + "attributesJSON": 1, + ".attributes": 5, + "attribute": 14, + "getAttributeId": 2, + "domain": 1, + "Not": 1, + "allowed": 17, + "same": 2, + "remove": 6, + "existing": 2, + "now": 1, + "name/value": 2, + "pair": 1, + "getAttributes": 2, + "suppressBoxUsage": 1, + "attrNo": 9, + "valueNo": 6, + "delete": 2, + "item": 2, + "associated": 1, + "queryIndex": 1, + "records": 2, + "specified": 4, + "pairs": 2, + "vno": 2, + "left": 5, + "completely": 3, + "references": 1, + "pos": 33, + "maxNoOfItems": 3, + "itemList": 12, + "session": 1, + "identifier": 1, + "stored": 1, + "queryExpression": 16, + "zewd": 17, + "ok": 14, + "relink": 1, + "zewdGTMRuntime": 1, + "CGIEVAR": 1, + "cgi": 1, + "unescName": 5, + "urlDecode": 2, + "KEY": 36, + "response": 29, + "WebLink": 1, + "access": 21, + "point": 2, + "here": 4, + "action": 15, + "AWSAcessKeyId": 1, + "db": 9, + "hash": 1, + "itemsAndAttrs": 2, + "secretKey": 1, + "signatureMethod": 2, + "signatureVersion": 3, + "stringToSign": 2, + "rltKey": 2, + "trace": 24, + "_action_": 2, + "h_": 3, + "mdbKey": 2, + "errorResponse": 9, + "initialise": 3, + ".requestId": 7, + "createResponse": 4, + "installMDBM": 1, + "authenticate": 1, + "MDBSession": 1, + "createResponseStringToSign": 1, + "Security": 1, + "OK": 6, + "_db": 1, + "MDBAPI": 1, + "lineNo": 19, + "CacheTempEWD": 16, + "_db_": 1, + "db_": 1, + "_action": 1, + "resp": 5, + "metaData": 1, + "domainMetadata": 1, + ".metaData": 1, + "paramName": 8, + "paramValue": 5, + "_i_": 5, + "Query": 1, + "DomainName": 2, + "QueryExpression": 2, + "MaxNumberOfItems": 2, + "NextToken": 3, + "QueryWithAttributes": 1, + "AttributeName.": 2, + "Select": 2, + "SelectExpression": 1, + "entering": 1, + "runSelect.": 1, + "selectExpression": 3, + "finished": 1, + "runSelect": 3, + "count": 18, + "select": 3, + "*": 5, + "where": 6, + "limit": 14, + "asc": 1, + "inValue": 6, + "str": 15, + "expr": 18, + "rel": 2, + "itemStack": 3, + "between": 2, + "<=\">": 1, + "lastWord=": 7, + "inAttr=": 5, + "expr=": 10, + "thisWord=": 7, + "inAttr": 2, + "c=": 28, + "1": 74, + "queryExpression=": 4, + "_queryExpression": 2, + "4": 5, + "null": 6, + "3": 6, + "isNull": 1, + "5": 1, + "8": 1, + "isNotNull": 1, + "9": 1, + "np": 17, + "offset": 6, + "prevName": 1, + "np=": 1, + "diffNames": 6, + "_term": 3, + "expr_": 1, + "_orderBy": 1, + "runQuery": 2, + ".itemList": 4, + "escVals": 1, + "str_c": 2, + "_x_": 1, + "query": 4, + "orderBy": 1, + "_query": 1, + "parseSelect": 1, + ".domainName": 2, + ".queryExpression": 1, + ".orderBy": 1, + ".limit": 1, + "replaceAll": 11, + "executeSelect": 1, + ".itemStack": 1, + "***": 2, + "listCopy": 3, + "numeric": 6, + "N.N": 12, + "N.N1": 4, + "escape": 7, + "externalSelect": 2, + "json": 9, + "_keyId_": 1, + "_selectExpression": 1, + "FromStr": 6, + "ToStr": 4, + "InText": 4, + "old": 3, + "string": 50, + "p1": 5, + "p2": 10, + "stripTrailingSpaces": 2, + "spaces": 3, + "makeString": 3, + "string_spaces": 1, + "char": 9, + "len": 8, + "characters": 4, + "test": 6, + "miles": 4, + "gallons": 4, + "miles/gallons": 1, + "computepesimist": 1, + "miles/": 1, + "computeoptimist": 1, + "/gallons": 1, + "Mumtris": 3, + "tetris": 1, + "game": 1, + "MUMPS": 1, + "fun.": 1, + "Resize": 1, + "terminal": 2, + "maximize": 1, + "PuTTY": 1, + "window": 1, + "restart": 3, + "so": 4, + "report": 1, + "true": 2, + "size": 3, + "mumtris.": 1, + "Try": 2, + "setting": 3, + "ansi": 2, + "compatible": 1, + "cursor": 1, + "positioning.": 1, + "NOTICE": 1, + "uses": 1, + "making": 1, + "delays": 1, + "lower": 1, + "s.": 1, + "That": 1, + "means": 2, + "CPU": 1, + "fall": 5, + "lock": 2, + "clear": 6, + "change": 6, + "preview": 3, + "over": 2, + "exit": 3, + "short": 1, + "circuit": 1, + "redraw": 3, + "timeout": 1, + "harddrop": 1, + "other": 1, + "ex": 5, + "hd": 3, + "*c": 1, + "<0&'d>": 1, + "i=": 14, + "st": 6, + "t10m": 1, + "0": 23, + "<0>": 2, + "q=": 6, + "d=": 1, + "zb": 2, + "right": 3, + "fl=": 1, + "gr=": 1, + "hl": 2, + "help": 2, + "drop": 2, + "hd=": 1, + "2": 14, + "matrix": 2, + "stack": 8, + "draw": 3, + "ticks": 2, + "h=": 2, + "1000000000": 1, + "e=": 1, + "t10m=": 1, + "100": 2, + "n=": 1, + "ne=": 1, + "x=": 5, + "y=": 3, + "r=": 3, + "collision": 6, + "score": 5, + "k=": 1, + "j=": 4, + "<1))))>": 1, + "800": 1, + "200": 1, + "lv": 5, + "lc=": 1, + "10": 1, + "lc": 3, + "mt_": 2, + "cls": 6, + ".s": 5, + "dh/2": 6, + "dw/2": 6, + "*s": 4, + "u": 6, + "echo": 1, + "intro": 1, + "workaround": 1, + "ANSI": 1, + "driver": 1, + "NL": 1, + "some": 1, + "place": 9, + "clearscreen": 1, + "N": 19, + "h/2": 3, + "*w/2": 3, + "fill": 3, + "fl": 2, + "*x": 1, + "mx": 4, + "my": 5, + "step": 8, + "**lv*sb": 1, + "*lv": 1, + "sc": 3, + "ne": 2, + "gr": 1, + "w*3": 1, + "dev": 1, + "zsh": 1, + "dw": 1, + "dh": 1, + "elements": 3, + "elemId": 3, + "rotateVersions": 1, + "rotateVersion": 2, + "bottom": 1, + "coordinate": 1, + "____": 1, + "__": 2, + "||": 1, + "ax": 2, + "bx": 2, + "cx": 2, + "ay": 2, + "cy": 2, + "sumx": 3, + "sqrx": 3, + "sumxy": 5, + "x*x": 1, + "x*y": 1, + "PCRE": 23, + "tries": 1, + "deliver": 1, + "best": 2, + "possible": 5, + "interface": 1, + "world": 4, + "providing": 1, + "support": 3, + "arrays": 1, + "stringified": 2, + "parameter": 1, + "names": 3, + "simplified": 1, + "API": 7, + "locales": 2, + "exceptions": 1, + "Perl5": 1, + "Global": 8, + "Match.": 1, + "pcreexamples.m": 2, + "comprehensive": 1, + "examples": 4, + "pcre": 59, + "beginner": 1, + "level": 5, + "tips": 1, + "match": 41, + "limits": 6, + "exception": 12, + "handling": 2, + "UTF": 17, + "GT.M.": 1, + "out": 2, + "known": 2, + "book": 1, + "regular": 1, + "expressions": 1, + "//regex.info/": 1, + "For": 3, + "information": 1, + "//pcre.org/": 1, + "Initial": 2, + "release": 2, + "pkoper": 2, + "pcre.version": 1, + "config": 3, + "case": 7, + "insensitive": 7, + "protect": 11, + "erropt": 6, + "isstring": 5, + "code": 28, + "pcre.config": 1, + ".name": 1, + ".erropt": 3, + ".isstring": 1, + ".n": 20, + "ec": 10, + "compile": 14, + "pattern": 21, + "options": 45, + "locale": 24, + "mlimit": 20, + "reclimit": 19, + "optional": 16, + "joined": 3, + "Unix": 1, + "pcre_maketables": 2, + "cases": 1, + "undefined": 1, + "environment": 7, + "defined": 2, + "LANG": 4, + "LC_*": 1, + "output": 49, + "command": 9, + "Debian": 2, + "tip": 1, + "dpkg": 1, + "reconfigure": 1, + "enable": 1, + "system": 1, + "wide": 1, + "number": 5, + "internal": 3, + "matching": 4, + "calls": 1, + "pcre_exec": 4, + "execution": 2, + "manual": 2, + "details": 5, + "depth": 1, + "recursion": 1, + "calling": 2, + "ref": 41, + "err": 4, + "erroffset": 3, + "pcre.compile": 1, + ".pattern": 3, + ".ref": 13, + ".err": 1, + ".erroffset": 1, + "exec": 4, + "subject": 24, + "startoffset": 3, + "length": 7, + "octets": 2, + "starts": 1, + "like": 4, + "chars": 3, + "pcre.exec": 2, + ".subject": 3, + "zl": 7, + "ec=": 7, + "ovector": 25, + "element": 1, + "code=": 4, + "ovecsize": 5, + "fullinfo": 3, + "OPTIONS": 2, + "SIZE": 1, + "CAPTURECOUNT": 1, + "BACKREFMAX": 1, + "FIRSTBYTE": 1, + "FIRSTTABLE": 1, + "LASTLITERAL": 1, + "NAMEENTRYSIZE": 1, + "NAMECOUNT": 1, + "STUDYSIZE": 1, + "OKPARTIAL": 1, + "JCHANGED": 1, + "HASCRORLF": 1, + "MINLENGTH": 1, + "JIT": 1, + "JITSIZE": 1, + "NAME": 3, + "nametable": 4, + "index": 1, + "indexed": 4, + "substring": 1, + "begin": 18, + "begin=": 3, + "end=": 4, + "contains": 2, + "octet": 4, + "UNICODE": 1, + "ze": 8, + "begin_": 1, + "_end": 1, + "store": 6, + "above": 2, + "stores": 1, + "captured": 6, + "array": 22, + "key=": 2, + "gstore": 3, + "round": 12, + "byref": 5, + "global": 26, + "ref=": 3, + "l=": 2, + "capture": 10, + "indexes": 1, + "extended": 1, + "NAMED_ONLY": 2, + "named": 12, + "groups": 5, + "OVECTOR": 2, + "namedonly": 9, + "options=": 4, + "o=": 12, + "namedonly=": 2, + "ovector=": 2, + "NO_AUTO_CAPTURE": 2, + "_capture_": 2, + "matches": 10, + "s=": 4, + "_s_": 1, + "GROUPED": 1, + "group": 4, + "result": 3, + "patterns": 3, + "pcredemo": 1, + "pcreccp": 1, + "cc": 1, + "procedure": 2, + "Perl": 1, + "utf8": 2, + "crlf": 6, + "empty": 7, + "skip": 6, + "determine": 1, + "them": 1, + "before": 2, + "byref=": 2, + "check": 2, + "UTF8": 2, + "double": 1, + "line": 9, + "utf8=": 1, + "crlf=": 3, + "NL_CRLF": 1, + "NL_ANY": 1, + "NL_ANYCRLF": 1, + "none": 1, + "build": 2, + "NEWLINE": 1, + ".start": 1, + "unwind": 1, + "call": 1, + "optimize": 1, + "leave": 1, + "advance": 1, + "LF": 1, + "CR": 1, + "CRLF": 1, + "mode": 12, + "middle": 1, + ".i": 2, + ".match": 2, + ".round": 2, + ".byref": 2, + ".ovector": 2, + "subst": 3, + "last": 4, + "occurrences": 1, + "matched": 1, + "back": 4, + "th": 3, + "{": 4, + "}": 4, + "replaced": 1, + "substitution": 2, + "begins": 1, + "substituted": 2, + "defaults": 3, + "ends": 1, + "backref": 1, + "boffset": 1, + "prepare": 1, + "reference": 2, + ".subst": 1, + ".backref": 1, + "silently": 1, + "zco": 1, + "": 1, + "s/": 6, + "b*": 7, + "/Xy/g": 6, + "print": 8, + "aa": 9, + "et": 4, + "zt": 20, + "direct": 3, + "take": 1, + "default": 6, + "setup": 3, + "trap": 10, + "source": 3, + "location": 5, + "argument": 1, + "@ref": 2, + "E": 12, + "COMPILE": 2, + "has": 6, + "meaning": 1, + "zs": 2, + "re": 2, + "raise": 3, + "XC": 1, + "specific": 3, + "U16384": 1, + "U16385": 1, + "U16386": 1, + "U16387": 1, + "U16388": 2, + "U16389": 1, + "U16390": 1, + "U16391": 1, + "U16392": 2, + "U16393": 1, + "NOTES": 1, + "U16401": 2, + "raised": 2, + "i.e.": 3, + "NOMATCH": 2, + "ever": 1, + "uncommon": 1, + "situation": 1, + "too": 1, + "small": 1, + "considering": 1, + "controlled": 1, + "U16402": 1, + "U16403": 1, + "U16404": 1, + "U16405": 1, + "U16406": 1, + "U16407": 1, + "U16408": 1, + "U16409": 1, + "U16410": 1, + "U16411": 1, + "U16412": 1, + "U16414": 1, + "U16415": 1, + "U16416": 1, + "U16417": 1, + "U16418": 1, + "U16419": 1, + "U16420": 1, + "U16421": 1, + "U16423": 1, + "U16424": 1, + "U16425": 1, + "U16426": 1, + "U16427": 1, + "Examples": 4, + "pcre.m": 1, + "parameters": 1, + "pcreexamples": 32, + "shining": 1, + "Test": 1, + "Simple": 2, + "zwr": 17, + "Match": 4, + "grouped": 2, + "Just": 1, + "Change": 2, + "word": 3, + "Escape": 1, + "sequence": 1, + "More": 1, + "Low": 1, + "api": 1, + "Setup": 1, + "myexception2": 2, + "st_": 1, + "zl_": 2, + "Compile": 2, + ".options": 1, + "pass": 24, + "Run": 1, + ".offset": 1, + "used.": 2, + "always": 1, + "strings": 1, + "submitted": 1, + "exact": 1, + "usable": 1, + "integers": 1, + "Get": 2, + "way": 1, + "i*2": 3, + "what": 2, + "while": 3, + "/": 2, + "/mg": 2, + "aaa": 1, + "nbb": 1, + ".*": 1, + "discover": 1, + "stackusage": 3, + "Locale": 5, + "Support": 1, + "Polish": 1, + "language": 6, + "I18N": 2, + "PCRE.": 1, + "Polish.": 1, + "second": 1, + "letter": 1, + "": 1, + "which": 4, + "ISO8859": 1, + "//en.wikipedia.org/wiki/Polish_code_pages": 1, + "complete": 1, + "listing": 1, + "CHAR": 1, + "different": 3, + "character": 2, + "modes": 1, + "In": 1, + "probably": 1, + "expected": 1, + "working": 1, + "single": 2, + "ISO": 3, + "chars.": 1, + "Use": 1, + "zch": 7, + "prepared": 1, + "GTM": 8, + "BADCHAR": 1, + "errors.": 1, + "Also": 1, + "others": 1, + "might": 1, + "expected.": 1, + "POSIX": 1, + "localization": 1, + "nolocale": 2, + "zchset": 2, + "isolocale": 2, + "utflocale": 2, + "LC_CTYPE": 1, + "Set": 2, + "obtain": 2, + "results.": 1, + "envlocale": 2, + "ztrnlnm": 2, + "Notes": 1, + "Enabling": 1, + "native": 1, + "requires": 1, + "libicu": 2, + "gtm_chset": 1, + "gtm_icu_version": 1, + "recompiled": 1, + "object": 4, + "files": 4, + "Instructions": 1, + "Install": 1, + "libicu48": 2, + "apt": 1, + "get": 2, + "install": 1, + "append": 1, + "user": 27, + "chown": 1, + "gtm": 1, + "/opt/gtm": 1, + "Startup": 1, + "errors": 6, + "INVOBJ": 1, + "Cannot": 1, + "ZLINK": 1, + "due": 1, + "unexpected": 1, + "format": 2, + "Object": 1, + "compiled": 1, + "CHSET": 1, + "written": 3, + "startup": 1, + "correct": 1, + "above.": 1, + "Limits": 1, + "built": 1, + "recursion.": 1, + "Those": 1, + "prevent": 1, + "engine": 1, + "very": 2, + "long": 2, + "runs": 2, + "especially": 1, + "there": 2, + "would": 1, + "paths": 2, + "tree": 1, + "checked.": 1, + "Functions": 1, + "using": 4, + "itself": 1, + "allows": 1, + "MATCH_LIMIT": 1, + "MATCH_LIMIT_RECURSION": 1, + "arguments": 1, + "library": 1, + "compilation": 2, + "Example": 1, + "run": 2, + "longrun": 3, + "Equal": 1, + "corrected": 1, + "shortrun": 2, + "Enforced": 1, + "enforcedlimit": 2, + "Exception": 2, + "Handling": 1, + "Error": 1, + "conditions": 1, + "handled": 1, + "zc": 1, + "codes": 1, + "labels": 1, + "file.": 1, + "When": 2, + "neither": 1, + "nor": 1, + "within": 1, + "mechanism.": 1, + "depending": 1, + "caller": 1, + "type": 2, + "exception.": 1, + "lead": 1, + "writing": 4, + "prompt": 1, + "routine": 4, + "terminating": 1, + "image.": 1, + "define": 2, + "own": 2, + "handlers.": 1, + "Handler": 1, + "No": 17, + "nohandler": 4, + "Pattern": 1, + "failed": 1, + "unmatched": 1, + "parentheses": 1, + "<-->": 1, + "HERE": 1, + "RTSLOC": 2, + "At": 2, + "SETECODE": 1, + "Non": 1, + "assigned": 1, + "ECODE": 1, + "32": 1, + "GT": 1, + "image": 1, + "terminated": 1, + "myexception1": 3, + "zt=": 1, + "mytrap1": 2, + "zg": 2, + "mytrap3": 1, + "DETAILS": 1, + "executed": 1, + "frame": 1, + "called.": 1, + "deeper": 1, + "frames": 1, + "already": 1, + "dropped": 1, + "local": 1, + "available": 1, + "context.": 1, + "Thats": 1, + "why": 1, + "doesn": 1, + "unless": 1, + "cleared.": 1, + "Always": 1, + "done.": 2, + "Execute": 1, + "p5global": 1, + "p5replace": 1, + "p5lf": 1, + "p5nl": 1, + "newline": 1, + "utf8support": 1, + "myexception3": 1, + "contrasting": 1, + "postconditionals": 1, + "IF": 9, + "commands": 1, + "post1": 1, + "postconditional": 3, + "purposely": 4, + "TEST": 16, + "false": 5, + "post2": 1, + "special": 2, + "after": 2, + "post": 1, + "condition": 1, + "PRCAAPR": 1, + "WASH": 1, + "ISC@ALTOONA": 1, + "PA/RGY": 1, + "PATIENT": 5, + "ACCOUNT": 1, + "PROFILE": 1, + "CONT": 1, + "/9/94": 1, + "AM": 1, + "V": 2, + "Accounts": 1, + "Receivable": 1, + "**198": 1, + "**": 2, + "Mar": 1, + "Per": 1, + "VHA": 1, + "Directive": 1, + "modified.": 1, + "EN": 2, + "PRCATY": 2, + "NEW": 3, + "DIC": 6, + "X": 18, + "Y": 26, + "DEBT": 10, + "PRCADB": 5, + "DA": 4, + "PRCA": 14, + "COUNT": 2, + "OUT": 2, + "SEL": 1, + "BILL": 11, + "BAT": 8, + "TRAN": 5, + "DR": 4, + "DXS": 1, + "DTOUT": 2, + "DIROUT": 1, + "DIRUT": 1, + "DUOUT": 1, + "ASK": 3, + "DPTNOFZY": 2, + "DPTNOFZK": 2, + "K": 5, + "R": 2, + "DTIME": 1, + "UPPER": 1, + "VALM1": 1, + "RCD": 1, + "DISV": 2, + "DUZ": 3, + "NAM": 1, + "RCFN01": 1, + "COMP": 2, + "EN1": 1, + "PRCAATR": 1, + "Y_": 3, + "PRCADB_": 1, + "HDR": 1, + "PRCAAPR1": 3, + "HDR2": 1, + "DIS": 1, + "STAT1": 2, + "_PRCATY_": 1, + "COMP1": 2, + "RCY": 5, + "]": 14, + "COMP2": 2, + "_STAT_": 1, + "_STAT": 1, + "payments": 1, + "_TRAN": 1, + "Keith": 1, + "Lynch": 1, + "p#f": 1, + "PXAI": 1, + "ISL/JVS": 1, + "ISA/KWP": 1, + "ESW": 1, + "PCE": 2, + "DRIVING": 1, + "RTN": 1, + "/20/03": 1, + "am": 1, + "CARE": 1, + "ENCOUNTER": 2, + "**15": 1, + "Aug": 1, + "Build": 6, + "DATA2PCE": 1, + "PXADATA": 7, + "PXAPKG": 9, + "PXASOURC": 10, + "PXAVISIT": 8, + "PXAUSER": 6, + "PXANOT": 3, + "ERRRET": 2, + "PXAPREDT": 2, + "PXAPROB": 15, + "PXACCNT": 2, + "add/edit/delete": 1, + "PCE.": 1, + "required": 4, + "pointer": 4, + "visit": 3, + "related.": 1, + "then": 2, + "nodes": 1, + "needed": 1, + "lookup/create": 1, + "visit.": 1, + "adding": 1, + "data.": 1, + "displayed": 1, + "screen": 1, + "debugging": 1, + "initial": 1, + "code.": 1, + "passed": 4, + "reference.": 2, + "present": 1, + "PXKERROR": 2, + "caller.": 1, + "want": 1, + "edit": 1, + "Primary": 3, + "Provider": 1, + "moment": 1, + "editing": 2, + "being": 1, + "dangerous": 1, + "dotted": 1, + "name.": 1, + "warnings": 1, + "occur": 1, + "They": 1, + "form": 1, + "general": 1, + "description": 1, + "problem.": 1, + "ERROR1": 1, + "GENERAL": 2, + "ERRORS": 4, + "SUBSCRIPT": 5, + "PASSED": 4, + "IN": 4, + "FIELD": 2, + "FROM": 5, + "WARNING2": 1, + "WARNINGS": 2, + "WARNING3": 1, + "SERVICE": 1, + "CONNECTION": 1, + "REASON": 9, + "ERROR4": 1, + "PROBLEM": 1, + "LIST": 1, + "Returns": 2, + "PFSS": 2, + "Account": 2, + "Reference": 2, + "known.": 1, + "Returned": 1, + "located": 1, + "Order": 1, + "#100": 1, + "process": 3, + "occurred": 2, + "processed": 1, + "could": 1, + "incorrectly": 1, + "VARIABLES": 1, + "NOVSIT": 1, + "PXAK": 20, + "DFN": 1, + "PXAERRF": 3, + "PXADEC": 1, + "PXELAP": 1, + "PXASUB": 2, + "VALQUIET": 2, + "PRIMFND": 7, + "PXAERROR": 1, + "PXAERR": 7, + "PRVDR": 1, + "needs": 1, + "look": 1, + "up": 1, + "passed.": 1, + "@PXADATA@": 8, + "SOR": 1, + "SOURCE": 2, + "PKG2IEN": 1, + "VSIT": 1, + "PXAPIUTL": 2, + "TMPSOURC": 1, + "SAVES": 1, + "CREATES": 1, + "VST": 2, + "VISIT": 3, + "KILL": 1, + "VPTR": 1, + "PXAIVSTV": 1, + "ERR": 2, + "PXAIVST": 1, + "PRV": 1, + "PROVIDER": 1, + "AUPNVSIT": 1, + ".I": 4, + "..S": 7, + "status": 2, + "Secondary": 2, + ".S": 6, + "..I": 2, + "PXADI": 4, + "NODE": 5, + "SCREEN": 2, + "VA": 1, + "EXTERNAL": 2, + "INTERNAL": 2, + "ARRAY": 2, + "PXAICPTV": 1, + "SEND": 1, + "W": 4, + "BLD": 2, + "DIALOG": 4, + ".PXAERR": 3, + "MSG": 2, + "GLOBAL": 1, + "NA": 1, + "PROVDRST": 1, + "Check": 1, + "provider": 1, + "PRVIEN": 14, + "DETS": 7, + "DIQ": 3, + "PRI": 3, + "PRVPRIM": 2, + "AUPNVPRV": 2, + "U": 14, + ".04": 1, + "DIQ1": 1, + "POVPRM": 1, + "POVARR": 1, + "STOP": 1, + "LPXAK": 4, + "ORDX": 14, + "NDX": 7, + "ORDXP": 3, + "DX": 2, + "ICD9": 2, + "AUPNVPOV": 2, + "@POVARR@": 6, + "force": 1, + "originally": 1, + "primary": 1, + "diagnosis": 1, + "flag": 1, + ".F": 2, + "..E": 1, + "...S": 5, + "decode": 1, + "val": 5, + "Decoded": 1, + "Encoded": 1, + "decoded": 3, + "decoded_": 1, + "safechar": 3, + "zchar": 1, + "encoded_c": 1, + "encoded_": 2, + "FUNC": 1, + "DH": 1, + "zascii": 1, + "WVBRNOT": 1, + "HCIOFO/FT": 1, + "JR": 1, + "IHS/ANMC/MWR": 1, + "BROWSE": 1, + "NOTIFICATIONS": 1, + "/30/98": 1, + "WOMEN": 1, + "WVDATE": 8, + "WVENDDT1": 2, + "WVIEN": 13, + "..F": 2, + "WV": 8, + "WVXREF": 1, + "WVDFN": 6, + "SELECTING": 1, + "ONE": 2, + "CASE": 1, + "MANAGER": 1, + "AND": 3, + "THIS": 3, + "DOESN": 1, + "WVE": 2, + "": 2, + "STORE": 3, + "WVA": 2, + "WVBEGDT1": 1, + "NOTIFICATION": 1, + "IS": 3, + "NOT": 1, + "QUEUED.": 1, + "WVB": 4, + "OR": 2, + "OPEN": 1, + "ONLY": 1, + "CLOSED.": 1, + ".Q": 1, + "EP": 4, + "ALREADY": 1, + "LL": 1, + "SORT": 3, + "ABOVE.": 1, + "DATE": 1, + "WVCHRT": 1, + "SSN": 1, + "WVUTL1": 2, + "SSN#": 1, + "WVNAME": 4, + "WVACC": 4, + "ACCESSION#": 1, + "WVSTAT": 1, + "STATUS": 2, + "WVUTL4": 1, + "WVPRIO": 5, + "PRIORITY": 1, + "WVCHRT_U_WVNAME_U_WVDATE_U_WVACC_U_WVSTAT_U_WVPRIO_U_WVIEN": 1, + "WVC": 4, + "COPYGBL": 3, + "COPY": 1, + "MAKE": 1, + "IT": 1, + "FLAT.": 1, + "...F": 1, + "....S": 1, + "DEQUEUE": 1, + "TASKMAN": 1, + "QUEUE": 1, + "OF": 2, + "PRINTOUT.": 1, + "SETVARS": 2, + "WVUTL5": 2, + "WVBRNOT1": 2, + "EXIT": 1, + "FOLLOW": 1, + "CALLED": 1, + "PROCEDURE": 1, + "FOLLOWUP": 1, + "MENU.": 1, + "WVBEGDT": 1, + "DT": 2, + "WVENDDT": 1, + "DEVICE": 1, + "WVBRNOT2": 1, + "WVPOP": 1, + "WVLOOP": 1, + "ZDIOUT1": 1, + "Experimental": 1, + "FileMan": 1, + "host": 2, + "Open": 1, + "Source": 1, + "Electronic": 1, + "Health": 1, + "Record": 1, + "Agent": 1, + "Licensed": 1, + "Apache": 1, + "Version": 1, + "may": 3, + "except": 1, + "compliance": 1, + "License.": 2, + "//www.apache.org/licenses/LICENSE": 1, + "Unless": 1, + "applicable": 1, + "law": 1, + "agreed": 1, + "BASIS": 1, + "WARRANTIES": 1, + "CONDITIONS": 1, + "KIND": 1, + "express": 1, + "implied.": 1, + "governing": 1, + "permissions": 2, + "limitations": 1, + "ASKFILE": 1, + "FILE": 5, + "ASKDIR": 1, + "DIR": 3, + "SAVEFILE": 2, + "Save": 1, + "given": 1, + "directory": 1, + "CHECK": 1, + "FGR": 4, + "_FILE": 1, + "IO": 4, + "DIR_": 1, + "L": 1, + "FILENAME": 1, + "_IO_": 1, + "_P_": 1, + "NM": 1, + "non": 1, + "printing": 1, + "escaped": 1, + "evaluation": 1, + "RHS": 1, + "SET.": 1, + "TODO": 1, + "Caller": 1, + "indentation": 1, + "comment": 1, + "tab": 1, + "space.": 1, + "M/Wire": 4, + "Protocol": 2, + "Systems": 1, + "eg": 3, + "Cache": 3, + "By": 1, + "server": 1, + "port": 4, + "systems": 3, + "invoked": 2, + "via": 2, + "xinetd": 2, + "Edit": 1, + "/etc/services": 1, + "mwire": 2, + "/tcp": 1, + "#": 1, + "Service": 1, + "Copy": 2, + "/etc/xinetd.d/mwire": 1, + "/usr/local/gtm/zmwire": 1, + "its": 1, + "executable": 1, + "edited": 1, + "Restart": 1, + "sudo": 1, + "/etc/init.d/xinetd": 1, + "On": 1, + "installed": 1, + "MGWSI": 1, + "m_apache": 3, + "provide": 1, + "hashing": 1, + "passwords": 1, + "Alternatively": 1, + "substitute": 1, + "callout": 1, + "choice": 1, + "Daemon": 2, + "running": 1, + "jobbed": 1, + "job": 1, + "zmwireDaemon": 2, + "simply": 1, + "Stop": 1, + "RESJOB": 1, + "it.": 1, + "mwireVersion": 4, + "mwireDate": 2, + "July": 1, + "_crlf": 22, + "_response_": 4, + "_crlf_response_crlf": 4, + "zv": 6, + "authNeeded": 6, + "input": 41, + "cleardown": 2, + "zint": 1, + "role": 3, + "loop": 7, + "log": 1, + "halt": 3, + "auth": 2, + "ignore": 12, + "pid": 36, + "monitor": 1, + "input_crlf": 1, + "zsy": 2, + "_pid_": 1, + "_pid": 1, + "monitoroutput": 1, + "logger": 17, + "tot": 2, + "mwireLogger": 3, + "info": 1, + "response_": 1, + "_count": 1, + "setpassword": 1, + "SETPASSWORD": 2, + "secret": 2, + "": 1, + "role=": 1, + "admin": 1, + "newrole": 4, + "getGloRef": 3, + "gloName": 1, + "gloRef": 15, + "nb": 2, + "subs": 8, + "nsp": 1, + "subs_": 2, + "quot": 2, + "_data_": 3, + "subscripts": 8, + "_value_": 1, + "_error_": 1, + "kill": 3, + "xx": 16, + "yy": 19, + "method": 2, + "Missing": 5, + "JSON": 7, + "transaction": 6, + "document": 6, + "setJSON": 4, + "globalName": 7, + "GlobalName": 3, + "setGlobal": 1, + "zmwire_null_value": 1, + "Invalid": 1, + "props": 1, + "arr": 2, + "getJSON": 2, + "incr": 1, + "incrbr": 1, + "class": 1, + "##": 2, + "decr": 1, + "decrby": 1, + "subscript": 7, + "direction": 1, + "subscriptValue": 1, + "dataStatus": 1, + "dataValue": 1, + "nextsubscript": 2, + "reverseorder": 1, + "*2": 1, + "queryget": 1, + "xxyy": 2, + "zz": 2, + "exists": 6, + "getallsubscripts": 1, + "orderall": 1, + "": 3, + "note": 2, + "escaping": 1, + "foo": 2, + "_gloRef": 1, + "@x": 4, + "_crlf_": 1, + "j_": 1, + "params": 10, + "_crlf_resp_crlf": 2, + "_crlf_data_crlf": 2, + "mergeto": 1, + "dataLength": 4, + "keyLength": 6, + "noOfRecs": 6, + "MERGETO": 1, + "myglobal": 1, + "*6": 1, + "hello": 1, + "": 2, + "put": 1, + "top": 1, + "noOfRecs#2": 1, + "noOfRecs/2": 1, + "gloRef1": 2, + "gloRef1_": 2, + "_gloRef1_key_": 1, + "sub": 2, + "literal": 2, + "valquot_value_valquot": 1, + "json_value_": 1, + "subscripts1": 2, + "dd": 4, + "subx": 3, + "subNo": 1, + "numsub": 1, + "json_": 2, + "removeControlChars": 2, + "zobj1": 1, + "buff": 10, + "parseJSONObject": 2, + ".buff": 2, + "subs2": 6, + "_name_": 1, + "subs2_": 2, + "value_c": 1, + "newString": 4, + "newString_c": 1, + "utfConvert": 1, + "Unescape": 1, + "buf": 4, + "c1": 4, + "buf_c1_": 1, + "zewdAPI": 52, + "Enterprise": 5, + "Web": 5, + "Developer": 5, + "APIs": 1, + "Product": 2, + "Date": 2, + "Fri": 1, + "Nov": 1, + "getVersion": 1, + "zewdCompiler": 6, + "date": 1, + "getDate": 1, + "compilePage": 2, + "app": 13, + "page": 12, + "technology": 9, + "outputPath": 4, + "multilingual": 4, + "maxLines": 4, + "compileAll": 2, + "templatePageName": 2, + "autoTranslate": 2, + "verbose": 2, + "zewdMgr": 1, + "startSession": 2, + "requestArray": 2, + "serverArray": 1, + "sessionArray": 5, + "filesArray": 1, + "zewdPHP": 8, + ".requestArray": 2, + ".serverArray": 1, + ".sessionArray": 3, + ".filesArray": 1, + "closeSession": 2, + "saveSession": 2, + "endOfPage": 2, + "prePageScript": 2, + "sessid": 146, + "releaseLock": 2, + "tokeniseURL": 2, + "url": 2, + "zewdCompiler16": 5, + "getSessid": 1, + "isTokenExpired": 2, + "zewdSession": 39, + "initialiseSession": 1, + "deleteSession": 2, + "changeApp": 1, + "appName": 4, + "setSessionValue": 6, + "setRedirect": 1, + "toPage": 1, + "path": 4, + "getRootURL": 1, + "_sessid_": 3, + "_token_": 1, + "_nextPage": 1, + "zcvt": 11, + "nextPage": 1, + "isNextPageTokenValid": 2, + "zewdCompiler13": 10, + "isCSP": 1, + "normaliseTextValue": 1, + "text": 6, + "writeLine": 2, + "CacheTempBuffer": 2, + "displayOptions": 2, + "fieldName": 5, + "listName": 6, + "codeValue": 7, + "nnvp": 1, + "nvp": 1, + "textValue": 6, + "getSessionValue": 3, + "codeValueEsc": 7, + "textValueEsc": 7, + "htmlOutputEncode": 2, + "zewdAPI2": 5, + "_codeValueEsc_": 1, + "selected": 4, + "translationMode": 1, + "_appName": 1, + "typex": 1, + "avoid": 1, + "bug": 1, + "getPhraseIndex": 1, + "zewdCompiler5": 1, + "licensed": 1, + "setWarning": 2, + "isTemp": 11, + "setWLDSymbol": 1, + "Duplicate": 1, + "performance": 1, + "wldAppName": 1, + "wldName": 1, + "wldSessid": 1, + "zzname": 1, + "extcErr": 1, + "mess": 3, + "namespace": 1, + "valueErr": 1, + "exportCustomTags": 2, + "tagList": 1, + "filepath": 10, + ".tagList": 1, + "exportAllCustomTags": 2, + "importCustomTags": 2, + "filePath": 2, + "zewdForm": 1, + "stripSpaces": 6, + "obj": 6, + "prop": 6, + "setSessionObject": 3, + "allowJSONAccess": 1, + "sessionName": 30, + "disallowJSONAccess": 1, + "JSONAccess": 1, + "existsInSession": 2, + "existsInSessionArray": 2, + "p3": 3, + "p4": 2, + "p5": 2, + "p6": 2, + "p7": 2, + "p8": 2, + "p9": 2, + "p10": 2, + "p11": 2, + "clearSessionArray": 1, + "arrayName": 35, + "setSessionArray": 1, + "getSessionArray": 1, + "clearArray": 2, + "getSessionArrayErr": 1, + "Come": 1, + "addToSession": 2, + "@name": 4, + "mergeToSession": 1, + "mergeGlobalToSession": 2, + "mergeGlobalFromSession": 2, + "mergeArrayToSession": 1, + "mergeArrayToSessionObject": 2, + ".array": 1, + "mergeArrayFromSession": 1, + "mergeFromSession": 1, + "deleteFromSession": 1, + "deleteFromSessionObject": 1, + "sessionNameExists": 1, + "getSessionArrayValue": 2, + ".exists": 1, + "sessionArrayValueExists": 2, + "deleteSessionArrayValue": 2, + "Objects": 1, + "objectName": 13, + "propertyName": 3, + "propertyValue": 5, + "comma": 3, + "objectName_": 2, + "_propertyName": 2, + "_propertyName_": 2, + "_propertyValue_": 1, + "_p": 1, + "quoted": 1, + "removeDocument": 1, + "zewdDOM": 3, + "instanceName": 2, + "clearXMLIndex": 1, + "zewdSchemaForm": 1, + "closeDOM": 1, + "makeTokenString": 1, + "token_": 1, + "convertDateToSeconds": 1, + "hdate": 7, + "hdate*86400": 1, + "convertSecondsToDate": 1, + "secs": 2, + "secs#86400": 1, + "getTokenExpiry": 2, + "h*86400": 1, + "randChar": 1, + "lowerCase": 2, + "stripLeadingSpaces": 2, + "d1": 7, + "zd": 1, + "<10>": 1, + "dd=": 2, + "mm=": 3, + "d1=": 1, + "p1=": 1, + "mm": 7, + "p2=": 1, + "yy=": 1, + "dd_": 1, + "mm_": 1, + "inetTime": 1, + "Decode": 1, + "Internet": 1, + "Format": 1, + "Time": 1, + "H": 1, + "Offset": 1, + "relative": 1, + "GMT": 1, + "hh": 4, + "ss": 4, + "_hh": 1, + "time#3600": 1, + "_mm": 1, + "time#60": 1, + "_ss": 2, + "hh_": 1, + "_mm_": 1, + "openNewFile": 2, + "openFile": 2, + "openDOM": 2, + "#39": 1, + "<\",\"<\")>": 1, + "string=": 1, + "gt": 1, + "amp": 1, + "HTML": 1, + "no2": 1, + "p1_c_p2": 1, + "getIP": 2, + "IP": 1, + "address": 1, + "ajaxErrorRedirect": 2, + "classExport": 2, + "className": 2, + ".methods": 1, + "strx": 2, + "disableEwdMgr": 1, + "enableEwdMgr": 1, + "enableWLDAccess": 1, + "disableWLDAccess": 1, + "isSSOValid": 2, + "sso": 2, + "username": 8, + "password": 8, + "zewdMgrAjax2": 1, + "uniqueId": 1, + "nodeOID": 2, + "filename": 2, + "linkToParentSession": 2, + "zewdCompiler20": 1, + "exportToGTM": 1, + "zewdDemo": 1, + "Tutorial": 1, + "Wed": 1, + "Apr": 1, + "getLanguage": 1, + "getRequestValue": 1, + "login": 1, + "getTextValue": 4, + "getPasswordValue": 2, + "_username_": 1, + "_password": 1, + "logine": 1, + "textid": 1, + "errorMessage": 1, + "ewdDemo": 8, + "clearList": 2, + "appendToList": 4, + "addUsername": 1, + "newUsername": 5, + "newUsername_": 1, + "setTextValue": 4, + "testValue": 1, + "getSelectValue": 3, + "_user": 1, + "getPassword": 1, + "setPassword": 1, + "getObjDetails": 1, + "_user_": 1, + "_data": 2, + "setRadioOn": 2, + "initialiseCheckbox": 2, + "setCheckboxOn": 3, + "createLanguageList": 1, + "setMultipleSelectOn": 2, + "clearTextArea": 2, + "textarea": 2, + "createTextArea": 1, + ".textarea": 1, + "userType": 4, + "setMultipleSelectValues": 1, + ".selected": 1, + "testField3": 3, + ".value": 1, + "testField2": 1, + "field3": 1, + "dateTime": 1 + }, + "Oxygene": { + "": 1, + "DefaultTargets=": 1, + "xmlns=": 1, + "": 3, + "": 1, + "Loops": 2, + "": 1, + "": 1, + "exe": 1, + "": 1, + "": 1, + "": 1, + "": 1, + "False": 4, + "": 1, + "": 1, + "": 1, + "": 1, + "": 1, + "": 1, + "Properties": 1, + "App.ico": 1, + "": 1, + "": 1, + "Condition=": 3, + "Release": 2, + "": 1, + "": 1, + "{": 1, + "BD89C": 1, + "-": 4, + "B610": 1, + "CEE": 1, + "CAF": 1, + "C515D88E2C94": 1, + "}": 1, + "": 1, + "": 3, + "": 1, + "DEBUG": 1, + ";": 2, + "TRACE": 1, + "": 1, + "": 2, + ".": 2, + "bin": 2, + "Debug": 1, + "": 2, + "": 1, + "True": 3, + "": 1, + "": 1, + "": 1, + "": 1, + "": 1, + "": 1, + "Project=": 1, + "": 2, + "": 5, + "Include=": 12, + "": 5, + "(": 5, + "Framework": 5, + ")": 5, + "mscorlib.dll": 1, + "": 5, + "": 5, + "System.dll": 1, + "ProgramFiles": 1, + "Reference": 1, + "Assemblies": 1, + "Microsoft": 1, + "v3.5": 1, + "System.Core.dll": 1, + "": 1, + "": 1, + "System.Data.dll": 1, + "System.Xml.dll": 1, + "": 2, + "": 4, + "": 1, + "": 1, + "": 2, + "ResXFileCodeGenerator": 1, + "": 2, + "": 1, + "": 1, + "SettingsSingleFileGenerator": 1, + "": 1, + "": 1 + }, + "RMarkdown": { + "Some": 1, + "text.": 1, + "##": 1, + "A": 1, + "graphic": 1, + "in": 1, + "R": 1, + "{": 1, + "r": 1, + "}": 1, + "plot": 1, + "(": 3, + ")": 3, + "hist": 1, + "rnorm": 1 } }, "language_tokens": { @@ -47802,7 +48835,6 @@ "Clojure": 510, "COBOL": 90, "CoffeeScript": 2951, - "Common Lisp": 103, "Coq": 18259, "Creole": 134, "CSS": 43867, @@ -47817,6 +48849,7 @@ "Erlang": 2928, "fish": 636, "Forth": 1516, + "Game Maker Language": 7933, "GAS": 133, "GLSL": 3766, "Gosu": 410, @@ -47825,7 +48858,6 @@ "Haml": 4, "Handlebars": 69, "Hy": 155, - "IDL": 418, "Idris": 148, "INI": 27, "Ioke": 2, @@ -47846,7 +48878,6 @@ "Logos": 93, "Logtalk": 36, "Lua": 724, - "M": 23373, "Makefile": 50, "Markdown": 1, "Matlab": 11942, @@ -47867,7 +48898,6 @@ "OpenCL": 144, "OpenEdge ABL": 762, "Org": 358, - "Oxygene": 157, "Parrot Assembly": 6, "Parrot Internal Representation": 5, "Pascal": 30, @@ -47888,7 +48918,6 @@ "Ragel in Ruby Host": 593, "RDoc": 279, "Rebol": 11, - "RMarkdown": 19, "RobotFramework": 483, "Ruby": 3862, "Rust": 3566, @@ -47922,7 +48951,12 @@ "XQuery": 801, "XSLT": 44, "Xtend": 399, - "YAML": 30 + "YAML": 30, + "Common Lisp": 103, + "IDL": 418, + "M": 23373, + "Oxygene": 157, + "RMarkdown": 19 }, "languages": { "ABAP": 1, @@ -47944,7 +48978,6 @@ "Clojure": 7, "COBOL": 4, "CoffeeScript": 9, - "Common Lisp": 1, "Coq": 12, "Creole": 1, "CSS": 2, @@ -47959,6 +48992,7 @@ "Erlang": 5, "fish": 3, "Forth": 7, + "Game Maker Language": 8, "GAS": 1, "GLSL": 3, "Gosu": 4, @@ -47967,7 +49001,6 @@ "Haml": 1, "Handlebars": 2, "Hy": 2, - "IDL": 4, "Idris": 1, "INI": 2, "Ioke": 1, @@ -47988,7 +49021,6 @@ "Logos": 1, "Logtalk": 1, "Lua": 3, - "M": 28, "Makefile": 2, "Markdown": 1, "Matlab": 39, @@ -48009,7 +49041,6 @@ "OpenCL": 2, "OpenEdge ABL": 5, "Org": 1, - "Oxygene": 1, "Parrot Assembly": 1, "Parrot Internal Representation": 1, "Pascal": 1, @@ -48030,7 +49061,6 @@ "Ragel in Ruby Host": 3, "RDoc": 1, "Rebol": 1, - "RMarkdown": 1, "RobotFramework": 3, "Ruby": 17, "Rust": 1, @@ -48064,7 +49094,12 @@ "XQuery": 1, "XSLT": 1, "Xtend": 2, - "YAML": 1 + "YAML": 1, + "Common Lisp": 1, + "IDL": 4, + "M": 28, + "Oxygene": 1, + "RMarkdown": 1 }, - "md5": "a46f14929a6e9e4356fda95beb035439" + "md5": "d553eccf00cb7981cddf40658c0f42ae" } \ No newline at end of file diff --git a/samples/Game Maker Language/ClientBeginStep.gml b/samples/Game Maker Language/ClientBeginStep.gml new file mode 100644 index 00000000..64d14110 --- /dev/null +++ b/samples/Game Maker Language/ClientBeginStep.gml @@ -0,0 +1,642 @@ +/* + Originally from /Source/gg2/Scripts/Client/ClientBeginStep.gml in Gang Garrison 2 + + Copyright (C) 2008-2013 Faucet Software + http://www.ganggarrison.com + + This program is free software; + you can redistribute it and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of the License, or (at your option) + any later version. + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU General Public License for more details. + You should have received a copy of the GNU General Public License along with this program; if not, + see . + + Additional permission under GNU GPL version 3 section 7 + If you modify this Program, or any covered work, by linking or combining it with the Game Maker runtime library, + the 39dll library/extension, Hobbel's Download Manager DLL, or modified versions of these libraries, + the licensors of this Program grant you additional permission to convey the resulting work. +*/ + +// receive and interpret the server's message(s) +var i, playerObject, playerID, player, otherPlayerID, otherPlayer, sameVersion, buffer, plugins, pluginsRequired, usePlugins; + +if(tcp_eof(global.serverSocket)) { + if(gotServerHello) + show_message("You have been disconnected from the server."); + else + show_message("Unable to connect to the server."); + instance_destroy(); + exit; +} + +if(room == DownloadRoom and keyboard_check(vk_escape)) +{ + instance_destroy(); + exit; +} + +if(downloadingMap) +{ + while(tcp_receive(global.serverSocket, min(1024, downloadMapBytes-buffer_size(downloadMapBuffer)))) + { + write_buffer(downloadMapBuffer, global.serverSocket); + if(buffer_size(downloadMapBuffer) == downloadMapBytes) + { + write_buffer_to_file(downloadMapBuffer, "Maps/" + downloadMapName + ".png"); + downloadingMap = false; + buffer_destroy(downloadMapBuffer); + downloadMapBuffer = -1; + exit; + } + } + exit; +} + +roomchange = false; +do { + if(tcp_receive(global.serverSocket,1)) { + switch(read_ubyte(global.serverSocket)) { + case HELLO: + gotServerHello = true; + global.joinedServerName = receivestring(global.serverSocket, 1); + downloadMapName = receivestring(global.serverSocket, 1); + advertisedMapMd5 = receivestring(global.serverSocket, 1); + receiveCompleteMessage(global.serverSocket, 1, global.tempBuffer); + pluginsRequired = read_ubyte(global.tempBuffer); + plugins = receivestring(global.serverSocket, 1); + if(string_pos("/", downloadMapName) != 0 or string_pos("\", downloadMapName) != 0) + { + show_message("Server sent illegal map name: "+downloadMapName); + instance_destroy(); + exit; + } + + if (!noReloadPlugins && string_length(plugins)) + { + usePlugins = pluginsRequired || !global.serverPluginsPrompt; + if (global.serverPluginsPrompt) + { + var prompt; + if (pluginsRequired) + { + prompt = show_question( + "This server requires the following plugins to play on it: " + + string_replace_all(plugins, ",", "#") + + '#They are downloaded from the source: "' + + PLUGIN_SOURCE + + '"#The source states: "' + + PLUGIN_SOURCE_NOTICE + + '"#Do you wish to download them and continue connecting?' + ); + if (!prompt) + { + instance_destroy(); + exit; + } + } + else + { + prompt = show_question( + "This server suggests the following optional plugins to play on it: " + + string_replace_all(plugins, ",", "#") + + '#They are downloaded from the source: "' + + PLUGIN_SOURCE + + '"#The source states: "' + + PLUGIN_SOURCE_NOTICE + + '"#Do you wish to download them and use them?' + ); + if (prompt) + { + usePlugins = true; + } + } + } + if (usePlugins) + { + if (!loadserverplugins(plugins)) + { + show_message("Error ocurred loading server-sent plugins."); + instance_destroy(); + exit; + } + global.serverPluginsInUse = true; + } + } + noReloadPlugins = false; + + if(advertisedMapMd5 != "") + { + var download; + download = not file_exists("Maps/" + downloadMapName + ".png"); + if(!download and CustomMapGetMapMD5(downloadMapName) != advertisedMapMd5) + { + if(show_question("The server's copy of the map (" + downloadMapName + ") differs from ours.#Would you like to download this server's version of the map?")) + download = true; + else + { + instance_destroy(); + exit; + } + } + + if(download) + { + write_ubyte(global.serverSocket, DOWNLOAD_MAP); + socket_send(global.serverSocket); + receiveCompleteMessage(global.serverSocket,4,global.tempBuffer); + downloadMapBytes = read_uint(global.tempBuffer); + downloadMapBuffer = buffer_create(); + downloadingMap = true; + roomchange=true; + } + } + ClientPlayerJoin(global.serverSocket); + if(global.rewardKey != "" and global.rewardId != "") + { + var rewardId; + rewardId = string_copy(global.rewardId, 0, 255); + write_ubyte(global.serverSocket, REWARD_REQUEST); + write_ubyte(global.serverSocket, string_length(rewardId)); + write_string(global.serverSocket, rewardId); + } + if(global.queueJumping == true) + { + write_ubyte(global.serverSocket, CLIENT_SETTINGS); + write_ubyte(global.serverSocket, global.queueJumping); + } + socket_send(global.serverSocket); + break; + + case JOIN_UPDATE: + receiveCompleteMessage(global.serverSocket,2,global.tempBuffer); + global.playerID = read_ubyte(global.tempBuffer); + global.currentMapArea = read_ubyte(global.tempBuffer); + break; + + case FULL_UPDATE: + deserializeState(FULL_UPDATE); + break; + + case QUICK_UPDATE: + deserializeState(QUICK_UPDATE); + break; + + case CAPS_UPDATE: + deserializeState(CAPS_UPDATE); + break; + + case INPUTSTATE: + deserializeState(INPUTSTATE); + break; + + case PLAYER_JOIN: + player = instance_create(0,0,Player); + player.name = receivestring(global.serverSocket, 1); + + ds_list_add(global.players, player); + if(ds_list_size(global.players)-1 == global.playerID) { + global.myself = player; + instance_create(0,0,PlayerControl); + } + break; + + case PLAYER_LEAVE: + // Delete player from the game, adjust own ID accordingly + receiveCompleteMessage(global.serverSocket,1,global.tempBuffer); + playerID = read_ubyte(global.tempBuffer); + player = ds_list_find_value(global.players, playerID); + removePlayer(player); + if(playerID < global.playerID) { + global.playerID -= 1; + } + break; + + case PLAYER_DEATH: + var causeOfDeath, assistantPlayerID, assistantPlayer; + receiveCompleteMessage(global.serverSocket,4,global.tempBuffer); + playerID = read_ubyte(global.tempBuffer); + otherPlayerID = read_ubyte(global.tempBuffer); + assistantPlayerID = read_ubyte(global.tempBuffer); + causeOfDeath = read_ubyte(global.tempBuffer); + + player = ds_list_find_value(global.players, playerID); + + otherPlayer = noone; + if(otherPlayerID != 255) + otherPlayer = ds_list_find_value(global.players, otherPlayerID); + + assistantPlayer = noone; + if(assistantPlayerID != 255) + assistantPlayer = ds_list_find_value(global.players, assistantPlayerID); + + doEventPlayerDeath(player, otherPlayer, assistantPlayer, causeOfDeath); + break; + + case BALANCE: + receiveCompleteMessage(global.serverSocket,1,global.tempBuffer); + balanceplayer=read_ubyte(global.tempBuffer); + if balanceplayer == 255 { + if !instance_exists(Balancer) instance_create(x,y,Balancer); + with(Balancer) notice=0; + } else { + player = ds_list_find_value(global.players, balanceplayer); + if(player.object != -1) { + with(player.object) { + instance_destroy(); + } + player.object = -1; + } + if(player.team==TEAM_RED) { + player.team = TEAM_BLUE; + } else { + player.team = TEAM_RED; + } + if !instance_exists(Balancer) instance_create(x,y,Balancer); + Balancer.name=player.name; + with (Balancer) notice=1; + } + break; + + case PLAYER_CHANGETEAM: + receiveCompleteMessage(global.serverSocket,2,global.tempBuffer); + player = ds_list_find_value(global.players, read_ubyte(global.tempBuffer)); + if(player.object != -1) { + with(player.object) { + instance_destroy(); + } + player.object = -1; + } + player.team = read_ubyte(global.tempBuffer); + break; + + case PLAYER_CHANGECLASS: + receiveCompleteMessage(global.serverSocket,2,global.tempBuffer); + player = ds_list_find_value(global.players, read_ubyte(global.tempBuffer)); + if(player.object != -1) { + with(player.object) { + instance_destroy(); + } + player.object = -1; + } + player.class = read_ubyte(global.tempBuffer); + break; + + case PLAYER_CHANGENAME: + receiveCompleteMessage(global.serverSocket,1,global.tempBuffer); + player = ds_list_find_value(global.players, read_ubyte(global.tempBuffer)); + player.name = receivestring(global.serverSocket, 1); + if player=global.myself { + global.playerName=player.name + } + break; + + case PLAYER_SPAWN: + receiveCompleteMessage(global.serverSocket,3,global.tempBuffer); + player = ds_list_find_value(global.players, read_ubyte(global.tempBuffer)); + doEventSpawn(player, read_ubyte(global.tempBuffer), read_ubyte(global.tempBuffer)); + break; + + case CHAT_BUBBLE: + var bubbleImage; + receiveCompleteMessage(global.serverSocket,2,global.tempBuffer); + player = ds_list_find_value(global.players, read_ubyte(global.tempBuffer)); + setChatBubble(player, read_ubyte(global.tempBuffer)); + break; + + case BUILD_SENTRY: + receiveCompleteMessage(global.serverSocket,6,global.tempBuffer); + player = ds_list_find_value(global.players, read_ubyte(global.tempBuffer)); + buildSentry(player, read_ushort(global.tempBuffer)/5, read_ushort(global.tempBuffer)/5, read_byte(global.tempBuffer)); + break; + + case DESTROY_SENTRY: + receiveCompleteMessage(global.serverSocket,4,global.tempBuffer); + playerID = read_ubyte(global.tempBuffer); + otherPlayerID = read_ubyte(global.tempBuffer); + assistantPlayerID = read_ubyte(global.tempBuffer); + causeOfDeath = read_ubyte(global.tempBuffer); + + player = ds_list_find_value(global.players, playerID); + if(otherPlayerID == 255) { + doEventDestruction(player, noone, noone, causeOfDeath); + } else { + otherPlayer = ds_list_find_value(global.players, otherPlayerID); + if (assistantPlayerID == 255) { + doEventDestruction(player, otherPlayer, noone, causeOfDeath); + } else { + assistantPlayer = ds_list_find_value(global.players, assistantPlayerID); + doEventDestruction(player, otherPlayer, assistantPlayer, causeOfDeath); + } + } + break; + + case GRAB_INTEL: + receiveCompleteMessage(global.serverSocket,1,global.tempBuffer); + player = ds_list_find_value(global.players, read_ubyte(global.tempBuffer)); + doEventGrabIntel(player); + break; + + case SCORE_INTEL: + receiveCompleteMessage(global.serverSocket,1,global.tempBuffer); + player = ds_list_find_value(global.players, read_ubyte(global.tempBuffer)); + doEventScoreIntel(player); + break; + + case DROP_INTEL: + receiveCompleteMessage(global.serverSocket,1,global.tempBuffer); + player = ds_list_find_value(global.players, read_ubyte(global.tempBuffer)); + doEventDropIntel(player); + break; + + case RETURN_INTEL: + receiveCompleteMessage(global.serverSocket,1,global.tempBuffer); + doEventReturnIntel(read_ubyte(global.tempBuffer)); + break; + + case GENERATOR_DESTROY: + receiveCompleteMessage(global.serverSocket,1,global.tempBuffer); + team = read_ubyte(global.tempBuffer); + doEventGeneratorDestroy(team); + break; + + case UBER_CHARGED: + receiveCompleteMessage(global.serverSocket,1,global.tempBuffer); + player = ds_list_find_value(global.players, read_ubyte(global.tempBuffer)); + doEventUberReady(player); + break; + + case UBER: + receiveCompleteMessage(global.serverSocket,1,global.tempBuffer); + player = ds_list_find_value(global.players, read_ubyte(global.tempBuffer)); + doEventUber(player); + break; + + case OMNOMNOMNOM: + receiveCompleteMessage(global.serverSocket,1,global.tempBuffer); + player = ds_list_find_value(global.players, read_ubyte(global.tempBuffer)); + if(player.object != -1) { + with(player.object) { + omnomnomnom=true; + if(hp < 200) + { + canEat = false; + alarm[6] = eatCooldown; //10 second cooldown + } + if(player.team == TEAM_RED) { + omnomnomnomindex=0; + omnomnomnomend=31; + } else if(player.team==TEAM_BLUE) { + omnomnomnomindex=32; + omnomnomnomend=63; + } + xscale=image_xscale; + } + } + break; + + case TOGGLE_ZOOM: + receiveCompleteMessage(global.serverSocket,1,global.tempBuffer); + player = ds_list_find_value(global.players, read_ubyte(global.tempBuffer)); + if player.object != -1 { + toggleZoom(player.object); + } + break; + + case PASSWORD_REQUEST: + if(!usePreviousPwd) + global.clientPassword = get_string("Enter Password:", ""); + write_ubyte(global.serverSocket, string_length(global.clientPassword)); + write_string(global.serverSocket, global.clientPassword); + socket_send(global.serverSocket); + break; + + case PASSWORD_WRONG: + show_message("Incorrect Password."); + instance_destroy(); + exit; + + case INCOMPATIBLE_PROTOCOL: + show_message("Incompatible server protocol version."); + instance_destroy(); + exit; + + case KICK: + receiveCompleteMessage(global.serverSocket,1,global.tempBuffer); + reason = read_ubyte(global.tempBuffer); + if reason == KICK_NAME kickReason = "Name Exploit"; + else if reason == KICK_BAD_PLUGIN_PACKET kickReason = "Invalid plugin packet ID"; + else if reason == KICK_MULTI_CLIENT kickReason = "There are too many connections from your IP"; + else kickReason = ""; + show_message("You have been kicked from the server. "+kickReason+"."); + instance_destroy(); + exit; + + case ARENA_STARTROUND: + doEventArenaStartRound(); + break; + + case ARENA_ENDROUND: + with ArenaHUD clientArenaEndRound(); + break; + + case ARENA_RESTART: + doEventArenaRestart(); + break; + + case UNLOCKCP: + doEventUnlockCP(); + break; + + case MAP_END: + global.nextMap=receivestring(global.serverSocket, 1); + receiveCompleteMessage(global.serverSocket,2,global.tempBuffer); + global.winners=read_ubyte(global.tempBuffer); + global.currentMapArea=read_ubyte(global.tempBuffer); + global.mapchanging = true; + if !instance_exists(ScoreTableController) instance_create(0,0,ScoreTableController); + instance_create(0,0,WinBanner); + break; + + case CHANGE_MAP: + roomchange=true; + global.mapchanging = false; + global.currentMap = receivestring(global.serverSocket, 1); + global.currentMapMD5 = receivestring(global.serverSocket, 1); + if(global.currentMapMD5 == "") { // if this is an internal map (signified by the lack of an md5) + if(findInternalMapRoom(global.currentMap)) + room_goto_fix(findInternalMapRoom(global.currentMap)); + else + { + show_message("Error:#Server went to invalid internal map: " + global.currentMap + "#Exiting."); + instance_destroy(); + exit; + } + } else { // it's an external map + if(string_pos("/", global.currentMap) != 0 or string_pos("\", global.currentMap) != 0) + { + show_message("Server sent illegal map name: "+global.currentMap); + instance_destroy(); + exit; + } + if(!file_exists("Maps/" + global.currentMap + ".png") or CustomMapGetMapMD5(global.currentMap) != global.currentMapMD5) + { // Reconnect to the server to download the map + var oldReturnRoom; + oldReturnRoom = returnRoom; + returnRoom = DownloadRoom; + if (global.serverPluginsInUse) + noUnloadPlugins = true; + event_perform(ev_destroy,0); + ClientCreate(); + if (global.serverPluginsInUse) + noReloadPlugins = true; + returnRoom = oldReturnRoom; + usePreviousPwd = true; + exit; + } + room_goto_fix(CustomMapRoom); + } + + for(i=0; i. + + Additional permission under GNU GPL version 3 section 7 + If you modify this Program, or any covered work, by linking or combining it with the Game Maker runtime library, + the 39dll library/extension, Hobbel's Download Manager DLL, or modified versions of these libraries, + the licensors of this Program grant you additional permission to convey the resulting work. +*/ +// Downloading code. + +var downloadHandle, url, tmpfile, window_oldshowborder, window_oldfullscreen; +timeLeft = 0; +counter = 0; +AudioControlPlaySong(-1, false); +window_oldshowborder = window_get_showborder(); +window_oldfullscreen = window_get_fullscreen(); +window_set_fullscreen(false); +window_set_showborder(false); + +if(global.updaterBetaChannel) + url = UPDATE_SOURCE_BETA; +else + url = UPDATE_SOURCE; + +tmpfile = temp_directory + "\gg2update.zip"; + +downloadHandle = httpGet(url, -1); + +while(!httpRequestStatus(downloadHandle)) +{ // while download isn't finished + sleep(floor(1000/30)); // sleep for the equivalent of one frame + io_handle(); // this prevents GameMaker from appearing locked-up + httpRequestStep(downloadHandle); + + // check if the user cancelled the download with the esc key + if(keyboard_check(vk_escape)) + { + httpRequestDestroy(downloadHandle); + window_set_showborder(window_oldshowborder); + window_set_fullscreen(window_oldfullscreen); + room_goto_fix(Menu); + exit; + } + + if(counter == 0 || counter mod 60 == 0) + timer = random(359)+1; + draw_sprite(UpdaterBackgroundS,0,0,0); + draw_set_color(c_white); + draw_set_halign(fa_left); + draw_set_valign(fa_center); + minutes=floor(timer/60); + seconds=floor(timer-minutes*60); + draw_text(x,y-20,string(minutes) + " minutes " + string(seconds) + " seconds Remaining..."); + counter+=1; + var progress, size; + progress = httpRequestResponseBodyProgress(downloadHandle); + size = httpRequestResponseBodySize(downloadHandle); + if (size != -1) + { + progressBar = floor((progress/size) * 20); + offset = 3; + for(i=0;i. + + Additional permission under GNU GPL version 3 section 7 + If you modify this Program, or any covered work, by linking or combining it with the Game Maker runtime library, + the 39dll library/extension, Hobbel's Download Manager DLL, or modified versions of these libraries, + the licensors of this Program grant you additional permission to convey the resulting work. +*/ + +xoffset = view_xview[0]; +yoffset = view_yview[0]; +xsize = view_wview[0]; +ysize = view_hview[0]; + +if (distance_to_point(xoffset+xsize/2,yoffset+ysize/2) > 800) + exit; + +var xr, yr; +xr = round(x); +yr = round(y); + +image_alpha = cloakAlpha; + +if (global.myself.team == team and canCloak) + image_alpha = cloakAlpha/2 + 0.5; + +if (invisible) + exit; + +if(stabbing) + image_alpha -= power(currentWeapon.stab.alpha, 2); + +if team == global.myself.team && (player != global.myself || global.showHealthBar == 1){ + draw_set_alpha(1); + draw_healthbar(xr-10, yr-30, xr+10, yr-25,hp*100/maxHp,c_black,c_red,c_green,0,true,true); +} +if(distance_to_point(mouse_x, mouse_y)<25) { + if cloak && team!=global.myself.team exit; + draw_set_alpha(1); + draw_set_halign(fa_center); + draw_set_valign(fa_bottom); + if(team==TEAM_RED) { + draw_set_color(c_red); + } else { + draw_set_color(c_blue); + } + draw_text(xr, yr-35, player.name); + + if(team == global.myself.team && global.showTeammateStats) + { + if(weapons[0] == Medigun) + draw_text(xr,yr+50, "Superburst: " + string(currentWeapon.uberCharge/20) + "%"); + else if(weapons[0] == Shotgun) + draw_text(xr,yr+50, "Nuts 'N' Bolts: " + string(nutsNBolts)); + else if(weapons[0] == Minegun) + draw_text(xr,yr+50, "Lobbed Mines: " + string(currentWeapon.lobbed)); + } +} + +draw_set_alpha(1); +if team == TEAM_RED ubercolour = c_red; +if team == TEAM_BLUE ubercolour = c_blue; + +var sprite, overlaySprite; +if zoomed +{ + if (team == TEAM_RED) + sprite = SniperCrouchRedS; + else + sprite = SniperCrouchBlueS; + overlaySprite = sniperCrouchOverlay; +} +else +{ + sprite = sprite_index; + overlaySprite = overlay; +} + +if (omnomnomnom) +{ + draw_sprite_ext_overlay(omnomnomnomSprite,omnomnomnomOverlay,omnomnomnomindex,xr,yr,image_xscale,image_yscale,image_angle,c_white,1); + if (ubered) + draw_sprite_ext_overlay(omnomnomnomSprite,omnomnomnomOverlay,omnomnomnomindex,xr,yr,image_xscale,image_yscale,image_angle,ubercolour,0.7); +} +else if (taunting) +{ + draw_sprite_ext_overlay(tauntsprite,tauntOverlay,tauntindex,xr,yr,image_xscale,image_yscale,image_angle,c_white,1); + if (ubered) + draw_sprite_ext_overlay(tauntsprite,tauntOverlay,tauntindex,xr,yr,image_xscale,image_yscale,image_angle,ubercolour,0.7); +} +else if (player.humiliated) + draw_sprite_ext(humiliationPoses,floor(animationImage)+humiliationOffset,xr,yr,image_xscale,image_yscale,image_angle,c_white,image_alpha); +else if (!taunting) +{ + if (cloak) + { + if (!ubered) + draw_sprite_ext(sprite,floor(animationImage+animationOffset),xr,yr,image_xscale,image_yscale,image_angle,c_white,image_alpha); + else if (ubered) + { + draw_sprite_ext(sprite,floor(animationImage+animationOffset),xr,yr,image_xscale,image_yscale,image_angle,c_white,1); + draw_sprite_ext(sprite,floor(animationImage+animationOffset),xr,yr,image_xscale,image_yscale,image_angle,ubercolour,0.7); + } + } + else + { + if (!ubered) + draw_sprite_ext_overlay(sprite,overlaySprite,floor(animationImage+animationOffset),xr,yr,image_xscale,image_yscale,image_angle,c_white,image_alpha); + else if (ubered) + { + draw_sprite_ext_overlay(sprite,overlaySprite,floor(animationImage+animationOffset),xr,yr,image_xscale,image_yscale,image_angle,c_white,1); + draw_sprite_ext_overlay(sprite,overlaySprite,floor(animationImage+animationOffset),xr,yr,image_xscale,image_yscale,image_angle,ubercolour,0.7); + } + } +} +if (burnDuration > 0 or burnIntensity > 0) { + for(i = 0; i < numFlames * burnIntensity / maxIntensity; i += 1) + { + draw_sprite_ext(FlameS, alarm[5] + i + random(2), x + flameArray_x[i], y + flameArray_y[i], 1, 1, 0, c_white, burnDuration / maxDuration * 0.71 + 0.35); + } +} + +// Copied from Lorgan's itemserver "angels" with slight modifications +// All credit be upon him +if (demon != -1) +{ + demonX = median(x-40,demonX,x+40); + demonY = median(y-40,demonY,y); + demonOffset += demonDir; + if (abs(demonOffset) > 15) + demonDir *= -1; + + var dir; + if (demonX > x) + dir = -1; + else + dir = 1; + + if (demonFrame > sprite_get_number(demon)) + demonFrame = 0; + + if (stabbing || ubered) + draw_sprite_ext(demon,demonFrame+floor(animationImage)+7*player.team,demonX,demonY+demonOffset,dir*1,1,0,c_white,1); + else + draw_sprite_ext(demon,demonFrame+floor(animationImage)+7*player.team,demonX,demonY+demonOffset,dir*1,1,0,c_white,image_alpha); + + demonFrame += 1; +} diff --git a/samples/Game Maker Language/doEventPlayerDeath.gml b/samples/Game Maker Language/doEventPlayerDeath.gml new file mode 100644 index 00000000..47ee7780 --- /dev/null +++ b/samples/Game Maker Language/doEventPlayerDeath.gml @@ -0,0 +1,251 @@ +/* + Originally from /Source/gg2/Scripts/Events/doEventPlayerDeath.gml in Gang Garrison 2 + + Copyright (C) 2008-2013 Faucet Software + http://www.ganggarrison.com + + This program is free software; + you can redistribute it and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of the License, or (at your option) + any later version. + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU General Public License for more details. + You should have received a copy of the GNU General Public License along with this program; if not, + see . + + Additional permission under GNU GPL version 3 section 7 + If you modify this Program, or any covered work, by linking or combining it with the Game Maker runtime library, + the 39dll library/extension, Hobbel's Download Manager DLL, or modified versions of these libraries, + the licensors of this Program grant you additional permission to convey the resulting work. +*/ + +/** + * Perform the "player death" event, i.e. change the appropriate scores, + * destroy the character object to much splattering and so on. + * + * argument0: The player whose character died + * argument1: The player who inflicted the fatal damage (or noone for unknown) + * argument2: The player who assisted the kill (or noone for no assist) + * argument3: The source of the fatal damage + */ +var victim, killer, assistant, damageSource; +victim = argument0; +killer = argument1; +assistant = argument2; +damageSource = argument3; + +if(!instance_exists(killer)) + killer = noone; + +if(!instance_exists(assistant)) + assistant = noone; + +//************************************* +//* Scoring and Kill log +//************************************* + + +recordKillInLog(victim, killer, assistant, damageSource); + +victim.stats[DEATHS] += 1; +if(killer) +{ + if(damageSource == WEAPON_KNIFE || damageSource == WEAPON_BACKSTAB) + { + killer.stats[STABS] += 1; + killer.roundStats[STABS] += 1; + killer.stats[POINTS] += 1; + killer.roundStats[POINTS] +=1; + } + + if (victim.object.currentWeapon.object_index == Medigun) + { + if (victim.object.currentWeapon.uberReady) + { + killer.stats[BONUS] += 1; + killer.roundStats[BONUS] += 1; + killer.stats[POINTS] += 1; + killer.roundStats[POINTS] += 1; + } + } + + if (killer != victim) + { + killer.stats[KILLS] += 1; + killer.roundStats[KILLS] += 1; + killer.stats[POINTS] += 1; + killer.roundStats[POINTS] += 1; + if(victim.object.intel) + { + killer.stats[DEFENSES] += 1; + killer.roundStats[DEFENSES] += 1; + killer.stats[POINTS] += 1; + killer.roundStats[POINTS] += 1; + recordEventInLog(4, killer.team, killer.name, global.myself == killer); + } + } +} + +if (assistant) +{ + assistant.stats[ASSISTS] += 1; + assistant.roundStats[ASSISTS] += 1; + assistant.stats[POINTS] += .5; + assistant.roundStats[POINTS] += .5; +} + +//SPEC +if (victim == global.myself) + instance_create(victim.object.x, victim.object.y, Spectator); + +//************************************* +//* Gibbing +//************************************* +var xoffset, yoffset, xsize, ysize; + +xoffset = view_xview[0]; +yoffset = view_yview[0]; +xsize = view_wview[0]; +ysize = view_hview[0]; + +randomize(); +with(victim.object) { + if((damageSource == WEAPON_ROCKETLAUNCHER + or damageSource == WEAPON_MINEGUN or damageSource == FRAG_BOX + or damageSource == WEAPON_REFLECTED_STICKY or damageSource == WEAPON_REFLECTED_ROCKET + or damageSource == FINISHED_OFF_GIB or damageSource == GENERATOR_EXPLOSION) + and (player.class != CLASS_QUOTE) and (global.gibLevel>1) + and distance_to_point(xoffset+xsize/2,yoffset+ysize/2) < 900) { + if (hasReward(victim, 'PumpkinGibs')) + { + repeat(global.gibLevel * 2) { + createGib(x,y,PumpkinGib,hspeed,vspeed,random(145)-72, choose(0,1,1,2,2,3), false, true) + } + } + else + { + repeat(global.gibLevel) { + createGib(x,y,Gib,hspeed,vspeed,random(145)-72, 0, false) + } + switch(player.team) + { + case TEAM_BLUE : + repeat(global.gibLevel - 1) { + createGib(x,y,BlueClump,hspeed,vspeed,random(145)-72, 0, false) + } + break; + case TEAM_RED : + repeat(global.gibLevel - 1) { + createGib(x,y,RedClump,hspeed,vspeed,random(145)-72, 0, false) + } + break; + } + } + + repeat(global.gibLevel * 14) { + var blood; + blood = instance_create(x+random(23)-11,y+random(23)-11,BloodDrop); + blood.hspeed=(random(21)-10); + blood.vspeed=(random(21)-13); + if (hasReward(victim, 'PumpkinGibs')) + { + blood.sprite_index = PumpkinJuiceS; + } + } + if (!hasReward(victim, 'PumpkinGibs')) + { + //All Classes gib head, hands, and feet + if(global.gibLevel > 2 || choose(0,1) == 1) + createGib(x,y,Headgib,0,0,random(105)-52, player.class, false); + repeat(global.gibLevel -1){ + //Medic has specially colored hands + if (player.class == CLASS_MEDIC){ + if (player.team == TEAM_RED) + createGib(x,y,Hand, hspeed, vspeed, random(105)-52 , 9, false); + else + createGib(x,y,Hand, hspeed, vspeed, random(105)-52 , 10, false); + }else{ + createGib(x,y,Hand, hspeed, vspeed, random(105)-52 , player.class, false); + } + createGib(x,y,Feet,random(5)-2,random(3),random(13)-6 , player.class, true); + } + } + + //Class specific gibs + switch(player.class) { + case CLASS_PYRO : + if(global.gibLevel > 2 || choose(0,1) == 1) + createGib(x,y,Accesory,hspeed,vspeed,random(105)-52, 4, false) + break; + case CLASS_SOLDIER : + if(global.gibLevel > 2 || choose(0,1) == 1){ + switch(player.team) { + case TEAM_BLUE : + createGib(x,y,Accesory,hspeed,vspeed,random(105)-52, 2, false); + break; + case TEAM_RED : + createGib(x,y,Accesory,hspeed,vspeed,random(105)-52, 1, false); + break; + } + } + break; + case CLASS_ENGINEER : + if(global.gibLevel > 2 || choose(0,1) == 1) + createGib(x,y,Accesory,hspeed,vspeed,random(105)-52, 3, false) + break; + case CLASS_SNIPER : + if(global.gibLevel > 2 || choose(0,1) == 1) + createGib(x,y,Accesory,hspeed,vspeed,random(105)-52, 0, false) + break; + } + playsound(x,y,Gibbing); + } else { + var deadbody; + if player.class != CLASS_QUOTE playsound(x,y,choose(DeathSnd1, DeathSnd2)); + deadbody = instance_create(x,y-30,DeadGuy); + // 'GS' reward - *G*olden *S*tatue + if(hasReward(player, 'GS')) + { + deadbody.sprite_index = haxxyStatue; + deadbody.image_index = 0; + } + else + { + deadbody.sprite_index = sprite_index; + deadbody.image_index = CHARACTER_ANIMATION_DEAD; + } + deadbody.hspeed=hspeed; + deadbody.vspeed=vspeed; + if(hspeed>0) { + deadbody.image_xscale = -1; + } + } +} + +if (global.gg_birthday){ + myHat = instance_create(victim.object.x,victim.object.y,PartyHat); + myHat.image_index = victim.team; +} +if (global.xmas){ + myHat = instance_create(victim.object.x,victim.object.y,XmasHat); + myHat.image_index = victim.team; +} + + +with(victim.object) { + instance_destroy(); +} + +//************************************* +//* Deathcam +//************************************* +if( global.killCam and victim == global.myself and killer and killer != victim and !(damageSource == KILL_BOX || damageSource == FRAG_BOX || damageSource == FINISHED_OFF || damageSource == FINISHED_OFF_GIB || damageSource == GENERATOR_EXPLOSION)) { + instance_create(0,0,DeathCam); + DeathCam.killedby=killer; + DeathCam.name=killer.name; + DeathCam.oldxview=view_xview[0]; + DeathCam.oldyview=view_yview[0]; + DeathCam.lastDamageSource=damageSource; + DeathCam.team = global.myself.team; +} diff --git a/samples/Game Maker Language/faucet-http.gml b/samples/Game Maker Language/faucet-http.gml new file mode 100644 index 00000000..c9b4d0f5 --- /dev/null +++ b/samples/Game Maker Language/faucet-http.gml @@ -0,0 +1,1469 @@ +#define __http_init +// *** +// This function forms part of Faucet HTTP v1.0 +// https://github.com/TazeTSchnitzel/Faucet-HTTP-Extension +// +// Copyright (c) 2013-2014, Andrea Faulds +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +// *** + +// Creates global.__HttpClient +// real __http_init() + +global.__HttpClient = object_add(); +object_set_persistent(global.__HttpClient, true); + +#define __http_split +// *** +// This function forms part of Faucet HTTP v1.0 +// https://github.com/TazeTSchnitzel/Faucet-HTTP-Extension +// +// Copyright (c) 2013-2014, Andrea Faulds +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +// *** + +// real __http_split(string text, delimeter delimeter, real limit) +// Splits string into items + +// text - string comma-separated values +// delimeter - delimeter to split by +// limit if non-zero, maximum times to split text +// When limited, the remaining text will be left as the last item. +// E.g. splitting "1,2,3,4,5" with delimeter "," and limit 2 yields this list: +// "1", "2", "3,4,5" + +// return value - ds_list containing strings of values + +var text, delimeter, limit; +text = argument0; +delimeter = argument1; +limit = argument2; + +var list, count; +list = ds_list_create(); +count = 0; + +while (string_pos(delimeter, text) != 0) +{ + ds_list_add(list, string_copy(text, 1, string_pos(delimeter,text) - 1)); + text = string_copy(text, string_pos(delimeter, text) + string_length(delimeter), string_length(text) - string_pos(delimeter, text)); + + count += 1; + if (limit and count == limit) + break; +} +ds_list_add(list, text); + +return list; + +#define __http_parse_url +// *** +// This function forms part of Faucet HTTP v1.0 +// https://github.com/TazeTSchnitzel/Faucet-HTTP-Extension +// +// Copyright (c) 2013-2014, Andrea Faulds +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +// *** + +// Parses a URL into its components +// real __http_parse_url(string url) + +// Return value is a ds_map containing keys for the different URL parts: (or -1 on failure) +// "url" - the URL which was passed in +// "scheme" - the URL scheme (e.g. "http") +// "host" - the hostname (e.g. "example.com" or "127.0.0.1") +// "port" - the port (e.g. 8000) - this is a real, unlike the others +// "abs_path" - the absolute path (e.g. "/" or "/index.html") +// "query" - the query string (e.g. "a=b&c=3") +// Parts which are not included will not be in the map +// e.g. http://example.com will not have the "port", "path" or "query" keys + +// This will *only* work properly for URLs of format: +// scheme ":" "//" host [ ":" port ] [ abs_path [ "?" query ]]" +// where [] denotes an optional component +// file: URLs will *not* work as they lack the authority (host:port) component +// It will not work correctly for IPv6 host values + +var url; +url = argument0; + +var map; +map = ds_map_create(); +ds_map_add(map, 'url', url); + +// before scheme +var colonPos; +// Find colon for end of scheme +colonPos = string_pos(':', url); +// No colon - bad URL +if (colonPos == 0) + return -1; +ds_map_add(map, 'scheme', string_copy(url, 1, colonPos - 1)); +url = string_copy(url, colonPos + 1, string_length(url) - colonPos); + +// before double slash +// remove slashes (yes this will screw up file:// but who cares) +while (string_char_at(url, 1) == '/') + url = string_copy(url, 2, string_length(url) - 1); + +// before hostname +var slashPos, colonPos; +// Find slash for beginning of path +slashPos = string_pos('/', url); +// No slash ahead - http://host format with no ending slash +if (slashPos == 0) +{ + // Find : for beginning of port + colonPos = string_pos(':', url); +} +else +{ + // Find : for beginning of port prior to / + colonPos = string_pos(':', string_copy(url, 1, slashPos - 1)); +} +// No colon - no port +if (colonPos == 0) +{ + // There was no slash + if (slashPos == 0) + { + ds_map_add(map, 'host', url); + return map; + } + // There was a slash + else + { + ds_map_add(map, 'host', string_copy(url, 1, slashPos - 1)); + url = string_copy(url, slashPos, string_length(url) - slashPos + 1); + } +} +// There's a colon - port specified +else +{ + // There was no slash + if (slashPos == 0) + { + ds_map_add(map, 'host', string_copy(url, 1, colonPos - 1)); + ds_map_add(map, 'port', real(string_copy(url, colonPos + 1, string_length(url) - colonPos))); + return map; + } + // There was a slash + else + { + ds_map_add(map, 'host', string_copy(url, 1, colonPos - 1)); + url = string_copy(url, colonPos + 1, string_length(url) - colonPos); + slashPos = string_pos('/', url); + ds_map_add(map, 'port', real(string_copy(url, 1, slashPos - 1))); + url = string_copy(url, slashPos, string_length(url) - slashPos + 1); + } +} + +// before path +var queryPos; +queryPos = string_pos('?', url); +// There's no ? - no query +if (queryPos == 0) +{ + ds_map_add(map, 'abs_path', url); + return map; +} +else +{ + ds_map_add(map, 'abs_path', string_copy(url, 1, queryPos - 1)); + ds_map_add(map, 'query', string_copy(url, queryPos + 1, string_length(url) - queryPos)); + return map; +} + +// Return -1 upon unlikely error +ds_map_destroy(map); +return -1; + +#define __http_resolve_url +// *** +// This function forms part of Faucet HTTP v1.0 +// https://github.com/TazeTSchnitzel/Faucet-HTTP-Extension +// +// Copyright (c) 2013-2014, Andrea Faulds +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +// *** + +// Takes a base URL and a URL reference and applies it to the base URL +// Returns resulting absolute URL +// string __http_resolve_url(string baseUrl, string refUrl) + +// Return value is a string containing the new absolute URL, or "" on failure + +// Works only for restricted URL syntax as understood by by http_resolve_url +// The sole restriction of which is that only scheme://authority/path URLs work +// This notably excludes file: URLs which lack the authority component + +// As described by RFC3986: +// URI-reference = URI / relative-ref +// relative-ref = relative-part [ "?" query ] [ "#" fragment ] +// relative-part = "//" authority path-abempty +// / path-absolute +// / path-noscheme +// / path-empty +// However http_resolve_url does *not* deal with fragments + +// Algorithm based on that of section 5.2.2 of RFC 3986 + +var baseUrl, refUrl; +baseUrl = argument0; +refUrl = argument1; + +// Parse base URL +var urlParts; +urlParts = __http_parse_url(baseUrl); +if (urlParts == -1) + return ''; + +// Try to parse reference URL +var refUrlParts, canParseRefUrl; +refUrlParts = __http_parse_url(refUrl); +canParseRefUrl = (refUrlParts != -1); +if (refUrlParts != -1) + ds_map_destroy(refUrlParts); + +var result; +result = ''; + +// Parsing of reference URL succeeded - it's absolute and we're done +if (canParseRefUrl) +{ + result = refUrl; +} +// Begins with '//' - scheme-relative URL +else if (string_copy(refUrl, 1, 2) == '//' and string_length(refUrl) > 2) +{ + result = ds_map_find_value(urlParts, 'scheme') + ':' + refUrl; +} +// Is or begins with '/' - absolute path relative URL +else if (((string_char_at(refUrl, 1) == '/' and string_length(refUrl) > 1) or refUrl == '/') +// Doesn't begin with ':' and is not blank - relative path relative URL + or (string_char_at(refUrl, 1) != ':' and string_length(refUrl) > 0)) +{ + // Find '?' for query + var queryPos; + queryPos = string_pos('?', refUrl); + // No query + if (queryPos == 0) + { + refUrl = __http_resolve_path(ds_map_find_value(urlParts, 'abs_path'), refUrl); + ds_map_replace(urlParts, 'abs_path', refUrl); + if (ds_map_exists(urlParts, 'query')) + ds_map_delete(urlParts, 'query'); + } + // Query exists, split + else + { + var path, query; + path = string_copy(refUrl, 1, queryPos - 1); + query = string_copy(refUrl, queryPos + 1, string_length(relUrl) - queryPos); + path = __http_resolve_path(ds_map_find_value(urlParts, 'abs_path'), path); + ds_map_replace(urlParts, 'abs_path', path); + if (ds_map_exists(urlParts, 'query')) + ds_map_replace(urlParts, 'query', query); + else + ds_map_add(urlParts, 'query', query); + } + result = __http_construct_url(urlParts); +} + +ds_map_destroy(urlParts); +return result; + +#define __http_resolve_path +// *** +// This function forms part of Faucet HTTP v1.0 +// https://github.com/TazeTSchnitzel/Faucet-HTTP-Extension +// +// Copyright (c) 2013-2014, Andrea Faulds +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +// *** + +// Takes a base path and a path reference and applies it to the base path +// Returns resulting absolute path +// string __http_resolve_path(string basePath, string refPath) + +// Return value is a string containing the new absolute path + +// Deals with UNIX-style / paths, not Windows-style \ paths +// Can be used to clean up .. and . in non-absolute paths too ('' as basePath) + +var basePath, refPath; +basePath = argument0; +refPath = argument1; + +// refPath begins with '/' (is absolute), we can ignore all of basePath +if (string_char_at(refPath, 1) == '/') +{ + basePath = refPath; + refPath = ''; +} + +var parts, refParts; +parts = __http_split(basePath, '/', 0); +refParts = __http_split(refPath, '/', 0); + +if (refPath != '') +{ + // Find last part of base path + var lastPart; + lastPart = ds_list_find_value(parts, ds_list_size(parts) - 1); + + // If it's not blank (points to a file), remove it + if (lastPart != '') + { + ds_list_delete(parts, ds_list_size(parts) - 1); + } + + // Concatenate refParts to end of parts + var i; + for (i = 0; i < ds_list_size(refParts); i += 1) + ds_list_add(parts, ds_list_find_value(refParts, i)); +} + +// We now don't need refParts any more +ds_list_destroy(refParts); + +// Deal with '..' and '.' +for (i = 0; i < ds_list_size(parts); i += 1) +{ + var part; + part = ds_list_find_value(parts, i); + + if (part == '.') + { + if (i == 1 or i == ds_list_size(parts) - 1) + ds_list_replace(parts, i, ''); + else + ds_list_delete(parts, i); + i -= 1; + continue; + } + else if (part == '..') + { + if (i > 1) + { + ds_list_delete(parts, i - 1); + ds_list_delete(part, i); + i -= 2; + } + else + { + ds_list_replace(parts, i, ''); + i -= 1; + } + continue; + } + else if (part == '' and i != 0 and i != ds_list_size(parts) - 1) + { + ds_list_delete(parts, i); + i -= 1; + continue; + } +} + +// Reconstruct path from parts +var path; +path = ''; +for (i = 0; i < ds_list_size(parts); i += 1) +{ + if (i != 0) + path += '/'; + path += ds_list_find_value(parts, i); +} + +ds_map_destroy(parts); +return path; + +#define __http_parse_hex +// *** +// This function forms part of Faucet HTTP v1.0 +// https://github.com/TazeTSchnitzel/Faucet-HTTP-Extension +// +// Copyright (c) 2013-2014, Andrea Faulds +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +// *** + +// Takes a lowercase hexadecimal string and returns its integer value +// real __http_parse_hex(string hexString) + +// Return value is the whole number value (or -1 if invalid) +// Only works for whole numbers (non-fractional numbers >= 0) and lowercase hex + +var hexString; +hexString = argument0; + +var result, hexValues; +result = 0; +hexValues = "0123456789abcdef"; + +var i; +for (i = 1; i <= string_length(hexString); i += 1) { + result *= 16; + var digit; + digit = string_pos(string_char_at(hexString, i), hexValues) - 1; + if (digit == -1) + return -1; + result += digit; +} + +return result; + +#define __http_construct_url +// *** +// This function forms part of Faucet HTTP v1.0 +// https://github.com/TazeTSchnitzel/Faucet-HTTP-Extension +// +// Copyright (c) 2013-2014, Andrea Faulds +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +// *** + +// Constructs an URL from its components (as http_parse_url would return) +// string __http_construct_url(real parts) + +// Return value is the string of the constructed URL +// Keys of parts map: +// "scheme" - the URL scheme (e.g. "http") +// "host" - the hostname (e.g. "example.com" or "127.0.0.1") +// "port" - the port (e.g. 8000) - this is a real, unlike the others +// "abs_path" - the absolute path (e.g. "/" or "/index.html") +// "query" - the query string (e.g. "a=b&c=3") +// Parts which are omitted will be omitted in the URL +// e.g. http://example.com lacks "port", "path" or "query" keys + +// This will *only* work properly for URLs of format: +// scheme ":" "//" host [ ":" port ] [ abs_path [ "?" query ]]" +// where [] denotes an optional component +// file: URLs will *not* work as they lack the authority (host:port) component +// Should work correctly for IPv6 host values, but bare in mind parse_url won't + +var parts; +parts = argument0; + +var url; +url = ''; + +url += ds_map_find_value(parts, 'scheme'); +url += '://'; +url += ds_map_find_value(parts, 'host'); +if (ds_map_exists(parts, 'port')) + url += ':' + string(ds_map_find_value(parts, 'port')); +if (ds_map_exists(parts, 'abs_path')) +{ + url += ds_map_find_value(parts, 'abs_path'); + if (ds_map_exists(parts, 'query')) + url += '?' + ds_map_find_value(parts, 'query'); +} + +return url; + +#define __http_prepare_request +// *** +// This function forms part of Faucet HTTP v1.0 +// https://github.com/TazeTSchnitzel/Faucet-HTTP-Extension +// +// Copyright (c) 2013-2014, Andrea Faulds +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +// *** + +// Internal function - prepares request +// void __http_prepare_request(real client, string url, real headers) + +// client - HttpClient object to prepare +// url - URL to send GET request to +// headers - ds_map of extra headers to send, -1 if none + +var client, url, headers; +client = argument0; +url = argument1; +headers = argument2; + +var parsed; +parsed = __http_parse_url(url); + +if (parsed == -1) + show_error("Error when making HTTP GET request - can't parse URL: " + url, true); + +if (!ds_map_exists(parsed, 'port')) + ds_map_add(parsed, 'port', 80); +if (!ds_map_exists(parsed, 'abs_path')) + ds_map_add(parsed, 'abs_path', '/'); + +with (client) +{ + destroyed = false; + CR = chr(13); + LF = chr(10); + CRLF = CR + LF; + socket = tcp_connect(ds_map_find_value(parsed, 'host'), ds_map_find_value(parsed, 'port')); + state = 0; + errored = false; + error = ''; + linebuf = ''; + line = 0; + statusCode = -1; + reasonPhrase = ''; + responseBody = buffer_create(); + responseBodySize = -1; + responseBodyProgress = -1; + responseHeaders = ds_map_create(); + requestUrl = url; + requestHeaders = headers; + + // Request = Request-Line ; Section 5.1 + // *(( general-header ; Section 4.5 + // | request-header ; Section 5.3 + // | entity-header ) CRLF) ; Section 7.1 + // CRLF + // [ message-body ] ; Section 4.3 + + // "The Request-Line begins with a method token, followed by the + // Request-URI and the protocol version, and ending with CRLF. The + // elements are separated by SP characters. No CR or LF is allowed + // except in the final CRLF sequence." + if (ds_map_exists(parsed, 'query')) + write_string(socket, 'GET ' + ds_map_find_value(parsed, 'abs_path') + '?' + ds_map_find_value(parsed, 'query') + ' HTTP/1.1' + CRLF); + else + write_string(socket, 'GET ' + ds_map_find_value(parsed, 'abs_path') + ' HTTP/1.1' + CRLF); + + // "A client MUST include a Host header field in all HTTP/1.1 request + // messages." + // "A "host" without any trailing port information implies the default + // port for the service requested (e.g., "80" for an HTTP URL)." + if (ds_map_find_value(parsed, 'port') == 80) + write_string(socket, 'Host: ' + ds_map_find_value(parsed, 'host') + CRLF); + else + write_string(socket, 'Host: ' + ds_map_find_value(parsed, 'host') + + ':' + string(ds_map_find_value(parsed, 'port')) + CRLF); + + // "An HTTP/1.1 server MAY assume that a HTTP/1.1 client intends to + // maintain a persistent connection unless a Connection header including + // the connection-token "close" was sent in the request." + write_string(socket, 'Connection: close' + CRLF); + + // "If no Accept-Encoding field is present in a request, the server MAY + // assume that the client will accept any content coding." + write_string(socket, 'Accept-Encoding:' + CRLF); + + // If headers specified + if (headers != -1) + { + var key; + // Iterate over headers map + for (key = ds_map_find_first(headers); is_string(key); key = ds_map_find_next(headers, key)) + { + write_string(socket, key + ': ' + ds_map_find_value(headers, key) + CRLF); + } + } + + // Send extra CRLF to terminate request + write_string(socket, CRLF); + + socket_send(socket); + + ds_map_destroy(parsed); +} + +#define __http_parse_header +// *** +// This function forms part of Faucet HTTP v1.0 +// https://github.com/TazeTSchnitzel/Faucet-HTTP-Extension +// +// Copyright (c) 2013-2014, Andrea Faulds +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +// *** + +// Internal function - parses header +// real __http_parse_header(string linebuf, real line) +// Returns false if it errored (caller should return and destroy) + +var linebuf, line; +linebuf = argument0; +line = argument1; + +// "HTTP/1.1 header field values can be folded onto multiple lines if the +// continuation line begins with a space or horizontal tab." +if ((string_char_at(linebuf, 1) == ' ' or ord(string_char_at(linebuf, 1)) == 9)) +{ + if (line == 1) + { + errored = true; + error = "First header line of response can't be a continuation, right?"; + return false; + } + headerValue = ds_map_find_value(responseHeaders, string_lower(headerName)) + + string_copy(linebuf, 2, string_length(linebuf) - 1); +} +// "Each header field consists +// of a name followed by a colon (":") and the field value. Field names +// are case-insensitive. The field value MAY be preceded by any amount +// of LWS, though a single SP is preferred." +else +{ + var colonPos; + colonPos = string_pos(':', linebuf); + if (colonPos == 0) + { + errored = true; + error = "No colon in a header line of response"; + return false; + } + headerName = string_copy(linebuf, 1, colonPos - 1); + headerValue = string_copy(linebuf, colonPos + 1, string_length(linebuf) - colonPos); + // "The field-content does not include any leading or trailing LWS: + // linear white space occurring before the first non-whitespace + // character of the field-value or after the last non-whitespace + // character of the field-value. Such leading or trailing LWS MAY be + // removed without changing the semantics of the field value." + while (string_char_at(headerValue, 1) == ' ' or ord(string_char_at(headerValue, 1)) == 9) + headerValue = string_copy(headerValue, 2, string_length(headerValue) - 1); +} + +ds_map_add(responseHeaders, string_lower(headerName), headerValue); + +if (string_lower(headerName) == 'content-length') +{ + responseBodySize = real(headerValue); + responseBodyProgress = 0; +} + +return true; + +#define __http_client_step +// *** +// This function forms part of Faucet HTTP v1.0 +// https://github.com/TazeTSchnitzel/Faucet-HTTP-Extension +// +// Copyright (c) 2013-2014, Andrea Faulds +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +// *** + +// Steps the HTTP client (needs to be called each step or so) + +var client; +client = argument0; + +with (client) +{ + if (errored) + exit; + + // Socket error + if (socket_has_error(socket)) + { + errored = true; + error = "Socket error: " + socket_error(socket); + return __http_client_destroy(); + } + + var available; + available = tcp_receive_available(socket); + + switch (state) + { + // Receiving lines + case 0: + if (!available && tcp_eof(socket)) + { + errored = true; + error = "Unexpected EOF when receiving headers/status code"; + return __http_client_destroy(); + } + + var bytesRead, c; + for (bytesRead = 1; bytesRead <= available; bytesRead += 1) + { + c = read_string(socket, 1); + // Reached end of line + // "HTTP/1.1 defines the sequence CR LF as the end-of-line marker for all + // protocol elements except the entity-body (see appendix 19.3 for + // tolerant applications)." + if (c == LF and string_char_at(linebuf, string_length(linebuf)) == CR) + { + // Strip trailing CR + linebuf = string_copy(linebuf, 1, string_length(linebuf) - 1); + // First line - status code + if (line == 0) + { + // "The first line of a Response message is the Status-Line, consisting + // of the protocol version followed by a numeric status code and its + // associated textual phrase, with each element separated by SP + // characters. No CR or LF is allowed except in the final CRLF sequence." + var httpVer, spacePos; + spacePos = string_pos(' ', linebuf); + if (spacePos == 0) + { + errored = true; + error = "No space in first line of response"; + return __http_client_destroy(); + } + httpVer = string_copy(linebuf, 1, spacePos); + linebuf = string_copy(linebuf, spacePos + 1, string_length(linebuf) - spacePos); + + spacePos = string_pos(' ', linebuf); + if (spacePos == 0) + { + errored = true; + error = "No second space in first line of response"; + return __http_client_destroy(); + } + statusCode = real(string_copy(linebuf, 1, spacePos)); + reasonPhrase = string_copy(linebuf, spacePos + 1, string_length(linebuf) - spacePos); + } + // Other line + else + { + // Blank line, end of response headers + if (linebuf == '') + { + state = 1; + // write remainder + write_buffer_part(responseBody, socket, available - bytesRead); + responseBodyProgress = available - bytesRead; + break; + } + // Header + else + { + if (!__http_parse_header(linebuf, line)) + return __http_client_destroy(); + } + } + + linebuf = ''; + line += 1; + } + else + linebuf += c; + } + break; + // Receiving response body + case 1: + write_buffer(responseBody, socket); + responseBodyProgress += available; + if (tcp_eof(socket)) + { + if (ds_map_exists(responseHeaders, 'transfer-encoding')) + { + if (ds_map_find_value(responseHeaders, 'transfer-encoding') == 'chunked') + { + // Chunked transfer, let's decode it + var actualResponseBody, actualResponseSize; + actualResponseBody = buffer_create(); + actualResponseBodySize = 0; + + // Parse chunks + // chunk = chunk-size [ chunk-extension ] CRLF + // chunk-data CRLF + // chunk-size = 1*HEX + while (buffer_bytes_left(responseBody)) + { + var chunkSize, c; + chunkSize = ''; + + // Read chunk size byte by byte + while (buffer_bytes_left(responseBody)) + { + c = read_string(responseBody, 1); + if (c == CR or c == ';') + break; + else + chunkSize += c; + } + + // We found a semicolon - beginning of chunk-extension + if (c == ';') + { + // skip all extension stuff + while (buffer_bytes_left(responseBody) && c != CR) + { + c = read_string(responseBody, 1); + } + } + // Reached end of header + if (c == CR) + { + c += read_string(responseBody, 1); + // Doesn't end in CRLF + if (c != CRLF) + { + errored = true; + error = 'header of chunk in chunked transfer did not end in CRLF'; + buffer_destroy(actualResponseBody); + return __http_client_destroy(); + } + // chunk-size is empty - something's up! + if (chunkSize == '') + { + errored = true; + error = 'empty chunk-size in a chunked transfer'; + buffer_destroy(actualResponseBody); + return __http_client_destroy(); + } + chunkSize = __http_parse_hex(chunkSize); + // Parsing of size failed - not hex? + if (chunkSize == -1) + { + errored = true; + error = 'chunk-size was not hexadecimal in a chunked transfer'; + buffer_destroy(actualResponseBody); + return __http_client_destroy(); + } + // Is the chunk bigger than the remaining response? + if (chunkSize + 2 > buffer_bytes_left(responseBody)) + { + errored = true; + error = 'chunk-size was greater than remaining data in a chunked transfer'; + buffer_destroy(actualResponseBody); + return __http_client_destroy(); + } + // OK, everything's good, read the chunk + write_buffer_part(actualResponseBody, responseBody, chunkSize); + actualResponseBodySize += chunkSize; + // Check for CRLF + if (read_string(responseBody, 2) != CRLF) + { + errored = true; + error = 'chunk did not end in CRLF in a chunked transfer'; + return __http_client_destroy(); + } + } + else + { + errored = true; + error = 'did not find CR after reading chunk header in a chunked transfer, Faucet HTTP bug?'; + return __http_client_destroy(); + } + // if the chunk size is zero, then it was the last chunk + if (chunkSize == 0 + // trailer headers will be present + and ds_map_exists(responseHeaders, 'trailer')) + { + // Parse header lines + var line; + line = 1; + while (buffer_bytes_left(responseBody)) + { + var linebuf; + linebuf = ''; + while (buffer_bytes_left(responseBody)) + { + c = read_string(responseBody, 1); + if (c != CR) + linebuf += c; + else + break; + } + c += read_string(responseBody, 1); + if (c != CRLF) + { + errored = true; + error = 'trailer header did not end in CRLF in a chunked transfer'; + return __http_client_destroy(); + } + if (!__http_parse_header(linebuf, line)) + return __http_client_destroy(); + line += 1; + } + } + } + responseBodySize = actualResponseBodySize; + buffer_destroy(responseBody); + responseBody = actualResponseBody; + } + else + { + errored = true; + error = 'Unsupported Transfer-Encoding: "' + ds_map_find_value(responseHaders, 'transfer-encoding') + '"'; + return __http_client_destroy(); + } + } + else if (responseBodySize != -1) + { + if (responseBodyProgress < responseBodySize) + { + errored = true; + error = "Unexpected EOF, response body size is less than expected"; + return __http_client_destroy(); + } + } + // 301 Moved Permanently/302 Found/303 See Other/307 Moved Temporarily + if (statusCode == 301 or statusCode == 302 or statusCode == 303 or statusCode == 307) + { + if (ds_map_exists(responseHeaders, 'location')) + { + var location, resolved; + location = ds_map_find_value(responseHeaders, 'location'); + resolved = __http_resolve_url(requestUrl, location); + // Resolving URL didn't fail and it's http:// + if (resolved != '' and string_copy(resolved, 1, 7) == 'http://') + { + // Restart request + __http_client_destroy(); + __http_prepare_request(client, resolved, requestHeaders); + } + else + { + errored = true; + error = "301, 302, 303 or 307 response with invalid or unsupported Location URL ('" + location + "') - can't redirect"; + return __http_client_destroy(); + } + exit; + } + else + { + errored = true; + error = "301, 302, 303 or 307 response without Location header - can't redirect"; + return __http_client_destroy(); + } + } + else + state = 2; + } + break; + // Done. + case 2: + break; + } +} + +#define __http_client_destroy +// *** +// This function forms part of Faucet HTTP v1.0 +// https://github.com/TazeTSchnitzel/Faucet-HTTP-Extension +// +// Copyright (c) 2013-2014, Andrea Faulds +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +// *** + +// Clears up contents of an httpClient prior to destruction or after error + +if (!destroyed) { + socket_destroy(socket); + buffer_destroy(responseBody); + ds_map_destroy(responseHeaders); +} +destroyed = true; + +#define http_new_get +// *** +// This function forms part of Faucet HTTP v1.0 +// https://github.com/TazeTSchnitzel/Faucet-HTTP-Extension +// +// Copyright (c) 2013-2014, Andrea Faulds +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +// *** + +// Makes a GET HTTP request +// real http_new_get(string url) + +// url - URL to send GET request to + +// Return value is an HttpClient instance that can be passed to +// fct_http_request_status etc. +// (errors on failure to parse URL) + +var url, client; + +url = argument0; + +if (!variable_global_exists('__HttpClient')) + __http_init(); + +client = instance_create(0, 0, global.__HttpClient); +__http_prepare_request(client, url, -1); +return client; + +#define http_new_get_ex +// *** +// This function forms part of Faucet HTTP v1.0 +// https://github.com/TazeTSchnitzel/Faucet-HTTP-Extension +// +// Copyright (c) 2013-2014, Andrea Faulds +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +// *** + +// Makes a GET HTTP request with custom headers +// real http_new_get_ex(string url, real headers) + +// url - URL to send GET request to +// headers - ds_map of extra headers to send + +// Return value is an HttpClient instance that can be passed to +// fct_http_request_status etc. +// (errors on failure to parse URL) + +var url, headers, client; + +url = argument0; +headers = argument1; + +if (!variable_global_exists('__HttpClient')) + __http_init(); + +client = instance_create(0, 0, global.__HttpClient); +__http_prepare_request(client, url, headers); +return client; + +#define http_step +// *** +// This function forms part of Faucet HTTP v1.0 +// https://github.com/TazeTSchnitzel/Faucet-HTTP-Extension +// +// Copyright (c) 2013-2014, Andrea Faulds +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +// *** + +// Steps the HTTP client. This is what makes everything actually happen. +// Call it each step. Returns whether or not the request has finished. +// real http_step(real client) + +// client - HttpClient object + +// Return value is either: +// 0 - In progress +// 1 - Done or Errored + +// Example usage: +// req = http_new_get("http://example.com/x.txt"); +// while (http_step(req)) {} +// if (http_status_code(req) != 200) { +// // Errored! +// } else { +// // Hasn't errored, do stuff here. +// } + +var client; +client = argument0; + +__http_client_step(client); + +if (client.errored || client.state == 2) + return 1; +else + return 0; + +#define http_status_code +// *** +// This function forms part of Faucet HTTP v1.0 +// https://github.com/TazeTSchnitzel/Faucet-HTTP-Extension +// +// Copyright (c) 2013-2014, Andrea Faulds +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +// *** + +// Gets the status code +// real http_status_code(real client) + +// client - HttpClient object + +// Return value is either: +// * 0, if the request has not yet finished +// * a negative value, if there was an internal Faucet HTTP error +// * a positive value, the status code of the HTTP request + +// "The Status-Code element is a 3-digit integer result code of the +// attempt to understand and satisfy the request. These codes are fully +// defined in section 10. The Reason-Phrase is intended to give a short +// textual description of the Status-Code. The Status-Code is intended +// for use by automata and the Reason-Phrase is intended for the human +// user. The client is not required to examine or display the Reason- +// Phrase." + +// See also: http_reason_phrase, gets the Reason-Phrase + +var client; +client = argument0; + +if (client.errored) + return -1; +else if (client.state == 2) + return client.statusCode; +else + return 0; + +#define http_reason_phrase +// *** +// This function forms part of Faucet HTTP v1.0 +// https://github.com/TazeTSchnitzel/Faucet-HTTP-Extension +// +// Copyright (c) 2013-2014, Andrea Faulds +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +// *** + +// Gets the reason phrase +// string http_reason_phrase(real client) + +// client - HttpClient object +// Return value is either: +// * "", if the request has not yet finished +// * an internal Faucet HTTP error message, if there was one +// * the reason phrase of the HTTP request + +// "The Status-Code element is a 3-digit integer result code of the +// attempt to understand and satisfy the request. These codes are fully +// defined in section 10. The Reason-Phrase is intended to give a short +// textual description of the Status-Code. The Status-Code is intended +// for use by automata and the Reason-Phrase is intended for the human +// user. The client is not required to examine or display the Reason- +// Phrase." + +// See also: http_status_code, gets the Status-Code + +var client; +client = argument0; + +if (client.errored) + return client.error; +else if (client.state == 2) + return client.reasonPhrase; +else + return ""; + +#define http_response_body +// *** +// This function forms part of Faucet HTTP v1.0 +// https://github.com/TazeTSchnitzel/Faucet-HTTP-Extension +// +// Copyright (c) 2013-2014, Andrea Faulds +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +// *** + +// Gets the response body returned by an HTTP request as a buffer +// real http_response_body(real client) + +// client - HttpClient object + +// Return value is a buffer if client hasn't errored and is finished + +var client; +client = argument0; + +return client.responseBody; + +#define http_response_body_size +// *** +// This function forms part of Faucet HTTP v1.0 +// https://github.com/TazeTSchnitzel/Faucet-HTTP-Extension +// +// Copyright (c) 2013-2014, Andrea Faulds +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +// *** + +// Gets the size of response body returned by an HTTP request +// real http_response_body_size(real client) + +// client - HttpClient object + +// Return value is the size in bytes, or -1 if we don't know or don't know yet + +// Call this each time you use the size - it may have changed in the case of redirect + +var client; +client = argument0; + +return client.responseBodySize; + +#define http_response_body_progress +// *** +// This function forms part of Faucet HTTP v1.0 +// https://github.com/TazeTSchnitzel/Faucet-HTTP-Extension +// +// Copyright (c) 2013-2014, Andrea Faulds +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +// *** + +// Gets the size of response body returned by an HTTP request which is so far downloaded +// real http_response_body_progress(real client) + +// client - HttpClient object + +// Return value is the size in bytes, or -1 if we haven't started yet or client has errored + +var client; +client = argument0; + +return client.responseBodyProgress; + +#define http_response_headers +// *** +// This function forms part of Faucet HTTP v1.0 +// https://github.com/TazeTSchnitzel/Faucet-HTTP-Extension +// +// Copyright (c) 2013-2014, Andrea Faulds +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +// *** + +// Gets the response headers returned by an HTTP request as a ds_map +// real http_response_headers(real client) + +// client - HttpClient object + +// Return value is a ds_map if client hasn't errored and is finished + +// All headers will have lowercase keys +// The ds_map is owned by the HttpClient, do not use ds_map_destroy() yourself +// Call when the request has finished - otherwise may be incomplete or missing + +var client; +client = argument0; + +return client.responseHeaders; + +#define http_destroy +// *** +// This function forms part of Faucet HTTP v1.0 +// https://github.com/TazeTSchnitzel/Faucet-HTTP-Extension +// +// Copyright (c) 2013-2014, Andrea Faulds +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +// *** + +// Cleans up HttpClient +// void http_destroy(real client) + +// client - HttpClient object + +var client; +client = argument0; + +with (client) +{ + __http_client_destroy(); + instance_destroy(); +} + diff --git a/samples/Game Maker Language/game_init.gml b/samples/Game Maker Language/game_init.gml new file mode 100644 index 00000000..4f5012d2 --- /dev/null +++ b/samples/Game Maker Language/game_init.gml @@ -0,0 +1,484 @@ +/* + Originally from /Source/gg2/Scripts/game_init.gml in Gang Garrison 2 + + Copyright (C) 2008-2013 Faucet Software + http://www.ganggarrison.com + + This program is free software; + you can redistribute it and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of the License, or (at your option) + any later version. + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU General Public License for more details. + You should have received a copy of the GNU General Public License along with this program; if not, + see . + + Additional permission under GNU GPL version 3 section 7 + If you modify this Program, or any covered work, by linking or combining it with the Game Maker runtime library, + the 39dll library/extension, Hobbel's Download Manager DLL, or modified versions of these libraries, + the licensors of this Program grant you additional permission to convey the resulting work. +*/ + +// Returns true if the game is successfully initialized, false if there was an error and we should quit. +{ + instance_create(0,0,RoomChangeObserver); + set_little_endian_global(true); + if file_exists("game_errors.log") file_delete("game_errors.log"); + if file_exists("last_plugin.log") file_delete("last_plugin.log"); + + // Delete old left-over files created by the updater + var backupFilename; + backupFilename = file_find_first("gg2-old.delete.me.*", 0); + while(backupFilename != "") + { + file_delete(backupFilename); + backupFilename = file_find_next(); + } + file_find_close(); + + var customMapRotationFile, restart; + restart = false; + + //import wav files for music + global.MenuMusic=sound_add(choose("Music/menumusic1.wav","Music/menumusic2.wav","Music/menumusic3.wav","Music/menumusic4.wav","Music/menumusic5.wav","Music/menumusic6.wav"), 1, true); + global.IngameMusic=sound_add("Music/ingamemusic.wav", 1, true); + global.FaucetMusic=sound_add("Music/faucetmusic.wav", 1, true); + if(global.MenuMusic != -1) + sound_volume(global.MenuMusic, 0.8); + if(global.IngameMusic != -1) + sound_volume(global.IngameMusic, 0.8); + if(global.FaucetMusic != -1) + sound_volume(global.FaucetMusic, 0.8); + + global.sendBuffer = buffer_create(); + global.tempBuffer = buffer_create(); + global.HudCheck = false; + global.map_rotation = ds_list_create(); + + global.CustomMapCollisionSprite = -1; + + window_set_region_scale(-1, false); + + ini_open("gg2.ini"); + global.playerName = ini_read_string("Settings", "PlayerName", "Player"); + if string_count("#",global.playerName) > 0 global.playerName = "Player"; + global.playerName = string_copy(global.playerName, 0, min(string_length(global.playerName), MAX_PLAYERNAME_LENGTH)); + global.fullscreen = ini_read_real("Settings", "Fullscreen", 0); + global.useLobbyServer = ini_read_real("Settings", "UseLobby", 1); + global.hostingPort = ini_read_real("Settings", "HostingPort", 8190); + global.music = ini_read_real("Settings", "Music", ini_read_real("Settings", "IngameMusic", MUSIC_BOTH)); + global.playerLimit = ini_read_real("Settings", "PlayerLimit", 10); + //thy playerlimit shalt not exceed 48! + if (global.playerLimit > 48) + { + if (global.dedicatedMode != 1) + show_message("Warning: Player Limit cannot exceed 48. It has been set to 48"); + global.playerLimit = 48; + ini_write_real("Settings", "PlayerLimit", 48); + } + global.multiClientLimit = ini_read_real("Settings", "MultiClientLimit", 3); + global.particles = ini_read_real("Settings", "Particles", PARTICLES_NORMAL); + global.gibLevel = ini_read_real("Settings", "Gib Level", 3); + global.killCam = ini_read_real("Settings", "Kill Cam", 1); + global.monitorSync = ini_read_real("Settings", "Monitor Sync", 0); + if global.monitorSync == 1 set_synchronization(true); + else set_synchronization(false); + global.medicRadar = ini_read_real("Settings", "Healer Radar", 1); + global.showHealer = ini_read_real("Settings", "Show Healer", 1); + global.showHealing = ini_read_real("Settings", "Show Healing", 1); + global.showHealthBar = ini_read_real("Settings", "Show Healthbar", 0); + global.showTeammateStats = ini_read_real("Settings", "Show Extra Teammate Stats", 0); + global.serverPluginsPrompt = ini_read_real("Settings", "ServerPluginsPrompt", 1); + global.restartPrompt = ini_read_real("Settings", "RestartPrompt", 1); + //user HUD settings + global.timerPos=ini_read_real("Settings","Timer Position", 0) + global.killLogPos=ini_read_real("Settings","Kill Log Position", 0) + global.kothHudPos=ini_read_real("Settings","KoTH HUD Position", 0) + global.clientPassword = ""; + // for admin menu + customMapRotationFile = ini_read_string("Server", "MapRotation", ""); + global.shuffleRotation = ini_read_real("Server", "ShuffleRotation", 1); + global.timeLimitMins = max(1, min(255, ini_read_real("Server", "Time Limit", 15))); + global.serverPassword = ini_read_string("Server", "Password", ""); + global.mapRotationFile = customMapRotationFile; + global.dedicatedMode = ini_read_real("Server", "Dedicated", 0); + global.serverName = ini_read_string("Server", "ServerName", "My Server"); + global.welcomeMessage = ini_read_string("Server", "WelcomeMessage", ""); + global.caplimit = max(1, min(255, ini_read_real("Server", "CapLimit", 5))); + global.caplimitBkup = global.caplimit; + global.autobalance = ini_read_real("Server", "AutoBalance",1); + global.Server_RespawntimeSec = ini_read_real("Server", "Respawn Time", 5); + global.rewardKey = unhex(ini_read_string("Haxxy", "RewardKey", "")); + global.rewardId = ini_read_string("Haxxy", "RewardId", ""); + global.mapdownloadLimitBps = ini_read_real("Server", "Total bandwidth limit for map downloads in bytes per second", 50000); + global.updaterBetaChannel = ini_read_real("General", "UpdaterBetaChannel", isBetaVersion()); + global.attemptPortForward = ini_read_real("Server", "Attempt UPnP Forwarding", 0); + global.serverPluginList = ini_read_string("Server", "ServerPluginList", ""); + global.serverPluginsRequired = ini_read_real("Server", "ServerPluginsRequired", 0); + if (string_length(global.serverPluginList) > 254) { + show_message("Error: Server plugin list cannot exceed 254 characters"); + return false; + } + var CrosshairFilename, CrosshairRemoveBG; + CrosshairFilename = ini_read_string("Settings", "CrosshairFilename", ""); + CrosshairRemoveBG = ini_read_real("Settings", "CrosshairRemoveBG", 1); + global.queueJumping = ini_read_real("Settings", "Queued Jumping", 0); + + global.backgroundHash = ini_read_string("Background", "BackgroundHash", "default"); + global.backgroundTitle = ini_read_string("Background", "BackgroundTitle", ""); + global.backgroundURL = ini_read_string("Background", "BackgroundURL", ""); + global.backgroundShowVersion = ini_read_real("Background", "BackgroundShowVersion", true); + + readClasslimitsFromIni(); + + global.currentMapArea=1; + global.totalMapAreas=1; + global.setupTimer=1800; + global.joinedServerName=""; + global.serverPluginsInUse=false; + // Create plugin packet maps + global.pluginPacketBuffers = ds_map_create(); + global.pluginPacketPlayers = ds_map_create(); + + ini_write_string("Settings", "PlayerName", global.playerName); + ini_write_real("Settings", "Fullscreen", global.fullscreen); + ini_write_real("Settings", "UseLobby", global.useLobbyServer); + ini_write_real("Settings", "HostingPort", global.hostingPort); + ini_key_delete("Settings", "IngameMusic"); + ini_write_real("Settings", "Music", global.music); + ini_write_real("Settings", "PlayerLimit", global.playerLimit); + ini_write_real("Settings", "MultiClientLimit", global.multiClientLimit); + ini_write_real("Settings", "Particles", global.particles); + ini_write_real("Settings", "Gib Level", global.gibLevel); + ini_write_real("Settings", "Kill Cam", global.killCam); + ini_write_real("Settings", "Monitor Sync", global.monitorSync); + ini_write_real("Settings", "Healer Radar", global.medicRadar); + ini_write_real("Settings", "Show Healer", global.showHealer); + ini_write_real("Settings", "Show Healing", global.showHealing); + ini_write_real("Settings", "Show Healthbar", global.showHealthBar); + ini_write_real("Settings", "Show Extra Teammate Stats", global.showTeammateStats); + ini_write_real("Settings", "Timer Position", global.timerPos); + ini_write_real("Settings", "Kill Log Position", global.killLogPos); + ini_write_real("Settings", "KoTH HUD Position", global.kothHudPos); + ini_write_real("Settings", "ServerPluginsPrompt", global.serverPluginsPrompt); + ini_write_real("Settings", "RestartPrompt", global.restartPrompt); + ini_write_string("Server", "MapRotation", customMapRotationFile); + ini_write_real("Server", "ShuffleRotation", global.shuffleRotation); + ini_write_real("Server", "Dedicated", global.dedicatedMode); + ini_write_string("Server", "ServerName", global.serverName); + ini_write_string("Server", "WelcomeMessage", global.welcomeMessage); + ini_write_real("Server", "CapLimit", global.caplimit); + ini_write_real("Server", "AutoBalance", global.autobalance); + ini_write_real("Server", "Respawn Time", global.Server_RespawntimeSec); + ini_write_real("Server", "Total bandwidth limit for map downloads in bytes per second", global.mapdownloadLimitBps); + ini_write_real("Server", "Time Limit", global.timeLimitMins); + ini_write_string("Server", "Password", global.serverPassword); + ini_write_real("General", "UpdaterBetaChannel", global.updaterBetaChannel); + ini_write_real("Server", "Attempt UPnP Forwarding", global.attemptPortForward); + ini_write_string("Server", "ServerPluginList", global.serverPluginList); + ini_write_real("Server", "ServerPluginsRequired", global.serverPluginsRequired); + ini_write_string("Settings", "CrosshairFilename", CrosshairFilename); + ini_write_real("Settings", "CrosshairRemoveBG", CrosshairRemoveBG); + ini_write_real("Settings", "Queued Jumping", global.queueJumping); + + ini_write_string("Background", "BackgroundHash", global.backgroundHash); + ini_write_string("Background", "BackgroundTitle", global.backgroundTitle); + ini_write_string("Background", "BackgroundURL", global.backgroundURL); + ini_write_real("Background", "BackgroundShowVersion", global.backgroundShowVersion); + + ini_write_real("Classlimits", "Scout", global.classlimits[CLASS_SCOUT]) + ini_write_real("Classlimits", "Pyro", global.classlimits[CLASS_PYRO]) + ini_write_real("Classlimits", "Soldier", global.classlimits[CLASS_SOLDIER]) + ini_write_real("Classlimits", "Heavy", global.classlimits[CLASS_HEAVY]) + ini_write_real("Classlimits", "Demoman", global.classlimits[CLASS_DEMOMAN]) + ini_write_real("Classlimits", "Medic", global.classlimits[CLASS_MEDIC]) + ini_write_real("Classlimits", "Engineer", global.classlimits[CLASS_ENGINEER]) + ini_write_real("Classlimits", "Spy", global.classlimits[CLASS_SPY]) + ini_write_real("Classlimits", "Sniper", global.classlimits[CLASS_SNIPER]) + ini_write_real("Classlimits", "Quote", global.classlimits[CLASS_QUOTE]) + + //screw the 0 index we will start with 1 + //map_truefort + maps[1] = ini_read_real("Maps", "ctf_truefort", 1); + //map_2dfort + maps[2] = ini_read_real("Maps", "ctf_2dfort", 2); + //map_conflict + maps[3] = ini_read_real("Maps", "ctf_conflict", 3); + //map_classicwell + maps[4] = ini_read_real("Maps", "ctf_classicwell", 4); + //map_waterway + maps[5] = ini_read_real("Maps", "ctf_waterway", 5); + //map_orange + maps[6] = ini_read_real("Maps", "ctf_orange", 6); + //map_dirtbowl + maps[7] = ini_read_real("Maps", "cp_dirtbowl", 7); + //map_egypt + maps[8] = ini_read_real("Maps", "cp_egypt", 8); + //arena_montane + maps[9] = ini_read_real("Maps", "arena_montane", 9); + //arena_lumberyard + maps[10] = ini_read_real("Maps", "arena_lumberyard", 10); + //gen_destroy + maps[11] = ini_read_real("Maps", "gen_destroy", 11); + //koth_valley + maps[12] = ini_read_real("Maps", "koth_valley", 12); + //koth_corinth + maps[13] = ini_read_real("Maps", "koth_corinth", 13); + //koth_harvest + maps[14] = ini_read_real("Maps", "koth_harvest", 14); + //dkoth_atalia + maps[15] = ini_read_real("Maps", "dkoth_atalia", 15); + //dkoth_sixties + maps[16] = ini_read_real("Maps", "dkoth_sixties", 16); + + //Server respawn time calculator. Converts each second to a frame. (read: multiply by 30 :hehe:) + if (global.Server_RespawntimeSec == 0) + { + global.Server_Respawntime = 1; + } + else + { + global.Server_Respawntime = global.Server_RespawntimeSec * 30; + } + + // I have to include this, or the client'll complain about an unknown variable. + global.mapchanging = false; + + ini_write_real("Maps", "ctf_truefort", maps[1]); + ini_write_real("Maps", "ctf_2dfort", maps[2]); + ini_write_real("Maps", "ctf_conflict", maps[3]); + ini_write_real("Maps", "ctf_classicwell", maps[4]); + ini_write_real("Maps", "ctf_waterway", maps[5]); + ini_write_real("Maps", "ctf_orange", maps[6]); + ini_write_real("Maps", "cp_dirtbowl", maps[7]); + ini_write_real("Maps", "cp_egypt", maps[8]); + ini_write_real("Maps", "arena_montane", maps[9]); + ini_write_real("Maps", "arena_lumberyard", maps[10]); + ini_write_real("Maps", "gen_destroy", maps[11]); + ini_write_real("Maps", "koth_valley", maps[12]); + ini_write_real("Maps", "koth_corinth", maps[13]); + ini_write_real("Maps", "koth_harvest", maps[14]); + ini_write_real("Maps", "dkoth_atalia", maps[15]); + ini_write_real("Maps", "dkoth_sixties", maps[16]); + + ini_close(); + + // parse the protocol version UUID for later use + global.protocolUuid = buffer_create(); + parseUuid(PROTOCOL_UUID, global.protocolUuid); + + global.gg2lobbyId = buffer_create(); + parseUuid(GG2_LOBBY_UUID, global.gg2lobbyId); + + // Create abbreviations array for rewards use + initRewards() + +var a, IPRaw, portRaw; +doubleCheck=0; +global.launchMap = ""; + + for(a = 1; a <= parameter_count(); a += 1) + { + if (parameter_string(a) == "-dedicated") + { + global.dedicatedMode = 1; + } + else if (parameter_string(a) == "-restart") + { + restart = true; + } + else if (parameter_string(a) == "-server") + { + IPRaw = parameter_string(a+1); + if (doubleCheck == 1) + { + doubleCheck = 2; + } + else + { + doubleCheck = 1; + } + } + else if (parameter_string(a) == "-port") + { + portRaw = parameter_string(a+1); + if (doubleCheck == 1) + { + doubleCheck = 2; + } + else + { + doubleCheck = 1; + } + } + else if (parameter_string(a) == "-map") + { + global.launchMap = parameter_string(a+1); + global.dedicatedMode = 1; + } + } + + if (doubleCheck == 2) + { + global.serverPort = real(portRaw); + global.serverIP = IPRaw; + global.isHost = false; + instance_create(0,0,Client); + } + + global.customMapdesginated = 0; + + // if the user defined a valid map rotation file, then load from there + + if(customMapRotationFile != "" && file_exists(customMapRotationFile) && global.launchMap == "") { + global.customMapdesginated = 1; + var fileHandle, i, mapname; + fileHandle = file_text_open_read(customMapRotationFile); + for(i = 1; !file_text_eof(fileHandle); i += 1) { + mapname = file_text_read_string(fileHandle); + // remove leading whitespace from the string + while(string_char_at(mapname, 0) == " " || string_char_at(mapname, 0) == chr(9)) { // while it starts with a space or tab + mapname = string_delete(mapname, 0, 1); // delete that space or tab + } + if(mapname != "" && string_char_at(mapname, 0) != "#") { // if it's not blank and it's not a comment (starting with #) + ds_list_add(global.map_rotation, mapname); + } + file_text_readln(fileHandle); + } + file_text_close(fileHandle); + } + + else if (global.launchMap != "") && (global.dedicatedMode == 1) + { + ds_list_add(global.map_rotation, global.launchMap); + } + + else { // else load from the ini file Maps section + //Set up the map rotation stuff + var i, sort_list; + sort_list = ds_list_create(); + for(i=1; i <= 16; i += 1) { + if(maps[i] != 0) ds_list_add(sort_list, ((100*maps[i])+i)); + } + ds_list_sort(sort_list, 1); + + // translate the numbers back into the names they represent + for(i=0; i < ds_list_size(sort_list); i += 1) { + switch(ds_list_find_value(sort_list, i) mod 100) { + case 1: + ds_list_add(global.map_rotation, "ctf_truefort"); + break; + case 2: + ds_list_add(global.map_rotation, "ctf_2dfort"); + break; + case 3: + ds_list_add(global.map_rotation, "ctf_conflict"); + break; + case 4: + ds_list_add(global.map_rotation, "ctf_classicwell"); + break; + case 5: + ds_list_add(global.map_rotation, "ctf_waterway"); + break; + case 6: + ds_list_add(global.map_rotation, "ctf_orange"); + break; + case 7: + ds_list_add(global.map_rotation, "cp_dirtbowl"); + break; + case 8: + ds_list_add(global.map_rotation, "cp_egypt"); + break; + case 9: + ds_list_add(global.map_rotation, "arena_montane"); + break; + case 10: + ds_list_add(global.map_rotation, "arena_lumberyard"); + break; + case 11: + ds_list_add(global.map_rotation, "gen_destroy"); + break; + case 12: + ds_list_add(global.map_rotation, "koth_valley"); + break; + case 13: + ds_list_add(global.map_rotation, "koth_corinth"); + break; + case 14: + ds_list_add(global.map_rotation, "koth_harvest"); + break; + case 15: + ds_list_add(global.map_rotation, "dkoth_atalia"); + break; + case 16: + ds_list_add(global.map_rotation, "dkoth_sixties"); + break; + + } + } + ds_list_destroy(sort_list); + } + + window_set_fullscreen(global.fullscreen); + + global.gg2Font = font_add_sprite(gg2FontS,ord("!"),false,0); + global.countFont = font_add_sprite(countFontS, ord("0"),false,2); + draw_set_font(global.gg2Font); + cursor_sprite = CrosshairS; + + if(!directory_exists(working_directory + "\Maps")) directory_create(working_directory + "\Maps"); + + instance_create(0, 0, AudioControl); + instance_create(0, 0, SSControl); + + // custom dialog box graphics + message_background(popupBackgroundB); + message_button(popupButtonS); + message_text_font("Century",9,c_white,1); + message_button_font("Century",9,c_white,1); + message_input_font("Century",9,c_white,0); + + //Key Mapping + ini_open("controls.gg2"); + global.jump = ini_read_real("Controls", "jump", ord("W")); + global.down = ini_read_real("Controls", "down", ord("S")); + global.left = ini_read_real("Controls", "left", ord("A")); + global.right = ini_read_real("Controls", "right", ord("D")); + global.attack = ini_read_real("Controls", "attack", MOUSE_LEFT); + global.special = ini_read_real("Controls", "special", MOUSE_RIGHT); + global.taunt = ini_read_real("Controls", "taunt", ord("F")); + global.chat1 = ini_read_real("Controls", "chat1", ord("Z")); + global.chat2 = ini_read_real("Controls", "chat2", ord("X")); + global.chat3 = ini_read_real("Controls", "chat3", ord("C")); + global.medic = ini_read_real("Controls", "medic", ord("E")); + global.drop = ini_read_real("Controls", "drop", ord("B")); + global.changeTeam = ini_read_real("Controls", "changeTeam", ord("N")); + global.changeClass = ini_read_real("Controls", "changeClass", ord("M")); + global.showScores = ini_read_real("Controls", "showScores", vk_shift); + ini_close(); + + calculateMonthAndDay(); + + if(!directory_exists(working_directory + "\Plugins")) directory_create(working_directory + "\Plugins"); + loadplugins(); + + /* Windows 8 is known to crash GM when more than three (?) sounds play at once + * We'll store the kernel version (Win8 is 6.2, Win7 is 6.1) and check it there. + ***/ + registry_set_root(1); // HKLM + global.NTKernelVersion = real(registry_read_string_ext("\SOFTWARE\Microsoft\Windows NT\CurrentVersion\", "CurrentVersion")); // SIC + + if (file_exists(CrosshairFilename)) + { + sprite_replace(CrosshairS,CrosshairFilename,1,CrosshairRemoveBG,false,0,0); + sprite_set_offset(CrosshairS,sprite_get_width(CrosshairS)/2,sprite_get_height(CrosshairS)/2); + } + if(global.dedicatedMode == 1) { + AudioControlToggleMute(); + room_goto_fix(Menu); + } else if(restart) { + room_goto_fix(Menu); + } + return true; +} diff --git a/samples/Game Maker Language/loadserverplugins.gml b/samples/Game Maker Language/loadserverplugins.gml new file mode 100644 index 00000000..26a26758 --- /dev/null +++ b/samples/Game Maker Language/loadserverplugins.gml @@ -0,0 +1,252 @@ +/* + Originally from /Source/gg2/Scripts/Plugins/loadserverplugins.gml in Gang Garrison 2 + + Copyright (C) 2008-2013 Faucet Software + http://www.ganggarrison.com + + This program is free software; + you can redistribute it and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of the License, or (at your option) + any later version. + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU General Public License for more details. + You should have received a copy of the GNU General Public License along with this program; if not, + see . + + Additional permission under GNU GPL version 3 section 7 + If you modify this Program, or any covered work, by linking or combining it with the Game Maker runtime library, + the 39dll library/extension, Hobbel's Download Manager DLL, or modified versions of these libraries, + the licensors of this Program grant you additional permission to convey the resulting work. +*/ + +// loads plugins from ganggarrison.com asked for by server +// argument0 - comma separated plugin list (pluginname@md5hash) +// returns true on success, false on failure +var list, hashList, text, i, pluginname, pluginhash, realhash, url, handle, filesize, progress, tempfile, tempdir, failed, lastContact, isCached; + +failed = false; +list = ds_list_create(); +lastContact = 0; +isCached = false; +isDebug = false; +hashList = ds_list_create(); + +// split plugin list string +list = split(argument0, ','); + +// Split hashes from plugin names +for (i = 0; i < ds_list_size(list); i += 1) +{ + text = ds_list_find_value(list, i); + pluginname = string_copy(text, 0, string_pos("@", text) - 1); + pluginhash = string_copy(text, string_pos("@", text) + 1, string_length(text) - string_pos("@", text)); + ds_list_replace(list, i, pluginname); + ds_list_add(hashList, pluginhash); +} + +// Check plugin names and check for duplicates +for (i = 0; i < ds_list_size(list); i += 1) +{ + pluginname = ds_list_find_value(list, i); + + // invalid plugin name + if (!checkpluginname(pluginname)) + { + show_message('Error loading server-sent plugins - invalid plugin name:#"' + pluginname + '"'); + return false; + } + // is duplicate + else if (ds_list_find_index(list, pluginname) != i) + { + show_message('Error loading server-sent plugins - duplicate plugin:#"' + pluginname + '"'); + return false; + } +} + +// Download plugins +for (i = 0; i < ds_list_size(list); i += 1) +{ + pluginname = ds_list_find_value(list, i); + pluginhash = ds_list_find_value(hashList, i); + isDebug = file_exists(working_directory + "\ServerPluginsDebug\" + pluginname + ".zip"); + isCached = file_exists(working_directory + "\ServerPluginsCache\" + pluginname + "@" + pluginhash); + tempfile = temp_directory + "\" + pluginname + ".zip.tmp"; + tempdir = temp_directory + "\" + pluginname + ".tmp"; + + // check to see if we have a local copy for debugging + if (isDebug) + { + file_copy(working_directory + "\ServerPluginsDebug\" + pluginname + ".zip", tempfile); + // show warning + if (global.isHost) + { + show_message( + "Warning: server-sent plugin '" + + pluginname + + "' is being loaded from ServerPluginsDebug. Make sure clients have the same version, else they may be unable to connect." + ); + } + else + { + show_message( + "Warning: server-sent plugin '" + + pluginname + + "' is being loaded from ServerPluginsDebug. Make sure the server has the same version, else you may be unable to connect." + ); + } + } + // otherwise, check if we have it cached + else if (isCached) + { + file_copy(working_directory + "\ServerPluginsCache\" + pluginname + "@" + pluginhash, tempfile); + } + // otherwise, download as usual + else + { + // construct the URL + // http://www.ganggarrison.com/plugins/$PLUGINNAME$@$PLUGINHASH$.zip) + url = PLUGIN_SOURCE + pluginname + "@" + pluginhash + ".zip"; + + // let's make the download handle + handle = httpGet(url, -1); + + // download it + while (!httpRequestStatus(handle)) { + // prevent game locking up + io_handle(); + + httpRequestStep(handle); + + if (!global.isHost) { + // send ping if we haven't contacted server in 20 seconds + // we need to do this to keep the connection open + if (current_time-lastContact > 20000) { + write_byte(global.serverSocket, PING); + socket_send(global.serverSocket); + lastContact = current_time; + } + } + + // draw progress bar since they may be waiting a while + filesize = httpRequestResponseBodySize(handle); + progress = httpRequestResponseBodyProgress(handle); + draw_background_ext(background_index[0], 0, 0, background_xscale[0], background_yscale[0], 0, c_white, 1); + draw_set_color(c_white); + draw_set_alpha(1); + draw_set_halign(fa_left); + draw_rectangle(50, 550, 300, 560, 2); + draw_text(50, 530, "Downloading server-sent plugin " + string(i + 1) + "/" + string(ds_list_size(list)) + ' - "' + pluginname + '"'); + if (filesize != -1) + draw_rectangle(50, 550, 50 + progress / filesize * 250, 560, 0); + screen_refresh(); + } + + // errored + if (httpRequestStatus(handle) == 2) + { + show_message('Error loading server-sent plugins - download failed for "' + pluginname + '":#' + httpRequestError(handle)); + failed = true; + break; + } + + // request failed + if (httpRequestStatusCode(handle) != 200) + { + show_message('Error loading server-sent plugins - download failed for "' + pluginname + '":#' + string(httpRequestStatusCode(handle)) + ' ' + httpRequestReasonPhrase(handle)); + failed = true; + break; + } + else + { + write_buffer_to_file(httpRequestResponseBody(handle), tempfile); + if (!file_exists(tempfile)) + { + show_message('Error loading server-sent plugins - download failed for "' + pluginname + '":# No such file?'); + failed = true; + break; + } + } + + httpRequestDestroy(handle); + } + + // check file integrity + realhash = GG2DLL_compute_MD5(tempfile); + if (realhash != pluginhash) + { + show_message('Error loading server-sent plugins - integrity check failed (MD5 hash mismatch) for:#"' + pluginname + '"'); + failed = true; + break; + } + + // don't try to cache debug plugins + if (!isDebug) + { + // add to cache if we don't already have it + if (!file_exists(working_directory + "\ServerPluginsCache\" + pluginname + "@" + pluginhash)) + { + // make sure directory exists + if (!directory_exists(working_directory + "\ServerPluginsCache")) + { + directory_create(working_directory + "\ServerPluginsCache"); + } + // store in cache + file_copy(tempfile, working_directory + "\ServerPluginsCache\" + pluginname + "@" + pluginhash); + } + } + + // let's get 7-zip to extract the files + extractzip(tempfile, tempdir); + + // if the directory doesn't exist, extracting presumably failed + if (!directory_exists(tempdir)) + { + show_message('Error loading server-sent plugins - extracting zip failed for:#"' + pluginname + '"'); + failed = true; + break; + } +} + +if (!failed) +{ + // Execute plugins + for (i = 0; i < ds_list_size(list); i += 1) + { + pluginname = ds_list_find_value(list, i); + tempdir = temp_directory + "\" + pluginname + ".tmp"; + + // Debugging facility, so we know *which* plugin caused compile/execute error + fp = file_text_open_write(working_directory + "\last_plugin.log"); + file_text_write_string(fp, pluginname); + file_text_close(fp); + + // packetID is (i), so make queues for it + ds_map_add(global.pluginPacketBuffers, i, ds_queue_create()); + ds_map_add(global.pluginPacketPlayers, i, ds_queue_create()); + + // Execute plugin + execute_file( + // the plugin's main gml file must be in the root of the zip + // it is called plugin.gml + tempdir + "\plugin.gml", + // the plugin needs to know where it is + // so the temporary directory is passed as first argument + tempdir, + // the plugin needs to know its packetID + // so it is passed as the second argument + i + ); + } +} + +// Delete last plugin log +file_delete(working_directory + "\last_plugin.log"); + +// Get rid of plugin list +ds_list_destroy(list); + +// Get rid of plugin hash list +ds_list_destroy(hashList); + +return !failed; diff --git a/samples/Game Maker Language/processClientCommands.gml b/samples/Game Maker Language/processClientCommands.gml new file mode 100644 index 00000000..6c241d4b --- /dev/null +++ b/samples/Game Maker Language/processClientCommands.gml @@ -0,0 +1,384 @@ +/* + Originally from /Source/gg2/Scripts/GameServer/processClientCommands.gml in Gang Garrison 2 + + Copyright (C) 2008-2013 Faucet Software + http://www.ganggarrison.com + + This program is free software; + you can redistribute it and/or modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3 of the License, or (at your option) + any later version. + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU General Public License for more details. + You should have received a copy of the GNU General Public License along with this program; if not, + see . + + Additional permission under GNU GPL version 3 section 7 + If you modify this Program, or any covered work, by linking or combining it with the Game Maker runtime library, + the 39dll library/extension, Hobbel's Download Manager DLL, or modified versions of these libraries, + the licensors of this Program grant you additional permission to convey the resulting work. +*/ + +var player, playerId, commandLimitRemaining; + +player = argument0; +playerId = argument1; + +// To prevent players from flooding the server, limit the number of commands to process per step and player. +commandLimitRemaining = 10; + +with(player) { + if(!variable_local_exists("commandReceiveState")) { + // 0: waiting for command byte. + // 1: waiting for command data length (1 byte) + // 2: waiting for command data. + commandReceiveState = 0; + commandReceiveExpectedBytes = 1; + commandReceiveCommand = 0; + } +} + +while(commandLimitRemaining > 0) { + var socket; + socket = player.socket; + if(!tcp_receive(socket, player.commandReceiveExpectedBytes)) { + return 0; + } + + switch(player.commandReceiveState) + { + case 0: + player.commandReceiveCommand = read_ubyte(socket); + switch(commandBytes[player.commandReceiveCommand]) { + case commandBytesInvalidCommand: + // Invalid byte received. Wait for another command byte. + break; + + case commandBytesPrefixLength1: + player.commandReceiveState = 1; + player.commandReceiveExpectedBytes = 1; + break; + + case commandBytesPrefixLength2: + player.commandReceiveState = 3; + player.commandReceiveExpectedBytes = 2; + break; + + default: + player.commandReceiveState = 2; + player.commandReceiveExpectedBytes = commandBytes[player.commandReceiveCommand]; + break; + } + break; + + case 1: + player.commandReceiveState = 2; + player.commandReceiveExpectedBytes = read_ubyte(socket); + break; + + case 3: + player.commandReceiveState = 2; + player.commandReceiveExpectedBytes = read_ushort(socket); + break; + + case 2: + player.commandReceiveState = 0; + player.commandReceiveExpectedBytes = 1; + commandLimitRemaining -= 1; + + switch(player.commandReceiveCommand) + { + case PLAYER_LEAVE: + socket_destroy(player.socket); + player.socket = -1; + break; + + case PLAYER_CHANGECLASS: + var class; + class = read_ubyte(socket); + if(getCharacterObject(player.team, class) != -1) + { + if(player.object != -1) + { + with(player.object) + { + if (collision_point(x,y,SpawnRoom,0,0) < 0) + { + if (!instance_exists(lastDamageDealer) || lastDamageDealer == player) + { + sendEventPlayerDeath(player, player, noone, BID_FAREWELL); + doEventPlayerDeath(player, player, noone, BID_FAREWELL); + } + else + { + var assistant; + assistant = secondToLastDamageDealer; + if (lastDamageDealer.object) + if (lastDamageDealer.object.healer) + assistant = lastDamageDealer.object.healer; + sendEventPlayerDeath(player, lastDamageDealer, assistant, FINISHED_OFF); + doEventPlayerDeath(player, lastDamageDealer, assistant, FINISHED_OFF); + } + } + else + instance_destroy(); + + } + } + else if(player.alarm[5]<=0) + player.alarm[5] = 1; + class = checkClasslimits(player, player.team, class); + player.class = class; + ServerPlayerChangeclass(playerId, player.class, global.sendBuffer); + } + break; + + case PLAYER_CHANGETEAM: + var newTeam, balance, redSuperiority; + newTeam = read_ubyte(socket); + + redSuperiority = 0 //calculate which team is bigger + with(Player) + { + if(team == TEAM_RED) + redSuperiority += 1; + else if(team == TEAM_BLUE) + redSuperiority -= 1; + } + if(redSuperiority > 0) + balance = TEAM_RED; + else if(redSuperiority < 0) + balance = TEAM_BLUE; + else + balance = -1; + + if(balance != newTeam) + { + if(getCharacterObject(newTeam, player.class) != -1 or newTeam==TEAM_SPECTATOR) + { + if(player.object != -1) + { + with(player.object) + { + if (!instance_exists(lastDamageDealer) || lastDamageDealer == player) + { + sendEventPlayerDeath(player, player, noone, BID_FAREWELL); + doEventPlayerDeath(player, player, noone, BID_FAREWELL); + } + else + { + var assistant; + assistant = secondToLastDamageDealer; + if (lastDamageDealer.object) + if (lastDamageDealer.object.healer) + assistant = lastDamageDealer.object.healer; + sendEventPlayerDeath(player, lastDamageDealer, assistant, FINISHED_OFF); + doEventPlayerDeath(player, lastDamageDealer, assistant, FINISHED_OFF); + } + } + player.alarm[5] = global.Server_Respawntime; + } + else if(player.alarm[5]<=0) + player.alarm[5] = 1; + var newClass; + newClass = checkClasslimits(player, newTeam, player.class); + if newClass != player.class + { + player.class = newClass; + ServerPlayerChangeclass(playerId, player.class, global.sendBuffer); + } + player.team = newTeam; + ServerPlayerChangeteam(playerId, player.team, global.sendBuffer); + ServerBalanceTeams(); + } + } + break; + + case CHAT_BUBBLE: + var bubbleImage; + bubbleImage = read_ubyte(socket); + if(global.aFirst) { + bubbleImage = 0; + } + write_ubyte(global.sendBuffer, CHAT_BUBBLE); + write_ubyte(global.sendBuffer, playerId); + write_ubyte(global.sendBuffer, bubbleImage); + + setChatBubble(player, bubbleImage); + break; + + case BUILD_SENTRY: + if(player.object != -1) + { + if(player.class == CLASS_ENGINEER + and collision_circle(player.object.x, player.object.y, 50, Sentry, false, true) < 0 + and player.object.nutsNBolts == 100 + and (collision_point(player.object.x,player.object.y,SpawnRoom,0,0) < 0) + and !player.sentry + and !player.object.onCabinet) + { + write_ubyte(global.sendBuffer, BUILD_SENTRY); + write_ubyte(global.sendBuffer, playerId); + write_ushort(global.serializeBuffer, round(player.object.x*5)); + write_ushort(global.serializeBuffer, round(player.object.y*5)); + write_byte(global.serializeBuffer, player.object.image_xscale); + buildSentry(player, player.object.x, player.object.y, player.object.image_xscale); + } + } + break; + + case DESTROY_SENTRY: + with(player.sentry) + instance_destroy(); + break; + + case DROP_INTEL: + if (player.object != -1) + { + if (player.object.intel) + { + sendEventDropIntel(player); + doEventDropIntel(player); + } + } + break; + + case OMNOMNOMNOM: + if(player.object != -1) { + if(!player.humiliated + and !player.object.taunting + and !player.object.omnomnomnom + and player.object.canEat + and player.class==CLASS_HEAVY) + { + write_ubyte(global.sendBuffer, OMNOMNOMNOM); + write_ubyte(global.sendBuffer, playerId); + with(player.object) + { + omnomnomnom = true; + if player.team == TEAM_RED { + omnomnomnomindex=0; + omnomnomnomend=31; + } else if player.team==TEAM_BLUE { + omnomnomnomindex=32; + omnomnomnomend=63; + } + xscale=image_xscale; + } + } + } + break; + + case TOGGLE_ZOOM: + if player.object != -1 { + if player.class == CLASS_SNIPER { + write_ubyte(global.sendBuffer, TOGGLE_ZOOM); + write_ubyte(global.sendBuffer, playerId); + toggleZoom(player.object); + } + } + break; + + case PLAYER_CHANGENAME: + var nameLength; + nameLength = socket_receivebuffer_size(socket); + if(nameLength > MAX_PLAYERNAME_LENGTH) + { + write_ubyte(player.socket, KICK); + write_ubyte(player.socket, KICK_NAME); + socket_destroy(player.socket); + player.socket = -1; + } + else + { + with(player) + { + if(variable_local_exists("lastNamechange")) + if(current_time - lastNamechange < 1000) + break; + lastNamechange = current_time; + name = read_string(socket, nameLength); + if(string_count("#",name) > 0) + { + name = "I <3 Bacon"; + } + write_ubyte(global.sendBuffer, PLAYER_CHANGENAME); + write_ubyte(global.sendBuffer, playerId); + write_ubyte(global.sendBuffer, string_length(name)); + write_string(global.sendBuffer, name); + } + } + break; + + case INPUTSTATE: + if(player.object != -1) + { + with(player.object) + { + keyState = read_ubyte(socket); + netAimDirection = read_ushort(socket); + aimDirection = netAimDirection*360/65536; + event_user(1); + } + } + break; + + case REWARD_REQUEST: + player.rewardId = read_string(socket, socket_receivebuffer_size(socket)); + player.challenge = rewardCreateChallenge(); + + write_ubyte(socket, REWARD_CHALLENGE_CODE); + write_binstring(socket, player.challenge); + break; + + case REWARD_CHALLENGE_RESPONSE: + var answer, i, authbuffer; + answer = read_binstring(socket, 16); + + with(player) + if(variable_local_exists("challenge") and variable_local_exists("rewardId")) + rewardAuthStart(player, answer, challenge, true, rewardId); + + break; + + case PLUGIN_PACKET: + var packetID, buf, success; + + packetID = read_ubyte(socket); + + // get packet data + buf = buffer_create(); + write_buffer_part(buf, socket, socket_receivebuffer_size(socket)); + + // try to enqueue + success = _PluginPacketPush(packetID, buf, player); + + // if it returned false, packetID was invalid + if (!success) + { + // clear up buffer + buffer_destroy(buf); + + // kick player + write_ubyte(player.socket, KICK); + write_ubyte(player.socket, KICK_BAD_PLUGIN_PACKET); + socket_destroy(player.socket); + player.socket = -1; + } + break; + + case CLIENT_SETTINGS: + var mirror; + mirror = read_ubyte(player.socket); + player.queueJump = mirror; + + write_ubyte(global.sendBuffer, CLIENT_SETTINGS); + write_ubyte(global.sendBuffer, playerId); + write_ubyte(global.sendBuffer, mirror); + break; + + } + break; + } +}