mirror of
https://github.com/rcornwell/sims.git
synced 2026-04-27 12:30:18 +00:00
SCP: Updated to current.
This commit is contained in:
94
sim_printf_fmts.h
Normal file
94
sim_printf_fmts.h
Normal file
@@ -0,0 +1,94 @@
|
||||
/*~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
|
||||
* sim_printf_fmts.h
|
||||
*
|
||||
* Cross-platform printf() formats for simh data types. Refactored out to
|
||||
* this header so that these formats are avaiable to more than SCP.
|
||||
*
|
||||
* Author: B. Scott Michel
|
||||
*
|
||||
* "scooter me fecit"
|
||||
*~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~*/
|
||||
|
||||
#pragma once
|
||||
#if !defined(SIM_PRINTF_H)
|
||||
|
||||
/* cross-platform printf() format specifiers:
|
||||
*
|
||||
* Note: MS apparently does recognize "ll" as "l" in its printf() routines, but "I64" is
|
||||
* preferred for 64-bit types.
|
||||
*
|
||||
* MinGW note: __MINGW64__ and __MINGW32__ are both defined by 64-bit gcc. Check
|
||||
* for __MINGW64__ before __MINGW32__.
|
||||
*
|
||||
*
|
||||
* LL_FMT: long long format modifier, e.g. "%016" LL_FMT "x"
|
||||
* SIZE_T: size_t format modifier, e.g., "%" SIZE_T_FMT "u" (can use "d", but you will
|
||||
* probably get a warning.)
|
||||
* T_UINT64_FMT: t_uint64 format modifier, e.g. "%016" T_UINT64_FMT "x"
|
||||
* T_INT64_FMT: t_int64 format modifier, e.g., "%" T_INT64_FMT "d"
|
||||
* POINTER_FMT: Format modifier for pointers, e.g. "%08" POINTER_FMT "X"
|
||||
*/
|
||||
|
||||
#if defined (_WIN32) || defined(_WIN64)
|
||||
|
||||
# if defined(__MINGW64__)
|
||||
# define LL_FMT "I64"
|
||||
# define SIZE_T_FMT "I64"
|
||||
# elif defined(_MSC_VER) || defined(__MINGW32__)
|
||||
# define LL_FMT "ll"
|
||||
# define SIZE_T_FMT "z"
|
||||
# else
|
||||
/* Graceful fail -- shouldn't ever default to this on a Windows platform. */
|
||||
# define LL_FMT "ll"
|
||||
# define SIZE_T_FMT "I32"
|
||||
# endif
|
||||
|
||||
# define T_UINT64_FMT "I64"
|
||||
# define T_INT64_FMT "I64"
|
||||
# define POINTER_FMT "p"
|
||||
|
||||
#elif defined(__GNU_LIBRARY__) || defined(__GLIBC__) || defined(__GLIBC_MINOR__) || \
|
||||
defined(__APPLE__)
|
||||
|
||||
/* GNU libc (Linux) and macOS */
|
||||
# define LL_FMT "ll"
|
||||
# define SIZE_T_FMT "z"
|
||||
# define T_UINT64_FMT "ll"
|
||||
# define T_INT64_FMT "ll"
|
||||
# define POINTER_FMT "p"
|
||||
|
||||
#elif defined(__VAX)
|
||||
|
||||
/* No 64 bit ints on VAX, nothing special about size_t */
|
||||
# define LL_FMT "l"
|
||||
# define SIZE_T_FMT ""
|
||||
# define T_UINT64_FMT ""
|
||||
# define T_INT64_FMT ""
|
||||
# define POINTER_FMT ""
|
||||
|
||||
#else
|
||||
/* Defaults. */
|
||||
# define LL_FMT "ll"
|
||||
# define SIZE_T_FMT ""
|
||||
# define T_UINT64_FMT ""
|
||||
# define T_INT64_FMT ""
|
||||
# define POINTER_FMT ""
|
||||
#endif
|
||||
|
||||
|
||||
#if defined (USE_INT64) && defined (USE_ADDR64)
|
||||
# define T_ADDR_FMT T_UINT64_FMT
|
||||
#else
|
||||
# define T_ADDR_FMT ""
|
||||
#endif
|
||||
|
||||
#if defined (USE_INT64)
|
||||
# define T_VALUE_FMT T_UINT64_FMT
|
||||
# define T_SVALUE_FMT T_INT64_FMT
|
||||
#else
|
||||
# define T_VALUE_FMT ""
|
||||
# define T_SVALUE_FMT ""
|
||||
#endif
|
||||
|
||||
#define SIM_PRINTF_H
|
||||
#endif
|
||||
Reference in New Issue
Block a user