5. 2. Der Entwurf des Softwarekonzepts

 

Zur Grobstrukturierung der Software bietet es sich an, die Vorgaben aus der Aufgabenstellung in einzelne Programmblöcke zu zerlegen:

 

-          Das Druckströmungsdiagramm und das Verschlussdruckdiagramm sollen in dem Programmteil BODY aufgenommen werden.

-          Die Patienten- und Messdaten sollen im Programmteil DATA verwaltet werden.

-          In dem Programmteil CALIBRATE soll eine Kalibrierung der Manometer möglich sein.

Neben diesen drei Programmteilen, die aus der Aufgabenstellung abgeleitet sind, sollen weitere Programmteile bestehen:

 

-          Der Programmteil INFO soll jederzeit Bedienungshinweise und Informa­tionen zu jedem anderen Programmteil liefern können.

-          Für spirometrische Messungen ist der Programmteil SPIRO vorgesehen.

-          Im Programmteil FLOW soll die Messung des Flow-Volumen-Diagramms erfolgen.

-          Die statistische Auswertung aller aufgenommen Messwerte soll im Pro­grammteil STATISTIC durchgeführt werden.

Durch die grafische Benutzeroberfläche sollen alle 7 Programmteile im Hauptmenü des Programms durch ein eigenes Fenster mit passenden grafischen Symbolen dargestellt werden. Zusätzlich soll ein Fenster für das Programmende mit der Menübezeichnung END dargestellt werden.

 

Weiterhin soll das Programm folgende Punkte enthalten­

 

-          Alle Programmteile sollen durch das Hauptprogramm verwaltet werden.

-          Das Programm soll mausgesteuert sein.

-          Alle wichtigen Informationen sollen auf dem Bildschirm grafisch dargestellt werden. Alle Informationen sollen so weit wie möglich durch Symbole dargestellt sein. Dabei soll eine programminterne Standardisierung dieser Symbole eingeführt werden.

-          Die vorhandene EGA-Grafikkarte soll in der maximalen Auflösung von 640 * 350 Bildschirmpixeln mit 16 verschiedenen Farben benutzt werden.

-          Die Steuerung der Plethysmographenkabine soll durch digitale Signale über den I/0-Port der A/D-Karte vom Programm aus erfolgen.

-          Digitale Signale der Messkabine sollen vom Programm ausgewertet werden.

-          Die Protokollierung der Messergebnisse soll auf einem angeschlossenen Drucker erfolgen.

-          Das Programm soll aus verschieden Ebenen (Levels) bestehen. Das Haupt­menü ist die Ebene 1. Alle weiteren Ebenen sind der Ebene 1 untergeord­net und haben eine höhere Levelnummer. Dabei existieren mehrere Levels der Nummer 2 nebeneinander. Die Verschachtelung setzt sich in den weiteren Ebenen so fort. Die Ebene 1 steht in der Hierarchie an oberster Stelle.

-          Bis auf das Hauptmenü sollen alle anderen Menüs der untergeordneten Ebenen nach dem selben Prinzip grafisch aufgebaut sein:

 

Bild 31:   Grundschema eines Grafikmenüs

 

Im Werkzeugfenster wird über einen Maustastendruck auf die Buttons der Programmablauf gesteuert. Der Mauszeiger kann das Werkzeugfenster nicht verlassen.

 

Im Arbeitsfenster werden alle Ausgaben des Programms grafisch dargestellt. Hier erfolgt auch die Ein- und Ausgabe der Patientendaten. Das Arbeits­fenster kann in mehrere einzelne Fenster unterteilt sein.

 

Das Ergebnisfenster stellt alle Auswertungen des Programms numerisch dar. Es kann in einzelne Fenster unterteilt sein. Es ist nicht in allen Ebenen vorhanden. Dann vergrößert sich das Arbeitsfenster.

 

Damit das Programm einfach und komfortabel zu bedienen ist, enthält es eine mausgesteuerte Benutzeroberfläche, die auf der "Fenstertechnik" basiert.

 

Alle Eingaben, außer direkten Texteingaben für z.B. Patientennamen, werden über die Maus gesteuert. Die verwendete LOGITECH-MOLISE enthält 3 Maus­tasten.

 

Die wichtigste Maustaste ist die linke Taste. Über sie werden alle aktiven Programmpunkte gesteuert. Die rechte Maustaste hat im allgemeinen die Aufgabe, eine laufende Programmfunktion ohne Ergebnis abzubrechen oder einen Abfragepunkt des Programms mit "Nein" zu beantworten. Ein Druck auf die rechte Maustaste aktiviert niemals einen Programmpunkt.

 

Die mittlere Maustaste ist, bis auf eine Ausnahme, nicht im Programm belegt. Die Ausnahme bezieht sich auf die Shutterautomatik bei der Mess­wertaufnahme für das Verschlussdruckdiagramm. Hierbei wird durch einen Druck auf die mittlere Maustaste die Shutterautomatik betätigt. Dieses ist nötig, weil die beiden anderen Maustasten ebenfalls belegt sind.

 

Bei Fehlbedienungen des Programms soll der Benutzer über eine Alarmbox auf die richtige Programmbedienung hingewiesen werden.

 

Aufgrund aller aufgeführten Überlegungen und Vorgaben wird das Programm in 14 selbstgeschriebenen-, 5 Standard-Units und einem Hauptprogramm realisiert.

 

 

Bild 32: Die Software-Gesamtstruktur

 



5. 2. 1. Die Standard-Units SYSTEM, CRT, DOS, GRAPH und PRINTER

 

Das Unit SYSTEM ist die Laufzeitbibliothek von Turbo Pascal. Es enthält den Standard-Sprachumfang von Pascal. Diese Unit wird automatisch in jedes Programm aufgenommen und wird nicht über USES aufgerufen. /3,4/

 

Im Unit CRT sind die Routinen für direkte Zugriffe auf die Tastatur und den Bildschirm abgelegt. Hier sind die Variablen für den Textmodus und den Videomodus definiert. Weiterhin können die Farben und die Tonausgabe gesteuert werden. /3,4/

 

Das Unit DOS ist die Schnittstelle zum Betriebssystem des PCs. Es be­inhaltet die Interrupt-Prozeduren, Prozeduren für Datum und Uhrzeit, Status­funktionen für Disketten- und Festplattenlaufwerke, Prozeduren zur Bearbei­tung von Dateieinträgen und Prozeduren und Funktionen für Prozesse.  /3,4/

 

Das Unit GRAPH ist mit über 50 Routinen ein komplettes Grafikpaket. Zum Unit Graph gehören Grafiktreiber für fast alle Grafikmodi wie CGA, MCGA, Hercules, VGA und EGA. Die Prozeduren zur "Fenstertechnik" sind im Unit Graph definiert. Mit Setviewport lässt sich an beliebiger Stelle des Bildschirms ein GRAFIK-Fenster definieren. Alle weiteren Zeichenaktionen arbeiten relativ zum Ursprung dieses Fensters.  /3,4/

 

Im Unit Graph sind Konstanten definiert für:

- Grafiktreiber ( EGA, VGA, u.s.w. )

- Grafikmodus ( EGAHi, VGALo, u.s.w. )

- Farben ( Black, Blue, Green, u.s.w. )

- Linienarten ( Solidln, Dottedln, u.s.w. )

- Schriftarten ( Defaultfont, Smallfont, u.s.w. )

 

Das Unit PRINTER definiert eine Textdateivariable namens Lst und ordnet sie der Geräteeinheit LPT1 (bzw. PRN) zu. Das Unit Printer erspart dem Programmierer die Deklaration, Zuordnung und Eröffnung einer eigenen Datei zur Druckerausgabe und schließlich das Schließen dieser Datei am Ende des Programms. /3,4/

 

Ein Beispiel:

 

writeln (Ist, ' Hallo ’);              {Ausgabe auf dem Drucker)

writeln ( ' Hallo ' );                  {Ausgabe auf dem Bildschirm)

 



5. 2. 2. Das Unit VA_CO_TY

 

Durch das Unit-Konzept von Turbo Pascal ist es sinnvoll, alle globalen Variablen in einer Unit zusammenzufassen. In dem Unit VA CO TY werden die Konstanten für den Pfad zur Speicherung der Patientendaten und der Pfad für die Infotexte festgelegt.

In der Typendeklaration werden Records für die Uhrzeit, das Datum und die gesamten Patientendaten definiert. Das Record time_typ enthält 3 Variablen vom Typ WORD für die Stunden, Minuten und Sekunden. Das Record date_typ enthält ebenfalls 3 Variablen des Typs WORD für das Jahr, den Monat und den Tag. Das größte Record ist patiententyp. Es ist folgendermaßen definiert:

 

patiententyp = RECORD

satz_nr : integer;

examination_day : date_typ;

examination_time : time_typ;

name : string[20];

vorname : string[20];

geburtstag : date_typ;

strasse : string[20];

pIz : integer;

ort : string[20];

geschlecht : char;

p_v_value : measure_typ;

tgv_in_value : measure_typ;

tgv_ex_value : measure_typ;

temperature : integer;

air_pressure : integer;

humidity : integer;

END;

 

Weil in dem Programmteil BODY drei verschiedene Messungen durchgeführt werden sollen mit jeweils drei Einzelmessungen, sind in measure_typ drei Messreihen definiert. Da jeder Kurvenpunkt aus zwei Abtastwerten unter­schiedlicher Kanäle besteht, werden die Messreihen als zweidimensionale Felder angelegt.

 

Vorgegeben ist die Abtastfrequenz von 500Hz. Damit zwei Atemzüge, also zwei Kurvendurchläufe, aufgenommen werden können, ist eine Abtastzeit von 2 Sekunden vorgesehen. Das ergibt in diesen 2 Sekunden 1000 Abtast­werte. Deshalb werden die Messreihen mit [1..2, 1..1000 ] Elementen definiert.

Die A/D-Karte liefert Abtastwerte mit 12 Bit Auflösung im Bereich von -2048 bis +2047. /8/ Um einen Abtastwert zu speichern, ist eine Variable vom Typ INTEGER erforderlich.

 

Damit lässt sich der Speicherplatzbedarf für einen Patienten berechnen:

 

Mit
f
A      =   Abtastfrequenz, [ 1/s ]

       t         =   Abtastzeit, [ s ]

  Mv     =   Anzahl der verschiedenen Messungen ( P/V, TGVin, TGVex, später
auch V/t und V/V)

       MR    =   Anzahl der Messreihen ( Messung1, Messung2, Messung3)

       k        =   Konstante 2, weil ein Kurvenpunkt aus 2 Abtastwerten besteht

       St      =   Speichertyp, [ Byte ]

       PD    =   Anzahl der Bytes zur Speicherung der Patientendaten, [ Byte ]

 

folgt:

 

Speicherplatzbedarf   = fA * t * Mv * MR * k * St + PD

                                      = 5000 1/s * 2s * 3 * 3 * 2 * 2 Byte +113 Byte

                                      = 36113 Byte

 

Um 1000 Patienten abzuspeichern, müsste eine Festplatte 36113000 Byte = 35266 KByte = 34 MByte Speicherplatz zur Verfügung stellen. Da später für die SPIRO - und FLOW- Messungen (Mv=5) ebenfalls noch Messreihen aufgenommen werden sollen, erhöht sich der Gesamtbedarf auf 57 MByte.

 

Weil alle Parameter der Gleichung bis auf St vorgegeben sind bzw. nicht geändert werden sollten, ist eine Reduktion dieser Datenmenge nur über St und die Anzahl der Patienten möglich. Aufgrund der relativ niedrigen Atemfrequenz des Menschen von max ca. 0,5Hz sind die Differenzen zwischen zwei Abtastwerten sehr gering. Dadurch ist es möglich, anstelle der Abtast­werte, die Differenz zwischen zwei Abtastwerten im Datentyp SHORTINT (-128..+127) abzuspeichern. Das bewirkt eine Datenreduzierung auf die Hälfte des Ausgangswertes. Eine weitere Reduzierung ergibt sich bei einer maximalen Patientenzahl von 500. Dadurch ergeben sich folgende Werte:

mit Mv=3:

 

Speicherplatzbedarf für einen Patienten:      18113 Byte             = 17 KByte

Speicherplatzbedarf für 500 Patienten:         8844 KByte            = 8 MByte

 

mit Mv=5:

 

Speicherplatzbedarf für einen Patienten:      30113 Byte             = 29 KByte

Speicherplatzbedarf für 500 Patienten:         14703 KByte          = 14 MByte

 

Um einen Patientendatensatz an eine Prozedur einwandfrei zu übergeben, ist die Stackgrösse von 16 KByte auf 32 KByte durch eine Compileranweisung im Hauptprogramm heraufgesetzt. Bei Unterprogrammverschachtelungen ist darauf zu achten, dass nicht zweimal ein Patientensatz übergeben wird, da sonst ein Stackoverflow auftritt. Um dieses zu vermeiden sind alle Parameter der Prozeduren die auf einen Datensatz zugreifen als var definiert, z.B.:

 

procedure beispiel ( var patient : patiententyp );

 

Bei der Definition als var wird nur die Adresse ( 4 Byte ) des Records auf dem Stack übergeben. /3/

 

Aufgrund der zuvor ermittelten Werte ist das Record measure_typ folgendermaßen definiert:

 

measure_typ = RECORD

measure_start = array [ 1..3, 1..2 ] of INTEGER;

measure1,

measure2,

measure3 = array [ 1..2, 1..1000 ] of SHORTINT;

END;

 

Zur einwandfreien Rekonstruktion aller Abtastwerte werden in measure_start die Anfangsabtastwerte der jeweiligen Messreihe abgespeichert.

 

Als globale Variablen werden eine Patientenvariable und drei Messwert­reihen definiert. Zusätzlich sind noch drei boolesche Variablen definiert. Sie zeigen an, ob ein Patient schon in der Kartei eingetragen ist, ob ein Unter­programmsprung erfolgt ist und ob das Programm verlassen werden soll. Die Variable für den Unterprogrammsprung ist eingeführt, damit nicht bei jedem Durchlaufen der CASE-Abfrage des Hauptprogramms das Hauptmenü neu gezeichnet wird. Um eine größtmögliche Flexibilität bei der Unterpro­grammgestaltung zu erhalten, sind so wenig wie möglich globale Variablen definiert. Dadurch sind die einzelnen Units überschaubarer.

 



5. 2. 3. Das Unit TOOLS

 

Das Unit mit den am meisten benutzten Prozeduren und Funktionen ist das Unit TOOLS. Es enthält 18 Prozeduren und eine Funktion.

 

Um von einem Grafikbildschirm auf einen anderen Grafikbildschirm zu wechseln, ohne den Inhalt des alten Bildes zu löschen, wird die Prozedur switch_to_page_1 angewandt. Sie kopiert den Inhalt der ersten EGA-Grafik­seite auf die zweite EGA-Grafikseite. Dabei wird der RAM-Bereich der EGA­-Karte genutzt. Der Hauptspeicher braucht nicht in Anspruch genommen werden. (Theoretisch könnte auf die zweite Seite umgeschaltet werden, jedoch ist dann der Mauszeiger nicht sichtbar und kann nach einem Um­schaltvorgang auch nicht wieder sichtbar gemacht werden.) Ist das Bild auf die zweite Grafikseite kopiert, wird ganz normal die erste Seite gelöscht und das zweite Bild aufgebaut. Dann kann durch switch_to_page_0 das alte Bild auf den aktuellen Grafikschirm zurückkopiert werden. Bei diesen beiden Prozeduren ist die direkte PORT-Adressierung der EGA -Karte angewandt worden.  /9,10,11/

 

Für die Ausgabe von Text auf dem Grafikschirm stehen mehrere Prozeduren des Units GRAPH zur Verfügung, die zur Ausgabe eines Zeichens alle auf­gerufen werden müssen. /3,4/ Die Prozeduren v_text und h_text beinhalten alle diese Prozeduren und sie sind komfortabel einzusetzen. v_text gibt einen vertikalen Text und h_text gibt einen horizontalen Text aus. Diese Prozeduren werden zur Fensterbeschriftung, zur Buttonbeschriftung und zur Textausgabe eingesetzt.

 

Bei der Programmierung in Fenstertechnik ist einer der wichtigsten Befehle setviewport. Mit ihm wird ein Grafikfenster auf dem Bildschirm definiert. Alle nachfolgenden Grafikroutinen arbeiten relativ zum Ursprung (linke obere Ecke) dieses Fensters. /4/ Mit der Prozedur Drawborder ( Color ) wird um das momentan gesetzte Grafikfenster ein Rahmen mit der Farbe Color gesetzt. Dazu brauchen die Koordinaten des Fensters nicht bekannt sein. Die Prozedur Draw_button ( xl,yl,x2,y2, text, color1, color2 ) geht noch einen Schritt weiter. Sie setzt ein Grafikfenster mit einem Rahmen der Farbe color1 und gibt in der Mitte des Fensters einen text in der Farbe color2 aus. Diese Prozedur wird zur Darstellung aller Buttons verwendet. Um einen definierten Grundzustand an jeder Stelle des Programms zu erreichen, wird mit Fullport der gesamte Bildschirm als Grafikfenster gesetzt.

 

Für die Darstellung des Hauptmenüs werden die Prozeduren Kreis, Kreis­bogen, Ellipsenbogen, Linie und DreiD_balken benutzt. Der Befehl fuellen legt das Füllmuster für die zuvor genannten Prozeduren fest.

 

Die Prozedur show_text ( Dateiname, color ) lädt eine beliebige Textdatei mit dem Namen Dateiname und gibt den Inhalt mit der Farbe color auf dem Grafikbildschirm aus.

Da im Grafikmodus eine Stringeingabe über readln nicht möglich ist, über­nimmt die Prozedur string_eingabe ( x, y, string, laenge ) diese Aufgabe. x und y legen die Koordinaten für die Ausgabe auf dem Bildschirm fest. string ist der String der eingegeben wird und laenge bestimmt die Länge des Strings.

 

Die Prozedur char_eingabe arbeitet wie string_eingabe, liest aber nur ein Zeichen ein. Beide Prozeduren werden in der Dateiverwaltung bei der Eingabe der Patientendaten benutzt.

 

 

Bild 33: Die Prozedur string_eingabe

 

Schon vorbereitet ist die Funktion capital ( oldstring ) newstring, die einen String in Grossbuchstaben wandelt und dabei auch die deutschen Umlaute ä, ö und ü berücksichtigt. Die Funktion kann zur Prüfung auf Vorhandensein eines Patienten innerhalb der Patientenkartei eingesetzt werden. Sie wird aber noch nicht im Programm verwendet.

 

Die letzte Prozedur des Unit TOOLS ist die Prozedur plot_ega ( nr ), welche eine Hardcopy des EGA-Grafikbildschirms auf einem 24-Nadel-Drucker ausgibt.  /12,14/

Dabei gibt nr die Anzahl der Grauabstufungen an. plot_ega ( nr ) enthält drei untergeordnete Prozeduren, die für andere Prozeduren nicht verfügbar sind.

 

Bis auf die Units VA_CO_TY und RTI820 wird TOOLS von allen anderen Units aufgerufen.

 



5. 2. 4. Das Unit Mouse

 

Das Unit MOUSE enthält die Prozeduren und Funktionen zur Steuerung und Überwachung des Mauscursors.

 

Die Maus wird über den Softwareinterupt 33H des DOS gesteuert. Durch die Prozedur init_mouse wird die Maus initialisiert. Dazu wird geprüft, ob das Treiberprogramm GOMOUSE resident im Speicher ist. Ist das nicht der Fall, gibt das Programm eine Fehlermeldung aus und kehrt zum DOS zurück. Sollte beim Programmstart die Maus nicht angeschlossen sein, erfolgt ebenfalls ein Rücksprung zur DOS-Ebene. /15,16,18/

 

Mit m_on und m_off kann der Mauszeiger eingeschaltet und ausgeschaltet werden. Bei allen Grafikoperationen ist der Mauscursor auszuschalten, weil sonst Fehler im Grafikaufbau des Bildschirms auftreten können.

 

Die Funktionen x_position_mouse und y_position_mouse liefern die Koordinaten der Maus. Mit der Prozedur status wird der Status der Maus­tasten in der globalen Variablen button abgelegt. Die drei Maustasten sind wie 3 Bit organisiert. Die linke Maustaste entspricht dem Bit0, die rechte Taste dem Bit1 und die mittlere Taste dem Bit2. Liefert die Variable button den Wert 5, bedeutet es, dass die linke und die mittlere Maustaste gleich­zeitig gedrückt wurden.

 

Über set_xy_margin_mouse ( x1, y1, x2, y2 ) wird der Grenzbereich für den Mauszeiger festgelegt. Diesen Bereich kann der Mauscursor nicht verlassen. Mit set_mouse_xy ( x, y ) wird der Mauszeiger auf eine Koordinate des Bildschirms gesetzt. Dabei kann er auch außerhalb des Mausbereiches gesetzt werden, was zur Folge hat, dass der Mauscursor nicht sichtbar ist.

 



5. 2. 5. Das Unit ALERTBOX

 

Um auf Fehlbedienungen im Programm hinzuweisen, ist es sinnvoll dem Benutzer des Programms kurz und knapp definitive Anweisungen zur richtigen Handhabung anzuzeigen. Dazu wird über die Prozedur alert eine Alarmbox in der Mitte des Bildschirms dargestellt. Sie enthält kurze Anweisungen zur weiteren Benutzung des Programms. Nach einem Maustastendruck verschwin­det die Alarmbox wieder.

 



5. 2. 6. Das Unit INIT

 

Da der Computer mit einer EGA-Karte ausgerüstet ist, muss diese unter Turbo Pascal über einen Grafiktreiber initialisiert werden. Die Prozedur graph_init initialisiert den Grafikadapter über die Datei EGAVGA.BGI. Diese muss sich im selben Directory befinden wie das Programm selbst. /4/

Tritt bei der Grafikinitialisierung ein Fehler auf, gibt das Programm eine Fehlermeldung aus und kehrt zum DOS zurück. Bei fehlerfreier Initialisierung werden in den globalen Variablen max_x und max_y die maximal Koordinaten des Grafikbildschirms übergeben. In max_color wird die höchste erlaubte Farbnummer übergeben.

 



5. 2. 7. Das Unit MAINMENUE

 

Das Unit MAINMENÜE enthält 10 Prozeduren zur grafischen Darstellung des Hauptmenüs (Level 1). Für jeden der 7 Programmblöcke wird ein eigenes Fenster dargestellt. Um einen Programmblock aufzurufen, muss das ent­sprechende Fenster durch einen Mausklick aktiviert werden. Dann wird in die dazugehörige Unit verzweigt (Level 2). Das 8. Fenster ist der Menüpunkt END. Durch Aktivierung von END wird der Grafikmodus zurückgesetzt und das Programm beendet. Die Überwachung des Bildschirmaufbaues übernimmt die Prozedur draw_main_menue.

 

 

Bild 34:   Die Prozedur draw_main_menue

 



5. 2. 8. Das Unit INFO

 

Das Unit INFO (Level 2) ist ein eigenständiger Programmblock. Er enthält zu jedem Programmteil Informationstexte. Diese werden von der Festplatte geladen und auf dem Bildschirm angezeigt. Vom Hauptmenü der INFO-Ebene info_main können gezielt weitere Info-Ebenen (Level 3) aufgerufen werden. Diese Ebenen geben Informationen über die Hauptmenüpunkte BODY, SPIRO, FLOW, DATA, STATISTIC und CALIBRATE.

 

Implementiert ist schon die Infoebene für den BODY-Teil. Über body-Info wird das Menü der BODY-INFO-Ebene (Level 3) aufgerufen. Diese Ebene kann auch aus dem BODY-Hauptmenü erreicht werden. In body_info können Infotexte zu allen Bodymenüpunkten aktiviert werden.

 

Um das alte Bild nicht zu löschen (wegen der aufgenommenen Messkurven) wird in body_info die Prozedur zum Umschalten der Bildschirme benutzt.

 

Um eine große Flexibilität zu erreichen sind alle Informationstexte als einzelne Dateien auf der Platte gespeichert. So könnte leicht durch Änderung des Suchpfades für die Infodateien zwischen deutschen und englischen Info­texten gewählt werden.

 

Die Infotexte müssen als normale Textdateien unter ihrem Namen im Ordner INFO TXT vorliegen, z.B.: BODY_P_V.TXT für den Infotext über den Menüpunkt P/V im Bodymenü.

 



5. 2. 9. Das Unit DATA

 

Das Unit DATA enthält die Prozeduren zur Patientendateiverwaltung. Im Unit DATA sollen Patientendaten eingegeben, gelöscht, angezeigt, abgespeich­ert, geladen und protokolliert werden.

 

Bevor eine Eingabe von Patientendaten erfolgt, werden über patient_clear alle Recordvariablen des neuen Datensatzes definiert gesetzt, so dass auch bei Nichteingabe von Daten alle Variablen festgelegt sind. Um die Länge der möglichen Eingabestrings zu überschauen, wird eine Eingabemaske in patient_input bei der Eingabe von Patientendaten auf dem Bildschirm eingeblendet. Dann können Name, Vorname, Strasse, Plz, Ort, Geschlecht und Geburtsdatum des Patienten eingegeben werden. Sind alle Eingaben gemacht, erfolgt eine Abfrage auf Korrektheit der eingegebenen Daten. Die Eingabe kann dann wiederholt werden. Bei richtiger Eingabe werden alle Patientendaten als neuer Datensatz über patient_save auf der Festplatte gespeichert. Dabei wird das Datum und die Uhrzeit mit abgespeichert, um eine Unterscheidung von späteren Messungen zu haben. /4/

 

Bei der Speicherung des Datensatzes wird geprüft, ob schon eine Datei mit Datensätzen besteht. Ist dieses nicht der Fall, wird eine neue Datei unter dem Namen der globalen Konstante pfad_patienten angelegt. Ist eine Datei vorhanden, wird geprüft, wie viel Datensätze sie enthält und dem neuen Datensatz wird die nächste Nummer als Datensatznummer in satz_nr über­geben. Dann wird der Datensatz gespeichert. /13/

 

Da im weiteren Verlauf des Programms auch andere Datensätze gelistet werden können, wird die Satznummer des aktuellen Datensatzes in last_patient gesichert. last_patient enthält immer den zuletzt eingegebenen Datensatz. Sollte nach Programmstart noch kein Patient eingegeben worden sein (patient_aufgenommen = false), steht in last_patient die Nummer des letzten Datensatzes der Patientendatei.

 

Um eine einwandfreie Zuordnung zu gewährleisten, können erst Messwerte aufgenommen werden, wenn nach dem Programmstart ein Datensatz einge­geben worden ist. Da last_patient die aktuelle Satznummer enthält, können die aufgenommenen Messwerte ohne Überprüfung der Patientendatei auf der Festplatte gesichert werden. Dies erfolgt über die Prozedur measure_save.

Ein Auflisten aller Datensätze ist über die Prozedur data_list_all möglich. Dabei werden die eingegebenen Patientendaten in chronologischer Reihenfolge einzeln über patient_output auf dem Bildschirm ausgegeben. über <RETURN> wird in der Patientendatei weitergeblättert, mit <a> wird die Ausgabe beendet. Es werden keine Messwerte oder Messkurven angezeigt.

 

Diese können jeweils nur für den aktuellen Datensatz auf einem ange­schlossenen 24-Nadel-Drucker ausgegeben werden. Da im Normalfall nach der Aufnahme von Messwerten sofort eine Protokollierung erfolgt, ist diese Maßnahme ausreichend.

 

Bei der Protokollierung über data_record werden sämtliche Patientendaten sowie das Datum und die Uhrzeit auf dem Drucker ausgegeben. Dann werden, soweit vorhanden, die Messkurven aus den aufgenommenen Mess­werten rekonstruiert und auf dem zuvor gelöschten Bildschirm dargestellt.

 

Zur Ausgabe der Kurven auf dem Drucker wird die Hardcopy Routine plot_ega ( nr ) des Units TOOLS verwendet. Da der Computer dazu eine enorme Rechenleistung durchzuführen hat ( 3 Hardcopies vom Bildschirm ), ist die Ausgabe der Messkurven dementsprechend langsam (15 min für das Mess­protokoll).

 

Es werden die Messkurven von PK/V. TGVin und TGVex ausgegeben. Zusätzlich werden die Messwerte für Luftdruck, Lufttemperatur und Luft­feuchtigkeit ausgegeben.

 

 

Bild 35:   Die Struktur der DATA-Ebene