|
2 | 2 | include '../include/library.inc'
|
3 | 3 | ;-------------------------------------------------------------------------------
|
4 | 4 |
|
5 |
| -library FATDRVCE, 2 |
| 5 | +library FATDRVCE, 3 |
6 | 6 |
|
7 | 7 | ;-------------------------------------------------------------------------------
|
8 | 8 | ; v1 functions
|
@@ -54,6 +54,7 @@ virtual at 0
|
54 | 54 | FAT_ERROR_INVALID_MAGIC rb 1
|
55 | 55 | FAT_ERROR_INVALID_SIGNATURE rb 1
|
56 | 56 | FAT_ERROR_NO_MORE_ENTRIES rb 1
|
| 57 | + FAT_ERROR_INVALID_NAME rb 1 |
57 | 58 | end virtual
|
58 | 59 | virtual at 0
|
59 | 60 | FAT_LIST_FILEONLY rb 1
|
@@ -1060,6 +1061,10 @@ fat_Create:
|
1060 | 1061 | ; FAT_SUCCESS on success
|
1061 | 1062 | ld iy,0
|
1062 | 1063 | add iy,sp
|
| 1064 | + ld hl,(iy + 9) |
| 1065 | + call util_validate_fat_name |
| 1066 | + ld hl,FAT_ERROR_INVALID_NAME |
| 1067 | + ret z |
1063 | 1068 | ld hl,-512
|
1064 | 1069 | add hl,sp
|
1065 | 1070 | ld sp,hl ; temporary space for concat
|
@@ -1788,6 +1793,7 @@ util_get_fat_name:
|
1788 | 1793 | jr z,.done1
|
1789 | 1794 | or a,a
|
1790 | 1795 | jr z,.done1
|
| 1796 | + call util_toupper |
1791 | 1797 | ld (hl),a
|
1792 | 1798 | inc de
|
1793 | 1799 | inc hl
|
@@ -1823,6 +1829,7 @@ util_get_fat_name:
|
1823 | 1829 | jr z,.other
|
1824 | 1830 | inc de
|
1825 | 1831 | .store:
|
| 1832 | + call util_toupper |
1826 | 1833 | ld (hl),a
|
1827 | 1834 | inc hl
|
1828 | 1835 | inc b
|
@@ -1851,6 +1858,69 @@ util_get_fat_name:
|
1851 | 1858 | pop de
|
1852 | 1859 | ret
|
1853 | 1860 |
|
| 1861 | +;------------------------------------------------------------------------------- |
| 1862 | +util_validate_fat_name: |
| 1863 | +; ensure none of the following characters: * ? . , ; : / \ | + = < > [ ] " \t |
| 1864 | +; inputs: |
| 1865 | +; hl: pointer to null terminated string |
| 1866 | +; outputs: |
| 1867 | +; z set if invalid name |
| 1868 | +.loop: |
| 1869 | + ld a,(hl) |
| 1870 | + or a,a |
| 1871 | + jr z,.done |
| 1872 | + cp a,'*' |
| 1873 | + ret z |
| 1874 | + cp a,'?' |
| 1875 | + ret z |
| 1876 | + cp a,'.' |
| 1877 | + ret z |
| 1878 | + cp a,',' |
| 1879 | + ret z |
| 1880 | + cp a,';' |
| 1881 | + ret z |
| 1882 | + cp a,':' |
| 1883 | + ret z |
| 1884 | + cp a,'/' |
| 1885 | + ret z |
| 1886 | + cp a,'\' |
| 1887 | + ret z |
| 1888 | + cp a,'|' |
| 1889 | + ret z |
| 1890 | + cp a,'+' |
| 1891 | + ret z |
| 1892 | + cp a,'=' |
| 1893 | + ret z |
| 1894 | + cp a,'<' |
| 1895 | + ret z |
| 1896 | + cp a,'>' |
| 1897 | + ret z |
| 1898 | + cp a,'[' |
| 1899 | + ret z |
| 1900 | + cp a,']' |
| 1901 | + ret z |
| 1902 | + cp a,'"' |
| 1903 | + ret z |
| 1904 | + cp a,' ' |
| 1905 | + ret z |
| 1906 | + inc hl |
| 1907 | + jr .loop |
| 1908 | +.done: |
| 1909 | + inc a |
| 1910 | + ret |
| 1911 | + |
| 1912 | +;------------------------------------------------------------------------------- |
| 1913 | +util_toupper: |
| 1914 | + sub a,'a' |
| 1915 | + cp a,1+'z'-'a' |
| 1916 | + jr nc,.nochange |
| 1917 | + add a,'a' |
| 1918 | + res 5,a |
| 1919 | + ret |
| 1920 | +.nochange: |
| 1921 | + add a,'a' |
| 1922 | + ret |
| 1923 | + |
1854 | 1924 | ;-------------------------------------------------------------------------------
|
1855 | 1925 | util_get_component_start:
|
1856 | 1926 | ld a,(de)
|
|
0 commit comments