Files
comun/docs/PROMPT_cautare_vfp.md

7.6 KiB

Prompt: căutare și editare î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 — și, pentru .vcx/.scx, să poată și modifica acel cod direct pe text, cu write-back în binar (txt2vcx.ps1), fără trecere prin IDE-ul VFP.

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 3 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)
    • <<NUME_PROIECT>> = etichetă scurtă pentru folderul de cache (ex. roagest)

▼▼▼ 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>>
- Cache text: D:\ROA\_vfp_textcache\<<NUME_PROIECT>>

REGULA DE AUR: cache-ul text e sursa pentru CĂUTARE (toate tipurile de binar) și, DOAR pentru
.vcx/.scx, și pentru EDITARE cu write-back (txt2vcx.ps1, vezi PAS 3). Pentru .frx/.mnx/.dbc
textul rămâne doar pentru citire — modificările la ele se fac în IDE-ul VFP, pe binar.

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).

PAS 3 — modificare de cod în .vcx/.scx (flux write-back pe text). Ordinea e obligatorie:

  a. Investighează pe cache, propune modificarea și AȘTEAPTĂ ACORDUL pe abordare înainte să
     editezi ceva.
  b. Refresh cache (PAS 1) dacă a rulat vreo sesiune de IDE de la ultimul refresh (staleness-ul
     se verifică pe mtime și txt2vcx refuză corect scrierea peste modificări nevăzute). Înainte
     de write-back închide COMPLET VFP IDE și exe-ul aplicației — procesele reziduale țin lock
     pe binare.
  c. Editează .vc2/.sc2 BYTE-SAFE: formatul e position-sensitive (nu reformata/reflow linii),
     proprietățile sunt alfabetizate (una nouă se inserează la locul ei alfabetic). Headerul
     CPID="1252" poate minți despre codepage-ul real al diacriticelor — citește/scrie fișierul
     ca bytes (PowerShell), conținutul NOU doar ASCII; nu folosi unelte care re-encodează.
  d. Write-back:

     & '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>>'

     Regenerează + compilează binarul în staging, verifică fidelitatea (roundtrip byte-identic
     față de textul editat) și abia apoi copiază binarul în proiect; la orice eșec proiectul
     rămâne neatins. Ținte sub COMUN\ cer flag-ul -AllowComun ȘI aprobare explicită — o
     modificare acolo afectează toate aplicațiile ROA.
  e. Diff lizibil pentru review: extrage binarul vechi din git (git show HEAD:cale > temp, atât
     .vcx cât și .vct), regenerează-i textul cu vcx2txt.ps1 -Source într-un folder temporar și
     compară cu cache-ul editat: git diff --no-index. COMMIT DOAR după ce omul confirmă pe diff
     și testează în IDE.

EXCEPȚII: pentru .mnx (GENMENU) și .frx (fragile la round-trip) nu există write-back — scrie
propunerea de modificare într-un fișier docs/propuneri_<subiect>.md (cod + unde se inserează),
iar aplicarea se face manual în IDE-ul VFP.

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.

▲▲▲ SFÂRȘIT PROMPT ▲▲▲


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).
  • Fără backup-uri .bak lângă binarele din proiect — git e mecanismul de restore; txt2vcx.ps1 ține o copie de siguranță doar în folderul temp al rulării.
  • Editările de volum se pot delega la subagenți (Sonnet, în background) — sesiunea principală orchestrează, verifică diff/fidelity și intervine doar la deblocări și decizii.
  • Detalii complete despre write-back (guard-uri, encoding, dialoguri VFP modale la text corupt, testul de regresie test_roundtrip.ps1): D:\ROA\UTIL\foxbin2prg\CLAUDE.md.
  • Exemplu funcțional, rodat pe ROAGEST: D:\ROA\ROAGEST\docs\flux-editare-vfp-text.md și D:\ROA\ROAGEST\docs\CLAUDE.md (modul de lucru complet, cu review pe diff înainte de commit).
  • Ghid complet doar-căutare (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.