Files
comun/docs/cautare_vcx_vct.md
2026-08-23 11:08:56 +03:00

76 lines
3.3 KiB
Markdown

# Cautare in codul din librariile/formele VFP (.vcx/.vct, .scx/.sct, ...)
Partajat intre proiectele ROA*. Cod-sursa (proceduri, metode, parametri) care **nu** sta in
`.prg`, ci in binarele VFP: librarii de clase (`.vcx`+`.vct`), forme (`.scx`+`.sct`), rapoarte
(`.frx`+`.frt`), meniuri (`.mnx`+`.mnt`), baze de date (`.dbc`+`.dct`).
## De ce e nevoie de asta
Un `.vcx` e o tabela DBF: codul metodelor sta in campuri memo in `.vct`. `grep` direct pe `.vct`
gaseste textul dar ca binar (octeti `\0` intre linii), fara numere de linie si greu de citit.
Solutia: se converteste binarul in text (`.vc2`, `.sc2`, ...) si se cauta cu `Grep`.
## Flux curent (proiecte migrate): in-arbore
Migrate: ROACONT, COMUN, ROAGEST, ROAAUTO, ROAIMOB, ROAACNPRO, ROAFACTURARE, ROACONTRACTE
(prezenta `roa_sync.bat` in radacina proiectului = migrat).
Textul `.??2` sta langa binar. La inceput de sesiune si inainte de orice `git commit`:
```
powershell -ExecutionPolicy Bypass -File D:\ROA\UTIL\foxbin2prg\git_sync.ps1 -ProjectRoot <root>
```
Apoi cauta direct cu `Grep` in `.??2` din arbore (`PROCEDURE do_salvare`, etc.), citand
`fisier:linie`.
## Indexul de simboluri: vfp_symbols.ps1
`grep`/`Grep` spune *unde* e textul, nu *in ce metoda*. Intr-un `.vc2` cu zeci de mii de linii
(~2/3 proprietati/metadata, nu cod) si 15 clase care au fiecare `Init`/`Show`/`do_adauga`, fara
interval e usor sa nimeresti metoda gresita.
```powershell
$s = 'D:\ROA\UTIL\foxbin2prg\vfp_symbols.ps1'
$c = @('-CacheRoot', '<root>', '-ProjectRoot', '<root>')
powershell -ExecutionPolicy Bypass -File $s @c -Grep '<expresie>' -CodeOnly # etichetat clasa.metoda, doar cod
powershell -ExecutionPolicy Bypass -File $s @c -Where '<fisier>.vc2:<linie>' # cine detine linia
powershell -ExecutionPolicy Bypass -File $s @c -Find '<nume>' # unde e DEFINIT
powershell -ExecutionPolicy Bypass -File $s @c -Class '<nume_clasa>' # mostenire + metode
```
**`-Where`/`-Class` sunt OBLIGATORII inainte de o editare cu `txt2vcx.ps1`** - dau intervalul
exact al metodei. Indexul se reconstruieste din text cand textul e mai nou: ruleaza `git_sync.ps1`
inainte, altfel nu vede modificari facute in IDE si neconvertite.
Limite: nu rezolva apelurile indirecte (`EVALUATE`, `SET CLASSLIB`) - da candidati, nu
certitudine. Clasele de baza VFP (`form`, `custom`) apar neindexate (n-au sursa in proiect).
Copiile vechi de `.prg` din subfoldere sunt excluse implicit prin `-ExcludePrg`; da
`-ExcludePrg ''` ca sa vezi tot.
## Corespondenta extensii binar -> text
| Container | Binar (+memo) | Text |
|---|---|---|
| Librarie clase | `.vcx` + `.vct` | `.vc2` |
| Forma | `.scx` + `.sct` | `.sc2` |
| Raport | `.frx` + `.frt` | `.fr2` |
| Eticheta | `.lbx` + `.lbt` | `.lb2` |
| Meniu | `.mnx` + `.mnt` | `.mn2` |
| Baza de date | `.dbc` + `.dct` | `.dc2` |
## Proiecte NEmigrate (cache extern)
```
powershell -ExecutionPolicy Bypass -File D:\ROA\UTIL\foxbin2prg\vcx2txt.ps1 -Project <pjx> -ProjectRoot <root> -CacheRoot <cache>
```
`-CacheRoot` trebuie sa stea **in afara** folderului `foxbin2prg`: `ReCreate_FoxBin2Prg.prg` face
`Prg2Bin` recursiv pe tot folderul uneltei si ar reconverti `.??2`-urile in binare parazitare.
## Editare si write-back
Vezi `flux-editare-vfp-text.md`. Regula de aur: `.frx`/`.mnx`/`.lbx`/`.pjx`/`.dbc`/`.dbf` sunt
read-only (editare doar in IDE-ul VFP); write-back suportat doar pentru `.vcx`/`.scx`.