jedioutcast/CODE-mp/ui/vm/bg_lib.asm

5878 lines
93 KiB
NASM
Raw Normal View History

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