📄 tinyftp.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 + -