next up previous contents
Next: 5.4.2 Benutzerschnittstelle Up: 5.4 Konzept der Interpreternutzung Previous: 5.4 Konzept der Interpreternutzung

5.4.1 Programmierung der Datenschnittstelle

Die ,,öffentlichen`` Funktionen und Typen der CLS-Bibliothek stehen im VLISP-Interpreter zur Verfügung. Allerdings differenziert VLISP nicht zwischen den verschiedenen Klassen der CLS-Objekte, sondern faßt alle im Typ clsStruct zusammen. Eine Unterscheidung der Typen ist jederzeit durch Abfrage des tags möglich.

Um zwischen den voneinander völlig unabhängigen Listenimplementierungen in CLS und VLISP wechseln zu können, existieren die Funktionen cls::lisp-list-to-cls-list und cls::cls-list-to-lisp-list.

Die Funktionen des CLS sind nicht optimal für den direkten Einsatz in einer komfortablen Programmiersprache geeignet. Dies liegt zum einen daran, daß sie auf spezielle Funktionalität hin ausgelegt sind, um effiziente Anwendungen zu ermöglichen; daher gibt es viele spezifische Funktionen mit langen (kanonischen) Namen. Hingegen geht die Programmier-Philosophie in LISP auf weniger, dafür leistungsfähigere Funktionen hinaus. Diese haben strukturell und typmäßig variable Parameter und Schlüsselwörter zur Kontrolle über verschiedene Zusatzeigenschaften und für Feinabstimmung der Operationen.

Daher wurde eine Reihe von derartigen Funktionen entwickelt, die ein komfortables Programmieren des PED ermöglichen. Sie prüfen ihre Argumente auf Plausibilität und Widerspruchsfreiheit, lösen die entsprechenden Teilfunktionen aus, und veranlassen eventuell eine Aktualisierung der Zeichenfläche. Darüber hinaus verbergen sie die Existenz von manchen CLS-eigenen Datentypen wie clsList und clsDatatype, für die es Äquivalente in VLISP gibt, vor dem Programmierer.

Als Beispiel seien die Argumente der Funktion attribute erläutert. Sie dient dem Schreiben von Attributwerten, wobei gegebenenfalls das Attribut und weitere Teile neu geschaffen werden. Insbesondere wird der im Wafer-State sehr häufige Fall von ,,Description``-Attributen strukturell unterstützt, ohne dabei die mögliche Syntax und Semantik einzuschränken.

(defun attribute
  (&rest data   ; The data to write to the attribute. This parameter(s) may be
                ;    missing if just a new attribute is created. The data may
                ;    be an arbitrary number of elements of type STRING, REAL, or
                ;    INTEGER.
   &key
   datatyp      ; (symbol [fixnum,flonum,string,boolean])
                ;    datatype of attribute -
                ;    usually the datatype is determined from the data
                ;    argument(s) automatically, but this key overrides that
                ;    information. It is useful when no data argument(s) is
                ;    given or if data's type might be misleading (integer/real)!
   dimensions   ; (integer) dimension of data
   unit         ; (string) unit for attribute data
   (offset 0)   ; (integer) skip so many items when writing data
   attr         ; (clsAttribute) this key supports the simplest form of this
                ;    function where just the data of an attribute is written.
   attrtyp      ; (string) only used if attr is not given. Select an existing
                ;    attribute of this type or create a new one for writing the
                ;    data.
   name         ; (string) name for the new attribute construct (default:
                ;    "attribute_<numa>"). This parameter is never used for
                ;    seeking purposes!
   ref          ; (clsStruct | list of clsStruct)
                ;    object(s) referenced by attribute
   new          ; (boolean) Create a new attribute at this level even if there's
                ;    already one  with the same attribute-type existing
   (parent (ped::kernel-get-logical kernel))
                ; (clsStruct) parent where attribute (ev. description
                ;     attribute) be nested (default: actual logical PIF)
   description  ; (clsAttribute) existing description attribute where new
                ;    attribute be nested
   descriptyp   ; (string) attribute type of description attribute where
                ;    attribute be nested
                ;    (default: segment- or boundary-description
                ;     for appropriate dref, otherwise NIL)
   dname        ; (string) name for the new description attribute (default:
                ;    "attribute_<numd> with $numa = numd+1$). This parameter is
                ;    never used for seeking purposes!
   dref         ; (clsStruct | list of clsStruct) object(s) referenced by 
                ;    description attribute.
                ;    This parameter is used to find an existing description!
                ; attribute is dnew is NIL.
   dnew         ; (boolean) Create a new description attribute even if there
                ;    exists one matching descriptyp and dref
   subattrtyp   ; a condition for the case of multiple description attributes:
                ;    it must have a sub-attribute of this type
   subattrval   ; a condition for the case of multiple description attributes:
                ;    it must have a sub-attribute of type subattrtyp with this
                ;    data
  )

Der Einsatzbereich derartiger Funktionen reicht vom Öffnen und Schließen der logischen Dateien über Abfragen, Modifizieren und Generieren der Daten bis zum Zeichnen.



Martin Knaipp
Wed Jun 12 15:41:33 MET DST 1996