Files
flora2roa/Teste/bin_din_text.ps1
Marius Mutu 2736cbd525 Initial: flux text FoxBin2Prg (git urmareste .??2 in-arbore, binarele VFP git-ignored)
Include si sistemul de depanare/testare headless din Teste\ (harness UI cu capturi, verificare de sintaxa prin compilare, wrappere text<->binar) si docs\depanare_testare_flora2roa.md.
2026-08-02 08:56:52 +03:00

50 lines
2.0 KiB
PowerShell

<#
.SYNOPSIS
Scrie inapoi in proiect binarele VFP (.scx+.sct / .vcx+.vct) regenerate din textul editat.
.DESCRIPTION
Wrapper peste D:\ROA\UTIL\foxbin2prg\txt2vcx.ps1 cu parametrii FLORA2ROA. Flux in-arbore:
textul .sc2/.vc2 sta LANGA binar, deci -CacheRoot = radacina proiectului.
Regenereaza in staging, face fidelity check (bin -> text, comparat pe octeti) si abia apoi
copiaza peste binarul din proiect. Refuza daca binarul e blocat (IDE sau flora2roa.exe
deschis) sau daca e mai nou decat textul (fara -Force).
Editarea textului se face byte-safe, in Windows-1252:
$t = [IO.File]::ReadAllText($p, [Text.Encoding]::GetEncoding(1252))
[IO.File]::WriteAllText($p, $t, [Text.Encoding]::GetEncoding(1252))
NU cu tool-uri care scriu UTF-8: corup diacriticele din TOT fisierul.
Vezi COMUN\docs\flux-editare-vfp-text.md si conventie_encoding_cp1252.md.
Dupa write-back binarul e modificat in SVN: se comite in SVN doar cu acordul utilizatorului.
.PARAMETER TextFile
Unul sau mai multe fisiere .sc2/.vc2 din arbore (ex. frm_import.sc2).
.EXAMPLE
powershell -ExecutionPolicy Bypass -File Teste\bin_din_text.ps1 -TextFile frm_import.sc2 -DryRun
.EXAMPLE
powershell -ExecutionPolicy Bypass -File Teste\bin_din_text.ps1 -TextFile frm_import.sc2
#>
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)][string[]]$TextFile,
[string]$ProjectRoot,
[switch]$Force,
[switch]$NoVerify,
[switch]$DryRun
)
$ErrorActionPreference = 'Stop'
if (-not $ProjectRoot) { $ProjectRoot = Split-Path $PSScriptRoot -Parent }
$tool = 'D:\ROA\UTIL\foxbin2prg\txt2vcx.ps1'
if (-not (Test-Path $tool)) { throw "Nu gasesc $tool (tooling-ul partajat FoxBin2Prg)." }
$TextFile = $TextFile | ForEach-Object { if ([IO.Path]::IsPathRooted($_)) { $_ } else { Join-Path $ProjectRoot $_ } }
# flux in-arbore: CacheRoot = ProjectRoot (maparea text->binar devine identitate)
& $tool -TextFile $TextFile -ProjectRoot $ProjectRoot -CacheRoot $ProjectRoot `
-Force:$Force -NoVerify:$NoVerify -DryRun:$DryRun
exit $LASTEXITCODE