############################################################################ ############################################################################ ## ## ## ## ## ## ## ## ## ## ## ### # # ##### ###### ###### ## ## # ## # # # # # # # ## ## # # # # # # # # # ## ## # # # # # #### # # ###### ## ## # # # # # # # # # # ## ## # # ## # # # # # # ## ## ### # # ##### ####### ###### ###### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ###### ####### ### ## ## # # # # ## ## # # # # ## ## ###### ##### # ###### ## ## # # # # ## ## # # # # ## ## ###### ####### ### ## ## ## ## ## ## ##### ###### ### ####### # ####### ## ## # # # # # # # # ## ## # # # # # # # ## ## ##### ###### # ##### # ##### ## ## # # # # # # ## ## # # # # # # # ## ## ##### # ### ####### ####### ####### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ############################################################################ ############################################################################ Juni 19, 1989 Beispiele - 320 - AAAAMMMMXXXX////ZZZZIIIIPPPP _3._1. TTTTeeeerrrrmmmmiiiinnnnkkkkoooonnnnttttrrrroooolllllllleeee ******** _3._1._1. VVVVoooorrrrbbbbeeeemmmmeeeerrrrkkkkuuuunnnngggg Um sich sinnvoll in ein UNIX -System einzuordnen, sollte das Prinzip des "Werkzeugkastens" auch in der Anwenderebene durchgestanden werden - na"mlich kleine Programme mit exakt abgegrenzten Leistungen zu schaffen und diese zu einem Paket verbinden. Nachfolgend wird auszugsweise ein Projekt vor- gestellt, das die Nutzung von AMX und ZIP veranschaulicht. Als Bedingungen seien gestellt: Die Terminkontrolle ist schirmorientiert zu lo"sen. Bei Bedarf ko"nnen Protokolle gedruckt werden. Die zu kontrol- lierende Einheit besteht aus einer Basis-Massnahme und keiner oder beliebig vielen Festlegungen. Wa"hrend des Kon- trollvorganges sollen die Basis-Massnahmen gezeigt (entsprechend vorzugebender Eingrenzungen), gea"ndert oder als realisiert markiert werden - Festlegungen sollen gezeigt, korrigiert, als realisiert markiert oder neu hinzugefu"gt werden. Neben der Mo"glichkeit u"ber Zieltermine zu recherchieren, kann nach dem Kreis der, fu"r die Reali- sierung der Massnahme Verantwortlichen (Gruppe oder Einzelperson) oder nach dem Kreis, der eine Massnahme ausgelo"st hat (Gruppe oder Einzelperson) - gegenu"ber dem der recherchierende Leiter also rechenschaftspflichtig ist - eingegrenzt werden. Es existiert eine Nomenklatur, die Struktureinheiten ordnet bzw. gruppiert. _3._1._2. RRRReeeellllaaaattttiiiioooonnnneeeennnn Innerhalb der Datenbank tttteeeerrrrkkkkoooonnnn werden folgende Relationen verwendet: bbbbaaaassssiiiissss entha"lt die Basis-Massnahmen. U"ber die Massnahme- Nummer mmmmnnnnrrrr werden die dazugeho"rigen Festlegungen identi- fiziert. vvvvoooonnnnggggrrrruuuupppp gibt Auskunft, durch welche Struk- tureinheit (auch u"bergeordnete Organe) die Massnahme veran- lasst wurde (Gruppe), vvvvoooonnnnppppaaaarrrrtttt grenzt innerhalb der Gruppe auf einen konkreten Partner ein. aaaannnnggggrrrruuuupppp bzw. aaaannnnppppaaaarrrrtttt geben an, wer die Massnahme verantwortlich zu realisieren hat (Gruppe bzw. Partner). eeeeddddaaaatttt ist das Rechnerdatum, zu dem die Massnahme erfasst wurde und tttteeeerrrrmmmmiiiinnnn der vorgegebene Zieltermin. Die Angabe ffffeeeessssttttaaaannnnzzzz gilt als Hinweis auf die aktuelle Anzahl von Festlegungen, ist der Wert -1 sind alle Festlegungen realisiert (Hinweis zum Austragen). Der eigentliche Text wird vierzeilig in ttttxxxx1111........ttttxxxx4444 abgelegt. ING_DB 6.3/3 Juni 19, 1989 UUUUNNNNIIIIXXXX Beispiele - 321 - AAAAMMMMXXXX////ZZZZIIIIPPPP Relation: basis --------- P8000 / EVK Olbernhau Besitzer: kodir Tupellaenge: 218 Verfallsdatum: Tue Jan 1 00:00:00 1991 Tupelanzahl: 131 Speicherstruktur: HEAP Pages: 1 + 46 Relationentyp: Nutzerrelation Domaenname Typ Laenge Schluessel -------------------------------------------- mnr i 4 edat i 4 vongrup i 2 vonpart i 2 angrup i 2 anpart i 2 tx1 c 49 tx2 c 49 tx3 c 49 tx4 c 49 termin i 4 festanz i 2 -------------------------------------------- ffffeeeessssttttllll entha"lt die zur Basis-Massnahme geho"rigen Festlegungen. ffffnnnnrrrr nummeriert innerhalb der Massnahme- Nummer, vvvvggggrrrruuuupppp und vvvvppppaaaarrrrtttt geben die Verantwortlichkeit und kkkkggggrrrruuuupppp bzw. kkkkppppaaaarrrrtttt die Kontrollpflicht an. Mit rrrreeeeaaaalllliiiissss wird ein Kennzeichen fu"r gegebene Realisierung (=1) gesetzt. ING_DB 6.3/3 Juni 19, 1989 UUUUNNNNIIIIXXXX Beispiele - 322 - AAAAMMMMXXXX////ZZZZIIIIPPPP Relation: festl --------- P8000 / EVK Olbernhau Besitzer: kodir Tupellaenge: 216 Verfallsdatum: Tue Jan 1 00:00:00 1991 Tupelanzahl: 26 Speicherstruktur: HEAP Pages: 1 + 11 Relationentyp: Nutzerrelation Domaenname Typ Laenge Schluessel -------------------------------------------- mnr i 4 fnr i 2 tx1 c 49 tx2 c 49 tx3 c 49 tx4 c 49 termin i 4 vgrup i 2 vpart i 2 kgrup i 2 kpart i 2 realis i 2 -------------------------------------------- ppppaaaarrrrttttnnnn entha"lt die Nomenklatur und Bezeichnungen der Struk- tureinheiten, die an der Terminkontrolle teilhaben. Mit ggggrrrruuuupppp wird eine Gruppe, mit ffffeeeeiiiinnnn ein Partner bestimmt. Relation: partn --------- P8000 / EVK Olbernhau Besitzer: kodir Tupellaenge: 28 Verfallsdatum: Tue Jan 1 00:00:00 1991 Tupelanzahl: 56 Speicherstruktur: HEAP Pages: 1 + 1 Relationentyp: Nutzerrelation Domaenname Typ Laenge Schluessel -------------------------------------------- grup i 2 fein i 2 bez c 24 -------------------------------------------- mmmmaaaaffffeeeennnnrrrr ist eine tempora"re Relation, die jeweils alle Massnahme-Nummern, sich qualifizierender Tupel der Relation bbbbaaaassssiiiissss bzw. die dazugeho"rigen Festlegungs-Nummern der Rela- tion ffffeeeessssttttllll entha"lt. ING_DB 6.3/3 Juni 19, 1989 UUUUNNNNIIIIXXXX Beispiele - 323 - AAAAMMMMXXXX////ZZZZIIIIPPPP Relation: mafenr --------- P8000 / EVK Olbernhau Besitzer: kodir Tupellaenge: 6 Verfallsdatum: Tue Jan 1 00:00:00 1991 Tupelanzahl: 0 Speicherstruktur: HEAP Pages: 1 + 0 Relationentyp: Nutzerrelation Domaenname Typ Laenge Schluessel -------------------------------------------- mnr i 4 fnr i 2 -------------------------------------------- _3._1._3. SSSStttteeeeuuuueeeerrrrpppprrrrooooggggrrrraaaammmmmmmm Um die relativ langen Zeilen der Quellprogramme noch eini- germassen u"bersichtlich darstellen zu ko"nnen, wurden nach- folgend \t durch drei Leerzeichen ersetzt. Das Hauptmenue steht in der Prozedur hhhhaaaauuuuppppttttmmmm....cccc.... Hier das Hauptprogramm: /* Hauptmenue zur Terminkontrolle in hauptm.c */ /* Pfadname in cmd.c definiert */ # include # include # include "/z/zip/inkeys.h" char command[65]; main() { char *cmd(); initzip(); if (!system(cmd("part"))) goto fehler; for (;;) { switch(hauptm()) { case 1: while (system(cmd("kontr"))) { system(cmd("teko")); system(cmd("delmaf")); } system(cmd("fanze")); break; case 2: system(cmd("eiko")); system(cmd("fanze")); ING_DB 6.3/3 Juni 19, 1989 UUUUNNNNIIIIXXXX Beispiele - 324 - AAAAMMMMXXXX////ZZZZIIIIPPPP break; case 3: while (system(cmd("druw"))) { system("modifyr terkon mafenr heapsort mnr fnr"); system("nq -nb newpg"); if (!system(cmd("druk"))) { perror("Systemfehler"); sleep(5); break; } clear(); refresh(); } system(cmd("delmaf")); break; case 4: system(cmd("nomenkl")); if (!system(cmd("part"))) goto fehler; break; case 5: crmode(); noecho(); clear(); refresh(); nocrmode(); echo(); endwin(); exit(0); default: goto fehler; } } fehler: crmode(); noecho(); clear(); refresh(); nocrmode(); echo(); endwin(); printf("*** System-Fehler ***\n"); exit(-1); } iiiinnnniiiittttzzzziiiipppp(((()))) ist eine Prozedur aus libzip.a, die die Initia- lisierung des Paketes ccccuuuurrrrsssseeeessss und des Paketes zzzziiiipppp veranlasst. Die Auswahl erfolgt u"ber die Prozedur hauptm(), indem die gewu"nschte Zeile mit der Kursortaste (|v) angefahren und mit -> angeklickt wird. Um einen U"berblick bezu"glich der Lei- stung der einzelnen Programme zu verschaffen wird nachfol- gend die Menue-Prozedur hhhhaaaauuuuppppttttmmmm....cccc gezeigt: /* Hauptmenue zur Terminkontrolle */ # include # include "/z/zip/inkeys.h" # define Fragen 5 # define Beginn 5 extern char *SO, *SE; ING_DB 6.3/3 Juni 19, 1989 UUUUNNNNIIIIXXXX Beispiele - 325 - AAAAMMMMXXXX////ZZZZIIIIPPPP hauptm() { static char *men[] = { "? Kontrolle von Faelligkeiten mit Aenderungsmoeglichkeit.. ", "? Erfassung neuer Basis-Massnahmen (auch mit Festlegungen) ", "? Druck von Protokollen (auch mit Eingrenzungen).......... ", "? Aenderung und Ergaenzung der Nomenklatur (Partner)...... ", "? Beendigung der Arbeit................................... " }; int inp; int aus; int zl, sp, spa; char buf[80]; crmode(); clear(); datum(12, 5); move(2, 5); addstr("TERMINKONTROLLE Hauptmenue"); zl = Beginn; sp = 5; for (inp = 0; inp < Fragen; inp++) { move(zl+inp, sp); strcpy(buf, SO); strcat(buf, men[inp]); strcat(buf, SE); addstr(buf); } move(zl, sp-1); refresh(); noecho(); for (;;) { aus = 0; switch(inp = ZZgetchx()) { case CCdo: getyx(stdscr, zl, spa); if (zl < (Fragen+Beginn-1)) move(++zl, spa); break; case CCup: getyx(stdscr, zl, spa); if (zl > Beginn) move(--zl, spa); break; case CCri: nocrmode(); echo(); aus = zl - Beginn + 1; move(zl, sp+1); addstr(men[aus-1]); refresh(); return(aus); default : continue; } refresh(); } } ING_DB 6.3/3 Juni 19, 1989 UUUUNNNNIIIIXXXX Beispiele - 326 - AAAAMMMMXXXX////ZZZZIIIIPPPP Mit der Prozedur hauptm() wird eine Leistung beschrieben, die in der Regel die ZIP-Prozedur menzip() ausfu"hrt - der einzige Unterschied besteht darin, dass das fu"hrende Fragezeichen nach dem Anklicken durch die nachfolgende Zeichenkette (normale Darstellung) u"berschrieben wird. Die Pointer *SO und *SE stammen aus der termcap und realisieren das Ein- und Ausschalten einer inversen Darstellung der Terminalausgabe. ZZZZZZZZggggeeeettttcccchhhhxxxx(((()))) bietet die Mo"glichkeit, in der termcap definierte Steuerfolgen auszuwerten - hier CCdo (Cursor down), CCup (Cursor up) usw. - und entsprechende Reaktionen des Programms zu gestalten. Die Prozedur steht in libzip.a, die entsprechenden Definitionen zu CCdo, CCup usw. in inkeys.h. Mit getyx() aus curses la"sst sich die aktuelle Kursorposition auf dem Standard-Screen (stdscr) erfragen und auf die nachfolgenden beiden Parameter zuru"ckschreiben. _3._1._4. KKKKoooonnnnttttrrrroooollllllll----MMMMeeeennnnuuuueeee Das Programm tttteeeekkkkoooo wird nach dem Programm kkkkoooonnnnttttrrrr gerufen. Mit- tels kontr wird eine Abfrage zur Qualifikation (Eingrenzung) der Massnahmen bzw. Festlegungen realisiert. Es entsteht die Relation mmmmaaaaffffeeeennnnrrrr,,,, die eingangs alle eingegrenzten Mass- nahmen anbietet. Wird teko durch einen Abbruch vorzeitig verlassen, ist diese Relation mit delmaf wieder zu lo"schen. tttteeeekkkkoooo wird nachfolgend komplett gezeigt, Bezugspunkte fu"r Erla"uterungen werden laufend nummeriert (n) und als Kommen- tar gekennzeichnet. tttteeeekkkkoooo....xxxx:::: ## shared terkon /* Menue 1 - Kontr.-Menue: Eingangsrelation mafenr aus kontr */ /* Kontrolle von Festlegungen und Basis-Massnahmen; */ /* Basis-Massnahmen koennen geaendert, Festlegungen geaendert*/ /* und neue hinzugefuegt werden; */ # include ## long MNR; ## int GRUP; ## int FEIN; ## int FNR; ## char BEZ[24]; ## char TX1[49]; ## char TX2[49]; ## char TX3[49]; ## char TX4[49]; ## long EDAT; ## long TERMIN; ## int VGRUP; ## int VPART; ## int AGRUP; ## int APART; ## int FESTL; ## int REALIS; char DATUM[9]; char SLE[15]; ING_DB 6.3/3 Juni 19, 1989 UUUUNNNNIIIIXXXX Beispiele - 327 - AAAAMMMMXXXX////ZZZZIIIIPPPP char ANTW[2]; char mess[25]; int VON; int clr; int zl, sp; int anzfest; amx() { /* (1) */ static char *bas[] = { "Weiter.............. ", "Realisiert.......... ", "Aendern............. ", "Festl. zeigen/aend.. ", "Festlegungen zufueg. ", "Abbruch............. " }; static char *fest[] = { "Weiter.............. ", "Realisiert.......... ", "Aendern............. ", "Festlegungen zufueg. " }; static char *festzu[] = { "Festlegungen zufueg. ", "Abbruch............. " }; int c; int d; int flag; int flagm; int flagf; int end_fl; int bas_fl; int maxfnr; int t_count; long old_mnr; initzip(); ## open basis ## open partn ## open festl ## open mafenr ## use (+basis,partn,+festl,+mafenr) zyk: end_fl = 0; ## scan mafenr (MNR=$mnr, FNR=$fnr) ## { ++end_fl; ## } if (!end_fl) { /* (2) */ ING_DB 6.3/3 Juni 19, 1989 UUUUNNNNIIIIXXXX Beispiele - 328 - AAAAMMMMXXXX////ZZZZIIIIPPPP melde(); goto end; } if (MNR == old_mnr) goto zyfest; clr = 0; flag = 0; ## scan basis $mnr=MNR (TX1=$tx1,TX2=$tx2,TX3=$tx3,TX4=$tx4, ## TERMIN=$termin,VGRUP=$vongrup, ## VPART=$vonpart,AGRUP=$angrup,APART=$anpart,FESTL=$festanz) ## { ++flag; anzfest = FESTL; /* (3) */ abas(); getyx(stdscr, zl, sp); move(2, 52); if (anzfest == -1) sprintf(mess, "Festlegungen realisiert"); else sprintf(mess, "%2d Festlegung(en) ! ", anzfest); addstr(mess); refresh(); move(zl, sp); c = menzip(bas, 6, 3, 52); switch(c) { case 2: /* B.-M. loeschen vorbereiten */ ZZbeep(); okay(1,0); if (ANTW[0] == 'j' || ANTW[0] == 'J') { ZZbeep(); FESTL = -1; } break; case 3: /* B.-M. korrigieren */ dbas(); /* Bereich fuer B.-M. loeschen */ /* (5) */ if (!ebas()) c = 1; break; default: break; } if (c == 2 || c == 3) { ## replace ($mnr=MNR,$tx1=TX1,$tx2=TX2,$tx3=TX3,$tx4=TX4, ## $termin=TERMIN,$vongrup=VGRUP,$edat=EDAT, ## $vonpart=VPART,$angrup=AGRUP,$anpart=APART,$festanz=FESTL) } ## } switch(c) { case 6: goto end; case 1: case 2: case 3: ## scan mafenr $mnr=MNR ## { ING_DB 6.3/3 Juni 19, 1989 UUUUNNNNIIIIXXXX Beispiele - 329 - AAAAMMMMXXXX////ZZZZIIIIPPPP ## delete ## } goto zyk; default : break; } d = 0; flagf = 0; zyfest: switch(c) { case 4: if (FNR) /* Ueber Festl. recherchiert */ { ## scan mafenr $mnr=MNR (FNR=$fnr) ## { ## scan festl $mnr=MNR, $fnr=FNR (TX1=$tx1,TX2=$tx2,TX3=$tx3, ## TX4=$tx4,TERMIN=$termin,VGRUP=$vgrup, ## VPART=$vpart,AGRUP=$kgrup,APART=$kpart,REALIS=$realis) ## { dfest(); afest(); d = menzip(fest, 4, 13, 52); switch(d) { case 1: break; case 2: ZZbeep(); okay(1,0); if (ANTW[0] == 'j' || ANTW[0] == 'J') { ZZbeep(); REALIS = 1; } case 3: if (!REALIS) kfest(); ## replace ($mnr=MNR,$fnr=FNR,$tx1=TX1,$tx2=TX2,$tx3=TX3, ## $tx4=TX4,$termin=TERMIN,$vgrup=VGRUP, ## $vpart=VPART,$kgrup=AGRUP,$kpart=APART,$realis=REALIS) break; case 4: c = 5; goto zyfest; } ## } ## delete ## } } else /* Keine Festl.-Nr.: Recherche BMn. */ { ++flagf; ## scan festl $mnr=MNR (FNR=$fnr,TX1=$tx1,TX2=$tx2,TX3=$tx3, ## TX4=$tx4,TERMIN=$termin,VGRUP=$vgrup, ## VPART=$vpart,AGRUP=$kgrup,APART=$kpart,REALIS=$realis) ## { dfest(); afest(); d = menzip(fest, 4, 13, 52); switch(d) { case 1: break; ING_DB 6.3/3 Juni 19, 1989 UUUUNNNNIIIIXXXX Beispiele - 330 - AAAAMMMMXXXX////ZZZZIIIIPPPP case 2: REALIS = 1; case 3: if (!REALIS) kfest(); ## replace ($mnr=MNR,$fnr=FNR,$tx1=TX1,$tx2=TX2,$tx3=TX3, ## $tx4=TX4,$termin=TERMIN,$vgrup=VGRUP, ## $vpart=VPART,$kgrup=AGRUP,$kpart=APART,$realis=REALIS) break; case 4: c = 5; goto zyfest; } ## } } break; case 5: ++flagf; zyzuf: if (d == 4) { maxfnr = 1; ## scan festl $mnr=MNR (FESTL=$fnr) ## { if (FESTL > maxfnr) maxfnr = FESTL; ## } } TX1[0] = '\0'; TX2[0] = '\0'; TX3[0] = '\0'; TX4[0] = '\0'; FNR = maxfnr + 1; kfest(); ## append festl ($mnr=MNR,$fnr=FNR,$tx1=TX1,$tx2=TX2,$tx3=TX3, ## $tx4=TX4,$termin=TERMIN,$vgrup=VGRUP, ## $vpart=VPART,$kgrup=AGRUP,$kpart=APART,$realis=REALIS) if ((d = menzip(festzu, 2, 13, 52)) == 1) { d = 4; goto zyzuf; } break; default: break; } if (flagf) { ## scan mafenr $mnr=MNR ## { ## delete ## } flagf = 0; } goto zyk; end: ## commit ## close partn ## close basis ## close festl ## close mafenr } ING_DB 6.3/3 Juni 19, 1989 UUUUNNNNIIIIXXXX Beispiele - 331 - AAAAMMMMXXXX////ZZZZIIIIPPPP /* (4) */ ks_part() { ## scan partn $grup=GRUP, $fein=FEIN (BEZ=$bez) ## { ## } } Die Datenbank wird fu"r mehrere Nutzer gleichzeitig geo"ffnet (shared). Dabei sind die Relationen bbbbaaaassssiiiissss,,,, ffffeeeessssttttllll und mmmmaaaaffffeeeennnnrrrr zum Lesen und Schreiben sowie ppppaaaarrrrttttnnnn nur zum Lesen verfu"gbar (use). Die lokalen Vereinbarungen ((((1111)))) repra"sentieren jeweils ein Menue, das mit menzip() zur Anzeige kommt. Die Prozedur mmmmeeeellllddddeeee(((()))) bei ((((2222)))) teilt bei den Phasen, die mehrere Sekunden keine Vera"nderungen am Bildschirm veran- lassen, mit, dass der Rechner arbeitet. Die Prozedur beinhaltet lediglich eine Positionierung mit move(), nachdem vorher mit getyx() die aktuelle Kursor-Position gesichert wurde und gibt die Zeichenkette IIIIcccchhhh aaaarrrrbbbbeeeeiiiitttteeee!!!! mit addstr() aus - die Prozeduren entstammen curses. /* Ausschrift einer Meldung am Bildschirm */ # include melde() { int zl, sp; getyx(stdscr, zl, sp); move(15, 1); addstr(" Ich arbeite ! "); refresh(); move(zl, sp); } Die Prozedur aaaabbbbaaaassss(((()))) bei ((((3333)))) fasst einige Positionierungen und ZIP-Prozeduren zusammen. /* Anzeige Basis-Massnahmen */ # include extern int GRUP, VGRUP, FEIN, VPART, AGRUP, APART; extern long TERMIN; extern char DATUM[9]; extern char SLE[15]; extern int clr; extern int anzfest; extern char mess[25]; abas() { emnr(clr++, 0); ING_DB 6.3/3 Juni 19, 1989 UUUUNNNNIIIIXXXX Beispiele - 332 - AAAAMMMMXXXX////ZZZZIIIIPPPP tocdat(&TERMIN, DATUM); dfest(); strcpy(SLE, "Basis-Massn."); bas(clr, -1); tobdat(DATUM, &TERMIN); move(8, 0); refresh(); strcpy(SLE, "Aufgst. durch"); GRUP = VGRUP; FEIN = VPART; ks_part(); kvekop(clr, 0); strcpy(SLE, "Realis. durch"); GRUP = AGRUP; FEIN = APART; ks_part(); kvekop(clr, 0); APART = FEIN; refresh(); } abas() soll die Basis-Massnahmen entsprechend der, in der Relation mafenr vorgegebenen Reihenfolge anzeigen. Um dies etwas zu verdeutlichen, sehen wir uns den Aufbau der oberen Ha"lfte des Bildschirms an: +-----------------------------------------------------------+ Massnahme-Nr.: 9999999999 >>>> TERMINKONTROLLE <<<< Text Basis-Massn. : 1 Festlegung(en) ! >aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..aa< +--------------------+ >aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..aa< |Weiter..............| >aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..aa< |Realisiert..........| >aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..aa< |Aendern.............| Termin(tt.mm.jj) : 28.02.89< |Festl. zeigen/aend..| .Aufgst. durch > Partner: Kombinatsd.. |Festlegungen zufueg.| .Realis. durch > Partner: Direktor T.. |Abbruch.............| +--------------------+ +-----------------------------------------------------------+ Die Abbildung wurde nicht vo"llig korrekt wiedergegeben, weil eine Breite von 80 Zeichen den rechten Rand beim Druck zu weit u"berschreitet. Das invers zu zeigende Menue aus der Zeichenkettenvariablen ****bbbbaaaassss wurde gerahmt dargestellt. In der Regel wird der untere Teil des Bildschirms - sofern Festlegungen vorhanden sind - beim Anklicken der 4. Zeile des Menues mit der analogen Darstellung zur Festlegung gefu"llt. Das Menue 'Weiter' zeigt die na"chste Massnahme. Das Anklicken von 'Realisiert' ist mit einer Ru"ckversicherung verbunden - die Frage OOOOkkkkaaaayyyy ((((jjjj////nnnn))))???? muss mit 'j' beantwortet werden, bevor die Massnahme tatsa"chlich zum Lo"schen markiert wird. Ein Piepton (ZZbeep()) besta"tigt die Lo"schvormerkung. Zuru"ck zu abas(). ccccuuuurrrrsssseeeessss....hhhh wurde eingezogen, um die Makros aus curses mmmmoooovvvveeee(((()))) und rrrreeeeffffrrrreeeesssshhhh(((()))) verfu"gbar zu haben. Die Prozedur eeeemmmmnnnnrrrr(((()))) ist aus ZIP entstanden und zeigt die Massnahme-Nr. an. Der Erarbeitungsweg wird gezeigt. ING_DB 6.3/3 Juni 19, 1989 UUUUNNNNIIIIXXXX Beispiele - 333 - AAAAMMMMXXXX////ZZZZIIIIPPPP Mit dem Editor ist folgendes File eeeemmmmnnnnrrrr____mmmm zu erstellen: Massnahme-Nr.: #999999999 >>>> TERMINKONTROLLE <<<< Die Erzeugung des Quell- und Objektcodes erfolgt mit dem Aufruf: zip -l ../LIBTERM emnr Die Maskenidentifikation '_m' darf nicht im Aufruf angegeben sein, sonst wird der gesamte Name als Basisname interpre- tiert. Im Dialog antworten sie in dieser Reihenfolge: l MNR n Zur Verdeutlichung wird das entstehende _i-File gezeigt, das fu"r eventuelle Modifikationen genutzt werden kann und u"ber den stattgefundenen Dialog informiert. emnr -l ../LIBTERM long MNR n n ttttooooccccddddaaaatttt(((()))) wandelt die intern u"bliche long-Darstellung (Zeit, Datum) in die normale Darstellung des Datums (tt.mm.jj). ddddffffeeeesssstttt(((()))) lo"scht auf dem Bildschirm den Bereich, auf dem Festlegungen dargestellt werden, um zu vermeiden, dass eine mo"glicherweise von der vorausgegangenen Massnahme abgebil- dete Festlegung stehen bleibt. Die ZIP-Prozedur bbbbaaaassss(((()))) rea- lisiert die Anzeige der na"chsten 6 Zeilen, wobei das 2. Argument '-1' die Prozedur veranlasst, unabha"ngig von einer gewu"nschten Korrekturart, die Variablen nur auszuschreiben. Die Maske bbbbaaaassss____mmmm sieht so aus: Text #aaaaaaaaaaaa: >#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa< >#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa< >#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa< >#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa< Termin(tt.mm.jj) : #aaaaaaa< Aus dem _i-File wird ersichtlich, welche Variablen verwendet und wie sie behandelt werden sollen: bas -a 2 -pl ../LIBTERM char SLE[15] n n char TX1[49] j n char TX2[49] j n char TX3[49] j n char TX4[49] j n char DATUM[9] j testdat() w ING_DB 6.3/3 Juni 19, 1989 UUUUNNNNIIIIXXXX Beispiele - 334 - AAAAMMMMXXXX////ZZZZIIIIPPPP Die Maske wird auf dem Bildschirm nach der 2. Zeile angeha"ngt (-a 2) und die Variable DATUM[9] einer Pru"fung mit tttteeeessssttttddddaaaatttt(((()))) unterzogen (gu"ltiges Datum) - diese Pru"fung wird nur bei einer Korrektur des alten Wertes angestossen. ttttoooobbbb---- ddddaaaatttt(((()))) ist die Umkehrung von tocdat(). Mit rrrreeeeffffrrrreeeesssshhhh(((()))) werden die, auf der Speicherfla"che stdscr vor- genommenen A"nderungen sichtbar gemacht - dieser Algorithmus hilft, insgesamt ein ruhiges Abbilden auf dem Schirm zu realisieren und die Kursorbewegungen zu optimieren. Die Prozedur kkkkssss____ppppaaaarrrrtttt(((()))) - es geht noch um abas() - stammt aus teko.x (4). AMX-Statements ko"nnen nicht in separat zu u"bersetzenden Prozeduren verwendet werden, der AMX-Compiler generiert ein main(). Das gezeigte Beispiel weist auf eine sehr effiziente Anwendung von AMX hin, mit der differen- zierte und relativ komplizierte Einsatzfa"lle lo"sbar sind. ks_part() sucht zum angegebenen Schlu"ssel fu"r GRUP und FEIN die Bezeichnung aus der Relation partn. Die Ausgabe der Bezeichnung erfolgt mit kkkkvvvveeeekkkkoooopppp(((()))).... Im Gegensatz zu bas() kann kvekop() nicht durch eine fest eingestellte Zeilennum- mer zur Positionierung u"bersetzt werden, da es zweimal bei Basis-Massnahmen und zweimal bei Festlegungen benutzt wird. Fu"r solche Anwendungsfa"lle ist die Option -z von ZIP gedacht, wie am Beispiel nocheinmal gezeigt werden soll: .#aaaaaaaaaaaaa >Partner: #aaaaaaaaaaaaaaaaaaaaaaa Aus kvekop_i wird der Aufruf deutlich: kvekop -zl ../LIBTERM char SLE[15] n n char BEZ[24] n n Nachdem abas() abgearbeitet ist, wird u"ber die Anzahl der Festlegungen informiert. Die Verwendung von curses schliesst direkte Ausgaben auf den Schirm (printf()) aus, deshalb erfolgt erst der Aufbau der Zeichenkette mit sprintf() und anschliessend die Ausgabe mittels addstr(). mmmmeeeennnnzzzziiiipppp(((()))) ist in das Paket ZIP eingegliedert und gestattet eine freie Postionierung eines Menues - das seitliche Aus- rutschen der Zeichenketten bei U"berschreitung der Spalte 80 wird nicht kontrolliert, ebenso sollte die Spalte 80 selbst nicht benutzt werden, weil einige Terminaldriver dort eigenwillig reagieren. Die Argumente fu"r menzip() haben folgende Bedeutung: 1.Argument:Variable, in der die auszugebende Zeichenkette definiert ist. 2.Argument:Zeilenzahl des Menues; 3.Argument:Zeilennummer des Bildschirms, ab der das Menue geschrieben werden soll, zusammen mit der Spaltennummer ergibt das die linke obere Ecke des Menues. ING_DB 6.3/3 Juni 19, 1989 UUUUNNNNIIIIXXXX Beispiele - 335 - AAAAMMMMXXXX////ZZZZIIIIPPPP 4.Argument:Spaltennummer des Bildschirms, mit 1 beginnend. Sofern das benutzte Terminal invers schreiben kann, wird das Menue so ausgegeben und die angeklickte Zeile auf normal gewandelt. Mit der Prozedur eeeebbbbaaaassss(((()))) (5) ko"nnen Basismassnahmen korri- giert werden, insoweit unterscheidet sie sich von abas(). Durch die Korrektur ist ausserdem denkbar, dass wa"hrend einer Eingabe mit zweimal Interrupt (bspw. DEL) abgebrochen wird und der Ru"ckkehrcode der ZIP-Prozedur im Hauptprogramm behandelt werden muss. Nachfolgend die Prozedur: /* Erfassung oder Korrektur von Basis-Massnahmen */ # include extern int GRUP, VGRUP, FEIN, VPART, APART, VON, AGRUP; extern long TERMIN; extern char DATUM[9]; extern char SLE[15]; extern char ANTW[2]; extern int clr, anzfest; extern char mess[25]; ebas() { tocdat(&TERMIN, DATUM); move(1, 0); emnr(clr, 0); wdh: strcpy(SLE, "Basis-Massn."); if (!bas(clr, 1)) return(0); tobdat(DATUM, &TERMIN); move(2, 52); sprintf(mess, "%2d Festlegung(en)!", anzfest); addstr(mess); move(8, 0); refresh(); strcpy(SLE, "Aufgst. durch"); GRUP = VGRUP; VON = 0; if (!verkog(clr, 0)) return(0); VGRUP = GRUP; VON = 1; FEIN = VPART; if (!verkop(clr, 0)) return(0); VPART = FEIN; strcpy(SLE, "Realis. durch"); GRUP = AGRUP; VON = 0; move(10, 0); refresh(); if (!verkog(clr, 0)) return(0); AGRUP = GRUP; FEIN = APART; VON = 1; if (!verkop(clr, 0)) return(0); APART = FEIN; okay(1, 0); ING_DB 6.3/3 Juni 19, 1989 UUUUNNNNIIIIXXXX Beispiele - 336 - AAAAMMMMXXXX////ZZZZIIIIPPPP if (ANTW[0] == 'n' || ANTW[0] == 'N') goto wdh; else ZZbeep(); return(1); } Innerhalb von ebas() sind die ZIP-Prozeduren vvvveeeerrrrkkkkoooogggg(((()))) fu"r die Eingabe des Gruppenschlu"ssels und vvvveeeerrrrkkkkoooopppp(((()))) fu"r die Eingabe des Partnerschlu"ssels interessant, weil hier u"ber eine Hilfe (Eingabe von ?) aus der Relation partn die Schlu"sseltabelle fu"r Gruppen bzw. Partner innerhalb der gewa"hlten Gruppe angezeigt werden ko"nnen. Als Beispiel wird verkog() vorgestellt: Maske: #aaaaaaaaaaaaaa > Gruppe: #9 verkog_i: -zhl ../LIBTERM verkog char SLE[15] n n int GRUP j n s_part() p Die Hilfe wird in diesem Fall u"ber ssss____ppppaaaarrrrtttt(((()))) realisiert. /* Nutzt das File 'partner' aus 'part.x', zeigt fuer Hilfe ** die Gruppenuebersicht bzw. die Partner zur Gruppe an ! */ # include extern int GRUP; extern int VON; s_part() { FILE *fp, *fopen(); int zl = 8; int count = 14; int fein, grup; char bez[24]; char buf[29]; if ((fp = fopen("/z/ing_db/work/termin/partner", "r")) == NULL) { echo(); nocrmode(); perror("partner not found"); exit(0); } while (fscanf(fp, "%d %d ", &grup, &fein) != EOF) { if (fgets(bez, 24, fp) == NULL) break; if (!VON) { if (!fein) { move(zl, 50); addstr(" "); sprintf(buf,"%2d %s", grup, bez); move(zl, 51); addstr(buf); ING_DB 6.3/3 Juni 19, 1989 UUUUNNNNIIIIXXXX Beispiele - 337 - AAAAMMMMXXXX////ZZZZIIIIPPPP } else continue; } else { if (GRUP == grup) { move(zl, 50); addstr(" "); sprintf(buf, "%2d %s", fein, bez); move(zl, 51); addstr(buf); } else continue; } ++zl; if (!(--count)) { refresh(); getchar(zl); zl = 8; count = 14; } } refresh(); fclose(fp); } Der scan() aus ks_part() ko"nnte auf den ersten Blick eigentlich auch hier genutzt werden, analog mu"sste anstelle des fscanf() die Prozedur ks_part() stehen und die in der Qualifikation geforderten Werte in einer Schleife aktuali- siert werden. Allerdings wa"re die Formulierung der Qualifi- kation '$grup=GRUP, $fein=FEIN' zu differenzieren und damit drei scan() erforderlich. Die Kopie der Relation partn in ein UNIX -File ist in diesem Fall doch der geringere Aufwand. Da maximal 14 Zeilen, beginnend ab 6, geschrieben werden ko"nnen, wird mit getchar(zl) die Ausgabe gestoppt und nach Eingabe eines beliebigen Zeichens fortgesetzt. Einige wesentliche Dinge sind damit erkla"rt. Da der Rahmen des Anwenderhandbuches durch weitergehende Beschreibungen gesprengt wu"rde, muss hier das Kapitel abgebrochen werden. ING_DB 6.3/3 Juni 19, 1989 UUUUNNNNIIIIXXXX Beispiele - 338 - RRRREEEEPPPPOOOORRRRTTTT _3._2. RRRReeeeppppoooorrrrtttt----GGGGeeeennnneeeerrrraaaattttoooorrrr **** _3._2._1. AAAArrrrbbbbeeeeiiiittttsssslllliiiisssstttteeeennnn Unter dem Begriff Arbeitslisten sollen Druckbilder verstan- den werden, die ein bescheidenes Mass an Daten beno"tigen, die aber fu"r die manuelle Erstellung von U"bersichten eine grosse Hilfe sind, wenn sie sich relativ schnell erzeugen lassen. Ha"ufig trifft man diese Situation auch dann an, wenn bestimmte Unterlagen zur U"bernahme von Daten auf einen Rechner notwendig sind und die Erstellung entsprechender Prima"rbelege nicht lohnt bzw. zu aufwendig ist. Folgende Relationen sollen verwendet werden: Relation: fbbz --------- K 1630 / EVK Olbernhau Besitzer: ing_db Tupellaenge: 43 Verfallsdatum: Mon Jan 1 00:00:00 1990 Tupelanzahl: 23 Speicherstruktur: HEAP Pages: 1 + 2 Relationentyp: Nutzerrelation Domaenname Typ Laenge Schluessel -------------------------------------------- bn i 2 stbn i 4 knr i 2 bez c 35 -------------------------------------------- ING_DB 6.3/3 Juni 19, 1989 UUUUNNNNIIIIXXXX Beispiele - 339 - RRRREEEEPPPPOOOORRRRTTTT Relation: kbz --------- K 1630 / EVK Olbernhau Besitzer: ing_db Tupellaenge: 54 Verfallsdatum: Mon Jan 1 00:00:00 1990 Tupelanzahl: 23 Speicherstruktur: HEAP Pages: 1 + 16 Relationentyp: Nutzerrelation Domaenname Typ Laenge Schluessel -------------------------------------------- knr i 2 kbez c 15 bn i 2 bez c 35 -------------------------------------------- Aus beiden Relationen kann mit retrieve eine neue Relation lllliiiissssttttkkkk erzeugt und mittels replace und modify so umgestaltet werden , dass sie als Ausgangsrelation fu"r nachfolgende Auf- gaben dient. Die Arbeitsliste, die mit dem Programm erzeugt wird, ist nach Betrieben und Kreisen geordnet. Die Kopfin- formationen ko"nnen bei Bedarf gegebenenfalls auch mit dem Editor in die vorbereiteten Felder von listk_o eingetragen werden, sofern sich hierbei eine ha"ufige A"nderung notwendig macht. ------------------------------------------------------------ define report krbbz with columns 122 all lines 66 lines 58 big define hn = 1 define bn = 2 define bez = 3 define #hn = integer 2 define #bn = integer 2 define #bez = char 35 as proc 1 set var 0 = 37 repeat 8 col var 0 ':' set var 0 = var 0 + 12 endr new line return on pagebegin do 'ARBEITSLISTEN NACH KREISEN GEORDNET' col 45 date ING_DB 6.3/3 Juni 19, 1989 UUUUNNNNIIIIXXXX Beispiele - 340 - RRRREEEEPPPPOOOORRRRTTTT col 80 '* NUR FUER DEN DIENSTGEBRAUCH *' new line 2 col 3 'BETRIEBSBEZEICHNUNG' col 37 ': PLAN :ARB.-AUFTR.: IST ' ': PLAN : V. IST :' col 109 ':' col 121 ':' new line col 10 '** KREISBEZEICHNUNG' col 37 ': BM : BM : MON ' ': KUM. BM : KUM. BM :' col 109 ':' col 121 ':' new line '-' 121 endo for all do for one do if value 2 <> 99 then integer length 2 value 2 col 3 else col 10 endi char value 3 call 1 '-' 121 new line if groupend 1 then call 1 col 37 '-' 85 new line endi endo enda call 1 new line col 37 ; ------------------------------------------------------------ Die entstehende Liste ist ein Ausschnitt und soll nur den prinzipiellen Aufbau darstellen. ING_DB 6.3/3 Juni 19, 1989 UUUUNNNNIIIIXXXX Beispiele - 341 - RRRREEEEPPPPOOOORRRRTTTT ARBEITSLISTEN NACH KREISEN GEORDNET DATUM: ===> BETRIEBSBEZEICHNUNG : PLAN :ARB.-AUFTR.: ** KREISBEZEICHNUNG : BM : BM : ------------------------------------------------------------- 7 HOLZWAREN GROSSHARTMANSDORF : : : ------------------------------------------------------------- ** BRAND-ERBISDORF : : : ------------------------------------------------------------- 17 RAUM- U. TAFELSCHMUCK GAHLENZ : : : ------------------------------------------------------------- 21 WERK-KUNST GRUENHAINICHEN : : : ------------------------------------------------------------- ** FLOEHA : : : . . . ------------------------------------------------------------- 25 KOMBINAT EVK OLBERNHAU : : : ==================== ===> _3._2._2. SSSSooooffffttttwwwwaaaarrrreeeekkkkaaaattttaaaalllloooogggg In der Datenbank hhhhaaaarrrrddddssssoooofffftttt gibt es die beiden Relationen aaaannnnsssscccchhhhrrrriiiifffftttt und ssssoooofffftttt1111:::: Relation: anschrift --------- K 1630 / EVK Olbernhau Besitzer: ing_db Tupellaenge: 200 Verfallsdatum: Mon Jan 1 00:00:00 1990 Tupelanzahl: 165 Speicherstruktur: compressed HEAP Pages: 1 + 37 Relationentyp: Nutzerrelation Domaenname Typ Laenge Schluessel -------------------------------------------- bn i 4 ans1 c 40 ans2 c 40 ans3 c 30 ort c 30 plz c 5 kubez c 48 beznr c 3 -------------------------------------------- ING_DB 6.3/3 Juni 19, 1989 UUUUNNNNIIIIXXXX Beispiele - 342 - RRRREEEEPPPPOOOORRRRTTTT Relation: soft1 --------- K 1630 / EVK Olbernhau Besitzer: ing_db Tupellaenge: 159 Verfallsdatum: Mon Jan 1 00:00:00 1990 Tupelanzahl: 186 Speicherstruktur: HEAP Pages: 1 + 61 Relationentyp: Nutzerrelation Domaenname Typ Laenge Schluessel -------------------------------------------- bnr i 4 lnr i 2 titel c 10 aufg i 2 deskr c 65 rtyp c 8 bsyst c 8 prspr c 8 dbspr c 8 pfterm i 2 nutzbg i 2 ppznr c 13 regnr c 19 aufw i 2 projzt i 2 nnkost i 2 nutz i 2 -------------------------------------------- Aus einer u"bergeordneten Shell-Prozedur wird die Prozedur ccccaaaallll____ssssaaaacccchhhhgggg gerufen. Diese Prozedur verwendet zwei Files zur direkten Steuerung von ING_DB . Sofern keine C-Statements fu"r eine Komandofolge gebraucht werden und das entsprechende Menue relativ selten benutzt wird, ist das ein sehr eleganter Weg zur Ablaufsteuerung. Die beiden Files ssssaaaacccchhhhgggg____iiiinnnn1111 und ssssaaaacccchhhhgggg____iiiinnnn2222 fungieren als Eingabefiles fu"r ING_DB . ------------------------------------------------------------- quel hardsoft < sachg_in1 rd hardsoft sachg mv desc sachg_d quel hardsoft < sachg_in2 rg -dsachg_d -isachg_r -fsachg_f -osachg_o ------------------------------------------------------------- Zuerst das File sachg_in1 - aus den Relationen aaaannnnsssscccchhhhrrrriiiifffftttt und ssssoooofffftttt1111 sollen einige Spalten herausgezogen werden, in eine tempora"re Relation ssssaaaacccchhhhgggg gespeichert und nach der Betriebs- nummer und Aufgabe - als Gruppierungsbegriffe - sortiert werden. Mit ccccooooppppyyyy iiiinnnnttttoooo wird anschliessend ein UNIX -File ING_DB 6.3/3 Juni 19, 1989 UUUUNNNNIIIIXXXX Beispiele - 343 - RRRREEEEPPPPOOOORRRRTTTT erzeugt. Da in der Shell-Prozedur noch ein Deskription File zu erzeugen ist, muss das destroy-Kommando in einem zweiten Eingabefile stehen. ------------------------------------------------------------- range of a is anschrift range of s is soft1 retrieve into sachg (s.bnr, a.kubez, s.titel, s.aufg) \ where s.bnr=a.bn \p\g modify sachg() to heapsort on bnr, aufg \p\g copy sachg() into "/mnt/ing_db/work/kag/sachg_f" \p\g \q ------------------------------------------------------------ Das Eingabefile ssssaaaacccchhhhgggg____iiiinnnn2222 hat lediglich die Aufgabe, die Relation ssssaaaacccchhhhgggg wieder zu loschen, da sie bei einem weiteren Lauf zu diesem Menue sto"rt. ------------------------------------------------------------ destroy sachg \p\g \q --------------------------------------------------------------- Das Report Programm listet betriebsweise aus, welche Software nach Aufgaben geordnet verfu"gbar ist. Der Pro- grammtitel soll in der entsprechenden Spalte erscheinen, wobei nur dann eine neue Zeile eingerichtet werden darf, wenn mehrere Titel zu einem Sachgebiet (Aufgabe) auftreten. Die Kurzbezeichnung zum Betrieb ist auf zwei Zeilen zu ver- teilen. -------------------------------------------------------------- report sachg_r with columns 130 lines 57 all lines 66 big /* Prozeduren */ define position = 1 define b_spalte = 2 /* Variable */ define v_pos = 1 /* Domaenen */ define s_bnr = 1 define s_kubez = 2 define s_titel = 3 define s_aufg = 4 define #s_bnr = integer 4 ING_DB 6.3/3 Juni 19, 1989 UUUUNNNNIIIIXXXX Beispiele - 344 - RRRREEEEPPPPOOOORRRRTTTT define #s_kubez = char 48 define #s_titel = char 10 define #s_aufg = integer 2 as on pagebegin do 'ARBEITSKREIS >>>COMPUTEREINSATZ IN DER SBW<<<' 'BEZIRKSGELEITETE INDUSTRIE' \115 date 0 '*' 7 ' SOFTWARE NACH SACHGEBIETEN ' '*' 7 \114 'Seite: ' integer @3 page \n 'BETRIEB' \n \10 'GRUMI ' 'INVEST ' 'MATERIAL ' 'AKR ' 'LEISTUNG ' 'WAREN ' 'KOSTEN ' 'FINANZEN ' 'NUTZEN ' 'BES./ANAL ' 'BERICHTSW.' 'SONSTIGES ' \n \10 ':=========' 12 \n2 end proc position if #s_aufg > 0 then set $v_pos = #s_aufg else set $v_pos = 12 end if set $v_pos *= 10 col $v_pos char @10 #s_titel return proc b_spalte \10 ':' \20 ':' \30 ':' \40 ':' \50 ':' \60 ':' \70 ':' \80 ':' \90 ':' \100 ':' \110 ':' \120 ':' return on batchline do call b_spalte end ING_DB 6.3/3 Juni 19, 1989 UUUUNNNNIIIIXXXX Beispiele - 345 - RRRREEEEPPPPOOOORRRRTTTT for all do for one do if groupbegin s_bnr then \n char batch 24 @48 #s_kubez \n2 end if if ! groupend s_aufg then \n end if call position if groupend s_aufg then \n \10 ':..............' 12 \n if line > 56 then \n4 end if end if end one end all ; ------------------------------------------------------------ Die Druckliste ist etwa 127 Zeichen breit, um einen Einblick zur Gestaltung zu geben, wurde bei Spalte 60 abgebrochen. Es werden nur 40 Originaldruckzeilen gezeigt. Da das File ssssaaaacccchhhhgggg____oooo im ASCII-Format vorliegt, ist die Aufbereitung mit dem Editor mu"helos mo"glich, ebenso wie das Einfu"gen in den Quelltext dieses Kapitels. ING_DB 6.3/3 Juni 19, 1989 UUUUNNNNIIIIXXXX Beispiele - 346 - RRRREEEEPPPPOOOORRRRTTTT ------------------------------------------------------------- ARBEITSKREIS >>>COMPUTEREINSATZ IN DER SBW<<< BEZIRKSGELEITET ****** SOFTWARE NACH SACHGEBIETEN ****** BETRIEB GRUMI INVEST MATERIAL AKR LEISTUNG WA :=========:=========:=========:=========:=========:= KOMBINAT ERZGEBIRGISCHE VOLKSKUNST OLBERNHAU : : : : AKR :=========:=========:=========:=========:=========:= KOMBINAT ELEKTROGERAETE FUERSTENWALDE : : : : GRUMI BILANZ DPA HOLZERF MFOKO MP1801V MWA146 MWKBIL AKR SORTPLA RE :.........:.........:.........:.........:.........:. VEB ELSTERMODE ELSTERWERDA : : : : LISTEW1 LEIRE :.........:.........:.........:.........:.........:. INGENEURBUERO U.RATIONALIS.COTTBUS : : : : MARKE :.........:.........:.........:.........:.........:. ------------------------------------------------------------ ING_DB 6.3/3 Juni 19, 1989 UUUUNNNNIIIIXXXX