reaction/ta_ui/vm/bg_lib.asm

5891 lines
88 KiB
NASM

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