Rev 4922 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4922 | Rev 5011 | ||
---|---|---|---|
1 | cmd_help: |
1 | cmd_help: |
2 | 2 | ||
3 | push str_help |
3 | push str_help |
4 | call [con_write_asciiz] |
4 | call [con_write_asciiz] |
5 | 5 | ||
6 | jmp wait_for_usercommand |
6 | jmp wait_for_usercommand |
7 | 7 | ||
8 | 8 | ||
9 | cmd_bye: |
9 | cmd_bye: |
10 | 10 | ||
11 | ; Send BYE message to the server |
11 | ; Send BYE message to the server |
12 | mov dword[buf_cmd], "BYE" + 13 shl 24 |
12 | mov dword[buf_cmd], "BYE" + 13 shl 24 |
13 | mov byte[buf_cmd+4], 10 |
13 | mov byte[buf_cmd+4], 10 |
14 | mcall send, [socketnum], buf_cmd, 5, 0 |
14 | mcall send, [controlsocket], buf_cmd, 5, 0 |
15 | 15 | ||
16 | ; Close the control connection |
16 | ; Close the control connection |
17 | mcall close, [socketnum] |
17 | mcall close, [controlsocket] |
18 | jmp main |
18 | jmp main |
19 | 19 | ||
20 | 20 | ||
21 | cmd_pwd: |
21 | cmd_pwd: |
22 | 22 | ||
23 | mov dword[buf_cmd], "PWD" + 13 shl 24 |
23 | mov dword[buf_cmd], "PWD" + 13 shl 24 |
24 | mov byte[buf_cmd+4], 10 |
24 | mov byte[buf_cmd+4], 10 |
25 | mcall send, [socketnum], buf_cmd, 5, 0 |
25 | mcall send, [controlsocket], buf_cmd, 5, 0 |
26 | 26 | ||
27 | jmp wait_for_servercommand |
27 | jmp wait_for_servercommand |
28 | 28 | ||
29 | 29 | ||
30 | cmd_cwd: |
30 | cmd_cwd: |
31 | 31 | ||
32 | mov dword[buf_cmd], "CWD " |
32 | mov dword[buf_cmd], "CWD " |
33 | 33 | ||
34 | mov ecx, 256 |
34 | mov ecx, 256 |
35 | xor al, al |
35 | xor al, al |
36 | mov edi, buf_cmd |
36 | mov edi, buf_cmd |
37 | repne scasb |
37 | repne scasb |
38 | lea esi, [edi - buf_cmd] |
38 | lea esi, [edi - buf_cmd] |
39 | mov word [edi - 2], 0x0a0d |
39 | mov word [edi - 2], 0x0a0d |
40 | 40 | ||
41 | mcall send, [socketnum], buf_cmd, , 0 |
41 | mcall send, [controlsocket], buf_cmd, , 0 |
42 | 42 | ||
43 | jmp wait_for_servercommand |
43 | jmp wait_for_servercommand |
44 | 44 | ||
45 | 45 | ||
46 | cmd_dele: |
46 | cmd_dele: |
47 | 47 | ||
48 | mov dword[buf_cmd], "DELE" |
48 | mov dword[buf_cmd], "DELE" |
49 | mov byte[buf_cmd], " " |
49 | mov byte[buf_cmd], " " |
50 | 50 | ||
51 | mov ecx, 256 |
51 | mov ecx, 256 |
52 | xor al, al |
52 | xor al, al |
53 | mov edi, buf_cmd |
53 | mov edi, buf_cmd |
54 | repne scasb |
54 | repne scasb |
55 | lea esi, [edi - buf_cmd] |
55 | lea esi, [edi - buf_cmd] |
56 | mov word [edi - 2], 0x0a0d |
56 | mov word [edi - 2], 0x0a0d |
57 | 57 | ||
58 | mcall send, [socketnum], buf_cmd, , 0 |
58 | mcall send, [controlsocket], buf_cmd, , 0 |
59 | 59 | ||
60 | jmp wait_for_servercommand |
60 | jmp wait_for_servercommand |
61 | 61 | ||
62 | 62 | ||
63 | cmd_list: |
63 | cmd_list: |
64 | call open_dataconnection |
64 | call open_dataconnection |
65 | 65 | ||
66 | mov [operation], OPERATION_LIST |
66 | mov [operation], OPERATION_LIST |
67 | 67 | ||
68 | mov dword[buf_cmd], "LIST" |
68 | mov dword[buf_cmd], "LIST" |
69 | mov word[buf_cmd+4], 0x0a0d |
69 | mov word[buf_cmd+4], 0x0a0d |
70 | mcall send, [socketnum], buf_cmd, 6, 0 |
70 | mcall send, [controlsocket], buf_cmd, 6, 0 |
71 | 71 | ||
72 | jmp wait_for_servercommand |
72 | jmp wait_for_servercommand |
73 | 73 | ||
74 | 74 | ||
75 | cmd_retr: |
75 | cmd_retr: |
76 | call open_dataconnection |
76 | call open_dataconnection |
77 | 77 | ||
78 | ; Create/open the file |
78 | ; Create/open the file |
79 | 79 | ||
80 | ; Create/open the file |
80 | ; Create/open the file |
81 | 81 | ||
82 | mov esi, buf_cmd+5 |
82 | mov esi, buf_cmd+5 |
83 | mov ecx, 256-5 |
83 | mov ecx, 256-5 |
84 | call set_filename |
84 | call set_filename |
85 | 85 | ||
86 | mov [filestruct.subfn], 2 ; create/rewrite file |
86 | mov [filestruct.subfn], 2 ; create/rewrite file |
87 | mov [filestruct.offset], 0 |
87 | mov [filestruct.offset], 0 |
88 | mov [filestruct.offset+4], 0 |
88 | mov [filestruct.offset+4], 0 |
89 | mov [filestruct.size], 0 |
89 | mov [filestruct.size], 0 |
90 | mov [filestruct.ptr], 0 |
90 | mov [filestruct.ptr], 0 |
91 | 91 | ||
92 | mcall 70, filestruct |
92 | mcall 70, filestruct |
93 | cmp eax, -1 |
93 | cmp eax, -1 |
94 | ; je fileerror |
94 | ; je fileerror |
95 | 95 | ||
96 | ; Prepare to write to the file |
96 | ; Prepare to write to the file |
97 | 97 | ||
98 | mov [filestruct.subfn], 3 ; write to file |
98 | mov [filestruct.subfn], 3 ; write to file |
99 | mov [operation], OPERATION_RETR |
99 | mov [operation], OPERATION_RETR |
100 | 100 | ||
101 | ; Request the file from server |
101 | ; Request the file from server |
102 | 102 | ||
103 | mov dword[buf_cmd], "RETR" |
103 | mov dword[buf_cmd], "RETR" |
104 | mov byte[buf_cmd+4], " " |
104 | mov byte[buf_cmd+4], " " |
105 | 105 | ||
106 | mov ecx, 256 |
106 | mov ecx, 256 |
107 | xor al, al |
107 | xor al, al |
108 | mov edi, buf_cmd |
108 | mov edi, buf_cmd |
109 | repne scasb |
109 | repne scasb |
110 | lea esi, [edi - buf_cmd] |
110 | lea esi, [edi - buf_cmd] |
111 | mov dword[edi - 2], 0x0a0d |
111 | mov dword[edi - 2], 0x0a0d |
112 | mcall send, [socketnum], buf_cmd, , 0 |
112 | mcall send, [controlsocket], buf_cmd, , 0 |
113 | 113 | ||
114 | invoke con_write_asciiz, buf_cmd ; print command |
114 | invoke con_write_asciiz, buf_cmd ; print command |
115 | jmp wait_for_servercommand |
115 | jmp wait_for_servercommand |
116 | 116 | ||
117 | cmd_rdir: |
117 | cmd_rdir: |
118 | 118 | ||
119 | mov [operation], OPERATION_RDIR |
119 | mov [operation], OPERATION_RDIR |
120 | 120 | ||
121 | ; Request filename list from the server |
121 | ; Request filename list from the server |
122 | 122 | ||
123 | call open_dataconnection |
123 | call open_dataconnection |
- | 124 | ||
124 | 125 | mov [ptr_fname], 0 |
|
125 | mov [size_fname], 0 |
126 | mov [size_fname], 0 |
126 | mov dword[buf_cmd], "NLST" |
127 | mov dword[buf_cmd], "NLST" |
127 | mov word[buf_cmd+4], 0x0a0d |
128 | mov word[buf_cmd+4], 0x0a0d |
128 | mcall send, [socketnum], buf_cmd, 6, 0 |
129 | mcall send, [controlsocket], buf_cmd, 6, 0 |
129 | 130 | ||
130 | jmp wait_for_servercommand |
131 | jmp wait_for_servercommand |
131 | 132 | ||
132 | cmd_stor: |
133 | cmd_stor: |
133 | 134 | ||
134 | call open_dataconnection |
135 | call open_dataconnection |
135 | 136 | ||
136 | mov [operation], OPERATION_STOR |
137 | mov [operation], OPERATION_STOR |
137 | 138 | ||
138 | mov [filestruct.subfn], 0 ; read file |
139 | mov [filestruct.subfn], 0 ; read file |
139 | mov [filestruct.offset], 0 |
140 | mov [filestruct.offset], 0 |
140 | mov [filestruct.offset+4], 0 |
141 | mov [filestruct.offset+4], 0 |
141 | mov [filestruct.size], BUFFERSIZE |
142 | mov [filestruct.size], BUFFERSIZE |
142 | mov [filestruct.ptr], buf_buffer2 |
143 | mov [filestruct.ptr], buf_buffer2 |
143 | 144 | ||
144 | mov esi, buf_cmd+5 |
145 | mov esi, buf_cmd+5 |
145 | mov ecx, 256-5 |
146 | mov ecx, 256-5 |
146 | call set_filename |
147 | call set_filename |
147 | 148 | ||
148 | mov dword[buf_cmd], "STOR" |
149 | mov dword[buf_cmd], "STOR" |
149 | mov byte[buf_cmd+4], " " |
150 | mov byte[buf_cmd+4], " " |
150 | 151 | ||
151 | mov ecx, 256 |
152 | mov ecx, 256 |
152 | xor al, al |
153 | xor al, al |
153 | mov edi, buf_cmd |
154 | mov edi, buf_cmd |
154 | repne scasb |
155 | repne scasb |
155 | lea esi, [edi - buf_cmd] |
156 | lea esi, [edi - buf_cmd] |
156 | mov word [edi - 2], 0x0a0d |
157 | mov word [edi - 2], 0x0a0d |
157 | mcall send, [socketnum], buf_cmd, , 0 |
158 | mcall send, [controlsocket], buf_cmd, , 0 |
158 | 159 | ||
159 | jmp wait_for_servercommand |
160 | jmp wait_for_servercommand |
160 | 161 | ||
161 | 162 | ||
162 | cmd_lcwd: |
163 | cmd_lcwd: |
163 | 164 | ||
164 | mov esi, buf_cmd+5 |
165 | mov esi, buf_cmd+5 |
- | 166 | cmp byte[esi], 10 |
|
- | 167 | je .print |
|
165 | mov ecx, 256-5 |
168 | mov ecx, 256-5 |
166 | .loop: |
169 | .loop: |
167 | lodsb |
170 | lodsb |
168 | cmp al, 10 |
171 | cmp al, 10 |
169 | je .done |
172 | je .done |
170 | test al, al |
173 | test al, al |
171 | je .done |
174 | je .done |
172 | loop .loop |
175 | loop .loop |
173 | .done: |
176 | .done: |
174 | mov byte[esi-1], 0 |
177 | mov byte[esi-1], 0 |
175 | mcall 30, 1, buf_cmd+5 ; set working directory |
178 | mcall 30, 1, buf_cmd+5 ; set working directory |
- | 179 | .print: |
|
176 | mcall 30, 2, buf_cmd, 256 ; and read it again |
180 | mcall 30, 2, buf_cmd, 256 ; and read it again |
177 | 181 | ||
178 | invoke con_write_asciiz, str_lcwd |
182 | invoke con_write_asciiz, str_lcwd |
179 | invoke con_write_asciiz, buf_cmd |
183 | invoke con_write_asciiz, buf_cmd |
180 | invoke con_write_asciiz, str_newline |
184 | invoke con_write_asciiz, str_newline |
181 | 185 | ||
182 | jmp wait_for_usercommand |
186 | jmp wait_for_usercommand |
183 | 187 | ||
184 | 188 | ||
185 | cmd_cdup: |
189 | cmd_cdup: |
186 | 190 | ||
187 | mov dword[buf_cmd], "CDUP" |
191 | mov dword[buf_cmd], "CDUP" |
188 | mov word[buf_cmd+4], 0x0d0a |
192 | mov word[buf_cmd+4], 0x0d0a |
189 | mcall send, [socketnum], buf_cmd, 6, 0 |
193 | mcall send, [controlsocket], buf_cmd, 6, 0 |
190 | 194 | ||
191 | jmp wait_for_servercommand |
195 | jmp wait_for_servercommand |
192 | 196 | ||
193 | 197 | ||
194 | cmd_rmd: |
198 | cmd_rmd: |
195 | 199 | ||
196 | mov dword[buf_cmd], "RMD " |
200 | mov dword[buf_cmd], "RMD " |
197 | 201 | ||
198 | mov ecx, 256 |
202 | mov ecx, 256 |
199 | xor al, al |
203 | xor al, al |
200 | mov edi, buf_cmd |
204 | mov edi, buf_cmd |
201 | repne scasb |
205 | repne scasb |
202 | lea esi, [edi - buf_cmd] |
206 | lea esi, [edi - buf_cmd] |
203 | mov word [edi - 2], 0x0a0d |
207 | mov word [edi - 2], 0x0a0d |
204 | 208 | ||
205 | mcall send, [socketnum], buf_cmd, , 0 |
209 | mcall send, [controlsocket], buf_cmd, , 0 |
206 | 210 | ||
207 | jmp wait_for_servercommand |
211 | jmp wait_for_servercommand |
208 | 212 | ||
209 | 213 | ||
210 | cmd_mkd: |
214 | cmd_mkd: |
211 | 215 | ||
212 | mov dword[buf_cmd], "MKD " |
216 | mov dword[buf_cmd], "MKD " |
213 | 217 | ||
214 | mov ecx, 256 |
218 | mov ecx, 256 |
215 | xor al, al |
219 | xor al, al |
216 | mov edi, buf_cmd |
220 | mov edi, buf_cmd |
217 | repne scasb |
221 | repne scasb |
218 | lea esi, [edi - buf_cmd] |
222 | lea esi, [edi - buf_cmd] |
219 | mov word [edi - 2], 0x0a0d |
223 | mov word [edi - 2], 0x0a0d |
220 | 224 | ||
221 | mcall send, [socketnum], buf_cmd, , 0 |
225 | mcall send, [controlsocket], buf_cmd, , 0 |
222 | 226 | ||
223 | jmp wait_for_servercommand |
227 | jmp wait_for_servercommand |
224 | 228 | ||
225 | 229 | ||
226 | ; esi = source ptr |
230 | ; esi = source ptr |
227 | ; ecx = max length of source buffer |
231 | ; ecx = max length of source buffer |
228 | set_filename: |
232 | set_filename: |
229 | 233 | ||
230 | mov edi, filestruct.name |
234 | mov edi, filestruct.name |
231 | .loop: |
235 | .loop: |
232 | lodsb |
236 | lodsb |
233 | test al, al |
237 | test al, al |
234 | jz .done |
238 | jz .done |
235 | cmp al, 10 |
239 | cmp al, 10 |
236 | je .done |
240 | je .done |
237 | stosb |
241 | stosb |
238 | loop .loop |
242 | loop .loop |
239 | .done: |
243 | .done: |
240 | xor al, al ; append a 0 byte |
244 | xor al, al ; append a 0 byte |
241 | stosb |
245 | stosb |
242 | 246 | ||
243 | ret |
247 | ret |