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.