home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / TELECOM / tterm_src.lzh / transfer.c < prev   
Text File  |  1996-03-04  |  7KB  |  302 lines

  1. /*********************************************************************
  2. transfer.c
  3. *********************************************************************/
  4. #include "common.h"
  5. #include <process.h>
  6. #include <module.h>
  7.  
  8. #define EXTENSION ".xyt"
  9. #define DIRECTORY "/dd/USR/TTERM/"
  10. #define NONAME   0
  11. #define FILENAME 1
  12. #define LISTNAME 2
  13.  
  14. int typeflg=NONAME;
  15.  
  16. char errstrng[128];
  17. char transfile[128],
  18.     logfile[128],
  19.     transtr[128],
  20.     *logstr=errstrng,
  21.     portstr[16],
  22.     *arglist[5];
  23.  
  24. mh_com 
  25.     *xyt_head;      /* XY_PROG module header */
  26.  
  27. extern char
  28.     **_environ;
  29.  
  30.  
  31. /*********************************************************************
  32. SET the LOG FILE name
  33. *********************************************************************/
  34. SetLogFile()
  35. {
  36. char *t;
  37.  
  38. strcpy(logfile,DIRECTORY);
  39.  
  40. t=getenv("USER");     /* get the user name */
  41. if(t == 0)
  42.     t="generic";
  43. strcat(logfile,t);
  44. strcat(logfile,EXTENSION);
  45. tprint("Logfile is "); tprint(logfile); tprint("\012\n");
  46. }
  47.  
  48. /*********************************************************************
  49. LOAD the TRANSFER program - return 0 on successful load/link
  50. *********************************************************************/
  51. LoadTransfer(name)
  52. char *name;         /* module name */
  53. {
  54. char nameptr[128], 
  55.     *mod_name; 
  56. void *mod_exec;     /* execution entry point */
  57. u_int16
  58.     attr_rev,
  59.     type_lang=0;
  60.  
  61. mod_name=name;      /* OS9000 may modify this pointer */
  62. xyt_head=0;
  63.  
  64. /* first try linking to module */
  65. if(_os_link(&mod_name,&xyt_head,&mod_exec,&type_lang,&attr_rev) == 0)
  66.     return 0;
  67. /* OK maybe we can load the module */
  68. if(_os_loadp(mod_name,0,nameptr,&xyt_head) == 0)
  69.     return 0;
  70.  
  71. /* guess it just ain't avaliable */
  72. fprintf(stderr,"Unable to load transfer module \"%s\"!%c\012\n",name,BELL);
  73. return 1;
  74. }
  75.  
  76. /*********************************************************************
  77. UNLOAD the TRANSFER program
  78. *********************************************************************/
  79. UnloadTransfer()
  80. {
  81. if(xyt_head)        /* if sucessfully linked to */
  82.     _os_unlink(xyt_head);
  83. }
  84. /*********************************************************************
  85. FILE TRANSFER
  86. *********************************************************************/
  87. void FileTransfer(prog,port)
  88. char *prog;             /* program name */
  89. char *port;             /* modem port */
  90. {
  91. int c;
  92.  
  93. if(xyt_head == 0)
  94.     {
  95.     tprint("\012\nTransfer program unavailable!\012\n");
  96.     return;
  97.     }
  98.  
  99. tprint("\n\012<S>end or <R>eceive? ");
  100. c=GetOneChar();
  101.  
  102. switch(c)
  103.     {
  104.     case 'r':
  105.     case 'R':
  106.         ReceiveFiles(prog,port);
  107.         break;
  108.     case 's':
  109.     case 'S':
  110.         SendFiles(prog,port);
  111.         break;
  112.     default:
  113.         t_puts("\n\012ABORTED");
  114.         break;
  115.     }
  116. t_puts("\n\012**** Transfer Complete ****\n\012");
  117. }
  118.  
  119. /*********************************************************************
  120. RECEIVE FILES from host
  121. *********************************************************************/
  122. ReceiveFiles(prog,port)
  123. char *prog;
  124. char *port;
  125. {
  126. sprintf(logstr,"-l=%s",logfile);
  127. sprintf(portstr,"-t=%s",port);
  128. arglist[0]=prog;
  129. arglist[1]=logstr;
  130. arglist[2]=portstr;
  131. arglist[3]=0;
  132. DoTransfer();
  133. }
  134.  
  135. /*********************************************************************
  136. SEND FILES to host
  137. *********************************************************************/
  138. SendFiles(prog,port)
  139. char *prog;
  140. char *port;
  141. {
  142. switch(typeflg)
  143.     {
  144.     case NONAME:
  145.         t_puts("\n\012You Must set the file name first\n\012");
  146.         return 0;
  147.     case FILENAME:
  148.         strcpy(transtr,transfile);
  149.         break;
  150.     case LISTNAME:
  151.         sprintf(transtr,"-z=%s",transfile);
  152.         break;
  153.     default:
  154.         return 0;
  155.     }
  156. sprintf(portstr,"-t=%s",port);
  157. sprintf(logstr,"-l=%s",logfile);
  158. arglist[0]=prog;
  159. arglist[1]=transtr;
  160. arglist[2]=portstr;
  161. arglist[3]=logstr;
  162. arglist[4]=0;
  163. DoTransfer();
  164. }
  165.  
  166. /*********************************************************************
  167. DO the TRANSFER
  168. *********************************************************************/
  169. DoTransfer()
  170. {
  171. process_id process;
  172. status_code status;
  173.  
  174. ReleaseModemSignal();
  175. cook_io();
  176. errno=_os_exec(_os_fork,0,3,arglist[0],arglist,_environ,0,&process,0,0);
  177. if(errno != 0)
  178.     {
  179.     sprintf(errstrng,"Unable to initiate transfer.  Error # %d\n\012",
  180.         errno);
  181.     tprint(errstrng);
  182.     }
  183. _os_wait(&process,&status);
  184. raw_io();
  185. }
  186.  
  187. /*********************************************************************
  188. SET the TRANSFER FILE - filename to transfer 
  189. *********************************************************************/
  190. SetTransferFile()
  191. {
  192. t_puts("File Name: ");
  193. if(GetFileName() == 0)
  194.     {
  195.     sprintf(errstrng,"Transfer file set to \"%s\"\n\012",transfile);
  196.     tprint(errstrng);
  197.     typeflg=FILENAME;
  198.     }
  199. else
  200.     {
  201.     tprint("Aborted!\n\012");
  202.     typeflg=NONAME;
  203.     }
  204. }
  205.  
  206. /*********************************************************************
  207. SET the FILE LIST - get the file to read for batch transfers
  208. *********************************************************************/
  209. SetFileList()
  210. {
  211. t_puts("List Name: ");
  212. if(GetFileName() == 0)
  213.     {
  214.     if(CheckListFile() == 0)
  215.         {
  216.         sprintf(errstrng,"Transfer file names will be read from \"%s\"\n\012",transfile);
  217.         tprint(errstrng);
  218.         typeflg=LISTNAME;
  219.         return 0;
  220.         }
  221.     }
  222. t_puts("Aborted!\n\012");
  223. typeflg=NONAME;
  224. }
  225.  
  226. /*********************************************************************
  227. CHECK LIST FILE to be sure it will work
  228.     returns 0 if file looks good or bad file accepted
  229. *********************************************************************/
  230. CheckListFile()
  231. {
  232. static char *wheel="\\|/-";
  233. char pathlist[128];
  234. int good,total,wheelie,
  235.     offset;
  236. FILE *fpath;
  237. path_id path;
  238.  
  239. fpath=fopen(transfile,"r");
  240. if(fpath == 0)              /* access already chacked */
  241.     return 1;
  242.  
  243. t_puts("\012\nChecking File List...");
  244. good=total=wheelie=0;
  245. while(fgets(pathlist,128,fpath) != 0)
  246.     {
  247.     ToScreen(wheel[wheelie++]);
  248.     ToScreen(0x08);
  249.     if(wheelie > 3) wheelie=0;
  250.     offset=strlen(pathlist)-1;      /* clear the CR */
  251.     if(offset < 1)                  /* if a null entry */
  252.         continue;
  253.     pathlist[offset]=0;
  254.     if(_os_open(pathlist,FAM_READ,&path) == 0)
  255.         {
  256.         good++;
  257.         _os_close(path);
  258.         }
  259.     total++;
  260.     }
  261. fclose(fpath);
  262.  
  263. if(good == 0)       /* if no good files */
  264.     {
  265.     t_puts("No valid file names found!\012\n");
  266.     return 1;
  267.     }
  268. else if(good != total)
  269.     {
  270.     sprintf(errstrng,"Only %d of %d are valid. Accept anyway?",
  271.         good,total);
  272.     if(getans(errstrng) == TRUE)
  273.         return 0;
  274.     else
  275.         return 1;
  276.     }
  277. else
  278.     {
  279.     sprintf(errstrng,"%d valid files names found\012\n",total);
  280.     tprint(errstrng);
  281.     }
  282. return 0;
  283. }
  284.  
  285. /*********************************************************************
  286. GET the actual FILE NAME
  287. *********************************************************************/
  288. GetFileName()
  289. {
  290. path_id path;
  291.  
  292. t_gets(transfile,sizeof(transfile));
  293. if(_os_open(transfile,FAM_READ,&path) != 0)
  294.     {
  295.     t_puts("\n\012Unable to access requested file!\n\012");
  296.     return 1;
  297.     }
  298. _os_close(path);
  299. return 0;
  300. }
  301.  
  302.