string getHistory(History h) {
    HistoryType ht = h.type 
    string retString = goodStringOf ht
    return retString
} 

Module currMod = current
string an
AttrDef ad
History h
string hist = ""
string result = ""
Buffer b = create
string temp
int moved = 0
int modf = 0
int count = 0
int delk= 0
int crlk = 0
bool created = false
bool markedDel = false
bool deleted = false

for h in obj do
{ 
  hist = getHistory h
  count ++

//Check the first entry - may indicate creation or retrofitting (via an undelete of a reserved object)
  if (count == 1) {
	if (hist == "Create Object" || hist == "Copy Object") result = "Created"
	if (hist == "Undelete Object") result = "Retrofitted"  //This may not in fact be true... (i.e. an unsafe assumption) - need to revisit
	if (!null result) created = true
  }

//If not already known to be a create/retrofit, loop through all looking for mods/moves
  if (!created) {
	if ((hist == "Move Object" || hist == "Arrange Module") && moved == 0) {
		if (!null result) result = result ", "
		result = result "Moved"
		moved = 1}

	if ( hist == "Modify Object" && modf == 0 && h.attrName != "Deletion Marker") {
	  an = h.attrName
	  ad = find (currMod,an)
	  if (!ad.nobars) {
		if (!null result) result = result ", "
		result = result "Modified"
		modf = 1}
	  }
	// count up links for now (put out summary message at the end)
	if (hist == "Create out-link") crlk++
	if (hist == "Delete out-link") delk++
  }

  //Check for deletion or marked for deletion (this is checked even if object was just created)

  // a. Look for object deletion  (as it could be later undeleted we must set a flag, only set result at end)
  if ( hist == "Delete Object") deleted = true
  if ( hist == "Undelete Object") deleted = false

  // b. Look for object marked for deletion  (as it could be later unmarked we must set a flag, only set result at end)
  if (hist == "Modify Object" && h.attrName == "Deletion Marker")  {
    temp = obj."Deletion Marker"
    if (length temp > 0) {
      markedDel = true
    } else {
      markedDel = false
    }
  }

}  


//Set/complete the result field
//Created or deleted will override anything else
if (deleted) {
  result = "Deleted"
} else {
  if (markedDel) {
    result = "Marked for deletion"
  } else {
    if (created) {
	//no action needed (we have already set result field)
    } else {

// Not created or deleted - take result as-is (mods, moves etc), add summary of links (if any)
      if(crlk > 0) {
        if (!null result) result = result ", "
        result = result "Create out-links (" crlk ")"
      }
      if(delk > 0) {
        if (!null result) result = result ", "
        result = result "Delete out-links (" delk ")"
      }

    }
  }
}

b = result 
if(!null b)
{
	if(!isDeleted obj) obj.attrDXLName = richText tempStringOf b
	delete b
}