This repository has been archived on 2026-05-18. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files

5874 lines
87 KiB
NASM
Executable File

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