summaryrefslogtreecommitdiff
path: root/charf.c
diff options
context:
space:
mode:
Diffstat (limited to 'charf.c')
-rw-r--r--charf.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/charf.c b/charf.c
index e91f2c2..6e91b9d 100644
--- a/charf.c
+++ b/charf.c
@@ -4,6 +4,8 @@
//for multithreading
#include <pthread.h>
#include <stdbool.h>
+//for reading from stdin
+#include <string.h>
#define DOUBLEMODE 0
#define DOUBLEERRORMODE 1
@@ -258,6 +260,34 @@ void* compute_chunk(void* arguments){
}
}
+#define OK 0
+#define NO_INPUT 1
+#define TOO_LONG 2
+static int getLine (char *prmpt, char *buff, size_t sz) {
+ int ch, extra;
+
+ // Get line with buffer overrun protection.
+ if (prmpt != NULL) {
+ printf ("%s", prmpt);
+ fflush (stdout);
+ }
+ if (fgets (buff, sz, stdin) == NULL)
+ return NO_INPUT;
+
+ // If it was too long, there'll be no newline. In that case, we flush
+ // to end of line so that excess doesn't affect the next call.
+ if (buff[strlen(buff)-1] != '\n') {
+ extra = 0;
+ while (((ch = getchar()) != '\n') && (ch != EOF))
+ extra = 1;
+ return (extra == 1) ? TOO_LONG : OK;
+ }
+
+ // Otherwise remove newline and give string back to caller.
+ buff[strlen(buff)-1] = '\0';
+ return OK;
+}
+
int main() {
pthread_t threads[NUM_THREADS];
Args args[NUM_THREADS];
@@ -276,6 +306,15 @@ int main() {
result_code = pthread_create(&threads[i], NULL, compute_chunk, args+i);
}
+ size_t sz = 1024;
+ char prmpt[] = "To exit enter q,quit or exit.\nTo print current records to terminal enter r.\nTo print current records to a file enter p.\nTo do so with tex formatting enter t.\n";
+ char buff[sz];
+ bool cont = true;
+ do {
+ getLine(prmpt, buff, sz);
+ if( 0 == strcmp(buff,"q") || 0 == strcmp(buff,"quit") || 0 == strcmp(buff,"exit") ) exit(EXIT_SUCCESS);
+ } while(cont);
+
// wait for each thread to complete
for (int i = 0; i < NUM_THREADS; i++) {
result_code = pthread_join(threads[i], NULL);