value__ntId__ntName  __ntTemplatesymbolname descriptionicon superSymbol StringExtract TextScriptversionheight FillNewEntry MakeNewEntry  __ntDatatype __ntFlagsÿ  PROT@    EVALkDataSymbol    EVALN"Formula" // Shows up in "New" button.    EVALÎ"Formula, © 1997 Sine of the Times" // shows up in "info" slip when you tap in the newtEntryHeader bar€    PICT __ntResId__ntExternFile__ntCreateMask __ntPictNamevdescÿ ÿfsSpecRavenna¯öšÚBD…\resources.rsrc…f«©— rsrcRSED Common Files…\…S å GKRavenna:Sine of the Times:Projects:Formula 0.5a:Common Files:resources.rsrcÿÿoverviewclassimagesmask maskstrategypictureresourcefilespecÿ ÿ 'Ravenna¯öšÚBD…\resources.rsrc…f«©— rsrcRSED Common Files…\…S å GKRavenna:Sine of the Times:Projects:Formula 0.5a:Common Files:resources.rsrcÿÿ    kSuperSymbol EVAL   ê// Called by overview to get a text description of the data. func(item, numLines) begin return item.title; end  SCPT   ÿZ// used by text transports (for example, email) to get a text version of the entire entry // differs from StringExtract in that this returns the whole thing as text. func(item, target) begin item.text:=""; foreach element in target.data do item.text:=item.text && element; item.text; end SCPT    NUMB   ÿÀ NUMB   ÿâ// takes a new entry "shell" and fills it with class-specific data // We recommend that the data-def specific data be kept in a sub-frame in the // entry. (This provides a nice abstraction layer which may come in handy when // using the dataDef with other applications, or updating generic data.) func(theNewEntry) begin theNewEntry.data := Clone([]); theNewEntry.class := theNewEntry.viewStationery := kDataSymbol; theNewEntry.title := "Formula:" && shortdate(time()); theNewEntry; end  SCPT   ÿ2// If the newtApp opening this has no CreateBlankEntry method for the newtSoup, // then this method will be called. So create a "minimal" soup entry for the // otherwise-generic application. (Just use FillNewEntry on an empty frame...) func() begin :FillNewEntry({}); // end; // to the first time reader: // * MakeNewEntry is sent as a message to the datadef, so :FillNewEntry calls // the right function. // * We pass the empty frame because FillNewEntry needs a frame to fill, and the // dataDef can provide no other information. // * FillNewEntry evaluates to the newly filled entry, which will be the return value // from this method. EVALnewtStationerydataDef