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