Loading...
Select Version
The following C program has the functions listed below:
Open a subroutine access (INIT)
Incorporate a file as a member (ADD)
Search the directory for a member (TOCPRIM)
Open a member (OPENGET)
Read a member record by record (GET)
Close the member (CLOSE)
Terminate a subroutine access (END)
To make the example easier to understand, comments have been included.
/* ********************************************************************* */ /* */ /* EXAMPLE OF LMS AS A SUBROUTINE */ /* */ /* ********************************************************************* */ #include <stdlib.h> #include <stdio.h> #include <string.h> /* INCLUDE member for copy and other functions */ #include <lms.h> /* INCLUDE member for LMS structures */ main() { /* Assign and initialize parameter structures */ struct lmsc_cb cb; /* Assign parameter structures for cb */ struct lmsc_ed ed; /* Assign parameter structures for ed */ struct lmsc_em em; /* Assign parameter structures for em */ struct lmsc_ei ei; /* Assign parameter structures for ei */ struct lmsc_fd fd; /* Assign parameter structures for fd */ struct lmsc_ld ld; /* Assign parameter structures for ld */ struct lmsc_rd rd; /* Assign parameter structures for rd */ int tid=1; /* Initialize the TOC identification */ char buffer[200]; /* Buffer length of ER; required for GET */ char temp[100]; /* Buffer for copying for output */ char * ptemp; /* Pointer to this buffer */ cb = lmsc_cb_proto; /* Initialize control block CB */ ed = lmsc_ed_proto; /* Initialize member description */ em = lmsc_em_proto; /* Initialize member mask */ ei = lmsc_ei_proto; /* Initialize member information */ fd = lmsc_fd_proto; /* Initialize file information */ ld = lmsc_ld_proto; /* Initialize library description */ rd = lmsc_rd_proto; /* Initialize record description */ /* ******************************************************************** */ /* */ /* 1. Open a subroutine access with INIT */ /* */ /* ******************************************************************** */ cb.function = LMSUP_INIT ; cb.subcode = LMSUP_UNUSED ; lmsup1(&cb); /* Evaluate return code */ if (cb.retcode != LMSUP_OK) { /* An error has occurred - issue message and terminate program */ printf("Error during initialization \n"); exit(1); } else printf("Initialization successfully terminated \n"); /* ******************************************************************** */ /* */ /* 2. Incorporate a file with ADD */ /* */ /* ******************************************************************** */ cb.function=LMSUP_ADD; cb.subcode =LMSUP_UNUSED; /* Assign the necessary values for ADD */ /* */ /* Note that the arguments to be copied must end with a blank */ /* if they are shorter than the target field. */ strfill(ld.name,"#BSP.LIB.C",sizeof(ld.name)); /* Assign library name */ strfill(fd.name,"#BSP.IN.INPUT",sizeof(fd.name)); /* Assign file name */ strfill(ed.name,"BSP.ELEMENT",sizeof(ed.name)); /* Assign member name */ strfill(ed.version,"001",sizeof(ed.version)); /* Assign member version */ strfill(ed.typ,"S",sizeof(ed.typ)); /* Assign member type */ /* Program call */ lmsup1(&cb,&fd,&ld,&ed); /* Evaluate return code */ if (cb.retcode != LMSUP_OK) { /* An error has occurred - issue message and terminate program */ printf("Error when incorporating member \n"); exit(1); } else printf("Member incorporated \n"); /* ******************************************************************** */ /* */ /* 3. Search for a member in the directory with TOCPRIM */ /* */ /* ******************************************************************** */ cb.function = LMSUP_TOCPRIM; cb.subcode = LMSUP_LONG; cb.overwrite =LMSUP_YES; /* Assign the necessary values for TOCPRIM */ /* */ /* Note that the arguments to be copied must end with a blank */ /* if they are shorter than the target field. */ strfill(em.name,"BSP.ELEMENT",sizeof(em.name)); /* Assign member name */ strfill(em.version,"001",sizeof(em.version)); /* Assign member version */ strfill(em.typ,"S",sizeof(em.typ)); /* Assign member type */ /* Program call */ lmsup1(&cb,&tid,&ei,&ld,&em); /* Evaluate return code */ if (cb.retcode != LMSUP_OK) { /* An error has occurred - issue message and terminate program */ printf("Error when searching for member \n"); exit(1); } else { printf("Member found:\n"); /* Display type */ 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. Open a member with OPENGET */ /* */ /* ******************************************************************** */ cb.function = LMSUP_OPEN_GET; cb.subcode = LMSUP_UNUSED ; /* Assign the necessary values for TOCPRIM */ /* */ /* Note that the arguments to be copied must end with a blank */ /* if they are shorter than the target field. */ strfill(ld.name,"#BSP.LIB.C",sizeof(ld.name)); /* Assign library name */ strfill(ed.name,"BSP.ELEMENT",sizeof(ed.name)); /* Assign member name */ strfill(ed.version,"001",sizeof(ed.version)); /* Assign member version */ strfill(ed.typ,"S",sizeof(ed.typ)); /* Assign member type */ /* Program call */ lmsup1(&cb,&rd,&ld,&ed); /* Evaluate return code */ if (cb.retcode != LMSUP_OK) { /* An error has occurred - issue message and terminate program */ printf("Error when opening member \n"); exit(1); } else printf("Member opened \n"); /* ******************************************************************** */ /* */ /* 5. Read a record with GET */ /* */ /* ******************************************************************** */ do { cb.function = LMSUP_GET; cb.subcode = LMSUP_SEQ; /* Assign the necessary values for GET */ rd.buffer_len = sizeof(buffer)-1; /* Program call */ lmsup1(&cb,&rd,buffer); switch (cb.retcode) /* Evaluate return code */ { case LMSUP_OK: /* Output record */ buffer[rd.record_len]='\0'; printf("%s\n",buffer+4); break; case LMSUP_TRUNC: /* Record truncated */ printf("Record buffer too short\n"); break; case LMSUP_EOF: /* Member end */ break; default: /* An error has occurred - issue message */ printf("Error when reading record \n"); break; } } while (cb.retcode == LMSUP_OK); /* ******************************************************************** */ /* */ /* 6. Close a member with CLOSE */ /* */ /* ******************************************************************** */ cb.function = LMSUP_CLOSE; cb.subcode = LMSUP_UNUSED; /* Program call */ lmsup1(&cb,&rd); /* Evaluate return code */ if (cb.retcode != LMSUP_OK) { /* An error has occurred - issue message and terminate program */ printf("Error when closing member \n"); exit(1); } else printf("Member closed \n"); /* ******************************************************************** */ /* */ /* 7. Terminate subroutine access with END */ /* */ /* ******************************************************************** */ cb.function = LMSUP_END; cb.subcode = LMSUP_UNUSED ; /* Program call */ lmsup1(&cb); /* Evaluate return code */ if (cb.retcode != LMSUP_OK) { /* An error has occurred - issue message and terminate program */ printf("Error during termination \n"); exit(1); } else printf("Subroutine access terminated \n"); } /* End of the main program */