exemple d'utilisation de APROCINFO pour documenter un .prg
# 0000000495
ajouté le 18/11/2007 15:57:05 et modifié le 18/11/2007
consulté 9890 fois
Niveau
débutant
Version(s) Foxpro : VFP 9.0
Description
ce petit programme (que je lance pour ma part par un ON KEY LABEL ALT+I DO (HOME()+"info_prg") récupère des informations interessantes sur le .prg courant par la fonction APROCINFO.
On ordonne les informations par numéro de ligne ce qui permet d'obtenir un ordre logique. Puis on crée un fichier pour y mettre le résultat.
Code source :
* J. MAURICE : exemple d'utilisation de APROCINFO pour documenter une classe programmée IFEMPTY( WONTOP()) WAITWINDOW"IMPOSSIBLE D'EXECUTER LA MACRO :"+ CHR(13) + " PAS DE FENETRE ACTIVE"NOWAIT ELSE LOCAL lcfenetre, lcfichier, lcsortie, lnhandle, lnligne0, lni, ;
llproc1, llyaclasse, lcclasse, lnlong, lc4, lldirect1 LOCALARRAY lttab0(1) STORE.T.TO llproc1, lldirect1 STORE.F.TO llyaclasse STORE 0 TO lnlong STORE""TO lcclasse
lcfichier = WTITLE()
lcsortie = JUSTSTEM(m.lcfichier)+ ".lcp" ERASE (m.lcsortie)
lnligne0 = APROCINFO(lttab0, m.lcfichier, 0)
= ASORT(lttab0, 2)
lnhandle = FCREATE( m.lcsortie,0) IF m.lnhandle > -1 * = FPUTS(m.lnhandle, "** Classes et procédures de "+ m.lcfichier + ; " (maj du "+ DTOC(DATE())+ " "+TIME()+ ")") *SET STEP ON FOR m.lni = 1 TO m.lnligne0
lc4 = lttab0(m.lni,3) DOCASE CASE m.lc4 = "Directive" IF m.lldirect1
= FPUTS(m.lnhandle, "** Liste des directives")
lldirect1 = .F. ENDIF&& lldirect1 IFLEFT(lttab0(m.lni,1),7) == "INCLUDE" * on liste les include (mais pas les #IF, #ENDIF, ...)
= FPUTS(m.lnhandle, "** "+ STR(lttab0( m.lni,2), 6)+ " "+ lttab0(m.lni, 1)) ENDIF&& LEFT(lttab0(m.lni,1),7) == "INCLUDE" CASE m.lc4 = "Procedure" IF m.llyaclasse
= FPUTS(m.lnhandle, "** "+ STR(lttab0( m.lni,2), 6)+ " "+ ; SUBSTR(lttab0(m.lni, 1), m.lnlong)) ELSE * on liste les procédures et fonctions du .prg. Ce sont de * vraies fonctions ou procedures et non des méthodes d'une * classe. On y accède par un DO ... IN ... IF m.llproc1 * c'est la première procédure que l'on liste, il faut mettre * un titre
llproc1 = .F.
= FPUTS(m.lnhandle, "** Fonctions et Procédures (hors méthodes de classe)") ENDIF&& m.llproc1
= FPUTS(m.lnhandle, "** "+ STR(lttab0( m.lni,2), 6)+ " "+ lttab0(m.lni, 1)) ENDIF&& m.llyaclasse CASE m.lc4 = "Class"
= FPUTS( m.lnhandle, "**")
llyaclasse = .T.
lnlong = AT(" AS ", lttab0(m.lni, 1))
lcclasse = IIF(m.lnlong = 0, lttab0(m.lni, 1), ; LEFT(lttab0(m.lni, 1), m.lnlong -1))
= FPUTS( m.lnhandle, "** Classe: "+ UPPER(m.lcclasse)+ IIF(m.lnlong=0, "", ; " basée sur " + SUBSTR(lttab0(m.lni, 1), m.lnlong+4 )))
lnlong = LEN(m.lcclasse) + 1 CASE m.lc4 = "Define" * on ne liste pas les #DEFINE ENDCASE ENDFOR&&* m.lni = 1 TO m.lnligne0
= FCLOSE(m.lnhandle) MODIFYFILE (m.lcsortie) NOWAIT ELSE WAITWINDOW"Impossible de créer "+ m.lcsortie NOWAIT ENDIF&& m.lnhandle > 0 ENDIF&& EMPTY(WOUTPUT())