code proc swapfunc 24 0 file "../../game/bg_lib.c" line 81 ;1:// Copyright (C) 1999-2000 Id Software, Inc. ;2:// ;3:// Copyright (C) 1999-2000 Id Software, Inc. ;4:// ;5:// bg_lib,c -- standard C library replacement routines used by code ;6:// compiled for the virtual machine ;7: ;8:#include "q_shared.h" ;9: ;10:/*- ;11: * Copyright (c) 1992, 1993 ;12: * The Regents of the University of California. All rights reserved. ;13: * ;14: * Redistribution and use in source and binary forms, with or without ;15: * modification, are permitted provided that the following conditions ;16: * are met: ;17: * 1. Redistributions of source code must retain the above copyright ;18: * notice, this list of conditions and the following disclaimer. ;19: * 2. Redistributions in binary form must reproduce the above copyright ;20: * notice, this list of conditions and the following disclaimer in the ;21: * documentation and/or other materials provided with the distribution. ;22: * 3. All advertising materials mentioning features or use of this software ;23: * must display the following acknowledgement: ;24: * This product includes software developed by the University of ;25: * California, Berkeley and its contributors. ;26: * 4. Neither the name of the University nor the names of its contributors ;27: * may be used to endorse or promote products derived from this software ;28: * without specific prior written permission. ;29: * ;30: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ;31: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ;32: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ;33: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE ;34: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL ;35: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS ;36: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ;37: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ;38: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY ;39: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ;40: * SUCH DAMAGE. ;41: */ ;42: ;43:#if defined(LIBC_SCCS) && !defined(lint) ;44:#if 0 ;45:static char sccsid[] = "@(#)qsort.c 8.1 (Berkeley) 6/4/93"; ;46:#endif ;47:static const char rcsid[] = ;48: "$Id: bg_lib.c,v 1.23 2000/02/04 06:46:50 zoid Exp $"; ;49:#endif /* LIBC_SCCS and not lint */ ;50: ;51:// bk001127 - needed for DLL's ;52:#if !defined( Q3_VM ) ;53:typedef int cmp_t(const void *, const void *); ;54:#endif ;55: ;56:static char* med3(char *, char *, char *, cmp_t *); ;57:static void swapfunc(char *, char *, int, int); ;58: ;59:#ifndef min ;60:#define min(a, b) (a) < (b) ? a : b ;61:#endif ;62: ;63:/* ;64: * Qsort routine from Bentley & McIlroy's "Engineering a Sort Function". ;65: */ ;66:#define swapcode(TYPE, parmi, parmj, n) { \ ;67: long i = (n) / sizeof (TYPE); \ ;68: register TYPE *pi = (TYPE *) (parmi); \ ;69: register TYPE *pj = (TYPE *) (parmj); \ ;70: do { \ ;71: register TYPE t = *pi; \ ;72: *pi++ = *pj; \ ;73: *pj++ = t; \ ;74: } while (--i > 0); \ ;75:} ;76: ;77:#define SWAPINIT(a, es) swaptype = ((char *)a - (char *)0) % sizeof(long) || \ ;78: es % sizeof(long) ? 2 : es == sizeof(long)? 0 : 1; ;79: ;80:static void swapfunc( char* a, char* b, int n, int swaptype) ;81:{ line 82 ;82: if(swaptype <= 1) ADDRFP4 12 INDIRI4 CNSTI4 1 GTI4 $37 line 83 ;83: swapcode(long, a, b, n) ADDRLP4 8 ADDRFP4 8 INDIRI4 CVIU4 4 CNSTI4 2 RSHU4 CVUI4 4 ASGNI4 ADDRLP4 0 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 4 ADDRFP4 4 INDIRP4 ASGNP4 LABELV $39 ADDRLP4 12 ADDRLP4 0 INDIRP4 INDIRI4 ASGNI4 ADDRLP4 16 ADDRLP4 0 INDIRP4 ASGNP4 ADDRLP4 0 ADDRLP4 16 INDIRP4 CNSTI4 4 ADDP4 ASGNP4 ADDRLP4 16 INDIRP4 ADDRLP4 4 INDIRP4 INDIRI4 ASGNI4 ADDRLP4 20 ADDRLP4 4 INDIRP4 ASGNP4 ADDRLP4 4 ADDRLP4 20 INDIRP4 CNSTI4 4 ADDP4 ASGNP4 ADDRLP4 20 INDIRP4 ADDRLP4 12 INDIRI4 ASGNI4 LABELV $40 ADDRLP4 12 ADDRLP4 8 INDIRI4 CNSTI4 1 SUBI4 ASGNI4 ADDRLP4 8 ADDRLP4 12 INDIRI4 ASGNI4 ADDRLP4 12 INDIRI4 CNSTI4 0 GTI4 $39 ADDRGP4 $38 JUMPV LABELV $37 line 85 ;84: else ;85: swapcode(char, a, b, n) ADDRLP4 8 ADDRFP4 8 INDIRI4 CVIU4 4 CVUI4 4 ASGNI4 ADDRLP4 0 ADDRFP4 0 INDIRP4 ASGNP4 ADDRLP4 4 ADDRFP4 4 INDIRP4 ASGNP4 LABELV $42 ADDRLP4 12 ADDRLP4 0 INDIRP4 INDIRI1 ASGNI1 ADDRLP4 16 ADDRLP4 0 INDIRP4 ASGNP4 ADDRLP4 0 ADDRLP4 16 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 ADDRLP4 16 INDIRP4 ADDRLP4 4 INDIRP4 INDIRI1 ASGNI1 ADDRLP4 20 ADDRLP4 4 INDIRP4 ASGNP4 ADDRLP4 4 ADDRLP4 20 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 ADDRLP4 20 INDIRP4 ADDRLP4 12 INDIRI1 ASGNI1 LABELV $43 ADDRLP4 12 ADDRLP4 8 INDIRI4 CNSTI4 1 SUBI4 ASGNI4 ADDRLP4 8 ADDRLP4 12 INDIRI4 ASGNI4 ADDRLP4 12 INDIRI4 CNSTI4 0 GTI4 $42 LABELV $38 line 86 ;86:} LABELV $36 endproc swapfunc 24 0 proc med3 40 8 line 99 ;87: ;88:#define swap(a, b) \ ;89: if (swaptype == 0) { \ ;90: long t = *(long *)(a); \ ;91: *(long *)(a) = *(long *)(b); \ ;92: *(long *)(b) = t; \ ;93: } else \ ;94: swapfunc(a, b, es, swaptype) ;95: ;96:#define vecswap(a, b, n) if ((n) > 0) swapfunc(a, b, n, swaptype) ;97: ;98:static char *med3(char* a, char* b, char* c, cmp_t* cmp) ;99:{ line 100 ;100: return cmp(a, b) < 0 ? ADDRFP4 0 INDIRP4 ARGP4 ADDRFP4 4 INDIRP4 ARGP4 ADDRLP4 20 ADDRFP4 12 INDIRP4 CALLI4 ASGNI4 ADDRLP4 20 INDIRI4 CNSTI4 0 GEI4 $51 ADDRFP4 4 INDIRP4 ARGP4 ADDRFP4 8 INDIRP4 ARGP4 ADDRLP4 24 ADDRFP4 12 INDIRP4 CALLI4 ASGNI4 ADDRLP4 24 INDIRI4 CNSTI4 0 GEI4 $53 ADDRLP4 4 ADDRFP4 4 INDIRP4 ASGNP4 ADDRGP4 $54 JUMPV LABELV $53 ADDRFP4 0 INDIRP4 ARGP4 ADDRFP4 8 INDIRP4 ARGP4 ADDRLP4 28 ADDRFP4 12 INDIRP4 CALLI4 ASGNI4 ADDRLP4 28 INDIRI4 CNSTI4 0 GEI4 $55 ADDRLP4 8 ADDRFP4 8 INDIRP4 ASGNP4 ADDRGP4 $56 JUMPV LABELV $55 ADDRLP4 8 ADDRFP4 0 INDIRP4 ASGNP4 LABELV $56 ADDRLP4 4 ADDRLP4 8 INDIRP4 ASGNP4 LABELV $54 ADDRLP4 0 ADDRLP4 4 INDIRP4 ASGNP4 ADDRGP4 $52 JUMPV LABELV $51 ADDRFP4 4 INDIRP4 ARGP4 ADDRFP4 8 INDIRP4 ARGP4 ADDRLP4 32 ADDRFP4 12 INDIRP4 CALLI4 ASGNI4 ADDRLP4 32 INDIRI4 CNSTI4 0 LEI4 $57 ADDRLP4 12 ADDRFP4 4 INDIRP4 ASGNP4 ADDRGP4 $58 JUMPV LABELV $57 ADDRFP4 0 INDIRP4 ARGP4 ADDRFP4 8 INDIRP4 ARGP4 ADDRLP4 36 ADDRFP4 12 INDIRP4 CALLI4 ASGNI4 ADDRLP4 36 INDIRI4 CNSTI4 0 GEI4 $59 ADDRLP4 16 ADDRFP4 0 INDIRP4 ASGNP4 ADDRGP4 $60 JUMPV LABELV $59 ADDRLP4 16 ADDRFP4 8 INDIRP4 ASGNP4 LABELV $60 ADDRLP4 12 ADDRLP4 16 INDIRP4 ASGNP4 LABELV $58 ADDRLP4 0 ADDRLP4 12 INDIRP4 ASGNP4 LABELV $52 ADDRLP4 0 INDIRP4 RETP4 LABELV $45 endproc med3 40 8 export qsort proc qsort 104 16 line 106 ;101: (cmp(b, c) < 0 ? b : (cmp(a, c) < 0 ? c : a )) ;102: :(cmp(b, c) > 0 ? b : (cmp(a, c) < 0 ? a : c )); ;103:} ;104: ;105:void qsort( void* a, size_t n, size_t es, cmp_t* cmp) ;106:{ LABELV $62 line 110 ;107: char *pa, *pb, *pc, *pd, *pl, *pm, *pn; ;108: int d, r, swaptype, swap_cnt; ;109: ;110:loop: SWAPINIT(a, es); ADDRLP4 52 CNSTU4 3 ASGNU4 ADDRLP4 56 CNSTU4 0 ASGNU4 ADDRFP4 0 INDIRP4 CVPU4 4 CVUI4 4 CVIU4 4 ADDRLP4 52 INDIRU4 BANDU4 ADDRLP4 56 INDIRU4 NEU4 $67 ADDRFP4 8 INDIRI4 CVIU4 4 ADDRLP4 52 INDIRU4 BANDU4 ADDRLP4 56 INDIRU4 EQU4 $65 LABELV $67 ADDRLP4 44 CNSTI4 2 ASGNI4 ADDRGP4 $66 JUMPV LABELV $65 ADDRFP4 8 INDIRI4 CVIU4 4 CNSTU4 4 NEU4 $68 ADDRLP4 48 CNSTI4 0 ASGNI4 ADDRGP4 $69 JUMPV LABELV $68 ADDRLP4 48 CNSTI4 1 ASGNI4 LABELV $69 ADDRLP4 44 ADDRLP4 48 INDIRI4 ASGNI4 LABELV $66 ADDRLP4 16 ADDRLP4 44 INDIRI4 ASGNI4 line 111 ;111: swap_cnt = 0; ADDRLP4 28 CNSTI4 0 ASGNI4 line 112 ;112: if (n < 7) { ADDRFP4 4 INDIRI4 CNSTI4 7 GEI4 $70 line 113 ;113: for (pm = (char *)a + es; pm < (char *)a + n * es; pm += es) ADDRLP4 32 ADDRFP4 8 INDIRI4 ADDRFP4 0 INDIRP4 ADDP4 ASGNP4 ADDRGP4 $75 JUMPV LABELV $72 line 114 ;114: for (pl = pm; pl > (char *)a && cmp(pl - es, pl) > 0; ADDRLP4 0 ADDRLP4 32 INDIRP4 ASGNP4 ADDRGP4 $79 JUMPV LABELV $76 line 116 ;115: pl -= es) ;116: swap(pl, pl - es); ADDRLP4 16 INDIRI4 CNSTI4 0 NEI4 $80 ADDRLP4 60 ADDRLP4 0 INDIRP4 INDIRI4 ASGNI4 ADDRLP4 0 INDIRP4 ADDRLP4 0 INDIRP4 ADDRFP4 8 INDIRI4 SUBP4 INDIRI4 ASGNI4 ADDRLP4 0 INDIRP4 ADDRFP4 8 INDIRI4 SUBP4 ADDRLP4 60 INDIRI4 ASGNI4 ADDRGP4 $81 JUMPV LABELV $80 ADDRLP4 0 INDIRP4 ARGP4 ADDRLP4 64 ADDRFP4 8 INDIRI4 ASGNI4 ADDRLP4 0 INDIRP4 ADDRLP4 64 INDIRI4 SUBP4 ARGP4 ADDRLP4 64 INDIRI4 ARGI4 ADDRLP4 16 INDIRI4 ARGI4 ADDRGP4 swapfunc CALLV pop LABELV $81 LABELV $77 line 115 ADDRLP4 0 ADDRLP4 0 INDIRP4 ADDRFP4 8 INDIRI4 SUBP4 ASGNP4 LABELV $79 line 114 ADDRLP4 0 INDIRP4 CVPU4 4 ADDRFP4 0 INDIRP4 CVPU4 4 LEU4 $82 ADDRLP4 0 INDIRP4 ADDRFP4 8 INDIRI4 SUBP4 ARGP4 ADDRLP4 0 INDIRP4 ARGP4 ADDRLP4 72 ADDRFP4 12 INDIRP4 CALLI4 ASGNI4 ADDRLP4 72 INDIRI4 CNSTI4 0 GTI4 $76 LABELV $82 LABELV $73 line 113 ADDRLP4 32 ADDRFP4 8 INDIRI4 ADDRLP4 32 INDIRP4 ADDP4 ASGNP4 LABELV $75 ADDRLP4 32 INDIRP4 CVPU4 4 ADDRFP4 4 INDIRI4 ADDRFP4 8 INDIRI4 MULI4 ADDRFP4 0 INDIRP4 ADDP4 CVPU4 4 LTU4 $72 line 117 ;117: return; ADDRGP4 $61 JUMPV LABELV $70 line 119 ;118: } ;119: pm = (char *)a + (n / 2) * es; ADDRLP4 32 ADDRFP4 4 INDIRI4 CNSTI4 2 DIVI4 ADDRFP4 8 INDIRI4 MULI4 ADDRFP4 0 INDIRP4 ADDP4 ASGNP4 line 120 ;120: if (n > 7) { ADDRFP4 4 INDIRI4 CNSTI4 7 LEI4 $83 line 121 ;121: pl = a; ADDRLP4 0 ADDRFP4 0 INDIRP4 ASGNP4 line 122 ;122: pn = (char *)a + (n - 1) * es; ADDRLP4 36 ADDRFP4 4 INDIRI4 CNSTI4 1 SUBI4 ADDRFP4 8 INDIRI4 MULI4 ADDRFP4 0 INDIRP4 ADDP4 ASGNP4 line 123 ;123: if (n > 40) { ADDRFP4 4 INDIRI4 CNSTI4 40 LEI4 $85 line 124 ;124: d = (n / 8) * es; ADDRLP4 40 ADDRFP4 4 INDIRI4 CNSTI4 8 DIVI4 ADDRFP4 8 INDIRI4 MULI4 ASGNI4 line 125 ;125: pl = med3(pl, pl + d, pl + 2 * d, cmp); ADDRLP4 0 INDIRP4 ARGP4 ADDRLP4 64 ADDRLP4 40 INDIRI4 ASGNI4 ADDRLP4 64 INDIRI4 ADDRLP4 0 INDIRP4 ADDP4 ARGP4 ADDRLP4 64 INDIRI4 CNSTI4 1 LSHI4 ADDRLP4 0 INDIRP4 ADDP4 ARGP4 ADDRFP4 12 INDIRP4 ARGP4 ADDRLP4 68 ADDRGP4 med3 CALLP4 ASGNP4 ADDRLP4 0 ADDRLP4 68 INDIRP4 ASGNP4 line 126 ;126: pm = med3(pm - d, pm, pm + d, cmp); ADDRLP4 76 ADDRLP4 40 INDIRI4 ASGNI4 ADDRLP4 32 INDIRP4 ADDRLP4 76 INDIRI4 SUBP4 ARGP4 ADDRLP4 32 INDIRP4 ARGP4 ADDRLP4 76 INDIRI4 ADDRLP4 32 INDIRP4 ADDP4 ARGP4 ADDRFP4 12 INDIRP4 ARGP4 ADDRLP4 80 ADDRGP4 med3 CALLP4 ASGNP4 ADDRLP4 32 ADDRLP4 80 INDIRP4 ASGNP4 line 127 ;127: pn = med3(pn - 2 * d, pn - d, pn, cmp); ADDRLP4 88 ADDRLP4 40 INDIRI4 ASGNI4 ADDRLP4 36 INDIRP4 ADDRLP4 88 INDIRI4 CNSTI4 1 LSHI4 SUBP4 ARGP4 ADDRLP4 36 INDIRP4 ADDRLP4 88 INDIRI4 SUBP4 ARGP4 ADDRLP4 36 INDIRP4 ARGP4 ADDRFP4 12 INDIRP4 ARGP4 ADDRLP4 92 ADDRGP4 med3 CALLP4 ASGNP4 ADDRLP4 36 ADDRLP4 92 INDIRP4 ASGNP4 line 128 ;128: } LABELV $85 line 129 ;129: pm = med3(pl, pm, pn, cmp); ADDRLP4 0 INDIRP4 ARGP4 ADDRLP4 32 INDIRP4 ARGP4 ADDRLP4 36 INDIRP4 ARGP4 ADDRFP4 12 INDIRP4 ARGP4 ADDRLP4 60 ADDRGP4 med3 CALLP4 ASGNP4 ADDRLP4 32 ADDRLP4 60 INDIRP4 ASGNP4 line 130 ;130: } LABELV $83 line 131 ;131: swap(a, pm); ADDRLP4 16 INDIRI4 CNSTI4 0 NEI4 $87 ADDRLP4 60 ADDRFP4 0 INDIRP4 INDIRI4 ASGNI4 ADDRFP4 0 INDIRP4 ADDRLP4 32 INDIRP4 INDIRI4 ASGNI4 ADDRLP4 32 INDIRP4 ADDRLP4 60 INDIRI4 ASGNI4 ADDRGP4 $88 JUMPV LABELV $87 ADDRFP4 0 INDIRP4 ARGP4 ADDRLP4 32 INDIRP4 ARGP4 ADDRFP4 8 INDIRI4 ARGI4 ADDRLP4 16 INDIRI4 ARGI4 ADDRGP4 swapfunc CALLV pop LABELV $88 line 132 ;132: pa = pb = (char *)a + es; ADDRLP4 60 ADDRFP4 8 INDIRI4 ADDRFP4 0 INDIRP4 ADDP4 ASGNP4 ADDRLP4 4 ADDRLP4 60 INDIRP4 ASGNP4 ADDRLP4 20 ADDRLP4 60 INDIRP4 ASGNP4 line 134 ;133: ;134: pc = pd = (char *)a + (n - 1) * es; ADDRLP4 64 ADDRFP4 4 INDIRI4 CNSTI4 1 SUBI4 ADDRFP4 8 INDIRI4 MULI4 ADDRFP4 0 INDIRP4 ADDP4 ASGNP4 ADDRLP4 24 ADDRLP4 64 INDIRP4 ASGNP4 ADDRLP4 8 ADDRLP4 64 INDIRP4 ASGNP4 line 135 ;135: for (;;) { ADDRGP4 $94 JUMPV LABELV $93 line 136 ;136: while (pb <= pc && (r = cmp(pb, a)) <= 0) { line 137 ;137: if (r == 0) { ADDRLP4 12 INDIRI4 CNSTI4 0 NEI4 $96 line 138 ;138: swap_cnt = 1; ADDRLP4 28 CNSTI4 1 ASGNI4 line 139 ;139: swap(pa, pb); ADDRLP4 16 INDIRI4 CNSTI4 0 NEI4 $98 ADDRLP4 68 ADDRLP4 20 INDIRP4 INDIRI4 ASGNI4 ADDRLP4 20 INDIRP4 ADDRLP4 4 INDIRP4 INDIRI4 ASGNI4 ADDRLP4 4 INDIRP4 ADDRLP4 68 INDIRI4 ASGNI4 ADDRGP4 $99 JUMPV LABELV $98 ADDRLP4 20 INDIRP4 ARGP4 ADDRLP4 4 INDIRP4 ARGP4 ADDRFP4 8 INDIRI4 ARGI4 ADDRLP4 16 INDIRI4 ARGI4 ADDRGP4 swapfunc CALLV pop LABELV $99 line 140 ;140: pa += es; ADDRLP4 20 ADDRFP4 8 INDIRI4 ADDRLP4 20 INDIRP4 ADDP4 ASGNP4 line 141 ;141: } LABELV $96 line 142 ;142: pb += es; ADDRLP4 4 ADDRFP4 8 INDIRI4 ADDRLP4 4 INDIRP4 ADDP4 ASGNP4 line 143 ;143: } LABELV $94 line 136 ADDRLP4 4 INDIRP4 CVPU4 4 ADDRLP4 8 INDIRP4 CVPU4 4 GTU4 $100 ADDRLP4 4 INDIRP4 ARGP4 ADDRFP4 0 INDIRP4 ARGP4 ADDRLP4 72 ADDRFP4 12 INDIRP4 CALLI4 ASGNI4 ADDRLP4 12 ADDRLP4 72 INDIRI4 ASGNI4 ADDRLP4 72 INDIRI4 CNSTI4 0 LEI4 $93 LABELV $100 ADDRGP4 $102 JUMPV LABELV $101 line 144 ;144: while (pb <= pc && (r = cmp(pc, a)) >= 0) { line 145 ;145: if (r == 0) { ADDRLP4 12 INDIRI4 CNSTI4 0 NEI4 $104 line 146 ;146: swap_cnt = 1; ADDRLP4 28 CNSTI4 1 ASGNI4 line 147 ;147: swap(pc, pd); ADDRLP4 16 INDIRI4 CNSTI4 0 NEI4 $106 ADDRLP4 76 ADDRLP4 8 INDIRP4 INDIRI4 ASGNI4 ADDRLP4 8 INDIRP4 ADDRLP4 24 INDIRP4 INDIRI4 ASGNI4 ADDRLP4 24 INDIRP4 ADDRLP4 76 INDIRI4 ASGNI4 ADDRGP4 $107 JUMPV LABELV $106 ADDRLP4 8 INDIRP4 ARGP4 ADDRLP4 24 INDIRP4 ARGP4 ADDRFP4 8 INDIRI4 ARGI4 ADDRLP4 16 INDIRI4 ARGI4 ADDRGP4 swapfunc CALLV pop LABELV $107 line 148 ;148: pd -= es; ADDRLP4 24 ADDRLP4 24 INDIRP4 ADDRFP4 8 INDIRI4 SUBP4 ASGNP4 line 149 ;149: } LABELV $104 line 150 ;150: pc -= es; ADDRLP4 8 ADDRLP4 8 INDIRP4 ADDRFP4 8 INDIRI4 SUBP4 ASGNP4 line 151 ;151: } LABELV $102 line 144 ADDRLP4 4 INDIRP4 CVPU4 4 ADDRLP4 8 INDIRP4 CVPU4 4 GTU4 $108 ADDRLP4 8 INDIRP4 ARGP4 ADDRFP4 0 INDIRP4 ARGP4 ADDRLP4 80 ADDRFP4 12 INDIRP4 CALLI4 ASGNI4 ADDRLP4 12 ADDRLP4 80 INDIRI4 ASGNI4 ADDRLP4 80 INDIRI4 CNSTI4 0 GEI4 $101 LABELV $108 line 152 ;152: if (pb > pc) ADDRLP4 4 INDIRP4 CVPU4 4 ADDRLP4 8 INDIRP4 CVPU4 4 LEU4 $109 line 153 ;153: break; ADDRGP4 $91 JUMPV LABELV $109 line 154 ;154: swap(pb, pc); ADDRLP4 16 INDIRI4 CNSTI4 0 NEI4 $111 ADDRLP4 84 ADDRLP4 4 INDIRP4 INDIRI4 ASGNI4 ADDRLP4 4 INDIRP4 ADDRLP4 8 INDIRP4 INDIRI4 ASGNI4 ADDRLP4 8 INDIRP4 ADDRLP4 84 INDIRI4 ASGNI4 ADDRGP4 $112 JUMPV LABELV $111 ADDRLP4 4 INDIRP4 ARGP4 ADDRLP4 8 INDIRP4 ARGP4 ADDRFP4 8 INDIRI4 ARGI4 ADDRLP4 16 INDIRI4 ARGI4 ADDRGP4 swapfunc CALLV pop LABELV $112 line 155 ;155: swap_cnt = 1; ADDRLP4 28 CNSTI4 1 ASGNI4 line 156 ;156: pb += es; ADDRLP4 4 ADDRFP4 8 INDIRI4 ADDRLP4 4 INDIRP4 ADDP4 ASGNP4 line 157 ;157: pc -= es; ADDRLP4 8 ADDRLP4 8 INDIRP4 ADDRFP4 8 INDIRI4 SUBP4 ASGNP4 line 158 ;158: } line 135 ADDRGP4 $94 JUMPV LABELV $91 line 159 ;159: if (swap_cnt == 0) { /* Switch to insertion sort */ ADDRLP4 28 INDIRI4 CNSTI4 0 NEI4 $113 line 160 ;160: for (pm = (char *)a + es; pm < (char *)a + n * es; pm += es) ADDRLP4 32 ADDRFP4 8 INDIRI4 ADDRFP4 0 INDIRP4 ADDP4 ASGNP4 ADDRGP4 $118 JUMPV LABELV $115 line 161 ;161: for (pl = pm; pl > (char *)a && cmp(pl - es, pl) > 0; ADDRLP4 0 ADDRLP4 32 INDIRP4 ASGNP4 ADDRGP4 $122 JUMPV LABELV $119 line 163 ;162: pl -= es) ;163: swap(pl, pl - es); ADDRLP4 16 INDIRI4 CNSTI4 0 NEI4 $123 ADDRLP4 68 ADDRLP4 0 INDIRP4 INDIRI4 ASGNI4 ADDRLP4 0 INDIRP4 ADDRLP4 0 INDIRP4 ADDRFP4 8 INDIRI4 SUBP4 INDIRI4 ASGNI4 ADDRLP4 0 INDIRP4 ADDRFP4 8 INDIRI4 SUBP4 ADDRLP4 68 INDIRI4 ASGNI4 ADDRGP4 $124 JUMPV LABELV $123 ADDRLP4 0 INDIRP4 ARGP4 ADDRLP4 72 ADDRFP4 8 INDIRI4 ASGNI4 ADDRLP4 0 INDIRP4 ADDRLP4 72 INDIRI4 SUBP4 ARGP4 ADDRLP4 72 INDIRI4 ARGI4 ADDRLP4 16 INDIRI4 ARGI4 ADDRGP4 swapfunc CALLV pop LABELV $124 LABELV $120 line 162 ADDRLP4 0 ADDRLP4 0 INDIRP4 ADDRFP4 8 INDIRI4 SUBP4 ASGNP4 LABELV $122 line 161 ADDRLP4 0 INDIRP4 CVPU4 4 ADDRFP4 0 INDIRP4 CVPU4 4 LEU4 $125 ADDRLP4 0 INDIRP4 ADDRFP4 8 INDIRI4 SUBP4 ARGP4 ADDRLP4 0 INDIRP4 ARGP4 ADDRLP4 80 ADDRFP4 12 INDIRP4 CALLI4 ASGNI4 ADDRLP4 80 INDIRI4 CNSTI4 0 GTI4 $119 LABELV $125 LABELV $116 line 160 ADDRLP4 32 ADDRFP4 8 INDIRI4 ADDRLP4 32 INDIRP4 ADDP4 ASGNP4 LABELV $118 ADDRLP4 32 INDIRP4 CVPU4 4 ADDRFP4 4 INDIRI4 ADDRFP4 8 INDIRI4 MULI4 ADDRFP4 0 INDIRP4 ADDP4 CVPU4 4 LTU4 $115 line 164 ;164: return; ADDRGP4 $61 JUMPV LABELV $113 line 167 ;165: } ;166: ;167: pn = (char *)a + n * es; ADDRLP4 36 ADDRFP4 4 INDIRI4 ADDRFP4 8 INDIRI4 MULI4 ADDRFP4 0 INDIRP4 ADDP4 ASGNP4 line 168 ;168: r = min(pa - (char *)a, pb - pa); ADDRLP4 72 ADDRLP4 20 INDIRP4 CVPU4 4 ASGNU4 ADDRLP4 72 INDIRU4 ADDRFP4 0 INDIRP4 CVPU4 4 SUBU4 CVUI4 4 ADDRLP4 4 INDIRP4 CVPU4 4 ADDRLP4 72 INDIRU4 SUBU4 CVUI4 4 GEI4 $127 ADDRLP4 68 ADDRLP4 20 INDIRP4 CVPU4 4 ADDRFP4 0 INDIRP4 CVPU4 4 SUBU4 CVUI4 4 ASGNI4 ADDRGP4 $128 JUMPV LABELV $127 ADDRLP4 68 ADDRLP4 4 INDIRP4 CVPU4 4 ADDRLP4 20 INDIRP4 CVPU4 4 SUBU4 CVUI4 4 ASGNI4 LABELV $128 ADDRLP4 12 ADDRLP4 68 INDIRI4 ASGNI4 line 169 ;169: vecswap(a, pb - r, r); ADDRLP4 12 INDIRI4 CNSTI4 0 LEI4 $129 ADDRFP4 0 INDIRP4 ARGP4 ADDRLP4 4 INDIRP4 ADDRLP4 12 INDIRI4 SUBP4 ARGP4 ADDRLP4 12 INDIRI4 ARGI4 ADDRLP4 16 INDIRI4 ARGI4 ADDRGP4 swapfunc CALLV pop LABELV $129 line 170 ;170: r = min(pd - pc, pn - pd - es); ADDRLP4 84 ADDRLP4 24 INDIRP4 CVPU4 4 ASGNU4 ADDRLP4 84 INDIRU4 ADDRLP4 8 INDIRP4 CVPU4 4 SUBU4 CVUI4 4 ADDRLP4 36 INDIRP4 CVPU4 4 ADDRLP4 84 INDIRU4 SUBU4 CVUI4 4 ADDRFP4 8 INDIRI4 SUBI4 GEI4 $132 ADDRLP4 80 ADDRLP4 24 INDIRP4 CVPU4 4 ADDRLP4 8 INDIRP4 CVPU4 4 SUBU4 CVUI4 4 ASGNI4 ADDRGP4 $133 JUMPV LABELV $132 ADDRLP4 80 ADDRLP4 36 INDIRP4 CVPU4 4 ADDRLP4 24 INDIRP4 CVPU4 4 SUBU4 CVUI4 4 ADDRFP4 8 INDIRI4 SUBI4 ASGNI4 LABELV $133 ADDRLP4 12 ADDRLP4 80 INDIRI4 ASGNI4 line 171 ;171: vecswap(pb, pn - r, r); ADDRLP4 12 INDIRI4 CNSTI4 0 LEI4 $134 ADDRLP4 4 INDIRP4 ARGP4 ADDRLP4 36 INDIRP4 ADDRLP4 12 INDIRI4 SUBP4 ARGP4 ADDRLP4 12 INDIRI4 ARGI4 ADDRLP4 16 INDIRI4 ARGI4 ADDRGP4 swapfunc CALLV pop LABELV $134 line 172 ;172: if ((r = pb - pa) > es) ADDRLP4 92 ADDRLP4 4 INDIRP4 CVPU4 4 ADDRLP4 20 INDIRP4 CVPU4 4 SUBU4 CVUI4 4 ASGNI4 ADDRLP4 12 ADDRLP4 92 INDIRI4 ASGNI4 ADDRLP4 92 INDIRI4 ADDRFP4 8 INDIRI4 LEI4 $136 line 173 ;173: qsort(a, r / es, es, cmp); ADDRFP4 0 INDIRP4 ARGP4 ADDRLP4 96 ADDRFP4 8 INDIRI4 ASGNI4 ADDRLP4 12 INDIRI4 ADDRLP4 96 INDIRI4 DIVI4 ARGI4 ADDRLP4 96 INDIRI4 ARGI4 ADDRFP4 12 INDIRP4 ARGP4 ADDRGP4 qsort CALLV pop LABELV $136 line 174 ;174: if ((r = pd - pc) > es) { ADDRLP4 100 ADDRLP4 24 INDIRP4 CVPU4 4 ADDRLP4 8 INDIRP4 CVPU4 4 SUBU4 CVUI4 4 ASGNI4 ADDRLP4 12 ADDRLP4 100 INDIRI4 ASGNI4 ADDRLP4 100 INDIRI4 ADDRFP4 8 INDIRI4 LEI4 $138 line 176 ;175: /* Iterate rather than recurse to save stack space */ ;176: a = pn - r; ADDRFP4 0 ADDRLP4 36 INDIRP4 ADDRLP4 12 INDIRI4 SUBP4 ASGNP4 line 177 ;177: n = r / es; ADDRFP4 4 ADDRLP4 12 INDIRI4 ADDRFP4 8 INDIRI4 DIVI4 ASGNI4 line 178 ;178: goto loop; ADDRGP4 $62 JUMPV LABELV $138 line 181 ;179: } ;180:/* qsort(pn - r, r / es, es, cmp);*/ ;181:} LABELV $61 endproc qsort 104 16 export strlen proc strlen 4 0 line 191 ;182: ;183://================================================================================== ;184: ;185: ;186:// this file is excluded from release builds because of intrinsics ;187: ;188:// bk001211 - gcc errors on compiling strcpy: parse error before `__extension__' ;189:#if defined ( Q3_VM ) ;190: ;191:size_t strlen( const char *string ) { line 194 ;192: const char *s; ;193: ;194: s = string; ADDRLP4 0 ADDRFP4 0 INDIRP4 ASGNP4 ADDRGP4 $142 JUMPV LABELV $141 line 195 ;195: while ( *s ) { line 196 ;196: s++; ADDRLP4 0 ADDRLP4 0 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 line 197 ;197: } LABELV $142 line 195 ADDRLP4 0 INDIRP4 INDIRI1 CVII4 1 CNSTI4 0 NEI4 $141 line 198 ;198: return s - string; ADDRLP4 0 INDIRP4 CVPU4 4 ADDRFP4 0 INDIRP4 CVPU4 4 SUBU4 CVUI4 4 RETI4 LABELV $140 endproc strlen 4 0 export strcat proc strcat 16 0 line 202 ;199:} ;200: ;201: ;202:char *strcat( char *strDestination, const char *strSource ) { line 205 ;203: char *s; ;204: ;205: s = strDestination; ADDRLP4 0 ADDRFP4 0 INDIRP4 ASGNP4 ADDRGP4 $146 JUMPV LABELV $145 line 206 ;206: while ( *s ) { line 207 ;207: s++; ADDRLP4 0 ADDRLP4 0 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 line 208 ;208: } LABELV $146 line 206 ADDRLP4 0 INDIRP4 INDIRI1 CVII4 1 CNSTI4 0 NEI4 $145 ADDRGP4 $149 JUMPV LABELV $148 line 209 ;209: while ( *strSource ) { line 210 ;210: *s++ = *strSource++; ADDRLP4 4 ADDRLP4 0 INDIRP4 ASGNP4 ADDRLP4 12 CNSTI4 1 ASGNI4 ADDRLP4 0 ADDRLP4 4 INDIRP4 ADDRLP4 12 INDIRI4 ADDP4 ASGNP4 ADDRLP4 8 ADDRFP4 4 INDIRP4 ASGNP4 ADDRFP4 4 ADDRLP4 8 INDIRP4 ADDRLP4 12 INDIRI4 ADDP4 ASGNP4 ADDRLP4 4 INDIRP4 ADDRLP4 8 INDIRP4 INDIRI1 ASGNI1 line 211 ;211: } LABELV $149 line 209 ADDRFP4 4 INDIRP4 INDIRI1 CVII4 1 CNSTI4 0 NEI4 $148 line 212 ;212: *s = 0; ADDRLP4 0 INDIRP4 CNSTI1 0 ASGNI1 line 213 ;213: return strDestination; ADDRFP4 0 INDIRP4 RETP4 LABELV $144 endproc strcat 16 0 export strcpy proc strcpy 16 0 line 216 ;214:} ;215: ;216:char *strcpy( char *strDestination, const char *strSource ) { line 219 ;217: char *s; ;218: ;219: s = strDestination; ADDRLP4 0 ADDRFP4 0 INDIRP4 ASGNP4 ADDRGP4 $153 JUMPV LABELV $152 line 220 ;220: while ( *strSource ) { line 221 ;221: *s++ = *strSource++; ADDRLP4 4 ADDRLP4 0 INDIRP4 ASGNP4 ADDRLP4 12 CNSTI4 1 ASGNI4 ADDRLP4 0 ADDRLP4 4 INDIRP4 ADDRLP4 12 INDIRI4 ADDP4 ASGNP4 ADDRLP4 8 ADDRFP4 4 INDIRP4 ASGNP4 ADDRFP4 4 ADDRLP4 8 INDIRP4 ADDRLP4 12 INDIRI4 ADDP4 ASGNP4 ADDRLP4 4 INDIRP4 ADDRLP4 8 INDIRP4 INDIRI1 ASGNI1 line 222 ;222: } LABELV $153 line 220 ADDRFP4 4 INDIRP4 INDIRI1 CVII4 1 CNSTI4 0 NEI4 $152 line 223 ;223: *s = 0; ADDRLP4 0 INDIRP4 CNSTI1 0 ASGNI1 line 224 ;224: return strDestination; ADDRFP4 0 INDIRP4 RETP4 LABELV $151 endproc strcpy 16 0 export strcmp proc strcmp 12 0 line 228 ;225:} ;226: ;227: ;228:int strcmp( const char *string1, const char *string2 ) { ADDRGP4 $157 JUMPV LABELV $156 line 229 ;229: while ( *string1 == *string2 && *string1 && *string2 ) { line 230 ;230: string1++; ADDRFP4 0 ADDRFP4 0 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 line 231 ;231: string2++; ADDRFP4 4 ADDRFP4 4 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 line 232 ;232: } LABELV $157 line 229 ADDRLP4 0 ADDRFP4 0 INDIRP4 INDIRI1 CVII4 1 ASGNI4 ADDRLP4 4 ADDRFP4 4 INDIRP4 INDIRI1 CVII4 1 ASGNI4 ADDRLP4 0 INDIRI4 ADDRLP4 4 INDIRI4 NEI4 $160 ADDRLP4 8 CNSTI4 0 ASGNI4 ADDRLP4 0 INDIRI4 ADDRLP4 8 INDIRI4 EQI4 $160 ADDRLP4 4 INDIRI4 ADDRLP4 8 INDIRI4 NEI4 $156 LABELV $160 line 233 ;233: return *string1 - *string2; ADDRFP4 0 INDIRP4 INDIRI1 CVII4 1 ADDRFP4 4 INDIRP4 INDIRI1 CVII4 1 SUBI4 RETI4 LABELV $155 endproc strcmp 12 0 export strchr proc strchr 0 0 line 237 ;234:} ;235: ;236: ;237:char *strchr( const char *string, int c ) { ADDRGP4 $163 JUMPV LABELV $162 line 238 ;238: while ( *string ) { line 239 ;239: if ( *string == c ) { ADDRFP4 0 INDIRP4 INDIRI1 CVII4 1 ADDRFP4 4 INDIRI4 NEI4 $165 line 240 ;240: return ( char * )string; ADDRFP4 0 INDIRP4 RETP4 ADDRGP4 $161 JUMPV LABELV $165 line 242 ;241: } ;242: string++; ADDRFP4 0 ADDRFP4 0 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 line 243 ;243: } LABELV $163 line 238 ADDRFP4 0 INDIRP4 INDIRI1 CVII4 1 CNSTI4 0 NEI4 $162 line 244 ;244: return (char *)0; CNSTP4 0 RETP4 LABELV $161 endproc strchr 0 0 export strstr proc strstr 8 0 line 247 ;245:} ;246: ;247:char *strstr( const char *string, const char *strCharSet ) { ADDRGP4 $169 JUMPV LABELV $168 line 248 ;248: while ( *string ) { line 251 ;249: int i; ;250: ;251: for ( i = 0 ; strCharSet[i] ; i++ ) { ADDRLP4 0 CNSTI4 0 ASGNI4 ADDRGP4 $174 JUMPV LABELV $171 line 252 ;252: if ( string[i] != strCharSet[i] ) { ADDRLP4 0 INDIRI4 ADDRFP4 0 INDIRP4 ADDP4 INDIRI1 CVII4 1 ADDRLP4 0 INDIRI4 ADDRFP4 4 INDIRP4 ADDP4 INDIRI1 CVII4 1 EQI4 $175 line 253 ;253: break; ADDRGP4 $173 JUMPV LABELV $175 line 255 ;254: } ;255: } LABELV $172 line 251 ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 LABELV $174 ADDRLP4 0 INDIRI4 ADDRFP4 4 INDIRP4 ADDP4 INDIRI1 CVII4 1 CNSTI4 0 NEI4 $171 LABELV $173 line 256 ;256: if ( !strCharSet[i] ) { ADDRLP4 0 INDIRI4 ADDRFP4 4 INDIRP4 ADDP4 INDIRI1 CVII4 1 CNSTI4 0 NEI4 $177 line 257 ;257: return (char *)string; ADDRFP4 0 INDIRP4 RETP4 ADDRGP4 $167 JUMPV LABELV $177 line 259 ;258: } ;259: string++; ADDRFP4 0 ADDRFP4 0 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 line 260 ;260: } LABELV $169 line 248 ADDRFP4 0 INDIRP4 INDIRI1 CVII4 1 CNSTI4 0 NEI4 $168 line 261 ;261: return (char *)0; CNSTP4 0 RETP4 LABELV $167 endproc strstr 8 0 export tolower proc tolower 4 0 line 269 ;262:} ;263:#endif // bk001211 ;264: ;265:// bk001120 - presumably needed for Mac ;266://#if !defined(_MSC_VER) && !defined(__linux__) ;267:// bk001127 - undid undo ;268:#if defined ( Q3_VM ) ;269:int tolower( int c ) { line 270 ;270: if ( c >= 'A' && c <= 'Z' ) { ADDRLP4 0 ADDRFP4 0 INDIRI4 ASGNI4 ADDRLP4 0 INDIRI4 CNSTI4 65 LTI4 $180 ADDRLP4 0 INDIRI4 CNSTI4 90 GTI4 $180 line 271 ;271: c += 'a' - 'A'; ADDRFP4 0 ADDRFP4 0 INDIRI4 CNSTI4 32 ADDI4 ASGNI4 line 272 ;272: } LABELV $180 line 273 ;273: return c; ADDRFP4 0 INDIRI4 RETI4 LABELV $179 endproc tolower 4 0 export toupper proc toupper 4 0 line 277 ;274:} ;275: ;276: ;277:int toupper( int c ) { line 278 ;278: if ( c >= 'a' && c <= 'z' ) { ADDRLP4 0 ADDRFP4 0 INDIRI4 ASGNI4 ADDRLP4 0 INDIRI4 CNSTI4 97 LTI4 $183 ADDRLP4 0 INDIRI4 CNSTI4 122 GTI4 $183 line 279 ;279: c += 'A' - 'a'; ADDRFP4 0 ADDRFP4 0 INDIRI4 CNSTI4 -32 ADDI4 ASGNI4 line 280 ;280: } LABELV $183 line 281 ;281: return c; ADDRFP4 0 INDIRI4 RETI4 LABELV $182 endproc toupper 4 0 export memmove proc memmove 8 0 line 287 ;282:} ;283: ;284:#endif ;285://#ifndef _MSC_VER ;286: ;287:void *memmove( void *dest, const void *src, size_t count ) { line 290 ;288: int i; ;289: ;290: if ( dest > src ) { ADDRFP4 0 INDIRP4 CVPU4 4 ADDRFP4 4 INDIRP4 CVPU4 4 LEU4 $186 line 291 ;291: for ( i = count-1 ; i >= 0 ; i-- ) { ADDRLP4 0 ADDRFP4 8 INDIRI4 CNSTI4 1 SUBI4 ASGNI4 ADDRGP4 $191 JUMPV LABELV $188 line 292 ;292: ((char *)dest)[i] = ((char *)src)[i]; ADDRLP4 0 INDIRI4 ADDRFP4 0 INDIRP4 ADDP4 ADDRLP4 0 INDIRI4 ADDRFP4 4 INDIRP4 ADDP4 INDIRI1 ASGNI1 line 293 ;293: } LABELV $189 line 291 ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 1 SUBI4 ASGNI4 LABELV $191 ADDRLP4 0 INDIRI4 CNSTI4 0 GEI4 $188 line 294 ;294: } else { ADDRGP4 $187 JUMPV LABELV $186 line 295 ;295: for ( i = 0 ; i < count ; i++ ) { ADDRLP4 0 CNSTI4 0 ASGNI4 ADDRGP4 $195 JUMPV LABELV $192 line 296 ;296: ((char *)dest)[i] = ((char *)src)[i]; ADDRLP4 0 INDIRI4 ADDRFP4 0 INDIRP4 ADDP4 ADDRLP4 0 INDIRI4 ADDRFP4 4 INDIRP4 ADDP4 INDIRI1 ASGNI1 line 297 ;297: } LABELV $193 line 295 ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 LABELV $195 ADDRLP4 0 INDIRI4 ADDRFP4 8 INDIRI4 LTI4 $192 line 298 ;298: } LABELV $187 line 299 ;299: return dest; ADDRFP4 0 INDIRP4 RETP4 LABELV $185 endproc memmove 8 0 export tan proc tan 8 4 line 757 ;300:} ;301: ;302: ;303:#if 0 ;304: ;305:double floor( double x ) { ;306: return (int)(x + 0x40000000) - 0x40000000; ;307:} ;308: ;309:void *memset( void *dest, int c, size_t count ) { ;310: while ( count-- ) { ;311: ((char *)dest)[count] = c; ;312: } ;313: return dest; ;314:} ;315: ;316:void *memcpy( void *dest, const void *src, size_t count ) { ;317: while ( count-- ) { ;318: ((char *)dest)[count] = ((char *)src)[count]; ;319: } ;320: return dest; ;321:} ;322: ;323:char *strncpy( char *strDest, const char *strSource, size_t count ) { ;324: char *s; ;325: ;326: s = strDest; ;327: while ( *strSource && count ) { ;328: *s++ = *strSource++; ;329: count--; ;330: } ;331: while ( count-- ) { ;332: *s++ = 0; ;333: } ;334: return strDest; ;335:} ;336: ;337:double sqrt( double x ) { ;338: float y; ;339: float delta; ;340: float maxError; ;341: ;342: if ( x <= 0 ) { ;343: return 0; ;344: } ;345: ;346: // initial guess ;347: y = x / 2; ;348: ;349: // refine ;350: maxError = x * 0.001; ;351: ;352: do { ;353: delta = ( y * y ) - x; ;354: y -= delta / ( 2 * y ); ;355: } while ( delta > maxError || delta < -maxError ); ;356: ;357: return y; ;358:} ;359: ;360: ;361:float sintable[1024] = { ;362:0.000000,0.001534,0.003068,0.004602,0.006136,0.007670,0.009204,0.010738, ;363:0.012272,0.013805,0.015339,0.016873,0.018407,0.019940,0.021474,0.023008, ;364:0.024541,0.026075,0.027608,0.029142,0.030675,0.032208,0.033741,0.035274, ;365:0.036807,0.038340,0.039873,0.041406,0.042938,0.044471,0.046003,0.047535, ;366:0.049068,0.050600,0.052132,0.053664,0.055195,0.056727,0.058258,0.059790, ;367:0.061321,0.062852,0.064383,0.065913,0.067444,0.068974,0.070505,0.072035, ;368:0.073565,0.075094,0.076624,0.078153,0.079682,0.081211,0.082740,0.084269, ;369:0.085797,0.087326,0.088854,0.090381,0.091909,0.093436,0.094963,0.096490, ;370:0.098017,0.099544,0.101070,0.102596,0.104122,0.105647,0.107172,0.108697, ;371:0.110222,0.111747,0.113271,0.114795,0.116319,0.117842,0.119365,0.120888, ;372:0.122411,0.123933,0.125455,0.126977,0.128498,0.130019,0.131540,0.133061, ;373:0.134581,0.136101,0.137620,0.139139,0.140658,0.142177,0.143695,0.145213, ;374:0.146730,0.148248,0.149765,0.151281,0.152797,0.154313,0.155828,0.157343, ;375:0.158858,0.160372,0.161886,0.163400,0.164913,0.166426,0.167938,0.169450, ;376:0.170962,0.172473,0.173984,0.175494,0.177004,0.178514,0.180023,0.181532, ;377:0.183040,0.184548,0.186055,0.187562,0.189069,0.190575,0.192080,0.193586, ;378:0.195090,0.196595,0.198098,0.199602,0.201105,0.202607,0.204109,0.205610, ;379:0.207111,0.208612,0.210112,0.211611,0.213110,0.214609,0.216107,0.217604, ;380:0.219101,0.220598,0.222094,0.223589,0.225084,0.226578,0.228072,0.229565, ;381:0.231058,0.232550,0.234042,0.235533,0.237024,0.238514,0.240003,0.241492, ;382:0.242980,0.244468,0.245955,0.247442,0.248928,0.250413,0.251898,0.253382, ;383:0.254866,0.256349,0.257831,0.259313,0.260794,0.262275,0.263755,0.265234, ;384:0.266713,0.268191,0.269668,0.271145,0.272621,0.274097,0.275572,0.277046, ;385:0.278520,0.279993,0.281465,0.282937,0.284408,0.285878,0.287347,0.288816, ;386:0.290285,0.291752,0.293219,0.294685,0.296151,0.297616,0.299080,0.300543, ;387:0.302006,0.303468,0.304929,0.306390,0.307850,0.309309,0.310767,0.312225, ;388:0.313682,0.315138,0.316593,0.318048,0.319502,0.320955,0.322408,0.323859, ;389:0.325310,0.326760,0.328210,0.329658,0.331106,0.332553,0.334000,0.335445, ;390:0.336890,0.338334,0.339777,0.341219,0.342661,0.344101,0.345541,0.346980, ;391:0.348419,0.349856,0.351293,0.352729,0.354164,0.355598,0.357031,0.358463, ;392:0.359895,0.361326,0.362756,0.364185,0.365613,0.367040,0.368467,0.369892, ;393:0.371317,0.372741,0.374164,0.375586,0.377007,0.378428,0.379847,0.381266, ;394:0.382683,0.384100,0.385516,0.386931,0.388345,0.389758,0.391170,0.392582, ;395:0.393992,0.395401,0.396810,0.398218,0.399624,0.401030,0.402435,0.403838, ;396:0.405241,0.406643,0.408044,0.409444,0.410843,0.412241,0.413638,0.415034, ;397:0.416430,0.417824,0.419217,0.420609,0.422000,0.423390,0.424780,0.426168, ;398:0.427555,0.428941,0.430326,0.431711,0.433094,0.434476,0.435857,0.437237, ;399:0.438616,0.439994,0.441371,0.442747,0.444122,0.445496,0.446869,0.448241, ;400:0.449611,0.450981,0.452350,0.453717,0.455084,0.456449,0.457813,0.459177, ;401:0.460539,0.461900,0.463260,0.464619,0.465976,0.467333,0.468689,0.470043, ;402:0.471397,0.472749,0.474100,0.475450,0.476799,0.478147,0.479494,0.480839, ;403:0.482184,0.483527,0.484869,0.486210,0.487550,0.488889,0.490226,0.491563, ;404:0.492898,0.494232,0.495565,0.496897,0.498228,0.499557,0.500885,0.502212, ;405:0.503538,0.504863,0.506187,0.507509,0.508830,0.510150,0.511469,0.512786, ;406:0.514103,0.515418,0.516732,0.518045,0.519356,0.520666,0.521975,0.523283, ;407:0.524590,0.525895,0.527199,0.528502,0.529804,0.531104,0.532403,0.533701, ;408:0.534998,0.536293,0.537587,0.538880,0.540171,0.541462,0.542751,0.544039, ;409:0.545325,0.546610,0.547894,0.549177,0.550458,0.551738,0.553017,0.554294, ;410:0.555570,0.556845,0.558119,0.559391,0.560662,0.561931,0.563199,0.564466, ;411:0.565732,0.566996,0.568259,0.569521,0.570781,0.572040,0.573297,0.574553, ;412:0.575808,0.577062,0.578314,0.579565,0.580814,0.582062,0.583309,0.584554, ;413:0.585798,0.587040,0.588282,0.589521,0.590760,0.591997,0.593232,0.594466, ;414:0.595699,0.596931,0.598161,0.599389,0.600616,0.601842,0.603067,0.604290, ;415:0.605511,0.606731,0.607950,0.609167,0.610383,0.611597,0.612810,0.614022, ;416:0.615232,0.616440,0.617647,0.618853,0.620057,0.621260,0.622461,0.623661, ;417:0.624859,0.626056,0.627252,0.628446,0.629638,0.630829,0.632019,0.633207, ;418:0.634393,0.635578,0.636762,0.637944,0.639124,0.640303,0.641481,0.642657, ;419:0.643832,0.645005,0.646176,0.647346,0.648514,0.649681,0.650847,0.652011, ;420:0.653173,0.654334,0.655493,0.656651,0.657807,0.658961,0.660114,0.661266, ;421:0.662416,0.663564,0.664711,0.665856,0.667000,0.668142,0.669283,0.670422, ;422:0.671559,0.672695,0.673829,0.674962,0.676093,0.677222,0.678350,0.679476, ;423:0.680601,0.681724,0.682846,0.683965,0.685084,0.686200,0.687315,0.688429, ;424:0.689541,0.690651,0.691759,0.692866,0.693971,0.695075,0.696177,0.697278, ;425:0.698376,0.699473,0.700569,0.701663,0.702755,0.703845,0.704934,0.706021, ;426:0.707107,0.708191,0.709273,0.710353,0.711432,0.712509,0.713585,0.714659, ;427:0.715731,0.716801,0.717870,0.718937,0.720003,0.721066,0.722128,0.723188, ;428:0.724247,0.725304,0.726359,0.727413,0.728464,0.729514,0.730563,0.731609, ;429:0.732654,0.733697,0.734739,0.735779,0.736817,0.737853,0.738887,0.739920, ;430:0.740951,0.741980,0.743008,0.744034,0.745058,0.746080,0.747101,0.748119, ;431:0.749136,0.750152,0.751165,0.752177,0.753187,0.754195,0.755201,0.756206, ;432:0.757209,0.758210,0.759209,0.760207,0.761202,0.762196,0.763188,0.764179, ;433:0.765167,0.766154,0.767139,0.768122,0.769103,0.770083,0.771061,0.772036, ;434:0.773010,0.773983,0.774953,0.775922,0.776888,0.777853,0.778817,0.779778, ;435:0.780737,0.781695,0.782651,0.783605,0.784557,0.785507,0.786455,0.787402, ;436:0.788346,0.789289,0.790230,0.791169,0.792107,0.793042,0.793975,0.794907, ;437:0.795837,0.796765,0.797691,0.798615,0.799537,0.800458,0.801376,0.802293, ;438:0.803208,0.804120,0.805031,0.805940,0.806848,0.807753,0.808656,0.809558, ;439:0.810457,0.811355,0.812251,0.813144,0.814036,0.814926,0.815814,0.816701, ;440:0.817585,0.818467,0.819348,0.820226,0.821103,0.821977,0.822850,0.823721, ;441:0.824589,0.825456,0.826321,0.827184,0.828045,0.828904,0.829761,0.830616, ;442:0.831470,0.832321,0.833170,0.834018,0.834863,0.835706,0.836548,0.837387, ;443:0.838225,0.839060,0.839894,0.840725,0.841555,0.842383,0.843208,0.844032, ;444:0.844854,0.845673,0.846491,0.847307,0.848120,0.848932,0.849742,0.850549, ;445:0.851355,0.852159,0.852961,0.853760,0.854558,0.855354,0.856147,0.856939, ;446:0.857729,0.858516,0.859302,0.860085,0.860867,0.861646,0.862424,0.863199, ;447:0.863973,0.864744,0.865514,0.866281,0.867046,0.867809,0.868571,0.869330, ;448:0.870087,0.870842,0.871595,0.872346,0.873095,0.873842,0.874587,0.875329, ;449:0.876070,0.876809,0.877545,0.878280,0.879012,0.879743,0.880471,0.881197, ;450:0.881921,0.882643,0.883363,0.884081,0.884797,0.885511,0.886223,0.886932, ;451:0.887640,0.888345,0.889048,0.889750,0.890449,0.891146,0.891841,0.892534, ;452:0.893224,0.893913,0.894599,0.895284,0.895966,0.896646,0.897325,0.898001, ;453:0.898674,0.899346,0.900016,0.900683,0.901349,0.902012,0.902673,0.903332, ;454:0.903989,0.904644,0.905297,0.905947,0.906596,0.907242,0.907886,0.908528, ;455:0.909168,0.909806,0.910441,0.911075,0.911706,0.912335,0.912962,0.913587, ;456:0.914210,0.914830,0.915449,0.916065,0.916679,0.917291,0.917901,0.918508, ;457:0.919114,0.919717,0.920318,0.920917,0.921514,0.922109,0.922701,0.923291, ;458:0.923880,0.924465,0.925049,0.925631,0.926210,0.926787,0.927363,0.927935, ;459:0.928506,0.929075,0.929641,0.930205,0.930767,0.931327,0.931884,0.932440, ;460:0.932993,0.933544,0.934093,0.934639,0.935184,0.935726,0.936266,0.936803, ;461:0.937339,0.937872,0.938404,0.938932,0.939459,0.939984,0.940506,0.941026, ;462:0.941544,0.942060,0.942573,0.943084,0.943593,0.944100,0.944605,0.945107, ;463:0.945607,0.946105,0.946601,0.947094,0.947586,0.948075,0.948561,0.949046, ;464:0.949528,0.950008,0.950486,0.950962,0.951435,0.951906,0.952375,0.952842, ;465:0.953306,0.953768,0.954228,0.954686,0.955141,0.955594,0.956045,0.956494, ;466:0.956940,0.957385,0.957826,0.958266,0.958703,0.959139,0.959572,0.960002, ;467:0.960431,0.960857,0.961280,0.961702,0.962121,0.962538,0.962953,0.963366, ;468:0.963776,0.964184,0.964590,0.964993,0.965394,0.965793,0.966190,0.966584, ;469:0.966976,0.967366,0.967754,0.968139,0.968522,0.968903,0.969281,0.969657, ;470:0.970031,0.970403,0.970772,0.971139,0.971504,0.971866,0.972226,0.972584, ;471:0.972940,0.973293,0.973644,0.973993,0.974339,0.974684,0.975025,0.975365, ;472:0.975702,0.976037,0.976370,0.976700,0.977028,0.977354,0.977677,0.977999, ;473:0.978317,0.978634,0.978948,0.979260,0.979570,0.979877,0.980182,0.980485, ;474:0.980785,0.981083,0.981379,0.981673,0.981964,0.982253,0.982539,0.982824, ;475:0.983105,0.983385,0.983662,0.983937,0.984210,0.984480,0.984749,0.985014, ;476:0.985278,0.985539,0.985798,0.986054,0.986308,0.986560,0.986809,0.987057, ;477:0.987301,0.987544,0.987784,0.988022,0.988258,0.988491,0.988722,0.988950, ;478:0.989177,0.989400,0.989622,0.989841,0.990058,0.990273,0.990485,0.990695, ;479:0.990903,0.991108,0.991311,0.991511,0.991710,0.991906,0.992099,0.992291, ;480:0.992480,0.992666,0.992850,0.993032,0.993212,0.993389,0.993564,0.993737, ;481:0.993907,0.994075,0.994240,0.994404,0.994565,0.994723,0.994879,0.995033, ;482:0.995185,0.995334,0.995481,0.995625,0.995767,0.995907,0.996045,0.996180, ;483:0.996313,0.996443,0.996571,0.996697,0.996820,0.996941,0.997060,0.997176, ;484:0.997290,0.997402,0.997511,0.997618,0.997723,0.997825,0.997925,0.998023, ;485:0.998118,0.998211,0.998302,0.998390,0.998476,0.998559,0.998640,0.998719, ;486:0.998795,0.998870,0.998941,0.999011,0.999078,0.999142,0.999205,0.999265, ;487:0.999322,0.999378,0.999431,0.999481,0.999529,0.999575,0.999619,0.999660, ;488:0.999699,0.999735,0.999769,0.999801,0.999831,0.999858,0.999882,0.999905, ;489:0.999925,0.999942,0.999958,0.999971,0.999981,0.999989,0.999995,0.999999 ;490:}; ;491: ;492:double sin( double x ) { ;493: int index; ;494: int quad; ;495: ;496: index = 1024 * x / (M_PI * 0.5); ;497: quad = ( index >> 10 ) & 3; ;498: index &= 1023; ;499: switch ( quad ) { ;500: case 0: ;501: return sintable[index]; ;502: case 1: ;503: return sintable[1023-index]; ;504: case 2: ;505: return -sintable[index]; ;506: case 3: ;507: return -sintable[1023-index]; ;508: } ;509: return 0; ;510:} ;511: ;512: ;513:double cos( double x ) { ;514: int index; ;515: int quad; ;516: ;517: index = 1024 * x / (M_PI * 0.5); ;518: quad = ( index >> 10 ) & 3; ;519: index &= 1023; ;520: switch ( quad ) { ;521: case 3: ;522: return sintable[index]; ;523: case 0: ;524: return sintable[1023-index]; ;525: case 1: ;526: return -sintable[index]; ;527: case 2: ;528: return -sintable[1023-index]; ;529: } ;530: return 0; ;531:} ;532: ;533: ;534:/* ;535:void create_acostable( void ) { ;536: int i; ;537: FILE *fp; ;538: float a; ;539: ;540: fp = fopen("c:\\acostable.txt", "w"); ;541: fprintf(fp, "float acostable[] = {"); ;542: for (i = 0; i < 1024; i++) { ;543: if (!(i & 7)) ;544: fprintf(fp, "\n"); ;545: a = acos( (float) -1 + i / 512 ); ;546: fprintf(fp, "%1.8f,", a); ;547: } ;548: fprintf(fp, "\n}\n"); ;549: fclose(fp); ;550:} ;551:*/ ;552: ;553:float acostable[] = { ;554:3.14159265,3.07908248,3.05317551,3.03328655,3.01651113,3.00172442,2.98834964,2.97604422, ;555:2.96458497,2.95381690,2.94362719,2.93393068,2.92466119,2.91576615,2.90720289,2.89893629, ;556:2.89093699,2.88318015,2.87564455,2.86831188,2.86116621,2.85419358,2.84738169,2.84071962, ;557:2.83419760,2.82780691,2.82153967,2.81538876,2.80934770,2.80341062,2.79757211,2.79182724, ;558:2.78617145,2.78060056,2.77511069,2.76969824,2.76435988,2.75909250,2.75389319,2.74875926, ;559:2.74368816,2.73867752,2.73372510,2.72882880,2.72398665,2.71919677,2.71445741,2.70976688, ;560:2.70512362,2.70052613,2.69597298,2.69146283,2.68699438,2.68256642,2.67817778,2.67382735, ;561:2.66951407,2.66523692,2.66099493,2.65678719,2.65261279,2.64847088,2.64436066,2.64028133, ;562:2.63623214,2.63221238,2.62822133,2.62425835,2.62032277,2.61641398,2.61253138,2.60867440, ;563:2.60484248,2.60103507,2.59725167,2.59349176,2.58975488,2.58604053,2.58234828,2.57867769, ;564:2.57502832,2.57139977,2.56779164,2.56420354,2.56063509,2.55708594,2.55355572,2.55004409, ;565:2.54655073,2.54307530,2.53961750,2.53617701,2.53275354,2.52934680,2.52595650,2.52258238, ;566:2.51922417,2.51588159,2.51255441,2.50924238,2.50594525,2.50266278,2.49939476,2.49614096, ;567:2.49290115,2.48967513,2.48646269,2.48326362,2.48007773,2.47690482,2.47374472,2.47059722, ;568:2.46746215,2.46433933,2.46122860,2.45812977,2.45504269,2.45196720,2.44890314,2.44585034, ;569:2.44280867,2.43977797,2.43675809,2.43374890,2.43075025,2.42776201,2.42478404,2.42181622, ;570:2.41885841,2.41591048,2.41297232,2.41004380,2.40712480,2.40421521,2.40131491,2.39842379, ;571:2.39554173,2.39266863,2.38980439,2.38694889,2.38410204,2.38126374,2.37843388,2.37561237, ;572:2.37279910,2.36999400,2.36719697,2.36440790,2.36162673,2.35885335,2.35608768,2.35332964, ;573:2.35057914,2.34783610,2.34510044,2.34237208,2.33965094,2.33693695,2.33423003,2.33153010, ;574:2.32883709,2.32615093,2.32347155,2.32079888,2.31813284,2.31547337,2.31282041,2.31017388, ;575:2.30753373,2.30489988,2.30227228,2.29965086,2.29703556,2.29442632,2.29182309,2.28922580, ;576:2.28663439,2.28404881,2.28146900,2.27889490,2.27632647,2.27376364,2.27120637,2.26865460, ;577:2.26610827,2.26356735,2.26103177,2.25850149,2.25597646,2.25345663,2.25094195,2.24843238, ;578:2.24592786,2.24342836,2.24093382,2.23844420,2.23595946,2.23347956,2.23100444,2.22853408, ;579:2.22606842,2.22360742,2.22115104,2.21869925,2.21625199,2.21380924,2.21137096,2.20893709, ;580:2.20650761,2.20408248,2.20166166,2.19924511,2.19683280,2.19442469,2.19202074,2.18962092, ;581:2.18722520,2.18483354,2.18244590,2.18006225,2.17768257,2.17530680,2.17293493,2.17056692, ;582:2.16820274,2.16584236,2.16348574,2.16113285,2.15878367,2.15643816,2.15409630,2.15175805, ;583:2.14942338,2.14709226,2.14476468,2.14244059,2.14011997,2.13780279,2.13548903,2.13317865, ;584:2.13087163,2.12856795,2.12626757,2.12397047,2.12167662,2.11938600,2.11709859,2.11481435, ;585:2.11253326,2.11025530,2.10798044,2.10570867,2.10343994,2.10117424,2.09891156,2.09665185, ;586:2.09439510,2.09214129,2.08989040,2.08764239,2.08539725,2.08315496,2.08091550,2.07867884, ;587:2.07644495,2.07421383,2.07198545,2.06975978,2.06753681,2.06531651,2.06309887,2.06088387, ;588:2.05867147,2.05646168,2.05425445,2.05204979,2.04984765,2.04764804,2.04545092,2.04325628, ;589:2.04106409,2.03887435,2.03668703,2.03450211,2.03231957,2.03013941,2.02796159,2.02578610, ;590:2.02361292,2.02144204,2.01927344,2.01710710,2.01494300,2.01278113,2.01062146,2.00846399, ;591:2.00630870,2.00415556,2.00200457,1.99985570,1.99770895,1.99556429,1.99342171,1.99128119, ;592:1.98914271,1.98700627,1.98487185,1.98273942,1.98060898,1.97848051,1.97635399,1.97422942, ;593:1.97210676,1.96998602,1.96786718,1.96575021,1.96363511,1.96152187,1.95941046,1.95730088, ;594:1.95519310,1.95308712,1.95098292,1.94888050,1.94677982,1.94468089,1.94258368,1.94048818, ;595:1.93839439,1.93630228,1.93421185,1.93212308,1.93003595,1.92795046,1.92586659,1.92378433, ;596:1.92170367,1.91962459,1.91754708,1.91547113,1.91339673,1.91132385,1.90925250,1.90718266, ;597:1.90511432,1.90304746,1.90098208,1.89891815,1.89685568,1.89479464,1.89273503,1.89067683, ;598:1.88862003,1.88656463,1.88451060,1.88245794,1.88040664,1.87835668,1.87630806,1.87426076, ;599:1.87221477,1.87017008,1.86812668,1.86608457,1.86404371,1.86200412,1.85996577,1.85792866, ;600:1.85589277,1.85385809,1.85182462,1.84979234,1.84776125,1.84573132,1.84370256,1.84167495, ;601:1.83964848,1.83762314,1.83559892,1.83357582,1.83155381,1.82953289,1.82751305,1.82549429, ;602:1.82347658,1.82145993,1.81944431,1.81742973,1.81541617,1.81340362,1.81139207,1.80938151, ;603:1.80737194,1.80536334,1.80335570,1.80134902,1.79934328,1.79733848,1.79533460,1.79333164, ;604:1.79132959,1.78932843,1.78732817,1.78532878,1.78333027,1.78133261,1.77933581,1.77733985, ;605:1.77534473,1.77335043,1.77135695,1.76936428,1.76737240,1.76538132,1.76339101,1.76140148, ;606:1.75941271,1.75742470,1.75543743,1.75345090,1.75146510,1.74948002,1.74749565,1.74551198, ;607:1.74352900,1.74154672,1.73956511,1.73758417,1.73560389,1.73362426,1.73164527,1.72966692, ;608:1.72768920,1.72571209,1.72373560,1.72175971,1.71978441,1.71780969,1.71583556,1.71386199, ;609:1.71188899,1.70991653,1.70794462,1.70597325,1.70400241,1.70203209,1.70006228,1.69809297, ;610:1.69612416,1.69415584,1.69218799,1.69022062,1.68825372,1.68628727,1.68432127,1.68235571, ;611:1.68039058,1.67842588,1.67646160,1.67449772,1.67253424,1.67057116,1.66860847,1.66664615, ;612:1.66468420,1.66272262,1.66076139,1.65880050,1.65683996,1.65487975,1.65291986,1.65096028, ;613:1.64900102,1.64704205,1.64508338,1.64312500,1.64116689,1.63920905,1.63725148,1.63529416, ;614:1.63333709,1.63138026,1.62942366,1.62746728,1.62551112,1.62355517,1.62159943,1.61964388, ;615:1.61768851,1.61573332,1.61377831,1.61182346,1.60986877,1.60791422,1.60595982,1.60400556, ;616:1.60205142,1.60009739,1.59814349,1.59618968,1.59423597,1.59228235,1.59032882,1.58837536, ;617:1.58642196,1.58446863,1.58251535,1.58056211,1.57860891,1.57665574,1.57470259,1.57274945, ;618:1.57079633,1.56884320,1.56689007,1.56493692,1.56298375,1.56103055,1.55907731,1.55712403, ;619:1.55517069,1.55321730,1.55126383,1.54931030,1.54735668,1.54540297,1.54344917,1.54149526, ;620:1.53954124,1.53758710,1.53563283,1.53367843,1.53172389,1.52976919,1.52781434,1.52585933, ;621:1.52390414,1.52194878,1.51999323,1.51803748,1.51608153,1.51412537,1.51216900,1.51021240, ;622:1.50825556,1.50629849,1.50434117,1.50238360,1.50042576,1.49846765,1.49650927,1.49455060, ;623:1.49259163,1.49063237,1.48867280,1.48671291,1.48475270,1.48279215,1.48083127,1.47887004, ;624:1.47690845,1.47494650,1.47298419,1.47102149,1.46905841,1.46709493,1.46513106,1.46316677, ;625:1.46120207,1.45923694,1.45727138,1.45530538,1.45333893,1.45137203,1.44940466,1.44743682, ;626:1.44546850,1.44349969,1.44153038,1.43956057,1.43759024,1.43561940,1.43364803,1.43167612, ;627:1.42970367,1.42773066,1.42575709,1.42378296,1.42180825,1.41983295,1.41785705,1.41588056, ;628:1.41390346,1.41192573,1.40994738,1.40796840,1.40598877,1.40400849,1.40202755,1.40004594, ;629:1.39806365,1.39608068,1.39409701,1.39211264,1.39012756,1.38814175,1.38615522,1.38416795, ;630:1.38217994,1.38019117,1.37820164,1.37621134,1.37422025,1.37222837,1.37023570,1.36824222, ;631:1.36624792,1.36425280,1.36225684,1.36026004,1.35826239,1.35626387,1.35426449,1.35226422, ;632:1.35026307,1.34826101,1.34625805,1.34425418,1.34224937,1.34024364,1.33823695,1.33622932, ;633:1.33422072,1.33221114,1.33020059,1.32818904,1.32617649,1.32416292,1.32214834,1.32013273, ;634:1.31811607,1.31609837,1.31407960,1.31205976,1.31003885,1.30801684,1.30599373,1.30396951, ;635:1.30194417,1.29991770,1.29789009,1.29586133,1.29383141,1.29180031,1.28976803,1.28773456, ;636:1.28569989,1.28366400,1.28162688,1.27958854,1.27754894,1.27550809,1.27346597,1.27142257, ;637:1.26937788,1.26733189,1.26528459,1.26323597,1.26118602,1.25913471,1.25708205,1.25502803, ;638:1.25297262,1.25091583,1.24885763,1.24679802,1.24473698,1.24267450,1.24061058,1.23854519, ;639:1.23647833,1.23440999,1.23234015,1.23026880,1.22819593,1.22612152,1.22404557,1.22196806, ;640:1.21988898,1.21780832,1.21572606,1.21364219,1.21155670,1.20946958,1.20738080,1.20529037, ;641:1.20319826,1.20110447,1.19900898,1.19691177,1.19481283,1.19271216,1.19060973,1.18850553, ;642:1.18639955,1.18429178,1.18218219,1.18007079,1.17795754,1.17584244,1.17372548,1.17160663, ;643:1.16948589,1.16736324,1.16523866,1.16311215,1.16098368,1.15885323,1.15672081,1.15458638, ;644:1.15244994,1.15031147,1.14817095,1.14602836,1.14388370,1.14173695,1.13958808,1.13743709, ;645:1.13528396,1.13312866,1.13097119,1.12881153,1.12664966,1.12448556,1.12231921,1.12015061, ;646:1.11797973,1.11580656,1.11363107,1.11145325,1.10927308,1.10709055,1.10490563,1.10271831, ;647:1.10052856,1.09833638,1.09614174,1.09394462,1.09174500,1.08954287,1.08733820,1.08513098, ;648:1.08292118,1.08070879,1.07849378,1.07627614,1.07405585,1.07183287,1.06960721,1.06737882, ;649:1.06514770,1.06291382,1.06067715,1.05843769,1.05619540,1.05395026,1.05170226,1.04945136, ;650:1.04719755,1.04494080,1.04268110,1.04041841,1.03815271,1.03588399,1.03361221,1.03133735, ;651:1.02905939,1.02677830,1.02449407,1.02220665,1.01991603,1.01762219,1.01532509,1.01302471, ;652:1.01072102,1.00841400,1.00610363,1.00378986,1.00147268,0.99915206,0.99682798,0.99450039, ;653:0.99216928,0.98983461,0.98749636,0.98515449,0.98280898,0.98045980,0.97810691,0.97575030, ;654:0.97338991,0.97102573,0.96865772,0.96628585,0.96391009,0.96153040,0.95914675,0.95675912, ;655:0.95436745,0.95197173,0.94957191,0.94716796,0.94475985,0.94234754,0.93993099,0.93751017, ;656:0.93508504,0.93265556,0.93022170,0.92778341,0.92534066,0.92289341,0.92044161,0.91798524, ;657:0.91552424,0.91305858,0.91058821,0.90811309,0.90563319,0.90314845,0.90065884,0.89816430, ;658:0.89566479,0.89316028,0.89065070,0.88813602,0.88561619,0.88309116,0.88056088,0.87802531, ;659:0.87548438,0.87293806,0.87038629,0.86782901,0.86526619,0.86269775,0.86012366,0.85754385, ;660:0.85495827,0.85236686,0.84976956,0.84716633,0.84455709,0.84194179,0.83932037,0.83669277, ;661:0.83405893,0.83141877,0.82877225,0.82611928,0.82345981,0.82079378,0.81812110,0.81544172, ;662:0.81275556,0.81006255,0.80736262,0.80465570,0.80194171,0.79922057,0.79649221,0.79375655, ;663:0.79101352,0.78826302,0.78550497,0.78273931,0.77996593,0.77718475,0.77439569,0.77159865, ;664:0.76879355,0.76598029,0.76315878,0.76032891,0.75749061,0.75464376,0.75178826,0.74892402, ;665:0.74605092,0.74316887,0.74027775,0.73737744,0.73446785,0.73154885,0.72862033,0.72568217, ;666:0.72273425,0.71977644,0.71680861,0.71383064,0.71084240,0.70784376,0.70483456,0.70181469, ;667:0.69878398,0.69574231,0.69268952,0.68962545,0.68654996,0.68346288,0.68036406,0.67725332, ;668:0.67413051,0.67099544,0.66784794,0.66468783,0.66151492,0.65832903,0.65512997,0.65191753, ;669:0.64869151,0.64545170,0.64219789,0.63892987,0.63564741,0.63235028,0.62903824,0.62571106, ;670:0.62236849,0.61901027,0.61563615,0.61224585,0.60883911,0.60541564,0.60197515,0.59851735, ;671:0.59504192,0.59154856,0.58803694,0.58450672,0.58095756,0.57738911,0.57380101,0.57019288, ;672:0.56656433,0.56291496,0.55924437,0.55555212,0.55183778,0.54810089,0.54434099,0.54055758, ;673:0.53675018,0.53291825,0.52906127,0.52517867,0.52126988,0.51733431,0.51337132,0.50938028, ;674:0.50536051,0.50131132,0.49723200,0.49312177,0.48897987,0.48480547,0.48059772,0.47635573, ;675:0.47207859,0.46776530,0.46341487,0.45902623,0.45459827,0.45012983,0.44561967,0.44106652, ;676:0.43646903,0.43182577,0.42713525,0.42239588,0.41760600,0.41276385,0.40786755,0.40291513, ;677:0.39790449,0.39283339,0.38769946,0.38250016,0.37723277,0.37189441,0.36648196,0.36099209, ;678:0.35542120,0.34976542,0.34402054,0.33818204,0.33224495,0.32620390,0.32005298,0.31378574, ;679:0.30739505,0.30087304,0.29421096,0.28739907,0.28042645,0.27328078,0.26594810,0.25841250, ;680:0.25065566,0.24265636,0.23438976,0.22582651,0.21693146,0.20766198,0.19796546,0.18777575, ;681:0.17700769,0.16554844,0.15324301,0.13986823,0.12508152,0.10830610,0.08841715,0.06251018, ;682:} ;683: ;684:double acos( double x ) { ;685: int index; ;686: ;687: if (x < -1) ;688: x = -1; ;689: if (x > 1) ;690: x = 1; ;691: index = (float) (1.0 + x) * 511.9; ;692: return acostable[index]; ;693:} ;694: ;695:double atan2( double y, double x ) { ;696: float base; ;697: float temp; ;698: float dir; ;699: float test; ;700: int i; ;701: ;702: if ( x < 0 ) { ;703: if ( y >= 0 ) { ;704: // quad 1 ;705: base = M_PI / 2; ;706: temp = x; ;707: x = y; ;708: y = -temp; ;709: } else { ;710: // quad 2 ;711: base = M_PI; ;712: x = -x; ;713: y = -y; ;714: } ;715: } else { ;716: if ( y < 0 ) { ;717: // quad 3 ;718: base = 3 * M_PI / 2; ;719: temp = x; ;720: x = -y; ;721: y = temp; ;722: } ;723: } ;724: ;725: if ( y > x ) { ;726: base += M_PI/2; ;727: temp = x; ;728: x = y; ;729: y = temp; ;730: dir = -1; ;731: } else { ;732: dir = 1; ;733: } ;734: ;735: // calcualte angle in octant 0 ;736: if ( x == 0 ) { ;737: return base; ;738: } ;739: y /= x; ;740: ;741: for ( i = 0 ; i < 512 ; i++ ) { ;742: test = sintable[i] / sintable[1023-i]; ;743: if ( test > y ) { ;744: break; ;745: } ;746: } ;747: ;748: return base + dir * i * ( M_PI/2048); ;749:} ;750: ;751: ;752:#endif ;753: ;754:#ifdef Q3_VM ;755:// bk001127 - guarded this tan replacement ;756:// ld: undefined versioned symbol name tan@@GLIBC_2.0 ;757:double tan( double x ) { line 758 ;758: return sin(x) / cos(x); ADDRFP4 0 INDIRF4 ARGF4 ADDRLP4 0 ADDRGP4 sin CALLF4 ASGNF4 ADDRFP4 0 INDIRF4 ARGF4 ADDRLP4 4 ADDRGP4 cos CALLF4 ASGNF4 ADDRLP4 0 INDIRF4 ADDRLP4 4 INDIRF4 DIVF4 RETF4 LABELV $196 endproc tan 8 4 data align 4 LABELV randSeed byte 4 0 export srand code proc srand 0 0 line 765 ;759:} ;760:#endif ;761: ;762: ;763:static int randSeed = 0; ;764: ;765:void srand( unsigned seed ) { line 766 ;766: randSeed = seed; ADDRGP4 randSeed ADDRFP4 0 INDIRU4 CVUI4 4 ASGNI4 line 767 ;767:} LABELV $197 endproc srand 0 0 export rand proc rand 4 0 line 769 ;768: ;769:int rand( void ) { line 770 ;770: randSeed = (69069 * randSeed + 1); ADDRLP4 0 ADDRGP4 randSeed ASGNP4 ADDRLP4 0 INDIRP4 CNSTI4 69069 ADDRLP4 0 INDIRP4 INDIRI4 MULI4 CNSTI4 1 ADDI4 ASGNI4 line 771 ;771: return randSeed & 0x7fff; ADDRGP4 randSeed INDIRI4 CNSTI4 32767 BANDI4 RETI4 LABELV $198 endproc rand 4 0 export atof proc atof 32 0 line 774 ;772:} ;773: ;774:double atof( const char *string ) { ADDRGP4 $201 JUMPV LABELV $200 line 781 ;775: float sign; ;776: float value; ;777: int c; ;778: ;779: ;780: // skip whitespace ;781: while ( *string <= ' ' ) { line 782 ;782: if ( !*string ) { ADDRFP4 0 INDIRP4 INDIRI1 CVII4 1 CNSTI4 0 NEI4 $203 line 783 ;783: return 0; CNSTF4 0 RETF4 ADDRGP4 $199 JUMPV LABELV $203 line 785 ;784: } ;785: string++; ADDRFP4 0 ADDRFP4 0 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 line 786 ;786: } LABELV $201 line 781 ADDRFP4 0 INDIRP4 INDIRI1 CVII4 1 CNSTI4 32 LEI4 $200 line 789 ;787: ;788: // check sign ;789: switch ( *string ) { ADDRLP4 12 ADDRFP4 0 INDIRP4 INDIRI1 CVII4 1 ASGNI4 ADDRLP4 12 INDIRI4 CNSTI4 43 EQI4 $208 ADDRLP4 12 INDIRI4 CNSTI4 45 EQI4 $209 ADDRGP4 $205 JUMPV LABELV $208 line 791 ;790: case '+': ;791: string++; ADDRFP4 0 ADDRFP4 0 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 line 792 ;792: sign = 1; ADDRLP4 8 CNSTF4 1065353216 ASGNF4 line 793 ;793: break; ADDRGP4 $206 JUMPV LABELV $209 line 795 ;794: case '-': ;795: string++; ADDRFP4 0 ADDRFP4 0 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 line 796 ;796: sign = -1; ADDRLP4 8 CNSTF4 3212836864 ASGNF4 line 797 ;797: break; ADDRGP4 $206 JUMPV LABELV $205 line 799 ;798: default: ;799: sign = 1; ADDRLP4 8 CNSTF4 1065353216 ASGNF4 line 800 ;800: break; LABELV $206 line 804 ;801: } ;802: ;803: // read digits ;804: value = 0; ADDRLP4 4 CNSTF4 0 ASGNF4 line 805 ;805: c = string[0]; ADDRLP4 0 ADDRFP4 0 INDIRP4 INDIRI1 CVII4 1 ASGNI4 line 806 ;806: if ( c != '.' ) { ADDRLP4 0 INDIRI4 CNSTI4 46 EQI4 $210 LABELV $212 line 807 ;807: do { line 808 ;808: c = *string++; ADDRLP4 20 ADDRFP4 0 INDIRP4 ASGNP4 ADDRFP4 0 ADDRLP4 20 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 ADDRLP4 0 ADDRLP4 20 INDIRP4 INDIRI1 CVII4 1 ASGNI4 line 809 ;809: if ( c < '0' || c > '9' ) { ADDRLP4 0 INDIRI4 CNSTI4 48 LTI4 $217 ADDRLP4 0 INDIRI4 CNSTI4 57 LEI4 $215 LABELV $217 line 810 ;810: break; ADDRGP4 $211 JUMPV LABELV $215 line 812 ;811: } ;812: c -= '0'; ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 48 SUBI4 ASGNI4 line 813 ;813: value = value * 10 + c; ADDRLP4 4 CNSTF4 1092616192 ADDRLP4 4 INDIRF4 MULF4 ADDRLP4 0 INDIRI4 CVIF4 4 ADDF4 ASGNF4 line 814 ;814: } while ( 1 ); LABELV $213 ADDRGP4 $212 JUMPV line 815 ;815: } else { ADDRGP4 $211 JUMPV LABELV $210 line 816 ;816: string++; ADDRFP4 0 ADDRFP4 0 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 line 817 ;817: } LABELV $211 line 820 ;818: ;819: // check for decimal point ;820: if ( c == '.' ) { ADDRLP4 0 INDIRI4 CNSTI4 46 NEI4 $218 line 823 ;821: double fraction; ;822: ;823: fraction = 0.1; ADDRLP4 20 CNSTF4 1036831949 ASGNF4 LABELV $220 line 824 ;824: do { line 825 ;825: c = *string++; ADDRLP4 24 ADDRFP4 0 INDIRP4 ASGNP4 ADDRFP4 0 ADDRLP4 24 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 ADDRLP4 0 ADDRLP4 24 INDIRP4 INDIRI1 CVII4 1 ASGNI4 line 826 ;826: if ( c < '0' || c > '9' ) { ADDRLP4 0 INDIRI4 CNSTI4 48 LTI4 $225 ADDRLP4 0 INDIRI4 CNSTI4 57 LEI4 $223 LABELV $225 line 827 ;827: break; ADDRGP4 $222 JUMPV LABELV $223 line 829 ;828: } ;829: c -= '0'; ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 48 SUBI4 ASGNI4 line 830 ;830: value += c * fraction; ADDRLP4 4 ADDRLP4 4 INDIRF4 ADDRLP4 0 INDIRI4 CVIF4 4 ADDRLP4 20 INDIRF4 MULF4 ADDF4 ASGNF4 line 831 ;831: fraction *= 0.1; ADDRLP4 20 CNSTF4 1036831949 ADDRLP4 20 INDIRF4 MULF4 ASGNF4 line 832 ;832: } while ( 1 ); LABELV $221 ADDRGP4 $220 JUMPV LABELV $222 line 834 ;833: ;834: } LABELV $218 line 838 ;835: ;836: // not handling 10e10 notation... ;837: ;838: return value * sign; ADDRLP4 4 INDIRF4 ADDRLP4 8 INDIRF4 MULF4 RETF4 LABELV $199 endproc atof 32 0 export _atof proc _atof 36 0 line 841 ;839:} ;840: ;841:double _atof( const char **stringPtr ) { line 845 ;842: const char *string; ;843: float sign; ;844: float value; ;845: int c = '0'; // bk001211 - uninitialized use possible ADDRLP4 0 CNSTI4 48 ASGNI4 line 847 ;846: ;847: string = *stringPtr; ADDRLP4 4 ADDRFP4 0 INDIRP4 INDIRP4 ASGNP4 ADDRGP4 $228 JUMPV LABELV $227 line 850 ;848: ;849: // skip whitespace ;850: while ( *string <= ' ' ) { line 851 ;851: if ( !*string ) { ADDRLP4 4 INDIRP4 INDIRI1 CVII4 1 CNSTI4 0 NEI4 $230 line 852 ;852: *stringPtr = string; ADDRFP4 0 INDIRP4 ADDRLP4 4 INDIRP4 ASGNP4 line 853 ;853: return 0; CNSTF4 0 RETF4 ADDRGP4 $226 JUMPV LABELV $230 line 855 ;854: } ;855: string++; ADDRLP4 4 ADDRLP4 4 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 line 856 ;856: } LABELV $228 line 850 ADDRLP4 4 INDIRP4 INDIRI1 CVII4 1 CNSTI4 32 LEI4 $227 line 859 ;857: ;858: // check sign ;859: switch ( *string ) { ADDRLP4 16 ADDRLP4 4 INDIRP4 INDIRI1 CVII4 1 ASGNI4 ADDRLP4 16 INDIRI4 CNSTI4 43 EQI4 $235 ADDRLP4 16 INDIRI4 CNSTI4 45 EQI4 $236 ADDRGP4 $232 JUMPV LABELV $235 line 861 ;860: case '+': ;861: string++; ADDRLP4 4 ADDRLP4 4 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 line 862 ;862: sign = 1; ADDRLP4 12 CNSTF4 1065353216 ASGNF4 line 863 ;863: break; ADDRGP4 $233 JUMPV LABELV $236 line 865 ;864: case '-': ;865: string++; ADDRLP4 4 ADDRLP4 4 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 line 866 ;866: sign = -1; ADDRLP4 12 CNSTF4 3212836864 ASGNF4 line 867 ;867: break; ADDRGP4 $233 JUMPV LABELV $232 line 869 ;868: default: ;869: sign = 1; ADDRLP4 12 CNSTF4 1065353216 ASGNF4 line 870 ;870: break; LABELV $233 line 874 ;871: } ;872: ;873: // read digits ;874: value = 0; ADDRLP4 8 CNSTF4 0 ASGNF4 line 875 ;875: if ( string[0] != '.' ) { ADDRLP4 4 INDIRP4 INDIRI1 CVII4 1 CNSTI4 46 EQI4 $237 LABELV $239 line 876 ;876: do { line 877 ;877: c = *string++; ADDRLP4 24 ADDRLP4 4 INDIRP4 ASGNP4 ADDRLP4 4 ADDRLP4 24 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 ADDRLP4 0 ADDRLP4 24 INDIRP4 INDIRI1 CVII4 1 ASGNI4 line 878 ;878: if ( c < '0' || c > '9' ) { ADDRLP4 0 INDIRI4 CNSTI4 48 LTI4 $244 ADDRLP4 0 INDIRI4 CNSTI4 57 LEI4 $242 LABELV $244 line 879 ;879: break; ADDRGP4 $241 JUMPV LABELV $242 line 881 ;880: } ;881: c -= '0'; ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 48 SUBI4 ASGNI4 line 882 ;882: value = value * 10 + c; ADDRLP4 8 CNSTF4 1092616192 ADDRLP4 8 INDIRF4 MULF4 ADDRLP4 0 INDIRI4 CVIF4 4 ADDF4 ASGNF4 line 883 ;883: } while ( 1 ); LABELV $240 ADDRGP4 $239 JUMPV LABELV $241 line 884 ;884: } LABELV $237 line 887 ;885: ;886: // check for decimal point ;887: if ( c == '.' ) { ADDRLP4 0 INDIRI4 CNSTI4 46 NEI4 $245 line 890 ;888: double fraction; ;889: ;890: fraction = 0.1; ADDRLP4 24 CNSTF4 1036831949 ASGNF4 LABELV $247 line 891 ;891: do { line 892 ;892: c = *string++; ADDRLP4 28 ADDRLP4 4 INDIRP4 ASGNP4 ADDRLP4 4 ADDRLP4 28 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 ADDRLP4 0 ADDRLP4 28 INDIRP4 INDIRI1 CVII4 1 ASGNI4 line 893 ;893: if ( c < '0' || c > '9' ) { ADDRLP4 0 INDIRI4 CNSTI4 48 LTI4 $252 ADDRLP4 0 INDIRI4 CNSTI4 57 LEI4 $250 LABELV $252 line 894 ;894: break; ADDRGP4 $249 JUMPV LABELV $250 line 896 ;895: } ;896: c -= '0'; ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 48 SUBI4 ASGNI4 line 897 ;897: value += c * fraction; ADDRLP4 8 ADDRLP4 8 INDIRF4 ADDRLP4 0 INDIRI4 CVIF4 4 ADDRLP4 24 INDIRF4 MULF4 ADDF4 ASGNF4 line 898 ;898: fraction *= 0.1; ADDRLP4 24 CNSTF4 1036831949 ADDRLP4 24 INDIRF4 MULF4 ASGNF4 line 899 ;899: } while ( 1 ); LABELV $248 ADDRGP4 $247 JUMPV LABELV $249 line 901 ;900: ;901: } LABELV $245 line 904 ;902: ;903: // not handling 10e10 notation... ;904: *stringPtr = string; ADDRFP4 0 INDIRP4 ADDRLP4 4 INDIRP4 ASGNP4 line 906 ;905: ;906: return value * sign; ADDRLP4 8 INDIRF4 ADDRLP4 12 INDIRF4 MULF4 RETF4 LABELV $226 endproc _atof 36 0 export atoi proc atoi 28 0 line 915 ;907:} ;908: ;909: ;910:// bk001120 - presumably needed for Mac ;911://#if !defined ( _MSC_VER ) && ! defined ( __linux__ ) ;912: ;913:// bk001127 - undid undo ;914:#if defined ( Q3_VM ) ;915:int atoi( const char *string ) { ADDRGP4 $255 JUMPV LABELV $254 line 922 ;916: int sign; ;917: int value; ;918: int c; ;919: ;920: ;921: // skip whitespace ;922: while ( *string <= ' ' ) { line 923 ;923: if ( !*string ) { ADDRFP4 0 INDIRP4 INDIRI1 CVII4 1 CNSTI4 0 NEI4 $257 line 924 ;924: return 0; CNSTI4 0 RETI4 ADDRGP4 $253 JUMPV LABELV $257 line 926 ;925: } ;926: string++; ADDRFP4 0 ADDRFP4 0 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 line 927 ;927: } LABELV $255 line 922 ADDRFP4 0 INDIRP4 INDIRI1 CVII4 1 CNSTI4 32 LEI4 $254 line 930 ;928: ;929: // check sign ;930: switch ( *string ) { ADDRLP4 12 ADDRFP4 0 INDIRP4 INDIRI1 CVII4 1 ASGNI4 ADDRLP4 12 INDIRI4 CNSTI4 43 EQI4 $262 ADDRLP4 12 INDIRI4 CNSTI4 45 EQI4 $263 ADDRGP4 $259 JUMPV LABELV $262 line 932 ;931: case '+': ;932: string++; ADDRFP4 0 ADDRFP4 0 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 line 933 ;933: sign = 1; ADDRLP4 8 CNSTI4 1 ASGNI4 line 934 ;934: break; ADDRGP4 $260 JUMPV LABELV $263 line 936 ;935: case '-': ;936: string++; ADDRFP4 0 ADDRFP4 0 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 line 937 ;937: sign = -1; ADDRLP4 8 CNSTI4 -1 ASGNI4 line 938 ;938: break; ADDRGP4 $260 JUMPV LABELV $259 line 940 ;939: default: ;940: sign = 1; ADDRLP4 8 CNSTI4 1 ASGNI4 line 941 ;941: break; LABELV $260 line 945 ;942: } ;943: ;944: // read digits ;945: value = 0; ADDRLP4 4 CNSTI4 0 ASGNI4 LABELV $264 line 946 ;946: do { line 947 ;947: c = *string++; ADDRLP4 20 ADDRFP4 0 INDIRP4 ASGNP4 ADDRFP4 0 ADDRLP4 20 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 ADDRLP4 0 ADDRLP4 20 INDIRP4 INDIRI1 CVII4 1 ASGNI4 line 948 ;948: if ( c < '0' || c > '9' ) { ADDRLP4 0 INDIRI4 CNSTI4 48 LTI4 $269 ADDRLP4 0 INDIRI4 CNSTI4 57 LEI4 $267 LABELV $269 line 949 ;949: break; ADDRGP4 $266 JUMPV LABELV $267 line 951 ;950: } ;951: c -= '0'; ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 48 SUBI4 ASGNI4 line 952 ;952: value = value * 10 + c; ADDRLP4 4 CNSTI4 10 ADDRLP4 4 INDIRI4 MULI4 ADDRLP4 0 INDIRI4 ADDI4 ASGNI4 line 953 ;953: } while ( 1 ); LABELV $265 ADDRGP4 $264 JUMPV LABELV $266 line 957 ;954: ;955: // not handling 10e10 notation... ;956: ;957: return value * sign; ADDRLP4 4 INDIRI4 ADDRLP4 8 INDIRI4 MULI4 RETI4 LABELV $253 endproc atoi 28 0 export _atoi proc _atoi 32 0 line 961 ;958:} ;959: ;960: ;961:int _atoi( const char **stringPtr ) { line 967 ;962: int sign; ;963: int value; ;964: int c; ;965: const char *string; ;966: ;967: string = *stringPtr; ADDRLP4 4 ADDRFP4 0 INDIRP4 INDIRP4 ASGNP4 ADDRGP4 $272 JUMPV LABELV $271 line 970 ;968: ;969: // skip whitespace ;970: while ( *string <= ' ' ) { line 971 ;971: if ( !*string ) { ADDRLP4 4 INDIRP4 INDIRI1 CVII4 1 CNSTI4 0 NEI4 $274 line 972 ;972: return 0; CNSTI4 0 RETI4 ADDRGP4 $270 JUMPV LABELV $274 line 974 ;973: } ;974: string++; ADDRLP4 4 ADDRLP4 4 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 line 975 ;975: } LABELV $272 line 970 ADDRLP4 4 INDIRP4 INDIRI1 CVII4 1 CNSTI4 32 LEI4 $271 line 978 ;976: ;977: // check sign ;978: switch ( *string ) { ADDRLP4 16 ADDRLP4 4 INDIRP4 INDIRI1 CVII4 1 ASGNI4 ADDRLP4 16 INDIRI4 CNSTI4 43 EQI4 $279 ADDRLP4 16 INDIRI4 CNSTI4 45 EQI4 $280 ADDRGP4 $276 JUMPV LABELV $279 line 980 ;979: case '+': ;980: string++; ADDRLP4 4 ADDRLP4 4 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 line 981 ;981: sign = 1; ADDRLP4 12 CNSTI4 1 ASGNI4 line 982 ;982: break; ADDRGP4 $277 JUMPV LABELV $280 line 984 ;983: case '-': ;984: string++; ADDRLP4 4 ADDRLP4 4 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 line 985 ;985: sign = -1; ADDRLP4 12 CNSTI4 -1 ASGNI4 line 986 ;986: break; ADDRGP4 $277 JUMPV LABELV $276 line 988 ;987: default: ;988: sign = 1; ADDRLP4 12 CNSTI4 1 ASGNI4 line 989 ;989: break; LABELV $277 line 993 ;990: } ;991: ;992: // read digits ;993: value = 0; ADDRLP4 8 CNSTI4 0 ASGNI4 LABELV $281 line 994 ;994: do { line 995 ;995: c = *string++; ADDRLP4 24 ADDRLP4 4 INDIRP4 ASGNP4 ADDRLP4 4 ADDRLP4 24 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 ADDRLP4 0 ADDRLP4 24 INDIRP4 INDIRI1 CVII4 1 ASGNI4 line 996 ;996: if ( c < '0' || c > '9' ) { ADDRLP4 0 INDIRI4 CNSTI4 48 LTI4 $286 ADDRLP4 0 INDIRI4 CNSTI4 57 LEI4 $284 LABELV $286 line 997 ;997: break; ADDRGP4 $283 JUMPV LABELV $284 line 999 ;998: } ;999: c -= '0'; ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 48 SUBI4 ASGNI4 line 1000 ;1000: value = value * 10 + c; ADDRLP4 8 CNSTI4 10 ADDRLP4 8 INDIRI4 MULI4 ADDRLP4 0 INDIRI4 ADDI4 ASGNI4 line 1001 ;1001: } while ( 1 ); LABELV $282 ADDRGP4 $281 JUMPV LABELV $283 line 1005 ;1002: ;1003: // not handling 10e10 notation... ;1004: ;1005: *stringPtr = string; ADDRFP4 0 INDIRP4 ADDRLP4 4 INDIRP4 ASGNP4 line 1007 ;1006: ;1007: return value * sign; ADDRLP4 8 INDIRI4 ADDRLP4 12 INDIRI4 MULI4 RETI4 LABELV $270 endproc _atoi 32 0 export abs proc abs 4 0 line 1010 ;1008:} ;1009: ;1010:int abs( int n ) { line 1011 ;1011: return n < 0 ? -n : n; ADDRFP4 0 INDIRI4 CNSTI4 0 GEI4 $289 ADDRLP4 0 ADDRFP4 0 INDIRI4 NEGI4 ASGNI4 ADDRGP4 $290 JUMPV LABELV $289 ADDRLP4 0 ADDRFP4 0 INDIRI4 ASGNI4 LABELV $290 ADDRLP4 0 INDIRI4 RETI4 LABELV $287 endproc abs 4 0 export fabs proc fabs 4 0 line 1014 ;1012:} ;1013: ;1014:double fabs( double x ) { line 1015 ;1015: return x < 0 ? -x : x; ADDRFP4 0 INDIRF4 CNSTF4 0 GEF4 $293 ADDRLP4 0 ADDRFP4 0 INDIRF4 NEGF4 ASGNF4 ADDRGP4 $294 JUMPV LABELV $293 ADDRLP4 0 ADDRFP4 0 INDIRF4 ASGNF4 LABELV $294 ADDRLP4 0 INDIRF4 RETF4 LABELV $291 endproc fabs 4 0 export AddInt proc AddInt 56 0 line 1037 ;1016:} ;1017: ;1018: ;1019: ;1020://========================================================= ;1021: ;1022: ;1023:#define ALT 0x00000001 /* alternate form */ ;1024:#define HEXPREFIX 0x00000002 /* add 0x or 0X prefix */ ;1025:#define LADJUST 0x00000004 /* left adjustment */ ;1026:#define LONGDBL 0x00000008 /* long double */ ;1027:#define LONGINT 0x00000010 /* long integer */ ;1028:#define QUADINT 0x00000020 /* quad integer */ ;1029:#define SHORTINT 0x00000040 /* short integer */ ;1030:#define ZEROPAD 0x00000080 /* zero (as opposed to blank) pad */ ;1031:#define FPT 0x00000100 /* floating point number */ ;1032: ;1033:#define to_digit(c) ((c) - '0') ;1034:#define is_digit(c) ((unsigned)to_digit(c) <= 9) ;1035:#define to_char(n) ((n) + '0') ;1036: ;1037:void AddInt( char **buf_p, int val, int width, int flags ) { line 1043 ;1038: char text[32]; ;1039: int digits; ;1040: int signedVal; ;1041: char *buf; ;1042: ;1043: digits = 0; ADDRLP4 0 CNSTI4 0 ASGNI4 line 1044 ;1044: signedVal = val; ADDRLP4 40 ADDRFP4 4 INDIRI4 ASGNI4 line 1045 ;1045: if ( val < 0 ) { ADDRFP4 4 INDIRI4 CNSTI4 0 GEI4 $296 line 1046 ;1046: val = -val; ADDRFP4 4 ADDRFP4 4 INDIRI4 NEGI4 ASGNI4 line 1047 ;1047: } LABELV $296 LABELV $298 line 1048 ;1048: do { line 1049 ;1049: text[digits++] = '0' + val % 10; ADDRLP4 44 ADDRLP4 0 INDIRI4 ASGNI4 ADDRLP4 0 ADDRLP4 44 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 ADDRLP4 44 INDIRI4 ADDRLP4 8 ADDP4 ADDRFP4 4 INDIRI4 CNSTI4 10 MODI4 CNSTI4 48 ADDI4 CVII1 4 ASGNI1 line 1050 ;1050: val /= 10; ADDRFP4 4 ADDRFP4 4 INDIRI4 CNSTI4 10 DIVI4 ASGNI4 line 1051 ;1051: } while ( val ); LABELV $299 ADDRFP4 4 INDIRI4 CNSTI4 0 NEI4 $298 line 1053 ;1052: ;1053: if ( signedVal < 0 ) { ADDRLP4 40 INDIRI4 CNSTI4 0 GEI4 $301 line 1054 ;1054: text[digits++] = '-'; ADDRLP4 44 ADDRLP4 0 INDIRI4 ASGNI4 ADDRLP4 0 ADDRLP4 44 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 ADDRLP4 44 INDIRI4 ADDRLP4 8 ADDP4 CNSTI1 45 ASGNI1 line 1055 ;1055: } LABELV $301 line 1057 ;1056: ;1057: buf = *buf_p; ADDRLP4 4 ADDRFP4 0 INDIRP4 INDIRP4 ASGNP4 line 1059 ;1058: ;1059: if( !( flags & LADJUST ) ) { ADDRFP4 12 INDIRI4 CNSTI4 4 BANDI4 CNSTI4 0 NEI4 $312 ADDRGP4 $306 JUMPV LABELV $305 line 1060 ;1060: while ( digits < width ) { line 1061 ;1061: *buf++ = ( flags & ZEROPAD ) ? '0' : ' '; ADDRLP4 48 ADDRLP4 4 INDIRP4 ASGNP4 ADDRLP4 4 ADDRLP4 48 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 ADDRFP4 12 INDIRI4 CNSTI4 128 BANDI4 CNSTI4 0 EQI4 $309 ADDRLP4 44 CNSTI4 48 ASGNI4 ADDRGP4 $310 JUMPV LABELV $309 ADDRLP4 44 CNSTI4 32 ASGNI4 LABELV $310 ADDRLP4 48 INDIRP4 ADDRLP4 44 INDIRI4 CVII1 4 ASGNI1 line 1062 ;1062: width--; ADDRFP4 8 ADDRFP4 8 INDIRI4 CNSTI4 1 SUBI4 ASGNI4 line 1063 ;1063: } LABELV $306 line 1060 ADDRLP4 0 INDIRI4 ADDRFP4 8 INDIRI4 LTI4 $305 line 1064 ;1064: } ADDRGP4 $312 JUMPV LABELV $311 line 1066 ;1065: ;1066: while ( digits-- ) { line 1067 ;1067: *buf++ = text[digits]; ADDRLP4 44 ADDRLP4 4 INDIRP4 ASGNP4 ADDRLP4 4 ADDRLP4 44 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 ADDRLP4 44 INDIRP4 ADDRLP4 0 INDIRI4 ADDRLP4 8 ADDP4 INDIRI1 ASGNI1 line 1068 ;1068: width--; ADDRFP4 8 ADDRFP4 8 INDIRI4 CNSTI4 1 SUBI4 ASGNI4 line 1069 ;1069: } LABELV $312 line 1066 ADDRLP4 44 ADDRLP4 0 INDIRI4 ASGNI4 ADDRLP4 0 ADDRLP4 44 INDIRI4 CNSTI4 1 SUBI4 ASGNI4 ADDRLP4 44 INDIRI4 CNSTI4 0 NEI4 $311 line 1071 ;1070: ;1071: if( flags & LADJUST ) { ADDRFP4 12 INDIRI4 CNSTI4 4 BANDI4 CNSTI4 0 EQI4 $314 ADDRGP4 $317 JUMPV LABELV $316 line 1072 ;1072: while ( width-- ) { line 1073 ;1073: *buf++ = ( flags & ZEROPAD ) ? '0' : ' '; ADDRLP4 52 ADDRLP4 4 INDIRP4 ASGNP4 ADDRLP4 4 ADDRLP4 52 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 ADDRFP4 12 INDIRI4 CNSTI4 128 BANDI4 CNSTI4 0 EQI4 $320 ADDRLP4 48 CNSTI4 48 ASGNI4 ADDRGP4 $321 JUMPV LABELV $320 ADDRLP4 48 CNSTI4 32 ASGNI4 LABELV $321 ADDRLP4 52 INDIRP4 ADDRLP4 48 INDIRI4 CVII1 4 ASGNI1 line 1074 ;1074: } LABELV $317 line 1072 ADDRLP4 48 ADDRFP4 8 INDIRI4 ASGNI4 ADDRFP4 8 ADDRLP4 48 INDIRI4 CNSTI4 1 SUBI4 ASGNI4 ADDRLP4 48 INDIRI4 CNSTI4 0 NEI4 $316 line 1075 ;1075: } LABELV $314 line 1077 ;1076: ;1077: *buf_p = buf; ADDRFP4 0 INDIRP4 ADDRLP4 4 INDIRP4 ASGNP4 line 1078 ;1078:} LABELV $295 endproc AddInt 56 0 export AddFloat proc AddFloat 60 0 line 1080 ;1079: ;1080:void AddFloat( char **buf_p, float fval, int width, int prec ) { line 1088 ;1081: char text[32]; ;1082: int digits; ;1083: float signedVal; ;1084: char *buf; ;1085: int val; ;1086: ;1087: // get the sign ;1088: signedVal = fval; ADDRLP4 44 ADDRFP4 4 INDIRF4 ASGNF4 line 1089 ;1089: if ( fval < 0 ) { ADDRFP4 4 INDIRF4 CNSTF4 0 GEF4 $323 line 1090 ;1090: fval = -fval; ADDRFP4 4 ADDRFP4 4 INDIRF4 NEGF4 ASGNF4 line 1091 ;1091: } LABELV $323 line 1094 ;1092: ;1093: // write the float number ;1094: digits = 0; ADDRLP4 0 CNSTI4 0 ASGNI4 line 1095 ;1095: val = (int)fval; ADDRLP4 4 ADDRFP4 4 INDIRF4 CVFI4 4 ASGNI4 LABELV $325 line 1096 ;1096: do { line 1097 ;1097: text[digits++] = '0' + val % 10; ADDRLP4 48 ADDRLP4 0 INDIRI4 ASGNI4 ADDRLP4 0 ADDRLP4 48 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 ADDRLP4 48 INDIRI4 ADDRLP4 8 ADDP4 ADDRLP4 4 INDIRI4 CNSTI4 10 MODI4 CNSTI4 48 ADDI4 CVII1 4 ASGNI1 line 1098 ;1098: val /= 10; ADDRLP4 4 ADDRLP4 4 INDIRI4 CNSTI4 10 DIVI4 ASGNI4 line 1099 ;1099: } while ( val ); LABELV $326 ADDRLP4 4 INDIRI4 CNSTI4 0 NEI4 $325 line 1101 ;1100: ;1101: if ( signedVal < 0 ) { ADDRLP4 44 INDIRF4 CNSTF4 0 GEF4 $328 line 1102 ;1102: text[digits++] = '-'; ADDRLP4 48 ADDRLP4 0 INDIRI4 ASGNI4 ADDRLP4 0 ADDRLP4 48 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 ADDRLP4 48 INDIRI4 ADDRLP4 8 ADDP4 CNSTI1 45 ASGNI1 line 1103 ;1103: } LABELV $328 line 1105 ;1104: ;1105: buf = *buf_p; ADDRLP4 40 ADDRFP4 0 INDIRP4 INDIRP4 ASGNP4 ADDRGP4 $331 JUMPV LABELV $330 line 1107 ;1106: ;1107: while ( digits < width ) { line 1108 ;1108: *buf++ = ' '; ADDRLP4 48 ADDRLP4 40 INDIRP4 ASGNP4 ADDRLP4 40 ADDRLP4 48 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 ADDRLP4 48 INDIRP4 CNSTI1 32 ASGNI1 line 1109 ;1109: width--; ADDRFP4 8 ADDRFP4 8 INDIRI4 CNSTI4 1 SUBI4 ASGNI4 line 1110 ;1110: } LABELV $331 line 1107 ADDRLP4 0 INDIRI4 ADDRFP4 8 INDIRI4 LTI4 $330 ADDRGP4 $334 JUMPV LABELV $333 line 1112 ;1111: ;1112: while ( digits-- ) { line 1113 ;1113: *buf++ = text[digits]; ADDRLP4 48 ADDRLP4 40 INDIRP4 ASGNP4 ADDRLP4 40 ADDRLP4 48 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 ADDRLP4 48 INDIRP4 ADDRLP4 0 INDIRI4 ADDRLP4 8 ADDP4 INDIRI1 ASGNI1 line 1114 ;1114: } LABELV $334 line 1112 ADDRLP4 48 ADDRLP4 0 INDIRI4 ASGNI4 ADDRLP4 0 ADDRLP4 48 INDIRI4 CNSTI4 1 SUBI4 ASGNI4 ADDRLP4 48 INDIRI4 CNSTI4 0 NEI4 $333 line 1116 ;1115: ;1116: *buf_p = buf; ADDRFP4 0 INDIRP4 ADDRLP4 40 INDIRP4 ASGNP4 line 1118 ;1117: ;1118: if (prec < 0) ADDRFP4 12 INDIRI4 CNSTI4 0 GEI4 $336 line 1119 ;1119: prec = 6; ADDRFP4 12 CNSTI4 6 ASGNI4 LABELV $336 line 1121 ;1120: // write the fraction ;1121: digits = 0; ADDRLP4 0 CNSTI4 0 ASGNI4 ADDRGP4 $339 JUMPV LABELV $338 line 1122 ;1122: while (digits < prec) { line 1123 ;1123: fval -= (int) fval; ADDRLP4 52 ADDRFP4 4 INDIRF4 ASGNF4 ADDRFP4 4 ADDRLP4 52 INDIRF4 ADDRLP4 52 INDIRF4 CVFI4 4 CVIF4 4 SUBF4 ASGNF4 line 1124 ;1124: fval *= 10.0; ADDRFP4 4 CNSTF4 1092616192 ADDRFP4 4 INDIRF4 MULF4 ASGNF4 line 1125 ;1125: val = (int) fval; ADDRLP4 4 ADDRFP4 4 INDIRF4 CVFI4 4 ASGNI4 line 1126 ;1126: text[digits++] = '0' + val % 10; ADDRLP4 56 ADDRLP4 0 INDIRI4 ASGNI4 ADDRLP4 0 ADDRLP4 56 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 ADDRLP4 56 INDIRI4 ADDRLP4 8 ADDP4 ADDRLP4 4 INDIRI4 CNSTI4 10 MODI4 CNSTI4 48 ADDI4 CVII1 4 ASGNI1 line 1127 ;1127: } LABELV $339 line 1122 ADDRLP4 0 INDIRI4 ADDRFP4 12 INDIRI4 LTI4 $338 line 1129 ;1128: ;1129: if (digits > 0) { ADDRLP4 0 INDIRI4 CNSTI4 0 LEI4 $341 line 1130 ;1130: buf = *buf_p; ADDRLP4 40 ADDRFP4 0 INDIRP4 INDIRP4 ASGNP4 line 1131 ;1131: *buf++ = '.'; ADDRLP4 52 ADDRLP4 40 INDIRP4 ASGNP4 ADDRLP4 40 ADDRLP4 52 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 ADDRLP4 52 INDIRP4 CNSTI1 46 ASGNI1 line 1132 ;1132: for (prec = 0; prec < digits; prec++) { ADDRFP4 12 CNSTI4 0 ASGNI4 ADDRGP4 $346 JUMPV LABELV $343 line 1133 ;1133: *buf++ = text[prec]; ADDRLP4 56 ADDRLP4 40 INDIRP4 ASGNP4 ADDRLP4 40 ADDRLP4 56 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 ADDRLP4 56 INDIRP4 ADDRFP4 12 INDIRI4 ADDRLP4 8 ADDP4 INDIRI1 ASGNI1 line 1134 ;1134: } LABELV $344 line 1132 ADDRFP4 12 ADDRFP4 12 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 LABELV $346 ADDRFP4 12 INDIRI4 ADDRLP4 0 INDIRI4 LTI4 $343 line 1135 ;1135: *buf_p = buf; ADDRFP4 0 INDIRP4 ADDRLP4 40 INDIRP4 ASGNP4 line 1136 ;1136: } LABELV $341 line 1137 ;1137:} LABELV $322 endproc AddFloat 60 0 export AddString proc AddString 20 4 line 1140 ;1138: ;1139: ;1140:void AddString( char **buf_p, char *string, int width, int prec ) { line 1144 ;1141: int size; ;1142: char *buf; ;1143: ;1144: buf = *buf_p; ADDRLP4 4 ADDRFP4 0 INDIRP4 INDIRP4 ASGNP4 line 1146 ;1145: ;1146: if ( string == NULL ) { ADDRFP4 4 INDIRP4 CVPU4 4 CNSTU4 0 NEU4 $348 line 1147 ;1147: string = "(null)"; ADDRFP4 4 ADDRGP4 $350 ASGNP4 line 1148 ;1148: prec = -1; ADDRFP4 12 CNSTI4 -1 ASGNI4 line 1149 ;1149: } LABELV $348 line 1151 ;1150: ;1151: if ( prec >= 0 ) { ADDRFP4 12 INDIRI4 CNSTI4 0 LTI4 $351 line 1152 ;1152: for( size = 0; size < prec; size++ ) { ADDRLP4 0 CNSTI4 0 ASGNI4 ADDRGP4 $356 JUMPV LABELV $353 line 1153 ;1153: if( string[size] == '\0' ) { ADDRLP4 0 INDIRI4 ADDRFP4 4 INDIRP4 ADDP4 INDIRI1 CVII4 1 CNSTI4 0 NEI4 $357 line 1154 ;1154: break; ADDRGP4 $352 JUMPV LABELV $357 line 1156 ;1155: } ;1156: } LABELV $354 line 1152 ADDRLP4 0 ADDRLP4 0 INDIRI4 CNSTI4 1 ADDI4 ASGNI4 LABELV $356 ADDRLP4 0 INDIRI4 ADDRFP4 12 INDIRI4 LTI4 $353 line 1157 ;1157: } ADDRGP4 $352 JUMPV LABELV $351 line 1158 ;1158: else { line 1159 ;1159: size = strlen( string ); ADDRFP4 4 INDIRP4 ARGP4 ADDRLP4 8 ADDRGP4 strlen CALLI4 ASGNI4 ADDRLP4 0 ADDRLP4 8 INDIRI4 ASGNI4 line 1160 ;1160: } LABELV $352 line 1162 ;1161: ;1162: width -= size; ADDRFP4 8 ADDRFP4 8 INDIRI4 ADDRLP4 0 INDIRI4 SUBI4 ASGNI4 ADDRGP4 $360 JUMPV LABELV $359 line 1164 ;1163: ;1164: while( size-- ) { line 1165 ;1165: *buf++ = *string++; ADDRLP4 8 ADDRLP4 4 INDIRP4 ASGNP4 ADDRLP4 16 CNSTI4 1 ASGNI4 ADDRLP4 4 ADDRLP4 8 INDIRP4 ADDRLP4 16 INDIRI4 ADDP4 ASGNP4 ADDRLP4 12 ADDRFP4 4 INDIRP4 ASGNP4 ADDRFP4 4 ADDRLP4 12 INDIRP4 ADDRLP4 16 INDIRI4 ADDP4 ASGNP4 ADDRLP4 8 INDIRP4 ADDRLP4 12 INDIRP4 INDIRI1 ASGNI1 line 1166 ;1166: } LABELV $360 line 1164 ADDRLP4 8 ADDRLP4 0 INDIRI4 ASGNI4 ADDRLP4 0 ADDRLP4 8 INDIRI4 CNSTI4 1 SUBI4 ASGNI4 ADDRLP4 8 INDIRI4 CNSTI4 0 NEI4 $359 ADDRGP4 $363 JUMPV LABELV $362 line 1168 ;1167: ;1168: while( width-- > 0 ) { line 1169 ;1169: *buf++ = ' '; ADDRLP4 12 ADDRLP4 4 INDIRP4 ASGNP4 ADDRLP4 4 ADDRLP4 12 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 ADDRLP4 12 INDIRP4 CNSTI1 32 ASGNI1 line 1170 ;1170: } LABELV $363 line 1168 ADDRLP4 12 ADDRFP4 8 INDIRI4 ASGNI4 ADDRFP4 8 ADDRLP4 12 INDIRI4 CNSTI4 1 SUBI4 ASGNI4 ADDRLP4 12 INDIRI4 CNSTI4 0 GTI4 $362 line 1172 ;1171: ;1172: *buf_p = buf; ADDRFP4 0 INDIRP4 ADDRLP4 4 INDIRP4 ASGNP4 line 1173 ;1173:} LABELV $347 endproc AddString 20 4 export vsprintf proc vsprintf 72 16 line 1183 ;1174: ;1175:/* ;1176:vsprintf ;1177: ;1178:I'm not going to support a bunch of the more arcane stuff in here ;1179:just to keep it simpler. For example, the '*' and '$' are not ;1180:currently supported. I've tried to make it so that it will just ;1181:parse and ignore formats we don't support. ;1182:*/ ;1183:int vsprintf( char *buffer, const char *fmt, va_list argptr ) { line 1193 ;1184: int *arg; ;1185: char *buf_p; ;1186: char ch; ;1187: int flags; ;1188: int width; ;1189: int prec; ;1190: int n; ;1191: char sign; ;1192: ;1193: buf_p = buffer; ADDRLP4 4 ADDRFP4 0 INDIRP4 ASGNP4 line 1194 ;1194: arg = (int *)argptr; ADDRLP4 24 ADDRFP4 8 INDIRP4 ASGNP4 ADDRGP4 $367 JUMPV LABELV $366 line 1196 ;1195: ;1196: while( qtrue ) { line 1198 ;1197: // run through the format string until we hit a '%' or '\0' ;1198: for ( ch = *fmt; (ch = *fmt) != '\0' && ch != '%'; fmt++ ) { ADDRLP4 0 ADDRFP4 4 INDIRP4 INDIRI1 ASGNI1 ADDRGP4 $372 JUMPV LABELV $369 line 1199 ;1199: *buf_p++ = ch; ADDRLP4 32 ADDRLP4 4 INDIRP4 ASGNP4 ADDRLP4 4 ADDRLP4 32 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 ADDRLP4 32 INDIRP4 ADDRLP4 0 INDIRI1 ASGNI1 line 1200 ;1200: } LABELV $370 line 1198 ADDRFP4 4 ADDRFP4 4 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 LABELV $372 ADDRLP4 29 ADDRFP4 4 INDIRP4 INDIRI1 ASGNI1 ADDRLP4 0 ADDRLP4 29 INDIRI1 ASGNI1 ADDRLP4 29 INDIRI1 CVII4 1 CNSTI4 0 EQI4 $373 ADDRLP4 0 INDIRI1 CVII4 1 CNSTI4 37 NEI4 $369 LABELV $373 line 1201 ;1201: if ( ch == '\0' ) { ADDRLP4 0 INDIRI1 CVII4 1 CNSTI4 0 NEI4 $374 line 1202 ;1202: goto done; ADDRGP4 $376 JUMPV LABELV $374 line 1206 ;1203: } ;1204: ;1205: // skip over the '%' ;1206: fmt++; ADDRFP4 4 ADDRFP4 4 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 line 1209 ;1207: ;1208: // reset formatting state ;1209: flags = 0; ADDRLP4 16 CNSTI4 0 ASGNI4 line 1210 ;1210: width = 0; ADDRLP4 12 CNSTI4 0 ASGNI4 line 1211 ;1211: prec = -1; ADDRLP4 20 CNSTI4 -1 ASGNI4 line 1212 ;1212: sign = '\0'; ADDRLP4 28 CNSTI1 0 ASGNI1 LABELV $377 line 1215 ;1213: ;1214:rflag: ;1215: ch = *fmt++; ADDRLP4 32 ADDRFP4 4 INDIRP4 ASGNP4 ADDRFP4 4 ADDRLP4 32 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 ADDRLP4 0 ADDRLP4 32 INDIRP4 INDIRI1 ASGNI1 LABELV $378 line 1217 ;1216:reswitch: ;1217: switch( ch ) { ADDRLP4 36 ADDRLP4 0 INDIRI1 CVII4 1 ASGNI4 ADDRLP4 36 INDIRI4 CNSTI4 99 LTI4 $400 ADDRLP4 36 INDIRI4 CNSTI4 105 GTI4 $401 ADDRLP4 36 INDIRI4 CNSTI4 2 LSHI4 ADDRGP4 $402-396 ADDP4 INDIRP4 JUMPV lit align 4 LABELV $402 address $395 address $396 address $379 address $397 address $379 address $379 address $396 code LABELV $400 ADDRLP4 36 INDIRI4 CNSTI4 37 LTI4 $379 ADDRLP4 36 INDIRI4 CNSTI4 57 GTI4 $379 ADDRLP4 36 INDIRI4 CNSTI4 2 LSHI4 ADDRGP4 $404-148 ADDP4 INDIRP4 JUMPV lit align 4 LABELV $404 address $399 address $379 address $379 address $379 address $379 address $379 address $379 address $379 address $382 address $383 address $379 address $390 address $391 address $391 address $391 address $391 address $391 address $391 address $391 address $391 address $391 code LABELV $401 ADDRLP4 36 INDIRI4 CNSTI4 115 EQI4 $398 ADDRGP4 $379 JUMPV LABELV $382 line 1219 ;1218: case '-': ;1219: flags |= LADJUST; ADDRLP4 16 ADDRLP4 16 INDIRI4 CNSTI4 4 BORI4 ASGNI4 line 1220 ;1220: goto rflag; ADDRGP4 $377 JUMPV LABELV $383 line 1222 ;1221: case '.': ;1222: n = 0; ADDRLP4 8 CNSTI4 0 ASGNI4 ADDRGP4 $385 JUMPV LABELV $384 line 1223 ;1223: while( is_digit( ( ch = *fmt++ ) ) ) { line 1224 ;1224: n = 10 * n + ( ch - '0' ); ADDRLP4 8 CNSTI4 10 ADDRLP4 8 INDIRI4 MULI4 ADDRLP4 0 INDIRI1 CVII4 1 CNSTI4 48 SUBI4 ADDI4 ASGNI4 line 1225 ;1225: } LABELV $385 line 1223 ADDRLP4 48 ADDRFP4 4 INDIRP4 ASGNP4 ADDRFP4 4 ADDRLP4 48 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 ADDRLP4 52 ADDRLP4 48 INDIRP4 INDIRI1 ASGNI1 ADDRLP4 0 ADDRLP4 52 INDIRI1 ASGNI1 ADDRLP4 52 INDIRI1 CVII4 1 CNSTI4 48 SUBI4 CVIU4 4 CNSTU4 9 LEU4 $384 line 1226 ;1226: prec = n < 0 ? -1 : n; ADDRLP4 8 INDIRI4 CNSTI4 0 GEI4 $388 ADDRLP4 56 CNSTI4 -1 ASGNI4 ADDRGP4 $389 JUMPV LABELV $388 ADDRLP4 56 ADDRLP4 8 INDIRI4 ASGNI4 LABELV $389 ADDRLP4 20 ADDRLP4 56 INDIRI4 ASGNI4 line 1227 ;1227: goto reswitch; ADDRGP4 $378 JUMPV LABELV $390 line 1229 ;1228: case '0': ;1229: flags |= ZEROPAD; ADDRLP4 16 ADDRLP4 16 INDIRI4 CNSTI4 128 BORI4 ASGNI4 line 1230 ;1230: goto rflag; ADDRGP4 $377 JUMPV LABELV $391 line 1240 ;1231: case '1': ;1232: case '2': ;1233: case '3': ;1234: case '4': ;1235: case '5': ;1236: case '6': ;1237: case '7': ;1238: case '8': ;1239: case '9': ;1240: n = 0; ADDRLP4 8 CNSTI4 0 ASGNI4 LABELV $392 line 1241 ;1241: do { line 1242 ;1242: n = 10 * n + ( ch - '0' ); ADDRLP4 8 CNSTI4 10 ADDRLP4 8 INDIRI4 MULI4 ADDRLP4 0 INDIRI1 CVII4 1 CNSTI4 48 SUBI4 ADDI4 ASGNI4 line 1243 ;1243: ch = *fmt++; ADDRLP4 60 ADDRFP4 4 INDIRP4 ASGNP4 ADDRFP4 4 ADDRLP4 60 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 ADDRLP4 0 ADDRLP4 60 INDIRP4 INDIRI1 ASGNI1 line 1244 ;1244: } while( is_digit( ch ) ); LABELV $393 ADDRLP4 0 INDIRI1 CVII4 1 CNSTI4 48 SUBI4 CVIU4 4 CNSTU4 9 LEU4 $392 line 1245 ;1245: width = n; ADDRLP4 12 ADDRLP4 8 INDIRI4 ASGNI4 line 1246 ;1246: goto reswitch; ADDRGP4 $378 JUMPV LABELV $395 line 1248 ;1247: case 'c': ;1248: *buf_p++ = (char)*arg; ADDRLP4 60 ADDRLP4 4 INDIRP4 ASGNP4 ADDRLP4 4 ADDRLP4 60 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 ADDRLP4 60 INDIRP4 ADDRLP4 24 INDIRP4 INDIRI4 CVII1 4 ASGNI1 line 1249 ;1249: arg++; ADDRLP4 24 ADDRLP4 24 INDIRP4 CNSTI4 4 ADDP4 ASGNP4 line 1250 ;1250: break; ADDRGP4 $380 JUMPV LABELV $396 line 1253 ;1251: case 'd': ;1252: case 'i': ;1253: AddInt( &buf_p, *arg, width, flags ); ADDRLP4 4 ARGP4 ADDRLP4 24 INDIRP4 INDIRI4 ARGI4 ADDRLP4 12 INDIRI4 ARGI4 ADDRLP4 16 INDIRI4 ARGI4 ADDRGP4 AddInt CALLV pop line 1254 ;1254: arg++; ADDRLP4 24 ADDRLP4 24 INDIRP4 CNSTI4 4 ADDP4 ASGNP4 line 1255 ;1255: break; ADDRGP4 $380 JUMPV LABELV $397 line 1257 ;1256: case 'f': ;1257: AddFloat( &buf_p, *(double *)arg, width, prec ); ADDRLP4 4 ARGP4 ADDRLP4 24 INDIRP4 INDIRF4 ARGF4 ADDRLP4 12 INDIRI4 ARGI4 ADDRLP4 20 INDIRI4 ARGI4 ADDRGP4 AddFloat CALLV pop line 1259 ;1258:#ifdef __LCC__ ;1259: arg += 1; // everything is 32 bit in my compiler ADDRLP4 24 ADDRLP4 24 INDIRP4 CNSTI4 4 ADDP4 ASGNP4 line 1263 ;1260:#else ;1261: arg += 2; ;1262:#endif ;1263: break; ADDRGP4 $380 JUMPV LABELV $398 line 1265 ;1264: case 's': ;1265: AddString( &buf_p, (char *)*arg, width, prec ); ADDRLP4 4 ARGP4 ADDRLP4 24 INDIRP4 INDIRI4 CVIU4 4 CVUP4 4 ARGP4 ADDRLP4 12 INDIRI4 ARGI4 ADDRLP4 20 INDIRI4 ARGI4 ADDRGP4 AddString CALLV pop line 1266 ;1266: arg++; ADDRLP4 24 ADDRLP4 24 INDIRP4 CNSTI4 4 ADDP4 ASGNP4 line 1267 ;1267: break; ADDRGP4 $380 JUMPV LABELV $399 line 1269 ;1268: case '%': ;1269: *buf_p++ = ch; ADDRLP4 64 ADDRLP4 4 INDIRP4 ASGNP4 ADDRLP4 4 ADDRLP4 64 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 ADDRLP4 64 INDIRP4 ADDRLP4 0 INDIRI1 ASGNI1 line 1270 ;1270: break; ADDRGP4 $380 JUMPV LABELV $379 line 1272 ;1271: default: ;1272: *buf_p++ = (char)*arg; ADDRLP4 68 ADDRLP4 4 INDIRP4 ASGNP4 ADDRLP4 4 ADDRLP4 68 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 ADDRLP4 68 INDIRP4 ADDRLP4 24 INDIRP4 INDIRI4 CVII1 4 ASGNI1 line 1273 ;1273: arg++; ADDRLP4 24 ADDRLP4 24 INDIRP4 CNSTI4 4 ADDP4 ASGNP4 line 1274 ;1274: break; LABELV $380 line 1276 ;1275: } ;1276: } LABELV $367 line 1196 ADDRGP4 $366 JUMPV LABELV $376 line 1279 ;1277: ;1278:done: ;1279: *buf_p = 0; ADDRLP4 4 INDIRP4 CNSTI1 0 ASGNI1 line 1280 ;1280: return buf_p - buffer; ADDRLP4 4 INDIRP4 CVPU4 4 ADDRFP4 0 INDIRP4 CVPU4 4 SUBU4 CVUI4 4 RETI4 LABELV $365 endproc vsprintf 72 16 export sscanf proc sscanf 28 4 line 1285 ;1281:} ;1282: ;1283: ;1284:/* this is really crappy */ ;1285:int sscanf( const char *buffer, const char *fmt, ... ) { line 1290 ;1286: int cmd; ;1287: int **arg; ;1288: int count; ;1289: ;1290: arg = (int **)&fmt + 1; ADDRLP4 4 ADDRFP4 4+4 ASGNP4 line 1291 ;1291: count = 0; ADDRLP4 8 CNSTI4 0 ASGNI4 ADDRGP4 $409 JUMPV LABELV $408 line 1293 ;1292: ;1293: while ( *fmt ) { line 1294 ;1294: if ( fmt[0] != '%' ) { ADDRFP4 4 INDIRP4 INDIRI1 CVII4 1 CNSTI4 37 EQI4 $411 line 1295 ;1295: fmt++; ADDRFP4 4 ADDRFP4 4 INDIRP4 CNSTI4 1 ADDP4 ASGNP4 line 1296 ;1296: continue; ADDRGP4 $409 JUMPV LABELV $411 line 1299 ;1297: } ;1298: ;1299: cmd = fmt[1]; ADDRLP4 0 ADDRFP4 4 INDIRP4 CNSTI4 1 ADDP4 INDIRI1 CVII4 1 ASGNI4 line 1300 ;1300: fmt += 2; ADDRFP4 4 ADDRFP4 4 INDIRP4 CNSTI4 2 ADDP4 ASGNP4 line 1302 ;1301: ;1302: switch ( cmd ) { ADDRLP4 16 CNSTI4 100 ASGNI4 ADDRLP4 0 INDIRI4 ADDRLP4 16 INDIRI4 EQI4 $415 ADDRLP4 0 INDIRI4 CNSTI4 102 EQI4 $416 ADDRLP4 0 INDIRI4 CNSTI4 105 EQI4 $415 ADDRLP4 0 INDIRI4 ADDRLP4 16 INDIRI4 LTI4 $413 LABELV $417 ADDRLP4 0 INDIRI4 CNSTI4 117 EQI4 $415 ADDRGP4 $413 JUMPV LABELV $415 line 1306 ;1303: case 'i': ;1304: case 'd': ;1305: case 'u': ;1306: **arg = _atoi( &buffer ); ADDRFP4 0 ARGP4 ADDRLP4 20 ADDRGP4 _atoi CALLI4 ASGNI4 ADDRLP4 4 INDIRP4 INDIRP4 ADDRLP4 20 INDIRI4 ASGNI4 line 1307 ;1307: break; ADDRGP4 $414 JUMPV LABELV $416 line 1309 ;1308: case 'f': ;1309: *(float *)*arg = _atof( &buffer ); ADDRFP4 0 ARGP4 ADDRLP4 24 ADDRGP4 _atof CALLF4 ASGNF4 ADDRLP4 4 INDIRP4 INDIRP4 ADDRLP4 24 INDIRF4 ASGNF4 line 1310 ;1310: break; LABELV $413 LABELV $414 line 1312 ;1311: } ;1312: arg++; ADDRLP4 4 ADDRLP4 4 INDIRP4 CNSTI4 4 ADDP4 ASGNP4 line 1313 ;1313: } LABELV $409 line 1293 ADDRFP4 4 INDIRP4 INDIRI1 CVII4 1 CNSTI4 0 NEI4 $408 line 1315 ;1314: ;1315: return count; ADDRLP4 8 INDIRI4 RETI4 LABELV $406 endproc sscanf 28 4 import GetStringForID import GetIDForString import Q_irand import irand import flrand import Rand_Init import Com_Printf import Com_Error import Info_NextPair import Info_Validate import Info_SetValueForKey_Big import Info_SetValueForKey import Info_RemoveKey_big import Info_RemoveKey import Info_ValueForKey import va import Q_CleanStr import Q_PrintStrlen import Q_strcat import Q_strncpyz import Q_strrchr import Q_strupr import Q_strlwr import Q_stricmpn import Q_strncmp import Q_stricmp import Q_isalpha import Q_isupper import Q_islower import Q_isprint import Com_sprintf import Parse3DMatrix import Parse2DMatrix import Parse1DMatrix import SkipRestOfLine import SkipBracedSection import COM_MatchToken import COM_ParseWarning import COM_ParseError import COM_Compress import COM_ParseExt import COM_Parse import SkipWhitespace import COM_GetCurrentParseLine import COM_BeginParseSession import COM_DefaultExtension import COM_StripExtension import COM_SkipPath import Com_Clamp import PerpendicularVector import AngleVectors import MatrixMultiply import MakeNormalVectors import RotateAroundDirection import RotatePointAroundVector import ProjectPointOnPlane import PlaneFromPoints import AngleDelta import AngleNormalize180 import AngleNormalize360 import AnglesSubtract import AngleSubtract import LerpAngle import AngleMod import BoxOnPlaneSide import SetPlaneSignbits import AxisCopy import AxisClear import AnglesToAxis import vectoangles import Q_crandom import Q_random import Q_rand import Q_acos import Q_log2 import VectorRotate import Vector4Scale import VectorNormalize2 import VectorNormalize import CrossProduct import VectorInverse import VectorNormalizeFast import DistanceSquared import Distance import VectorLengthSquared import VectorLength import VectorCompare import AddPointToBounds import ClearBounds import RadiusFromBounds import NormalizeColor import ColorBytes4 import ColorBytes3 import _VectorMA import _VectorScale import _VectorCopy import _VectorAdd import _VectorSubtract import _DotProduct import ByteToDir import DirToByte import powf import ClampShort import ClampChar import Q_rsqrt import Q_fabs import axisDefault import vec3_origin import g_color_table import colorDkBlue import colorLtBlue import colorDkGrey import colorMdGrey import colorLtGrey import colorWhite import colorCyan import colorMagenta import colorYellow import colorBlue import colorGreen import colorRed import colorBlack import colorTable import bytedirs import Com_Memcpy import Com_Memset import Hunk_Alloc import forceSpeedLevels import FloatSwap import LongSwap import ShortSwap import acos import atan2 import cos import sin import sqrt import floor import ceil import memcpy import memset import strncpy lit align 1 LABELV $350 char 1 40 char 1 110 char 1 117 char 1 108 char 1 108 char 1 41 char 1 0