Files
foxbin2prg/PROMPT_cautare_vfp.md
Marius Mutu f36a26a9c6 Adauga write-back text->binar VFP: txt2vcx.ps1 + vfp_filemap.ps1 + test_roundtrip.ps1
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>
2026-07-09 18:30:21 +03:00

112 lines
6.0 KiB
Markdown

# 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
1. Deschide proiectul VFP în Claude Code.
2. Copiază blocul de mai jos în prompt.
3. Î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** folderului `foxbin2prg`. Motiv:
`ReCreate_FoxBin2Prg.prg` face `Prg2Bin` recursiv 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 tot `COMUN\`.
- 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.EXE` compilat).
- 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`.