The Interactive Fiction Community Forum
It is currently Sat Mar 17, 2018 1:25 am

All times are UTC - 6 hours [ DST ]

Post new topic Reply to topic  [ 2 posts ] 
Author Message
PostPosted: Fri Sep 01, 2017 8:35 pm 

Joined: Fri Oct 18, 2013 10:13 am
Posts: 2590
Location: The Midwest
I've been playing with Uninform/Disinformation, but it keeps segfaulting on Not Just an Ordinary Ballerina, and the code is too much of a mess by modern standards to make debugging easy. (Global variables everywhere.)

EDIT: I'm beginning to suspect it may want smaller int's than my system uses.

Daniel Stelzer

 Profile Send private message  
Reply with quote  
PostPosted: Tue Sep 26, 2017 7:36 pm 

Joined: Tue Aug 15, 2017 8:57 am
Posts: 30
I got uninform working. Here's my patch:

--- uninform-orig.c     2000-07-04 17:04:42.000000000 -0400
+++ uninform.c  2017-08-02 01:05:59.678259022 -0400
@@ -3,7 +3,7 @@
 #include "stdio.h"
 #include "stdlib.h"
 #include "string.h"
-#include "getopt.c"
+#include "unistd.h"
 start_of_messages      =start of all messages
@@ -13,7 +13,7 @@
 //#ifdef __STDC__
-extern int getopt (int, char *[], const char *);
+// extern int getopt (int, char *[], const char *);
 extern int getopt ();
@@ -21,7 +21,7 @@
 /* getopt linkages */
 extern int optind;
-extern const char *optarg;
+// extern const char *optarg;
 static int option_printaddress = 0;
 static int option_grammar = 1;
@@ -57,15 +57,15 @@
 //spareaddress is, er, something
 //lastroutinefound is used by untilhexchar() and backtrack, to find the last capital 'R' and thus find the number of the hex's routine name... doesn't find 'R', just sets lastroutinefound to the location of 'R' every time it finds one.
-int stack_pointer=0,opcodebytes[100];
+int stack_pointer=0,opcodebytes[1000];
 long stored_file_position,start_of_verb_names,start_of_attribute_names,start_of_messages,start_of_property_names;
 int doneelse,address_stack_pointer,maximum_objects_in_game;
 //doneelse is to prevent 'else' from printing a line early...
-long global_number,address_stack[100],address_stack_exchange_buffer[100];
-char global_small_string[500],global_huge_string[5000],storedaddress[10],parsed_line_to_print[500],stored_parsed_line[100][300],currently_parsed_opcode[20];
-int hex_bytes_to_search_for[50],linefeed_encountered;
+long global_number,address_stack[1000],address_stack_exchange_buffer[1000];
+char global_small_string[5000],global_huge_string[50000],storedaddress[100],parsed_line_to_print[5000],stored_parsed_line[1000][3000],currently_parsed_opcode[200];
+int hex_bytes_to_search_for[500],linefeed_encountered;
 FILE *txd_output_file, *uninform_output_file,*imported_stuff,*infodump_output_file,*attr_file;
 //file 'donethat' was used in 'objectloop' and referred to the uninform_output_file when it's finished and been written to disk...

Basically, there are two problems:
-- the header inclusions are wrong.
-- the global arrays are too small (there's no dynamic allocation!). I naively multiplied all of them by 10.

It would be nice to update it more than this but the code style really is pretty ugly.

 Profile Send private message  
Reply with quote  
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 2 posts ] 

All times are UTC - 6 hours [ DST ]

Who is online

Users browsing this forum: No registered users and 11 guests

You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group