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

3.3 KiB

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.

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