From c4fcffe436fbfb5b0f3b7be2e5ee103ec74932f7 Mon Sep 17 00:00:00 2001 From: Rene Stoeckel Date: Wed, 22 Sep 2004 19:22:16 +0000 Subject: major refactoring in game, server and client package --- src/jake2/qcommon/Cbuf.java | 452 ++++++++++++++++++++++---------------------- 1 file changed, 228 insertions(+), 224 deletions(-) (limited to 'src/jake2/qcommon/Cbuf.java') diff --git a/src/jake2/qcommon/Cbuf.java b/src/jake2/qcommon/Cbuf.java index f78577b..baa7090 100644 --- a/src/jake2/qcommon/Cbuf.java +++ b/src/jake2/qcommon/Cbuf.java @@ -2,245 +2,249 @@ * Cbuf.java * Copyright (C) 2003 * - * $Id: Cbuf.java,v 1.4 2004-09-18 13:07:46 hzi Exp $ + * $Id: Cbuf.java,v 1.5 2004-09-22 19:22:09 salomo Exp $ */ /* -Copyright (C) 1997-2001 Id Software, Inc. + Copyright (C) 1997-2001 Id Software, Inc. -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 2 -of the License, or (at your option) any later version. + 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 2 + 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. + 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. + 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, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ + */ package jake2.qcommon; import jake2.Defines; import jake2.Globals; import jake2.game.Cmd; +import jake2.util.Lib; /** * Cbuf */ public final class Cbuf { - /** - * - */ - public static void Init() { - SZ.Init(Globals.cmd_text, Globals.cmd_text_buf, Globals.cmd_text_buf.length); - } - - public static void InsertText(String text) { - - byte[] temp = null; - int templen = 0; - - // copy off any commands still remaining in the exec buffer - templen = Globals.cmd_text.cursize; - if (templen != 0) { - temp = new byte[templen]; - System.arraycopy(Globals.cmd_text.data, 0, temp, 0, templen); - SZ.Clear(Globals.cmd_text); - } - - // add the entire text of the file - Cbuf.AddText(text); - - // add the copied off data - if (templen != 0) { - SZ.Write(Globals.cmd_text, temp, templen); - temp = null; - } - } - - /** - * @param clear - */ - static void AddEarlyCommands(boolean clear) { - - for (int i = 0; i < Com.Argc(); i++) { - String s = Com.Argv(i); - if (!s.equals("+set")) - continue; - Cbuf.AddText("set " + Com.Argv(i + 1) + " " + Com.Argv(i + 2) + "\n"); - if (clear) { - Com.ClearArgv(i); - Com.ClearArgv(i + 1); - Com.ClearArgv(i + 2); - } - i += 2; - } - } - - /** - * @return - */ - static boolean AddLateCommands() { - int i; - int j; - boolean ret = false; - - // build the combined string to parse from - int s = 0; - int argc = Com.Argc(); - for (i = 1; i < argc; i++) { - s += Com.Argv(i).length(); - } - if (s == 0) - return false; - - String text = ""; - for (i = 1; i < argc; i++) { - text += Com.Argv(i); - if (i != argc - 1) - text += " "; - } - - // pull out the commands - String build = ""; - for (i = 0; i < text.length(); i++) { - if (text.charAt(i) == '+') { - i++; - - for (j = i;(text.charAt(j) != '+') && (text.charAt(j) != '-') && j < text.length(); j++); - - build += text.substring(i, j - 1); - build += "\n"; - - i = j - 1; - } - } - - ret = (build.length() != 0); - if (ret) - Cbuf.AddText(build); - - text = null; - build = null; - - return ret; - } - - /** - * @param text - */ - public static void AddText(String text) { - int l = text.length(); - - if (Globals.cmd_text.cursize + l >= Globals.cmd_text.maxsize) { - Com.Printf("Cbuf_AddText: overflow\n"); - return; - } - SZ.Write(Globals.cmd_text, text.getBytes(), l); - } - - /** - * - */ - public static void Execute() { - - byte[] text = null; - byte[] line = new byte[1024]; - - Globals.alias_count = 0; // don't allow infinite alias loops - - while (Globals.cmd_text.cursize != 0) { - // find a \n or ; line break - text = Globals.cmd_text.data; - - int quotes = 0; - int i; - - for (i = 0; i < Globals.cmd_text.cursize; i++) { - if (text[i] == '"') - quotes++; - if (!(quotes % 2 != 0) && text[i] == ';') - break; // don't break if inside a quoted string - if (text[i] == '\n') - break; - } - - System.arraycopy(text, 0, line, 0, i); - line[i] = 0; - - // delete the text from the command buffer and move remaining commands down - // this is necessary because commands (exec, alias) can insert data at the - // beginning of the text buffer - - if (i == Globals.cmd_text.cursize) - Globals.cmd_text.cursize = 0; - else { - i++; - Globals.cmd_text.cursize -= i; - byte[] tmp = new byte[Globals.cmd_text.cursize]; - - System.arraycopy(text, i, tmp, 0, Globals.cmd_text.cursize); - System.arraycopy(tmp, 0, text, 0, Globals.cmd_text.cursize); - text[Globals.cmd_text.cursize] = '\0'; - - } - - // execute the command line - int len = jake2.util.Lib.strlen(line); - - String cmd = new String(line, 0, len); - Cmd.ExecuteString(cmd); - - if (Globals.cmd_wait) { - // skip out while text still remains in buffer, leaving it - // for next frame - Globals.cmd_wait = false; - break; - } - } - } - - public static void ExecuteText(int exec_when, String text) { - switch(exec_when) { - case Defines.EXEC_NOW: - Cmd.ExecuteString(text); - break; - case Defines.EXEC_INSERT: - Cbuf.InsertText(text); - break; - case Defines.EXEC_APPEND: - Cbuf.AddText(text); - break; - default: - Com.Error(Defines.ERR_FATAL, "Cbuf_ExecuteText: bad exec_when"); - } - } - - /* - ============ - Cbuf_CopyToDefer - ============ - */ - public static void CopyToDefer() { - System.arraycopy(Globals.cmd_text_buf, 0, Globals.defer_text_buf, 0, Globals.cmd_text.cursize); - Globals.defer_text_buf[Globals.cmd_text.cursize] = 0; - Globals.cmd_text.cursize = 0; - } - - /* - ============ - Cbuf_InsertFromDefer - ============ - */ - public static void InsertFromDefer() { - InsertText(new String(Globals.defer_text_buf).trim()); - Globals.defer_text_buf[0] = 0; - } - -} + /** + * + */ + public static void Init() { + SZ.Init(Globals.cmd_text, Globals.cmd_text_buf, + Globals.cmd_text_buf.length); + } + + public static void InsertText(String text) { + + byte[] temp = null; + int templen = 0; + + // copy off any commands still remaining in the exec buffer + templen = Globals.cmd_text.cursize; + if (templen != 0) { + temp = new byte[templen]; + System.arraycopy(Globals.cmd_text.data, 0, temp, 0, templen); + SZ.Clear(Globals.cmd_text); + } + + // add the entire text of the file + Cbuf.AddText(text); + + // add the copied off data + if (templen != 0) { + SZ.Write(Globals.cmd_text, temp, templen); + temp = null; + } + } + + /** + * @param clear + */ + static void AddEarlyCommands(boolean clear) { + + for (int i = 0; i < Com.Argc(); i++) { + String s = Com.Argv(i); + if (!s.equals("+set")) + continue; + Cbuf.AddText("set " + Com.Argv(i + 1) + " " + Com.Argv(i + 2) + + "\n"); + if (clear) { + Com.ClearArgv(i); + Com.ClearArgv(i + 1); + Com.ClearArgv(i + 2); + } + i += 2; + } + } + + /** + * @return + */ + static boolean AddLateCommands() { + int i; + int j; + boolean ret = false; + + // build the combined string to parse from + int s = 0; + int argc = Com.Argc(); + for (i = 1; i < argc; i++) { + s += Com.Argv(i).length(); + } + if (s == 0) + return false; + + String text = ""; + for (i = 1; i < argc; i++) { + text += Com.Argv(i); + if (i != argc - 1) + text += " "; + } + + // pull out the commands + String build = ""; + for (i = 0; i < text.length(); i++) { + if (text.charAt(i) == '+') { + i++; + + for (j = i; (text.charAt(j) != '+') && (text.charAt(j) != '-') + && j < text.length(); j++) + ; + + build += text.substring(i, j - 1); + build += "\n"; + + i = j - 1; + } + } + + ret = (build.length() != 0); + if (ret) + Cbuf.AddText(build); + + text = null; + build = null; + + return ret; + } + + /** + * @param text + */ + public static void AddText(String text) { + int l = text.length(); + + if (Globals.cmd_text.cursize + l >= Globals.cmd_text.maxsize) { + Com.Printf("Cbuf_AddText: overflow\n"); + return; + } + SZ.Write(Globals.cmd_text, text.getBytes(), l); + } + + /** + * + */ + public static void Execute() { + + byte[] text = null; + byte[] line = new byte[1024]; + + Globals.alias_count = 0; // don't allow infinite alias loops + + while (Globals.cmd_text.cursize != 0) { + // find a \n or ; line break + text = Globals.cmd_text.data; + + int quotes = 0; + int i; + + for (i = 0; i < Globals.cmd_text.cursize; i++) { + if (text[i] == '"') + quotes++; + if (!(quotes % 2 != 0) && text[i] == ';') + break; // don't break if inside a quoted string + if (text[i] == '\n') + break; + } + + System.arraycopy(text, 0, line, 0, i); + line[i] = 0; + + // delete the text from the command buffer and move remaining + // commands down + // this is necessary because commands (exec, alias) can insert data + // at the + // beginning of the text buffer + + if (i == Globals.cmd_text.cursize) + Globals.cmd_text.cursize = 0; + else { + i++; + Globals.cmd_text.cursize -= i; + byte[] tmp = new byte[Globals.cmd_text.cursize]; + + System.arraycopy(text, i, tmp, 0, Globals.cmd_text.cursize); + System.arraycopy(tmp, 0, text, 0, Globals.cmd_text.cursize); + text[Globals.cmd_text.cursize] = '\0'; + + } + + // execute the command line + int len = Lib.strlen(line); + + String cmd = new String(line, 0, len); + Cmd.ExecuteString(cmd); + + if (Globals.cmd_wait) { + // skip out while text still remains in buffer, leaving it + // for next frame + Globals.cmd_wait = false; + break; + } + } + } + + public static void ExecuteText(int exec_when, String text) { + switch (exec_when) { + case Defines.EXEC_NOW: + Cmd.ExecuteString(text); + break; + case Defines.EXEC_INSERT: + Cbuf.InsertText(text); + break; + case Defines.EXEC_APPEND: + Cbuf.AddText(text); + break; + default: + Com.Error(Defines.ERR_FATAL, "Cbuf_ExecuteText: bad exec_when"); + } + } + + /* + * ============ Cbuf_CopyToDefer ============ + */ + public static void CopyToDefer() { + System.arraycopy(Globals.cmd_text_buf, 0, Globals.defer_text_buf, 0, + Globals.cmd_text.cursize); + Globals.defer_text_buf[Globals.cmd_text.cursize] = 0; + Globals.cmd_text.cursize = 0; + } + + /* + * ============ Cbuf_InsertFromDefer ============ + */ + public static void InsertFromDefer() { + InsertText(new String(Globals.defer_text_buf).trim()); + Globals.defer_text_buf[0] = 0; + } + +} \ No newline at end of file -- cgit v1.2.3