# 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 ``` 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', '', '-ProjectRoot', '') powershell -ExecutionPolicy Bypass -File $s @c -Grep '' -CodeOnly # etichetat clasa.metoda, doar cod powershell -ExecutionPolicy Bypass -File $s @c -Where '.vc2:' # cine detine linia powershell -ExecutionPolicy Bypass -File $s @c -Find '' # unde e DEFINIT powershell -ExecutionPolicy Bypass -File $s @c -Class '' # 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 -ProjectRoot -CacheRoot ``` `-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`.