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
Informationen 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 Programmteil 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 Hauptmenü ist die Ebene 1. Alle weiteren Ebenen sind der Ebene 1
untergeordnet 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 Arbeitsfenster 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 Maustasten.
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 Messwertaufnahme 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 beinhaltet die Interrupt-Prozeduren, Prozeduren für
Datum und Uhrzeit, Statusfunktionen für Disketten- und Festplattenlaufwerke,
Prozeduren zur Bearbeitung 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 unterschiedlicher
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 Abtastwerte. 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
fA = 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 Abtastwerte, 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 Messwertreihen definiert. Zusätzlich
sind noch drei boolesche Variablen definiert. Sie zeigen an, ob ein Patient
schon in der Kartei eingetragen ist, ob ein Unterprogrammsprung 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 Unterprogrammgestaltung 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-Grafikseite 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 Umschaltvorgang 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 aufgerufen 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, Kreisbogen,
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, übernimmt 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 Maustasten 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 gleichzeitig
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 verschwindet 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 entsprechende 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 Infotexten 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, abgespeichert, 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 übergeben. 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 eingegeben 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 angeschlossenen 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 Messwerten
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 Messprotokoll).
Es werden die Messkurven von PK/V. TGVin und TGVex ausgegeben. Zusätzlich
werden die Messwerte für Luftdruck, Lufttemperatur und Luftfeuchtigkeit
ausgegeben.
Bild
35: Die Struktur der DATA-Ebene