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

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

  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.