Fluxul complet bin->text->edit->bin pentru .vcx/.scx (faza 1; .mnx/.frx raman read-only): regenerare+compilare in staging unic per rulare, guard-uri (COMUN cu -AllowComun, staleness, binar lipsa, folder foxbin2prg), fidelity check pe octeti inainte de orice copiere, copiere .vct->.vcx cu restaurare la esec partial, refresh cache. Harta de extensii extrasa in vfp_filemap.ps1, dot-sourced si de vcx2txt.ps1 (comportament identic). Invoke-FoxBin2PrgSafe: wrapper cu timeout+taskkill pentru toate invocarile exe-ului - la text stricat Prg2Bin intoarce ErrorLevel 0 dar binarul corupt poate ridica MessageBox modal VFP nesuprimabil la reconversie. test_roundtrip.ps1: faze fidelitate/editare/smoke siblings/negativ+guard-uri, 41 PASS pe ROAGEST + smoke ROAIMOB/ROAACNPRO. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
6.0 KiB
Prompt: căutare în cod VFP (foxbin2prg) — reutilizabil în orice proiect Visual FoxPro
Acest fișier conține un prompt gata de copiat pentru Claude Code (sau alt agent), care
configurează și folosește sistemul foxbin2prg ca să poată căuta cod-sursă aflat în interiorul
fișierelor binare VFP (.vcx/.vct, .scx/.sct, .frx/.frt, .mnx/.mnt, .dbc/.dct) într-un
proiect nou.
Unealta e partajată și stă la D:\ROA\UTIL\foxbin2prg\ — nu trebuie copiată per proiect. Doar
spui agentului care e proiectul curent (folderul + fișierul .pjx).
Cum se folosește
- Deschide proiectul VFP în Claude Code.
- Copiază blocul de mai jos în prompt.
- Înlocuiește cele 2 valori marcate
<<...>>cu datele proiectului tău:<<RADACINA_PROIECT>>= folderul rădăcină al proiectului (ex.D:\ROA\ROAGEST)<<FISIER_PJX>>= calea către.pjx(ex.D:\ROA\ROAGEST\roagest.pjx)
▼▼▼ PROMPT DE COPIAT ▼▼▼
Acest proiect este o aplicație Visual FoxPro 9. O mare parte din cod (proceduri, metode,
parametri) NU stă în fișiere .prg, ci în interiorul fișierelor binare VFP: librării de clase
(.vcx+.vct), forme (.scx+.sct), rapoarte (.frx+.frt), meniuri (.mnx+.mnt). Un grep direct pe
acestea nu e lizibil (sunt tabele DBF cu memo binar).
Ca să poți căuta în acel cod, folosește unealta partajată foxbin2prg, care convertește binarele
în reprezentarea lor TEXT (.vc2/.sc2/.fr2/.mn2/.dc2) într-un cache, și apoi caută în cache.
PARAMETRII PROIECTULUI CURENT:
- Rădăcină proiect: <<RADACINA_PROIECT>>
- Fișier proiect (.pjx): <<FISIER_PJX>>
REGULA DE AUR: textul generat e DOAR pentru citire/căutare. Orice modificare de cod se face în
IDE-ul VFP, în fișierul binar (.vcx/.scx/...), niciodată în text.
PAS 1 — populează cache-ul text (la începutul sesiunii, sau după ce s-a modificat ceva în IDE).
Rulează în PowerShell (e incremental — sare peste ce e deja la zi):
& 'D:\ROA\UTIL\foxbin2prg\vcx2txt.ps1' -Project '<<FISIER_PJX>>' -ProjectRoot '<<RADACINA_PROIECT>>' -CacheRoot 'D:\ROA\_vfp_textcache\<<NUME_PROIECT>>'
(Folosește un -CacheRoot distinct per proiect ca să nu amesteci cache-urile. Implicit scriptul
convertește doar .vcx și .scx; pentru a include și rapoarte/meniuri adaugă: -Types vcx,scx,frx,mnx)
Dacă scriptul se plânge că lipsește FoxBin2Prg.EXE, trebuie compilat o singură dată: deschide
'D:\ROA\UTIL\foxbin2prg\foxbin2prg.pj2' în VFP 9 și Build > Build Executable. Anunță-mă să fac asta.
PAS 2 — caută în cache cu unealta Grep (NU în binarele originale):
Grep pe folderul 'D:\ROA\_vfp_textcache\<<NUME_PROIECT>>' pentru numele de metodă/procedură/variabilă căutat.
Ex.: caută "PROCEDURE do_salvare" sau numele tabelei/cursorului implicat.
CONVERSIE PUNCTUALĂ (un fișier sau folder care NU e în proiect, ex. o librărie din COMUN):
& 'D:\ROA\UTIL\foxbin2prg\vcx2txt.ps1' -Source 'CALE\catre\librarie.vcx' -CacheRoot 'D:\ROA\_vfp_textcache\<<NUME_PROIECT>>'
ALTE OPȚIUNI: -Force (reconvertește tot), -Clean (șterge cache-ul întâi).
FLUX TIPIC: la prima sesiune rulează PAS 1 o dată, apoi caută cu Grep în cache (PAS 2). La
sesiunile următoare rescrie doar ce s-a schimbat. Când citești codul unei metode, dă referințe
fișier:linie din cache, dar reține: editarea efectivă se face în IDE-ul VFP pe binar.
▲▲▲ SFÂRȘIT PROMPT ▲▲▲
Write-back: editare directă pe text (.vcx/.scx)
Pe lângă căutare, cache-ul text poate fi acum și sursă de editare pentru .vcx/.scx (nu și
pentru .mnx/.frx, vezi mai jos), folosind scriptul frate txt2vcx.ps1:
& 'D:\ROA\UTIL\foxbin2prg\txt2vcx.ps1' -TextFile 'D:\ROA\_vfp_textcache\<<NUME_PROIECT>>\Clase\lib.vc2' -ProjectRoot '<<RADACINA_PROIECT>>' -CacheRoot 'D:\ROA\_vfp_textcache\<<NUME_PROIECT>>'
Fluxul complet: (1) refresh cache cu vcx2txt.ps1 (obligatoriu după orice sesiune de IDE, altfel
verificarea de staleness refuză scrierea); (2) editează .vc2/.sc2 direct — formatul e
position-sensitive (nu reformata/reflow) și proprietățile sunt alfabetizate (o proprietate
nouă se inserează la locul ei alfabetic); (3) revizuiește diff-ul pe text ca pe orice altă
modificare de cod; (4) rulează txt2vcx.ps1 — regenerează și compilează binarul într-un folder de
staging, verifică fidelitatea față de textul editat, și abia apoi copiază binarul în proiect (dacă
verificarea eșuează, proiectul rămâne neatins).
Limite: .mnx/.frx rămân doar pentru citire (meniurile tot au nevoie de GENMENU în IDE;
formatul de raport e prea fragil pentru round-trip). Ținte sub COMUN\ necesită flag-ul
-AllowComun și aprobare explicită — o modificare acolo afectează toate aplicațiile ROA.
Fără backup-uri .bak lângă binarele din proiect — git e mecanismul de restore. Detalii complete
(guard-uri, ordinea pașilor, teste): D:\ROA\UTIL\foxbin2prg\CLAUDE.md.
Note pentru adaptare
<<NUME_PROIECT>>îl poți pune orice etichetă scurtă (ex.roagest), doar ca numele folderului de cache să fie unic per proiect.- Ține cache-ul în
D:\ROA\_vfp_textcache\, adică în afara folderuluifoxbin2prg. Motiv:ReCreate_FoxBin2Prg.prgfacePrg2Binrecursiv pe tot folderul tool-ului și ar reconverti.??2-urile din orice cache aflat sub el înapoi în binare parazitare. - Scriptul citește lista de fișiere direct din
.pjx, deci convertește doar ce folosește efectiv proiectul (rapid), nu totCOMUN\. - Cache-ul (
D:\ROA\_vfp_textcache\<proiect>) e regenerabil și e în afara arborelui de versionare al proiectului (și în afara clonei foxbin2prg) — poate fi șters oricând. - Conversia NU necesită IDE-ul VFP deschis (folosește
FoxBin2Prg.EXEcompilat). - Ghid complet (varianta ROAACNPRO, cu exemple):
D:\ROA\ROAACNPRO\docs\cautare_vcx_vct.md. - Tabel corespondență binar → text:
.vcx→.vc2,.scx→.sc2,.frx→.fr2,.mnx→.mn2,.dbc→.dc2,.lbx→.lb2.