diff 15/german.h 16/german.h
50c50
<         = "Offizielle deutsche Inform-Library, Release 15, Serial 020925";
---
>         = "Offizielle deutsche Inform-Library, Release 16, Serial 021002";
292a293,296
> #ifndef NO_PUNCTUATION;
>     x=0; !Warnung über unbenutze Variable (wenn TARGET_ZCODE,
>     !PUNCTUATION gesetzt ist) verhindern
> #endif;
482a487,488
> #ifdef USE_OLD_GERMAN_SUFFIX_ROUTINE;
>     
615a622,764
> #ifnot; !USE_OLD_GERMAN_SUFFIX_ROUTINE ist nicht aktiv
>      
> [ ProcessGermanSuffixes x at end word len i;
> 
> #ifdef TARGET_ZCODE;
> for (x=0:x<parse->1:x++)
> {
>     word = parse-->(x*2+1);
>     
>     if (word == 0)                 ! if word not recognized
>     {
> 	len = parse->(x*4+4);
> 	at = parse->(x*4+5);
> 
> 	for(i=0:i<len:i++) buffer2->(2+i)=buffer->(at+i);
> 	buffer2->1 = len;
> #ifnot; ! TARGET_GLULX
> for (x=0:x<parse-->0:x++)
> {
>     word = parse-->(x*3+1);
>     if (word == 0)
>     {
> 	len = parse-->(x*3+2);
> 	at = parse-->(x*3+3);
> 	
> 	for(i=0:i<len:i++) buffer2->(WORDSIZE+i)=buffer->(at+i);
> 	buffer2-->0 = len;
> #endif; ! TARGET_
> 	end = at+len-1;              ! last letter of the word
> 
> 	PGSuffixes_helper(len,end,0);
> !	break;
>     }
> }	
> ];
> 
> #ifndef GERMAN_SUFFIXES_PEDANTIC;
> 
>     !Einfacher Suffixentferner. Er entfernt alle möglichen Endungen
>     !solange, bis ein bekanntes Wort entstanden ist. "Bauern" wird
>     !somit zu "Bauer" und nicht zu "Bau" umgeformt. Allerdings schneidet diese
>     !Version auch sinnlose Suffixes ab, wenn ein sinnvolles Wort
>     !entstehen würde, z.B. würden, wenn "Bauer" bekannt ist, "Bauerssm",
>     !"Bauersss" und "Bauersre" alle zu "Bauer" transformiert.
>     
> Array _PGS_Array ->
>     !Startindex
>     3 9 13
>     !Round 0
>     'e' 'm' 'n' 'r' 's' 0
>     !Round 1
>     'e' 'r' 's' 0
>     !Round 2
>     'e' 's' 0;
> 
> [PGSuffixes_helper len end  round   i;
>     ! evtl. gar kein Längencheck?
>     if (len<2)
> 	rfalse;
> 
> #ifdef TARGET_ZCODE;
> 	buffer2->1 = len;
>     	Tokenise__(buffer2,parse2);
> #ifnot; !TARGET_GLULX
>         buffer2-->0 = len;
> 	Tokenise__(buffer2,parse2);
> #endif; !TARGET_
>     
>     if (parse2-->1) !Wort bekannt
> 	rtrue;
> 
>     if (round>2)
> 	rfalse;
>     
>     for (i=_PGS_Array->round:_PGS_Array->i:i++) {
>     	if (buffer->end == _PGS_Array->i &&
> 	    PGSuffixes_helper(len-1,end-1,round+1)) {
> 	    buffer->end = ' ';
> 	    rtrue;
> 	}
>     }
>     rfalse;
> ];
> 
> #ifnot; !GERMAN_SUFFIXES_PEDANTIC ist an
> 
> !Eine einfache Turingmaschine(ok, die andere Version könnte man auch
> !als eine Bezeichnen) zum Abschneiden der Endungen. Arbeitet wie die einfache Version,
> !nur schneidet sie nur "richtige" Endungen ab, z.B. nur "ern","ses" aber nicht "ssm", "sre" etc. 
> 
> Array _PGS_Array ->
> !Startindex der einzelnen Zustände
>     5 16 19 24 27
> !Format: Zeichen, Zielzustand (99=stop); 0 schließt Liste ab
> !State 0
>     'e' 1 'n' 2 's' 3 'm' 4 'r' 4 0
> !State 1
>     's' 99 0 
> !State 2
>     'e' 99 'r' 4 0
> !State 3
>     'e' 1 0
> !State 4, hier muß eines der angegeben Zeichen folgen
>     'e' 99 0;
> 
> [PGSuffixes_helper len end state    i;
>     
> !Ist der Längencheck notwendig? Ich glaube nicht...
>     if (len<2)
> 	rfalse;
>     
>     if (state ~= 4) !Spezialfall
>     {
> #ifdef TARGET_ZCODE;
> 	buffer2->1 = len;
>     	Tokenise__(buffer2,parse2);
> #ifnot; !TARGET_GLULX
> 	buffer2-->0 = len;
> 	Tokenise__(buffer2,parse2);
> #endif; !TARGET_
> 	if (parse2-->1) 
> 	    rtrue;
>     }
>     
>     if (state == 99)
> 	!Kein bekanntes Wort nach abschneiden eines Suffixes -> nicht abschneiden!
> 	rfalse;
> 
>     !Andere Möglichkeiten abprüfen
>     for(i=_PGS_Array->state:_PGS_Array->i:i=i+2) {
> 	if (buffer->end == _PGS_Array->i &&
> 	    PGSuffixes_helper(len-1,end-1,_PGS_Array->(i+1))) {
> 	    buffer->end = ' ';
> 	    rtrue;
> 	}
>     }
>     rfalse;
> ];
> 
> #endif; !GERMAN_SUFFIXES_PEDANTIC
> 
> #endif; !USE_OLD_GERMAN_SUFFIX_ROUTINE
> 
829a979,981
> !Property suffixes muß noch deklariert werden.
> !Also machen wir das doch hier.
>     	suffixes,
832c984
< [ LanguageLM n x1;
---
> [ LanguageLM n x1 flag;
876c1028
<               23: "Gesprächspartner nicht gefunden!";
---
>               23: "[Du scheinst mit jemandem sprechen zu wollen, aber ich weiss nicht, mit wem.]";
882,883c1034,1035
<               27: "Dieses Verb verstehe ich nicht.";
<               28: print "Wahrscheinlich meinst du: ";
---
>               27: "Diesen Satz verstehe ich nicht.";
>               28: print "Ich habe dich nur soweit verstanden: ";
900c1052
<               38: "Diesen Satz verstehe ich nicht.";
---
>               38: "Dieses Verb verstehe ich nicht.";
922,925c1074,1078
<                   if (x1==1) print "einen Punkt ";
<                     else print (number) x1, " Punkte ";
<                   if (x1 > 0) print "erhöht"; else 
<                       { x1 = -x1; print "verringert"; }
---
>                   if (x1<0) {flag=0;x1=-x1;} else flag=1;
> 		  if (x1==1) print "einen Punkt ";
>                     else print (number) (x1), " Punkte ";
>                   if (flag) print "erhöht"; else 
> 			    print "verringert";	
1055,1057c1208,1210
<                3: print "Ich nehme nicht an, ", (der) x1, " ";
<                   singplur(x1, "würde", "würden");
<                   print_ret " sich dafür interessieren.";
---
>                3: print "Ich nehme nicht an, ", (string) C_DASS,(der) x1, " das ";
>                   singplur(x1, "möchte", "möchten");
>                   print_ret ".";
1076,1077c1229
<               11: print_ret (GDer) x1, " steh", (endT) x1,
<                   " unbeweglich da. Du bewegst ", (ihn) x1, " keinen Millimeter weit.";
---
>               11: print_ret (GDer) x1, " ", (ist) x1," hier fest verankert.";
diff 15/germang.h 16/germang.h
221a222,224
>         * creature 'mit' held 'an'               -> Attack
>         * 'mit' held creature 'an'               -> Attack reverse
>         * creature 'an' 'mit' held               -> Attack
diff 15/inform_de_aenderungen.txt 16/inform_de_aenderungen.txt
3a4,988
> * Deutsche Inform Library: Änderungsliste 16 (02.10.2002)
> ***********************************************************************
> ***********************************************************************
> ***********************************************************************
> 
> Vorschläge von: Dennis Brakhane
> 
> ***********************************************************************
> * parserm.h
> ***********************************************************************
> 
> Alt:
>     for (m=0:m<=l:m++)
>         if (wd==k-->m) rtrue;
> Neu:
>     for (m=0:m<=l:m++)
> 	if(wd==k-->m) {
> 	    if (obj provides changing_gender) {
> 	    	if (m<l) {
> 		    m = k-->(m+1);
> 	    	    if (m>255)
> 			m=0;
> 		    else if (obj ~= player) {
> 			!Wir müssen noch ein weiteres Pronomen setzen.
> 			wd = PowersOfTwo_TB-->(GetGNAOfObjectWithGender(obj,m));
>    			for (l = 1 : l <= LanguagePronouns-->0: l = l+3)
>        			    if (wd & (LanguagePronouns-->(l+1)) ~= 0)
>            			LanguagePronouns-->(l+2) = obj;
> 		    }
> 		} else
> 		    m = 0;
> 	    	obj.changing_gender = m;
> 	    }
> 	    rtrue;
> 	}
> 
> ***********************************************************************
> 
> Alt:
>   for (x = 1, d = 0 : x <= LanguagePronouns-->0: x = x+3)
>   {   !print "~", (address) LanguagePronouns-->x, "~ "; !auskommentiert Max Kalus
>       y = LanguagePronouns-->(x+2);
> Neu:
>   for (x = 1, d = 0 : x <= LanguagePronouns-->0: x = x+3)
>   {   !print "~", (address) LanguagePronouns-->x, "~ "; !auskommentiert Max Kalus
>       if (LanguagePronouns-->x == 'spez.') continue;
>       y = LanguagePronouns-->(x+2);
> 
> ***********************************************************************
> * germang.h
> ***********************************************************************
> 
> Alt:
> Verb 'greif' 'fass' 'ergreif'
> 	* multi					 -> Take
> 	* multiinside 'in' noun			 -> Remove
> 	* multiinside 'auf' noun		 -> Remove
> 	* multiinside xheraus    		 -> Remove
> 	* 'an' noun				 -> Touch
> 	* creature 'an'				 -> Attack
> 	* noun 'an'				 -> Touch
> 	* 'nach' multi				 -> Take
> 	* 'nach' multiinside 'in' noun		 -> Remove
> 	* 'nach' multiinside 'auf' noun		 -> Remove
> 	* multiinside 'von'/'aus' noun  	 -> Remove
> 	* multiinside 'von'/'aus' noun heraus 	 -> Remove;
> Neu:
> Verb 'greif' 'fass' 'ergreif'
> 	* multi					 -> Take
> 	* multiinside 'in' noun			 -> Remove
> 	* multiinside 'auf' noun		 -> Remove
> 	* multiinside xheraus    		 -> Remove
> 	* 'an' noun				 -> Touch
> 	* creature 'an'				 -> Attack
>         * creature 'mit' held 'an'               -> Attack
>         * 'mit' held creature 'an'               -> Attack reverse
>         * creature 'an' 'mit' held               -> Attack
> 	* noun 'an'				 -> Touch
> 	* 'nach' multi				 -> Take
> 	* 'nach' multiinside 'in' noun		 -> Remove
> 	* 'nach' multiinside 'auf' noun		 -> Remove
> 	* multiinside 'von'/'aus' noun  	 -> Remove
> 	* multiinside 'von'/'aus' noun heraus 	 -> Remove;
> 
> ***********************************************************************
> * german.h
> ***********************************************************************
> 
> Alt:
> [ PreProcessGerman  x;
> 
> ! Glulx does not lower the ASCII-chars, so do it now
> #ifdef TARGET_GLULX;
> Neu:
> [ PreProcessGerman  x;
> #ifndef NO_PUNCTUATION;
>     x=0; !Warnung über unbenutze Variable (wenn TARGET_ZCODE,
>     !PUNCTUATION gesetzt ist) verhindern
> #endif;
> 
> ! Glulx does not lower the ASCII-chars, so do it now
> #ifdef TARGET_GLULX;
> 
> ***********************************************************************
> 
> Alt:
> !ProcessGermanSuffixes
> !Routine to cut off German suffixes, but leave things like 'se' alone
> [ ProcessGermanSuffixes  x at end word len;
> ! 4. Pass: make lemmas out of inflected nouns
> !          -> this is equal to removing any suffixes
> !          -> on parsing case or number or gender is not looked at at all
> !          -> Umlaute (ä as 'ae') have to be entered separately in 
> !              the names - property
> !  List of (most) german noun suffixes:
> !  e n s se ses en er ern 
> 
> #ifdef TARGET_ZCODE;
> for (x=0:x<parse->1:x++)
> {
>   word = parse-->(x*2+1);
>   if (word == 0)                 ! if word not recognized
>   {
>     len = parse->(x*4+4);
>     at = parse->(x*4+5);
> #ifnot; ! TARGET_GLULX
> for (x=0:x<parse-->0:x++)
> {
>   word = parse-->(x*3+1);
>   if (word == 0)
>   {
>     len = parse-->(x*3+2);
>     at = parse-->(x*3+3);
> #endif; ! TARGET_
> 
>     end = at+len-1;              ! last letter of the word
> 
> !Zusatz MK:
> !Falls das Wort nur zwei oder so Buchstaben hat, dann nicht weiter ändern: Behebt Fehler mit "se" "ne", etc.
> 
> ! --- suffix "ern" ---
>      if ((buffer->end == 'n') && 
>         (buffer->(end-1) == 'r') &&
>         (buffer->(end-2) == 'e') &&
>         (len > 4) &&
>         DictionaryLookup(buffer+at,len-3) > 0) ! word without suffix in lex
>      {
>       buffer->end = ' ';           ! remove suffix
>       buffer->(end-1) = ' ';
>       buffer->(end-2) = ' ';
>      }
> 
> ! --- suffix "ses" ---
>      if ((buffer->end == 's') && 
>         (buffer->(end-1) == 'e') &&
>         (buffer->(end-2) == 's') &&
>         (len > 4) &&
>        DictionaryLookup(buffer+at,len-3) > 0)
>      {
>       buffer->end = ' ';
>       buffer->(end-1) = ' ';
>       buffer->(end-2) = ' ';
>      }
> 
> 
> ! --- suffix "se" ---
>    if ((buffer->end == 'e') &&
>         (buffer->(end-1) == 's') &&
>         (len > 3) &&
>         DictionaryLookup(buffer+at,len-2) > 0)
>     {
>       buffer->end = ' ';
>       buffer->(end-1) = ' ';
>     }
> 
> ! --- suffix "es" ---
> ! Thanks to Max Kalus
> if ((buffer->end == 's') &&
>     (buffer->(end-1) == 'e') &&
>     (len > 3) &&
>     DictionaryLookup(buffer+at,len-2) > 0)
> {
>     buffer->end = ' ';
>     buffer->(end-1) = ' ';
> }
> 
> ! --- suffix "er" ---
>    if ((buffer->end == 'r') &&
>         (buffer->(end-1) == 'e') &&
>         (len > 3) &&
>        DictionaryLookup(buffer+at,len-2) > 0)
>     {
>       buffer->end = ' ';
>       buffer->(end-1) = ' ';
>     }
> 
> ! --- suffix "en" ---
>    if ((buffer->end == 'n') &&
>         (buffer->(end-1) == 'e') &&
>         (len > 3) &&
>        DictionaryLookup(buffer+at,len-2) > 0)
>     {
>       buffer->end = ' ';
>       buffer->(end-1) = ' ';
>     }
> 
> ! --- suffix "em" ---	Thanks to Max Kalus
>    if ((buffer->end == 'm') &&
>         (buffer->(end-1) == 'e') &&
>         (len > 3) &&
>        DictionaryLookup(buffer+at,len-2) > 0)
>     {
>       buffer->end = ' ';
>       buffer->(end-1) = ' ';
>     }
> 
> ! --- suffix "s" ---
>    if ((buffer->end == 's') &&
>         (len > 2) &&
>         DictionaryLookup(buffer+at,len-1) > 0)
>       buffer->end = ' ';
> 
> ! --- suffix "n" ---
>    if ((buffer->end == 'n') &&
>         (len > 2) &&
>         DictionaryLookup(buffer+at,len-1) > 0)
>       buffer->end = ' ';
> 
> ! --- suffix "e" ---
>    if ((buffer->end == 'e') &&
>         (len > 2) &&
>         DictionaryLookup(buffer+at,len-1) > 0)
>       buffer->end = ' ';
> 
>     break;
>   }
> }
> ];
> Neu:
> #ifdef USE_OLD_GERMAN_SUFFIX_ROUTINE;
>     
> !ProcessGermanSuffixes
> !Routine to cut off German suffixes, but leave things like 'se' alone
> [ ProcessGermanSuffixes  x at end word len;
> ! 4. Pass: make lemmas out of inflected nouns
> !          -> this is equal to removing any suffixes
> !          -> on parsing case or number or gender is not looked at at all
> !          -> Umlaute (ä as 'ae') have to be entered separately in 
> !              the names - property
> !  List of (most) german noun suffixes:
> !  e n s se ses en er ern 
> 
> #ifdef TARGET_ZCODE;
> for (x=0:x<parse->1:x++)
> {
>   word = parse-->(x*2+1);
>   if (word == 0)                 ! if word not recognized
>   {
>     len = parse->(x*4+4);
>     at = parse->(x*4+5);
> #ifnot; ! TARGET_GLULX
> for (x=0:x<parse-->0:x++)
> {
>   word = parse-->(x*3+1);
>   if (word == 0)
>   {
>     len = parse-->(x*3+2);
>     at = parse-->(x*3+3);
> #endif; ! TARGET_
> 
>     end = at+len-1;              ! last letter of the word
> 
> !Zusatz MK:
> !Falls das Wort nur zwei oder so Buchstaben hat, dann nicht weiter ändern: Behebt Fehler mit "se" "ne", etc.
> 
> ! --- suffix "ern" ---
>      if ((buffer->end == 'n') && 
>         (buffer->(end-1) == 'r') &&
>         (buffer->(end-2) == 'e') &&
>         (len > 4) &&
>         DictionaryLookup(buffer+at,len-3) > 0) ! word without suffix in lex
>      {
>       buffer->end = ' ';           ! remove suffix
>       buffer->(end-1) = ' ';
>       buffer->(end-2) = ' ';
>      }
> 
> ! --- suffix "ses" ---
>      if ((buffer->end == 's') && 
>         (buffer->(end-1) == 'e') &&
>         (buffer->(end-2) == 's') &&
>         (len > 4) &&
>        DictionaryLookup(buffer+at,len-3) > 0)
>      {
>       buffer->end = ' ';
>       buffer->(end-1) = ' ';
>       buffer->(end-2) = ' ';
>      }
> 
> 
> ! --- suffix "se" ---
>    if ((buffer->end == 'e') &&
>         (buffer->(end-1) == 's') &&
>         (len > 3) &&
>         DictionaryLookup(buffer+at,len-2) > 0)
>     {
>       buffer->end = ' ';
>       buffer->(end-1) = ' ';
>     }
> 
> ! --- suffix "es" ---
> ! Thanks to Max Kalus
> if ((buffer->end == 's') &&
>     (buffer->(end-1) == 'e') &&
>     (len > 3) &&
>     DictionaryLookup(buffer+at,len-2) > 0)
> {
>     buffer->end = ' ';
>     buffer->(end-1) = ' ';
> }
> 
> ! --- suffix "er" ---
>    if ((buffer->end == 'r') &&
>         (buffer->(end-1) == 'e') &&
>         (len > 3) &&
>        DictionaryLookup(buffer+at,len-2) > 0)
>     {
>       buffer->end = ' ';
>       buffer->(end-1) = ' ';
>     }
> 
> ! --- suffix "en" ---
>    if ((buffer->end == 'n') &&
>         (buffer->(end-1) == 'e') &&
>         (len > 3) &&
>        DictionaryLookup(buffer+at,len-2) > 0)
>     {
>       buffer->end = ' ';
>       buffer->(end-1) = ' ';
>     }
> 
> ! --- suffix "em" ---	Thanks to Max Kalus
>    if ((buffer->end == 'm') &&
>         (buffer->(end-1) == 'e') &&
>         (len > 3) &&
>        DictionaryLookup(buffer+at,len-2) > 0)
>     {
>       buffer->end = ' ';
>       buffer->(end-1) = ' ';
>     }
> 
> ! --- suffix "s" ---
>    if ((buffer->end == 's') &&
>         (len > 2) &&
>         DictionaryLookup(buffer+at,len-1) > 0)
>       buffer->end = ' ';
> 
> ! --- suffix "n" ---
>    if ((buffer->end == 'n') &&
>         (len > 2) &&
>         DictionaryLookup(buffer+at,len-1) > 0)
>       buffer->end = ' ';
> 
> ! --- suffix "e" ---
>    if ((buffer->end == 'e') &&
>         (len > 2) &&
>         DictionaryLookup(buffer+at,len-1) > 0)
>       buffer->end = ' ';
> 
>     break;
>   }
> }
> ];
> 
> #ifnot; !USE_OLD_GERMAN_SUFFIX_ROUTINE ist nicht aktiv
>      
> [ ProcessGermanSuffixes x at end word len i;
> 
> #ifdef TARGET_ZCODE;
> for (x=0:x<parse->1:x++)
> {
>     word = parse-->(x*2+1);
>     
>     if (word == 0)                 ! if word not recognized
>     {
> 	len = parse->(x*4+4);
> 	at = parse->(x*4+5);
> 
> 	for(i=0:i<len:i++) buffer2->(2+i)=buffer->(at+i);
> 	buffer2->1 = len;
> #ifnot; ! TARGET_GLULX
> for (x=0:x<parse-->0:x++)
> {
>     word = parse-->(x*3+1);
>     if (word == 0)
>     {
> 	len = parse-->(x*3+2);
> 	at = parse-->(x*3+3);
> 	
> 	for(i=0:i<len:i++) buffer2->(WORDSIZE+i)=buffer->(at+i);
> 	buffer2-->0 = len;
> #endif; ! TARGET_
> 	end = at+len-1;              ! last letter of the word
> 
> 	PGSuffixes_helper(len,end,0);
> !	break;
>     }
> }	
> ];
> 
> #ifndef GERMAN_SUFFIXES_PEDANTIC;
> 
>     !Einfacher Suffixentferner. Er entfernt alle möglichen Endungen
>     !solange, bis ein bekanntes Wort entstanden ist. "Bauern" wird
>     !somit zu "Bauer" und nicht zu "Bau" umgeformt. Allerdings schneidet diese
>     !Version auch sinnlose Suffixes ab, wenn ein sinnvolles Wort
>     !entstehen würde, z.B. würden, wenn "Bauer" bekannt ist, "Bauerssm",
>     !"Bauersss" und "Bauersre" alle zu "Bauer" transformiert.
>     
> Array _PGS_Array ->
>     !Startindex
>     3 9 13
>     !Round 0
>     'e' 'm' 'n' 'r' 's' 0
>     !Round 1
>     'e' 'r' 's' 0
>     !Round 2
>     'e' 's' 0;
> 
> [PGSuffixes_helper len end  round   i;
>     ! evtl. gar kein Längencheck?
>     if (len<2)
> 	rfalse;
> 
> #ifdef TARGET_ZCODE;
> 	buffer2->1 = len;
>     	Tokenise__(buffer2,parse2);
> #ifnot; !TARGET_GLULX
>         buffer2-->0 = len;
> 	Tokenise__(buffer2,parse2);
> #endif; !TARGET_
>     
>     if (parse2-->1) !Wort bekannt
> 	rtrue;
> 
>     if (round>2)
> 	rfalse;
>     
>     for (i=_PGS_Array->round:_PGS_Array->i:i++) {
>     	if (buffer->end == _PGS_Array->i &&
> 	    PGSuffixes_helper(len-1,end-1,round+1)) {
> 	    buffer->end = ' ';
> 	    rtrue;
> 	}
>     }
>     rfalse;
> ];
> 
> #ifnot; !GERMAN_SUFFIXES_PEDANTIC ist an
> 
> !Eine einfache Turingmaschine(ok, die andere Version könnte man auch
> !als eine Bezeichnen) zum Abschneiden der Endungen. Arbeitet wie die einfache Version,
> !nur schneidet sie nur "richtige" Endungen ab, z.B. nur "ern","ses" aber nicht "ssm", "sre" etc. 
> 
> Array _PGS_Array ->
> !Startindex der einzelnen Zustände
>     5 16 19 24 27
> !Format: Zeichen, Zielzustand (99=stop); 0 schließt Liste ab
> !State 0
>     'e' 1 'n' 2 's' 3 'm' 4 'r' 4 0
> !State 1
>     's' 99 0 
> !State 2
>     'e' 99 'r' 4 0
> !State 3
>     'e' 1 0
> !State 4, hier muß eines der angegeben Zeichen folgen
>     'e' 99 0;
> 
> [PGSuffixes_helper len end state    i;
>     
> !Ist der Längencheck notwendig? Ich glaube nicht...
>     if (len<2)
> 	rfalse;
>     
>     if (state ~= 4) !Spezialfall
>     {
> #ifdef TARGET_ZCODE;
> 	buffer2->1 = len;
>     	Tokenise__(buffer2,parse2);
> #ifnot; !TARGET_GLULX
> 	buffer2-->0 = len;
> 	Tokenise__(buffer2,parse2);
> #endif; !TARGET_
> 	if (parse2-->1) 
> 	    rtrue;
>     }
>     
>     if (state == 99)
> 	!Kein bekanntes Wort nach abschneiden eines Suffixes -> nicht abschneiden!
> 	rfalse;
> 
>     !Andere Möglichkeiten abprüfen
>     for(i=_PGS_Array->state:_PGS_Array->i:i=i+2) {
> 	if (buffer->end == _PGS_Array->i &&
> 	    PGSuffixes_helper(len-1,end-1,_PGS_Array->(i+1))) {
> 	    buffer->end = ' ';
> 	    rtrue;
> 	}
>     }
>     rfalse;
> ];
> 
> #endif; !GERMAN_SUFFIXES_PEDANTIC
> 
> #endif; !USE_OLD_GERMAN_SUFFIX_ROUTINE
> 
> ***********************************************************************
> 
> Alt:
> Object DunkelObj "Gegenstand"
> 	with dekl 1, adj "undefinierbar" "dunkl",
> 	has male scenery;
> 
> [ LanguageLM n x1;
> Neu:
> Object DunkelObj "Gegenstand"
> 	with dekl 1, adj "undefinierbar" "dunkl",
> !Property suffixes muß noch deklariert werden.
> !Also machen wir das doch hier.
>     	suffixes,
> 	has male scenery;
> 
> [ LanguageLM n x1 flag;
> 
> ***********************************************************************
> 
> Alt:
>               23: "Gesprächspartner nicht gefunden!";
> Neu:
>               23: "[Du scheinst mit jemandem sprechen zu wollen, aber ich weiss nicht, mit wem.]";
> 
> ***********************************************************************
> 
> Alt:
>               27: "Dieses Verb verstehe ich nicht.";
> Neu:
>               27: "Diesen Satz verstehe ich nicht.";
> 
> ***********************************************************************
> 
> Alt:
>               28: print "Wahrscheinlich meinst du: ";
> Neu:
>               28: print "Ich habe dich nur soweit verstanden: ";
> 
> ***********************************************************************
> 
> Alt:
>               38: "Diesen Satz verstehe ich nicht.";
> Neu:
>               38: "Dieses Verb verstehe ich nicht.";
> 
> ***********************************************************************
> 
> Alt:
>               50: print "Dein Punktestand hat sich um ";
>                   if (x1==1) print "einen Punkt ";
>                     else print (number) x1, " Punkte ";
>                   if (x1 > 0) print "erhöht"; else 
>                       { x1 = -x1; print "verringert"; }
> Neu:
>               50: print "Dein Punktestand hat sich um ";
>                   if (x1<0) {flag=0;x1=-x1;} else flag=1;
> 		  if (x1==1) print "einen Punkt ";
>                     else print (number) (x1), " Punkte ";
>                   if (flag) print "erhöht"; else 
> 			    print "verringert";	
> 
> ***********************************************************************
> 
> Alt:
>                3: print "Ich nehme nicht an, ", (der) x1, " ";
>                   singplur(x1, "würde", "würden");
>                   print_ret " sich dafür interessieren.";
> Neu:
>                3: print "Ich nehme nicht an, ", (string) C_DASS,(der) x1, " das ";
>                   singplur(x1, "möchte", "möchten");
>                   print_ret ".";
> 
> ***********************************************************************
> 
> Alt:
>               11: print_ret (GDer) x1, " steh", (endT) x1,
>                   " unbeweglich da. Du bewegst ", (ihn) x1, " keinen Millimeter weit.";
> Neu:
>               11: print_ret (GDer) x1, " ", (ist) x1," hier fest verankert.";
> 
> ***********************************************************************
> * tgerman.h
> ***********************************************************************
> 
> Alt:
> Property dekl;	
> Property adj;
> Property post;
> Neu:
> Property dekl;	
> Property adj;
> Property post;
> Property changing_gender;
> 
> ***********************************************************************
> 
> Alt:
> [ta_ArticlesGenderOffset obj;
> Neu:
> [ta_ArticlesGenderOffset obj;
>   if (obj provides changing_gender) obj.changing_gender = 0;
> 
> ***********************************************************************
> 
> Alt:
> ];
> 
> [ta_ArticlesNumberOffset obj;
> Neu:
> ];
> 
> [ta_ArticlesChangingGenderOffset obj x;
>   if (~~(obj provides changing_gender && obj.changing_gender ~= 0))
>     return ta_ArticlesGenderOffset(obj);
>   x = obj.changing_gender;
>     
>   if (x==male) x=0; else
>   { if (x==female) x=ta_LanguageNumberCases; else
>     { if (x==neuter) 
> 	{x=ta_LanguageNumberCases * 2;
>      } else {
> #ifdef DEBUG;
>         print "^# TGERMAN Warnung: ", obj, 
>              " hat kein korrektes changing_gender - Interner Fehler?^";
> #endif;
>      return ta_ArticlesGenderOffset(obj); !sonst default nehmen
>       }
>     }
>   }
>   return x;
> ];
> 
> [ta_ArticlesNumberOffset obj;
> 
> ***********************************************************************
> 
> Alt:
>      rtrue;
>    };
> #ifdef DEBUG;
>  } else {
>    print "^# TGERMAN Warnung: ", obj, " hat keine Deklination (dekl)";
> Neu:
>      rtrue;
>    } else if (obj provides suffixes) {
>        n = case + ta_ArticlesNumberOffset(obj);
>        if (metaclass(obj.suffixes) == Routine) 
> 	   obj.suffixes(case);
>        else
> 	   print (string) (obj.&suffixes-->case);
>    }
> 	   
> #ifdef DEBUG;
>  } else {
>    print "^# TGERMAN Warnung: ", obj, " hat keine Deklination (dekl)";
> 
> ***********************************************************************
> 
> Alt:
> [er obj; 
>   print (string) ta_LanguageItPronouns --> 
>    (ta_ArticlesNumberOffset(obj) + ta_ArticlesGenderOffset(obj));
> ];
> 
> [ihn obj;
>   print (string) ta_LanguageItPronouns --> 
>    (ta_ArticlesNumberOffset(obj) + ta_ArticlesGenderOffset(obj) + 1);
> ];
>  
> [ihm obj;
>   print (string) ta_LanguageItPronouns --> 
>    (ta_ArticlesNumberOffset(obj) + ta_ArticlesGenderOffset(obj) + 2);
> ];
> 
> [seiner obj;
>   print (string) ta_LanguageItPronouns --> 
>    (ta_ArticlesNumberOffset(obj) + ta_ArticlesGenderOffset(obj) + 3);
> ];
> 
> 
> Array ta_LanguageUpperItPronouns -->
> 
> ! Nom   Akk   Dat   Gen          personal pronoun 3rd person singular
> 
>   "Er"  "Ihn" "Ihm" "Seiner"   ! Mask
>   "Sie" "Sie" "Ihr" "Ihrer"    ! Fem
>   "Es"  "Es"  "Ihm" "Seiner"   ! Neutr
> 
> ! Nom   Akk   Dat     Gen          personal pronoun 3rd person plural
> 
>   "Sie" "Sie" "Ihnen" "Ihrer"    ! Mask
>   "Sie" "Sie" "Ihnen" "Ihrer"    ! Fem
>   "Sie" "Sie" "Ihnen" "Ihrer"    ! Neutr
> ;
> 
> 
> [Ger obj; 
>   print (string) ta_LanguageUpperItPronouns --> 
>    (ta_ArticlesNumberOffset(obj) + ta_ArticlesGenderOffset(obj));
> ];
> 
> [Gihn obj;
>   print (string) ta_LanguageUpperItPronouns --> 
>    (ta_ArticlesNumberOffset(obj) + ta_ArticlesGenderOffset(obj) + 1);
> ];
>  
> [Gihm obj;
>   print (string) ta_LanguageUpperItPronouns --> 
>    (ta_ArticlesNumberOffset(obj) + ta_ArticlesGenderOffset(obj) + 2);
> ];
> 
> [Gseiner obj;
>   print (string) ta_LanguageUpperItPronouns --> 
>    (ta_ArticlesNumberOffset(obj) + ta_ArticlesGenderOffset(obj) + 3);
> ];
> 
> 
> 
> 
> 
> ! german replacements for ThatorThose;
> ! ------------------------------------
> 
> Array ta_LanguageThatPronouns --> 
> 
> ! Nom       Akk      Dat      Gen      demonstrative pronoun 3rd person sg
> 
>   "dieser"  "diesen" "diesem" "dieses"   ! Mask
>   "diese"   "diese"  "dieser" "dieser"   ! Fem
>   "dieses"  "dieses" "diesem" "dieses"   ! Neutr
> 
> ! Nom     Akk     Dat      Gen         demonstative pronoun 3rd person pl
> 
>   "diese" "diese" "diesen" "dieser"    ! Mask
>   "diese" "diese" "diesen" "dieser"    ! Fem
>   "diese" "diese" "diesen" "dieser"    ! Neutr
> ;
> 
> 
> [dieser obj; 
>   print (string) ta_LanguageThatPronouns --> 
>    (ta_ArticlesNumberOffset(obj) + ta_ArticlesGenderOffset(obj));
> ];
> 
> [diesen obj;
>   print (string) ta_LanguageThatPronouns --> 
>    (ta_ArticlesNumberOffset(obj) + ta_ArticlesGenderOffset(obj) + 1);
> ];
>  
> [diesem obj;
>   print (string) ta_LanguageThatPronouns --> 
>    (ta_ArticlesNumberOffset(obj) + ta_ArticlesGenderOffset(obj) + 2);
> ];
> 
> [dieses obj;
>   print (string) ta_LanguageThatPronouns --> 
>    (ta_ArticlesNumberOffset(obj) + ta_ArticlesGenderOffset(obj) + 3);
> ];
> 
> 
> 
> Array ta_LanguageUpperThatPronouns --> 
> 
> ! Nom       Akk      Dat      Gen      demonstrative pronoun 3rd person sg
> 
>   "Dieser"  "Diesen" "Diesem" "Dieses"   ! Mask
>   "Diese"   "Diese"  "Dieser" "Dieser"   ! Fem
>   "Dieses"  "Dieses" "Diesem" "Dieses"   ! Neutr
> 
> ! Nom     Akk     Dat      Gen         demonstative pronoun 3rd person pl
> 
>   "Diese" "Diese" "Diesen" "Dieser"    ! Mask
>   "Diese" "Diese" "Diesen" "Dieser"    ! Fem
>   "Diese" "Diese" "Diesen" "Dieser"    ! Neutr
> ;
> 
> 
> [Gdieser obj; 
>   print (string) ta_LanguageUpperThatPronouns --> 
>    (ta_ArticlesNumberOffset(obj) + ta_ArticlesGenderOffset(obj));
> ];
> 
> [Gdiesen obj;
>   print (string) ta_LanguageUpperThatPronouns --> 
>    (ta_ArticlesNumberOffset(obj) + ta_ArticlesGenderOffset(obj) + 1);
> ];
>  
> [Gdiesem obj;
>   print (string) ta_LanguageUpperThatPronouns --> 
>    (ta_ArticlesNumberOffset(obj) + ta_ArticlesGenderOffset(obj) + 2);
> ];
> 
> [Gdieses obj;
>   print (string) ta_LanguageUpperThatPronouns --> 
>    (ta_ArticlesNumberOffset(obj) + ta_ArticlesGenderOffset(obj) + 3);
> ];
> Neu:
> [er obj; 
>   print (string) ta_LanguageItPronouns --> 
>    (ta_ArticlesNumberOffset(obj) + ta_ArticlesChangingGenderOffset(obj));
> ];
> 
> [ihn obj;
>   print (string) ta_LanguageItPronouns --> 
>    (ta_ArticlesNumberOffset(obj) + ta_ArticlesChangingGenderOffset(obj) + 1);
> ];
>  
> [ihm obj;
>   print (string) ta_LanguageItPronouns --> 
>    (ta_ArticlesNumberOffset(obj) + ta_ArticlesChangingGenderOffset(obj) + 2);
> ];
> 
> [seiner obj;
>   print (string) ta_LanguageItPronouns --> 
>    (ta_ArticlesNumberOffset(obj) + ta_ArticlesChangingGenderOffset(obj) + 3);
> ];
> 
> 
> Array ta_LanguageUpperItPronouns -->
> 
> ! Nom   Akk   Dat   Gen          personal pronoun 3rd person singular
> 
>   "Er"  "Ihn" "Ihm" "Seiner"   ! Mask
>   "Sie" "Sie" "Ihr" "Ihrer"    ! Fem
>   "Es"  "Es"  "Ihm" "Seiner"   ! Neutr
> 
> ! Nom   Akk   Dat     Gen          personal pronoun 3rd person plural
> 
>   "Sie" "Sie" "Ihnen" "Ihrer"    ! Mask
>   "Sie" "Sie" "Ihnen" "Ihrer"    ! Fem
>   "Sie" "Sie" "Ihnen" "Ihrer"    ! Neutr
> ;
> 
> 
> [Ger obj; 
>   print (string) ta_LanguageUpperItPronouns --> 
>    (ta_ArticlesNumberOffset(obj) + ta_ArticlesChangingGenderOffset(obj));
> ];
> 
> [Gihn obj;
>   print (string) ta_LanguageUpperItPronouns --> 
>    (ta_ArticlesNumberOffset(obj) + ta_ArticlesChangingGenderOffset(obj) + 1);
> ];
>  
> [Gihm obj;
>   print (string) ta_LanguageUpperItPronouns --> 
>    (ta_ArticlesNumberOffset(obj) + ta_ArticlesChangingGenderOffset(obj) + 2);
> ];
> 
> [Gseiner obj;
>   print (string) ta_LanguageUpperItPronouns --> 
>    (ta_ArticlesNumberOffset(obj) + ta_ArticlesChangingGenderOffset(obj) + 3);
> ];
> 
> 
> 
> 
> 
> ! german replacements for ThatorThose;
> ! ------------------------------------
> 
> Array ta_LanguageThatPronouns --> 
> 
> ! Nom       Akk      Dat      Gen      demonstrative pronoun 3rd person sg
> 
>   "dieser"  "diesen" "diesem" "dieses"   ! Mask
>   "diese"   "diese"  "dieser" "dieser"   ! Fem
>   "dieses"  "dieses" "diesem" "dieses"   ! Neutr
> 
> ! Nom     Akk     Dat      Gen         demonstative pronoun 3rd person pl
> 
>   "diese" "diese" "diesen" "dieser"    ! Mask
>   "diese" "diese" "diesen" "dieser"    ! Fem
>   "diese" "diese" "diesen" "dieser"    ! Neutr
> ;
> 
> 
> [dieser obj; 
>   print (string) ta_LanguageThatPronouns --> 
>    (ta_ArticlesNumberOffset(obj) + ta_ArticlesChangingGenderOffset(obj));
> ];
> 
> [diesen obj;
>   print (string) ta_LanguageThatPronouns --> 
>    (ta_ArticlesNumberOffset(obj) + ta_ArticlesChangingGenderOffset(obj) + 1);
> ];
>  
> [diesem obj;
>   print (string) ta_LanguageThatPronouns --> 
>    (ta_ArticlesNumberOffset(obj) + ta_ArticlesChangingGenderOffset(obj) + 2);
> ];
> 
> [dieses obj;
>   print (string) ta_LanguageThatPronouns --> 
>    (ta_ArticlesNumberOffset(obj) + ta_ArticlesChangingGenderOffset(obj) + 3);
> ];
> 
> 
> 
> Array ta_LanguageUpperThatPronouns --> 
> 
> ! Nom       Akk      Dat      Gen      demonstrative pronoun 3rd person sg
> 
>   "Dieser"  "Diesen" "Diesem" "Dieses"   ! Mask
>   "Diese"   "Diese"  "Dieser" "Dieser"   ! Fem
>   "Dieses"  "Dieses" "Diesem" "Dieses"   ! Neutr
> 
> ! Nom     Akk     Dat      Gen         demonstative pronoun 3rd person pl
> 
>   "Diese" "Diese" "Diesen" "Dieser"    ! Mask
>   "Diese" "Diese" "Diesen" "Dieser"    ! Fem
>   "Diese" "Diese" "Diesen" "Dieser"    ! Neutr
> ;
> 
> 
> [Gdieser obj; 
>   print (string) ta_LanguageUpperThatPronouns --> 
>    (ta_ArticlesNumberOffset(obj) + ta_ArticlesChangingGenderOffset(obj));
> ];
> 
> [Gdiesen obj;
>   print (string) ta_LanguageUpperThatPronouns --> 
>    (ta_ArticlesNumberOffset(obj) + ta_ArticlesChangingGenderOffset(obj) + 1);
> ];
>  
> [Gdiesem obj;
>   print (string) ta_LanguageUpperThatPronouns --> 
>    (ta_ArticlesNumberOffset(obj) + ta_ArticlesChangingGenderOffset(obj) + 2);
> ];
> 
> [Gdieses obj;
>   print (string) ta_LanguageUpperThatPronouns --> 
>    (ta_ArticlesNumberOffset(obj) + ta_ArticlesChangingGenderOffset(obj) + 3);
> ];
> 
> ***********************************************************************
> 
> Alt:
> [ta_PrintPostNoun obj;
>    if(obj provides post)
>    {
>      if(metaclass(obj.post) == string)
>      {
>        print " ", (string) obj.post;
>      } else {
> 	print " ";
>      	obj.post();
>      }
>    }
> ];
> Neu:
> [ta_PrintPostNoun obj;
>    if(obj provides post)
>    {
>      if(metaclass(obj.post) == string)
>      {
>        print " ", (string) obj.post;
>      } else {
> 	!print " ";
>      	obj.post();
>      }
>    }
> ];
> 
> ***********************************************************************
> ***********************************************************************
> ***********************************************************************
430a1416,1438
> 
> Alt:
> ];
> 
> ! ----------------------------------------------------------------------------
> !  Converting between dictionary addresses and entry numbers
> Neu:
> ];
> 
> [ GetGNAOfObjectWithGender  obj gender case;
>     !Wird für ChangingGender Objekte gebraucht, um die Pronomen
>     !richtig zu setzen
>    if (obj hasnt animate) case = 6;
>    if (gender == female) case = case + 1;
>    if (gender == neuter) case = case + 2;
>    if (obj has pluralname) case = case + 3;
>    return case;
> ];
> 
> ! ----------------------------------------------------------------------------
> !  Converting between dictionary addresses and entry numbers
> 
> ***********************************************************************
776,806d1783
<   if (word == 'ans')
<   { buffer->(at+2) = ' ';
<     LTI_Insert(at+3, 'd');
<     LTI_Insert(at+4, 'a');
<     LTI_Insert(at+5, 's');
<     break;
<   }
< Neu:
<   if (word == 'ans')
<   { buffer->(at+2) = ' ';
<     LTI_Insert(at+3, 'd');
<     LTI_Insert(at+4, 'a');
<     LTI_Insert(at+5, 's');
<     break;
<   }
< 
<   ! replace "vom" by "von dem"
<   if (word == 'vom')
<   { 
<     print (address) word, "^";
<     buffer->(at+2) = 'n';
<     LTI_Insert(at+3, ' ');
<     LTI_Insert(at+4, 'd');
<     LTI_Insert(at+5, 'e');
<     LTI_Insert(at+6, 'm');
<     break;
<   }
< 
< ***********************************************************************
< 
< Alt:
diff 15/parserm.h 16/parserm.h
3864c3864,3882
<         if (wd==k-->m) rtrue;
---
> 	if(wd==k-->m) {
> 	    if (obj provides changing_gender) {
> 	    	if (m<l) {
> 		    m = k-->(m+1);
> 	    	    if (m>255)
> 			m=0;
> 		    else if (obj ~= player) {
> 			!Wir müssen noch ein weiteres Pronomen setzen.
> 			wd = PowersOfTwo_TB-->(GetGNAOfObjectWithGender(obj,m));
>    			for (l = 1 : l <= LanguagePronouns-->0: l = l+3)
>        			    if (wd & (LanguagePronouns-->(l+1)) ~= 0)
>            			LanguagePronouns-->(l+2) = obj;
> 		    }
> 		} else
> 		    m = 0;
> 	    	obj.changing_gender = m;
> 	    }
> 	    rtrue;
> 	}
4067a4086,4095
> [ GetGNAOfObjectWithGender  obj gender case;
>     !Wird für ChangingGender Objekte gebraucht, um die Pronomen
>     !richtig zu setzen
>    if (obj hasnt animate) case = 6;
>    if (gender == female) case = case + 1;
>    if (gender == neuter) case = case + 2;
>    if (obj has pluralname) case = case + 3;
>    return case;
> ];
> 
4173a4202
>       if (LanguagePronouns-->x == 'spez.') continue;
diff 15/tgerman.h 16/tgerman.h
13a14
> Property changing_gender;
170a172
>   if (obj provides changing_gender) obj.changing_gender = 0;
184a187,207
> [ta_ArticlesChangingGenderOffset obj x;
>   if (~~(obj provides changing_gender && obj.changing_gender ~= 0))
>     return ta_ArticlesGenderOffset(obj);
>   x = obj.changing_gender;
>     
>   if (x==male) x=0; else
>   { if (x==female) x=ta_LanguageNumberCases; else
>     { if (x==neuter) 
> 	{x=ta_LanguageNumberCases * 2;
>      } else {
> #ifdef DEBUG;
>         print "^# TGERMAN Warnung: ", obj, 
>              " hat kein korrektes changing_gender - Interner Fehler?^";
> #endif;
>      return ta_ArticlesGenderOffset(obj); !sonst default nehmen
>       }
>     }
>   }
>   return x;
> ];
> 
915c938,945
<    };
---
>    } else if (obj provides suffixes) {
>        n = case + ta_ArticlesNumberOffset(obj);
>        if (metaclass(obj.suffixes) == Routine) 
> 	   obj.suffixes(case);
>        else
> 	   print (string) (obj.&suffixes-->case);
>    }
> 	   
937c967
< 	print " ";
---
> 	!print " ";
972c1002
<    (ta_ArticlesNumberOffset(obj) + ta_ArticlesGenderOffset(obj));
---
>    (ta_ArticlesNumberOffset(obj) + ta_ArticlesChangingGenderOffset(obj));
977c1007
<    (ta_ArticlesNumberOffset(obj) + ta_ArticlesGenderOffset(obj) + 1);
---
>    (ta_ArticlesNumberOffset(obj) + ta_ArticlesChangingGenderOffset(obj) + 1);
982c1012
<    (ta_ArticlesNumberOffset(obj) + ta_ArticlesGenderOffset(obj) + 2);
---
>    (ta_ArticlesNumberOffset(obj) + ta_ArticlesChangingGenderOffset(obj) + 2);
987c1017
<    (ta_ArticlesNumberOffset(obj) + ta_ArticlesGenderOffset(obj) + 3);
---
>    (ta_ArticlesNumberOffset(obj) + ta_ArticlesChangingGenderOffset(obj) + 3);
1009c1039
<    (ta_ArticlesNumberOffset(obj) + ta_ArticlesGenderOffset(obj));
---
>    (ta_ArticlesNumberOffset(obj) + ta_ArticlesChangingGenderOffset(obj));
1014c1044
<    (ta_ArticlesNumberOffset(obj) + ta_ArticlesGenderOffset(obj) + 1);
---
>    (ta_ArticlesNumberOffset(obj) + ta_ArticlesChangingGenderOffset(obj) + 1);
1019c1049
<    (ta_ArticlesNumberOffset(obj) + ta_ArticlesGenderOffset(obj) + 2);
---
>    (ta_ArticlesNumberOffset(obj) + ta_ArticlesChangingGenderOffset(obj) + 2);
1024c1054
<    (ta_ArticlesNumberOffset(obj) + ta_ArticlesGenderOffset(obj) + 3);
---
>    (ta_ArticlesNumberOffset(obj) + ta_ArticlesChangingGenderOffset(obj) + 3);
1052c1082
<    (ta_ArticlesNumberOffset(obj) + ta_ArticlesGenderOffset(obj));
---
>    (ta_ArticlesNumberOffset(obj) + ta_ArticlesChangingGenderOffset(obj));
1057c1087
<    (ta_ArticlesNumberOffset(obj) + ta_ArticlesGenderOffset(obj) + 1);
---
>    (ta_ArticlesNumberOffset(obj) + ta_ArticlesChangingGenderOffset(obj) + 1);
1062c1092
<    (ta_ArticlesNumberOffset(obj) + ta_ArticlesGenderOffset(obj) + 2);
---
>    (ta_ArticlesNumberOffset(obj) + ta_ArticlesChangingGenderOffset(obj) + 2);
1067c1097
<    (ta_ArticlesNumberOffset(obj) + ta_ArticlesGenderOffset(obj) + 3);
---
>    (ta_ArticlesNumberOffset(obj) + ta_ArticlesChangingGenderOffset(obj) + 3);
1090c1120
<    (ta_ArticlesNumberOffset(obj) + ta_ArticlesGenderOffset(obj));
---
>    (ta_ArticlesNumberOffset(obj) + ta_ArticlesChangingGenderOffset(obj));
1095c1125
<    (ta_ArticlesNumberOffset(obj) + ta_ArticlesGenderOffset(obj) + 1);
---
>    (ta_ArticlesNumberOffset(obj) + ta_ArticlesChangingGenderOffset(obj) + 1);
1100c1130
<    (ta_ArticlesNumberOffset(obj) + ta_ArticlesGenderOffset(obj) + 2);
---
>    (ta_ArticlesNumberOffset(obj) + ta_ArticlesChangingGenderOffset(obj) + 2);
1105c1135
<    (ta_ArticlesNumberOffset(obj) + ta_ArticlesGenderOffset(obj) + 3);
---
>    (ta_ArticlesNumberOffset(obj) + ta_ArticlesChangingGenderOffset(obj) + 3);

