! -------------------------------------------------------------- ! Dunno - A Libary Extension by Neil Cerutti (cerutti@together.net) ! Version 1.0 - 25 Jun 1999 ! Initial release ! Version 1.1 - 2 Apr 2001 ! Modified by Andrew Plotkin for Glulx compatibility. ! ! If, for some reason, you always wanted the Infocom-style error ! messages that say: ! ! I don't know the word "kludge". ! ! here's one way to do it. ! ! To use this file, put the command ! ! Include "dunno.h"; ! ! somewhere in your program's source code. ! ! The DontKnowError() routine must be called from within your ! program in one of the following two ways: ! ! 1. in the ParserError entry point [Inform Designer's Manual, ! Graham Nelson, Section 29]. For example: ! ! [ ParserError pe; ! if (pe == CANTSEE_PE) return DontKnowError(); ! rfalse; ! ]; ! ! or ! ! 2. in the LibraryMessages object [Nelson, Section 21]. For example: ! ! Object LibraryMessages with before [; ! Miscellany: if (lm_n == 30) return DontKnowError(); ! ]; ! ! If you need help getting this to work, or just have comments or ! suggestions, write me at cerutti@together.net. ! --------------------------------------------------------------- ! Check for an unknown word in the input starting at word 2. If one ! is found, print "I don't know the word ~xxx~." and return true. ! Otherwise, return false. [ DontKnowError wordnum; wordnum=FindUnknownWordToken(2); if (wordnum ~= 0) { print "I don't know the word ~"; PrintToken(wordnum); "~."; } else rfalse; ]; ! Find the word number of the word in the input that is an ! unknown word, starting at wordnum, and return it. If no unknown ! word is found, return false. ! ! An unknown word is defined: An item that is not in the ! dictionary and not a number. [ FindUnknownWordToken wordnum w twn numwds; #ifdef TARGET_GLULX; numwds = parse-->0; #ifnot; numwds = parse->1; #endif; ! TARGET_GLULX; ! Throw out invalid word numbers if (wordnum <= 0 || wordnum > numwds) rfalse; twn=wn; ! save the value of wn so it can be restored wn=wordnum; while (1) { w=NextWordStopped(); if (w == -1) { wn=twn; rfalse; } if (w == 0 && TryNumber(wn-1) == -1000) { wordnum=wn-1; wn=twn; return wordnum; } } ]; ! Print the exact text in the input at wordnum. [ PrintToken wordnum k l m numwds; #ifdef TARGET_GLULX; numwds = parse-->0; #ifnot; numwds = parse->1; #endif; ! TARGET_GLULX; if (wordnum <= 0 || wordnum > numwds) return; k=WordAddress(wordnum); l=WordLength(wordnum); for (m=0: m < l: m++) print (char) k->m; ]; ! ---------------------------------------------------------------