diff options
author | Andreas Baumann <mail@andreasbaumann.cc> | 2017-05-12 21:11:57 +0200 |
---|---|---|
committer | Andreas Baumann <mail@andreasbaumann.cc> | 2017-05-12 21:11:57 +0200 |
commit | 0a1c5c69244b1199cb877aed029a3c9aca68f60a (patch) | |
tree | ed68f775060b0fc1f27830847272c1f7d5ff7ad3 /src | |
parent | 3adae629e98f9fd256349b291e89e6f63c5e469e (diff) | |
download | abaos-0a1c5c69244b1199cb877aed029a3c9aca68f60a.tar.gz abaos-0a1c5c69244b1199cb877aed029a3c9aca68f60a.tar.bz2 |
added a itoa
Diffstat (limited to 'src')
-rw-r--r-- | src/kernel.c | 34 | ||||
-rw-r--r-- | src/stddef.h | 6 | ||||
-rw-r--r-- | src/stdlib.c | 43 |
3 files changed, 64 insertions, 19 deletions
diff --git a/src/kernel.c b/src/kernel.c index 8232a12..91ed26b 100644 --- a/src/kernel.c +++ b/src/kernel.c @@ -12,8 +12,6 @@ void entry( void ) vga_put_string( &vga, "ABAOS 0.0.1 STARTING" ); - // clang 4.0.0 needs volatile otherwise it takes a random value - // from the register in the second vga_put_char_at below??! const char bar[] = "\\|/-"; int y_pos = vga_get_cursor_y( &vga ); int x_pos = vga_get_cursor_x( &vga ); @@ -33,21 +31,21 @@ void entry( void ) vga_put_hex( &vga, 4711 ); vga_put_newline( &vga ); - vga_set_color( &vga, VGA_COLOR_WHITE ); - vga_set_background_color( &vga, VGA_COLOR_RED ); - vga_clear_screen( &vga ); + //~ vga_set_color( &vga, VGA_COLOR_WHITE ); + //~ vga_set_background_color( &vga, VGA_COLOR_RED ); + //~ vga_clear_screen( &vga ); - for( int i = 0; i < 50; i++ ) { - for( int j = 0; j < i; j++ ) { - vga_put_char( &vga, '-' ); - } - vga_put_char( &vga, '>' ); - vga_put_string( &vga, (const char *)"TEST TEST TEST" ); - vga_put_newline( &vga ); - } - for( int j = 0; j < 50; j++ ) { - vga_put_char( &vga, '-' ); - } - vga_put_char( &vga, '>' ); - vga_put_string( &vga, (const char *)"TEST TEST TEST" ); + //~ for( int i = 0; i < 50; i++ ) { + //~ for( int j = 0; j < i; j++ ) { + //~ vga_put_char( &vga, '-' ); + //~ } + //~ vga_put_char( &vga, '>' ); + //~ vga_put_string( &vga, (const char *)"TEST TEST TEST" ); + //~ vga_put_newline( &vga ); + //~ } + //~ for( int j = 0; j < 50; j++ ) { + //~ vga_put_char( &vga, '-' ); + //~ } + //~ vga_put_char( &vga, '>' ); + //~ vga_put_string( &vga, (const char *)"TEST TEST TEST" ); } diff --git a/src/stddef.h b/src/stddef.h new file mode 100644 index 0000000..962e1aa --- /dev/null +++ b/src/stddef.h @@ -0,0 +1,6 @@ +#ifndef STDDEF_H +#define STDDEF_H + +#define NULL ( (void *)0 ) + +#endif /* STDDEF_H */ diff --git a/src/stdlib.c b/src/stdlib.c index 9a9425f..46bdce8 100644 --- a/src/stdlib.c +++ b/src/stdlib.c @@ -1,7 +1,48 @@ +#include <stdbool.h> +#include "string.h" #include "stdlib.h" +#include "stddef.h" +static void strreverse( char *s ) +{ + char *end = s + strlen( s ) - 1; + + while( s < end ) { + // XOR swap; + *s ^= *end; + *end ^= *s; + *s ^= *end; + s++; + end--; + } +} + char *itoa( int v, char *s, int base ) { - //~ *s = '\0'; + static char digit[] = "0123456789ABCDEF"; + bool sign = false; + char *p = s; + + if( base < 2 || base > 16 ) { + return NULL; + } + + if( v < 0 ) { + v = -v; + sign = true; + } + + do { + *p++ = digit[v % base]; + } while( ( v /= base ) > 0 ); + + if( sign ) { + *p++ = '-'; + } + *p = '\0'; + + strreverse( s ); + return s; } + |