A Fujitsu Technology Solutions DRIVE-COMP (BS2000) Version 3.1A10 readme Hinweise zur Programmierung im Objekt-Betrieb Ergaenzungen zum Manual A Inhaltsverzeichnis ------------------ 1 Allgemeines ............................................ Seite 1 2 Deklaration von Variablen .............................. Seite 2 2.1 Alphanumerische Datentypen ............................. Seite 2 2.2 Numerische Datentypen .................................. Seite 2 2.3 REDEFINES .............................................. Seite 3 2.4 PERMANENT und TEMPORARY ................................ Seite 3 3 Ergaenzungen zum Manual ................................ Seite 4 1 Allgemeines Im Abschnitt 2 werden Hinweise zur Deklaration von Variablen gegeben. Diese Hinweise bewirken eine Verringerung des generierten Objekt-Codes und des erforderlichen Arbeitsspeichers fuer Hilfsvariable. Sie verbessern die Performance durch eine Herabsetzung der Anzahl von Aufrufen an das Laufzeitsystem. Sie erleichtern eine evtl. Umstellung auf das Betriebssystem SINIX . Sie lassen sich mit vertretbarem Aufwand auch in bestehenden DRIVE-Programmen einsetzen. In Abschnitt 3 sind Manualkorrekturen zusammengefasst, die aus produktionstechnischen Gruenden nicht mehr ins ausgelieferte Handbuch eingebracht werden konnten. Siehe auch die Beschreibung der Inkompatibilitaeten und Einschraenkungen in der Freigabemitteilung SYSFGM.DRIVE-COMP-DOC.031.D . - 1 - A 2 Deklaration von Variablen 2.1 Alphanumerische Datentypen Zu den Datentypen CHARACTER und CHARACTER VARYING sollten die deklarierten Laengen den tatsaechlichen Anforderungen entsprechen. 2.2 Numerische Datentypen Im Interpreterbetrieb hat die Deklaration des Datentyps zu einer Variablen nur Auswirkung auf die interne Ablage, dagegen nicht auf die Durchfuehrung von Rechnungen; die Grundrechenarten erfolgen intern ueber den Datentyp EXTENDED DECIMAL (s.u.). Im Objektbetrieb dagegen werden die arithmetischen Ausdruecke entsprechend den gewaehlten Datentypen verarbeitet. Mit den Datentypen REAL und DOUBLE PRECISION ist es moeglich, zwischen kaufmaennischen und wissenschaftlichen Rechnungen zu trennen. Die folgende Aufstellung ordnet den einzelnen Datentypen die empfohlenen Anwendungen zu: - SMALLINT, INTEGER: Indexrechnungen, Argumente zu CYCLE FOR bei ganzzahliger Schrittweite, POSITION- und Laengenangaben in CHARACTER-Ausdruecken, Exponent zur Potenz-Operation, Argumente zur MODULO-Funktion - DECIMAL kaufmaennische Rechnungen, wobei bei den Zwischenergebnissen entweder alle Vor- und Nachkommastellen erhalten bleiben sollen oder die Anzahl von Nachkommastellen auf einen festen Wert beschraenkt wird. Bei der Deklaration sollten Genauigkeit und Skalenfaktor nur den tatsaechlichen Anforderungen entsprechen, damit diese fuer die Zwischenergebnisse nicht uebermaessig schnell anwachsen und eine Ungenauigkeit bei der Division aufgrund eines unzureichenden Skalenfaktors fuer den Quotienten minimalisiert wird. Sollte trotzdem eine Ungenauigkeit bei einer Division auftreten, dann ist eine Zwischenzuweisung diesen Rechenausdruckes an eine Variable mit einem ausreichenden Skalenfaktor vorzunehmen. Die Zwischenergebnisse haben eine maximale Genauigkeit von 30. Es koennen daher Rechenueberlaeufe auftreten (s. EXTENDED DECIMAL). - REAL, DOUBLE PRECISION wissenschaftliche Rechnungen Bei mathematischen Funktionen oder der Potenz-Operation ** erhaelt das Zwischenergebnis den Datentyp DOUBLE PRECISION , daher sollte dann von vorneherein DOUBLE PRECISION gewaehlt werden. Um eine Konvertierung nach DOUBLE PRECISION zu vermeiden, sollte bei einer Quadrierung anstatt der Operation ** 2 die Funktion SQR verwendet werden. Das Ergebnis der Vergleichsoperation &A = &B ist undefiniert wegen der prinzipiellen Ungenauigkeit der beiden Vergleichswerte. Daher sollte die Bedingung IF &A = &B ersetzt werden durch IF ABS(&A - &B) < C , wobei C eine vorgegebene Schranke darstellt. - 2 - A - EXTENDED DECIMAL Dieser Datentyp ist ein "privater Datentyp", d.h. kein Element des Betriebssystems BS2000. Alle Rechenoperationen auf einen solchen Datentyp erfolgen ueber eigene Routinen; diese Zugriffe sind daher extrem inperformant. Dieser Datentyp sollte nur verwendet werden, wenn bei DECIMAL Ueberlaeufe auftreten. Das Zwischenergebnis zu ROUND und TRUNC erhaelt den Typ EXTENDED DECIMAL. - NUMERIC Ab dieser Version wird das intern abgespeicherte Vorzeichen normiert, so dass bei einem nicht negativen Wert auch die letzte Stelle eine abdruckbare Ziffer darstellt. Dies erfordert zusaetzliches Coding; daher sollte der Typ NUMERIC nur dann verwendet werden, wenn die Darstellung des Wertes als eine Folge abdruckbarer Ziffern wesentlich ist. Im uebrigen wird auf die Funktionen CHARACTER und NUMERIC jeweils mit Angabe einer Maske verwiesen, die eine Variable vom beliebigen numerischen Typ und ihre druckaufbereitete Darstellung ineinander ueberfuehren. Bei Rechnungen mit NUMERIC erfolgt immer zunaechst eine Konvertierung nach DECIMAL, so dass man die Ausgangsvariable direkt mit DECIMAL definieren kann (bei fehlender Scale sogar mit INTEGER). - Mischung von DECIMAL und REAL bzw. DOUBLE PRECISION Eine Mischung zwischen diesen Datentypen in einem Rechenausdruck ist zu vermeiden, da sonst die spezifischen Eigenschaften, die zur Auswahl eines dieser beiden Datentypen gefuehrt haben, wieder verlorengehen. Aus diesem Grunde ist es vorteilhaft, in Rechenausdruecken anstelle von numerischen Literalen typrichtige Variable mit diesen Literalen als INIT-Werten zu verwenden. - Hinweis fuer eine evtl. Portierung nach SINIX: Dort sind die Typen NUMERIC, DECIMAL, EXTENDED DECIMAL identisch. 2.3 REDEFINES Ab der Version V2.1 ist eine Redefinition von CHARACTER mit NUMERIC bzw. umgekehrt ohne weiteren Programmieraufwand moeglich, da bei nicht negativem Inhalt von NUMERIC auch das letzte Byte eine abdruckbare Ziffer darstellt. 2.4 PERMANENT und TEMPORARY Im Objektbetrieb unter UTM sind die permanten und temporaeren Variablen in verschiedenen Datenbereichen abgelegt, die bei Dialogschrittwechsel getrennt gesichert und rekonstruiert werden. In DRIVE-Programmen, die nicht mit CALL aufgerufen werden sollen, ist eine Unterscheidung zwischen permanenten und temporaeren Variablen nicht notwendig. Alle Variablen inklusive der Parameter koennen als permanent deklariert werden, da die Systemvariablen als permanente Variable ohnehin vorhanden sind. Dadurch entfaellt die Sicherung und Rekonstruktion des Datenbereichs fuer die temporaeren Variablen bei jedem Dialogschritt. - 3 - A 3. Ergaenzungen zum Manual - Inhalt : * Es fehlt darin 1.3 Readme-Datei * Es fehlt darin 4.5 Beispiel TIAM-Anwendung - Seite 5 Tabelle 1-1 : * Die Namen der DSSM/SCCM-Deklarationsdateien haben sich geaendert und lauten jetzt zu Newstyle: SYSSSC.DRIVE-COMP-LZS.031 zu Oldstyle: SYSSSD.DRIVE-COMP-LZS.031 - Seite 19 : * Die Liste der fuer den Compiler relevanten Optionen ist unvollstaendig, es fehlen z.B. LETTERS, DBSYSTEM, SCHEMA - Seite 27 : * In den Texten zu DRI0305, DRI0306, DRI0307 ist der Verweis auf den DVS-Returncode falsch, da kein DVS-Returncode erscheint. Zu DRI0305 sollte der Text lauten: Bedeutung Der generierte Objektcode wird zunaechst in die Hilfsdatei S.DRIVE-COMP.codemodule.hh.mm.ss mit Linknamen IDCHPLAM geschrieben, die intern angelegt und am Ende wieder geloescht wird. Beim Anlegen oder Oeffnen dieser Hilfsdatei ist ein Fehler aufgetreten. Massnahmen Hilfsdatei loeschen, dann Compilierung erneut starten zu DRI0306, DRI0307 analog - Seite 33, 37, 54 : * Folgende INCLUDE-Anweisung ist zu ergaenzen, wenn der EDT nicht shared geladen ist: // INC-MOD LIB=&EDTLIB,ELEM=IEDTGLE,TYPE=R - Seite 34 Bild 4-3 : * LMSLIB ist obligatorisch , * SYSLIB.FHS.082 (statt .080) - Seite 35, 36 : * BLSLIB-Anweisung auf LMSLIB fehlt, * SYSLIB.FHS.082 (statt .080), * nach applilib nur ',-' (statt ',,-') - Seite 36 |I| : * Dieser Satz muss lauten: Soll der Report-Generator eingesetzt werden, muss zusaetzlich der Link-Name RSOML zugewiesen werden. - Seite 39 : * BLSLIB-Anweisung auf LMSLIB fehlt, * SYSLIB.FHS.082 (statt .080), * die Klammerung im Kommando /START-PROGRAM ist falsch (s. Seite 36, dort korrekt) * es fehlt SHARE-SCOPE=NONE,- (s. Seite 36) - Seite 57 : * SYSLIB.FHS.082 (statt .080), * die Klammerung im Kommando /START-PROGRAM ist falsch (s. Seite 36, dort korrekt) * es fehlt SHARE-SCOPE=NONE,- (s. Seite 36) - 4 -