⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tinyftp.lst

📁 在89C51上实现TCPIP协议
💻 LST
字号:
C51 COMPILER V7.07   TINYFTP                                                               04/20/2004 18:04:41 PAGE 1   


C51 COMPILER V7.07, COMPILATION OF MODULE TINYFTP
OBJECT MODULE PLACED IN .\out\tinyftp.obj
COMPILER INVOKED BY: F:\Keil\C51\BIN\C51.EXE src\tinyftp.c BROWSE DEBUG OBJECTEXTEND PRINT(.\lst\tinyftp.lst) OBJECT(.\o
                    -ut\tinyftp.obj)

stmt level    source

   1          /*
   2           * Copyright (C) 2002 by TechiZ. All rights reserved.
   3           *
   4           * This program was written in Korean(Comment and some more).
   5           *
   6           * This program was developed by TechiZ(The Company name).
   7           * TechiZ want to share this program with you who loves the 8051 & the TCP/IP.
   8           * 
   9           * You MUST DOWNLOAD THIS CODE from TechiZ Homepage.
  10           * You DO NOT USE THIS CODE FOR COMMERCIAL PURPOSE.
  11           * This code is ONLY FREE FOR THE STUDY.
  12           * If you want more, send me E-mail.
  13           *
  14           * E-mail: techiz@techiz.com
  15           * ( Subject is : [T89C51RD2 & TinyTCP] bla~ bla bla.... )
  16           *
  17           * Homepage: http://www.techiz.com
  18           * 
  19           * You DO NOT DELETE THIS COPYRIGHT MESSAGE IN THE USING OF THIS CODE.
  20           *
  21           * In the using of this code, TechiZ does NOT GUARANTEE ABOUT WORKING WITHOUT ERROR.
  22           */
  23          
  24          /*
  25           * tinyftp.c - user ftp built on tinytcp.c
  26           *
  27           * Written March 31, 1986 by Geoffrey Cooper
  28           *
  29           * Copyright (C) 1986, IMAGEN Corporation
  30           *  "This code may be duplicated in whole or in part provided that [1] there
  31           *   is no commercial gain involved in the duplication, and [2] that this
  32           *   copyright notice is preserved on all copies.  Any other duplication
  33           *   requires written notice of the author (Geoffrey H. Cooper)."
  34           */
  35          
  36          #include "global.h"
*** ERROR C129 IN LINE 27 OF SRC\GLOBAL.H: missing ';' before 'buf_addr'
  37          #include "tinytcp.h"
  38          
  39          tcp_Socket ftp_ctl, ftp_data, ftp_data2;
  40          BYTE ftp_cmdbuf[120];
  41          WORD ftp_cmdbufi;
  42          
  43          BYTE ftp_outbuf[80];
  44          WORD ftp_outbufix, ftp_outbuflen;
  45              
  46          short ftp_rcvState;
  47          #define ftp_StateGETCMD     0       /* get a command from the user */
  48          #define ftp_StateIDLE       1       /* idle connection */
  49          #define ftp_StateINCOMMAND  2       /* command sent, awaiting response */
  50          #define ftp_StateRCVRESP    3       /* received response, need more data */
  51          
  52          char *ftp_script[7];
  53          int ftp_scriptline;
C51 COMPILER V7.07   TINYFTP                                                               04/20/2004 18:04:41 PAGE 2   

  54          char ftp_retrfile[80];
  55          BOOL ftp_echoMode;
  56          
  57          ftp_ctlHandler(s, dp, len)
  58              tcp_Socket *s;
  59              BYTE *dp;
  60              WORD len;
  61          {
  62              BYTE c, *bp, data[80];
  63              WORD i;
  64          
  65              if ( dp == 0 ) {
  66                  tcp_Abort(&ftp_data);
  67                  return;
  68              }
  69          
  70              do {
  71                  i = len;
  72                  if ( i > (sizeof data) ) i = sizeof data;
  73                  MoveW(dp, data, i);
  74                  len -= i;
  75                  bp = data;
  76                  while ( i-- > 0 ) {
  77                      c = *bp++;
  78                      if ( c != '\r' ) {
  79                          if ( c == '\n' ) {
  80                              ftp_cmdbuf[ftp_cmdbufi] = 0;
  81                              ftp_commandLine();
  82                              ftp_cmdbufi = 0;
  83                          } else if ( ftp_cmdbufi < (sizeof ftp_cmdbuf)-1 ) {
  84                              ftp_cmdbuf[ftp_cmdbufi++] = c;
  85                          }
  86                      }
  87                  }
  88              } while ( len > 0 );
  89          }
  90          
  91          ftp_commandLine()
  92          {
  93              print(ftp_cmdbuf);
  94              switch(ftp_rcvState) {
  95               case ftp_StateIDLE:
  96                  if ( ftp_cmdbuf[3] == '-' )
  97                      ftp_rcvState = ftp_StateRCVRESP;
  98                  break;
  99          
 100               case ftp_StateINCOMMAND:
 101                  if ( ftp_cmdbuf[3] == '-' )
 102                      ftp_rcvState = ftp_StateRCVRESP;
 103               case ftp_StateRCVRESP:
 104                  if ( ftp_cmdbuf[3] == ' ' )
 105                      ftp_rcvState = ftp_StateIDLE;
 106                  break;
 107              }
 108          }
 109          
 110          ftp_Abort()
 111          {
 112              tcp_Abort(&ftp_ctl);
 113              tcp_Abort(&ftp_data);
 114          }
 115          
C51 COMPILER V7.07   TINYFTP                                                               04/20/2004 18:04:41 PAGE 3   

 116          
 117          ftp_application()
 118          {
 119              char *s;
 120              char *dp;
 121              short i;
 122          
 123              i = -1;
 124          /*    
 125              if ( isina() ) {
 126                  i = busyina() & 0177;
 127          #ifdef DEBUG
 128                  if ( i == ('D' & 037) ) SysBug("Pause to DDT");
 129          #endif
 130                  if ( i == ('C' & 037) ) {
 131                      print("Closing...\r\n");
 132                      tcp_Close(&ftp_ctl);
 133                  }
 134              }
 135          */
 136              switch (ftp_rcvState) {
 137                case ftp_StateGETCMD:
 138           getcmd:if ( i != -1 ) {
 139                      ftp_outbuf[ftp_outbuflen] = 0;
 140                      switch (i) {
 141                          case 'H' & 037:
 142                          case 0177:
 143                              if ( ftp_outbuflen > 0 ) {
 144                                  ftp_outbuflen--;
 145                                  print("\010 \010\r\n");
 146                              }
 147                              break;
 148          
 149                          case 'R' & 037:
 150                              if ( ftp_echoMode )
 151                                  print("\r\nFtpCmd> ");
 152                                  print(ftp_outbuf);
 153                              break;
 154          
 155                          case 033:
 156                              ftp_echoMode = ! ftp_echoMode;
 157                              break;
 158          
 159                          case '\r':
 160                          case '\n':
 161          //                    busyouta('\n');
 162                              dp = &ftp_outbuf[ftp_outbuflen];
 163                              goto docmd;
 164          
 165                          default:
 166                              if ( i >= ' ' && (ftp_outbuflen < sizeof ftp_outbuf) ) {
 167                                  ftp_outbuf[ftp_outbuflen++] = i;
 168          //                        if ( ftp_echoMode ) busyouta(i);
 169                              }
 170                      }
 171                  }
 172                  break;
 173          
 174                case ftp_StateIDLE:
 175                  if ( ftp_scriptline < 0 ) {
 176                      ftp_rcvState = ftp_StateGETCMD;
 177                      ftp_echoMode = true;
C51 COMPILER V7.07   TINYFTP                                                               04/20/2004 18:04:41 PAGE 4   

 178                      ftp_outbuflen = 0;
 179                      print("FtpCmd> ");
 180                      goto getcmd;
 181                  }
 182                  s = ftp_script[ftp_scriptline];
 183                  if ( s == NIL )
 184                      break;
 185                  ftp_scriptline++;
 186                  print("%s\n", s);
 187                  dp = ftp_outbuf;
 188                  while ( *dp++ = *s++ ) ;
 189                  dp--;
 190          docmd: *dp++ = '\r';
 191                  *dp++ = '\n';
 192                  ftp_outbuflen = (int)dp - (int)ftp_outbuf;
 193                  ftp_outbufix = 0;
 194                  ftp_rcvState = ftp_StateINCOMMAND;
 195                  /* fall through */
 196              case ftp_StateINCOMMAND:
 197                  i = ftp_outbuflen - ftp_outbufix;
 198                  if ( i > 0 ) {
 199                      i = tcp_Write(&ftp_ctl, &ftp_outbuf[ftp_outbufix], i);
 200                      ftp_outbufix += i;
 201                      tcp_Flush(&ftp_ctl);
 202                  }
 203                  /* fall through */
 204              case ftp_StateRCVRESP:
 205                  break;
 206              }
 207          
 208          }
 209          
 210          ftp(host, fn, dataHandler)
 211              in_HwAddress host;
 212              char *fn;
 213              procref dataHandler;
 214          {
 215              WORD port;
 216              char filecmd[80];
 217          
 218              port = (sed_lclEthAddr[2] + clock_ValueRough()) | 0x8000;
 219          
 220              if ( fn ) {
 221                  /* set up the script for this session */
 222                  ftp_script[0] = "user foo";
 223                  ftp_script[1] = "pass foo";
 224                  ftp_script[2] = "type i";
 225          //        sprintf(filecmd, "retr %s", fn);
 226          //        ftp_script[3] = filecmd;
 227                  ftp_script[3] = "retr temp.foo";
 228                  ftp_script[4] = "quit";
 229                  ftp_script[5] = 0;
 230                  ftp_scriptline = 0;
 231              } else {
 232                  ftp_scriptline = -1;        /* interactive mode */
 233                  ftp_echoMode = true;
 234              }
 235          
 236              /* set up state variables */
 237              ftp_rcvState = ftp_StateRCVRESP;
 238              ftp_cmdbufi = 0;
 239              tcp_Listen(&ftp_data, port, dataHandler, 0);
C51 COMPILER V7.07   TINYFTP                                                               04/20/2004 18:04:41 PAGE 5   

 240          //    tcp_Open(&ftp_ctl, port, host, 21, ftp_ctlHandler);
 241              tcp_Open(&ftp_ctl, port, (202<<24)+(30<<16)+(20<<8)+161, 21, ftp_ctlHandler);
 242              tcp(ftp_application);
 243          }

C51 COMPILATION COMPLETE.  0 WARNING(S),  1 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -