MCPcopy Create free account
hub / github.com/NetHack/NetHack / percentage

Function percentage

src/botl.c:1976–2047  ·  view source on GitHub ↗

integer percentage is 100 * bl->a / maxbl->a */

Source from the content-addressed store, hash-verified

1974
1975/* integer percentage is 100 * bl->a / maxbl->a */
1976staticfn int
1977percentage(struct istat_s *bl, struct istat_s *maxbl)
1978{
1979 int result = 0;
1980 int anytype;
1981 int ival, mval;
1982 long lval;
1983 unsigned uval;
1984 unsigned long ulval;
1985 int fld;
1986 boolean use_rawval;
1987
1988 if (!bl || !maxbl) {
1989 impossible("percentage: bad istat pointer %s, %s",
1990 fmt_ptr((genericptr_t) bl), fmt_ptr((genericptr_t) maxbl));
1991 return 0;
1992 }
1993
1994 fld = bl->fld;
1995 use_rawval = (fld == BL_HP || fld == BL_ENE);
1996 ival = 0, lval = 0L, uval = 0U, ulval = 0UL;
1997 anytype = bl->anytype;
1998 if (maxbl->a.a_void) {
1999 switch (anytype) {
2000 case ANY_INT:
2001 /* HP and energy are int so this is the only case that cares
2002 about 'rawval'; for them, we use that rather than their
2003 potentially truncated (to 9999) display value */
2004 ival = use_rawval ? bl->rawval.a_int : bl->a.a_int;
2005 mval = use_rawval ? maxbl->rawval.a_int : maxbl->a.a_int;
2006 result = ((100 * ival) / mval);
2007 break;
2008 case ANY_LONG:
2009 lval = bl->a.a_long;
2010 result = (int) ((100L * lval) / maxbl->a.a_long);
2011 break;
2012 case ANY_UINT:
2013 uval = bl->a.a_uint;
2014 result = (int) ((100U * uval) / maxbl->a.a_uint);
2015 break;
2016 case ANY_ULONG:
2017 ulval = bl->a.a_ulong;
2018 result = (int) ((100UL * ulval) / maxbl->a.a_ulong);
2019 break;
2020 case ANY_IPTR:
2021 ival = *bl->a.a_iptr;
2022 result = ((100 * ival) / (*maxbl->a.a_iptr));
2023 break;
2024 case ANY_LPTR:
2025 lval = *bl->a.a_lptr;
2026 result = (int) ((100L * lval) / (*maxbl->a.a_lptr));
2027 break;
2028 case ANY_UPTR:
2029 uval = *bl->a.a_uptr;
2030 result = (int) ((100U * uval) / (*maxbl->a.a_uptr));
2031 break;
2032 case ANY_ULPTR:
2033 ulval = *bl->a.a_ulptr;

Callers 2

exp_percentageFunction · 0.85

Calls 2

fmt_ptrFunction · 0.85
impossibleFunction · 0.70

Tested by

no test coverage detected