home *** CD-ROM | disk | FTP | other *** search
/ Shareware 1 2 the Maxx / sw_1.zip / sw_1 / PROGRAM / PCL4C30.ZIP / BBSFILE.C < prev    next >
Text File  |  1992-01-04  |  6KB  |  201 lines

  1. /*  -- bbsfile.c --
  2. **
  3. **  file subsystem for bbs.c
  4. */
  5.  
  6. #include <stdio.h>
  7. #include "pcl4c.h"
  8. #include "ascii.h"
  9. #include "bbs.h"
  10.  
  11. extern int TransferFlag;
  12. extern char Buffer[1024];
  13. extern char Directory[65];
  14.  
  15. char DTAbuffer[128];
  16. char *Protocol[4] = {"","XMODEM","YMODEM",""};
  17.  
  18. int TopMenu(Port)
  19. int Port;
  20. {int Code;
  21.  /* begin */
  22.  while(1)
  23.     {PutCRLF(Port);
  24.      PutString(Port,"** Top Menu **");
  25.      PutString(Port,"0) EXIT");
  26.      PutString(Port,"1) Files");
  27.      PutString(Port,"-->Choose 0 or 1: ");
  28.      while(1)
  29.         {if(SioBrkKey()) MyExit(0,"Aborted by user");
  30.          Code = GetChar(Port,2*SECONDS);
  31.          if(Code<-1) MyExit(Code,"Error in user response");
  32.          if(Code>-1) break;
  33.         }
  34.      if((char)Code>='0' && (char)Code<='1') return(Code-'0');
  35.      if(Code!=CAN) PutString(Port,"ERROR: Must answer 0 or 1 !");
  36.     } /* end while */
  37. } /* end TopMenu */
  38.  
  39. int FileMenu(Port)
  40. int Port;
  41. {int Code;
  42.  /* begin */
  43.  while(1)
  44.     {PutCRLF(Port);
  45.      PutString(Port,"** File Menu **");
  46.      PutString(Port,"0) EXIT menu");
  47.      PutString(Port,"1) List Download Files");
  48.      PutString(Port,"2) DownLoad File");
  49.      PutString(Port,"3) Upload File");
  50.      PutString(Port,"-->Choose 0 to 3: ");
  51.      while(1)
  52.         {if(SioBrkKey()) MyExit(0,"Aborted by user");
  53.          Code = GetChar(Port,2*SECONDS);
  54.          if(Code<-1) MyExit(Code,"Error in user response");
  55.          if(Code>-1) break;
  56.         }
  57.      if((char)Code>='0' && (char)Code<='3') return(Code-'0');
  58.      if(Code!=CAN) PutString(Port,"ERROR: Must answer 0 to 3 !");
  59.    } /* end while */
  60. } /* end FileMenu */
  61.  
  62. int ProtocolMenu(Port)
  63. int Port;
  64. {int i;
  65.  int Code;
  66.  /* begin */
  67.  while(1)
  68.    {PutCRLF(Port);
  69.     PutString(Port,"** Protocol **");
  70.     PutString(Port,"0) EXIT Menu");
  71.     PutString(Port,"1) XMODEM");
  72.     PutString(Port,"2) YMODEM");
  73.     PutString(Port,"-->Choose 0 to 2: ");
  74.     Code = GetChar(Port,2*MINUTES);
  75.     if(Code<0) MyExit(Code,"Error in user response");
  76.     if((char)Code>='0' && (char)Code<='2') return(Code-'0');
  77.     PutString(Port,"ERROR: Must answer 0 to 2 !");
  78.    }
  79. } /* end ProtocolMenu */
  80.  
  81. int FileSystem(Port,Code)
  82. int Port;
  83. int Code;
  84. {int p;
  85.  char Filename[15];
  86.  char Temp[80];
  87.  int Status;
  88.  /* begin */
  89.  switch(Code)
  90.     {case 1: /* List Files */
  91.         /* list all downloadable files */
  92.         PutCRLF(Port);
  93.         PutString(Port,"*** Download Files are:");
  94.         if(!ChangeDir("DNLOAD"))
  95.            {SayError(Port,"Missing DNLOAD subdirectory");
  96.             break;
  97.            }
  98.         /* set DTA & find 1st file to list */
  99.         setDTA(DTAbuffer);
  100.         if(FindFirst("*.*"))
  101.            {/* list 1st file */
  102.             PutString(Port,&DTAbuffer[30]);
  103.             /* list remaining files */
  104.             while(FindNext()) PutString(Port,&DTAbuffer[30]);
  105.            }
  106.         ChangeDir(Directory);
  107.         PutString(Port,"*** end list");
  108.         PutCRLF;
  109.         break;
  110.      case 2: /* DownLoad files */
  111.         if(!ChangeDir("DNLOAD"))
  112.            {SayError(Port,"Missing DNLOAD subdirectory");
  113.             break;
  114.            }
  115.         /* get filename from user */
  116.         PutCRLF(Port);
  117.         PutString(Port,"Enter file name: ");
  118.         GetString(Port,Filename,13);
  119.         /* set DTA & find file */
  120.         setDTA(DTAbuffer);
  121.         if(!FindFirst(Filename))
  122.            {PutString(Port,"No such file");
  123.             ChangeDir(Directory);
  124.             break;
  125.            }
  126.         /* select protocol */
  127.         p = ProtocolMenu(Port);
  128.         if(p==0)
  129.            {ChangeDir(Directory);
  130.             break;
  131.            }
  132.         /* ready to start transfer */
  133.         sprintf(Temp,"Start your %s receiver",Protocol[p]);
  134.         PutString(Port,Temp);
  135.         TransferFlag = TRUE;
  136.         switch(p)
  137.            {
  138.             case 1: /* XMODEM */
  139.                Status = TxyModem(Port,&DTAbuffer[30],Buffer,FALSE,FALSE);
  140.                break;
  141.             case 2: /* YMODEM */
  142.                Status = TxyModem(Port,&DTAbuffer[30],Buffer,TRUE,TRUE);
  143.                if(!Status) break;
  144.                Filename[0] = '\0';
  145.                TxyModem(Port,Filename,Buffer,TRUE,TRUE);
  146.                break;
  147.            } /* end switch(p) */
  148.         TransferFlag = FALSE;
  149.         if(!Status)
  150.            {SioPutc(Port,CAN);
  151.             SioPutc(Port,CAN);
  152.            }
  153.         ChangeDir(Directory);
  154.         break;
  155.      case 3: /* UpLoad files */
  156.         if(!ChangeDir("UPLOAD"))
  157.            {SayError(Port,"Missing UPLOAD subdirectory");
  158.             break;
  159.            }
  160.         PutCRLF(Port);
  161.         PutString(Port,"Upload file");
  162.         /* select protocol */
  163.         p = ProtocolMenu(Port);
  164.         if(p==0)
  165.            {ChangeDir(Directory);
  166.             break;
  167.            }
  168.         /* need filename for all but YMODEM */
  169.         if(p==3) Filename[0] = '\0';
  170.         else
  171.            {PutCRLF(Port);
  172.             PutString(Port,"Enter file name: ");
  173.             GetString(Port,Filename,13);
  174.             setDTA(DTAbuffer);
  175.            } /* end else */
  176.         sprintf(Temp,"Start your %s transmitter",Protocol[p]);
  177.         PutString(Port,Temp);
  178.         TransferFlag = TRUE;
  179.         switch(p)
  180.            {
  181.             case 1: /* XMODEM */
  182.                Status = RxyModem(Port,Filename,Buffer,TRUE,FALSE);
  183.                break;
  184.             case 2: /* YMODEM */
  185.                do
  186.                   { /* get next file */
  187.                     Status = RxyModem(Port,Filename,Buffer,TRUE,TRUE);
  188.                   } while(Filename[0]!='\0');
  189.                break;
  190.            } /* end switch(p) */
  191.         TransferFlag = FALSE;
  192.         if(!Status)
  193.            {SioPutc(Port,CAN);
  194.             SioPutc(Port,CAN);
  195.            }
  196.         ChangeDir(Directory);
  197.         break;
  198.     } /* end switch(Code) */
  199.  SioRxFlush(Port);
  200. } /* end FileSystem */
  201.