Add FILE: line extraction logic to parse embedded C/C++ blocks from program.st

- Extract FILE: lines from program.st similar to DBG: line extraction
- Write extracted files to ./core directory with proper path handling
- Support subdirectories (e.g., FILE:test/abc.txt -> ./core/test/abc.txt)
- Remove FILE: and DBG: lines from program.st before MatIEC compilation
- No fallback .blank files needed for FILE: content

Co-Authored-By: Thiago Alves <thiagoralves@gmail.com>
This commit is contained in:
Devin AI
2025-10-22 01:00:38 +00:00
parent 9c246ca236
commit 7ea8d717c5

View File

@@ -5,6 +5,7 @@ import errno
import time import time
from threading import Thread, Lock from threading import Thread, Lock
from queue import Queue, Empty from queue import Queue, Empty
import os
import os.path import os.path
intervals = ( intervals = (
@@ -123,10 +124,18 @@ class runtime:
combined_lines = combined_lines.split('\n') combined_lines = combined_lines.split('\n')
program_lines = [] program_lines = []
c_debug_lines = [] c_debug_lines = []
file_lines = {}
for line in combined_lines: for line in combined_lines:
if line.startswith('(*DBG:') and line.endswith('*)'): if line.startswith('(*DBG:') and line.endswith('*)'):
c_debug_lines.append(line[6:-2]) c_debug_lines.append(line[6:-2])
elif line.startswith('(*FILE:') and line.endswith('*)'):
file_content = line[7:-2].strip()
if ' ' in file_content:
file_path, file_line = file_content.split(' ', 1)
if file_path not in file_lines:
file_lines[file_path] = []
file_lines[file_path].append(file_line)
else: else:
program_lines.append(line) program_lines.append(line)
@@ -148,6 +157,12 @@ class runtime:
with open('./core/debug.cpp', "w") as f: with open('./core/debug.cpp', "w") as f:
f.write(c_debug) f.write(c_debug)
for file_path, lines in file_lines.items():
full_path = os.path.join('./core', file_path)
os.makedirs(os.path.dirname(full_path), exist_ok=True)
with open(full_path, "w") as f:
f.write('\n'.join(lines))
# Start compilation # Start compilation
try: try:
a = subprocess.Popen(['./scripts/compile_program.sh', str(st_file)], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) a = subprocess.Popen(['./scripts/compile_program.sh', str(st_file)], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
@@ -164,6 +179,12 @@ class runtime:
with open('./core/debug.cpp', "w") as f: with open('./core/debug.cpp', "w") as f:
f.write(c_debug) f.write(c_debug)
for file_path, lines in file_lines.items():
full_path = os.path.join('./core', file_path)
os.makedirs(os.path.dirname(full_path), exist_ok=True)
with open(full_path, "w") as f:
f.write('\n'.join(lines))
#Write program and debug files #Write program and debug files
with open('./st_files/' + st_file, "w") as f: with open('./st_files/' + st_file, "w") as f:
f.write(program) f.write(program)