I think I figured out a pretty decent way to know when you’ve reached the end of a GROUP/QUEUE when processing for WHO/WHAT.
If you use WHO(), you can’t rely on a label existing.
If you test for MyANY &= NULL, you don’t know if you’re just getting a NULL because of a NULL reference.
Using the TYPE() method of the TUFO interface, however, you can tell if there’s a field there.
PROGRAM
Include('TUFO.inc')
MAX_LOOP EQUATE(250) !Just a randomly big number
MyGroup GROUP
BYTE
BYTE
B &BYTE
STRING(20)
END
DataType LONG
MAP
GetAnyDataType(*? pWhat),LONG
ENUMGroup(*GROUP pGROUP)
END
CODE
ENUMGroup(MyGroup)
ENUMGroup PROCEDURE(*GROUP pGROUP)
Ndx LONG
CODE
LOOP Ndx = 1 TO MAX_LOOP
DataType = GetAnyDataType(WHAT(MyGroup,Ndx))
If NOT DataType
Message(Ndx - 1 & ' fields')
BREAK
END
END
GetAnyDataType PROCEDURE(*? pWhat)!,LONG
UFO &iUfo
CODE
UFO &= ADDRESS(pWhat)
IF UFO &= NULL
RETURN 0
END
Return UFO._Type(Address(pWhat))
Here’s TUFO TUFO.inc (3.5 KB)