/* PBAR.PRO -- sample Turbo Prolog program to be used with BAR.C Copyright (c) 1987,88 Borland International. All rights reserved. */ database barchart(integer) chartbar(integer,integer,integer,integer,integer,integer) global predicates cbar(integer,integer,integer,integer,integer)-(i,i,i,i,i) language c predicates process(char) repeat myretractall drawbar(integer,integer,integer,integer) goal graphics(1,0,0), asserta(barchart(0)), makewindow(1,1,1,"Bar",0,0,20,40), makewindow(2,1,1,"",20,0,4,40), repeat, write("Press any key to continue"), readchar(_), clearwindow, makewindow(1,1,1,"Bar",0,0,20,40), write("m. Make a bar Chart.\n"), write("s. Save your bar Chart.\n"), write("l. Load your bar Chart.\n"), write("d. Draw your bar Chart.\n"), write("e. End\nEnter Choice: "), readchar(Choice), clearwindow, shiftwindow(2), process(Choice), bios(16,reg(3,0,0,0,0,0,0,0),_). clauses process('m'):- barchart(Nu), retract(barchart(Nu)), NewNu = Nu+1, asserta(barchart(NewNu)), write("Enter the number of bars: "), readint(NuOfBars),clearwindow, write("Enter max value on Y scale: "), readint(Max),clearwindow, YScale = 140/Max, Width = 265/NuOfBars, Start = 305-Width, clearwindow, drawbar(NuOfBars, Width, Start, Yscale), fail. process('s'):- write("Enter file name of chart: "),readln(Name), concat(Name,".CHT",FName),save(Fname),fail. process('l'):- myretractall, write("Enter file name of chart: "),readln(Name), concat(Name,".CHT",FName),consult(FName),fail. process('d'):- barchart(Chart), chartbar(Chart,XPosition,Ypos,Width,YBarSize,1), cbar(XPosition,Ypos,Width,YBarSize,1),fail. process('e'). drawbar(0,_,_,_):-!. drawbar(Nu,Width,XPosition,Yscale):- XNuNew=Nu-1,clearwindow, write("Enter the value associated bar ",Nu ,": "), readint(Y), YBarSize=Y*YScale, Ypos=140 - YBarSize, cbar(XPosition,Ypos,Width,YBarSize,1), barchart(Chart), asserta(chartbar(Chart,XPosition,Ypos,Width,YBarSize,1)), XNewPos= XPosition-Width-5, drawbar(XNuNew,Width,XNewPos,Yscale). repeat. repeat:- repeat. myretractall:- retract(_),fail. myretractall.