Inform 7 v10.1.0 is now open-source

I haven’t tested, but I suspect you can make this work with named phrases:

To decide what number is foo (this is fooing): ...

And then ((+ fooing +) --> 1)() will work.

1 Like

Sadly, no. This program:

To decide what number is foo (this is fooing): decide on 5.

To decide what number is bar: (- baz() -).

Include (-
[baz;
  return ((+ fooing +) --> 1)();
];
-)

Lab is a room.

when play begins: say "[bar]".

which says “5” under 6M62 gets this compilation error in v10.

Problem.  Something went wrong late in compilation, when working through the 'pipeline' of code-generation steps. (This should not normally happen unless your source text is making use of '(-' and '-)' and getting that wrong, or unless you are experimenting with non-standard pipelines.) 

(That error comes up for 15 extensions too.)

1 Like

Here are the lists of the status of Friends extensions:

Known to compile under v10
  • Achievements by Juhana Leinonen
  • Achievements by Mikael Segercrantz
  • Actions on Groups by Matt Weiner
  • Adaptive Hints by Eric Eve
  • Alternatives by Eric Eve
  • Assorted Text Generation by Emily Short
  • Assumed Conversers by Michael Martin
  • Atmospheric Effects by Mikael Segercrantz
  • Automated Drawers by Emily Short
  • Autotaking by Mike Ciul
  • Basic Help by David Cornelson
  • Basic Help Menu by Wade Clarke
  • Basic Help Menu IT by Leonardo Boselli
  • Basic Literacy by Bart Massey
  • Basic Plans by Nate Cull
  • Bit Ops by Zed Lopez
  • Boolean Variables by Daniel Stelzer
  • Brief Room Descriptions by Gavin Lambert
  • Bulky Items by Juhana Leinonen
  • Bulky Items IT by Leonardo Boselli
  • Cleared Events by Daniel Stelzer
  • Clues and Conversation by Brian Rushton
  • Command Modification by Daniel Stelzer
  • Configurable Creative Commons License by Creative Commons
  • Contextual Descriptions by Jeff Nyman
  • Conversation Framework by Eric Eve
  • Conversation Nodes by Eric Eve
  • Conversation Package by Eric Eve
  • Conversation Responses by Eric Eve
  • Conversation Suggestions by Eric Eve
  • Conversational Defaults by Eric Eve
  • Creative Commons Public License IT by Leonardo Boselli
  • Debug Files by Juhana Leinonen
  • Debug Tags by Michael Kielstra
  • Debugging by Daniel Stelzer
  • Default Styles by Daniel Stelzer
  • Deluxe Doors by Emily Short
  • Description Decay by Jeff Nyman
  • Developer Framework by Peter Orme
  • Dynamic Rooms by Aaron Reed
  • Editable Stored Actions by Ron Newcomb
  • Effective Infinity by Mike Ciul
  • Exit Lister by Eric Eve
  • Exit Lister by Gavin Lambert
  • Extended Debugging by Erik Temple
  • Extended Grammar by Aaron Reed
  • Facing by Emily Short
  • Far Away by Jon Ingold
  • Flexible Action Requirements by Mike Ciul
  • Flexible Logger by Peter Orme
  • Footnotes by Stephen Granade
  • Game Ending Reloaded by Shin
  • Glk Text Formatting by Dannii Willis
  • Glulx Definitions by Dannii Willis
  • Glulx Text Styles by Daniel Stelzer
  • GNU General Public License v3 by Free Software Foundation
  • Helpful Functions by Daniel Stelzer
  • Hiding Under by Eric Eve
  • Highscores by Dannii Willis
  • If True by Zed Lopez
  • In-Line Topical Hints by Andrew Schultz
  • Introductions by Emily Short
  • Limited Implicit Actions by Eric Eve
  • List Control by Eric Eve
  • List Controller by Eric Eve
  • Menus by Dannii Willis
  • Menus by Wade Clarke
  • Menus IT by Leonardo Boselli
  • MilleUna for Gargoyle by Leonardo Boselli
  • MilleUna for Quixe by Leonardo Boselli
  • MilleUna for Quixe with graphics by Leonardo Boselli
  • Modern Conveniences by Emily Short
  • Modified Exit by Emily Short
  • Modified Timekeeping by Daniel Stelzer
  • Multiple Sounds by Massimo Stella
  • Nathanael's Cookbook by Nathanael Nerode
  • Notepad by Jim Aikin
  • Nuanced Timekeeping by Jeff Nyman
  • Numbered Disambiguation Choices by Aaron Reed
  • Numbered Disambiguation Choices IT by Leonardo Boselli
  • Object Descriptors by Peter Orme
  • Object Response Tests by Juhana Leinonen
  • Objects Matching Snippets by Mike Ciul
  • Optimized Epistemology by Andrew Plotkin
  • Ordinary Room Description by Emily Short
  • Output Silencing by Daniel Stelzer
  • Patrollers IT by Leonardo Boselli
  • Permission to Visit by Ron Newcomb
  • Phrases for Tables with Topics by Ron Newcomb
  • Planner by Nate Cull
  • Plugs and Sockets by Sean Turner
  • Points Awarding Reloaded by Shin
  • Possible Movements by Peter Orme
  • Postures by Emily Short
  • Power Sources by Emily Short
  • Prepositional Correctness by Gavin Lambert
  • Property Checking by Emily Short
  • Pseudodevices by Zed Lopez
  • Questions by Michael Callaghan
  • Questions IT by Leonardo Boselli
  • Recorded Endings by Emily Short
  • Regional Travel by Juhana Leinonen
  • Relative Placement and Direction by Jeff Nyman
  • Release for Gargoyle by Leonardo Boselli
  • Release for Quixe by Leonardo Boselli
  • Reversed Persuasion Correction by Juhana Leinonen
  • Rideable Vehicles by Gavin Lambert
  • Rideable Vehicles by Graham Nelson
  • Room Description Control by Emily Short
  • Scope Control by Ron Newcomb
  • Scoring by Leonardo Boselli
  • Scoring IT by Leonardo Boselli
  • Screenreader by Zed Lopez
  • Secret Doors by Andrew Owen
  • Secret Doors by Gavin Lambert
  • Serial And Fix by Andrew Plotkin
  • Simple Followers by Emily Short
  • Simple Followers IT by Leonardo Boselli
  • Simple Spelling by Alice Grove
  • Singing Reloaded by Shin
  • Single Paragraph Description by Emily Short
  • Small Kindnesses by Aaron Reed
  • Snippetage by Dave Robinson
  • Speechless by Zed Lopez
  • Spelling for Screenreaders by Alice Grove
  • Standard Rules Dead Code Removal by Nathanael Nerode
  • Swearing Reloaded by Shin
  • Tabulate by Zed Lopez
  • Tailored Room Description by Emily Short
  • Takeability by Mike Ciul
  • Third Noun by Daniel Stelzer
  • Title Case for Headings by Nathanael Nerode
  • Title Page IT by Leonardo Boselli
  • Transit System by Emily Short
  • Trial by Zed Lopez
  • Trinity Inventory by Mikael Segercrantz
  • Tutorial Mode by Emily Short
  • Typographical Conveniences by Daniel Stelzer
  • Unicode Interrogation by Michael Martin
  • Unit Testing by Peter Orme
  • Universal Opening by Peter Orme
  • Unknown Word Error by Mike Ciul
  • Unsuccessful PC Attempt by Ron Newcomb
  • Variable Time Control by Eric Eve
  • Verb Stripping by Nathanael Nerode
  • World Knowledge by Jeff Nyman
  • Written Inventory by Leonardo Boselli
  • Xorshift by Dannii Willis

and…

Compiles under 6M62 but not v10
  • 6M62 Patches by Friends of I7
  • Adventure Book by Edward Griffiths
  • After Not Doing Something by Ron Newcomb
  • Alternate Lighting System by Daniel Stelzer
  • Alternative Startup Rules by Dannii Willis
  • Approaches by Emily Short
  • Armed by David Ratliff
  • Article Bug Fix by Daniel Stelzer
  • Automap by Mark Tilford
  • Automap IT by Leonardo Boselli
  • Basic Hyperlinks by Emily Short
  • Basic Real Time by Sarah Morayati
  • Better Flex by Dannii Willis
  • Bulk Limiter by Eric Eve
  • Char by Zed Lopez
  • Character Portraits by Nathanael Nerode
  • Checkpoints by Peter Orme
  • Collections by Dannii Willis
  • Command Casing by Daniel Stelzer
  • Command Preloading by Daniel Stelzer
  • Command Prompt on Cue by Ron Newcomb
  • Command Unit Testing by Xavid
  • Common Commands Sidebar by Alice Grove
  • Commonly Unimplemented by Aaron Reed
  • Compliant Characters by Nathanael Nerode
  • Computers by Emily Short
  • Consolidated Multiple Actions by John Clemens
  • Conversation Builder by Chris Conley
  • Conversation Rules by Eric Eve
  • Conversation Touchability Fix by Daniel Stelzer
  • Custom Banner and Version by Zed Lopez
  • Directional Disambiguation by Xavid
  • Disambiguation Control by Jon Ingold
  • Disappearing Doors by Andrew Plotkin
  • Disambiguation Control by Jon Ingold
  • Disappearing Doors by Andrew Plotkin
  • Dishes by Emily Short
  • Dynamic Objects by Jesse McGrew
  • Dynamic Tables by Jesse McGrew
  • Easy Doors by Hanon Ondricek
  • Empty Command Handling by Daniel Stelzer
  • Enterable Underside by Gavin Lambert
  • Expanded Understanding by Xavid
  • Extended Banner by Gavin Lambert
  • Flexible Windows by Jon Ingold
  • Gender Options by Nathanael Nerode
  • Gender Speedup by Nathanael Nerode
  • Glimmr Canvas Animation by Erik Temple
  • Glimmr Canvas-Based Drawing by Erik Temple
  • Glimmr Drawing Commands by Erik Temple
  • Glimmr Graphic Hyperlinks by Erik Temple
  • Glk Events by Dannii Willis
  • Glk Input Suspending by Gavin Lambert
  • Glk Object Recovery by Dannii Willis
  • Glulx Entry Points by Emily Short
  • Glulx Text Effects by Emily Short
  • Graphic Links by Jeff Sheets
  • Graphical Map by Xavid
  • Hidden Prompt by Daniel Stelzer
  • Hybrid Choices by AW Freyr
  • Hyperlink Extension Registry by Gavin Lambert
  • Hyperlinks by Gavin Lambert
  • Hypothetical Questions by Jesse McGrew
  • Implicit Actions by Eric Eve
  • Indefinite Article Substitution Fix by Matt Weiner
  • Infra Undo by Dannii Willis
  • Initial Cursor at Top or Bottom by Nathanael Nerode
  • Inline Hyperlinks by Daniel Stelzer
  • Inline Hyperlinks by Erik Temple
  • Inline Hyperlinks by Gavin Lambert
  • Inquiry by Zed Lopez
  • Interpreter Sniffing by Friends of I7
  • Italian Language by Massimo Stella
  • JSON by Dannii Willis
  • Keyword Interface by Aaron Reed
  • Large Game Speedup by Nathanael Nerode
  • Liquids by Xavid
  • List Utilities by Zed Lopez
  • Location Images by Emily Short
  • Measured Liquid by Emily Short
  • MilleUna for Gargoyle with graphics by Leonardo Boselli
  • MilleUna World by Leonardo Boselli
  • Mobile Doors by David Corbett
  • Mood Variations by Emily Short
  • Music by Daniel Stelzer
  • Mutable Kinds by Dannii Willis
  • Nathanael's Debug Tools by Nathanael Nerode
  • Neutral Standard Responses by Nathanael Nerode
  • NPC Implicit Actions by Eric Eve
  • Object Kinds by Brady Garvin
  • Object Matching by Xavid
  • Parser Error Details by Zed Lopez
  • Parser Error Number Bugfix by Nathanael Nerode
  • Phrases for Adaptive Pacing by Ron Newcomb
  • Poor Man's Mistype by Aaron Reed
  • Print Stage Detection by Taryn Michelle
  • Quip-Based Conversation by Michael Martin
  • Randomness by Mikael Segercrantz
  • Rapid Prototyping by B David Paulsen
  • Reactable Quips by Michael Martin
  • Real Date and Time by Ron Newcomb
  • Real-Time Delays by Erik Temple
  • Remembering by Aaron Reed
  • Remembering by Daniel Stelzer
  • Response Assistant by Aaron Reed
  • Responsive Disambiguation for 6M62 by Matt Weiner
  • Rewrite the Command Line by Ron Newcomb
  • Room Description Supporter Bugfixes by Nathanael Nerode
  • Runtime Replacements by Daniel Stelzer
  • Scenery Words by Xavid
  • Scheduled Activities by John Clemens
  • Scopability by Brady Garvin
  • Scope Caching by Mike Ciul
  • Simple Graphical Window by Emily Short
  • Simple Graphical Window by Leonardo Boselli
  • Simple HTML Window by Leonardo Boselli
  • Smarter Parser by Aaron Reed
  • Spanish Language by Sebastian Arg
  • Startup Precomputation by Dannii Willis
  • Story Substrate by Jeff Nyman
  • Strange Loopiness by Zed Lopez
  • Subcommands by Daniel Stelzer
  • Supercredits by Zed Lopez
  • Supplemental by Jeff Nyman
  • Switch by Zed Lopez
  • Tab Removal by Nathanael Nerode
  • Text Box by Zed Lopez
  • Text Capture by Eric Eve
  • Text Loops by Zed Lopez
  • Textile by Zed Lopez
  • Threaded Conversation by Chris Conley
  • Title Page by Gavin Lambert
  • Title Page by Jon Ingold
  • Underside by Eric Eve
  • Undo Output Control by Erik Temple
  • Undo Output Control by Nathanael Nerode
  • Unicode File IO by Zed Lopez
  • Unified Glulx Input by Andrew Plotkin
  • Untrimmed Lines by Zed Lopez
  • Verbal Commands by Zed Lopez
  • Verbs by Zed Lopez
  • Visible from a Distance by Xavid
  • Volumetric Limiter by Daniel Gaskell
  • Vorple by Juhana Leinonen
  • Vorple Command Prompt Control by Juhana Leinonen
  • Vorple Element Manipulation by Juhana Leinonen
  • Vorple Hyperlinks by Juhana Leinonen
  • Vorple Modal Windows by Juhana Leinonen
  • Vorple Multimedia by Juhana Leinonen
  • Vorple Notifications by Juhana Leinonen
  • Vorple Screen Effects by Juhana Leinonen
  • Vorple Status Line by Juhana Leinonen
  • Vorple Tooltips by Juhana Leinonen

Some of the following are included in the previous:

Extensions with which inform7 segfaults on compilation
  • Aaron Reed/Poor Man’s Mistype/Poor Man’s Mistype.inform/ni.exitstatus
  • Aaron Reed/Remembering/Remembering.inform/ni.exitstatus
  • Alice Grove/Common Commands Sidebar/Common Commands Sidebar.inform/ni.exitstatus
  • Emily Short/Location Images/Location Images.inform/ni.exitstatus
  • Emily Short/Simple Graphical Window/Simple Graphical Window.inform/ni.exitstatus
  • Zed Lopez/Text Box/Text Box.inform/ni.exitstatus
  • Zed Lopez/Switch/Switch.inform/ni.exitstatus
  • Eric Eve/Text Capture/Text Capture.inform/ni.exitstatus
  • Eric Eve/NPC Implicit Actions/NPC Implicit Actions.inform/ni.exitstatus
  • Eric Eve/Underside/Underside.inform/ni.exitstatus
  • Eric Eve/Implicit Actions/Implicit Actions.inform/ni.exitstatus
  • Leonardo Boselli/Tutorial Mode Hyperlinks/Tutorial Mode Hyperlinks.inform/ni.exitstatus
  • Leonardo Boselli/MilleUna World/MilleUna World.inform/ni.exitstatus
  • Leonardo Boselli/Hyperlink Interface IT/Hyperlink Interface IT.inform/ni.exitstatus
  • Leonardo Boselli/Basic Help IT/Basic Help IT.inform/ni.exitstatus
  • Leonardo Boselli/Underside IT/Underside IT.inform/ni.exitstatus
  • Leonardo Boselli/Implicit Actions IT/Implicit Actions IT.inform/ni.exitstatus
  • Leonardo Boselli/MilleUna Help/MilleUna Help.inform/ni.exitstatus
  • Leonardo Boselli/MilleUna Interface IT/MilleUna Interface IT.inform/ni.exitstatus
  • Leonardo Boselli/Basic Help Hyperlinks IT/Basic Help Hyperlinks IT.inform/ni.exitstatus
  • Leonardo Boselli/Hyperlink Interface/Hyperlink Interface.inform/ni.exitstatus
  • Leonardo Boselli/Tutorial Mode Hyperlinks IT/Tutorial Mode Hyperlinks IT.inform/ni.exitstatus
  • Leonardo Boselli/MilleUna World IT/MilleUna World IT.inform/ni.exitstatus
  • Leonardo Boselli/MilleUna Help IT/MilleUna Help IT.inform/ni.exitstatus
  • Leonardo Boselli/MilleUna Interface/MilleUna Interface.inform/ni.exitstatus
  • Leonardo Boselli/MilleUna Framework IT/MilleUna Framework IT.inform/ni.exitstatus
  • Leonardo Boselli/NPC Implicit Actions IT/NPC Implicit Actions IT.inform/ni.exitstatus
  • Leonardo Boselli/MilleUna Framework/MilleUna Framework.inform/ni.exitstatus
  • Mike Ciul/Crowds/Crowds.inform/ni.exitstatus
  • Mike Ciul/Approximate Quantities/Approximate Quantities.inform/ni.exitstatus
  • Mike Ciul/Speech Motivations/Speech Motivations.inform/ni.exitstatus
  • Dannii Willis/Infra Undo/Infra Undo.inform/ni.exitstatus
  • Dannii Willis/Fancy Status Lines/Fancy Status Lines.inform/ni.exitstatus
  • Gavin Lambert/Inline Hyperlinks/Inline Hyperlinks.inform/ni.exitstatus
  • Gavin Lambert/Enterable Underside/Enterable Underside.inform/ni.exitstatus
  • Juhana Leinonen/Vorple Status Line/Vorple Status Line.inform/ni.exitstatus
  • Juhana Leinonen/Vorple Screen Effects/Vorple Screen Effects.inform/ni.exitstatus
  • Jon Ingold/Flexible Windows/Flexible Windows.inform/ni.exitstatus
  • Xavid/Command Unit Testing/Command Unit Testing.inform/ni.exitstatus
  • Xavid/Graphical Map/Graphical Map.inform/ni.exitstatus
  • Daniel Stelzer/Inline Hyperlinks/Inline Hyperlinks.inform/ni.exitstatus
  • Daniel Stelzer/Remembering/Remembering.inform/ni.exitstatus
  • Jeff Sheets/Graphic Links/Graphic Links.inform/ni.exitstatus
  • Erik Temple/Glimmr Canvas Editor/Glimmr Canvas Editor.inform/ni.exitstatus
  • Erik Temple/Glimmr Canvas Animation/Glimmr Canvas Animation.inform/ni.exitstatus
  • Erik Temple/Glimmr Automap/Glimmr Automap.inform/ni.exitstatus
  • Erik Temple/Inline Hyperlinks/Inline Hyperlinks.inform/ni.exitstatus
  • Erik Temple/Glimmr Form Fields/Glimmr Form Fields.inform/ni.exitstatus
  • Erik Temple/Glimmr Graphic Hyperlinks/Glimmr Graphic Hyperlinks.inform/ni.exitstatus
  • Erik Temple/Glulx Input Loops/Glulx Input Loops.inform/ni.exitstatus
  • Erik Temple/Glimmr Drawing Commands/Glimmr Drawing Commands.inform/ni.exitstatus
  • Erik Temple/Text Window Input-Output Control/Text Window Input-Output Control.inform/ni.exitstatus
  • Erik Temple/Glimmr Canvas-Based Drawing/Glimmr Canvas-Based Drawing.inform/ni.exitstatus
  • Erik Temple/Glulx Real Time/Glulx Real Time.inform/ni.exitstatus
6 Likes

This catastrophically breaks Gender Options, which has to patch not a function, but a hardcoded data table ( Array LanguagePronouns table in EnglishLanguage.i6t ).

I may be able to work around this but it seems like it requires replacing practically the entire Parser to refer to a differently named table, just to effectively alter the table. Is there an easier way?

At this point, I would suggest adopting the fix I made into the core distribution, specifically, making it possible for inanimate objects to be something other than neuter.

In my opinion, this is suitable for the standard Inform release. This doesn’t change the default behavior significantly, because by default inanimate objects aren’t marked as male or female. (In fact, I think it doesn’t change anything unless parts of the Standard Rules are replaced.) It just makes it possible for extension authors to allow story authors to change things by creating inanimate objects with genders – such as, perhaps, a ship.

I will quote from Gender Options.i7x:

[Aw heck.  After all that work below it turns out there's a conceptual error in the bitmask table --
it thinks all inanimate objects are neuter.  Drop down to I6 and fix it.  There may be a cleaner
method, but this is the least invasive, unbelievably.]

Include (-

! ==== ==== ==== ==== ==== ==== ==== ==== ==== ====
! Gender Options replacement for Language.i6t: Pronouns
! ==== ==== ==== ==== ==== ==== ==== ==== ==== ====

Array LanguagePronouns table

  ! word        possible GNAs                   connected
  !             to follow:                      to:
  !             a     i
  !             s  p  s  p
  !             mfnmfnmfnmfn

    'it'      $$001000001000                    NULL
    'him'     $$100000100000                    NULL
    'her'     $$010000010000                    NULL
    'them'    $$000111000111                    NULL;

-) instead of "Pronouns" in "Language.i6t".

I should be able to rewrite the parts of Gender Options which replace the Standard Rules to replace parts of the reorganized Standard Rules instead, but trying to do a copy-paste rewrite on the entire I6 parser because I can’t replace one table is just demoralizing, so I hope this will be given consideration.

I think (but haven’t tried playing with this yet) that all the template hacking one might want to do could still be achieved with custom kits: see the inbuild manual. I’m not sure how well multiple modifications to the same kit might be expected to play with each other. v10 has a substantially changed architecture and I still have a lot to try to absorb.

That LanguagePronouns array lives in the English Language kit, and you cannot have duplicates.

So I think the only way right now would be to copy the English kit into the external folder and edit the copy, which will override the built-in one. But that requires several workarounds for the moment, see Updating translations for Inform 10.1.0.

EDIT: I’ve been informed that replacing a symbol other than a routine is supposed to work. I haven’t tried it, though.

Include (-

! ==== ==== ==== ==== ==== ==== ==== ==== ==== ====
! Gender Options replacement for Language.i6t: Pronouns
! ==== ==== ==== ==== ==== ==== ==== ==== ==== ====

Array LanguagePronouns table

  ! word        possible GNAs                   connected
  !             to follow:                      to:
  !             a     i
  !             s  p  s  p
  !             mfnmfnmfnmfn

    'it'      $$001000001000                    NULL
    'him'     $$100000100000                    NULL
    'her'     $$010000010000                    NULL
    'them'    $$000111000111                    NULL;

-) instead of "LanguagePronouns ".
2 Likes

Excellent; that’ll do the trick. I’ll test it when I get Inform 10.1.0 up and running (which is probably not until the Linux IDE is ready).

inform7 in v10 seems to not even like invoking functions stored in variables in I6.

To bar: (- baz(); -)

Include (-
[foo;
print "foo^";
];

[baz n f;
f = foo;
f();
];
-)

when play begins: bar.

(which works as expected on 6M62, printing “foo”) produces…

Problem: unable to find definitions for the following name(s): baz

(I thought I had a workaround for not being able to do ((+ i7fn +)-->1)(), but sadly workarounds should, y’know, work.)

Apparently the new I7 really wants you to put a space after the function-opener [. Doing that yields an “unexpected node type in Inter tree” internal error instead.

There does seem to be interest in using the (+ … +) notation, inside Include… text, to perform function calls to phrases defined by source text (rather than by further Inform 6 syntax); and also to be able to call functions indirectly by their addresses within inclusions, i.e., to store a function value in a variable and then call the function identified by that variable. (In I6, this has an identical syntax, but is really semantically not the same thing.)

In general, use of even “Include (- … -)” is probably best minimised, and use of “(+ … +)” within that really isn’t something we want to encourage. (This is no longer a world in which this code is just being cut-and-pasted into I6 output: we could have to compile this to C, for example. “(+ … +)” is probably the feature of I7 I most wish I’d never introduced.) Still, I’ve pushed an update which should improve things for people who need to, and particularly to help people getting old extensions to work with 10.1.

The following Basic Inform project:

To begin:
	perform the test.

To perform the test: (- beta(); -)

To expostulate mildly about (N - a number) (this is the irked function):
	say "I do think this is a pity, given [N]."

To expostulate firmly (this is the riled function):
	say "Oh really! This is too much!"

Include (-
[ alpha;
print "alpha called^";
];

[beta n plugh;
print "beta called^";
alpha();
plugh = alpha;
plugh();

((+ irked function +)-->1)(7);
((+ irked function +)-->1)(22);
((+ riled function +)-->1)();
];
-)

now compiles, and produces:

beta called
alpha called
alpha called
I do think this is a pity, given 7.
I do think this is a pity, given 22.
Oh really! This is too much!

(This is the new test case “IndirectCallsInInclusions”.)

It was also noticed in this thread that the parser used when compiling inclusions did not like I6 syntax with routine names jammed up against the opening square bracket, “[like_this”. It seemed harmless to allow this, so I’ve done so.

10 Likes

is the documentation that can be built in the resources directory accurate to the current version?

Dr. Nelson may provide a much more comprehensive answer, but from what I’ve seen:

  • the discussion of extension version numbers hasn’t been updated vis-a-vis semantic version numbers
  • the section on Inform 6 inclusions at the very end needs updating
  • I just noticed there’s still a reference to downloading extensions from the inform7.com website, and there are probably still odd little specific bits that are off – but many others have been updated
  • We haven’t seen the IDEs yet, but I’d guess some specific stuff about using them will have to change, and there will be some discussion of the new toolchain and concepts like “nests”… or at least a pointer to the existing inform7 10.1.0 docs on the subject.

But the language itself seems to be vanishingly close to unchanged, so regarding the language I don’t think you would do yourself any harm by reading it as is.

2 Likes

A short heads up about Beta release of Inform App for Linux!

3 Likes

There seems to be some more sensitivity to ambiguity in property names. This, from Bulk Limiter by Eric Eve won’t compile in v10:

A thing has a number called bulk.
The bulk of a thing is normally 1.

A container has a number called bulk capacity.
The bulk capacity of a container is normally 10.

A person has a number called bulk capacity.
The bulk capacity of a person is normally 100.

complaining

I am reading the sentence ‘The bulk capacity of a container is normally 10’ (Extensions/Eric Eve/Bulk Limiter.i7x, line 9) as saying that a thing called ‘bulk capacity of a container’ is a value, but this makes no sense to me - it would be like saying ‘the chair is 10’.

I am reading the sentence ‘The bulk capacity of a person is normally 100’ (Extensions/Eric Eve/Bulk Limiter.i7x, line 12) as saying that a thing called ‘bulk capacity of a person’ is a value, but this makes no sense to me - it would be like saying ‘the chair is 10’.

6M62 is ok with it. Both 6M62 and v10 are okay with defining bulk capacity first and then bulk:

A container has a number called bulk capacity.
The bulk capacity of a container is normally 10.

A person has a number called bulk capacity.
The bulk capacity of a person is normally 100.

A thing has a number called bulk.
The bulk of a thing is normally 1.
2 Likes

A Windows / Cygwin user report.

To handle the building on Windows using Cygwin, here’s an experience report. TL;DR - so far only one part of the process doesn’t work for me.

When installing Cygwin, I chose:

  • clang
  • dos2unix
  • libclang-devel
  • libclang8
  • make
  • mingw64-i686-clang
  • mingw64x86_64-clang

Building inweb

  • git clone https://github.com/ganelson/inweb.git
  • dos2unix inweb/scripts/first.sh
  • bash inweb/scripts/first.sh linux
  • inweb/Tangled/inweb -help

Everything works. :white_check_mark:

Building intest

  • git clone https://github.com/ganelson/intest.git
  • dos2unix intest/scripts/first.sh
  • bash intest/scripts/first.sh
  • intest/Tangled/intest -help

Everything works. :white_check_mark:

Building Inform

  • git clone https://github.com/ganelson/inform.git
  • cd inform
  • dos2unix scripts/first.sh
  • bash scripts/first.sh
  • inblorb/Tangled/inblorb -help
  • ../intest/Tangled/intest inform7 -show Acidity

Everything works. :white_check_mark:

Running Full Tests

  • make check

That does not work in Cygwin for me. :stop_sign:

The following occurs:

$ make check
make -f inform6/inform6.mk test
make[1]: Entering directory '/home/jeffn/i7/inform'
../intest/Tangled/intest -from inform6 all
shell: cd '/home/jeffn/i7/intest/Workspace/T0' ; rm -f *.txt
intest: fatal error: internal error (Execution of the shell failed)
make[1]: *** [inform6/inform6.mk:72: test] Error 2
make[1]: Leaving directory '/home/jeffn/i7/inform'
make: *** [makefile:431: check] Error 2

This looks to be happening with the following line:

$(MAKE) -f $(INFORM6WEB)/inform6.mk test

Given that says it’s leaving the inform directory, I wonder if I don’t have something else set up. My current directory structure is:

i7
  --> inform
  --> intest
  --> inweb

Here my i7 is equivalent to the work directory mentioned in the documentation. Specifically, there is in fact an intest\Workspace\T0 directory, which seems to be where the logic is going.

Looking at the line from inform6.mk that seems to be problematic, it looks to be this:

test: $(INTERPRETERS)/dumb-frotz/dumb-frotz $(INTERPRETERS)/dumb-glulx/glulxe/glulxe 
	$(INTEST) -from $(ME) all

I’m not sure if this means there’s some other step I should have taken to set up the interpreters. Although I do see a dumb-frotz directory in: inform\inform6\Tests\Assistants.

Nice one.

FWIW, i tried make check here with mingw and get this;

# make check
make -f inform6/inform6.mk test
make[1]: Entering directory '/v/jkj/inform/inform'
../intest/Tangled/intest -from inform6 all
inform6 -> cases: [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60] [61] [62] [63] [64] [65] [66] [67] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77] [78] [79] [80] [81] [82] [83] [84] [85] [86] [87] [88] [89] [90] [91] [92] [93] [94] [95] [96] [97] [98] [99] [100] [101] [102] [103] [104] [105] [106] [107] [108] [109] [110] [111] [112] [113] [114] [115] [116] [117] [118] [119] [120] [121] [122] [123] [124] [125] [126] [127] [128] [129] [130] [131] [132] [133] [134] [135] [136] [137] [138] [139] [140] [141] [142] [143] [144] [145] [146] [147] [148] [149] [150] [151] [152] [153] [154] [155] [156] [157] [158] [159] [160] [161] [162] [163] [164] [165] [166] [167] [168] [169] [170] [171] [172] [173] [174] [175] [176] [177] [178] [179] [180] [181] [182] [183] [184] [185] [186] [187] [188] [189] [190] [191] [192] [193] [194] [195] [196] [197] [198] [199] [200] [201] [202] [203] [204] [205] [206] [207] [208] [209] [210] [211] [212] [213] [214] [215] [216] [217] [218] [219] [220] [221] [222] [223] [224] [225] [226] [227] [228] [229] [230] [231] [232] [233] [234] [235] [236] [237] [238] [239] [240] [241] [242] [243] [244] [245] [246] [247] [248] [249] [250]
inform6 -> problems: [251] [252] [253] [254] [255] [256] [257] [258] [259] [260] [261] [262] [263] [264] [265] [266] [267] [268] [269] [270] [271] [272] [273] [274] [275] [276] [277] [278] [279] [280] [281] [282] [283] [284] [285] [286] [287] [288] [289] [290] [291] [292] [293] [294] [295] [296] [297] [298] [299] [300] [301] [302] [303] [304] [305] [306] [307]
  All 307 tests succeeded (time taken 0:53, 11 simultaneous threads)
make[1]: Leaving directory '/v/jkj/inform/inform'
inpolicy/Tangled/inpolicy -silence -check-problems
1026 problem name(s) have been observed:
    Problems actually existing (the source code refers to them):
        922 problem(s) are named and in principle testable
        77 problem(s) are 'BelievedImpossible', that is, no known source text causes them
        19 problem(s) are 'Untestable', that is, not mechanically testable
        7 problem(s) are '...', that is, they need to be give a name and a test case
    Problems which should have test cases:
        915 problem(s) have test cases
        7 problem(s) have no test case yet:
            PM_ExtMiswordedBeginsHere
            PM_ExtNoBeginsHere
            PM_BadDesk
            PM_ScottishPlay
            PM_MisplacedFrom
            PM_PhraseInBracketsPlus
            PM_TooManyRequirements
        1 problem(s) are spurious test cases, since no such problems exist:
            PM_TSWithComma
    Problems which are cross-referenced in 'Writing with Inform':
        475 problem(s) are cross-referenced
This needs attention.

The 307 tests succeed as you can see, but i don’t know whether the observed problems after are also correct.

A Windows / MinGW-w64 user report.

Use the MinGW-w64 with the UCRT runtime.

Specifically I used GCC 11.3.0 + LLVM/Clang/LLD/LLDB 14.0.3 + MinGW-w64 10.0.0 (UCRT) - release 3. I also copied mingw32-make.exe to make.exe.

I also use Git Bash.

Building inweb

  • git clone https://github.com/ganelson/inweb.git
  • bash inweb/scripts/first.sh windows

Right away some failures. :stop_sign:

make (e=2): The system cannot find the file specified.
make: *** [inweb/inweb.mk:64: initial] Error 2
(Okay, so that failed. Maybe your environment doesn't have the compilers anticipated?)

jkj yuio already noted this issue in his post. So I just copied clang.exe to x86_64-w64-mingw32-clang.exe. That appears to be due to an MinGW oddity. It doesn’t provide that alternate executable for clang while it does for just about all other C/C++ implementations. So try again:

  • bash inweb/scripts/first.sh windows
  • inweb/Tangled/inweb -help

Everything works. :white_check_mark:

Building intest

  • git clone https://github.com/ganelson/intest.git
  • bash intest/scripts/first.sh
  • intest/Tangled/intest -help

Everything works. :white_check_mark:

Building Inform

  • git clone https://github.com/ganelson/inform.git
  • cd inform
  • bash scripts/first.sh

Got some issues. :stop_sign:

cd inform6/Tests/Assistants/dumb-glulx/cheapglk; make
make[1]: Entering directory 'E:/appDev/Projects/i7/inform/inform6/Tests/Assistants/dumb-glulx/cheapglk'
cc -g -Wall    -c -o cgfref.o cgfref.c
process_begin: CreateProcess(NULL, cc -g -Wall -c -o cgfref.o cgfref.c, ...) failed.
make (e=2): The system cannot find the file specified.
make[1]: *** [<builtin>: cgfref.o] Error 2
make[1]: Leaving directory 'E:/appDev/Projects/i7/inform/inform6/Tests/Assistants/dumb-glulx/cheapglk'
make: *** [inform6/inform6.mk:119: inform6/Tests/Assistants/dumb-glulx/glulxe/glulxe] Error 2

No idea what’s going on there so still investigating. I can say the the path (inform\inform6\Tests\Assistants\dumb-glulx\cheapglk) is accurate and present and the file cgfref.c is present as well.

But I do notice that last entry. It’s looking for:

  • inform6/Tests/Assistants/dumb-glulx/glulxe/glulxe

Notice the two “glulxe”? But I don’t have that. My build has:

  • inform\inform6\Tests\Assistants\dumb-glulx\glulxe

Per something jkj yuio also mentioned earlier, I did look at the Makefile in that directory. You’ll see this line:

OPTIONS = -g -Wall -Wmissing-prototypes -Wstrict-prototypes -Wno-unused -DOS_UNIX

I tried removing the -DOS_UNIX part but that results in the same error.

Still not sure how to resolve this one; investigating.

try my “suggested hacks” to the source here;

and run the build inside the mingw msys2 shell

after the hacks, rebuild inweb and intest first.

I did make those changes and it doesn’t seem to work for me. Same error. Specifically, I did the following:

In the inweb\Materials\platforms\windows.mkscript file, added:

SHELL = bash

Then my inweb\Chapter 6\Makefiles.w has been updated for the pathname_slashed function as follows:

void Makefiles::pathname_slashed(OUTPUT_STREAM, pathname *P) {
	TEMPORARY_TEXT(PT)
	WRITE_TO(PT, "%p", P);
	LOOP_THROUGH_TEXT(pos, PT) {
		wchar_t c = Str::get(pos);
		if (c == '\\') c = '/';
		if (c == ' ') WRITE("\\ ");
		else PUT(c);
	}
	DISCARD_TEXT(PT)
}

Then I rebuilt inweb and intest. Both compiled successfully as before.

However, running the compilation for Inform produces the same issue.

But you mention an interesting point: I’m not running msys2 at all. I just have the MinGW-64 installation on my path but I’m using Git Bash as the shell.

I wonder if that’s part of the issue. Is there something in the shell itself that would make this viable?

The end result of all this so far:

  • In a MinGW context, I can’t (yet) build Inform.
  • In a Cygwin context, I can build everything (but can’t run the make check).
  • On my MacOS, I have no issues whatsoever (for obvious POSIX reasons!)

It’s possible the msys shell makes no difference. I ran it because the build didn’t initially work and that can sometimes be the problem. I’ll dig out my list of pacman modules later so you can check.

However, there’s one thing you could check;

IIRC, you have to force rebuild inweb after the changes, or they do not work. have a look in inform7.mk to see if SHELL=bash is there. if not, then inweb didn’t really rebuild.