92 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
		
		
			
		
	
	
			92 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
|   | % #!/bin/sh | ||
|  | % exec /usr/local/bin/ciao_shell $0 $* | ||
|  | 
 | ||
|  | :- use_package(pillow). | ||
|  | 
 | ||
|  | :- use_module(library(aggregates)). | ||
|  | 
 | ||
|  | main :- | ||
|  |   get_form_input(Info), | ||
|  |   get_form_value(Info,mood,Mood0), | ||
|  |   get_form_value(Info,potatoes,Potatoes), | ||
|  |   get_form_value(Info,pizza,Pizza), | ||
|  |   get_form_value(Info,coke,Coke), | ||
|  |   get_form_value(Info,pass,Password), | ||
|  |   get_form_value(Info,text,Text), | ||
|  |   get_form_value(Info,menu1,Number), | ||
|  |   findall(Color,member(menu2=Color,Info),Colors), | ||
|  |   compute_reply(Mood0,Potatoes,Pizza,Coke,Password,Text,Number,Colors,Reply), | ||
|  |   form_default(Mood0,happy,Mood), | ||
|  |   output_html([ | ||
|  |     cgi_reply, | ||
|  |     start, | ||
|  |     title('Sample Form generated from Prolog'), | ||
|  |     h1('Sample HTML form'), | ||
|  |     Reply, | ||
|  |     --, | ||
|  |     h2('This is a form:'), | ||
|  |     start_form, | ||
|  |     'Please select mood:', | ||
|  |     radio(mood,happy,Mood),nl, | ||
|  |     image('http://www.clip.dia.fi.upm.es/images/smile.happy.gif', | ||
|  |       [align=middle]), | ||
|  |     nl, | ||
|  |     radio(mood,sad,Mood),nl, | ||
|  |     image('http://www.clip.dia.fi.upm.es/images/smile.sad.gif', | ||
|  |       [align=middle]), | ||
|  |     $, | ||
|  |     'What ',strong(do),' you want?',\\, | ||
|  |     checkbox(potatoes,Potatoes), 'Potato(e)s',\\, | ||
|  |     checkbox(pizza,Pizza), 'Pizza',\\, | ||
|  |     checkbox(coke,Coke), 'Coke', | ||
|  |     $, | ||
|  |     'Write here a password:',nl, | ||
|  |     input(password,[name=pass,size=9,maxlength=8]),$, | ||
|  |     textinput(text,[rows=5,cols=20],"Write here something"),$, | ||
|  |     'You can choose here: ', menu(menu1,[],[one,$two,three]),nl, | ||
|  |     'Also here: ', menu(menu2,[multiple],[$red,$green,blue]),$, | ||
|  |     input(submit,[value='Send values']),nl, | ||
|  |     input(reset,[value='Reset values']), | ||
|  |     end_form, | ||
|  |     --, | ||
|  |     address('clip@dia.fi.upm.es'), | ||
|  |     end]). | ||
|  | 
 | ||
|  | compute_reply('',_,_,_,_,_,_,_,'') :- !. | ||
|  | compute_reply(Mood,Potatoes,Pizza,Coke,Passwd0,Text0,Number,Colors0,Reply) :- | ||
|  |   compute_food(Potatoes,Pizza,Coke,Food), | ||
|  |   compute_text(Text0,Text), | ||
|  |   compute_password(Passwd0,Passwd), | ||
|  |   compute_colors(Colors0,Colors), | ||
|  |   Reply = [ | ||
|  |     --, | ||
|  |     heading(2,'Submitted data:'), | ||
|  |     'You are ',strong(Mood),'.',\\, | ||
|  |     'You want ',strong(Food),\\, | ||
|  |     'The password is ',tt(verbatim(Passwd)),'.',\\, | ||
|  |     'In the text area you wrote: ',Text,$, | ||
|  |     'You chose number ',tt(Number),' and color(s):', | ||
|  |     preformatted(Colors)]. | ||
|  | 
 | ||
|  | compute_food('','','','no food.'). | ||
|  | compute_food(on,'','','potatoes.'). | ||
|  | compute_food('',on,'','pizza.'). | ||
|  | compute_food('','',on,'coke.'). | ||
|  | compute_food(on,on,'','potatoes and pizza.'). | ||
|  | compute_food('',on,on,'pizza with coke.'). | ||
|  | compute_food(on,'',on,'potatoes with coke.'). | ||
|  | compute_food(on,on,on,'potatoes and pizza with coke.'). | ||
|  | 
 | ||
|  | compute_text(T0,T) :- | ||
|  |   form_empty_value(T0), !, | ||
|  |     T = '{Nothing}'. | ||
|  | compute_text(T,preformatted(T)). | ||
|  | 
 | ||
|  | compute_password(P0,P) :- | ||
|  |   P0 = '$empty' -> P = '{none}'; P = P0. | ||
|  | 
 | ||
|  | compute_colors(C0,C) :- | ||
|  |   C0 = [] -> C = [none] ; C = C0. | ||
|  | 
 | ||
|  | 
 |