| 1620 | } |
| 1621 | |
| 1622 | void ParseScriptFile(char *scriptName, int scriptID) |
| 1623 | { |
| 1624 | |
| 1625 | jumpTableStackPos = 0; |
| 1626 | lineID = 0; |
| 1627 | aliasCount = COMMONALIAS_COUNT; |
| 1628 | for (int i = COMMONALIAS_COUNT; i < ALIAS_COUNT; ++i) { |
| 1629 | StrCopy(aliases[i].name, ""); |
| 1630 | StrCopy(aliases[i].value, ""); |
| 1631 | } |
| 1632 | |
| 1633 | char scriptPath[0x40]; |
| 1634 | StrCopy(scriptPath, "Data/Scripts/"); |
| 1635 | StrAdd(scriptPath, scriptName); |
| 1636 | FileInfo info; |
| 1637 | if (LoadFile(scriptPath, &info)) { |
| 1638 | objectScriptList[scriptID].mobile = true; // all parsed scripts will use the updated format, old format support is purely for pc bytecode |
| 1639 | int readMode = READMODE_NORMAL; |
| 1640 | int parseMode = PARSEMODE_SCOPELESS; |
| 1641 | char prevChar = 0; |
| 1642 | char curChar = 0; |
| 1643 | int switchDeep = 0; |
| 1644 | while (readMode < READMODE_EOF) { |
| 1645 | int textPos = 0; |
| 1646 | readMode = READMODE_NORMAL; |
| 1647 | while (readMode < READMODE_ENDLINE) { |
| 1648 | prevChar = curChar; |
| 1649 | FileRead(&curChar, 1); |
| 1650 | if (readMode == READMODE_STRING) { |
| 1651 | if (curChar == '\t' || curChar == '\r' || curChar == '\n' || curChar == ';' || readMode >= READMODE_COMMENTLINE) { |
| 1652 | if ((curChar == '\n' && prevChar != '\r') || (curChar == '\n' && prevChar == '\r')) { |
| 1653 | readMode = READMODE_ENDLINE; |
| 1654 | scriptText[textPos] = 0; |
| 1655 | } |
| 1656 | } |
| 1657 | else if (curChar != '/' || textPos <= 0) { |
| 1658 | scriptText[textPos++] = curChar; |
| 1659 | if (curChar == '"') |
| 1660 | readMode = READMODE_NORMAL; |
| 1661 | } |
| 1662 | else if (curChar == '/' && prevChar == '/') { |
| 1663 | readMode = READMODE_COMMENTLINE; |
| 1664 | scriptText[--textPos] = 0; |
| 1665 | } |
| 1666 | else { |
| 1667 | scriptText[textPos++] = curChar; |
| 1668 | } |
| 1669 | } |
| 1670 | else if (curChar == ' ' || curChar == '\t' || curChar == '\r' || curChar == '\n' || curChar == ';' |
| 1671 | || readMode >= READMODE_COMMENTLINE) { |
| 1672 | if ((curChar == '\n' && prevChar != '\r') || (curChar == '\n' && prevChar == '\r')) { |
| 1673 | readMode = READMODE_ENDLINE; |
| 1674 | scriptText[textPos] = 0; |
| 1675 | } |
| 1676 | } |
| 1677 | else if (curChar != '/' || textPos <= 0) { |
| 1678 | scriptText[textPos++] = curChar; |
| 1679 | if (curChar == '"' && !readMode) |
no test coverage detected