The following program illustrates the file transfer process using the file transfer program interface on VM/CMS. To upload the file to an MVS/TSO host, the host option flag FXC_CMS must be changed to FXC_TSO and the host file name must be in MVS/TSO format. To upload the file to a CICS host, the host option flag FXC_CMS must be changed to FXC_CICS, and the file name must be in CICS format. To upload the file to a VSE host, the host option flag FXC_CMS must be changed to FXC_VSE, and the file name must be in VSE format.
/************************************************************ Program Name : cname - transfers a file using the file transfer Program Interface Module Name : cname.c Description : The following program uploads a file from the operating system to the VM/CMS host.The file is translated from ASCII to EBCDIC using the translation tables of the language specified in the session profile. The file overwrites the host file, if it exists. The transfer is performed via manual logon; that is, the user must establish a host session by logging on to the host and running the application from the e789 subshell. *************************************************************/
#include <stdio.h> #include <sys/types.h> #include <fxfer.h> #include <memory.h> #include <time.h> main() { extern char*malloc(); extern void free(); extern void exit(); extern unsigned int sleep(); struct fxc *xfer; struct fxs sxfer; timer_t tmptime; char *c_time; register int LOOP; /* indicates status not available yet */
LOOP = 0; xfer = (struct fxc *) malloc (1024); xfer->fxc_src = "samplefile"; /* Sys file to be uploaded */ xfer->fxc_dst = "test file a"; /* VM/CMS Host file name */
/*********************************************************** Set the transfer flags ***********************************************************/ xfer->fxc_opts.f_flags = 0; xfer->fxc_opts.f_flags | = FXC_UP; /* Upload file flag */ xfer->fxc_opts.f_flags | = FXC_TNL; /* Translate--EBCDIC */ xfer->fxc_opts.f_flags | = FXC_REPL; /* Replace host file if it exists */ xfer->fxc_opts.f_flags | = FXC_QUEUE; /* Transfer file, asynchronously */ xfer->fxc_opts.f_flags | = FXC_VAR; /* Variable host record format */
xfer->fxc_opts.f_flags | = FXC_CMS; /* VM/CMS host */ xfer->fxc_opts.f_logonid = (char *)0; /* Explicit file transfer */ xfer->fxc_opts.f_inputfld = (char *)0;/* VSE and CICS input field */ xfer->fxc_opts.aix_codepg = (char *)0;/* Alternate aix codeset */ xfer->fxc_opts.f_lrecl = 132; /* Logical record length */
/* from subshell of an already logged on emulator session */ if ( fxfer(xfer,(void *)0) == 0) { /* Send file transfer request */ for (;;) { switch(cfxfer(&sxfer)) { /* Check status */ case -1: LOOP = 0; printf("Status file not available due to\n"); printf(" status file I/O error\n"); /* Check the $HOME/hconerrors file for possible cause of error */ break; case 0: LOOP = 0; printf("Source file:%s\n", sxfer.fxs_src); printf("Destination file:%s\n", sxfer.fxs_dst); printf("Byte Count:%d\n", sxfer.fxs_bytcnt); printf("MSG No:%d\n", sxfer.fxs_stat); printf("ERROR if any:%d\n", sxfer.fxs_errno); printf ("Destination file creation time:%s\n", sxfer.fxs_ctime); break;
case -2: LOOP = 1; sleep(15); printf("Status not available yet\n"); break; } if ( !LOOP ) { break; } } } free(xfer); exit(1); }