Skip to content

Commit 8d7c138

Browse files
committed
Python VFS Script v1.2.0 (Adding Custom Index)
1 parent 3f8f440 commit 8d7c138

3 files changed

Lines changed: 63 additions & 21 deletions

File tree

examples/C++/virtual_file_system/vfs.py

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,24 @@
77
# Canada.
88
#
99
# WebUI Virtual File System Generator
10-
# v1.1
10+
# v1.2.0
1111

1212
import os
1313
import sys
1414

15-
def generate_vfs_header(directory, output_header):
15+
def generate_vfs_header(directory, output_header, custom_index=None):
1616
files = []
1717
index_files = {}
1818

19+
# Handle custom index file
20+
custom_index_path = None
21+
if custom_index:
22+
custom_index_rel = custom_index.lstrip('/').replace('\\', '/')
23+
custom_index_abs = os.path.join(directory, custom_index_rel)
24+
if os.path.isfile(custom_index_abs):
25+
custom_index_path = '/' + custom_index_rel
26+
27+
# Walk through the directory and collect files
1928
for root, _, filenames in os.walk(directory):
2029
for filename in filenames:
2130
filepath = os.path.join(root, filename)
@@ -30,10 +39,14 @@ def generate_vfs_header(directory, output_header):
3039
if dir_path not in index_files:
3140
index_files[dir_path] = relative_path
3241

42+
# If a custom index file is provided, override the root index
43+
if custom_index_path is not None:
44+
index_files["/"] = custom_index_path
45+
46+
# Generate the C header file
3347
with open(output_header, 'w') as header:
3448
header.write('#ifndef VIRTUAL_FILE_SYSTEM_H\n')
3549
header.write('#define VIRTUAL_FILE_SYSTEM_H\n\n')
36-
3750
header.write('typedef struct {\n')
3851
header.write(' const char *path;\n')
3952
header.write(' const unsigned char *data;\n')
@@ -85,7 +98,6 @@ def generate_vfs_header(directory, output_header):
8598
header.write('const void* vfs(const char* path, int* length) {\n')
8699
header.write(' const unsigned char* file_data;\n')
87100
header.write(' int file_length;\n\n')
88-
89101
header.write(' if (virtual_file_system(path, &file_data, &file_length)) {\n')
90102
header.write(' const char* content_type = webui_get_mime_type(path);\n')
91103
header.write(' const char* http_header_template = "HTTP/1.1 200 OK\\r\\n"\n')
@@ -126,11 +138,13 @@ def generate_vfs_header(directory, output_header):
126138
header.write('#endif // VIRTUAL_FILE_SYSTEM_H\n')
127139

128140
if __name__ == '__main__':
129-
if len(sys.argv) != 3:
130-
print(f'Usage: {sys.argv[0]} <directory> <output_header>')
141+
if len(sys.argv) not in (3, 4):
142+
print(f'Usage: {sys.argv[0]} <directory> <output_header> [custom_index_filename]')
131143
sys.exit(1)
132144

133145
directory = sys.argv[1]
134146
output_header = sys.argv[2]
135-
generate_vfs_header(directory, output_header)
147+
custom_index = sys.argv[3] if len(sys.argv) == 4 else None
148+
149+
generate_vfs_header(directory, output_header, custom_index)
136150
print(f'Generated {output_header} from {directory}')

examples/C/react/vfs.py

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,24 @@
77
# Canada.
88
#
99
# WebUI Virtual File System Generator
10-
# v1.1
10+
# v1.2.0
1111

1212
import os
1313
import sys
1414

15-
def generate_vfs_header(directory, output_header):
15+
def generate_vfs_header(directory, output_header, custom_index=None):
1616
files = []
1717
index_files = {}
1818

19+
# Handle custom index file
20+
custom_index_path = None
21+
if custom_index:
22+
custom_index_rel = custom_index.lstrip('/').replace('\\', '/')
23+
custom_index_abs = os.path.join(directory, custom_index_rel)
24+
if os.path.isfile(custom_index_abs):
25+
custom_index_path = '/' + custom_index_rel
26+
27+
# Walk through the directory and collect files
1928
for root, _, filenames in os.walk(directory):
2029
for filename in filenames:
2130
filepath = os.path.join(root, filename)
@@ -30,10 +39,14 @@ def generate_vfs_header(directory, output_header):
3039
if dir_path not in index_files:
3140
index_files[dir_path] = relative_path
3241

42+
# If a custom index file is provided, override the root index
43+
if custom_index_path is not None:
44+
index_files["/"] = custom_index_path
45+
46+
# Generate the C header file
3347
with open(output_header, 'w') as header:
3448
header.write('#ifndef VIRTUAL_FILE_SYSTEM_H\n')
3549
header.write('#define VIRTUAL_FILE_SYSTEM_H\n\n')
36-
3750
header.write('typedef struct {\n')
3851
header.write(' const char *path;\n')
3952
header.write(' const unsigned char *data;\n')
@@ -85,7 +98,6 @@ def generate_vfs_header(directory, output_header):
8598
header.write('const void* vfs(const char* path, int* length) {\n')
8699
header.write(' const unsigned char* file_data;\n')
87100
header.write(' int file_length;\n\n')
88-
89101
header.write(' if (virtual_file_system(path, &file_data, &file_length)) {\n')
90102
header.write(' const char* content_type = webui_get_mime_type(path);\n')
91103
header.write(' const char* http_header_template = "HTTP/1.1 200 OK\\r\\n"\n')
@@ -126,11 +138,13 @@ def generate_vfs_header(directory, output_header):
126138
header.write('#endif // VIRTUAL_FILE_SYSTEM_H\n')
127139

128140
if __name__ == '__main__':
129-
if len(sys.argv) != 3:
130-
print(f'Usage: {sys.argv[0]} <directory> <output_header>')
141+
if len(sys.argv) not in (3, 4):
142+
print(f'Usage: {sys.argv[0]} <directory> <output_header> [custom_index_filename]')
131143
sys.exit(1)
132144

133145
directory = sys.argv[1]
134146
output_header = sys.argv[2]
135-
generate_vfs_header(directory, output_header)
147+
custom_index = sys.argv[3] if len(sys.argv) == 4 else None
148+
149+
generate_vfs_header(directory, output_header, custom_index)
136150
print(f'Generated {output_header} from {directory}')

examples/C/virtual_file_system/vfs.py

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,24 @@
77
# Canada.
88
#
99
# WebUI Virtual File System Generator
10-
# v1.1
10+
# v1.2.0
1111

1212
import os
1313
import sys
1414

15-
def generate_vfs_header(directory, output_header):
15+
def generate_vfs_header(directory, output_header, custom_index=None):
1616
files = []
1717
index_files = {}
1818

19+
# Handle custom index file
20+
custom_index_path = None
21+
if custom_index:
22+
custom_index_rel = custom_index.lstrip('/').replace('\\', '/')
23+
custom_index_abs = os.path.join(directory, custom_index_rel)
24+
if os.path.isfile(custom_index_abs):
25+
custom_index_path = '/' + custom_index_rel
26+
27+
# Walk through the directory and collect files
1928
for root, _, filenames in os.walk(directory):
2029
for filename in filenames:
2130
filepath = os.path.join(root, filename)
@@ -30,10 +39,14 @@ def generate_vfs_header(directory, output_header):
3039
if dir_path not in index_files:
3140
index_files[dir_path] = relative_path
3241

42+
# If a custom index file is provided, override the root index
43+
if custom_index_path is not None:
44+
index_files["/"] = custom_index_path
45+
46+
# Generate the C header file
3347
with open(output_header, 'w') as header:
3448
header.write('#ifndef VIRTUAL_FILE_SYSTEM_H\n')
3549
header.write('#define VIRTUAL_FILE_SYSTEM_H\n\n')
36-
3750
header.write('typedef struct {\n')
3851
header.write(' const char *path;\n')
3952
header.write(' const unsigned char *data;\n')
@@ -85,7 +98,6 @@ def generate_vfs_header(directory, output_header):
8598
header.write('const void* vfs(const char* path, int* length) {\n')
8699
header.write(' const unsigned char* file_data;\n')
87100
header.write(' int file_length;\n\n')
88-
89101
header.write(' if (virtual_file_system(path, &file_data, &file_length)) {\n')
90102
header.write(' const char* content_type = webui_get_mime_type(path);\n')
91103
header.write(' const char* http_header_template = "HTTP/1.1 200 OK\\r\\n"\n')
@@ -126,11 +138,13 @@ def generate_vfs_header(directory, output_header):
126138
header.write('#endif // VIRTUAL_FILE_SYSTEM_H\n')
127139

128140
if __name__ == '__main__':
129-
if len(sys.argv) != 3:
130-
print(f'Usage: {sys.argv[0]} <directory> <output_header>')
141+
if len(sys.argv) not in (3, 4):
142+
print(f'Usage: {sys.argv[0]} <directory> <output_header> [custom_index_filename]')
131143
sys.exit(1)
132144

133145
directory = sys.argv[1]
134146
output_header = sys.argv[2]
135-
generate_vfs_header(directory, output_header)
147+
custom_index = sys.argv[3] if len(sys.argv) == 4 else None
148+
149+
generate_vfs_header(directory, output_header, custom_index)
136150
print(f'Generated {output_header} from {directory}')

0 commit comments

Comments
 (0)