diff -N 01/german.h 02/german.h
2c2
< !   Inform Language Definition File: English 991113
---
> !   Inform Language Definition File: German 011122
67c67
<   with article number 0, dekl 7,
---
>   with article 0, number 0, dekl 7,
803c803
<                6: "[Dein Interpreter kennt kein ~rückgängig~.  Tschuldigung!]";
---
>                6: "[Dein Interpreter kennt kein ~rückgängig~.  Tut mir leid!]";
878c878
<               51: "(Seit etwas sehr dramatisches passiert ist, wurde deine Liste von
---
>               51: "(Seit etwas sehr Dramatisches passiert ist, wurde deine Liste von
985,986c985,986
<                2: "diverse Dinge findend";
<                3: "verschiedenste Orte besuchend";
---
>                2: "für das Finden diverser Dinge";
>                3: "für den Besuch verschiedenster Orte";
990c990
<            {   1: "Du trägst nichts mit dir.";
---
>            {   1: "Du trägst nichts bei dir.";
diff -N 01/germang.h 02/germang.h
146c146
< verb meta 'deklinier' 'dekl'	  		 ! esp for german
---
> Verb meta 'deklinier' 'dekl'	  		 ! esp for german
148a149,152
> #ifdef TARGET_GLULX;
> Verb meta 'glklist'
>                 *                                -> Glklist;
> #endif; ! TARGET_;
802a807,813
> 
> #ifdef TARGET_GLULX;
> #Stub IdentifyGlkObject 4;
> #Stub HandleGlkEvent  2;
> #Stub InitGlkWindow   1;
> #endif; ! TARGET_GLULX
> 
diff -N 01/inform_de_aenderungen.txt 02/inform_de_aenderungen.txt
1a2,185
> ***********************************************************************
> ***********************************************************************
> Deutsche Inform Library: Änderungsliste 02 (22.11.2001)
> ***********************************************************************
> ***********************************************************************
> ***********************************************************************
> 
> Vorschläge von: Sophie Fruehling, Kai Roos und Max Kalus
> 
> Änderungen der GLULX-Teile auf den neuesten Stand der GLULX-Library -
> einige Fehlerverbesserungen, so daß weniger Fehler auftreten sollten
> (der Bi-Plattform-Compiler unterstützt im Moment noch keine Akzent-
> Codes wie @ss für ß, so daß die GLULX-Unterstützung sowieso eher
> theoretischer Natur ist...).
> 
> ***********************************************************************
> * german.h
> ***********************************************************************
> 
> Zweite Zeile geändert in:
> Inform Language Definition File: German 011122
> 
> ***********************************************************************
> Ersetze:
> Class  CompassDirection
>   with article number 0, dekl 7,
>   	before [;
>   		LookUnder: "Die Wand ist am Boden festgemacht.";
>   	],
>   has  scenery female;
> durch:
> Class  CompassDirection
>   with article 0, number 0, dekl 7,
>   	before [;
>   		LookUnder: "Die Wand ist am Boden festgemacht.";
>   	],
>   has  scenery female;
> 
> ***********************************************************************
> 
> Ersetze:
> 6: "[Dein Interpreter kennt kein ~rückgängig~.  Tschuldigung!]";
> durch:
> 6: "[Dein Interpreter kennt kein ~rückgängig~.  Tut mir leid!]";
> 
> ***********************************************************************
> 
> Ersetze:
> 51: "(Seit etwas sehr dramatisches passiert ist, wurde deine Liste von
> durch:
> 51: "(Seit etwas sehr Dramatisches passiert ist, wurde deine Liste von
> 
> ***********************************************************************
> 
> Inv:
> Ersetze:
> 1: "Du trägst nichts mit dir.";
> durch:
> 1: "Du trägst nichts bei dir.";
> 
> ***********************************************************************
> 
> FullScore:
> Ersetze:
> 2: "diverse Dinge findend";
> 3: "verschiedenste Orte besuchend";
> durch:
> 2: "für das Finden diverser Dinge";
> 3: "für den Besuch verschiedenster Orte";
> 
> ***********************************************************************
> * germang.h
> ***********************************************************************
> 
> nach Verb meta 'deklinier'...;
> #ifdef TARGET_GLULX;
> Verb meta 'glklist'
>                 *                                -> Glklist;
> #endif; ! TARGET_;
> 
> nach #Stub ChooseObjects   2;
> #ifdef TARGET_GLULX;
> #Stub IdentifyGlkObject 4;
> #Stub HandleGlkEvent  2;
> #Stub InitGlkWindow   1;
> #endif; ! TARGET_GLULX
> 
> ***********************************************************************
> * linklpa.h
> ***********************************************************************
> 
> ganze Datei durch GLULX-Version ausgetauscht
> 
> ***********************************************************************
> * parserm.h
> ***********************************************************************
> 
> Ersetze:
> Constant GG_STATUSWIN_SIZE  1; !### make overridable
> durch:
> Global gg_statuswin_size = 1;
> 
> ***********************************************************************
> 
> Ersetze GLULX-Tokenise__-Routine
> mit Std.-GLULX-Version
> 
> ***********************************************************************
> 
> Ersetze GLULX-Routinen Keychar und Keyboardprimitive
> mit Std.-GLULX-Versionen
> 
> ***********************************************************************
> 
> Ersetze:
> i = ((ad-->0) ~= $70);
> durch:
> i = (((ad-->0)->0) ~= $70);
> 
> ***********************************************************************
> 
> Ersetze:
> StatusLineHeight(GG_STATUSWIN_SIZE);
> durch:
> StatusLineHeight(gg_statuswin_size);
> 
> ***********************************************************************
> 
> Ersetze GLULX-Routinen Box__Routine, GGInitialise, GGRecoverObjects
> mit Std.-GLULX-Versionen
> 
> ***********************************************************************
> 
> Füge neue Funktion aus Std.-GLULX-Library hinzu:
> ChangeAnyToCString
> 
> ***********************************************************************
> 
> Nach der Funktion UnsignedCompare
> NITFOL_HOOKS aus Std.-GLULX-Library hinzu
> 
> ***********************************************************************
> * verblibm.h
> ***********************************************************************
> 
> Ersetze GLULX-Routinen VersionSub
> mit Std.-GLULX-Versionen
> 
> ***********************************************************************
> 
> Füge neue Funktion aus Std.-GLULX-Library hinzu:
> GlkListSub (nach ScopeSub)
> 
> ***********************************************************************
> 
> Ersetze XObj durch:
> !Anpassung an deutsche Lib:
> [ XObj obj f;
>   if (obj provides dekl) {
>       if (parent(obj) == 0) print (_er) obj; else print (ein) obj;
>   } else {
>        print (name) obj;
>   }
>   print " (", obj, ") ";
>   if (f==1 && parent(obj) ~= 0)
>       print "(in ", (name) parent(obj), " ", parent(obj), ")";
>   new_line;
>   if (child(obj)==0) rtrue;
>   if (obj == Class)
>       WriteListFrom(child(obj),
>       NOARTICLE_BIT + INDENT_BIT + NEWLINE_BIT + ALWAYS_BIT, 1);
>   else {
>       if (obj == Compass)
>           WriteListFrom(child(obj),
>           NOARTICLE_BIT + FULLINV_BIT + INDENT_BIT + NEWLINE_BIT + ALWAYS_BIT, 1);
>       else
>           WriteListFrom(child(obj),
>           FULLINV_BIT + INDENT_BIT + NEWLINE_BIT + ALWAYS_BIT, 1);
>    }
> ];
> 
> ***********************************************************************
> ***********************************************************************
> ***********************************************************************
3a188,189
> ***********************************************************************
> ***********************************************************************
5c191
< Vorschläge von: Kai Roos, Florian Edlbauer, Martin Oehm, Ralf Simeon
---
> Vorschläge von: Kai Roos, Florian Edlbauer, Martin Oehm, Ralf Siemon
diff -N 01/linklpa.h 02/linklpa.h
4c4
< !  Supplied for use with Inform 6                         Serial number 991113
---
> !  Supplied for use with Inform 6                         Serial number 000629
diff -N 01/parserm.h 02/parserm.h
90d89
< Constant GG_STATUSWIN_SIZE  1; !### make overridable
99a99
> Global gg_statuswin_size = 1;
676c676
<     cx numwords len bx ix wx wpos wlen top bot val res dictlen entrylen;
---
>     cx numwords len bx ix wx wpos wlen val res dictlen entrylen;
727,747c727,729
<     ! Perform a simple binary search.
<     bot = 0;
<     top = dictlen;
<     while (1) {
<       val = (top+bot) / 2;
<       res = #dictionary_table + WORDSIZE + entrylen*val;
<       ix = GGWordCompare(res+1, gg_tokenbuf);
<       if (ix == 0) {
<         break;
<       }
<       if (bot >= top-1) {
<         res = 0;
<         break;
<       }
<       if (ix < 0) {
<         bot = val+1;
<       }
<       else {
<         top = val;
<       }
<     }
---
>     val = #dictionary_table + WORDSIZE;
>     @binarysearch gg_tokenbuf DICT_WORD_SIZE val entrylen dictlen
>       1 1 res;
793c775
<   ix = jx; ix = ch; ! squash compiler warnings
---
>   jx = ch; ! squash compiler warnings
851a834,841
>     ix = HandleGlkEvent(gg_event, 1, gg_arguments);
>     if (ix == 2) {
>       res = gg_arguments-->0;
>       done = true;
>     }
>     else if (ix == -1) {
>       done = false;
>     }
882c872,873
< [ KeyboardPrimitive  a_buffer a_table done;
---
> 
> [ KeyboardPrimitive  a_buffer a_table done ix;
899a891,894
>       glk($0086, 8); ! set input style
>       glk($0084, a_buffer+WORDSIZE, done); ! put_buffer
>       glk($0086, 0); ! set normal style
>       print "^";
913c908,909
<         if (gg_event-->1 == gg_mainwin)
---
>         if (gg_event-->1 == gg_mainwin) {
>           a_buffer-->0 = gg_event-->2;
914a911,918
>         }
>     }
>     ix = HandleGlkEvent(gg_event, 0, a_buffer);
>     if (ix == 2) {
>       done = true;
>     }
>     else if (ix == -1) {
>       done = false;
917d920
<   a_buffer-->0 = gg_event-->2;
3660c3663
<        i = ((ad-->0) ~= $70); 
---
>        i = (((ad-->0)->0) ~= $70); 
3873c3876
<   return parse2->1;
---
>   return parse2->1; !Geändert Max Kalus
5176c5179
<     StatusLineHeight(GG_STATUSWIN_SIZE);
---
>     StatusLineHeight(gg_statuswin_size);
5216,5217c5219,5223
<         gg_quotewin = glk($0023, gg_mainwin, $12, lines, 3, 
<             GG_QUOTEWIN_ROCK); ! window_open
---
>         gg_arguments-->0 = lines;
>         ix = InitGlkWindow(GG_QUOTEWIN_ROCK);
>         if (ix == 0) 
>             gg_quotewin = glk($0023, gg_mainwin, $12, lines, 3, 
>                 GG_QUOTEWIN_ROCK); ! window_open
5230a5237,5238
>     ! If gg_quotewin is zero here, the quote just appears in the story window.
> 
5247c5255,5263
< [ GGInitialise;
---
> [ GGInitialise res;
>     @gestalt 4 2 res; ! Test if this interpreter has Glk.
>     if (res == 0) {
>       ! Without Glk, we're entirely screwed.
>       quit;
>     }
>     ! Set the VM's I/O system to be Glk.
>     @setiosys 2 0;
> 
5253a5270,5273
>     res = InitGlkWindow(0);
>     if (res ~= 0)
>         return;
> 
5258c5278,5280
<         gg_mainwin = glk($0023, 0, 0, 0, 3, GG_MAINWIN_ROCK); ! window_open
---
>         res = InitGlkWindow(GG_MAINWIN_ROCK);
>         if (res == 0)
>             gg_mainwin = glk($0023, 0, 0, 0, 3, GG_MAINWIN_ROCK); ! window_open
5270,5272c5292,5297
<         gg_statuswin_cursize = GG_STATUSWIN_SIZE;
<         gg_statuswin = glk($0023, gg_mainwin, $12, gg_statuswin_cursize, 4, 
<             GG_STATUSWIN_ROCK); ! window_open
---
>         res = InitGlkWindow(GG_STATUSWIN_ROCK);
>         if (res == 0) {
>             gg_statuswin_cursize = gg_statuswin_size;
>             gg_statuswin = glk($0023, gg_mainwin, $12, gg_statuswin_cursize, 
>                 4, GG_STATUSWIN_ROCK); ! window_open
>         }
5277a5303,5304
> 
>     InitGlkWindow(1);
5281,5282d5307
<     !print "###GGRecoverObjects()^";
<     
5297a5323,5324
>     ! Also tell the game to clear its object references.
>     IdentifyGlkObject(0);
5301d5327
<         !print "###stream ", id, ", rock ", gg_arguments-->0, ".^";
5310a5337
>             default: IdentifyGlkObject(1, 1, id, gg_arguments-->0); 
5317d5343
<         !print "###window ", id, ", rock ", gg_arguments-->0, ".^";
5321a5348
>             default: IdentifyGlkObject(1, 0, id, gg_arguments-->0); 
5328d5354
<         !print "###fileref ", id, ", rock ", gg_arguments-->0, ".^";
5330a5357
>             default: IdentifyGlkObject(1, 2, id, gg_arguments-->0); 
5333a5361,5363
> 
>     ! Tell the game to tie up any loose ends.
>     IdentifyGlkObject(2);
5436a5467,5485
> ! And this calls PrintAnyToArray on a particular array, jiggering
> ! the result to be a Glulx C-style ($E0) string.
> 
> Constant GG_ANYTOSTRING_LEN 66;
> Array AnyToStrArr --> GG_ANYTOSTRING_LEN;
> [ ChangeAnyToCString _vararg_count ix len;
>    ix = GG_ANYTOSTRING_LEN-2;
>    @copy ix sp;
>    ix = AnyToStrArr+1;
>    @copy ix sp;
>    ix = _vararg_count+2;
>    @call PrintAnyToArray ix len;
>    AnyToStrArr->0 = $E0;
>    if (len >= GG_ANYTOSTRING_LEN)
>      len = GG_ANYTOSTRING_LEN-1;
>    AnyToStrArr->(len+1) = 0;
>    return AnyToStrArr;
> ];
> 
5570a5620,5680
> 
> #ifdef NITFOL_HOOKS;          ! Code contributed by Evin Robertson
> #ifdef TARGET_GLULX;          ! Might be nice for Z-machine games too,
>                               ! but I'm not going to try to make this work
>                               ! given #ifdef funniness.
> 
> Array magic_array -->         ! This is so nitfol can do typo correction /
>                               ! automapping / debugging on Glulx games
>     $6e66726d $4d616763 $ff0010 ! Goes to 'NfrmMagc'  10 refers to length
>     Magic_Global_Dispatch__
>     DI__check_word            ! DI__check_word(buf, length)
>     PrintShortName
>     WV__Pr RV__Pr CA__Pr      ! obj.prop = x; x = obj.prop; obj.prop(x)
>     RA__Pr RL__Pr RA__Sc      ! obj.&prop; obj.#prop; class::prop
>     OP__Pr OC__Cl             ! obj provides prop; obj ofclass class
>     OB__Move OB__Remove
>     OB__Parent__ OB__Child__ OB__Sibling__  ! No explicit veneer for these
>     ;
> 
> [ OB__Parent__ obj;
>     return parent(obj);
> ];
> 
> [ OB__Child__ obj;
>     return child(obj);
> ];
> 
> [ OB__Sibling__ obj;
>     return sibling(obj);
> ];
> 
> [ Magic_Global_Dispatch__ glbl;
>     switch(glbl) {
>      0: if(location==TheDark) return real_location;
>         return location;
>      1: return Player;
>      -1: return CompassDirection::number; ! Silliness to make exist RA__Sc
>                                           ! Should never be called.
>     }
>     return magic_array;       ! Silences a warning.
> ];
> 
> [ DI__check_word buf wlen  ix val res dictlen entrylen;
>     ! Just like in Tokenise__.  In fact, Tokenise__ could call this if
>     ! it wanted, instead of doing this itself.
>     if (wlen > DICT_WORD_SIZE)
>         wlen = DICT_WORD_SIZE;
>     for (ix=0 : ix < wlen : ix++) {
>         gg_tokenbuf->ix = glk($00A0, buf->ix);
>     }
>     for ( : ix < DICT_WORD_SIZE : ix++) {
>         gg_tokenbuf->ix = 0;
>     }
>     val = #dictionary_table + WORDSIZE;
>     entrylen = DICT_WORD_SIZE + 7;
>     @binarysearch gg_tokenbuf DICT_WORD_SIZE val entrylen dictlen 1 1 res;
>     return res;
> ];
> 
> #endif;
> #endif;
diff -N 01/verblibm.h 02/verblibm.h
65c65
< [ VersionSub;
---
> [ VersionSub ix;
67a68
>   ix = 0; ! shut up compiler warning
74c75,80
<   print "### Interpreter version ### / ";
---
>   @gestalt 1 0 ix;
>   print "Interpreter version ", ix / $10000, ".", (ix & $FF00) / $100,
>     ".", ix & $FF, " / ";
>   @gestalt 0 0 ix;
>   print "VM ", ix / $10000, ".", (ix & $FF00) / $100,
>     ".", ix & $FF, " / ";
1483c1489
<   L__M(##Take,1,noun);
---
>   L__M(##Take,1,noun);	!Anpassung Max Kalus
2400a2407
> !Anpassung an deutsche Lib:
2402c2409,2413
<   if (parent(obj) == 0) print (_er) obj; else print (ein) obj;
---
>   if (obj provides dekl) {
>       if (parent(obj) == 0) print (_er) obj; else print (ein) obj;
>   } else {
>        print (name) obj;
>   }
2411,2413c2422,2429
<   else
<       WriteListFrom(child(obj),
<       FULLINV_BIT + INDENT_BIT + NEWLINE_BIT + ALWAYS_BIT, 1);
---
>   else {
>       if (obj == Compass)
>           WriteListFrom(child(obj),
>           NOARTICLE_BIT + FULLINV_BIT + INDENT_BIT + NEWLINE_BIT + ALWAYS_BIT, 1);
>       else
>           WriteListFrom(child(obj),
>           FULLINV_BIT + INDENT_BIT + NEWLINE_BIT + ALWAYS_BIT, 1);
>    }
2429a2446,2491
> 
> #ifdef TARGET_GLULX;
> [ GlkListSub id val;
>   id = glk($0020, 0, gg_arguments); ! window_iterate
>   while (id) {
>     print "Window ", id, " (", gg_arguments-->0, "): ";
>     val = glk($0028, id); ! window_get_type
>     switch (val) {
>       1: print "pair";
>       2: print "blank";
>       3: print "textbuffer";
>       4: print "textgrid";
>       5: print "graphics";
>       default: print "unknown";
>     }
>     val = glk($0029, id); ! window_get_parent
>     if (val) print ", parent is window ", val;
>     else print ", no parent (root)";
>     val = glk($002C, id); ! window_get_stream
>     print ", stream ", val;
>     val = glk($002E, id); ! window_get_echo_stream
>     if (val) print ", echo stream ", val;
>     print "^";
>     id = glk($0020, id, gg_arguments); ! window_iterate
>   }
>   id = glk($0040, 0, gg_arguments); ! stream_iterate
>   while (id) {
>     print "Stream ", id, " (", gg_arguments-->0, ")^";
>     id = glk($0040, id, gg_arguments); ! stream_iterate
>   }
>   id = glk($0064, 0, gg_arguments); ! fileref_iterate
>   while (id) {
>     print "Fileref ", id, " (", gg_arguments-->0, ")^";
>     id = glk($0064, id, gg_arguments); ! fileref_iterate
>   }
>   val = glk($0004, 8, 0); ! gestalt, Sound
>   if (val) {
>     id = glk($00F0, 0, gg_arguments); ! schannel_iterate
>     while (id) {
>       print "Soundchannel ", id, " (", gg_arguments-->0, ")^";
>       id = glk($00F0, id, gg_arguments); ! schannel_iterate
>     }
>   }
> ];
> #endif; ! TARGET_;
> 

