Inform keeps track of whether or not the I6 global indef_mode is true or false. (“indef_mode” for “indefinite mode”, obviously). But that, I think, depends on how the player phrases his/her input rather than on the objects themselves.
indef_mode is indeed what you want, but it only means ``which article should be printed’’ for a fleeting moment—it’s reset before the printing a name activity begins. The simplest solution I see is to track whether an indefinite article has been printed for the most recent object (assuming that you never print an article without the noun following):
The indefinite article flag is a truth state that varies. The indefinite article flag is false.
After printing the name of something:
now the indefinite article flag is false.
To say note an indefinite article:
now the indefinite article flag is true.
To decide whether the item described is definite:
decide on whether or not the indefinite article flag is false.
Bus Stop is a room.
There is a man called a senior citizen in the Bus Stop.
The indefinite article of a senior citizen is "[note an indefinite article]a".
For printing the name of a senior citizen when the item described is definite:
say "old codger".
Test me with "take him".