(FILECREATED " 1-Nov-86 23:09:24" {QV}<NOTECARDS>1.3K>NEXT>RHTPATCH132.;1 4358
changes to: (MACROS NC.GetCardTypeField)
(VARS RHTPATCH132COMS))
(* Copyright (c) 1986 by Xerox Corporation. All rights reserved.)
(PRETTYCOMPRINT RHTPATCH132COMS)
(RPAQQ RHTPATCH132COMS ((* * Fixes bug #254: break when fetching card type fields of the NoteCard
card type.)
(* * Change to NCTYPESMECH)
(MACROS NC.GetCardTypeField)
(* * Note that somehow the functions that call this macro should be
recompiled. These include for example, NCP.CardTypeFn and
NCP.CardTypeVar.)))
(* * Fixes bug #254: break when fetching card type fields of the NoteCard card type.)
(* * Change to NCTYPESMECH)
(DECLARE: EVAL@COMPILE
(DEFMACRO NC.GetCardTypeField (FieldName CardTypeNameForm)
(* * Fetch the card type datatype field passed directly for FieldName
(for the card type whose name is in a variable passed as the second parameter))
(* * rht 4/11/86: Was trying to autoload if field of card type was nil. Now only tries to
autoload if CardTypeRecord is nil or if StubFlg is non-nil.)
(* * fgh 4/25/86 Fix to above fix. Checks for CardTypeRecord before doing fetch's in 2
cluase of COND.)
(* * kirk&fgh 26Jun86 Added check for InheritedFlg to above fix. Changed to a DEFMACRO)
(* * fgh 8/26/86 Revamped completely to clean up and to account for case where one of
supertypes is a stub and must be autoloaded. Added ability to handle \\EMPTY// fields.)
(* * kirk 8/26/86 Added check for FMEMB of FieldName in (RECORDFIELDNAMES (QUOTE
NoteCardTYpe))
before evaling fetch)
(* * rht 11/1/86: Added check for NIL CardTypeName. Also checks whether card is top level
NoteCard type before fetching from super type.)
(BQUOTE (LET ((CardTypeName , CardTypeNameForm)
CardTypeRecord)
(COND ((NULL CardTypeName)
NIL)
((AND (SETQ CardTypeRecord (NC.CardTypeRecord CardTypeName))
(NEQ (fetch (NoteCardType , FieldName)
of CardTypeRecord)
(QUOTE \\EMPTY//)))
(* * card type record exists and specified field has a value -- return
it.)
(fetch (NoteCardType , FieldName)
of CardTypeRecord))
((OR (NULL CardTypeRecord)
(fetch (NoteCardType StubFlg)
of CardTypeRecord))
(* * either the card type record doesn't exist or its just a stub --
either way it needs to be autoloaded.)
(if (NC.AutoLoadCardType CardTypeName (QUOTE , FieldName)
(AND CardTypeRecord (fetch (NoteCardType
FullDefinitionFile)
of CardTypeRecord)))
then
(fetch (NoteCardType , FieldName)
of
(NC.CardTypeRecord CardTypeName))
else
(NC.ReportError NIL (CONCAT "Unknown note card type: "
CardTypeName
" or card type field name: "
(QUOTE , FieldName)))))
(, (AND (FMEMB (PACK* FieldName (QUOTE InheritedFlg))
(RECORDFIELDNAMES (QUOTE NoteCardType)))
(LIST (QUOTE fetch)
(LIST (QUOTE NoteCardType)
(PACK* FieldName (QUOTE InheritedFlg)))
(QUOTE of)
(QUOTE CardTypeRecord)))
(* * card type record exists and is not a stub, but specified field
is \\EMPTY//. And this field can be inherited. Must be that
someone on the supertypes chain is a stub. Rectify the situation
by fetching the field from the supertype, if any. Unfortunately
direct recursion is not possible because this is a DEFMACRO.)
(if (EQ CardTypeName (QUOTE NoteCard))
then
(QUOTE \\EMPTY//)
else
(NC.GetCardTypeFieldOfSuper CardTypeName (QUOTE , FieldName))))
(T (* * card type record exists and is not a stub, but specified field
is \\EMPTY//. And this field can NOT be inherited. Thus, this
record is underspecified. Signal the error.)
(NC.ReportError NIL (CONCAT
"Non-inheritable field not specified for card type "
CardTypeName)))))))
)
(* * Note that somehow the functions that call this macro should be recompiled. These include
for example, NCP.CardTypeFn and NCP.CardTypeVar.)
(PUTPROPS RHTPATCH132 COPYRIGHT ("Xerox Corporation" 1986))
(DECLARE: DONTCOPY
(FILEMAP (NIL)))
STOP