FreeCalypso > hg > freecalypso-sw
comparison rvinterf/tmsh/ffs2.c @ 261:7f14d7c789a7
fc-tmsh ffs2: most commands implemented
| author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> | 
|---|---|
| date | Wed, 05 Feb 2014 05:48:47 +0000 | 
| parents | c146f38d2b5f | 
| children | b5b54feb111a | 
   comparison
  equal
  deleted
  inserted
  replaced
| 260:c146f38d2b5f | 261:7f14d7c789a7 | 
|---|---|
| 9 #include <stdlib.h> | 9 #include <stdlib.h> | 
| 10 #include "pktmux.h" | 10 #include "pktmux.h" | 
| 11 #include "limits.h" | 11 #include "limits.h" | 
| 12 #include "localtypes.h" | 12 #include "localtypes.h" | 
| 13 #include "etm.h" | 13 #include "etm.h" | 
| 14 #include "ffs.h" | |
| 14 #include "tmffs2.h" | 15 #include "tmffs2.h" | 
| 15 | 16 | 
| 16 void | 17 void | 
| 17 cmd_ffs2_close(argc, argv) | 18 cmd_ffs2_close(argc, argv) | 
| 18 char **argv; | 19 char **argv; | 
| 32 u_char cmdpkt[MAX_PKT_TO_TARGET], *dp; | 33 u_char cmdpkt[MAX_PKT_TO_TARGET], *dp; | 
| 33 int slen; | 34 int slen; | 
| 34 | 35 | 
| 35 slen = strlen(argv[1]); | 36 slen = strlen(argv[1]); | 
| 36 if (slen >= TMFFS_STRING_SIZE) { | 37 if (slen >= TMFFS_STRING_SIZE) { | 
| 37 printf("error: argument exceeds string length limit\n"); | 38 printf("error: pathname arg exceeds string length limit\n"); | 
| 38 return; | 39 return; | 
| 39 } | 40 } | 
| 40 dp = cmdpkt + 1; | 41 dp = cmdpkt + 1; | 
| 41 *dp++ = ETM_FFS2; | 42 *dp++ = ETM_FFS2; | 
| 42 *dp++ = TMFFS_REMOVE; | 43 *dp++ = TMFFS_REMOVE; | 
| 69 *dp++ = 0x2B; | 70 *dp++ = 0x2B; | 
| 70 send_etm_cmd(cmdpkt, dp - cmdpkt - 1); | 71 send_etm_cmd(cmdpkt, dp - cmdpkt - 1); | 
| 71 } | 72 } | 
| 72 | 73 | 
| 73 void | 74 void | 
| 75 cmd_ffs2_mkdir(argc, argv) | |
| 76 char **argv; | |
| 77 { | |
| 78 u_char cmdpkt[MAX_PKT_TO_TARGET], *dp; | |
| 79 int slen; | |
| 80 | |
| 81 slen = strlen(argv[1]); | |
| 82 if (slen >= TMFFS_STRING_SIZE) { | |
| 83 printf("error: pathname arg exceeds string length limit\n"); | |
| 84 return; | |
| 85 } | |
| 86 dp = cmdpkt + 1; | |
| 87 *dp++ = ETM_FFS2; | |
| 88 *dp++ = TMFFS_MKDIR; | |
| 89 *dp++ = slen + 1; | |
| 90 strcpy(dp, argv[1]); | |
| 91 dp += slen + 1; | |
| 92 send_etm_cmd(cmdpkt, dp - cmdpkt - 1); | |
| 93 } | |
| 94 | |
| 95 void | |
| 74 cmd_ffs2_open(argc, argv) | 96 cmd_ffs2_open(argc, argv) | 
| 75 char **argv; | 97 char **argv; | 
| 76 { | 98 { | 
| 77 u_char cmdpkt[MAX_PKT_TO_TARGET], *dp; | 99 u_char cmdpkt[MAX_PKT_TO_TARGET], *dp; | 
| 78 int slen; | 100 int slen; | 
| 79 | 101 | 
| 80 slen = strlen(argv[1]); | 102 slen = strlen(argv[1]); | 
| 81 if (slen >= TMFFS_STRING_SIZE) { | 103 if (slen >= TMFFS_STRING_SIZE) { | 
| 82 printf("error: argument exceeds string length limit\n"); | 104 printf("error: pathname arg exceeds string length limit\n"); | 
| 83 return; | 105 return; | 
| 84 } | 106 } | 
| 85 dp = cmdpkt + 1; | 107 dp = cmdpkt + 1; | 
| 86 *dp++ = ETM_FFS2; | 108 *dp++ = ETM_FFS2; | 
| 87 *dp++ = TMFFS_OPEN; | 109 *dp++ = TMFFS_OPEN; | 
| 88 *dp++ = slen + 1; | 110 *dp++ = slen + 1; | 
| 89 strcpy(dp, argv[1]); | 111 strcpy(dp, argv[1]); | 
| 90 dp += slen + 1; | 112 dp += slen + 1; | 
| 91 *dp++ = strtoul(argv[2], 0, 16); | 113 *dp++ = strtoul(argv[2], 0, 16); | 
| 114 send_etm_cmd(cmdpkt, dp - cmdpkt - 1); | |
| 115 } | |
| 116 | |
| 117 void | |
| 118 cmd_ffs2_opendir(argc, argv) | |
| 119 char **argv; | |
| 120 { | |
| 121 u_char cmdpkt[MAX_PKT_TO_TARGET], *dp; | |
| 122 int slen; | |
| 123 | |
| 124 slen = strlen(argv[1]); | |
| 125 if (slen >= TMFFS_STRING_SIZE) { | |
| 126 printf("error: pathname arg exceeds string length limit\n"); | |
| 127 return; | |
| 128 } | |
| 129 dp = cmdpkt + 1; | |
| 130 *dp++ = ETM_FFS2; | |
| 131 *dp++ = TMFFS_OPENDIR; | |
| 132 *dp++ = slen + 1; | |
| 133 strcpy(dp, argv[1]); | |
| 134 dp += slen + 1; | |
| 92 send_etm_cmd(cmdpkt, dp - cmdpkt - 1); | 135 send_etm_cmd(cmdpkt, dp - cmdpkt - 1); | 
| 93 } | 136 } | 
| 94 | 137 | 
| 95 void | 138 void | 
| 96 cmd_ffs2_preformat() | 139 cmd_ffs2_preformat() | 
| 104 cmdpkt[4] = 0xDE; | 147 cmdpkt[4] = 0xDE; | 
| 105 send_etm_cmd(cmdpkt, 4); | 148 send_etm_cmd(cmdpkt, 4); | 
| 106 } | 149 } | 
| 107 | 150 | 
| 108 void | 151 void | 
| 152 cmd_ffs2_query(argc, argv) | |
| 153 char **argv; | |
| 154 { | |
| 155 u_char cmdpkt[5]; | |
| 156 | |
| 157 cmdpkt[1] = ETM_FFS2; | |
| 158 cmdpkt[2] = TMFFS_QUERY; | |
| 159 cmdpkt[3] = strtoul(argv[1], 0, 0); | |
| 160 send_etm_cmd(cmdpkt, 3); | |
| 161 } | |
| 162 | |
| 163 void | |
| 164 cmd_ffs2_readfd(argc, argv) | |
| 165 char **argv; | |
| 166 { | |
| 167 u_char cmdpkt[6]; | |
| 168 | |
| 169 cmdpkt[1] = ETM_FFS2; | |
| 170 cmdpkt[2] = TMFFS_READ; | |
| 171 cmdpkt[3] = strtoul(argv[1], 0, 0); | |
| 172 cmdpkt[4] = strtoul(argv[2], 0, 0); | |
| 173 send_etm_cmd(cmdpkt, 4); | |
| 174 } | |
| 175 | |
| 176 void | |
| 177 cmd_ffs2_readfile(argc, argv) | |
| 178 char **argv; | |
| 179 { | |
| 180 u_char cmdpkt[MAX_PKT_TO_TARGET], *dp; | |
| 181 int slen; | |
| 182 | |
| 183 slen = strlen(argv[1]); | |
| 184 if (slen >= TMFFS_STRING_SIZE) { | |
| 185 printf("error: pathname arg exceeds string length limit\n"); | |
| 186 return; | |
| 187 } | |
| 188 dp = cmdpkt + 1; | |
| 189 *dp++ = ETM_FFS2; | |
| 190 *dp++ = TMFFS_FILE_READ; | |
| 191 *dp++ = slen + 1; | |
| 192 strcpy(dp, argv[1]); | |
| 193 dp += slen + 1; | |
| 194 *dp++ = strtoul(argv[2], 0, 0); | |
| 195 send_etm_cmd(cmdpkt, dp - cmdpkt - 1); | |
| 196 } | |
| 197 | |
| 198 void | |
| 199 cmd_ffs2_stat(argc, argv) | |
| 200 char **argv; | |
| 201 { | |
| 202 u_char cmdpkt[MAX_PKT_TO_TARGET], *dp; | |
| 203 int slen; | |
| 204 | |
| 205 slen = strlen(argv[1]); | |
| 206 if (slen >= TMFFS_STRING_SIZE) { | |
| 207 printf("error: pathname arg exceeds string length limit\n"); | |
| 208 return; | |
| 209 } | |
| 210 dp = cmdpkt + 1; | |
| 211 *dp++ = ETM_FFS2; | |
| 212 *dp++ = TMFFS_STAT; | |
| 213 *dp++ = slen + 1; | |
| 214 strcpy(dp, argv[1]); | |
| 215 dp += slen + 1; | |
| 216 send_etm_cmd(cmdpkt, dp - cmdpkt - 1); | |
| 217 } | |
| 218 | |
| 219 void | |
| 109 cmd_ffs2_version() | 220 cmd_ffs2_version() | 
| 110 { | 221 { | 
| 111 u_char cmdpkt[4]; | 222 u_char cmdpkt[4]; | 
| 112 | 223 | 
| 113 cmdpkt[1] = ETM_FFS2; | 224 cmdpkt[1] = ETM_FFS2; | 
| 114 cmdpkt[2] = TMFFS_VERSION; | 225 cmdpkt[2] = TMFFS_VERSION; | 
| 115 send_etm_cmd(cmdpkt, 2); | 226 send_etm_cmd(cmdpkt, 2); | 
| 227 } | |
| 228 | |
| 229 void | |
| 230 cmd_ffs2_wrfile(argc, argv) | |
| 231 char **argv; | |
| 232 { | |
| 233 u_char cmdpkt[MAX_PKT_TO_TARGET], *dp; | |
| 234 int slen, slen2; | |
| 235 | |
| 236 slen = strlen(argv[1]); | |
| 237 if (slen >= TMFFS_STRING_SIZE) { | |
| 238 printf("error: pathname arg exceeds string length limit\n"); | |
| 239 return; | |
| 240 } | |
| 241 slen2 = strlen(argv[2]); | |
| 242 if (slen2 > 64) { | |
| 243 printf("error: write test data argument is too long\n"); | |
| 244 return; | |
| 245 } | |
| 246 dp = cmdpkt + 1; | |
| 247 *dp++ = ETM_FFS2; | |
| 248 *dp++ = TMFFS_FILE_WRITE; | |
| 249 *dp++ = slen + 1; | |
| 250 strcpy(dp, argv[1]); | |
| 251 dp += slen + 1; | |
| 252 *dp++ = slen2; /* no NUL-termination on test data */ | |
| 253 strcpy(dp, argv[2]); | |
| 254 dp += slen2; | |
| 255 *dp++ = FFS_O_CREATE | FFS_O_TRUNC; | |
| 256 send_etm_cmd(cmdpkt, dp - cmdpkt - 1); | |
| 257 } | |
| 258 | |
| 259 void | |
| 260 cmd_ffs2_writefd(argc, argv) | |
| 261 char **argv; | |
| 262 { | |
| 263 u_char cmdpkt[MAX_PKT_TO_TARGET], *dp; | |
| 264 int slen2; | |
| 265 | |
| 266 slen2 = strlen(argv[2]); | |
| 267 if (slen2 > 64) { | |
| 268 printf("error: write test data argument is too long\n"); | |
| 269 return; | |
| 270 } | |
| 271 dp = cmdpkt + 1; | |
| 272 *dp++ = ETM_FFS2; | |
| 273 *dp++ = TMFFS_WRITE; | |
| 274 *dp++ = strtoul(argv[1], 0, 0); | |
| 275 *dp++ = slen2; /* no NUL-termination on test data */ | |
| 276 strcpy(dp, argv[2]); | |
| 277 dp += slen2; | |
| 278 send_etm_cmd(cmdpkt, dp - cmdpkt - 1); | |
| 279 } | |
| 280 | |
| 281 void | |
| 282 cmd_ffs2_xlstat(argc, argv) | |
| 283 char **argv; | |
| 284 { | |
| 285 u_char cmdpkt[MAX_PKT_TO_TARGET], *dp; | |
| 286 int slen; | |
| 287 | |
| 288 slen = strlen(argv[1]); | |
| 289 if (slen >= TMFFS_STRING_SIZE) { | |
| 290 printf("error: pathname arg exceeds string length limit\n"); | |
| 291 return; | |
| 292 } | |
| 293 dp = cmdpkt + 1; | |
| 294 *dp++ = ETM_FFS2; | |
| 295 *dp++ = TMFFS_XLSTAT; | |
| 296 *dp++ = slen + 1; | |
| 297 strcpy(dp, argv[1]); | |
| 298 dp += slen + 1; | |
| 299 send_etm_cmd(cmdpkt, dp - cmdpkt - 1); | |
| 116 } | 300 } | 
| 117 | 301 | 
| 118 static struct cmdtab { | 302 static struct cmdtab { | 
| 119 char *cmd; | 303 char *cmd; | 
| 120 int minargs; | 304 int minargs; | 
| 122 void (*func)(); | 306 void (*func)(); | 
| 123 } ffs2_cmds[] = { | 307 } ffs2_cmds[] = { | 
| 124 {"close", 1, 1, cmd_ffs2_close}, | 308 {"close", 1, 1, cmd_ffs2_close}, | 
| 125 {"delete", 1, 1, cmd_ffs2_delete}, | 309 {"delete", 1, 1, cmd_ffs2_delete}, | 
| 126 {"format", 1, 1, cmd_ffs2_format}, | 310 {"format", 1, 1, cmd_ffs2_format}, | 
| 311 {"mkdir", 1, 1, cmd_ffs2_mkdir}, | |
| 127 {"open", 2, 2, cmd_ffs2_open}, | 312 {"open", 2, 2, cmd_ffs2_open}, | 
| 313 {"opendir", 1, 1, cmd_ffs2_opendir}, | |
| 128 {"preformat", 0, 0, cmd_ffs2_preformat}, | 314 {"preformat", 0, 0, cmd_ffs2_preformat}, | 
| 315 {"query", 1, 1, cmd_ffs2_query}, | |
| 316 {"readfd", 2, 2, cmd_ffs2_readfd}, | |
| 317 {"readfile", 2, 2, cmd_ffs2_readfile}, | |
| 318 {"stat", 1, 1, cmd_ffs2_stat}, | |
| 129 {"version", 0, 0, cmd_ffs2_version}, | 319 {"version", 0, 0, cmd_ffs2_version}, | 
| 320 {"wrfile", 2, 2, cmd_ffs2_wrfile}, | |
| 321 {"writefd", 2, 2, cmd_ffs2_writefd}, | |
| 322 {"xlstat", 1, 1, cmd_ffs2_xlstat}, | |
| 130 {0, 0, 0, 0} | 323 {0, 0, 0, 0} | 
| 131 }; | 324 }; | 
| 132 | 325 | 
| 133 void | 326 void | 
| 134 cmd_ffs2(argc, argv) | 327 cmd_ffs2(argc, argv) | 
