r2960: *** empty log message ***
[umlisp.git] / classes.lisp
1 ;;;; -*- Mode: Lisp; Syntax: ANSI-Common-Lisp; Base: 10; Package: umlisp -*-
2 ;;;; *************************************************************************
3 ;;;; FILE IDENTIFICATION
4 ;;;;
5 ;;;; Name:          classes.lisp
6 ;;;; Purpose:       Class defintions for UMLisp
7 ;;;; Programmer:    Kevin M. Rosenberg
8 ;;;; Date Started:  Apr 2000
9 ;;;;
10 ;;;; $Id: classes.lisp,v 1.3 2002/10/09 23:03:41 kevin Exp $
11 ;;;;
12 ;;;; This file, part of UMLisp, is
13 ;;;;    Copyright (c) 2000-2002 by Kevin M. Rosenberg, M.D.
14 ;;;;
15 ;;;; UMLisp users are granted the rights to distribute and use this software
16 ;;;; as governed by the terms of the GNU General Public License.
17 ;;;; *************************************************************************
18
19 (in-package :umlisp)
20 (declaim (optimize (speed 3) (safety 1) (compilation-speed 0) (debug 3)))
21
22 (defclass umlsclass ()
23   ()
24   (:metaclass kmrcl:ml-class)
25   (:documentation "Parent class of all UMLS objects. It is based on the KMRCL:ML-CLASS metaclass that provides object printing functions."))
26
27
28 (defmethod print-object ((obj umlsclass) (s stream))
29   (print-unreadable-object (obj s :type t :identity t)
30     (let ((fmt (make-instance 'kmrcl::textformat)))
31       (apply #'format 
32              s (funcall (kmrcl::obj-data-fmtstr fmt) obj)
33              (multiple-value-list 
34               (funcall (funcall (kmrcl::obj-data-value-func fmt) obj) obj))))))
35
36
37 (defclass urank (umlsclass)
38   ((rank :type fixnum :initarg :rank :reader rank)
39    (sab :type string :initarg :sab :reader sab)
40    (tty :type string :initarg :tty :reader tty)
41    (supres :type string :initarg :supres :reader supres))
42   (:metaclass kmrcl:ml-class)
43   (:default-initargs :rank nil :sab nil :tty nil :supres nil)
44   (:title "Rank")
45   (:fields (rank :fixnum) (sab :string) (tty :string) (supres :string)))
46
47 (defclass udef (umlsclass)
48   ((def :type string :initarg :def :reader def)
49    (sab :type string :initarg :sab :reader sab))
50   (:metaclass kmrcl:ml-class)
51   (:default-initargs :def nil :sab nil)
52   (:title "Definition")
53   (:ref-fields (sab find-bsab-sab))
54   (:fields (sab :string) (def :cdata)))
55
56 (defclass usat (umlsclass)
57   ((sab :type string :initarg :sab :reader sab)
58    (code :type string :initarg :code :reader code)
59    (atn :type string :initarg :atn :reader atn)
60    (atv :type string :initarg :atv :reader atv))
61   (:metaclass kmrcl:ml-class)
62   (:default-initargs :sab nil :code nil :atn nil :atv nil)
63   (:title "Simple Attribute")
64   (:ref-fields (sab find-bsab-sab))
65   (:fields (sab :string) (code :string) (atn :string) (atv :cdata)))
66
67 (defclass uso (umlsclass)
68   ((sab :type string :initarg :sab :reader sab)
69    (code :type string :initarg :code :reader code)
70    (tty :type string :initarg :tty :reader tty)
71    (srl :type fixnum :initarg :srl :reader srl))
72   (:metaclass kmrcl:ml-class)
73   (:default-initargs :sab nil :code nil :tty nil :srl nil)
74   (:title "Source")
75   (:ref-fields (sab find-bsab-sab) (tty find-btty-tty))
76   (:fields (sab :string) (code :string) (tty :string) (srl :fixnum)))
77
78 (defclass ucxt (umlsclass)
79   ((sab :type string :initarg :sab :reader sab)
80    (code :type string :initarg :code :reader code)
81    (rnk :type fixnum :initarg :rnk :reader rnk)
82    (cxn :type fixnum :initarg :cxn :reader cxn)
83    (cxl :type string :initarg :cxl :reader cxl)
84    (cxs :type string :initarg :cxs :reader cxs)
85    (cui2 :type fixnum :initarg :cui2 :reader cui2)
86    (hcd :type string :initarg :hcd :reader hcd)
87    (rela :type string :initarg :rela :reader rela)
88    (xc :type string  :initarg :xc :reader xc))
89   (:metaclass kmrcl:ml-class)
90   (:default-initargs :sab nil :code nil :rnk nil :cxn nil :cxl nil :cxs nil
91                      :cui2 nil :hcd nil :rela nil :xc nil)
92   (:title "Context")
93   (:ref-fields (sab find-bsab-sab) (cui2 find-ucon-cui))
94   (:fields 
95    (sab :string) (code :string) (rnk :fixnum) (cxn :fixnum) (cxl :string)
96    (hcd :string) (rela :string) (xc :string) (cui2 :string fmt-cui) 
97    (cxs :cdata)))
98
99 (defclass ustr (umlsclass)
100   ((sui :type fixnum :initarg :sui :reader sui)
101    (cui :type fixnum :initarg :cui :reader cui)
102    (lui :type fixnum :initarg :lui :reader lui)
103    (cuisui :type integer :initarg :cuisui :reader cuisui )
104    (str :type string :initarg :str :reader str)
105    (lrl :type fixnum :initarg :lrl :reader lrl)
106    (stt :type string :initarg :stt :reader stt)
107    (s#sat :reader s#sat)
108    (s#so :reader s#so)
109    (s#cxt :reader s#cxt))
110   (:metaclass kmrcl:ml-class)
111   (:default-initargs 
112    :sui nil :cui nil :lui nil :cuisui nil :str nil :lrl nil :stt nil)
113   (:title "String")
114   (:subobjects-lists (s#sat usat) (s#so uso) (s#cxt ucxt))
115   (:fields (sui :string fmt-sui) (stt :string) (lrl :fixnum) (str :cdata))
116   (:ref-fields (sui find-ustr-sui)))
117
118 (defclass ulo (umlsclass)
119   ((isn :type string :initarg :isn :reader isn)
120    (fr :type fixnum :initarg :fr :reader fr)
121    (un :type string :initarg :un :reader un)
122    (sui :type fixnum :initarg :sui :reader sui)
123    (sna :type string :initarg :sna :reader sna)
124    (soui :type string :initarg :soui :reader soui))
125   (:metaclass kmrcl:ml-class)
126   (:default-initargs :isn nil :fr nil :un nil :sui nil :sna nil :soui nil)
127   (:title "Locator")
128   (:fields (isn :string) (fr :fixnum) (un :string) (sna :string)
129            (soui :string) (sui :string fmt-sui) (suistr :string)))
130
131 (defclass uterm (umlsclass)
132   ((lui :type fixnum :initarg :lui :reader lui)
133    (cui :type fixnum :initarg :cui :reader cui)
134    (lat :type string :initarg :lat :reader lat)
135    (ts :type string  :initarg :ts :reader ts)
136    (lrl :type fixnum :initarg :lrl :reader lrl)
137    (s#str :reader s#str)
138    (s#sat :reader s#sat))
139   (:metaclass kmrcl:ml-class)
140   (:default-initargs :lui nil :cui nil :lat nil :ts nil :lrl nil)
141   (:title "Term")
142   (:subobjects-lists (s#sat usat) (s#str ustr))
143   (:fields (lui :string fmt-lui) (lat :string) (ts :string) (lrl :fixnum))
144   (:ref-fields (lui find-uterm-lui)))
145
146 (defclass usty (umlsclass)
147   ((tui :type fixnum :initarg :tui :reader tui)
148    (sty :type string :initarg :sty :reader sty))
149   (:metaclass kmrcl:ml-class)
150   (:default-initargs :tui nil :sty nil)
151   (:title "Semantic Type")
152   (:ref-fields (tui find-ucon-tui (("subobjects" "no"))))
153   (:fields (tui :string fmt-tui) (sty :string)))
154
155 (defclass urel (umlsclass)
156   ((rel :type string :initarg :rel :reader rel)
157    (cui1 :type fixnum :initarg :cui1 :reader cui1)
158    (cui2 :type fixnum :initarg :cui2 :reader cui2)
159    (pfstr2 :type string :initarg :pfstr2 :reader pfstr2)
160    (rela :type string :initarg :rela :reader rela)
161    (sab :type string :initarg :sab :reader sab)
162    (sl :type string  :initarg :sl :reader sl)
163    (mg :type string  :initarg :mg :reader mg))
164   (:metaclass kmrcl:ml-class)
165   (:default-initargs 
166    :rel nil :cui1 nil :cui2 nil :pfstr2 nil :rela nil :sab nil :sl nil :mg nil)
167   (:title "Relationship")
168   (:ref-fields (rel find-brel-rel) (sab find-bsab-sab) (cui2 find-ucon-cui))
169   (:fields (rel :string) (rela :string) (sab :string) (sl :string) 
170            (mg :string) (cui2 :string fmt-cui) (pfstr2 :cdata)))
171         
172 (defclass ucoc (umlsclass)
173   ((cui1 :type fixnum :initarg :cui1 :reader cui1)
174    (cui2 :type fixnum :initarg :cui2 :reader cui2)
175    (pfstr2 :type string :initarg :pfstr2 :reader pfstr2)
176    (soc :type string :initarg :soc :reader soc)
177    (cot :type string :initarg :cot :reader cot)
178    (cof :type fixnum :initarg :cof :reader cof)
179    (coa :type string :initarg :coa :reader coa))
180   (:metaclass kmrcl:ml-class)
181   (:default-initargs 
182    :cui1 nil :cui2 nil :pfstr2 nil :soc nil :cot nil :cof nil :coa nil)
183   (:title "Co-occuring Concept")
184   (:ref-fields (cui2 find-ucon-cui))
185   (:fields (soc :string) (cot :string) (cof :fixnum) (coa :cdata)
186            (cui2 :string fmt-cui) (pfstr2 :cdata)))
187
188         
189 (defclass uatx (umlsclass)
190   ((sab :type string :initarg :sab :reader sab)
191    (rel :type string :initarg :rel :reader rel)
192    (atx :type string :initarg :atx :reader atx))
193   (:metaclass kmrcl:ml-class)
194   (:default-initargs :sab nil :rel nil :atx nil)
195   (:title "Associated Expression")
196   (:fields (sab :string) (rel :string) (atx :cdata)))
197
198 (defclass ucon (umlsclass)
199   ((cui :type fixnum :initarg :cui :reader cui )
200    (pfstr :initarg :pfstr :reader pfstr)
201    (lrl :initarg :lrl :reader lrl)
202    (s#term :reader s#term)
203    (s#def :reader s#def)
204    (s#lo :reader s#lo)
205    (s#rel :reader s#rel)
206    (s#coc :reader s#coc)
207    (s#sat :reader s#sat)
208    (s#atx :reader s#atx)
209    (s#sty :reader s#sty))
210   (:metaclass kmrcl:ml-class)
211   (:default-initargs :cui nil :pfstr nil :lrl nil)
212   (:title "Concept")
213   (:subobjects-lists 
214    (s#def udef) (s#sty usty) (s#lo ulo) (s#atx uatx) (s#sat usat) (s#rel urel) 
215    (s#coc ucoc) (s#term uterm))
216   (:fields (cui :string fmt-cui) (lrl :fixum) (pfstr :cdata))
217   (:ref-fields (cui find-ucon-cui)))
218
219 (defclass uxw (umlsclass)
220   ((wd :type string :initarg :wd :reader wd)
221    (cui :type fixnum :initform nil :initarg :cui :reader cui)
222    (lui :type fixnum :initform nil :initarg :lui :reader lui)
223    (sui :type fixnum :initform nil :initarg :sui :reader sui))
224   (:metaclass kmrcl:ml-class)
225   (:default-initargs :wd nil :cui nil :lui nil :sui nil)
226   (:title "XW Index")
227   (:fields (wd :string) (cui :string fmt-cui) (lui :string fmt-lui) 
228            (sui :string fmt-sui)))
229
230 (defclass uxnw (umlsclass)
231   ((lat :type string :initarg :lat :reader lat)
232    (nwd :type string :initarg :nwd :reader nwd)
233   (cuilist :type list :initarg :cuilist :reader uxnw-cuilist))
234   (:metaclass kmrcl:ml-class)
235   (:default-initargs :lat nil :nwd nil :cuilist nil)
236   (:title "XNW Index")
237   (:fields (lat :string) (nwd :string) (cuilist :string)))
238
239 (defclass uxns (umlsclass)
240   ((lat :type string :initarg :lat :reader lat)
241    (nstr :type string :initarg :nstr :reader nstr)
242    (cuilist :type list :initarg :cuilist :reader cuilist))
243   (:metaclass kmrcl:ml-class)
244   (:default-initargs :lat nil :nstr nil :cuilist nil)
245   (:title "XNS Index")
246   (:fields (lat :string) (nstr :string) (cuilist :string)))
247
248
249 ;;; LEX objects
250
251 (defclass lexterm (umlsclass)
252   ((eui :type fixnum :initarg :eui :reader eui)
253    (wrd :type string :initarg :wrd :reader wrd)
254    (s#abr :reader s#abr)
255    (s#agr :reader s#agr)
256    (s#cmp :reader s#cmp)
257    (s#mod :reader s#mod)
258    (s#nom :reader s#nom)
259    (s#prn :reader s#prn)
260    (s#prp :reader s#prp)
261    (s#spl :reader s#spl)
262    (s#trm :reader s#trm)
263    (s#typ :reader s#typ))
264   (:metaclass kmrcl:ml-class)
265   (:default-initargs :eui nil :wrd nil)
266   (:title "Lexical Term")
267   (:subobjects-lists 
268    (s#abr labr) (s#agr lagr) (s#cmp lcmp) (s#mod lmod) (s#nom unom) 
269    (s#prn lprn) (s#prp lprp) (s#spl lspl) (s#trm ltrm) (s#typ ltyp))
270   (:fields (eui :string fmt-eui) (wrd :string))
271   (:ref-fields (eui find-lexterm-eui)))
272
273
274 (defclass labr  (umlsclass)
275   ((eui :type integer :initarg :eui :reader eui)
276    (bas :type string :initarg :bas :reader bas)
277    (abr :type string :initarg :abr :reader abr)
278    (eui2 :type integer :initarg :eui2 :reader eui2)
279    (bas2 :type string :initarg :bas2 :reader bas2))
280   (:metaclass kmrcl:ml-class)
281   (:default-initargs :eui nil :bas nil :abr nil :eui2 nil :bas2 nil)
282   (:title "Abbreviations and Acronyms")
283   (:fields (eui :string fmt-eui) (bas :string) (abr :string) 
284            (eui2 :string fmt-eui) (bas2 :string )))
285
286 (defclass lagr  (umlsclass)
287   ((eui :type integer :initarg :eui :reader eui)
288    (str :type string :initarg :str :reader str)
289    (sca :type string :initarg :sca :reader sca)
290    (agr :type string :initarg :agr :reader agr)
291    (cit :type string :initarg :cit :reader cit)
292    (bas :type string :initarg :bas :reader bas))
293   (:metaclass kmrcl:ml-class)
294   (:default-initargs :eui nil :str nil :sca nil :agr nil :cit nil :bas nil)
295   (:title "Agreement and Inflection")
296   (:fields (eui :string fmt-eui) (str :string) (sca :string) (agr :string)
297            (cit :string) (bas :string)))
298
299 (defclass lcmp  (umlsclass)
300   ((eui :type integer :initarg :eui :reader eui)
301    (bas :type string :initarg :bas :reader bas)
302    (sca :type string :initarg :sca :reader sca)
303    (com :type string :initarg :com :reader com))
304   (:metaclass kmrcl:ml-class)
305   (:default-initargs :eui nil :bas nil :sca nil :com nil)
306   (:title "Complementation")
307   (:fields (eui :string fmt-eui) (bas :string) (sca :string) (com :string)))
308
309 (defclass lmod  (umlsclass)
310   ((eui :type integer :initarg :eui :reader eui)
311    (bas :type string :initarg :bas :reader bas)
312    (sca :type string :initarg :sca :reader sca)
313    (psnmod :type string :initarg :psnmod :reader psnmod)
314    (fea :type string :initarg :fea :reader fea))
315   (:metaclass kmrcl:ml-class)
316   (:default-initargs :eui nil :bas nil :sca nil :psnmod nil :fea nil)
317   (:title "Modifiers")
318   (:fields (eui :string fmt-eui) (bas :string) (sca :string) (psnmod :string) 
319            (fea :string)))
320
321 (defclass lnom  (umlsclass)
322   ((eui :type integer :initarg :eui :reader eui)
323    (bas :type string :initarg :bas :reader bas)
324    (sca :type string :initarg :sca :reader sca)
325    (eui2 :type integer :initarg :eui2 :reader eui2)
326    (bas2 :type string :initarg :bas2 :reader bas2)
327    (sca2 :type string :initarg :sca2 :reader sca2))
328   (:metaclass kmrcl:ml-class)
329   (:default-initargs :eui nil :bas nil :sca nil :eui2 nil :bas2 nil :sca2 nil)
330   (:title "Nominalizations")
331   (:fields (eui :string fmt-eui) (bas :string) (sca :string) 
332            (eui2 :string fmt-eui) (bas2 :string) (sca2 :string)))
333
334 (defclass lprn  (umlsclass)
335   ((eui :type integer :initarg :eui :reader eui)
336    (bas :type string :initarg :bas :reader bas)
337    (num :type string :initarg :num :reader num)
338    (gnd :type string :initarg :gnd :reader gnd)
339    (cas :type string :initarg :cas :reader cas)
340    (pos :type string :initarg :pos :reader pos)
341    (qnt :type string :initarg :qnt :reader qnt)
342    (fea :type string :initarg :fea :reader fea))
343   (:metaclass kmrcl:ml-class)
344   (:default-initargs :eui nil :bas nil :num nil :gnd nil :cas nil
345                      :pos nil :qnt nil :fea nil)
346   (:title "Pronouns")
347   (:fields (eui :string fmt-eui) (bas :string) (num :string) (gnd :string)
348            (cas :string) (pos :string) (qnt :string) (fea :string)))
349
350 (defclass lprp  (umlsclass)
351   ((eui :type integer :initarg :eui :reader eui)
352    (bas :type string :initarg :bas :reader bas)
353    (str :type string :initarg :str :reader str)
354    (sca :type string :initarg :sca :reader sca)
355    (fea :type string :initarg :fea :reader fea))
356   (:metaclass kmrcl:ml-class)
357   (:default-initargs :eui nil :bas nil :str nil :sca nil :fea nil)
358   (:title "Properties")
359   (:fields (eui :string fmt-eui) (bas :string) (str :string) (sca :string) 
360            (fea :string)))
361
362
363 (defclass lspl  (umlsclass)
364   ((eui :type integer :initarg :eui :reader eui)
365    (spv :type string :initarg :spv :reader spv)
366    (bas :type string :initarg :bas :reader bas))
367   (:metaclass kmrcl:ml-class)
368   (:default-initargs :eui nil :spv nil :bas nil)
369   (:title "Spelling Variants")
370   (:fields (eui :string fmt-eui) (spv :string) (bas :string)))
371
372
373
374 (defclass ltrm  (umlsclass)
375   ((eui :type integer :initarg :eui :reader eui)
376    (bas :type string :initarg :bas :reader bas)
377    (gen :type string :initarg :gen :reader gen))
378   (:metaclass kmrcl:ml-class)
379   (:default-initargs :eui nil :bas nil :gen nil)
380   (:title "Trade Marks")
381   (:fields (eui :string fmt-eui) (bas :string) (gen :string)))
382
383 (defclass ltyp  (umlsclass)
384   ((eui :type integer :initarg :eui :reader eui)
385    (bas :type string :initarg :bas :reader bas)
386    (sca :type string :initarg :sca :reader sca)
387    (typ :type string :initarg :typ :reader typ))
388   (:metaclass kmrcl:ml-class)
389   (:default-initargs :eui nil :bas nil :sca nil :typ nil)
390   (:title "Inflection Type")
391   (:fields (eui :string fmt-eui) (bas :string) (sca :string) (typ :string)))
392
393 (defclass lwd (umlsclass)
394   ((wrd :type string :initarg :wrd :reader wrd)
395    (euilist :type list :initarg :euilist :reader euilist))
396   (:metaclass kmrcl:ml-class)
397   (:default-initargs :wrd nil :euilist nil)
398   (:title "Lexical Word Index")
399   (:fields (wrd :string) (euilist :string)))
400
401 ;;; Semantic NET objects
402
403 (defclass sdef (umlsclass)
404   ((rt :type string :initarg :rt :reader rt)
405    (ui :type integer :initarg :ui :reader ui)
406    (styrl :type string :initarg :styrl :reader styrl)
407    (stnrtn :type string :initarg :stnrtn :reader stnrtn)
408    (def :type string :initarg :def :reader def)
409    (ex :type string :initarg :ex :reader ex)
410    (un :type string :initarg :un :reader un)
411    (rh :type string :initarg :rh :reader rh)
412    (abr :type string :initarg :abr :reader abr)
413    (rin :type string :initarg :rin :reader rin))
414   (:metaclass kmrcl:ml-class)
415   (:default-initargs 
416    :rt nil :ui nil :styrl nil :stnrtn nil :def nil :ex nil :un nil :rh nil 
417    :abr nil :rin nil)
418   (:title "Basic information about Semantic Types and Relations")
419   (:fields 
420    (rt :string) (ui :string fmt-tui) (styrl :string) (stnrtn :string-tui) 
421    (def :string) (ex :string) (un :string) (rh :string) (abr :string) 
422    (rin :string)))
423
424 (defclass sstr (umlsclass)
425   ((styrl :type string :initarg :styrl :reader styrl)
426    (rl :type string :initarg :rl :reader rl)
427    (styrl2 :type string :initarg :styrl2 :reader styrl2)
428    (ls :type string :initarg :ls :reader ls))
429   (:metaclass kmrcl:ml-class)
430   (:default-initargs :styrl nil :rl nil :styrl2 nil :ls nil)
431   (:title "Structure of the Network")
432   (:fields (styrl :string) (rl :string) (styrl2 :string) (ls :string)))
433
434 (defclass sstre1 (umlsclass)
435   ((ui :type integer :initarg :ui :reader ui)
436    (ui2 :type integer :initarg :ui2 :reader ui2)
437    (ui3 :type integer :initarg :ui3 :reader ui3))
438   (:metaclass kmrcl:ml-class)
439   (:default-initargs :ui nil :ui2 nil :ui3 nil)
440   (:title "Fully Inherited Set of Releatons (TUI's)")
441   (:fields (ui :string fmt-tui) (ui2 :string fmt-tui) (ui3 :string fmt-tui)))
442
443 (defclass sstre2 (umlsclass)
444   ((sty :type string :initarg :ui :reader sty)
445    (rl :type string :initarg :ui2 :reader rl)
446    (sty2 :type string :initarg :ui3 :reader sty2))
447   (:metaclass kmrcl:ml-class)
448   (:default-initargs :sty nil :rl nil :sty2 nil)
449   (:title "Fully Inherited Set of Releatons (strings)")
450   (:fields (sty :string) (rl :string) (sty2 :string)))
451
452 ;;; Formatting routines
453
454 (defmethod fmt-cui ((c ucon))
455   (format nil "C~7,'0d" (cui c)))
456
457 (defmethod fmt-cui ((c fixnum))
458   (format nil "C~7,'0d" c))
459
460 (defmethod fmt-cui ((c string))
461   (if (eql (aref c 0) #\C)
462       c
463     (format nil "C~7,'0d" (parse-integer c))))
464
465 (defmethod fmt-cui ((c null))
466   (format nil "nil"))
467
468 (defmethod fmt-lui ((l uterm))
469   (format nil "L~7,'0d" (lui l)))
470
471 (defmethod fmt-lui ((l fixnum))
472   (format nil "L~7,'0d" l))
473
474 (defmethod fmt-lui ((l string))
475   (if (eql (aref l 0) #\L)
476       l
477   (format nil "L~7,'0d" (parse-integer l))))
478
479 (defmethod fmt-sui ((s ustr))
480   (format nil "S~7,'0d" (sui s)))
481
482 (defmethod fmt-sui ((s fixnum))
483   (format nil "S~7,'0d" s))
484
485 (defmethod fmt-sui ((s string))
486   (if (eql (aref s 0) #\S)
487       s
488   (format nil "S~7,'0d" (parse-integer s))))
489
490 (defmethod fmt-tui ((s fixnum))
491   (format nil "T~3,'0d" s))
492
493 (defmethod fmt-tui ((s string))
494   (if (eql (aref s 0) #\T)
495       s
496   (format nil "T~3,'0d" (parse-integer s))))
497
498 (defmethod fmt-eui ((e fixnum))
499   (format nil "E~7,'0d" e))
500
501 (defmethod fmt-eui ((e string))
502   (if (eql (aref e 0) #\E)
503       e
504     (format nil "E~7,'0d" (parse-integer e))))
505
506 (defmethod fmt-eui ((e null))
507   (format nil "nil"))
508
509 ;;; Generic display functions
510
511 (eval-when (:compile-toplevel :load-toplevel :execute)
512 (defun english-term-p (obj)
513   (and (eq (class-name (class-of obj)) 'uterm)
514        (string-equal (lat obj) "ENG"))))
515
516 (defun display-umls-obj 
517   (obj &key (os *standard-output*) (format :text) (label nil) 
518        (file-wrapper t) (english-only nil) (subobjects nil)
519        (refvars nil))
520   (display-ml-class 
521    obj :os os :format format :label label :subobjects subobjects
522    :file-wrapper file-wrapper
523    :english-only-function (if english-only #'english-term-p nil)
524    :refvars refvars))
525                      
526 (defmacro defludisp-ml-class (newfuncname lookup-func)
527   "Defines functions for looking up and displaying objects"
528   `(defun ,newfuncname 
529      (keyval &key (os *standard-output*) (format :text) (label nil)
530              (file-wrapper t) (english-only nil) (subobjects nil))
531      (let ((obj (funcall ,lookup-func keyval)))
532        (display-umls-obj obj :os os :format format :label label 
533                          :file-wrapper file-wrapper :english-only english-only
534                          :subobjects subobjects))))
535
536 (defludisp-ml-class disp-con #'find-ucon-cui)
537 (defludisp-ml-class disp-term #'find-uterm-lui)
538 (defludisp-ml-class disp-str #'find-ustr-sui)
539