MENURED.PRO



	CODE = 2000
domains
    i   = integer
    s   = symbol
    st  = string
    li  = i*
    ls  = s*
    lst = st*
    key	= arr;aba;izq;der;f(i);otro;enter

database - posicion
	posicion(i,i)			% (menu,actual)
database - menu
ual,col_nuevo)
database - opc
	opc(i,i,i,st,st,st)		% (menu,pos,long,opc,help,arch_bat)
database - fin

predicates
	actualiza_pos(i,i,i)		% (menu,actual, 1)
	a_key(key)
	aviso(i,st)			% (Menu,Help)
	b_key(i,key)
	clear(li)
	e_tecla(key)
	fill(st,i)			% (Relleno,Renglones) - (i,i)
	key(i,key)
	mes(i,st)
	pantalla
	remove(li)
	retardo(i,i)			% (segundo,valor) - (i,i)
	run 				% ciclo infinito del programa
	shift(li)
clauses
% ___________________________________________________________________________
% -------------------    Control del cursor  --------------------------------
%                        ------- --- -------
run:-
	fin("si"), remove([1,2,3,4,5]), !.
run:-
                  a_key(K), e_tecla(K), !, run.
run:- !.
   % para trazar a_key(Key):-   readchar(_), readchar(K), char_int(K,Asc), key(Asc,Key).
   % para correr 
   a_key(Key):-  inkey(K), !, char_int(K,Asc), key(Asc,Key).
   a_key(K_):-   !, a_key(K_).

   key(13,enter):- !.
   key(72,arr):-!. key(80,aba):-!. key(75,izq):-!. key(77,der):-!.
   key(0,Key):- readchar(T), char_int(T,Asc), b_key(Asc,Key).
   key(_,otro):- !.

   b_key(72,arr):-!. b_key(80,aba):-!. b_key(75,izq):-!.
   b_key(77,der):-!. b_key(N,f(K)):- N >= 59, N <= 68, !, N - 58 = K.
   b_key(_,otro):-!.

e_tecla(enter):- posicion(Menu,Pos), ejecuta(Menu,Pos), !.
e_tecla(enter):- !, fail.
e_tecla(f(1)):-!.
/*  shift([5]), file_str("ayuda.pro",Logo),
  display(Logo), clear([5]), shift([3]), !.*/
e_tecla(Flecha):-
	Flecha = der, !, posicion(Menu,Actual), actualiza_pos(Menu,Actual,1), !;
	Flecha = aba, !, posicion(Menu,Actual), actualiza_pos(Menu,Actual,1), !;
	Flecha = izq, !, posicion(Menu,Actual), actualiza_pos(Menu,Actual,-1),!;
	Flecha = arr, !, posicion(Menu,Actual), actualiza_pos(Menu,Actual,-1),!.

e_tecla(_):-!.
% ___________________________________________________________________________
% ---------------------------------------------------------------------------
% ___________________________________________________________________________
%                       --------- -- ---------

ejecuta(1,Opc):-
	Opc = 10, !, remove([1,2,3,4,5]),	% Terminar
	renamefile("sid.bat","fin.bat"), fail;

	!, Opc + 1 = Menu, menu(Menu,Opcs,Ventana,_,_,_,Col_n),
	Opcs + 3 = Fondo, Opc + 3 = Ren,
	desp_opc(Menu,0,Ventana), opc(1,Opc,_,_,Help,_),
	aviso(1,Help), shift([Ventana]), retractall(_,posicion),
	asserta(posicion(Menu,0),posicion),opc(Menu,0,Long,_,_,_),
	field_attr(0,2,Long,Col_n),
	run, remove([6]), shift([5]),!,
	retractall(_,posicion), asserta(posicion(1,Opc),posicion).
ejecuta(Menu,Opcion):-
	opc(Menu,Opcion,_,_,_,Arch), Arch = "", !, fail.
ejecuta(Menu,Opcion):-
	opc(Menu,Opcion,_,_,_,Arch), file_str("sid.bat",Arch), !,
	retractall(_,fin), asserta(fin("si"),fin), fail;

	opc(Menu,Opc,_,_,_,Archivo),
	makewindow(7,78,78,"",14,15,5,45,1,255,"ɻȼͺ"),
	write("\n    SID_FIE ..."), time(_,_,Seg,_), Segcont = Seg + 4,
	retardo(Seg,Segcont), !, remove([7]).

% ___________________________________________________________________________
% ---------------------------------------------------------------------------
% ___________________________________________________________________________
% -------------------   manejo de ventanas   --------------------------------
%                       ------ -- --------

shift([]):- !.  shift([H|T]):-  shiftwindow(H), !, shift(T).

clear([]):- !.  clear([H|T]):-  shift([H]), clearwindow(), !, clear(T).

remove([]):- !. remove([H|T]):-  shift([H]), removewindow(), !, remove(T).
% ___________________________________________________________________________
% ---------------------------------------------------------------------------
% ___________________________________________________________________________
%                       -------- --- ------

actualiza_pos(Menu,Actual,Inc):-
	Actual + Inc = Nueva, menu(Menu,Nopc,Ventana,Inicio,Max,Col_a,Col_n),
	Inicio - 1 = Minimo, Nueva > Minimo, Nueva < Max,		% opciones + Inicio = Opc
	opc(Menu,Actual,Long1,_,_,_), opc(Menu,Nueva,Long2,_,Help,_),
	aviso(Menu,Help), shift([Ventana]),
	field_attr(Actual,2,Long1,Col_a), field_attr(Nueva,2,Long2,Col_n),
	% Color --> field_attr(Actual,2,Long1,Col_a), field_attr(Nueva,2,Long2,Col_n),
	retractall(_,posicion), asserta(posicion(Menu,Nueva),posicion), !;

	menu(Menu,Nopc,Ventana,Inicio,Max,Col_a,Col_n), Actual + Inc = Max,
	opc(Menu,Actual,Long1,_,_,_), opc(Menu,Inicio,Long2,_,Help,_),
	aviso(Menu,Help), shift([Ventana]),
	field_attr(Actual,2,Long1,Col_a), field_attr(Inicio,2,Long2,Col_n),
	retractall(_,posicion), asserta(posicion(Menu,Inicio),posicion), !;

	menu(Menu,Opc,Ventana,Inicio,_,Col_a,Col_n), Actual + Inc = Inicio - 1,
	opc(Menu,Actual,Long1,_,_,_), opc(Menu,Opc,Long2,_,Help,_),
	aviso(Menu,Help), shift([Ventana]),
	field_attr(Actual,2,Long1,Col_a), field_attr(Opc,2,Long2,Col_n),
	retractall(_,posicion), asserta(posicion(Menu,Opc),posicion), !.

   aviso(Menu,Help):-
	Menu = 1, clear([4]), write(Help), !; !.
   desp_opc(Menu,Pos,Ventana):-
        opc(Menu,Pos,Long,Opc,Help,_),
        field_str(Pos,2,Long,Opc),
        clear([4]),write(Help),shift([Ventana]),
        Pos + 1 = Pos1, !, desp_opc(Menu,Pos1,Ventana).
   desp_opc(_,_,_):-!.
% ___________________________________________________________________________
% ---------------------------------------------------------------------------
% ___________________________________________________________________________
% ---------------------   efectos de video   --------------------------------
%                         ------- -- -----
   mes(1,"ENE/"):-!. mes(2,"FEB/"):-!. mes(3,"MAR/"):-!. mes(4,"ABR/"):-!.
   mes(5,"MAY/"):-!. mes(6,"JUN/"):-!. mes(7,"JUL/"):-!. mes(8,"AGO/"):-!.
   mes(9,"SEP/"):-!. mes(10,"OCT/"):-!. mes(11,"NOV/"):-!. mes(12,"DIC/"):-!.

   fill(_,0):-!. fill(Bety,Rafa):- write(Bety), Rafa - 1 = BEyRa, !,
   			fill(Bety,BEyRA).
   pantalla:-
   	makewindow(1,16,0,"",0,0,25,80),			% limpia pantalla
	fill(Bety,24),
   	date(A,M,_), str_int(An,A), mes(M,Me), concat(Me,An,Fecha),
   	makewindow(1,30,0,"",0,0,1,80),			% derechos reservados [2]
   	write(" ------------------------------------------------------------------------------"),
   	makewindow(2,31,112,"",4,54,14,25),		% carpetas [4]
        makewindow(2,31,112,"",3,52,14,25),
        makewindow(2,7,112,"",2,50,14,25),
        file_str("pant.1",Logo), window_str(Logo),
        makewindow(3,78,0,"",24,0,1,80),		% derechos reservados [2]
        write(" (\74. \82. \82. \79.)                    \85\77\83\78\72\47\70\73\69\47\83\73\68                       ",Fecha),
   	makewindow(4,15,3,"",21,1,3,78,1,0,"ɻȼͺ"),	% Ayuda

   	sound(10,300), !.

   retardo(Seg,Seg):-!. retardo(_,Seg):- time(_,_,Seg1,_),!, retardo(Seg1,Seg).
% ___________________________________________________________________________
% ---------------------------------------------------------------------------
% ___________________________________________________________________________
% ---------------------------   meta   --------------------------------------
%                               ----
goal
    pantalla, retractall(_,opc), retractall(_,menu), retractall(_,fin),
    asserta(fin("no"),fin), renamefile("out.out","sid.bat"),

    asserta(menu(1,10,5,1,11,2,46),menu),	% principal.
    asserta(menu(2,3,6,0,4,12,112),menu),	% procesadores de texto.
    asserta(menu(7,3,6,0,4,12,112),menu),	% Bases de datos.
    asserta(menu(8,1,6,0,2,12,112),menu),	% Sistemas de aprendizaje.
    asserta(menu(10,6,6,0,7,12,112),menu),	% Antivirus.
    %Color --> asserta(menu(_,_,_,_,_,121,30),menu),

    %       opc(menu,pos,long,opc,help,arch_bat)
"),opc),
,opc),
),
mas",""),opc),
",""),opc),
opc),
    asserta(opc(1,7,23,"SISTEMAS DE APRENDIZAJE","Control de bancos de informac,""),opc),
lexibles",""),opc),
    asserta(opc(1,10,5,"SALIR","Terminar contacto con F.I.E./S.I.D.",""),opc),
    
    shift([5]), desp_opc(1,1,5),
    
    % opc(menu,pos,long,opc,help,arch_bat)	PROCESADORES DE TEXTO
    asserta(opc(2,0,16,"Word Perfect 6.0","","FWP60"),opc),
    asserta(opc(2,1,9,"Works 3.0","","FWK3"),opc),
    asserta(opc(2,2,16,"Write (Windows)","","FWRI"),opc),
    asserta(opc(2,3,8,"Regresar","",""),opc),

    % opc(menu,pos,long,opc,help,arch_bat)	HOJAS DE CALCULO
    asserta(opc(3,0,9,"Works 3.0","","FWK3"),opc),
    asserta(opc(3,1,9,"Excel 4.0","","FEXCEL"),opc),
    asserta(opc(3,2,8,"Regresar","",""),opc),

    % opc(menu,pos,long,opc,help,arch_bat)	LENGUAJES DE PROGRAMACION
    asserta(opc(4,0,13,"Turbo C++ 3.0","","FTCPP3"),opc),
    asserta(opc(4,1,16,"Turbo Pascal 6.0","","FTP60"),opc),
    asserta(opc(4,2,16,"Turbo Prolog 2.0","","FTPRO"),opc),
    asserta(opc(4,3,15,"Quick Basic 4.5","","FQB45"),opc),
    asserta(opc(4,4,10,"Dbase III+","","FDB3P"),opc),
    asserta(opc(4,5,8,"Fox Base","","FFOX"),opc),
    asserta(opc(4,6,8,"Regresar","",""),opc),

    % opc(menu,pos,long,opc,help,arch_bat)	SISTEMAS DE SIMULACION
    asserta(opc(5,0,12,"Pc Spice 5.0","","FSPICE"),opc),
    asserta(opc(5,1,11,"EWB Digital","","FEWBD"),opc),
    asserta(opc(5,3,5,"Orcad","","FORCAD"),opc),
    asserta(opc(5,4,10,"Program CC","","FCC"),opc),
    asserta(opc(5,5,6,"Derive","","FDE"),opc),
    asserta(opc(5,6,7,"MathCad","","FMCAD"),opc),
    asserta(opc(5,7,7,"MathLab","","FMLAB"),opc),
    asserta(opc(5,8,8,"Regresar","",""),opc),

    % opc(menu,pos,long,opc,help,arch_bat)	SISTEMAS GRAFICOS
    asserta(opc(6,0,11,"Auto CAD 12","","FCAD12"),opc),
    asserta(opc(6,1,21,"Paint Brush (windows)","","FPB"),opc),
    asserta(opc(6,2,12,"Windows 3.11","","FWIN"),opc),
    asserta(opc(6,3,8,"Regresar","",""),opc),

    % opc(menu,pos,long,opc,help,arch_bat)	BASES DE DATOS
    asserta(opc(7,0,9,"Works 3.0","","FWK3"),opc),
    asserta(opc(7,1,10,"Dbase III+","","FDB3P"),opc),
    asserta(opc(7,2,8,"Fox Base","","FFOX"),opc),
    asserta(opc(7,3,8,"Regresar","",""),opc),

    % opc(menu,pos,long,opc,help,arch_bat)	SISTEMAS DE APRENDIZAJE
    asserta(opc(8,0,13,"TUTOR DEL DOS","","FT2"),opc),
    asserta(opc(8,1,8,"Regresar","",""),opc),

    % opc(menu,pos,long,opc,help,arch_bat)	UTILERIAS
    asserta(opc(9,0,11,"Pctools 4.1","","FPCT"),opc),
    asserta(opc(9,1,21,"Copy 2 pc 6.0 (a: a:)","","FC2PCA"),opc),
    asserta(opc(9,2,21,"Copy 2 pc 6.0 (b: b:)","","FC2PCB"),opc),
    asserta(opc(9,3,6,"Norton","","FNORTON"),opc),
    asserta(opc(9,4,4,"Tech","","FTECH"),opc),
    asserta(opc(9,5,8,"Regresar","",""),opc),

    % opc(menu,pos,long,opc,help,arch_bat)	ANTIVIRUS
    asserta(opc(10,0,7,"Msav a:","","FMSAVA"),opc),
    asserta(opc(10,1,7,"Msav b:","","FMSAVB"),opc),
    asserta(opc(10,2,7,"Scan a:","","FSCANA"),opc),
    asserta(opc(10,3,7,"Scan b:","","FSCANB"),opc),
    asserta(opc(10,4,9,"Killer a:","","FKILLA"),opc),
    asserta(opc(10,5,9,"Killer b:","","FKILLB"),opc),
    asserta(opc(10,6,8,"Regresar","",""),opc),

    field_attr(1,2,21,46),
    retractall(_,posicion), asserta(posicion(1,1),posicion),
    shift([5]),run.

% ___________________________________________________________________________
%
%                    Programa:   menured.pro
%                    Objetivo:   Mostrar los programas instalados en la red.
%                                U. M. S. N. H.
%  ------------------------------------------------------------------------