Loading...
Select Version
Das folgende C-Programm beinhaltet folgende Funktionen:
- Eröffnen eines Unterprogrammzugriffs (INIT)
- Aufnehmen einer Datei als Element (ADD)
- Suchen eines Elementes in einem Inhaltsverzeichnis (TOCPRIM)
- Eröffnen eines Elementes (OPENGET)
- Satzweise Lesen eines Elementes (GET)
- Schließen des Elementes (CLOSE)
- Beenden des Unterprogrammzugriffs (END)
Zum besseren Verständnis wurden Kommentare in das Beispiel aufgenommen.
/* ********************************************************************* */ /* */ /* BEISPIEL FUER LMS ALS UNTERPROGRAMM */ /* */ /* ********************************************************************* */ #include <stdlib.h> #include <stdio.h> #include <string.h> /* include-Element für Kopierfunktionen u.a */ #include <lms.h> /* include-Element für die LMS-Strukturen */ main() { /* Bereitstellen und Initialisieren der Parameterstrukturen */ struct lmsc_cb cb; /* Bereitstellen der Parameterstrukturen für cb */ struct lmsc_ed ed; /* Bereitstellen der Parameterstrukturen für ed */ struct lmsc_em em; /* Bereitstellen der Parameterstrukturen für em */ struct lmsc_ei ei; /* Bereitstellen der Parameterstrukturen für ei */ struct lmsc_fd fd; /* Bereitstellen der Parameterstrukturen für fd */ struct lmsc_ld ld; /* Bereitstellen der Parameterstrukturen für ld */ struct lmsc_rd rd; /* Bereitstellen der Parameterstrukturen für rd */ int tid=1; /* Initialisieren der TOC-Identifikation */ char buffer[200]; /* Pufferlänge von ER; wird bei GET benötigt */ char temp[100]; /* Puffer zum Umkopieren fuer Ausgabe */ char * ptemp; /* Zeiger in diesen Puffer */ cb = lmsc_cb_proto; /* Kontrollblock CB initialisieren */ ed = lmsc_ed_proto; /* Elementbeschreibung initialisieren */ em = lmsc_em_proto; /* Elementmaske initialisieren */ ei = lmsc_ei_proto; /* Elementinformation initialisieren */ fd = lmsc_fd_proto; /* Dateiinformation initialisieren */ ld = lmsc_ld_proto; /* Bibliotheksbeschreibung initialisieren */ rd = lmsc_rd_proto; /* Satzbeschreibung initialisieren */ /* ******************************************************************** */ /* */ /* 1. Eröffnen des Unterprogrammzugriffs mit INIT */ /* */ /* ******************************************************************** */ cb.function = LMSUP_INIT ; cb.subcode = LMSUP_UNUSED ; lmsup1(&cb); /* Abfrage des Returncodes */ if (cb.retcode != LMSUP_OK) { printf("Fehler beim Initialisieren\n"); exit(1); } else printf("Initialisieren erfolgreich beendet \n"); /* ******************************************************************** */ /* */ /* 2. Aufnehmen eines Elementes mit ADD */ /* */ /* ******************************************************************** */ cb.function=LMSUP_ADD; cb.subcode =LMSUP_UNUSED; cb.overwrite =LMSUP_YES; /* Bereitstellen der benötigten Werte für ADD */ /* */ /* Es ist zu beachten, dass die zu kopierenden Argumente mit einem */ /* Blank enden müssen, falls sie kürzer als das Zielfeld sind. */ strfill(ld.name,"#BSP.LIB.C",sizeof(ld.name)); /* Bibliotheksname bereitstellen */ strfill(fd.name,"#BSP.IN.INPUT",sizeof(fd.name)); /* Dateiname bereitstellen */ strfill(ed.name,"BSP.ELEMENT",sizeof(ed.name)); /* Elementname bereitstellen */ strfill(ed.version,"001",sizeof(ed.version)); /* Elementversion bereitstellen */ strfill(ed.typ,"S",sizeof(ed.typ)); /* Elementtyp bereitstellen */ /* Programmaufruf */ lmsup1(&cb,&fd,&ld,&ed); /* Abfrage des Returncodes */ if (cb.retcode != LMSUP_OK) { /* Es ist ein Fehler aufgetreten - Meldung und Programm beenden */ printf("Fehler beim Element aufnehmen \n"); exit(1); } else printf("Element aufgenommen \n"); /* ******************************************************************** */ /* */ /* 3. Suchen eines Elementes im Inhaltsverzeichnis mit TOCPRIM */ /* */ /* ******************************************************************** */ cb.function = LMSUP_TOCPRIM; cb.subcode = LMSUP_LONG; /* Bereitstellen der benötigten Werte für TOCPRIM */ /* */ /* Es ist zu beachten, dass die zu kopierenden Argumente mit einem */ /* Blank enden müssen, falls sie kürzer als das Zielfeld sind. */ strfill(em.name,"BSP.ELEMENT",sizeof(em.name)); /* Elementname bereitstellen */ strfill(em.version,"001",sizeof(em.version)); /* Elementversion bereitstellen */ strfill(em.typ,"S",sizeof(em.typ)); /* Elementtyp bereitstellen */ /* Programmaufruf */ lmsup1(&cb,&tid,&ei,&ld,&em); /* Abfrage des Returncodes */ if (cb.retcode != LMSUP_OK) { /* Es ist ein Fehler aufgetreten - Meldung und Programm beenden */ printf("Fehler beim Element suchen \n"); exit(1); } else { printf("Elementsuche erfolgreich:\n"); /* display Typ */ strncpy(temp,ei.typ,sizeof(ei.typ)); ptemp = index(temp,' '); if (ptemp) *ptemp = '\0'; printf("typ %s\n",temp); /* display Name */ strncpy(temp,ei.name,sizeof(ei.name)); ptemp = index(temp,' '); if (ptemp) *ptemp = '\0'; printf("name %s\n",temp); /* display Version */ strncpy(temp,ei.version,sizeof(ei.version)); ptemp = index(temp,' '); if (ptemp) *ptemp = '\0'; printf("version %s\n",temp); /* display Date */ strncpy(temp,ei.user_date,sizeof(ei.user_date)); ptemp = index(temp,' '); if (ptemp) *ptemp = '\0'; printf("user-date %s\n\n",temp); } /* ******************************************************************** */ /* */ /* 4. Eröffnen eines Elementes mit OPENGET */ /* */ /* ******************************************************************** */ cb.function = LMSUP_OPEN_GET; cb.subcode = LMSUP_UNUSED ; /* Bereitstellen der benötigten Werte für OPENGET */ /* */ /* Es ist zu beachten, dass die zu kopierenden Argumente mit einem */ /* Blank enden müssen, falls sie kürzer als das Zielfeld sind. */ strfill(ld.name,"#BSP.LIB.C",sizeof(ld.name)); /* Bibliotheksname bereitstellen */ strfill(ed.name,"BSP.ELEMENT",sizeof(ed.name)); /* Elementname bereitstellen */ strfill(ed.version,"001",sizeof(ed.version)); /* Elementversion bereitstellen */ strfill(ed.typ,"S",sizeof(ed.typ)); /* Elementtyp bereitstellen */ /* Programmaufruf */ lmsup1(&cb,&rd,&ld,&ed); /* Abfrage des Returncodes */ if (cb.retcode != LMSUP_OK) { /* Es ist ein Fehler aufgetreten - Meldung und Programm beenden */ printf("Fehler beim Element oeffnen \n"); exit(1); } else printf("Element eroeffnet \n"); /* ******************************************************************** */ /* */ /* 5. Lesen eines Satzes mit GET in Schleife */ /* */ /* ******************************************************************** */ do { cb.function = LMSUP_GET; cb.subcode = LMSUP_SEQ; /* Bereitstellen der benoetigten Werte fuer GET */ rd.buffer_len = sizeof(buffer)-1; /* Programmaufruf */ lmsup1(&cb,&rd,buffer); switch (cb.retcode) /* Abfrage des Returncodes */ { case LMSUP_OK: /* Ausgeben des Satzes */ buffer[rd.record_len]='\0'; printf("%s\n",buffer+4); break; case LMSUP_TRUNC: /* Satz abgeschnitten */ printf("Satzpuffer zu kurz\n"); break; case LMSUP_EOF: /* Element Ende */ break; default: /* Es ist ein Fehler aufgetreten - Meldung */ printf("Fehler beim Satz lesen \n"); break; } } while (cb.retcode == LMSUP_OK); /* ******************************************************************** */ /* */ /* 6. Schließen eines Elementes mit CLOSE */ /* */ /* ******************************************************************** */ cb.function = LMSUP_CLOSE; cb.subcode = LMSUP_UNUSED; /* Programmaufruf */ lmsup1(&cb,&rd); /* Abfrage des Returncodes */ if (cb.retcode != LMSUP_OK) { /* Es ist ein Fehler aufgetreten - Meldung und Programm beenden */ printf("Fehler beim Element schließen \n"); exit(1); } else printf("Element wieder geschlossen \n"); /* ******************************************************************** */ /* */ /* 7. Beenden des Unterprogrammzugriffs mit END */ /* */ /* ******************************************************************** */ cb.function = LMSUP_END; cb.subcode = LMSUP_UNUSED ; /* Programmaufruf */ lmsup1(&cb); /* Abfrage des Returncodes */ if (cb.retcode != LMSUP_OK) { /* Es ist ein Fehler aufgetreten - Meldung und Programm beenden */ printf("Fehler beim Beenden \n"); exit(1); } else printf("Unterprogrammzugriff beendet \n"); } /* Ende des Hauptprogramms */