Fb2P_Diff: actualizare proiect + texte regenerate; PROMPT_cautare_vfp: flux editare/write-back
Modificari pre-existente (09.07) comise separat de fluxul git-text; .pj2/.sc2 reimprospatate din binare cu git_sync. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -32,7 +32,7 @@ _AutoIncrement = "0"
|
|||||||
|
|
||||||
|
|
||||||
*<BuildProj>
|
*<BuildProj>
|
||||||
*<.HomeDir = 'e:\se\vfpx\foxbin2prg\fb2p_diff' />
|
*<.HomeDir = 'd:\roa\util\foxbin2prg\fb2p_diff' />
|
||||||
|
|
||||||
FOR EACH loProject IN _VFP.Projects FOXOBJECT
|
FOR EACH loProject IN _VFP.Projects FOXOBJECT
|
||||||
loProject.Close()
|
loProject.Close()
|
||||||
@@ -70,9 +70,9 @@ ENDWITH
|
|||||||
|
|
||||||
WITH loProject
|
WITH loProject
|
||||||
*<ProjectProperties>
|
*<ProjectProperties>
|
||||||
.SetMain(lcCurdir + 'main_fb2p_diff.prg')
|
.SetMain("main_fb2p_diff.prg")
|
||||||
|
|
||||||
.Icon = lcCurdir + 'fb2p_diff.ico'
|
.Icon = "fb2p_diff.ico"
|
||||||
.Debug = .T.
|
.Debug = .T.
|
||||||
.Encrypted = .F.
|
.Encrypted = .F.
|
||||||
*<.CmntStyle = 1 />
|
*<.CmntStyle = 1 />
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
@@ -3,5 +3,4 @@
|
|||||||
*--------------------------------------------------------------------------------------------------------------------------------------------------------
|
*--------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
*< FOXBIN2PRG: Version="1.21" SourceFile="fb2p_diff.scx" CPID="1252" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries)
|
*< FOXBIN2PRG: Version="1.21" SourceFile="fb2p_diff.scx" CPID="1252" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries)
|
||||||
*
|
*
|
||||||
|
|
||||||
*
|
*
|
||||||
@@ -1,9 +1,10 @@
|
|||||||
# Prompt: căutare în cod VFP (foxbin2prg) — reutilizabil în orice proiect Visual FoxPro
|
# 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
|
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
|
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
|
fișierelor binare VFP** (`.vcx/.vct`, `.scx/.sct`, `.frx/.frt`, `.mnx/.mnt`, `.dbc/.dct`) într-un
|
||||||
proiect nou.
|
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
|
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`).
|
spui agentului care e proiectul curent (folderul + fișierul `.pjx`).
|
||||||
@@ -14,9 +15,10 @@ spui agentului care e proiectul curent (folderul + fișierul `.pjx`).
|
|||||||
|
|
||||||
1. Deschide proiectul VFP în Claude Code.
|
1. Deschide proiectul VFP în Claude Code.
|
||||||
2. Copiază blocul de mai jos în prompt.
|
2. Copiază blocul de mai jos în prompt.
|
||||||
3. Înlocuiește cele **2 valori** marcate `<<...>>` cu datele proiectului tău:
|
3. Înlocuiește cele **3 valori** marcate `<<...>>` cu datele proiectului tău:
|
||||||
- `<<RADACINA_PROIECT>>` = folderul rădăcină al proiectului (ex. `D:\ROA\ROAGEST`)
|
- `<<RADACINA_PROIECT>>` = folderul rădăcină al proiectului (ex. `D:\ROA\ROAGEST`)
|
||||||
- `<<FISIER_PJX>>` = calea către `.pjx` (ex. `D:\ROA\ROAGEST\roagest.pjx`)
|
- `<<FISIER_PJX>>` = calea către `.pjx` (ex. `D:\ROA\ROAGEST\roagest.pjx`)
|
||||||
|
- `<<NUME_PROIECT>>` = etichetă scurtă pentru folderul de cache (ex. `roagest`)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -34,9 +36,11 @@ Ca să poți căuta în acel cod, folosește unealta partajată foxbin2prg, care
|
|||||||
PARAMETRII PROIECTULUI CURENT:
|
PARAMETRII PROIECTULUI CURENT:
|
||||||
- Rădăcină proiect: <<RADACINA_PROIECT>>
|
- Rădăcină proiect: <<RADACINA_PROIECT>>
|
||||||
- Fișier proiect (.pjx): <<FISIER_PJX>>
|
- Fișier proiect (.pjx): <<FISIER_PJX>>
|
||||||
|
- Cache text: D:\ROA\_vfp_textcache\<<NUME_PROIECT>>
|
||||||
|
|
||||||
REGULA DE AUR: textul generat e DOAR pentru citire/căutare. Orice modificare de cod se face în
|
REGULA DE AUR: cache-ul text e sursa pentru CĂUTARE (toate tipurile de binar) și, DOAR pentru
|
||||||
IDE-ul VFP, în fișierul binar (.vcx/.scx/...), niciodată în text.
|
.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).
|
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):
|
Rulează în PowerShell (e incremental — sare peste ce e deja la zi):
|
||||||
@@ -60,40 +64,44 @@ CONVERSIE PUNCTUALĂ (un fișier sau folder care NU e în proiect, ex. o librăr
|
|||||||
|
|
||||||
ALTE OPȚIUNI: -Force (reconvertește tot), -Clean (șterge cache-ul întâi).
|
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
|
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
|
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.
|
fișier:linie din cache.
|
||||||
```
|
```
|
||||||
|
|
||||||
## ▲▲▲ SFÂRȘIT PROMPT ▲▲▲
|
## ▲▲▲ 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
|
## Note pentru adaptare
|
||||||
|
|
||||||
- `<<NUME_PROIECT>>` îl poți pune orice etichetă scurtă (ex. `roagest`), doar ca numele
|
- `<<NUME_PROIECT>>` îl poți pune orice etichetă scurtă (ex. `roagest`), doar ca numele
|
||||||
@@ -106,6 +114,14 @@ Fără backup-uri `.bak` lângă binarele din proiect — git e mecanismul de re
|
|||||||
- Cache-ul (`D:\ROA\_vfp_textcache\<proiect>`) e regenerabil și e în afara arborelui de versionare
|
- 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.
|
al proiectului (și în afara clonei foxbin2prg) — poate fi șters oricând.
|
||||||
- Conversia NU necesită IDE-ul VFP deschis (folosește `FoxBin2Prg.EXE` compilat).
|
- 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`.
|
- 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`,
|
- Tabel corespondență binar → text: `.vcx`→`.vc2`, `.scx`→`.sc2`, `.frx`→`.fr2`, `.mnx`→`.mn2`,
|
||||||
`.dbc`→`.dc2`, `.lbx`→`.lb2`.
|
`.dbc`→`.dc2`, `.lbx`→`.lb2`.
|
||||||
|
|||||||
Reference in New Issue
Block a user