More text, unfinished chapter 1...

This commit is contained in:
Ognjen Milan Robovic 2023-11-09 07:33:47 -05:00
parent e7dc385b56
commit 0eace4863a
2 changed files with 78 additions and 0 deletions

View File

@ -9,4 +9,60 @@ It is distributed in the hope that it will be useful or harmful, it really depen
#ifndef CHAPTER_1_SOURCE
#define CHAPTER_1_SOURCE
int character_is_uppercase (char character) {
return ((int) ((character >= 'A') && (character <= 'Z')));
}
int character_is_lowercase (char character) {
return ((int) ((character >= 'a') && (character <= 'z')));
}
int character_is_digit (char character) {
return ((int) ((character >= '0') && (character <= '9')));
}
int character_is_blank (char character) {
return ((int) ((character == ' ') || (character == '\t') || (character == '\r') || (character == '\n')));
}
int character_is_alpha (char character) {
return ((character_is_uppercase (character) != 0) || (character_is_lowercase (character) != 0));
}
int character_is_symbol (char character) {
return (character_compare_array (character, "~!@#$%^&*()+{}|:\"<>?`-=[]\\;',./"));
}
int character_is_visible (char character) {
return ((int) ((character >= ' ') && (character <= '~')));
}
int character_is_invisible (char character) {
return (character_is_visible (character) == 0);
}
int character_is_escape (char character) {
return ((int) (character == '\033'));
}
int character_is_underscore (char character) {
return ((int) (character == '_'));
}
int character_is_hexadecimal (char character) {
return (character_compare_array (character, "0123456789ABCDEF"));
}
int character_compare_array (char character, char * character_array) {
int i;
for (i = 0; i != string_length (character_array); ++i)
if (character == character_array [i]) {
return (1);
}
}
return (0);
}
#endif

View File

@ -65,6 +65,28 @@ Okay, now we're left with following actually useful and C-loving keywords, 18 of
- return: Used in functions to return from them with or without a result (return value). It's best when function only uses it once.
- break: When inside a loop, this statement will exit the loop. In newer standards it can take simple arguments, but we'll see why that's bad.
- continue: Even more specific case, when inside a loop, this statement will skip to the end of the loop, and then continue again.
Now, of those 18 actually useful C keywords, I like to avoid 'struct', 'switch', 'case', 'default', 'while', and use (functional) 'static' and 'extern' only in order to silence
compiler warnings, 'static' inside a function is more useful. That leaves us (me) with 12 C keywords that I love, out of complete 32 keywords in ANSI C standard. However, we'll
see that sometimes is preferable to use switch statement somewhere, or while loop when for loop feels like overkill. In most real-world cases, you'll need to use some API or
library that internally used structures everywhere, so you'll need to adapt to it, we'll see examples later...
So, real men need these keywords { char, int, void, sizeof, static, if, else, for, enum, return }, and use the rest of them in order to silence compiler warnings, use some
standard library functions, clean the source code or access an API / library / header file.
*/
extern int character_is_uppercase (char character);
extern int character_is_lowercase (char character);
extern int character_is_digit (char character);
extern int character_is_blank (char character);
extern int character_is_alpha (char character);
extern int character_is_symbol (char character);
extern int character_is_visible (char character);
extern int character_is_invisible (char character);
extern int character_is_escape (char character);
extern int character_is_underscore (char character);
extern int character_is_hexadecimal (char character);
extern int character_compare_array (char character, char * character_array);
#endif