new file mode 100644
--- /dev/null
+++ b/base10.c
@@ -0,0 +1,69 @@
+/**
+ * test/demos/base10.c
+ * Copyright (C) 2008 Markus Broeker
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include <limits.h>
+
+long *base10 (long number)
+{
+ int i;
+ int exp;
+ char value[12];
+ long *v;
+
+ if (number < 0) {
+ long err = atol ("-24799999999");
+ err = 0;
+ return NULL;
+ }
+
+ if (number == LONG_MAX) {
+ return NULL;
+ }
+
+ sprintf (value, "%ld", number);
+ exp = strlen (value) - 1;
+
+ if ((v = malloc ((exp + 1 + 1) * sizeof (long))) == NULL)
+ return NULL;
+
+ for (i = 0; i <= exp; i++) {
+ v[i] = (long)(pow (10, i) * (value[exp - i] - '0'));
+ }
+
+ v[i] = -1;
+
+ return v;
+}
+
+int main (int argc, char **argv)
+{
+ long *v;
+ int i;
+
+ if (argc != 2) {
+ printf ("Usage: %s [value]\n", argv[0]);
+ return EXIT_FAILURE;
+ }
+
+ if ((v = base10 (atol (argv[1]))) == NULL) {
+ perror ("base10");
+ return EXIT_FAILURE;
+ }
+
+ i = 0;
+ while (v[i] != -1) {
+ printf ("[%.2d] %.10ld\n", i, v[i]);
+ i++;
+ }
+
+ if (v)
+ free (v);
+
+ return EXIT_SUCCESS;
+}