📄 ff.txt
字号:
;;;1345 }
;;;1346 if (si != di) cf |= NS_LOSS | NS_LFN; /* Out of 8.3 format */
;;;1347 if (si > di) break; /* No extension */
;;;1348 si = di; i = 8; ni = 11; /* Enter extension section */
;;;1349 b <<= 2; continue;
;;;1350 }
;;;1351
;;;1352 if (w >= 0x80) { /* Non ASCII char */
;;;1353 #ifdef _EXCVT
;;;1354 w = ff_convert(w, 0); /* Unicode -> OEM code */
;;;1355 if (w) w = excvt[w - 0x80]; /* Convert extended char to upper (SBCS) */
;;;1356 #else
;;;1357 w = ff_convert(ff_wtoupper(w), 0); /* Upper converted Unicode -> OEM code */
;;;1358 #endif
;;;1359 cf |= NS_LFN; /* Force create LFN entry */
;;;1360 }
;;;1361
;;;1362 if (_DF1S && w >= 0x100) { /* Double byte char */
;;;1363 if (i >= ni - 1) {
;;;1364 cf |= NS_LOSS | NS_LFN; i = ni; continue;
;;;1365 }
;;;1366 dj->fn[i++] = (BYTE)(w >> 8);
;;;1367 } else { /* Single byte char */
;;;1368 if (!w || chk_chr("+,;=[]", w)) { /* Replace illegal chars for SFN */
;;;1369 w = '_'; cf |= NS_LOSS | NS_LFN; /* Lossy conversion */
;;;1370 } else {
;;;1371 if (IsUpper(w)) { /* ASCII large capital */
;;;1372 b |= 2;
;;;1373 } else {
;;;1374 if (IsLower(w)) { /* ASCII small capital */
;;;1375 b |= 1; w -= 0x20;
;;;1376 }
;;;1377 }
;;;1378 }
;;;1379 }
;;;1380 dj->fn[i++] = (BYTE)w;
;;;1381 }
;;;1382
;;;1383 if (dj->fn[0] == 0xE5) dj->fn[0] = 0x05; /* If the first char collides with deleted mark, replace it with 0x05 */
;;;1384
;;;1385 if (ni == 8) b <<= 2;
;;;1386 if ((b & 0x0C) == 0x0C || (b & 0x03) == 0x03) /* Create LFN entry when there are composite capitals */
;;;1387 cf |= NS_LFN;
;;;1388 if (!(cf & NS_LFN)) { /* When LFN is in 8.3 format without extended char, NT flags are created */
;;;1389 if ((b & 0x03) == 0x01) cf |= NS_EXT; /* NT flag (Extension has only small capital) */
;;;1390 if ((b & 0x0C) == 0x04) cf |= NS_BODY; /* NT flag (Filename has only small capital) */
;;;1391 }
;;;1392
;;;1393 dj->fn[NS] = cf; /* SFN is created */
;;;1394
;;;1395 return FR_OK;
;;;1396
;;;1397
;;;1398 #else /* Non-LFN configuration */
;;;1399 BYTE b, c, d, *sfn;
;;;1400 int ni, si, i;
;;;1401 const char *p;
;;;1402
;;;1403 /* Create file name in directory form */
;;;1404 sfn = dj->fn;
000004 9800 LDR r0,[sp,#0]
000006 6986 LDR r6,[r0,#0x18]
;;;1405 mem_set(sfn, ' ', 11);
000008 220b MOVS r2,#0xb
00000a 2120 MOVS r1,#0x20
00000c 4630 MOV r0,r6
00000e f7fffffe BL mem_set
;;;1406 si = i = b = 0; ni = 8;
000012 2000 MOVS r0,#0
000014 4605 MOV r5,r0
000016 4680 MOV r8,r0
000018 4682 MOV r10,r0
00001a f04f0908 MOV r9,#8
;;;1407 p = *path;
00001e 9801 LDR r0,[sp,#4]
000020 f8d0b000 LDR r11,[r0,#0]
;;;1408 #if _FS_RPATH
;;;1409 if (p[si] == '.') { /* Is this a dot entry? */
;;;1410 for (;;) {
;;;1411 c = (BYTE)p[si++];
;;;1412 if (c != '.' || si >= 3) break;
;;;1413 sfn[i++] = c;
;;;1414 }
;;;1415 if (c != '/' && c != '\\' && c > ' ') return FR_INVALID_NAME;
;;;1416 *path = &p[si]; /* Return pointer to the next segment */
;;;1417 sfn[NS] = (c <= ' ') ? NS_LAST | NS_DOT : NS_DOT; /* Set last segment flag if end of path */
;;;1418 return FR_OK;
;;;1419 }
;;;1420 #endif
;;;1421 for (;;) {
000024 bf00 NOP
|L6.38|
;;;1422 c = (BYTE)p[si++];
000026 4650 MOV r0,r10
000028 f10a0a01 ADD r10,r10,#1
00002c f81b4000 LDRB r4,[r11,r0]
;;;1423 if (c <= ' ' || c == '/' || c == '\\') break; /* Break on end of segment */
000030 2c20 CMP r4,#0x20
000032 dd03 BLE |L6.60|
000034 2c2f CMP r4,#0x2f
000036 d001 BEQ |L6.60|
000038 2c5c CMP r4,#0x5c
00003a d100 BNE |L6.62|
|L6.60|
00003c e052 B |L6.228|
|L6.62|
;;;1424 if (c == '.' || i >= ni) {
00003e 2c2e CMP r4,#0x2e
000040 d001 BEQ |L6.70|
000042 45c8 CMP r8,r9
000044 db0e BLT |L6.100|
|L6.70|
;;;1425 if (ni != 8 || c != '.') return FR_INVALID_NAME;
000046 f1b90f08 CMP r9,#8
00004a d101 BNE |L6.80|
00004c 2c2e CMP r4,#0x2e
00004e d002 BEQ |L6.86|
|L6.80|
000050 2006 MOVS r0,#6
|L6.82|
;;;1426 i = 8; ni = 11;
;;;1427 b <<= 2; continue;
;;;1428 }
;;;1429 if (c >= 0x80) { /* Extended char */
;;;1430 #ifdef _EXCVT
;;;1431 c = excvt[c - 0x80]; /* Convert extend char (SBCS) */
;;;1432 #else
;;;1433 b |= 3; /* Eliminate NT flag if extended char is exist */
;;;1434 #if !_DF1S /* ASCII only cfg */
;;;1435 return FR_INVALID_NAME;
;;;1436 #endif
;;;1437 #endif
;;;1438 }
;;;1439 if (IsDBCS1(c)) { /* DBC 1st byte? */
;;;1440 d = (BYTE)p[si++]; /* Get 2nd byte */
;;;1441 if (!IsDBCS2(d) || i >= ni - 1) /* Reject invalid DBC */
;;;1442 return FR_INVALID_NAME;
;;;1443 sfn[i++] = c;
;;;1444 sfn[i++] = d;
;;;1445 } else { /* Single byte code */
;;;1446 if (chk_chr("\"*+,:<=>\?[]|\x7F", c)) /* Reject illegal chrs for SFN */
;;;1447 return FR_INVALID_NAME;
;;;1448 if (IsUpper(c)) { /* ASCII large capital? */
;;;1449 b |= 2;
;;;1450 } else {
;;;1451 if (IsLower(c)) { /* ASCII small capital? */
;;;1452 b |= 1; c -= 0x20;
;;;1453 }
;;;1454 }
;;;1455 sfn[i++] = c;
;;;1456 }
;;;1457 }
;;;1458 *path = &p[si]; /* Return pointer to the next segment */
;;;1459 c = (c <= ' ') ? NS_LAST : 0; /* Set last segment flag if end of path */
;;;1460
;;;1461 if (!i) return FR_INVALID_NAME; /* Reject nul string */
;;;1462 if (sfn[0] == 0xE5) sfn[0] = 0x05; /* When first char collides with 0xE5, replace it with 0x05 */
;;;1463
;;;1464 if (ni == 8) b <<= 2;
;;;1465 if ((b & 0x03) == 0x01) c |= NS_EXT; /* NT flag (Name extension has only small capital) */
;;;1466 if ((b & 0x0C) == 0x04) c |= NS_BODY; /* NT flag (Name body has only small capital) */
;;;1467
;;;1468 sfn[NS] = c; /* Store NT flag, File name is created */
;;;1469
;;;1470 return FR_OK;
;;;1471 #endif
;;;1472 }
000052 e8bd9ffc POP {r2-r12,pc}
|L6.86|
000056 f04f0808 MOV r8,#8 ;1426
00005a f04f090b MOV r9,#0xb ;1426
00005e 06a8 LSLS r0,r5,#26 ;1427
000060 0e05 LSRS r5,r0,#24 ;1427
000062 e7e0 B |L6.38|
|L6.100|
000064 2c80 CMP r4,#0x80 ;1429
000066 db01 BLT |L6.108|
000068 f0450503 ORR r5,r5,#3 ;1433
|L6.108|
00006c 2c81 CMP r4,#0x81 ;1439
00006e db1d BLT |L6.172|
000070 2cfe CMP r4,#0xfe ;1439
000072 dc1b BGT |L6.172|
000074 4650 MOV r0,r10 ;1440
000076 f10a0a01 ADD r10,r10,#1 ;1440
00007a f81b7000 LDRB r7,[r11,r0] ;1440
00007e 2f40 CMP r7,#0x40 ;1441
000080 db01 BLT |L6.134|
000082 2f7e CMP r7,#0x7e ;1441
000084 dd03 BLE |L6.142|
|L6.134|
000086 2f80 CMP r7,#0x80 ;1441
000088 db05 BLT |L6.150|
00008a 2ffe CMP r7,#0xfe ;1441
00008c dc03 BGT |L6.150|
|L6.142|
00008e f1a90001 SUB r0,r9,#1 ;1441
000092 4540 CMP r0,r8 ;1441
000094 dc01 BGT |L6.154|
|L6.150|
000096 2006 MOVS r0,#6 ;1442
000098 e7db B |L6.82|
|L6.154|
00009a 4640 MOV r0,r8 ;1443
00009c f1080801 ADD r8,r8,#1 ;1443
0000a0 5434 STRB r4,[r6,r0] ;1443
0000a2 4640 MOV r0,r8 ;1444
0000a4 f1080801 ADD r8,r8,#1 ;1444
0000a8 5437 STRB r7,[r6,r0] ;1444
0000aa e01a B |L6.226|
|L6.172|
0000ac 4621 MOV r1,r4 ;1446
0000ae a022 ADR r0,|L6.312|
0000b0 f7fffffe BL chk_chr
0000b4 b108 CBZ r0,|L6.186|
0000b6 2006 MOVS r0,#6 ;1447
0000b8 e7cb B |L6.82|
|L6.186|
0000ba 2c41 CMP r4,#0x41 ;1448
0000bc db04 BLT |L6.200|
0000be 2c5a CMP r4,#0x5a ;1448
0000c0 dc02 BGT |L6.200|
0000c2 f0450502 ORR r5,r5,#2 ;1449
0000c6 e008 B |L6.218|
|L6.200|
0000c8 2c61 CMP r4,#0x61 ;1451
0000ca db06 BLT |L6.218|
0000cc 2c7a CMP r4,#0x7a ;1451
0000ce dc04 BGT |L6.218|
0000d0 f0450501 ORR r5,r5,#1 ;1452
0000d4 f1a40020 SUB r0,r4,#0x20 ;1452
0000d8 b2c4 UXTB r4,r0 ;1452
|L6.218|
0000da 4640 MOV r0,r8 ;1455
0000dc f1080801 ADD r8,r8,#1 ;1455
0000e0 5434 STRB r4,[r6,r0] ;1455
|L6.226|
0000e2 e7a0 B |L6.38|
|L6.228|
0000e4 bf00 NOP ;1423
0000e6 eb0b010a ADD r1,r11,r10 ;1458
0000ea 9801 LDR r0,[sp,#4] ;1458
0000ec 6001 STR r1,[r0,#0] ;1458
0000ee 2c20 CMP r4,#0x20 ;1459
0000f0 dc01 BGT |L6.246|
0000f2 2004 MOVS r0,#4 ;1459
0000f4 e000 B |L6.248|
|L6.246|
0000f6 2000 MOVS r0,#0 ;1459
|L6.248|
0000f8 b2c4 UXTB r4,r0 ;1459
0000fa f1b80f00 CMP r8,#0 ;1461
0000fe d101 BNE |L6.260|
000100 2006 MOVS r0,#6 ;1461
000102 e7a6 B |L6.82|
|L6.260|
000104 7830 LDRB r0,[r6,#0] ;1462
000106 28e5 CMP r0,#0xe5 ;1462
000108 d101 BNE |L6.270|
00010a 2005 MOVS r0,#5 ;1462
00010c 7030 STRB r0,[r6,#0] ;1462
|L6.270|
00010e f1b90f08 CMP r9,#8 ;1464
000112 d101 BNE |L6.280|
000114 06a8 LSLS r0,r5,#26 ;1464
000116 0e05 LSRS r5,r0,#24 ;1464
|L6.280|
000118 f0050003 AND r0,r5,#3 ;1465
00011c 2801 CMP r0,#1 ;1465
00011e d101 BNE |L6.292|
000120 f0440410 ORR r4,r4,#0x10 ;1465
|L6.292|
000124 f005000c AND r0,r5,#0xc ;1466
000128 2804 CMP r0,#4 ;1466
00012a d101 BNE |L6.304|
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -