#include "atoi.h"
-int myatoi (char *str)
+int atoi (char *str)
{
int i = 0;
int s = 1;
#ifndef __ATOI_H__
#define __ATOI_H__
-int myatoi (char *str);
+int atoi (char *str);
#endif /* __ATOI_H__ */
#include "debug.h"
-#include "fprintf.h"
+#include "fdprintf.h"
#include "code.h"
/* depend: */
/* cflags: */
-/* linker: atoi.o code.o debug.o fprintf.o */
+/* linker: atoi.o code.o debug.o fdprintf.o */
#include <fcntl.h>
#include <unistd.h>
#include "atoi.h"
#include "code.h"
#include "debug.h"
-#include "fprintf.h"
+#include "fdprintf.h"
/* constants */
int usage (int ret)
{
- int fd = ret ? _fderr : _fdout;
+ int fd = ret ? stdfderr : stdfdout;
fdprintf (fd, "usage: %s\n", progname);
fdprintf (fd, " -h : help message\n");
fdprintf (fd, " -i <file>: input file\n");
PRINTERR ("%s: missing verbose level\n", progname);
return usage (1);
}
- verbose = myatoi (arg);
+ verbose = atoi (arg);
VERBOSE (INFO, PRINTOUT ("verbose: %d\n", verbose));
break;
case 'h':
--- /dev/null
+/*
+ File name : fprintf.c
+ Date of creation : 05/12/2022
+ Version : 1.0
+ Copyright : Soft'n'design
+ Author : Laurent Mazet <mazet@softndesign.org>
+
+ Description : This file contains embedded printf
+
+ History :
+ - initial version
+*/
+
+#include <stdarg.h>
+#include <stdint.h>
+#include <unistd.h>
+
+#include "fdprintf.h"
+
+int stdfdout = STDOUT_FILENO;
+int stdfderr = STDERR_FILENO;
+
+unsigned int nextpow (unsigned int x, int base) {
+ unsigned int n = 0;
+ while (x) {
+ n++;
+ x = x / base;
+ }
+ return (n == 0) ? 1 : n;
+}
+
+/* simple fprintf function */
+
+int fdprintf (int fd, const char *fmt, ...)
+{
+ char buffer[1024 + 1] = { 0 };
+ char *str = buffer;
+
+ va_list ap;
+ va_start (ap, fmt);
+ while (*fmt) {
+ char *s;
+ int d = 0;
+ unsigned int u;
+ char c = *fmt++;
+
+ /* copy standard char */
+ if (c != '%') {
+ *str++ = c;
+ } else {
+ int t = 0;
+ char w = '0';
+ int i, sz = 0;
+ void *p = NULL;
+
+ /* stamp */
+ if ((*fmt == ' ') || (*fmt == '0')) {
+ w = *fmt++;
+ }
+
+ /* size */
+ if ((*fmt >= '1') && (*fmt <= '9')) {
+ sz = *fmt++ - '0';
+ }
+
+ /* process format char */
+ switch (*fmt++) {
+ case 'c': /* char */
+ c = (char) va_arg (ap, int);
+ *str++ = c;
+ break;
+ case 'd': /* int */
+ d = va_arg (ap, int);
+ if (d < 0) {
+ *str++ = '-';
+ d = -d;
+ }
+ t = 1;
+ /* fall through */
+ case 'u': /* unsigned int */
+ u = (t) ? (unsigned int)d : va_arg (ap, unsigned int);
+ for (i = nextpow (u, 10), s = str; i > 0; i--, s++) {
+ str[i - 1] = '0' + (u % 10);
+ u /= 10;
+ }
+ str = s;
+ break;
+ case 'p': /* pointer */
+ *str++ = '0';
+ *str++ = 'x';
+ w = '0';
+ sz = sizeof (void *) * 2;
+ p = va_arg (ap, void *);
+ /* fall through */
+ case 'x': /* integer hexa */
+ if (!p) {
+ u = va_arg (ap, unsigned int);
+ if (sz == 0) {
+ sz = nextpow (u, 16);
+ }
+ } else {
+ u = (uintptr_t)p;
+ }
+ for (i = sz, t = 1; i > 0; i--) {
+ char x = (char)((u >> (i * 4 - 4)) & 0xf);
+ if ((t == 1) && (x == 0)) {
+ *str++ = w;
+ } else {
+ *str++ = (x > 9) ? 'a' + x - 10 : '0' + x;
+ t = 0;
+ }
+ }
+ break;
+ case 's': /* string */
+ s = va_arg (ap, char *);
+ while (s && *s)
+ *str++ = *s++;
+ break;
+ default:
+ *str++ = '?';
+ }
+ }
+ }
+ va_end (ap);
+
+ /* output string */
+ int n = str - buffer;
+ if (n < (int)sizeof (buffer) - 1) {
+ return write (fd, buffer, n);
+ }
+ return 0;
+}
+
+/* vim: set ts=4 sw=4 et: */
--- /dev/null
+#ifndef __FDPRINTF_H__
+#define __FDPRINTF_H__
+
+int fdprintf (int fd, const char *fmt, ...);
+
+extern int stdfdout;
+extern int stdfderr;
+
+#define PRINTOUT(fmt...) fdprintf (stdfdout, fmt)
+#define PRINTERR(fmt...) fdprintf (stdfderr, fmt)
+
+#endif /* __FDPRINTF_H__ */
+
+/* vim: set ts=4 sw=4 et: */
+++ /dev/null
-/*
- File name : fprintf.c
- Date of creation : 05/12/2022
- Version : 1.0
- Copyright : Soft'n'design
- Author : Laurent Mazet <mazet@softndesign.org>
-
- Description : This file contains embedded printf
-
- History :
- - initial version
-*/
-
-#include <stdarg.h>
-#include <stdint.h>
-#include <unistd.h>
-
-#include "fprintf.h"
-
-int _fdout = STDOUT_FILENO;
-int _fderr = STDERR_FILENO;
-
-unsigned int nextpow (unsigned int x, int base) {
- unsigned int n = 0;
- while (x) {
- n++;
- x = x / base;
- }
- return (n == 0) ? 1 : n;
-}
-
-/* simple fprintf function */
-
-int fdprintf (int fd, const char *fmt, ...)
-{
- char buffer[1024 + 1] = { 0 };
- char *str = buffer;
-
- va_list ap;
- va_start (ap, fmt);
- while (*fmt) {
- char *s;
- int d = 0;
- unsigned int u;
- char c = *fmt++;
-
- /* copy standard char */
- if (c != '%') {
- *str++ = c;
- } else {
- int t = 0;
- char w = '0';
- int i, sz = 0;
- void *p = NULL;
-
- /* stamp */
- if ((*fmt == ' ') || (*fmt == '0')) {
- w = *fmt++;
- }
-
- /* size */
- if ((*fmt >= '1') && (*fmt <= '9')) {
- sz = *fmt++ - '0';
- }
-
- /* process format char */
- switch (*fmt++) {
- case 'c': /* char */
- c = (char) va_arg (ap, int);
- *str++ = c;
- break;
- case 'd': /* int */
- d = va_arg (ap, int);
- if (d < 0) {
- *str++ = '-';
- d = -d;
- }
- t = 1;
- /* fall through */
- case 'u': /* unsigned int */
- u = (t) ? (unsigned int)d : va_arg (ap, unsigned int);
- for (i = nextpow (u, 10), s = str; i > 0; i--, s++) {
- str[i - 1] = '0' + (u % 10);
- u /= 10;
- }
- str = s;
- break;
- case 'p': /* pointer */
- *str++ = '0';
- *str++ = 'x';
- w = '0';
- sz = sizeof (void *) * 2;
- p = va_arg (ap, void *);
- /* fall through */
- case 'x': /* integer hexa */
- if (!p) {
- u = va_arg (ap, unsigned int);
- if (sz == 0) {
- sz = nextpow (u, 16);
- }
- } else {
- u = (uintptr_t)p;
- }
- for (i = sz, t = 1; i > 0; i--) {
- char x = (char)((u >> (i * 4 - 4)) & 0xf);
- if ((t == 1) && (x == 0)) {
- *str++ = w;
- } else {
- *str++ = (x > 9) ? 'a' + x - 10 : '0' + x;
- t = 0;
- }
- }
- break;
- case 's': /* string */
- s = va_arg (ap, char *);
- while (s && *s)
- *str++ = *s++;
- break;
- default:
- *str++ = '?';
- }
- }
- }
- va_end (ap);
-
- /* output string */
- int n = str - buffer;
- if (n < (int)sizeof (buffer) - 1) {
- return write (fd, buffer, n);
- }
- return 0;
-}
-
-/* vim: set ts=4 sw=4 et: */
+++ /dev/null
-#ifndef __FPRINTF_H__
-#define __FPRINTF_H__
-
-int fdprintf (int fd, const char *fmt, ...);
-
-extern int _fdout;
-extern int _fderr;
-
-#define PRINTOUT(fmt...) fdprintf (_fdout, fmt)
-#define PRINTERR(fmt...) fdprintf (_fderr, fmt)
-
-#endif /* __FPRINTF_H__ */
-
-/* vim: set ts=4 sw=4 et */
%.ld: %.c
$(call TITLE, "Building $@")
- echo ${<:.c=.exe}: $(shell ./getcomments.pl -p='linker:\s' -f='%' $< | awk '{for (i=1;i<=NF;i++) if ($$(i) ~ /.o$$/) printf " %s", $$(i)}') >> $@
+ echo ${<:.c=.exe}: $(shell ./getcomments.pl -p='linker:\s' -f='%' $< | awk '{for (i=1;i<=NF;i++) if ($$(i) ~ /.o$$/) printf " %s", $$(i)}') > $@
$(call PASS, SUCCESS)
%.o: %.c