Browse Source

Updated var scope, comments on buffer idea.

bugz 4 years ago
parent
commit
dd20fc7cc9
1 changed files with 62 additions and 33 deletions
  1. 62 33
      mystic.cpp

+ 62 - 33
mystic.cpp

@@ -762,7 +762,6 @@ int send_file(int fd, char *filename) {
 
 void send_goto(int fd, int x, int y) {
   char gbuffer[16];
-  char * cp;
 
   sprintf(gbuffer, "\x1b[%d;%dH", y, x);
   write(fd, gbuffer, strlen(gbuffer));
@@ -772,24 +771,25 @@ int send_file(int fd, int x, int y, char *filename) {
   FILE *fp;
   char buffer[100];
   int read;
-  int pos;
+
   fp = fopen(filename, "rb");
   if (fp == NULL) {
     ZF_LOGD("Failed to open %s", filename);
     return 0;
   }
 
-  send_goto(fd, x,y);
+  send_goto(fd, x, y);
   y++;
-  char *cp, * last_cp;
 
   while ((read = fread(buffer, 1, sizeof(buffer), fp)) > 0) {
+    char *cp, *last_cp;
+
     buffer[read] = 0;
     last_cp = buffer;
-    while ( ( cp = strchr(last_cp, '\n')) != NULL) {
+    while ((cp = strchr(last_cp, '\n')) != NULL) {
       *cp = 0;
-      write(fd, last_cp, strlen(last_cp)); 
-      send_goto(fd, x,y);
+      write(fd, last_cp, strlen(last_cp));
+      send_goto(fd, x, y);
       y++;
       last_cp = cp + 1;
     };
@@ -858,7 +858,7 @@ const char *process_trigger(int fd, const char *cp) {
 
   case 'F':
   case 'f': {
-    int x, y, pos = 0;
+    int pos = 0;
     if (ch == 'f') {
       pos = 1;
       x = (*cp) - '0';
@@ -871,7 +871,7 @@ const char *process_trigger(int fd, const char *cp) {
       y *= 10;
       y += (*cp) - '0';
       cp++;
-      ZF_LOGI( "file at (%d, %d)", x, y);
+      ZF_LOGI("file at (%d, %d)", x, y);
     }
     // Ok, look for filename
     char ansifile[32] = "./hh/";
@@ -1225,10 +1225,9 @@ int regmatch(regex_t *preg, const char *string, size_t nmatch,
   // returns number of matches found.  (Max nmatch)
   int matches = 0;
   int offset = 0;
-  int ret;
 
   while (matches < nmatch) {
-    ret = regexec(preg, string + offset, nmatch - matches, pmatch + matches,
+    int ret = regexec(preg, string + offset, nmatch - matches, pmatch + matches,
                   eflags);
     if (!ret) {
       int current = offset;
@@ -1495,8 +1494,8 @@ int mangle(int fd, char *buffer) {
         // I tried a ^P2 before doing this .. but I'd rather have the picture up
         // right away I think.
 
-        sprintf(display, "%s%s%s.^P3%s", needs_cls ? "\x1b[2J" : "",
-                fgoto, possibles[r].filename, restore_color);
+        sprintf(display, "%s%s%s.^P3%s", needs_cls ? "\x1b[2J" : "", fgoto,
+                possibles[r].filename, restore_color);
 
         ZF_LOGI("mangle(ANSI_CLS): %d file inserted %s", r, repr(display));
 
@@ -1639,26 +1638,6 @@ int mangle(int fd, char *buffer) {
           mangled_chars += c;
         }
       }
-      // Do things here.
-
-      /*
-            // NO! This is predictable
-            if (i % 3 == 0) {
-              mangled++;
-              for (int p = rxmatch[i].rm_so; p < rxmatch[i].rm_eo; p++) {
-                buffer[p] = tolower(buffer[p]);
-                mangled_chars++;
-              }
-            } else {
-              if (i % 3 == 1) {
-                mangled++;
-                for (int p = rxmatch[i].rm_so; p < rxmatch[i].rm_eo; p++) {
-                  buffer[p] = toupper(buffer[p]);
-                  mangled_chars++;
-                }
-              }
-            }
-      */
     }
   }
 
@@ -1701,6 +1680,56 @@ int harry_happens(time_t *last_event, int wakeup) {
   return 0;
 }
 
+/*
+
+TO FIX:  Stop using c strings, must use char * buffer + int length.
+MAY CONTAIN NULL VALUES.
+
+Rework some things here.  
+
+Here's the "plan":
+
+  if buffer is EMPTY:
+      time_idle = 1;
+      // setup for "random timeout value mess"
+        // we're in luck!  The last parameter is time interval/timeout.  :D
+      timeout.tv_sec = 10; // randrange(10-25)
+      timeout.tv_usec = 0;
+
+  NOT EMPTY:
+      // we're in luck!  The last parameter is time interval/timeout.  :D
+      timeout.tv_sec = 0;
+      timeout.tv_usec = 10;   // Wild Guess Here?  Maybe higher, maybe lower?
+      time_idle = 0;
+
+  ON READ:
+    read/append to current buffer.
+    We can't use nulls -- what if they are using ZModem, there's nulls in the file!
+    Look for trailing  / the very last "\r\n".  
+
+    (I could mangle/chunk it line by line.  But I'm not sure I'd need to do that.)
+
+    Optional "mangle" buffer up to that very point -- and send up to that point.
+
+    Option #2:  Maybe we send everything if program has been running for under
+    20 seconds.  This would allow the ANSI detect to not get screwed up by this
+    new idea.
+
+  ON TIMEOUT:
+    if time_idle:
+      Activate funny harry timeout events.
+    else:
+      Ok, we *STILL* haven't received any more characters into the buffer --
+      even after waiting.  (Maybe we haven't waited long enough?)
+      send the pending information in the buffer and clear it out. 
+      Maybe this is a prompt, and there won't be a \r\n.
+
+This allows for cleaner process of "lines" of buffer.  We shouldn't break
+in the midDLE OF A WORD.  Downside is that we sit on buffer contents a little
+while / some amount of time -- which will add some lag to prompts showing up.
+
+ */
+
 int main(int argc, char *argv[]) {
   int master;
   pid_t pid;