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.
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 = "
'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 = "
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