+//usage:#define dc_trivial_usage
+//usage: "EXPRESSION..."
+//usage:
+//usage:#define dc_full_usage "\n\n"
+//usage: "Tiny RPN calculator. Operations:\n"
+//usage: "+, add, -, sub, *, mul, /, div, %, mod, "IF_FEATURE_DC_LIBM("**, exp, ")"and, or, not, eor,\n"
+//usage: "p - print top of the stack (without popping),\n"
+//usage: "f - print entire stack,\n"
+//usage: "o - pop the value and set output radix (must be 10, 16, 8 or 2).\n"
+//usage: "Examples: 'dc 2 2 add p' -> 4, 'dc 8 8 * 2 2 + / p' -> 16"
+//usage:
+//usage:#define dc_example_usage
+//usage: "$ dc 2 2 + p\n"
+//usage: "4\n"
+//usage: "$ dc 8 8 \\* 2 2 + / p\n"
+//usage: "16\n"
+//usage: "$ dc 0 1 and p\n"
+//usage: "0\n"
+//usage: "$ dc 0 1 or p\n"
+//usage: "1\n"
+//usage: "$ echo 72 9 div 8 mul p | dc\n"
+//usage: "64\n"
+
+#if 0
+typedef unsigned data_t;
+#define DATA_FMT ""
+#elif 0
+typedef unsigned long data_t;
+#define DATA_FMT "l"
+#else
+typedef unsigned long long data_t;
+#define DATA_FMT "ll"
+#endif
+
+
+struct globals {
+ unsigned pointer;
+ unsigned base;
+ double stack[1];
+} FIX_ALIASING;
+enum { STACK_SIZE = (COMMON_BUFSIZE - offsetof(struct globals, stack)) / sizeof(double) };
+#define G (*(struct globals*)&bb_common_bufsiz1)
+#define pointer (G.pointer )
+#define base (G.base )
+#define stack (G.stack )
+#define INIT_G() do { \
+ base = 10; \
+} while (0)