include "GrapDecl.PRO"
CONSTANTS
intlist = BGI_ilist
bgi_Path = "c:\\xt\\tc\\bgi\\"
Domains
file=entrada;salida
list_integer=integer *
llist_integer=list_integer *
list_char=char *
/************************************************************************
Local data base
*************************************************************************/
Database - graphics
Determ driver(Integer,Integer,String)
Determ maxcolors(Integer)
Determ maxX(Integer)
Determ maxY(Integer)
Determ aspectCorr(Real)
Determ graphCoord(Integer,Integer)
Determ lineStyleDBA(Integer,Integer,Integer)
Determ textHeightDBA(Integer)
/************************************************************************
Return name of driver
*************************************************************************/
PREDICATES
GetDriverName2(Integer,String)
CLAUSES
GetDriverName2(0,"Detect"). GetDriverName2(1,"CGA").
GetDriverName2(2,"MCGA"). GetDriverName2(3,"EGA").
GetDriverName2(4,"EGA64"). GetDriverName2(5,"EGAMono").
GetDriverName2(6,"Reserved"). GetDriverName2(7,"HercMono").
GetDriverName2(8,"ATT400"). GetDriverName2(9,"VGA").
GetDriverName2(10,"PC3270").
/************************************************************************
Convert the current device mode into a string
*************************************************************************/
PREDICATES
GetMode(Integer,Integer,String)
CLAUSES
GetMode(cga,cgaHi,"CGAHi"):-!.
GetMode(cga,GraphMode,S):- !,format(S,"CGA%",GraphMode).
GetMode(mcga,mcgaMed,"MCGAMed"):- !.
GetMode(mcga,mcgahi,"MCGAHi"):- !.
GetMode(mcga,GraphMode,S):- !,format(S,"MCGA%",GraphMode).
GetMode(ega,egaLo,"EGALo"):- !.
GetMode(ega,egaHi,"EGAHi"):- !.
GetMode(ega64,ega64Lo,"EGA64Lo"):- !.
GetMode(ega64,ega64Hi,"EGA64Hi"):- !.
GetMode(hercMono,_,"HercMonoHi"):- !.
GetMode(egaMono,_,"EGAMonoHi"):- !.
GetMode(pc3270,_,"PC3270Hi"):- !.
GetMode(att400,att400Med,"ATT400Med"):- !.
GetMode(att400,att400Hi,"ATT400Hi"):- !.
GetMode(att400,GraphMode,S):- !,format(S,"ATT400%",GraphMode).
GetMode(vga,vgaLo,"VGALo"):- !.
GetMode(vga,vgaMed,"VGAMedo"):- !.
GetMode(vga,vgaHi,"VGAHi"):- !.
GetMode(_,_,"UnKnown"):- !.
/************************************************************************
Mode switching
*************************************************************************/
PREDICATES
ToGraphic
ToText
KeepColor(integer,integer,integer)
CLAUSES
ToGrapHic:-
/* Detect graphic equipment */
DetectGraph(G_Driver, G_Mode1),
KeepColor(G_Driver,G_Mode1,G_Mode),
GetDriverName2(G_Driver,G_Name),
assert(driver(G_Driver,G_Mode,G_Name)),
InitGraph(G_Driver,G_Mode, _, _, bgi_Path),!.
ToText:-
closegraph().
KeepColor(1,_,0).
KeepColor(_,Mode,Mode).
/************************************************************************
Initialize video and Global flags
*************************************************************************/
PREDICATES
Initialize
CLAUSES
Initialize:-
retractall(_, graphics),
ToGraphic,
GetMaxColor(MaxColors), assert(maxcolors(MaxColors)),
GetMaxX(MaxX), assert(maxX(MaxX)),
GetMaxY(MaxY), assert(maxY(MaxY)),
GetAspectRatio(Xasp,Yasp),
AspectRatio = Xasp/Yasp, assert(aspectCorr(AspectRatio)).
/************************************************************************
Mi c¢digo al fin...
*************************************************************************/
include "dibuja.pro"
include "interact.pro"
Predicates
error(integer)
abre_lect(string)
abre_escr(string)
lee_archivo(llist_integer,llist_integer)
genera(char)
generar
char_real(char,real)
real_char(real,char)
menu(char)
Goal
menu('0').
Clauses
menu('\27'):-exit.
menu('1'):-makewindow(31,31,30,"Archivo a Guardar:",10,15,5,54),write("\nDame el nombre del archivo donde se salvar "),
readln(FileName),abre_escr(FileName),
genera(1),!,removewindow(),menu('0').
menu('2'):-makewindow(31,31,30,"Archivo a Guardar:",10,15,5,54),write("\nDame el nombre del archivo donde se salvar "),
readln(FileName),abre_escr(FileName),
generar,!,removewindow(),menu('0').
menu('3'):-makewindow(31,31,30,"",8,10,11,65),
trap(dir("","*.",FileName,1,1,1),E,error(E)),FileName<>"",
abre_lect(FileName),lee_archivo([],Coor),
Initialize,interac(Coor,45,'4','1','5'),ToText,removewindow(),!,menu('0').
menu('4'):-file_str("manusu.txt",Str),makewindow(32,112,126,"Manual del Usuario",1,1,23,77),
clearwindow,EditMode=0,Indent=0,Insert=1,TextMode=1,
edit(Str,_," ","manusu.txt","ESC para salir",0,"",EditMode,Indent,Insert,TextMode,_,_),
removewindow(),menu('0').
menu('5'):-file_str("mantec.txt",Str),makewindow(32,112,126,"Manual T‚cnico",1,1,23,77),
clearwindow,EditMode=0,Indent=0,Insert=1,TextMode=1,
edit(Str,_," ","mantec.txt","ESC para salir",0,"",EditMode,Indent,Insert,TextMode,_,_),
removewindow(),menu('0').
menu(_):-makewindow(31,31,30,"Visualizador Tridimensional",8,10,13,66),
write("\n1 Generar una gr fica tridimensional modificable en \"genera(A)\"."),
write("\n2 Generar una gr fica tridimensional modificable en \"generar\". "),
write("\n3 Visualizar una gr fica tridimensional (F1-Help)."),
write("\n\n4 Manual del Usuario."),
write("\n\n5 Manual T‚cnico."),
write("\n ESC para salir"),
readchar(I),removewindow(),!,menu(I).
error(_).
char_real(X,A):-char_int(A,H),X=10*(H/10).
real_char(X,A):-H=10*(X/10),char_int(A,H).
abre_lect(FileName):-openread(entrada,FileName),filemode(entrada,0).
abre_escr(FileName):-not(ExistFile(FileName)),openwrite(salida,FileName),filemode(salida,0).
abre_escr(FileName):-openappend(salida,FileName),filemode(salida,0).
generar:-writedevice(salida),
write('\4','\0','\167'),
write('\12','\0','\168'),
write('\14','\0','\170'),
write('\14','\0','\227'),
write('\12','\0','\228'),
write('\4','\0','\229'),
write('\4','\0','\233'),
write('\28','\0','\233'),
write('\28','\0','\230'),
write('\71','\67','\169'),
write('\71','\67','\244'),
write('\68','\67','\247'),
write('\56','\67','\248'),
write('\56','\67','\255'),
write('\98','\67','\255'),
write('\98','\67','\248'),
write('\86','\67','\247'),
write('\82','\67','\244'),
write('\82','\67','\148'),
write('\69','\67','\148'),
write('\22','\0','\222'),
write('\22','\0','\170'),
write('\24','\0','\168'),
write('\32','\0','\167'),
write('\32','\0','\163'),
write('\4','\0','\163'),
write('\4','\6','\167'),
write('\12','\6','\168'),
write('\14','\6','\170'),
write('\14','\6','\227'),
write('\12','\6','\228'),
write('\4','\6','\229'),
write('\4','\6','\233'),
write('\28','\6','\233'),
write('\28','\6','\230'),
write('\71','\74','\169'),
write('\71','\74','\244'),
write('\68','\74','\247'),
write('\56','\74','\248'),
write('\56','\74','\255'),
write('\98','\74','\255'),
write('\98','\74','\248'),
write('\86','\74','\247'),
write('\82','\74','\244'),
write('\82','\74','\148'),
write('\69','\74','\148'),
write('\22','\6','\222'),
write('\22','\6','\170'),
write('\24','\6','\168'),
write('\32','\6','\167'),
write('\32','\6','\163'),
/*write('\4','\6','\163'),*/
closefile(salida),writedevice(screen),!.
genera(256):-closefile(salida),writedevice(screen),!.
genera(A):-writedevice(salida),
char_real(X,A),Y=127+127*cos(2*2*3.1415*(1-X/255)),
real_char(Y,B),Z=127+127*sin(4*2*3.1415*(1-X/255)),
real_char(Z,C),
write(A,B,C),
D=A+1,!,genera(D).
lee_archivo(Van,Coor):-readdevice(entrada),not(eof(entrada)),
readchar(X),char_int(X,A),readchar(Y),char_int(Y,B),
readchar(Z),char_int(Z,C),Coor1=[[A,B,C]|Van],!,
lee_archivo(Coor1,Coor).
lee_archivo(Coor,Coor):-closefile(entrada).
               (
geocities.com/v.iniestra/apuntes)                   (
geocities.com/v.iniestra)