76 lines
3.3 KiB
Markdown
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`.
|