1.1 --- a/core/smn_bitbuffer.cpp Fri Jul 11 06:51:21 2008 +0000
1.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
1.3 @@ -1,705 +0,0 @@
1.4 -/**
1.5 - * vim: set ts=4 :
1.6 - * =============================================================================
1.7 - * SourceMod
1.8 - * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
1.9 - * =============================================================================
1.10 - *
1.11 - * This program is free software; you can redistribute it and/or modify it under
1.12 - * the terms of the GNU General Public License, version 3.0, as published by the
1.13 - * Free Software Foundation.
1.14 - *
1.15 - * This program is distributed in the hope that it will be useful, but WITHOUT
1.16 - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
1.17 - * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
1.18 - * details.
1.19 - *
1.20 - * You should have received a copy of the GNU General Public License along with
1.21 - * this program. If not, see <http://www.gnu.org/licenses/>.
1.22 - *
1.23 - * As a special exception, AlliedModders LLC gives you permission to link the
1.24 - * code of this program (as well as its derivative works) to "Half-Life 2," the
1.25 - * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
1.26 - * by the Valve Corporation. You must obey the GNU General Public License in
1.27 - * all respects for all other code used. Additionally, AlliedModders LLC grants
1.28 - * this exception to all derivative works. AlliedModders LLC defines further
1.29 - * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
1.30 - * or <http://www.sourcemod.net/license.php>.
1.31 - *
1.32 - * Version: $Id$
1.33 - */
1.34 -
1.35 -#include "sourcemod.h"
1.36 -#include "HandleSys.h"
1.37 -#include <bitbuf.h>
1.38 -#include <vector.h>
1.39 -
1.40 -static cell_t smn_BfWriteBool(IPluginContext *pCtx, const cell_t *params)
1.41 -{
1.42 - Handle_t hndl = static_cast<Handle_t>(params[1]);
1.43 - HandleError herr;
1.44 - HandleSecurity sec;
1.45 - bf_write *pBitBuf;
1.46 -
1.47 - sec.pOwner = NULL;
1.48 - sec.pIdentity = g_pCoreIdent;
1.49 -
1.50 - if ((herr=g_HandleSys.ReadHandle(hndl, g_WrBitBufType, &sec, (void **)&pBitBuf))
1.51 - != HandleError_None)
1.52 - {
1.53 - return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr);
1.54 - }
1.55 -
1.56 - pBitBuf->WriteOneBit(params[2]);
1.57 -
1.58 - return 1;
1.59 -}
1.60 -
1.61 -static cell_t smn_BfWriteByte(IPluginContext *pCtx, const cell_t *params)
1.62 -{
1.63 - Handle_t hndl = static_cast<Handle_t>(params[1]);
1.64 - HandleError herr;
1.65 - HandleSecurity sec;
1.66 - bf_write *pBitBuf;
1.67 -
1.68 - sec.pOwner = NULL;
1.69 - sec.pIdentity = g_pCoreIdent;
1.70 -
1.71 - if ((herr=g_HandleSys.ReadHandle(hndl, g_WrBitBufType, &sec, (void **)&pBitBuf))
1.72 - != HandleError_None)
1.73 - {
1.74 - return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr);
1.75 - }
1.76 -
1.77 - pBitBuf->WriteByte(params[2]);
1.78 -
1.79 - return 1;
1.80 -}
1.81 -
1.82 -static cell_t smn_BfWriteChar(IPluginContext *pCtx, const cell_t *params)
1.83 -{
1.84 - Handle_t hndl = static_cast<Handle_t>(params[1]);
1.85 - HandleError herr;
1.86 - HandleSecurity sec;
1.87 - bf_write *pBitBuf;
1.88 -
1.89 - sec.pOwner = NULL;
1.90 - sec.pIdentity = g_pCoreIdent;
1.91 -
1.92 - if ((herr=g_HandleSys.ReadHandle(hndl, g_WrBitBufType, &sec, (void **)&pBitBuf))
1.93 - != HandleError_None)
1.94 - {
1.95 - return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr);
1.96 - }
1.97 -
1.98 - pBitBuf->WriteChar(params[2]);
1.99 -
1.100 - return 1;
1.101 -}
1.102 -
1.103 -static cell_t smn_BfWriteShort(IPluginContext *pCtx, const cell_t *params)
1.104 -{
1.105 - Handle_t hndl = static_cast<Handle_t>(params[1]);
1.106 - HandleError herr;
1.107 - HandleSecurity sec;
1.108 - bf_write *pBitBuf;
1.109 -
1.110 - sec.pOwner = NULL;
1.111 - sec.pIdentity = g_pCoreIdent;
1.112 -
1.113 - if ((herr=g_HandleSys.ReadHandle(hndl, g_WrBitBufType, &sec, (void **)&pBitBuf))
1.114 - != HandleError_None)
1.115 - {
1.116 - return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr);
1.117 - }
1.118 -
1.119 - pBitBuf->WriteShort(params[2]);
1.120 -
1.121 - return 1;
1.122 -}
1.123 -
1.124 -static cell_t smn_BfWriteWord(IPluginContext *pCtx, const cell_t *params)
1.125 -{
1.126 - Handle_t hndl = static_cast<Handle_t>(params[1]);
1.127 - HandleError herr;
1.128 - HandleSecurity sec;
1.129 - bf_write *pBitBuf;
1.130 -
1.131 - sec.pOwner = NULL;
1.132 - sec.pIdentity = g_pCoreIdent;
1.133 -
1.134 - if ((herr=g_HandleSys.ReadHandle(hndl, g_WrBitBufType, &sec, (void **)&pBitBuf))
1.135 - != HandleError_None)
1.136 - {
1.137 - return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr);
1.138 - }
1.139 -
1.140 - pBitBuf->WriteWord(params[2]);
1.141 -
1.142 - return 1;
1.143 -}
1.144 -
1.145 -static cell_t smn_BfWriteNum(IPluginContext *pCtx, const cell_t *params)
1.146 -{
1.147 - Handle_t hndl = static_cast<Handle_t>(params[1]);
1.148 - HandleError herr;
1.149 - HandleSecurity sec;
1.150 - bf_write *pBitBuf;
1.151 -
1.152 - sec.pOwner = NULL;
1.153 - sec.pIdentity = g_pCoreIdent;
1.154 -
1.155 - if ((herr=g_HandleSys.ReadHandle(hndl, g_WrBitBufType, &sec, (void **)&pBitBuf))
1.156 - != HandleError_None)
1.157 - {
1.158 - return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr);
1.159 - }
1.160 -
1.161 - pBitBuf->WriteLong(static_cast<long>(params[2]));
1.162 -
1.163 - return 1;
1.164 -}
1.165 -
1.166 -static cell_t smn_BfWriteFloat(IPluginContext *pCtx, const cell_t *params)
1.167 -{
1.168 - Handle_t hndl = static_cast<Handle_t>(params[1]);
1.169 - HandleError herr;
1.170 - HandleSecurity sec;
1.171 - bf_write *pBitBuf;
1.172 -
1.173 - sec.pOwner = NULL;
1.174 - sec.pIdentity = g_pCoreIdent;
1.175 -
1.176 - if ((herr=g_HandleSys.ReadHandle(hndl, g_WrBitBufType, &sec, (void **)&pBitBuf))
1.177 - != HandleError_None)
1.178 - {
1.179 - return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr);
1.180 - }
1.181 -
1.182 - pBitBuf->WriteFloat(sp_ctof(params[2]));
1.183 -
1.184 - return 1;
1.185 -}
1.186 -
1.187 -static cell_t smn_BfWriteString(IPluginContext *pCtx, const cell_t *params)
1.188 -{
1.189 - Handle_t hndl = static_cast<Handle_t>(params[1]);
1.190 - HandleError herr;
1.191 - HandleSecurity sec;
1.192 - bf_write *pBitBuf;
1.193 - int err;
1.194 -
1.195 - sec.pOwner = NULL;
1.196 - sec.pIdentity = g_pCoreIdent;
1.197 -
1.198 - if ((herr=g_HandleSys.ReadHandle(hndl, g_WrBitBufType, &sec, (void **)&pBitBuf))
1.199 - != HandleError_None)
1.200 - {
1.201 - return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr);
1.202 - }
1.203 -
1.204 - char *str;
1.205 - if ((err=pCtx->LocalToString(params[2], &str)) != SP_ERROR_NONE)
1.206 - {
1.207 - pCtx->ThrowNativeErrorEx(err, NULL);
1.208 - return 0;
1.209 - }
1.210 -
1.211 - pBitBuf->WriteString(str);
1.212 -
1.213 - return 1;
1.214 -}
1.215 -
1.216 -static cell_t smn_BfWriteEntity(IPluginContext *pCtx, const cell_t *params)
1.217 -{
1.218 - Handle_t hndl = static_cast<Handle_t>(params[1]);
1.219 - HandleError herr;
1.220 - HandleSecurity sec;
1.221 - bf_write *pBitBuf;
1.222 -
1.223 - sec.pOwner = NULL;
1.224 - sec.pIdentity = g_pCoreIdent;
1.225 -
1.226 - if ((herr=g_HandleSys.ReadHandle(hndl, g_WrBitBufType, &sec, (void **)&pBitBuf))
1.227 - != HandleError_None)
1.228 - {
1.229 - return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr);
1.230 - }
1.231 -
1.232 - pBitBuf->WriteShort(params[2]);
1.233 -
1.234 - return 1;
1.235 -}
1.236 -
1.237 -static cell_t smn_BfWriteAngle(IPluginContext *pCtx, const cell_t *params)
1.238 -{
1.239 - Handle_t hndl = static_cast<Handle_t>(params[1]);
1.240 - HandleError herr;
1.241 - HandleSecurity sec;
1.242 - bf_write *pBitBuf;
1.243 -
1.244 - sec.pOwner = NULL;
1.245 - sec.pIdentity = g_pCoreIdent;
1.246 -
1.247 - if ((herr=g_HandleSys.ReadHandle(hndl, g_WrBitBufType, &sec, (void **)&pBitBuf))
1.248 - != HandleError_None)
1.249 - {
1.250 - return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr);
1.251 - }
1.252 -
1.253 - pBitBuf->WriteBitAngle(sp_ctof(params[2]), params[3]);
1.254 -
1.255 - return 1;
1.256 -}
1.257 -
1.258 -static cell_t smn_BfWriteCoord(IPluginContext *pCtx, const cell_t *params)
1.259 -{
1.260 - Handle_t hndl = static_cast<Handle_t>(params[1]);
1.261 - HandleError herr;
1.262 - HandleSecurity sec;
1.263 - bf_write *pBitBuf;
1.264 -
1.265 - sec.pOwner = NULL;
1.266 - sec.pIdentity = g_pCoreIdent;
1.267 -
1.268 - if ((herr=g_HandleSys.ReadHandle(hndl, g_WrBitBufType, &sec, (void **)&pBitBuf))
1.269 - != HandleError_None)
1.270 - {
1.271 - return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr);
1.272 - }
1.273 -
1.274 - pBitBuf->WriteBitCoord(sp_ctof(params[2]));
1.275 -
1.276 - return 1;
1.277 -}
1.278 -
1.279 -static cell_t smn_BfWriteVecCoord(IPluginContext *pCtx, const cell_t *params)
1.280 -{
1.281 - Handle_t hndl = static_cast<Handle_t>(params[1]);
1.282 - HandleError herr;
1.283 - HandleSecurity sec;
1.284 - bf_write *pBitBuf;
1.285 -
1.286 - sec.pOwner = NULL;
1.287 - sec.pIdentity = g_pCoreIdent;
1.288 -
1.289 - if ((herr=g_HandleSys.ReadHandle(hndl, g_WrBitBufType, &sec, (void **)&pBitBuf))
1.290 - != HandleError_None)
1.291 - {
1.292 - return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr);
1.293 - }
1.294 -
1.295 - cell_t *pVec;
1.296 - pCtx->LocalToPhysAddr(params[2], &pVec);
1.297 - Vector vec(sp_ctof(pVec[0]), sp_ctof(pVec[1]), sp_ctof(pVec[2]));
1.298 - pBitBuf->WriteBitVec3Coord(vec);
1.299 -
1.300 - return 1;
1.301 -}
1.302 -
1.303 -static cell_t smn_BfWriteVecNormal(IPluginContext *pCtx, const cell_t *params)
1.304 -{
1.305 - Handle_t hndl = static_cast<Handle_t>(params[1]);
1.306 - HandleError herr;
1.307 - HandleSecurity sec;
1.308 - bf_write *pBitBuf;
1.309 -
1.310 - sec.pOwner = NULL;
1.311 - sec.pIdentity = g_pCoreIdent;
1.312 -
1.313 - if ((herr=g_HandleSys.ReadHandle(hndl, g_WrBitBufType, &sec, (void **)&pBitBuf))
1.314 - != HandleError_None)
1.315 - {
1.316 - return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr);
1.317 - }
1.318 -
1.319 - cell_t *pVec;
1.320 - pCtx->LocalToPhysAddr(params[2], &pVec);
1.321 - Vector vec(sp_ctof(pVec[0]), sp_ctof(pVec[1]), sp_ctof(pVec[2]));
1.322 - pBitBuf->WriteBitVec3Normal(vec);
1.323 -
1.324 - return 1;
1.325 -}
1.326 -
1.327 -static cell_t smn_BfWriteAngles(IPluginContext *pCtx, const cell_t *params)
1.328 -{
1.329 - Handle_t hndl = static_cast<Handle_t>(params[1]);
1.330 - HandleError herr;
1.331 - HandleSecurity sec;
1.332 - bf_write *pBitBuf;
1.333 -
1.334 - sec.pOwner = NULL;
1.335 - sec.pIdentity = g_pCoreIdent;
1.336 -
1.337 - if ((herr=g_HandleSys.ReadHandle(hndl, g_WrBitBufType, &sec, (void **)&pBitBuf))
1.338 - != HandleError_None)
1.339 - {
1.340 - return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr);
1.341 - }
1.342 -
1.343 - cell_t *pAng;
1.344 - pCtx->LocalToPhysAddr(params[2], &pAng);
1.345 - QAngle ang(sp_ctof(pAng[0]), sp_ctof(pAng[1]), sp_ctof(pAng[2]));
1.346 - pBitBuf->WriteBitAngles(ang);
1.347 -
1.348 - return 1;
1.349 -}
1.350 -
1.351 -static cell_t smn_BfReadBool(IPluginContext *pCtx, const cell_t *params)
1.352 -{
1.353 - Handle_t hndl = static_cast<Handle_t>(params[1]);
1.354 - HandleError herr;
1.355 - HandleSecurity sec;
1.356 - bf_read *pBitBuf;
1.357 -
1.358 - sec.pOwner = NULL;
1.359 - sec.pIdentity = g_pCoreIdent;
1.360 -
1.361 - if ((herr=g_HandleSys.ReadHandle(hndl, g_RdBitBufType, &sec, (void **)&pBitBuf))
1.362 - != HandleError_None)
1.363 - {
1.364 - return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr);
1.365 - }
1.366 -
1.367 - return pBitBuf->ReadOneBit() ? 1 : 0;
1.368 -}
1.369 -
1.370 -static cell_t smn_BfReadByte(IPluginContext *pCtx, const cell_t *params)
1.371 -{
1.372 - Handle_t hndl = static_cast<Handle_t>(params[1]);
1.373 - HandleError herr;
1.374 - HandleSecurity sec;
1.375 - bf_read *pBitBuf;
1.376 -
1.377 - sec.pOwner = NULL;
1.378 - sec.pIdentity = g_pCoreIdent;
1.379 -
1.380 - if ((herr=g_HandleSys.ReadHandle(hndl, g_RdBitBufType, &sec, (void **)&pBitBuf))
1.381 - != HandleError_None)
1.382 - {
1.383 - return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr);
1.384 - }
1.385 -
1.386 - return pBitBuf->ReadByte();
1.387 -}
1.388 -
1.389 -static cell_t smn_BfReadChar(IPluginContext *pCtx, const cell_t *params)
1.390 -{
1.391 - Handle_t hndl = static_cast<Handle_t>(params[1]);
1.392 - HandleError herr;
1.393 - HandleSecurity sec;
1.394 - bf_read *pBitBuf;
1.395 -
1.396 - sec.pOwner = NULL;
1.397 - sec.pIdentity = g_pCoreIdent;
1.398 -
1.399 - if ((herr=g_HandleSys.ReadHandle(hndl, g_RdBitBufType, &sec, (void **)&pBitBuf))
1.400 - != HandleError_None)
1.401 - {
1.402 - return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr);
1.403 - }
1.404 -
1.405 - return pBitBuf->ReadChar();
1.406 -}
1.407 -
1.408 -static cell_t smn_BfReadShort(IPluginContext *pCtx, const cell_t *params)
1.409 -{
1.410 - Handle_t hndl = static_cast<Handle_t>(params[1]);
1.411 - HandleError herr;
1.412 - HandleSecurity sec;
1.413 - bf_read *pBitBuf;
1.414 -
1.415 - sec.pOwner = NULL;
1.416 - sec.pIdentity = g_pCoreIdent;
1.417 -
1.418 - if ((herr=g_HandleSys.ReadHandle(hndl, g_RdBitBufType, &sec, (void **)&pBitBuf))
1.419 - != HandleError_None)
1.420 - {
1.421 - return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr);
1.422 - }
1.423 -
1.424 - return pBitBuf->ReadShort();
1.425 -}
1.426 -
1.427 -static cell_t smn_BfReadWord(IPluginContext *pCtx, const cell_t *params)
1.428 -{
1.429 - Handle_t hndl = static_cast<Handle_t>(params[1]);
1.430 - HandleError herr;
1.431 - HandleSecurity sec;
1.432 - bf_read *pBitBuf;
1.433 -
1.434 - sec.pOwner = NULL;
1.435 - sec.pIdentity = g_pCoreIdent;
1.436 -
1.437 - if ((herr=g_HandleSys.ReadHandle(hndl, g_RdBitBufType, &sec, (void **)&pBitBuf))
1.438 - != HandleError_None)
1.439 - {
1.440 - return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr);
1.441 - }
1.442 -
1.443 - return pBitBuf->ReadWord();
1.444 -}
1.445 -
1.446 -static cell_t smn_BfReadNum(IPluginContext *pCtx, const cell_t *params)
1.447 -{
1.448 - Handle_t hndl = static_cast<Handle_t>(params[1]);
1.449 - HandleError herr;
1.450 - HandleSecurity sec;
1.451 - bf_read *pBitBuf;
1.452 -
1.453 - sec.pOwner = NULL;
1.454 - sec.pIdentity = g_pCoreIdent;
1.455 -
1.456 - if ((herr=g_HandleSys.ReadHandle(hndl, g_RdBitBufType, &sec, (void **)&pBitBuf))
1.457 - != HandleError_None)
1.458 - {
1.459 - return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr);
1.460 - }
1.461 -
1.462 - return static_cast<cell_t>(pBitBuf->ReadLong());
1.463 -}
1.464 -
1.465 -static cell_t smn_BfReadFloat(IPluginContext *pCtx, const cell_t *params)
1.466 -{
1.467 - Handle_t hndl = static_cast<Handle_t>(params[1]);
1.468 - HandleError herr;
1.469 - HandleSecurity sec;
1.470 - bf_read *pBitBuf;
1.471 -
1.472 - sec.pOwner = NULL;
1.473 - sec.pIdentity = g_pCoreIdent;
1.474 -
1.475 - if ((herr=g_HandleSys.ReadHandle(hndl, g_RdBitBufType, &sec, (void **)&pBitBuf))
1.476 - != HandleError_None)
1.477 - {
1.478 - return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr);
1.479 - }
1.480 -
1.481 - return sp_ftoc(pBitBuf->ReadFloat());
1.482 -}
1.483 -
1.484 -static cell_t smn_BfReadString(IPluginContext *pCtx, const cell_t *params)
1.485 -{
1.486 - Handle_t hndl = static_cast<Handle_t>(params[1]);
1.487 - HandleError herr;
1.488 - HandleSecurity sec;
1.489 - bf_read *pBitBuf;
1.490 - int numChars = 0;
1.491 - char *buf;
1.492 -
1.493 - sec.pOwner = NULL;
1.494 - sec.pIdentity = g_pCoreIdent;
1.495 -
1.496 - if ((herr=g_HandleSys.ReadHandle(hndl, g_RdBitBufType, &sec, (void **)&pBitBuf))
1.497 - != HandleError_None)
1.498 - {
1.499 - return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr);
1.500 - }
1.501 -
1.502 - pCtx->LocalToPhysAddr(params[2], (cell_t **)&buf);
1.503 - pBitBuf->ReadString(buf, params[3], params[4] ? true : false, &numChars);
1.504 -
1.505 - if (pBitBuf->IsOverflowed())
1.506 - {
1.507 - return -numChars - 1;
1.508 - }
1.509 -
1.510 - return numChars;
1.511 -}
1.512 -
1.513 -static cell_t smn_BfReadEntity(IPluginContext *pCtx, const cell_t *params)
1.514 -{
1.515 - Handle_t hndl = static_cast<Handle_t>(params[1]);
1.516 - HandleError herr;
1.517 - HandleSecurity sec;
1.518 - bf_read *pBitBuf;
1.519 -
1.520 - sec.pOwner = NULL;
1.521 - sec.pIdentity = g_pCoreIdent;
1.522 -
1.523 - if ((herr=g_HandleSys.ReadHandle(hndl, g_RdBitBufType, &sec, (void **)&pBitBuf))
1.524 - != HandleError_None)
1.525 - {
1.526 - return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr);
1.527 - }
1.528 -
1.529 - return pBitBuf->ReadShort();
1.530 -}
1.531 -
1.532 -static cell_t smn_BfReadAngle(IPluginContext *pCtx, const cell_t *params)
1.533 -{
1.534 - Handle_t hndl = static_cast<Handle_t>(params[1]);
1.535 - HandleError herr;
1.536 - HandleSecurity sec;
1.537 - bf_read *pBitBuf;
1.538 -
1.539 - sec.pOwner = NULL;
1.540 - sec.pIdentity = g_pCoreIdent;
1.541 -
1.542 - if ((herr=g_HandleSys.ReadHandle(hndl, g_RdBitBufType, &sec, (void **)&pBitBuf))
1.543 - != HandleError_None)
1.544 - {
1.545 - return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr);
1.546 - }
1.547 -
1.548 - return sp_ftoc(pBitBuf->ReadBitAngle(params[2]));
1.549 -}
1.550 -
1.551 -static cell_t smn_BfReadCoord(IPluginContext *pCtx, const cell_t *params)
1.552 -{
1.553 - Handle_t hndl = static_cast<Handle_t>(params[1]);
1.554 - HandleError herr;
1.555 - HandleSecurity sec;
1.556 - bf_read *pBitBuf;
1.557 -
1.558 - sec.pOwner = NULL;
1.559 - sec.pIdentity = g_pCoreIdent;
1.560 -
1.561 - if ((herr=g_HandleSys.ReadHandle(hndl, g_RdBitBufType, &sec, (void **)&pBitBuf))
1.562 - != HandleError_None)
1.563 - {
1.564 - return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr);
1.565 - }
1.566 -
1.567 - return sp_ftoc(pBitBuf->ReadBitCoord());
1.568 -}
1.569 -
1.570 -static cell_t smn_BfReadVecCoord(IPluginContext *pCtx, const cell_t *params)
1.571 -{
1.572 - Handle_t hndl = static_cast<Handle_t>(params[1]);
1.573 - HandleError herr;
1.574 - HandleSecurity sec;
1.575 - bf_read *pBitBuf;
1.576 -
1.577 - sec.pOwner = NULL;
1.578 - sec.pIdentity = g_pCoreIdent;
1.579 -
1.580 - if ((herr=g_HandleSys.ReadHandle(hndl, g_RdBitBufType, &sec, (void **)&pBitBuf))
1.581 - != HandleError_None)
1.582 - {
1.583 - return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr);
1.584 - }
1.585 -
1.586 - cell_t *pVec;
1.587 - pCtx->LocalToPhysAddr(params[2], &pVec);
1.588 -
1.589 - Vector vec;
1.590 - pBitBuf->ReadBitVec3Coord(vec);
1.591 -
1.592 - pVec[0] = sp_ftoc(vec.x);
1.593 - pVec[1] = sp_ftoc(vec.y);
1.594 - pVec[2] = sp_ftoc(vec.z);
1.595 -
1.596 - return 1;
1.597 -}
1.598 -
1.599 -static cell_t smn_BfReadVecNormal(IPluginContext *pCtx, const cell_t *params)
1.600 -{
1.601 - Handle_t hndl = static_cast<Handle_t>(params[1]);
1.602 - HandleError herr;
1.603 - HandleSecurity sec;
1.604 - bf_read *pBitBuf;
1.605 -
1.606 - sec.pOwner = NULL;
1.607 - sec.pIdentity = g_pCoreIdent;
1.608 -
1.609 - if ((herr=g_HandleSys.ReadHandle(hndl, g_RdBitBufType, &sec, (void **)&pBitBuf))
1.610 - != HandleError_None)
1.611 - {
1.612 - return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr);
1.613 - }
1.614 -
1.615 - cell_t *pVec;
1.616 - pCtx->LocalToPhysAddr(params[2], &pVec);
1.617 -
1.618 - Vector vec;
1.619 - pBitBuf->ReadBitVec3Normal(vec);
1.620 -
1.621 - pVec[0] = sp_ftoc(vec.x);
1.622 - pVec[1] = sp_ftoc(vec.y);
1.623 - pVec[2] = sp_ftoc(vec.z);
1.624 -
1.625 - return 1;
1.626 -}
1.627 -
1.628 -static cell_t smn_BfReadAngles(IPluginContext *pCtx, const cell_t *params)
1.629 -{
1.630 - Handle_t hndl = static_cast<Handle_t>(params[1]);
1.631 - HandleError herr;
1.632 - HandleSecurity sec;
1.633 - bf_read *pBitBuf;
1.634 -
1.635 - sec.pOwner = NULL;
1.636 - sec.pIdentity = g_pCoreIdent;
1.637 -
1.638 - if ((herr=g_HandleSys.ReadHandle(hndl, g_RdBitBufType, &sec, (void **)&pBitBuf))
1.639 - != HandleError_None)
1.640 - {
1.641 - return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr);
1.642 - }
1.643 -
1.644 - cell_t *pAng;
1.645 - pCtx->LocalToPhysAddr(params[2], &pAng);
1.646 -
1.647 - QAngle ang;
1.648 - pBitBuf->ReadBitAngles(ang);
1.649 -
1.650 - pAng[0] = sp_ftoc(ang.x);
1.651 - pAng[1] = sp_ftoc(ang.y);
1.652 - pAng[2] = sp_ftoc(ang.z);
1.653 -
1.654 - return 1;
1.655 -}
1.656 -
1.657 -static cell_t smn_BfGetNumBytesLeft(IPluginContext *pCtx, const cell_t *params)
1.658 -{
1.659 - Handle_t hndl = static_cast<Handle_t>(params[1]);
1.660 - HandleError herr;
1.661 - HandleSecurity sec;
1.662 - bf_read *pBitBuf;
1.663 -
1.664 - sec.pOwner = NULL;
1.665 - sec.pIdentity = g_pCoreIdent;
1.666 -
1.667 - if ((herr=g_HandleSys.ReadHandle(hndl, g_RdBitBufType, &sec, (void **)&pBitBuf))
1.668 - != HandleError_None)
1.669 - {
1.670 - return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr);
1.671 - }
1.672 -
1.673 - return pBitBuf->GetNumBitsLeft() >> 3;
1.674 -}
1.675 -
1.676 -REGISTER_NATIVES(bitbufnatives)
1.677 -{
1.678 - {"BfWriteBool", smn_BfWriteBool},
1.679 - {"BfWriteByte", smn_BfWriteByte},
1.680 - {"BfWriteChar", smn_BfWriteChar},
1.681 - {"BfWriteShort", smn_BfWriteShort},
1.682 - {"BfWriteWord", smn_BfWriteWord},
1.683 - {"BfWriteNum", smn_BfWriteNum},
1.684 - {"BfWriteFloat", smn_BfWriteFloat},
1.685 - {"BfWriteString", smn_BfWriteString},
1.686 - {"BfWriteEntity", smn_BfWriteEntity},
1.687 - {"BfWriteAngle", smn_BfWriteAngle},
1.688 - {"BfWriteCoord", smn_BfWriteCoord},
1.689 - {"BfWriteVecCoord", smn_BfWriteVecCoord},
1.690 - {"BfWriteVecNormal", smn_BfWriteVecNormal},
1.691 - {"BfWriteAngles", smn_BfWriteAngles},
1.692 - {"BfReadBool", smn_BfReadBool},
1.693 - {"BfReadByte", smn_BfReadByte},
1.694 - {"BfReadChar", smn_BfReadChar},
1.695 - {"BfReadShort", smn_BfReadShort},
1.696 - {"BfReadWord", smn_BfReadWord},
1.697 - {"BfReadNum", smn_BfReadNum},
1.698 - {"BfReadFloat", smn_BfReadFloat},
1.699 - {"BfReadString", smn_BfReadString},
1.700 - {"BfReadEntity", smn_BfReadEntity},
1.701 - {"BfReadAngle", smn_BfReadAngle},
1.702 - {"BfReadCoord", smn_BfReadCoord},
1.703 - {"BfReadVecCoord", smn_BfReadVecCoord},
1.704 - {"BfReadVecNormal", smn_BfReadVecNormal},
1.705 - {"BfReadAngles", smn_BfReadAngles},
1.706 - {"BfGetNumBytesLeft", smn_BfGetNumBytesLeft},
1.707 - {NULL, NULL}
1.708 -};