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 */