home *** CD-ROM | disk | FTP | other *** search
/ mail.altrad.com / 2015.02.mail.altrad.com.tar / mail.altrad.com / TEST / COMMERC_72_53OLD / commerc / PROGSOLD / XREF.PRG < prev   
Text File  |  2014-04-02  |  4KB  |  194 lines

  1. * Programme: XREF.PRG
  2. * Auteur...: R M ALCOCK
  3. * Date.....: 13/9/96
  4. * Copyright: (c) 1996, R M ALCOCK, Tous droits réservés
  5. * Notes....: Looks in all the programs in a directry for statements which
  6. *          : need modifying in a network environment.
  7. *
  8. *
  9. PROCEDURE MAIN
  10.  
  11. #include  "Directry.ch"        // For DIRECTORY function
  12. #include  "dcprint.ch"
  13. LOCAL I
  14.  
  15. PUBLIC aStruct, Printing := .F. , ThePath := "C:\PROJECTS\COMMERC\NEW_SYS\PROGS\"
  16.  
  17. *
  18. SET CONFIRM     ON
  19. SET DATE        FRENCH
  20. SET DELETED     ON
  21. SET EXACT       ON
  22. SET EXCLUSIVE   OFF
  23. SET FIXED       OFF
  24. SET SCOREBOARD  OFF
  25. SET WRAP        ON
  26. SET EPOCH TO 1980
  27.  
  28. CLEAR
  29. NET_USE (1, "XREF",  .T., 0, "", "")
  30. NET_USE (2, "XREF2", .T., 0, "", "")
  31.  
  32. aStruct = {"main.prg"}
  33.  
  34. IF CONFIRM (10,,'N',"Création Fichier ?")
  35.    SELECT XREF
  36.    ZAP
  37.  
  38.    CLEAR
  39.    ? "PROGRAM FILE"
  40.    ? "------------"
  41.    FOR i = 1 TO LEN(aStruct)
  42.       SEARCH_IT (aStruct[i])
  43.    NEXT
  44. ENDIF
  45.  
  46. SELECT XREF
  47. INDEX ON FUNCN TO XREF
  48. CLEAR
  49. //
  50. //----------------------------------------------------
  51. //
  52. IF CONFIRM (10,,'N', 'Imprimer la liste ?' )
  53.    SELECT XREF
  54.    SET PRINTER TO LPT1
  55.    DCREPORT FORM XREF NOEJECT TO PRINT
  56.    SET PRINTER TO LPT1
  57. ENDIF
  58. //
  59. //----------------------------------------------------
  60. //
  61. IF CONFIRM (10,,'N',"Trouver références ?")
  62.    SELECT XREF2
  63.    ZAP
  64.    ? "FUNCTIONS"
  65.    ? "---------"
  66.    SELECT XREF
  67.    GO TOP
  68.    DO WHILE .NOT. EOF ()
  69.       ?
  70.       ? FUNCN
  71.       IF ST <> "STATIC"
  72.          FIND_REFS (FUNCN)
  73.       ENDIF
  74.       SELECT XREF
  75.       SKIP
  76.    ENDDO
  77. ENDIF
  78. RETURN
  79. //
  80. //---------------------------------------------------------------------
  81. //
  82. FUNCTION SEARCH_IT(ProgName)
  83.  
  84. LOCAL aPRG:= MEMOREAD (ThePath + ProgName), NoLines, I, TheLine, J, K, IsStatic
  85.  
  86. STATIC NetWords:={"FUNCTION",;
  87.                   "PROCEDURE" }
  88.  
  89. NoLines = MLCOUNT (aPRG, 254)
  90.  
  91. FOR I=1 TO NoLines
  92.    TheLine = Get_Line (MEMOLINE(aPRG, 254, I))
  93.    FOR J=1 TO LEN(NetWords)
  94.       K = AT(NetWords [J], TheLine)
  95.       IF K <> 0
  96.          IsStatic = IIF ("STATIC" $ TheLine , "STATIC", "")
  97.          TheLine = ALLTRIM (SUBSTR (TheLine, K+LEN(NetWords[J] )))
  98.          ? STR(I,4)+" "+TheLine
  99.          SELECT XREF
  100.          ADD_REC()
  101.          REPLACE PRG   WITH SUBSTR (ProgName, 1, AT(".",ProgName)-1),;
  102.                  ST    WITH IsStatic,;
  103.                  FTYPE WITH NetWords [J],;
  104.                  FUNCN WITH TheLine,;
  105.                  LINE  WITH I
  106.       ENDIF
  107.    NEXT
  108. NEXT
  109. RETURN.T.
  110. //
  111. //---------------------------------------------------------------------
  112. //
  113. FUNCTION FIND_REFS (FuncName)
  114.  
  115. LOCAL aPRG, NoLines, I, TheLine, J, K, La := SELECT()
  116. LOCAL Before, After, Delim := " &#{([-\@)]+=}$*!/:.;<>"
  117.  
  118. I = AT( '(' , FuncName)
  119. IF I <> 0
  120.    FuncName = ALLTRIM (SUBSTR (FuncName, 1, I-1))
  121. ENDIF
  122. FuncName = ALLTRIM (FuncName)
  123.  
  124.  
  125.  
  126.  
  127.  
  128.  
  129. FOR I = 1 TO  LEN (aStruct)
  130.  
  131.    aPRG:= MEMOREAD (ThePath + aStruct[I])
  132.    NoLines = MLCOUNT (aPRG, 254)
  133.    ? "   " + aStruct[I]
  134.    FOR J = 1 TO NoLines
  135.  
  136.       TheLine = Get_Line (MEMOLINE(aPRG, 254, J))
  137.  
  138.       K = AT(FuncName, TheLine)
  139.       IF K <> 0
  140.  
  141.          // See if the previous character and the following are delimiters
  142.          // i.e. the reference is a word
  143.  
  144.          IF K=1
  145.             Before = 1   // Start of a line
  146.          ELSE
  147.             Before = AT ( SUBSTR (TheLine, K-1, 1) , Delim)
  148.          ENDIF
  149.  
  150.          IF K + LEN(FuncName) - 1 = LEN (TheLine)
  151.             After = 1    // End of the line
  152.          ELSE
  153.             After = AT ( SUBSTR (TheLine, K+ LEN(FuncName), 1) , Delim)
  154.          ENDIF
  155.  
  156.          IF Before <> 0 .AND. After <> 0   // Delimiters both sides
  157.  
  158.             ? STR(J,4)+" "+TheLine
  159.             SELECT XREF2
  160.             ADD_REC()
  161.             REPLACE FUNCN WITH FuncName,;
  162.                     PROG  WITH aStruct[I],;
  163.                     LINE WITH J
  164.             SELECT XREF
  165.          ENDIF
  166.       ENDIF
  167.  
  168.    NEXT
  169. NEXT
  170. SELECT (La)
  171. RETURN.T.
  172. //
  173. //---------------------------------------------------------------------
  174. //
  175. FUNCTION Get_Line(aLine)
  176. LOCAL I
  177.  
  178. aLine = SUBSTR(UPPER(ALLTRIM(aLine)), 1, 70)
  179. IF SUBSTR(aLine,1,1) = "*".OR. SUBSTR(aLine,1,2)="//"
  180.    RETURN ""
  181. ENDIF
  182. I=AT("//",aLine)
  183. IF I=0
  184.    I=AT("&&",aLine)
  185. ENDIF
  186. IF I<>0
  187.    aLine=SUBSTR(aLine,1,I-1)
  188. ENDIF
  189. RETURN aLine
  190.  
  191.  
  192.  
  193.  
  194.