############################################################################
#
#	File:     typecode.icn
#
#	Subject:  Procedures to produce letter code for Icon type
#
#	Author:   Ralph E. Griswold
#
#	Date:     April 6, 1993
#
############################################################################
#
#   This file is in the public domain.
#
############################################################################
#
#  typecode(x) produces a one-letter string identifying the type of
#  its argument. In most cases, the code is the first (lowercase)
#  letter of the type, as "i" for the integer type. Structure types
#  are in uppercase, as "L" for the list type. All records have the
#  code "R".  The code "C" is used for the co-expression type to avoid
#  conflict for the "c" for the cset type. In the case of graphics, "w"
#  is produced for windows.
#
############################################################################

procedure typecode(x)
   local code
				# be careful of records and their constructors
   image(x) ? {
      if ="record constructor " then return "p"
      if ="record" then return "R"
      }

   code := type(x)

   if code == ("list" | "set" | "table" | "co-expression") then
      code := map(code,&lcase,&ucase)

   return code[1]
end
