Flexible Windows - Beta version 15 for 6L38

I have completed enough of my rewrite of Flexible Windows to satisfy Kerkerkruip. It’s not quite finished, and there’s no documentation, but it’s complete enough to share here now.

Please download it here:
https://raw.githubusercontent.com/i7/extensions/master/Jon%20Ingold/Flexible%20Windows.i7x
You’ll need these too: (had to de linkify because of new user restrictions)
raw.githubusercontent.com/i7/extensions/master/Emily%20Short/Glulx%20Entry%20Points.i7x
raw.githubusercontent.com/i7/extensions/master/Dannii%20Willis/Alternative%20Startup%20Rules.i7x

My rewrite has some small changes that weren’t strictly necessary, but which lead to cleaner code in my opinion. A short migration guide for the most common changes you’ll need to make is:

  • Many kinds, properties and the main/status windows have lost their hyphens
  • Colours/styles updated to match GTE
  • The window-drawing rules have been turned into the refreshing activity. It is no longer necessary to focus or clear the window
  • The hyperlink processing rules have been turned into the processing hyperlinks activity.

Depending on how advanced the features you used were, you may need to make further changes to your code. Hopefully the code is easy enough to read and figure out what to do, but if you can’t, please just ask here.

Some things are not implemented yet:

  • bordered windows
  • echo streams
  • input phrases
  • the command
  • prompt activities

This is a big extension, and I’m quite proud of it. :slight_smile: If you’re interested, please take a look at the source code. I hope it might be a useful model both of how to organise large extensions and how to do some tricky things in Inform.

Once again, well done on you! When I was still under the delusion of being able to author IF, it seemed every WiP of mine absolutely needed this extension.

Nice job. I’ve found even upgrading my own small extensions has been, well, a learning experience. Something as big as this–well, it’s good you have a complex game to test it out on, so you can keep tweaking as need be.

This is a general question: how can/should we deal with extensions where we might need different code for 6G and 6L? I’m writing one now, and some of the code (behavior after RESTORE) is necessarily different. And I don’t think I can just comment out code and say “Oh, uncomment this in 6G.”

Didn’t check the other forum again? :wink: I posted some code that should work in that situation: http://www.intfiction.org/forum/viewtopic.php?f=7&t=15482&start=10#p87367

Oops! I think I did check, but I got sidetracked and forgot. That’s a neat solution to detect the compiler number, but right now I seem to be messing up with

if compiler version is 6g60:
(call function that works in 6g60 but not 6l38);
else:
(call function that works in 6l38 but not 6g60);

I’m probably missing something fundamental & so before giving any samples I thought I’d pin down where I’m messing up.

I assume you changed the names of the phrases? Using my code it would be “if the compiler is 6G60:”. I don’t really have any other ideas sorry.