summaryrefslogtreecommitdiff
path: root/ipl/procs/typecode.icn
diff options
context:
space:
mode:
Diffstat (limited to 'ipl/procs/typecode.icn')
-rw-r--r--ipl/procs/typecode.icn41
1 files changed, 41 insertions, 0 deletions
diff --git a/ipl/procs/typecode.icn b/ipl/procs/typecode.icn
new file mode 100644
index 0000000..5ad0360
--- /dev/null
+++ b/ipl/procs/typecode.icn
@@ -0,0 +1,41 @@
+############################################################################
+#
+# 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