From 54b4aac53b9a04b944b00cc4dab4a4a953b17be8 Mon Sep 17 00:00:00 2001 From: chaoskagami Date: Sun, 24 Aug 2014 20:47:15 -0400 Subject: [PATCH] Miscellaneous tweaks. Mainly, added a line of lookahead so I can determine whether to stop voices. --- bin/vndc.x86_64 | Bin 109959 -> 114010 bytes vndc/include/Data.hpp | 2 ++ vndc/src/Loop.cpp | 6 +----- vndc/src/Parse.cpp | 27 ++++++++++++++++++--------- vndc/src/op_choice.cpp | 2 ++ vndc/src/op_jump.cpp | 18 ++++++++++++++++++ vndc/src/op_text.cpp | 30 +++++++++++++++++------------- 7 files changed, 58 insertions(+), 27 deletions(-) diff --git a/bin/vndc.x86_64 b/bin/vndc.x86_64 index ffa73125a0ff9d0a827a1a0c750549190646fadd..abae162e0ede4e70c795ccd6cbc9b9e4a7108b17 100755 GIT binary patch delta 31972 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 XiAPS2m*xyn25gnQj|}@jik1IAN(azq delta 31550 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 F^8bTPmw*5O diff --git a/vndc/include/Data.hpp b/vndc/include/Data.hpp index f17a569..48883a0 100644 --- a/vndc/include/Data.hpp +++ b/vndc/include/Data.hpp @@ -35,6 +35,8 @@ class DataContainer { int currentLine = 0; bool skip_key_on = false; char* window_name; + char* next_line = NULL; // Used for voice-detect. + // It's impossible to parse without lookahead. }; DataContainer* GetData(); diff --git a/vndc/src/Loop.cpp b/vndc/src/Loop.cpp index 7be1d01..aa7c8a6 100644 --- a/vndc/src/Loop.cpp +++ b/vndc/src/Loop.cpp @@ -9,7 +9,7 @@ void Wait() { // If the line is spoken, then halt previous spoken lines. // If the skip key is held, just gogogo - bool stop_voice = GetData()->wait_input && GetData()->vndc_enabled; + // bool stop_voice = GetData()->wait_input && GetData()->vndc_enabled && GetData()->is_spoken_line; while((GetData()->wait_input && !GetData()->ctx->GetQuit())) { GetData()->ctx->Input(); @@ -21,10 +21,6 @@ void Wait() { if(GetData()->ctx->GetInput(1)) break; } - - if(stop_voice) - op_sound((char*)"~", NULL); - } void Loop() { diff --git a/vndc/src/Parse.cpp b/vndc/src/Parse.cpp index b0396cf..a4accd4 100644 --- a/vndc/src/Parse.cpp +++ b/vndc/src/Parse.cpp @@ -221,33 +221,42 @@ void Parse() { exit(-8); } - char *line = (char*)calloc(sizeof(char), 400); + // Load the next line to this one. + char* line = GetData()->next_line; - fgets(line, 400, GetData()->accessScriptHandle); + if(line == NULL) { + // We've reached EOF. + op_jump(GetData()->main_scr[0], NULL, true); + } + + GetData()->next_line = (char*)calloc(sizeof(char), 400); + // Load the next line. + fgets(GetData()->next_line, 400, GetData()->accessScriptHandle); - char* line_copy = line; + char* line_copy = GetData()->next_line; while(line_copy[0] == ' ' || line_copy[0] == '\t') { line_copy[0] = '\0'; line_copy = &line_copy[1]; } - // Remove all '\n' from this string + // Remove all '\n' from the buffer line for(int i=0; i < (int)strlen(line_copy); i++) { if (line_copy[i] == '\n') line_copy[i] = '\0'; } - //printf("%lu\n", strlen(line_copy)); - - if(strlen(line_copy) != 0) { - ParseCmd(line_copy); + // Execute the current line. + if(strlen(line) != 0) { + ParseCmd(line); } free(line); + // The next line is null, because the file is finished. if(feof(GetData()->accessScriptHandle)) { - op_jump(GetData()->main_scr[0], NULL, true); + free(GetData()->next_line); + GetData()->next_line = NULL; } return; diff --git a/vndc/src/op_choice.cpp b/vndc/src/op_choice.cpp index fa3182c..08000bb 100644 --- a/vndc/src/op_choice.cpp +++ b/vndc/src/op_choice.cpp @@ -58,6 +58,8 @@ void op_choice(char* line) { strncpy(varname, "selected", 400); } + op_cleartext(); + // For each choice, we need to print text and make a click area. This will use the text function. int *choices = (int*)calloc(sizeof(int), num * 2); diff --git a/vndc/src/op_jump.cpp b/vndc/src/op_jump.cpp index 3770ff3..a58b4d9 100644 --- a/vndc/src/op_jump.cpp +++ b/vndc/src/op_jump.cpp @@ -44,4 +44,22 @@ void op_jump(char* file, int* lineTo, bool isSave) { else { GetData()->currentLine = 0; } + + // Read the first line into next_line. + GetData()->next_line = (char*)calloc(sizeof(char), 400); + // Load the next line. + fgets(GetData()->next_line, 400, GetData()->accessScriptHandle); + + char* line_copy = GetData()->next_line; + + while(line_copy[0] == ' ' || line_copy[0] == '\t') { + line_copy[0] = '\0'; + line_copy = &line_copy[1]; + } + + // Remove all '\n' from the buffer line + for(int i=0; i < (int)strlen(line_copy); i++) { + if (line_copy[i] == '\n') + line_copy[i] = '\0'; + } } diff --git a/vndc/src/op_text.cpp b/vndc/src/op_text.cpp index 647dddb..4bf8f7b 100644 --- a/vndc/src/op_text.cpp +++ b/vndc/src/op_text.cpp @@ -22,20 +22,24 @@ void op_text(char* string) { // Improvised linebreak. Also, an extension. if(GetData()->vndc_enabled && string[1] == '-' && string[2] == '-' && string[3] == '-') { - op_cleartext(); + op_cleartext(); } - // Improvised voice detect. Extension. - // This is based on toggling. - // If the quote is incomplete, it will be stopped on end. - // If not, it will continue voice until the next quoted line. - if(GetData()->vndc_enabled) { - GetData()->is_spoken_line = false; - - int quotes = 0; - for(int i=0; i < (int)strlen(string); i++) { - if(string[i] == '"') quotes++; - } - if(quotes > 0) GetData()->is_spoken_line = true; + // Improvised Tag display. Extension. + if(GetData()->vndc_enabled && string[0] == '<' && string[strlen(string)-1] == '>') { + string[strlen(string)-1] = '\0'; + string = &string[1]; + + GetData()->ctx->ClearOverlay(); + + TextManager* txt = GetData()->ctx->Text(); + + int xloc = ( GetData()->screen_w - txt->TestLen(string) - GetData()->render_x1 ); + + txt->Render(string, xloc, GetData()->render_y1); + + Wait(); + + op_cleartext(); } // Wait for input, then blank if(!strcmp(string, "!")) { -- 2.39.5