Gráfica de funciones de EDU Universaldata

EDU Universaldata es el programa que genera todo el proyecto Universaldata.

Esta gráfica muestra las 1140 funciones y subrutinas del programa EDU y sus mutuas invocaciones.
Estan agrupadas en 84 modulos y totalizan unas 3600 curvas de llamadas a funciones.
El codigo SVG se genera automaticamente desde el mismo programa leyendo sus propios archivos fuente en tiempo real.
El archivo SVG generado (Download) contine en las etiquetas de los links la info que indica que funciones están relacionadas. Abajo las dos rutinas que la generan.

Una ves bajado puede usar un navegador y aumentar con el zoom (Ctrl+ruedita del mouse)



Function leer_archivos_bas_y_frm()
lis = lista_de_archivos(rr & "programa", "*.frm")
lis = lis & enter & lista_de_archivos(rr & "programa", "*.bas")
sep = chr(9)

'PRIMERA PASADA para determinar sub y functions
Call renglon(lis, ren, resto)
Do While ren <> "" Or resto <> "" 'recorre los archivos
        codigo = archivo_a_texto(rr & "programa\" & ren) 'obtiene su codigo
       
        clave = "Function"
        clave_ini = clave & " "
        clave_fin = "End " & clave
        rutina = extrae(codigo, clave_ini, clave_fin, p1, p2, prev, remanente)
        Do While rutina <> ""
        nombre = extrae(rutina, clave & " ", "(")
        If nombre <> "" Then nombre = Mid(nombre, Len(clave_ini) + 1, Len(nombre) - Len(clave_ini))
            lista = lista & IIf(lista <> "", enter, "") & " " & nombre
            planilla = planilla & enter & ren & chr(9) & clave & chr(9) & nombre & chr(9) '& """" & rutina & """"
            'planilla = planilla & enter & ren & ";" & clave & ";" & nombre '& ";" '& """" & rutina & """"
        rutina = extrae(remanente, clave_ini, clave_fin, p1, , , remanente2)
        list_rut = list_rut & enter & nombre & chr(9) & """" & rutina & """"
        remanente = remanente2
        Loop
       
        clave = "Sub"
        clave_ini = clave & " "
        clave_fin = "End " & clave
        rutina = extrae(codigo, clave_ini, clave_fin, p1, p2, prev, remanente)
        Do While rutina <> ""
        nombre = extrae(rutina, clave & " ", "(")
        If nombre <> "" Then nombre = Mid(nombre, Len(clave_ini) + 1, Len(nombre) - Len(clave_ini) - 1)
            If nombre <> "" Then
                lista = lista & IIf(lista <> "", enter, "") & "call " & nombre
                planilla = planilla & enter & ren & chr(9) & clave & chr(9) & nombre & chr(9)
                'planilla = planilla & enter & ren & ";" & clave & ";" & nombre
            End If
        rutina = extrae(remanente, clave_ini, clave_fin, p1, , , remanente2)
        list_rut = list_rut & enter & nombre & chr(9) & """" & rutina & """"
        remanente = remanente2
        Loop
       
    Call renglon(resto, ren, resto)
Loop
'Call texto_a_archivo(rr & "programa\programa.csv", planilla)
'Call texto_a_archivo(rr & "programa\subyfunc.csv", lista)
lista = texto_a_expreg(lista)
exp_lista = Replace(lista, enter, "|")

planilla = ""
'SEGUNDA PASADA ya sabiendo cuales sub y funciones existen
Call renglon(lis, ren, resto)
planilla = ""
Do While ren <> "" Or resto <> "" 'recorre los archivos
        codigo = archivo_a_texto(rr & "programa\" & ren) 'obtiene su codigo
       
        clave = "Function"
        clave_ini = clave & " "
        clave_fin = "End " & clave
        rutina = extrae(codigo, clave_ini, clave_fin, p1, p2, prev, remanente)
        Do While rutina <> ""
        pri = InStr(1, rutina, ")")
        rut2 = Mid(rutina, pri + 1, Len(rutina) - (pri + 1 + Len(clave_fin)))
        largo = Len(rut2)
        res = ""
        Call exp_reg(rutina, exp_lista, res)
        nombre = extrae(rutina, clave & " ", "(")
        If nombre <> "" Then nombre = Mid(nombre, Len(clave_ini) + 1, Len(nombre) - Len(clave_ini) - 1)
        res2 = Replace(res, enter & nombre & enter, "")
        'If res2 <> res Then Stop
        res = unicos(res2)
        res = Replace(res, nombre & "(" & chr(9), "")
        res = Replace(res, chr(9) & enter, chr(9))
        res = Replace(res, enter, chr(9))
        res = Replace(res, "(", "")
        res = Replace(res, " ", "")
        If InStr(1, nombre, enter) = 0 Then
            planilla = planilla & enter & ren & chr(9) & clave & chr(9) & nombre & chr(9) & largo & chr(9) & res
            'planilla = planilla & enter & ren & ";" & clave & ";" & nombre '& ";" '& """" & rutina & """"
        End If
        rutina = extrae(remanente, clave_ini, clave_fin, p1, , , remanente2)
       
        remanente = remanente2
        Loop
       
        clave = "Sub"
        clave_ini = clave & " "
        clave_fin = "End " & clave
        rutina = extrae(codigo, clave_ini, clave_fin, p1, p2, prev, remanente)
        Do While rutina <> ""
        pri = InStr(1, rutina, ")")
        rut2 = Mid(rutina, pri + 1, Len(rutina) - (pri + 1 + Len(clave_fin)))
        largo = Len(rut2)
        res = ""
        Call exp_reg(rutina, exp_lista, res)
        nombre = extrae(rutina, clave & " ", "(")
        If nombre <> "" Then nombre = Mid(nombre, Len(clave_ini) + 1, Len(nombre) - Len(clave_ini) - 1)
        res2 = Replace(res, "Call " & nombre & chr(9), "")
        'If res2 <> res Then Stop
        res = unicos(res2)
        res = Replace(res, chr(9) & enter, chr(9))
        res = Replace(res, enter, chr(9))
        res = Replace(res, "(", "")
        res = Replace(res, "Call ", "")
        If InStr(1, nombre, enter) = 0 Then
            planilla = planilla & enter & ren & chr(9) & clave & chr(9) & nombre & chr(9) & largo & chr(9) & res
            'planilla = planilla & enter & ren & ";" & clave & ";" & nombre
        End If
        rutina = extrae(remanente, clave_ini, clave_fin, p1, , , remanente2)
        remanente = remanente2
        Loop
    Call renglon(resto, ren, resto)
Loop
abc = planilla
'Call texto_a_archivo(rr & "programa\programa.csv", planilla)
Call texto_a_archivo(rr & "programa\list_rut.csv", list_rut)
End Function




Function graficar_planilla_vb()
planilla = archivo_a_texto(rr & "programa\programa.csv")
list_rut = archivo_a_texto(rr & "programa\list_rut.csv")

nr = cantidad_de_renglones(planilla)
cfa = nr * 10
Dim r(2000, 4) As String
ra = cfa / 6.28
Pi = 3.141592
ma = 360 / cfa
codigo2 = ""
codigo = ""
archant = ""

For i = 0 To nr - 1
    If i = 0 Then Call renglon(planilla, ren, resto) Else Call renglon(resto, ren, resto)
    If i = 0 Then Call renglon(list_rut, ren_rut, restolist_rut) Else Call renglon(restolist_rut, ren_rut, restolist_rut)
    If ren <> "" Then
    nom_rutina = campoi(ren, 2)
    arch = campoi(ren, 0):
    If arch <> archant Then
    n = n + 1
    If n = 15 Then n = 1
        nn = color_cvg(n)
    End If
    archant = arch
    angulo = Int(90 - i * ma * 10)
    alfa = i * ma * Pi / 18
    X = Int(ra * Sin(alfa))
    Y = Int(ra * Cos(alfa))
    r(i, 1) = nom_rutina
    r(i, 2) = str(X)
    r(i, 3) = str(Y)
    r(i, 4) = nn
    tipo = campoi(ren, 1):
    ruti = campoi(ren_rut, 1)
    ruti = Replace(ruti, "'", " ")
    ruti = Replace(ruti, enter, " ")
    ruti = Replace(ruti, """", " ")
    ruti = ""
    If InStr(1, ruti, "'") > 0 Then Stop
    codigo = codigo & enter & ""
    If angulo > -270 And angulo < -90 Then alin = "text-anchor='end'": corr = 180: dx = -20 Else alin = "": corr = 0: dx = 0
    Texto = "" & sacar_tildes(nom_rutina, True) & ""
    'Texto = link_svg(Texto, "#", sacar_tildes(nom_rutina & ":  " & ruti, True))
    codigo2 = codigo2 & enter & Texto
   
   
    End If
Next i

codigo3 = ""
codigo4 = ""
archant = ""

For i = 0 To nr - 1
    If i = 1 Then Call renglon(planilla, ren, resto) Else Call renglon(resto, ren, resto)
        If ren <> "" Then
            nom_rutina = campoi(ren, 2)
            arch = campoi(ren, 0)
            list_rut = list_rut & " | " & nom_rutina
            Call coord(r, nom_rutina, x1, y1)
                If arch <> archant Then
                    If archant <> "" Then
                        angulo = Int(90 - i * ma * 10)
                        If angulo > -270 And angulo < -90 Then alin = "text-anchor='end'": corr = 180: dx = -20 Else alin = "text-anchor='start'": corr = 0: dx = 0
                            textoarch = "" & sacar_tildes(arch, True) & ""
                            textoarch = link_svg(textoarch, "#", sacar_tildes(arch & list_rut, True)): list_rut = ""
                            codigo4 = codigo4 & enter & textoarch
                            xarch = Val(x1)
                            yarch = Val(y1)
                    Else
                        xarch = Val(x1)
                        yarch = Val(y1)
                    End If
                Else
                        xarch = Val((xarch + x1) / 2)
                        yarch = Val((yarch + y1) / 2)
                End If
            archant = arch

            If x1 <> "" Then
                For j = 5 To cant_camp(ren) - 1
                nom_rutina2 = campoi(ren, j)
                Call coord(r, nom_rutina2, x2, y2)
                If x2 <> "" Then
                    angulo = Int(90 - i * ma * 10)
                    dist = Sqr(Abs((x2 - x1) ^ 2 + (y2 - y1) ^ 2))
                    factor = 1 - (dist / ra * 2) / 4
                    x21 = Int(x1 * factor)
                    y21 = Int(y1 * factor)
                    x22 = Int(x2 * factor)
                    y22 = Int(y2 * factor)
                    curva = ""
                    curva = link_svg(curva, "#", sacar_tildes(nom_rutina & "-> " & nom_rutina2, True))
                    codigo3 = codigo3 & enter & curva
                    textoarch = link_svg(textoarch, "#", arch)
                    nl = nl + 1
                End If
                Next j
            End If
            'End If
        End If
Next i

codigo2 = codigo2 & enter & "
"
codigo = codigo & enter & codigo4 & enter & codigo2 & codigo3
v = Int(ra * 1.5)
graficar_planilla_vb = encabezado_svg(codigo, 1600, 1600, -v, 2 * v, -v, 2 * v)
Call texto_a_archivo(rr & "programa\grafica.svg", graficar_planilla_vb)
End Function