diff options
| author | Wiimm <wiimm@wiimm.de> | 2023-01-14 08:17:36 +0100 |
|---|---|---|
| committer | Wiimm <wiimm@wiimm.de> | 2023-01-14 08:17:36 +0100 |
| commit | f978a965248a5a082d6801ef394bdebb55c78e4f (patch) | |
| tree | fcf73a3829d81be281361fbc34c19d0e4bf706b3 /project/dclib/lib-mkw.c | |
| parent | 7d8344f3637d59b982c2ca0b1d8fd2889ec5d4a6 (diff) | |
SZS v2.33a
Diffstat (limited to 'project/dclib/lib-mkw.c')
| -rw-r--r-- | project/dclib/lib-mkw.c | 127 |
1 files changed, 126 insertions, 1 deletions
diff --git a/project/dclib/lib-mkw.c b/project/dclib/lib-mkw.c index 610e0d1..5213e72 100644 --- a/project/dclib/lib-mkw.c +++ b/project/dclib/lib-mkw.c @@ -15,7 +15,7 @@ * * *************************************************************************** * * - * Copyright (c) 2012-2022 by Dirk Clemens <wiimm@wiimm.de> * + * Copyright (c) 2012-2023 by Dirk Clemens <wiimm@wiimm.de> * * * *************************************************************************** * * @@ -1517,6 +1517,131 @@ ccp PrintDTA ( DistribFlags_t flags, bool aligned ) // /////////////////////////////////////////////////////////////////////////////// +/////////////// track class /////////////// +/////////////////////////////////////////////////////////////////////////////// + +TrackClass_t ScanTrackClass ( ccp text, int text_len ) +{ + TrackClass_t res = 0; + if (text) + { + ccp end = text + ( text_len < 0 ? strlen(text) : text_len ); + while ( text < end ) + { + const int ch = tolower(*text++); + switch (ch) + { + case 'p': res |= G_TCLS_PRIVATE; break; + case 't': res |= G_TCLS_TEST; break; + case 'b': res |= G_TCLS_BAD; break; + case 'f': res |= G_TCLS_FAIL; break; + case 'z': res |= G_TCLS_FREEZE; break; + case 'k': res |= G_TCLS_STOCK; break; + case 's': res |= G_TCLS_SELECT; break; + case 'n': res |= G_TCLS_NINTENDO; break; + case 'o': res |= G_TCLS_BOOST; break; + case 'i': res |= G_TCLS_INCOME; break; + case 'w': res |= G_TCLS_WAIT; break; + } + } +PRINT0("%04x <= %.*s\n",res,text_len,text-text_len); + } + return res; +} + +/////////////////////////////////////////////////////////////////////////////// + +ccp PrintTrackClass ( TrackClass_t flags, bool aligned ) +{ + char *buf = GetCircBuf(12); + + if (aligned) + { + buf[ 0] = flags & G_TCLS_PRIVATE ? 'P' : '-'; + buf[ 1] = flags & G_TCLS_TEST ? 'T' : '-'; + buf[ 2] = flags & G_TCLS_BAD ? 'B' : '-'; + buf[ 3] = flags & G_TCLS_FAIL ? 'F' : '-'; + buf[ 4] = flags & G_TCLS_FREEZE ? 'Z' : '-'; + buf[ 5] = flags & G_TCLS_STOCK ? 'K' : '-'; + buf[ 6] = flags & G_TCLS_SELECT ? 'S' : '-'; + buf[ 7] = flags & G_TCLS_NINTENDO ? 'N' : '-'; + buf[ 8] = flags & G_TCLS_BOOST ? 'O' : '-'; + buf[ 9] = flags & G_TCLS_INCOME ? 'I' : '-'; + buf[10] = flags & G_TCLS_WAIT ? 'W' : '-'; + buf[11] = 0; + } + else + { + char *d = buf; + if ( flags & G_TCLS_PRIVATE ) *d++ = 'P'; + if ( flags & G_TCLS_TEST ) *d++ = 'T'; + if ( flags & G_TCLS_BAD ) *d++ = 'B'; + if ( flags & G_TCLS_FAIL ) *d++ = 'F'; + if ( flags & G_TCLS_FREEZE ) *d++ = 'Z'; + if ( flags & G_TCLS_STOCK ) *d++ = 'K'; + if ( flags & G_TCLS_SELECT ) *d++ = 'S'; + if ( flags & G_TCLS_NINTENDO ) *d++ = 'N'; + if ( flags & G_TCLS_BOOST ) *d++ = 'O'; + if ( flags & G_TCLS_INCOME ) *d++ = 'I'; + if ( flags & G_TCLS_WAIT ) *d++ = 'W'; + if ( d == buf ) + *d++ = '-'; + *d = 0; + } + return buf; +} + +/////////////////////////////////////////////////////////////////////////////// + +TrackClassIndex_t GetTrackClassIndex ( TrackClass_t flags ) +{ + static const TrackClassIndex_t tab[] = + { + G_TCLSI_INCOME, + G_TCLSI_WAIT, + G_TCLSI_PRIVATE, + G_TCLSI_TEST, + G_TCLSI_FREEZE, + G_TCLSI_FAIL, + G_TCLSI_BAD, + G_TCLSI_NINTENDO, + G_TCLSI_SELECT, + G_TCLSI_BOOST, + G_TCLSI_STOCK, + 0, + }; + + for ( const TrackClassIndex_t *ptr = tab; *ptr; ptr++ ) + if ( 1 << *ptr & flags ) + return *ptr; + + return 0; +} +/////////////////////////////////////////////////////////////////////////////// + +ccp GetTrackClassName ( TrackClassIndex_t idx, ccp return_on_none ) +{ + static const char tab[G_TCLSI__N][9] = + { + "UNKNOWN", + "PRIVATE", + "TEST", + "BAD", + "FAIL", + "FREEZE", + "STOCK", + "SELECT", + "NINTENDO", + "BOOST", + "INCOME", + "WAIT", + }; + + return (uint)idx < G_TCLSI__N ? tab[idx] : return_on_none; +} + +// +/////////////////////////////////////////////////////////////////////////////// /////////////// random slots /////////////// /////////////////////////////////////////////////////////////////////////////// |
