/*---------------------------------------------------------------------+ | Copyright (c) 1995, SAS Institute Inc. | | Unpublished - All Rights Reserved | | S A S / C S A M P L E | | | | NAME: SVC99C | | LANGUAGE: C | | PURPOSE: Demonstrate how to call SVC 99 from within a SAS/C | | application. | | NOTES: SVC99C is a C MAIN function that calls SVC 99 | | sub-functions, in: prefix.SAMPLE.C(SVC99). | | where "prefix" is the installation defined high-level | | qualifier for the SAS/C product. | | NOTES: You must customize the: #define DATA_SET_NAME | | The default value is: "your.dataset.name" | | MVS - | | COMPILE, LINK, EXECUTE: SUBMIT prefix.SAMPLE.AUX(SVC99CLG) | | TSO - | | COMPILE: LC370 CLIST | | LINK: CLK370 CLIST | | EXECUTE: CALL 'your.load.lib(SVC99C)' 'your.jcl.job(name)' | | CMS - N/A | | MISC NOTES: SVC99C sub-functions: | | | | 1- Alloc a new dataset, write to it, close & unalloc. | | 2- Delete the prev dataset with the unalc_ds func. | | 3- Alloc a new dataset, write to it, close & unalloc. | | 4- Alloc the prev dataset, write agin, close unalloc. | | 5- Allocate the INTRDR and submit a job to it. | | | +---------------------------------------------------------------------*/ #include #include #include "svc99h.h" #define decksize 80 #define maxdeck 9 #define DATA_SET_NAME "your.dataset.name" /*----------------------------------------------------------------+ | Test the svc99() function | +----------------------------------------------------------------*/ void main(int argc, char *argv[]) { FILE *fptr, /* ddname for TST DD */ *inf; /* ddname for job to submit */ int rc; /* Return code */ char buffer[81]; /* Buffer to read in job to submit */ char infile[50] = "DSN:"; /* Area for the infile name */ /*----------------------------------------------------------------+ *----------------------------------------------------------------| | 1- Alloc a new dataset, write to it, close & unalloc. | |----------------------------------------------------------------* +----------------------------------------------------------------*/ printf("********Test # 1*****************\n"); printf("1- Alloc a new dataset, write to it, close & unalloc.\n"); /* allocate the dataset to DD TST */ rc = alc_ds("TST", DATA_SET_NAME, "NEW", "CATLG", "DELETE", "TRK", 5, 2, 0, "FB", 80, 3200, "PS"); if (rc!=0) { printf("Error allocating TST\n"); exit(rc); } else printf("Allocation of DD TST Successful!\n"); /* Open the new file -- write */ fptr = fopen("TST","w"); if (fptr == NULL) { printf("Open on DD TST failed\n"); exit(12); } else printf("Open of DD TST Successful!\n"); /* Write a line to the file */ printf("Writing to DD TST.\n"); fprintf(fptr, "HELLO WORLD\n"); /* Close the new file */ rc = fclose(fptr); if (rc!=0) { printf("Error closing DD TST\n"); exit(rc); } else printf("Close of DD TST Successful!\n"); /* Unallocate DD TST */ rc = unalc_ds("TST","",""); if (rc!=0) { printf("Error unallocating TST\n"); exit(rc); } else printf("Unallocate of DD TST Successful!\n"); /*----------------------------------------------------------------+ *----------------------------------------------------------------| | 2- Delete the prev dataset with the unalc_ds func. | |----------------------------------------------------------------* +----------------------------------------------------------------*/ printf("********Test # 2*****************\n"); printf("2- Delete the prev dataset with the unalc_ds func.\n"); /* allocate the dataset to DD TST */ rc = alc_ds("TST", DATA_SET_NAME, "SHR", "DELETE", "DELETE", "", 0, 0, 0, "", 0, 0, ""); if (rc!=0) { printf("Error allocating TST\n"); exit(rc); } else printf("Allocation of DD TST Successful!\n"); /* Unallocate DD TST */ rc = unalc_ds("TST","",""); if (rc!=0) { printf("Error unallocating TST\n"); exit(rc); } else printf("Unallocate of DD TST Successful!\n"); /*----------------------------------------------------------------+ *----------------------------------------------------------------| | 3- Alloc a new dataset, write to it, close & unalloc. | |----------------------------------------------------------------* +----------------------------------------------------------------*/ printf("********Test # 3*****************\n"); printf("3- Alloc a new dataset, write to it, close & unalloc.\n"); /* allocate the dataset to DD TST */ rc = alc_ds("TST", DATA_SET_NAME, "NEW", "CATLG", "DELETE", "TRK", 5, 2, 0, "FB", 80, 3200, "PS"); if (rc!=0) { printf("Error allocating TST\n"); exit(rc); } else printf("Allocation of DD TST Successful!\n"); /* Open the new file -- write */ fptr = fopen("TST","w"); if (fptr == NULL) { printf("Open on DD TST failed\n"); exit(12); } else printf("Open of DD TST Successful!\n"); /* Write a line to the file */ printf("Writting to DD TST.\n"); fprintf(fptr, "HELLO WORLD\n"); /* Close the new file */ rc = fclose(fptr); if (rc!=0) { printf("Error closing DD TST\n"); exit(rc); } else printf("Close of DD TST Successful!\n"); /* Unallocate DD TST */ rc = unalc_ds("TST","",""); if (rc!=0) { printf("Error unallocating TST\n"); exit(rc); } else printf("Unallocate of DD TST Successful!\n"); /*----------------------------------------------------------------+ *----------------------------------------------------------------| | 4- Alloc the prev dataset, write agin, close unalloc. | |----------------------------------------------------------------* +----------------------------------------------------------------*/ printf("********Test # 4*****************\n"); printf("4- Alloc the prev dataset, write agin, close unalloc.\n"); /* allocate the dataset to DD TST */ rc = alc_ds("TST", DATA_SET_NAME, "SHR", "", "", "", 0, 0, 0, "", 0, 0, ""); if (rc!=0) { printf("Error allocating TST\n"); exit(rc); } else printf("Allocation of DD TST Successful!\n"); /* Open the existing file -- append */ fptr = fopen("TST","a"); if (fptr == NULL) { printf("Open on DD TST failed\n"); exit(12); } else printf("Open of DD TST Successful!\n"); /* Write a line to the file */ printf("Writting to DD TST.\n"); fprintf(fptr, "2nd HELLO WORLD\n"); /* Close the new file */ rc = fclose(fptr); if (rc!=0) { printf("Error closing DD TST\n"); exit(rc); } else printf("Close of DD TST Successful!\n"); /* unallocate DD TST */ rc = unalc_ds("TST","",""); if (rc!=0) { printf("Error unallocating DD TST\n"); exit(rc); } else printf("Unallocate of DD TST Successful!\n"); /*----------------------------------------------------------------+ *----------------------------------------------------------------| | 5- Allocate the INTRDR and submit a job to it. | |----------------------------------------------------------------* +----------------------------------------------------------------*/ printf("********Test # 5*****************\n"); printf("5- Allocate the INTRDR and submit a job to it\n"); if (argc > 1) { printf("Job to submit is in %s.\n", argv[1]); /* Submit the job */ strcat(infile, argv[1]); /* Put DSN: on infile name */ /* Alloc & open files */ inf = fopen(infile,"rb"); /* Open the INPUT jcl file */ if (inf == NULL) { printf("Open of the INPUT JCL failed\n"); exit(12); } rc = alc_intr("TST", "A");/* Dynamically alloc INTRDR */ if (rc!=0) { printf("Error allocating INTRDR\n"); exit(rc); } /* Open the INTRDR file */ fptr = afopen("TST","wb","","recfm=f,reclen=80"); if (fptr == NULL) { printf("Open of the JES Reader failed\n"); exit(12); } /* Read the input JCL and write it to the INTRDR */ while (fread(buffer, 80, 1, inf) != NULL) { fwrite(buffer, 80, 1, fptr); } /* Close files and deallocate the INTRDR */ rc = fclose(fptr); /* Close the INTRDR file */ if (rc!=0) { printf("Error closing JES reader\n"); exit(rc); } rc = unalc_ds("TST","KEEP",""); /* Deallocate the INTRDR */ if (rc!=0) { printf("Error releasing INTRDR\n"); exit(rc); } rc = fclose(inf); /* Close the INPUT JCL file */ printf("SVC99C: Job %s has been submitted!\n", argv[1]); } else { printf("No job was specified to submit.\n"); printf(" USAGE: svc99c [\'fully.quantified.jobds(job)\']\n"); } printf("SVC99C: All test complete.\n"); }