r3016: *** 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.4 2002/10/14 09:25:20 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
540 #+(or cmu sbcl)
541 (dolist (c '(urank udef usat uso ucxt ustr ulo uterm usty urel ucoc uatx ucon uxw uxnw uxns lexterm labr lagr lcmp lmod lnom lprn lprp lspl ltrm ltyp lwd sdef sstr sstre1 sstre2 ))
542   (let ((cl #+cmu (pcl:find-class c)
543             #+sbcl (sb-pcl:find-class c)))
544     #+cmu (pcl:finalize-inheritance cl)
545     #+sbcl (sb-pcl:finalize-inheritance cl)))
546
547
548