import java.applet.Applet; import java.awt.*; import java.io.*; import java.net.*; import java.util.*; import java.lang.*; public class ElizaFE extends Applet { Panel p = new Panel(); Panel NPanel = new Panel(); Panel SPanel = new Panel(); Panel SPanel2 = new Panel(); Panel EPanel = new Panel(); Panel WPanel = new Panel(); public static String connectionID; public static String UserName = ""; public static String UserSex =""; public static boolean connected = false; // keeps the hystory // input, swapped input, keyword, rest, mark public static String history[][] = new String[10][7]; public static int counter; public static int type_counter[] = new int[1000]; public static String trivia[] = { "... e al tuo futuro quando ci pensi ?", "... e dicono che poi le violentano... vanno in giro con certe minigonne... ", "... e dove ci vai con una FERRARI, giusto in pista !", "... eeeeh, se ci fosse la pena di morte... !!", "... ma le macchine si riparano, l'importante è che lo puoi raccontare... !", "... me lo potevi dire prima !", "A tutto c'è rimedio tranne alla morte !", "Agli esami il 50% è fortuna, si sa !", "Ah, questi giovani d'oggi... ", "Ai miei tempi ci si alzava da tavola solo quando tutti avevano finito... ", "Ai miei tempi ci si divertiva con un niente !", "Ai miei tempi i giovani rispettavano di più gli anziani... ", "Ai miei tempi la scuola era molto più dura !", "Ai paesi del terzo mondo mandiamo sempre aiuti, ma a noi chi ci pensa ???", "Ai soldi bisogna sempre dare del Lei !", "Al giorno d'oggi ci sono più divorzi che matrimoni!", "Al peggio non c'è mai fine... ", "Al telegiornale danno solo brutte notizie... ", "Alle svedesi piace l'uomo italiano... ", "Andate piano, eh !", "Arrestano chi ha rubato una mela e chi uccide... sta a spasso !", "Basta che c'e' la salute!", "Basta che mi lasciano stare, per me possono fare quello che vogliono... ", "Basta con questi inglesismi !", "Beata gioventù!", "C'è la crisi ma tutti hanno almeno due macchine !", "C'è la crisi, c'è la crisi ma i ristoranti sono sempre pieni !", "Certo quanto gira questo Papa... ", "Che bello il fuoco nel camino... resterei le ore a guardarlo !", "Chi semina alla fine raccoglie !", "Chi studia tanto è antipatico !", "Chiusa una porta se ne apre un'altra ... ", "Ci vorrebbe un tredici !", "Ci vuole la laurea per leggere le bollette telefoniche !", "Come si mangia a casa propria non si mangia da nessuna parte... ", "Come si mangia in Italia non si mangia da nessuna parte... ", "Comunque si sa, che chi comanda in Italia è Agnelli !", "Con Chernobyl sono aumentati i tumori... ", "Con il computer ormai si fa tutto... ", "Con il Giubileo Roma sarà invivibile... ", "Con Internet ti arrivano bollette spaventose... ", "Con la crisi che c'è la gente non compra più... ", "Con questi capelli lunghi non si sa più se sono uomini o donne !", "Devi studiare, perché è un investimento per il tuo futuro !", "Di sicuro c'è solo la morte !", "Dopo una certa ora ci sono in giro solo ladri e prostitute !", "Dove andremo a finire ... !", "Dovunque ti giri c'è sesso e violenza !", "E' il pensiero quello che conta ... ", "E' la donna che sceglie !!", "E meno male che siamo in Europa !", "E tutta colpa del buco dell'ozono !", "E' tutto un magna magna ... ", "E' tutto un mangia mangia !", "E un peccato buttar via ciò che non si mangia, ci sono i bambini del terzo mondo ... ", "Eeeh, è già tanto amara la vita !!", "Eh, ma i sapori di una volta ... ", "Eh, ma la palla è rotonda !", "Eh, ma se non hai qualcuno che ti da una spinta !", "Eh ... lo so io quello che mando giù !", "Eh ... se lei sapesse ... ", "Era meglio quando si stava peggio !", "Era tanto una brava persona ... ", "Fa il comunista ed ha il macchinone !", "Fanno le macchine così veloci e poi ci sono i limiti di velocità !", "Fini parla bene !", "Fuma, fuma ... ", "Gli americani sono un popolo di giocherelloni ... ", "Gli anni bisestili portano male ... ", "Gli immigrati rubano il lavoro agli italiani ... ", "Gli italiani sono un popolo di furbi ... ", "Gli uomini preferiscono le bionde ma sposano le more !", "I ballerini sono tutti froci ... ", "I bambini di oggi sono tutti più alti per le vitamine degli omogeneizzati ... ", "I bambini di oggi senza calcolatrice non sanno fare due più due ... ", "I brasiliani sono tutti ballerini !", "I centri sociali sono pieni di drogati e spacciatori!", "I commercialisti sono tutti ladri !", "I commercianti non pagano mai le tasse !", "I commercianti sono tutti leghisti !", "I computer portano via il lavoro all'uomo !", "I computeromani sono asociali !", "I concorsi sono tutti truccati !", "I culturisti son tutti drogati ... ", "I delinquenti sono tutti a spasso !", "I dentisti non fanno mai la ricevuta fiscale !", "I genovesi sono tutti tirchi !", "I giapponesi sono gran lavoratori !", "I giapponesi sono tutti deviati ... ", "I giovani di oggi non conoscono il valore dei soldi !", "I giovani di oggi non conoscono la fame !", "I giovani di oggi pensano solo a divertirsi !", "I giovani di oggi scambiano le strade per una pista di Formula 1 !", "I giovani d'oggi sono degli irresponsabili ... ", "I giovani d'oggi vogliono tutto subito !", "I giovani guardano troppa televisione !", "I giovani non hanno più il timore di Dio ... ", "I giovani non hanno rispetto per niente ... ", "I giovani non sanno divertirsi ... ", "I giovani passano ore al telefono ... !", "I giovani sono tutti drogati !", "I miei sì che erano tempi !", "I milanesi sono freddi !", "I negozianti sono tutti evasori !", "I negri corrono più dei bianchi !", "I negri hanno una cippa enorme !", "I negri rubano il lavoro agli italiani ... ", "I neri hanno il ritmo nel sangue !", "I neri hanno una gran voce !", "I politici sono tutti ladri !", "I preti scopano come assassini [ con le suore ] !", "I ricchi hanno sempre ragione ... ", "I secchioni hanno gli occhialetti e sono calvi ... ", "I siciliani sono tutti mafiosi !", "I soldi non crescono sugli alberi ... ", "I soldi non fanno la felicità ... ", "I supermercati hanno ucciso il piccolo commercio ... ", "I tedeschi sono ligi al dovere !", "I veri amici sono quelli dell'infanzia !", "I veri artigiani non esistono più !", "Il cane è più fedele del gatto ... ", "Il cemento avanza !", "Il cioccolato fa venire i brufoli !", "Il computer rovina la vista !", "Il disco in vinile ha un suono più caldo ... ", "Il mare più bello del mondo è in Italia !", "Il mare sana tutto !", "Il mare stanca, il lago e rilassante, la montagna è triste (ma se hai la comitiva ti diverti) !", "Il mattone è sempre un buon investimento ... ", "Il mezzo più sicuro è il treno !", "Il notariato è una casta chiusa ... ", "Il nuoto è uno sport completo", "Il pasticcio il giorno dopo è più buono ... ", "Il piede deve respirare !", "Il sale non sala più come una volta ... ", "Il telefonino non è più uno status symbol !", "In casa non c'è dialogo !", "In discoteca i giovani si stordiscono con la musica, gli alcolici e la droga ... ", "In India muoiono di fame ma le mucche mica se le mangiano !", "In Inghilterra il cibo fa schifo !", "In Italia non si fa la rivoluzione perché alla fine tutti hanno da mangiare ... ", "In tv tutto è falso !", "Internet è il futuro !", "Io non sono razzista però restassero a casa loro !", "Io, agli stupratori taglierei il pisello !", "La cacca del bambino è santa ... ", "La famiglia non è più un valore ... ", "La mafia è lo Stato !", "La matematica e filosofia non ti serve per andare a comprare il pane alla mattina !", "La musica heavy metal è rumore e basta ... ", "La palla è rotonda ... ", "La patente la danno a tutti !", "La pubblicità' e' l'anima del commercio ... ", "La qualità è il miglior risparmio !", "La ragazza arriva quando meno te l'aspetti ... ", "La techno non è musica !", "La televisione è diventata una baby-sitter ... ", "La vacanza al mare stanca di più di quella in montagna ... ", "L' America è 50 anni avanti a noi ... ", "L' amicizia tra uomo e donna non esiste !", "L' amiga è buono solo per i giochini ... ", "L' amore non ha eta' !", "L' amore non ha è cieco !", "L' aspirina con la coca-cola è come una droga !", "L' autobus non passa mai ... ", "Le arance hanno vitamina c !", "Le assicurazioni sono truffe legalizzate !", "Le banche sono degli strozzini legalizzati ... ", "Le carote fanno bene alla vista !", "Le donne maturano prima degli uomini ... ", "Le donne sono tutte mignotte ( tranne mia madre e mia sorella) ... ", "Le donne sono tutte troie ... tranne mia madre e mia sorella ... ", "Le macchine giapponesi: è difficile trovare i pezzi !", "Le macchine tedesche durano !", "Le materie umanistiche non servono più a niente !", "Le pippe fanno diventare ciechi !", "Le previsioni del tempo non ci azzeccano mai ... ", "Le ragazze sono brave nelle materie artistiche, i ragazzi in quelle tecniche ... ", "L' importante è essere giovani dentro !", "L' importante è sentirsi giovani dentro ... ", "L'italiano è una delle lingue più difficile da imparare !", "Lo spinello porta inevitabilmente all'eroina !", "L' omosessualità va contro natura ... ", "L' unico difetto di Mussolini è che ci ha portato in guerra !", "Ma dove andremo a finire con questa tecnologia ????", "Ma tu non prendi il caffè con lo zucchero, ma lo zucchero con il caffè !!!", "Manca ancora un mese a natale e già ci sono gli addobbi !!", "Mi raccomando, quando arrivi telefona ... ", "Nei ristoranti cinesi cucinano i gatti ... ", "Nel futuro saremo sostituiti dai robot ... ", "Nella vita non si può mai sapere ... ", "Non c'è più nessuno che lavora la terra !", "Non c'è più religione !", "Non c'è più rispetto per gli anziani ... ", "Non ci sono più le mezze stagioni ... ", "Non ci sono più valori ... ", "Non è tanto il freddo quanto l'umidità !", "Non esiste più il senso della famiglia ... ", "Non hai niente di meglio da fare che stare davanti al televisore ... ??", "Non si fa altro che pagare ... !", "Non si può più andare allo stadio ... ", "Non si può più uscire di casa la sera !", "Non ti toccare che diventi cieco !", "Non trattenere gli starnuti che ti fa male !!", "Oggi a fare gli onesti se la piglia sempre in culo !", "Oggi bambini sono molto più svegli ... ", "Oggi cantano tutti porci e cani !", "Oggi come oggi se non sai l'inglese non vai da nessuna parte !", "Oggi come oggi se non sai usare il computer non ti assumono da nessuna parte !!!", "Oggi come oggi se non sei su Internet non sei nessuno !", "Oggi le famiglie si separano tutte !", "Oggi le ragazze sono tutte facili !", "Oggi per fare 100 metri si prende la macchina !", "Oggi se non hai il pezzo di carta ... ", "Oggi si laureano tutti !", "Oggi surgelano tutto !", "Oggi vanno tutti di fretta ... ", "Ogni sigaretta ti toglie 15 secondi di vita ... ", "Ormai i politici si sono rubati tutto ... ", "Ormai la tv è solo sesso e violenza ... ", "Ormai non si sa più cosa inventare per farsi pubblicità !", "Per camminare sui marciapiedi bisogna fare lo slalom tra le cacche dei cani !", "Per dimagrire bisogna alzarsi da tavola con la fame !", "Per fare ingegneria bisogna essere dei geni !", "Per quello che fanno in televisione ... ", "Pero' è bella dentro !", "Pero' è bello dentro !", "Pero' i colossal di un tempo non si fanno più !!", "Pippo Baudo è un professionista !", "Preferisco la campagna al caos della città ... ", "Premetto che non sono razzista ... ", "Preso un semaforo rosso li prendi tutti !", "Prima o poi l'amore arriva ... ", "Prova a buttare una carta per terra in Svizzera !!", "Quando c'è la salute c'è tutto ... ", "Quando c'era Mussolini i treni arrivavano in orario !", "Quando ci sono i vigili c'è ancora più traffico ... ", "Quando si ha sete non c'è niente di meglio che un buon bicchiere d'acqua !", "Quando ti diverti il tempo vola ... ", "Quando ti sposi non te lo ricordi più ... ", "Ci credo che Raffaella Carrà è sempre una bella donna, con tutti quei soldi !", "Sanremo era meglio l'anno scorso !", "Sarai il mio bastone della vecchiaia !", "Se Beethoven sentisse la musica di oggi si rivolterebbe nella tomba !", "Se devo leggere un testo di 4-5 pagine al computer, preferisco stamparlo (Bill Gates)", "Se è così, ci sarà un motivo !", "Se mangi piano ti sazi prima !", "Se ne vanno sempre i migliori ... ", "Se vai all'università devi comprarti il computer !", "Sean Connery è più bello adesso che da giovane !", "Sono i tempi che sono cambiati, non i giovani ... ", "Sono i turisti che sporcano le nostre città !", "Sono sempre i migliori ad andarsene per primi !", "Speriamo che vada meglio domenica prossima !", "Tanto le tasse le paghiamo sempre noi povera gente ... ", "Tanto nello stomaco si mischia tutto !", "Tasseranno anche l'aria che respiriamo !", "Ti ci porto io dove si mangia il pesce buono ... e si spende poco !", "Trovo sempre la fila più lenta ... ", "Un bicchiere di vino al giorno fa sangue ... ", "Una volta ci si divertiva di più !", "Una volta i cibi erano più sani ... ", "Una volta il calcio era più genuino, oggi con tutti questi miliardi ... ", "Una volta la verdura aveva un altro sapore !", "Una volta qui era tutta campagna ... ", "Una volta si poteva lasciare la porta aperta tranquillamente ... ", "Una volta si poteva uscire tranquilli alla sera ... ", "Vanno tutti in vacanza all'estero con i bei posti che ci sono in Italia !", "Venezia è bella ma non ci abiterei !", "Venti anni vengono una volta sola !", "Vuoi mettere un buon piatto di pasta !", "-" }; public static String month[] = { "Gennaio", "Febbraio", "Aprile", "Marzo", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre" }; public static String keywords[] = { "computer 1", "elaboratore 1", "PC 1", "carlo 2", "marika 3", "padre 22", "papa 22", "madre 22", "mamma 22", "fratello 22", "sorella 22", "famiglia 22", "tuo 4", "tuoi 5", "tue 6", "ciao 7", "buongiorno 7", "buonasera 7", "buonanotte 7", "sono 8", "chiami 9", "www 10", "links 10", "link 10", "web 10", "sito 10", "viaggi 11", "viaggio 11", "australia 12", "maldive 12", "bali 12", "indonesia 12", "grecia 12", "thailandia 12", "java 13", "javascript 13", "sei 14", "posso 15", "puoi 16", "gemini 17", "dedem 17", "voglio 18", "si 19", "no 20", "come 21", "ik0ygj 23", "radio 23", "radioamatore 23", "cb 23", "sigla 24", "termine 24", "significato 24", "significa 24", "foto 25", "fotografica 25", "fotografia 25", "fotografo 25", "orologi 26", "orologio 26", "orologeria 26", "io 27", "me 27", "ti 28", "mi 29", "devo 30", "devi 30", "devono 30", "dobbiamo 30", "che 31", "vacanze 32", "ferie 32", "vacanza 32", "estate 32", "perche 33", "hobby 34", "forse 35", "devo 36", "dovrei 36", "software 37", "sw 37", "giochi 37", "programmi 37", "donna 38", "donne 38", "ragazza 38", "ragazze 38", "ingegnere 39", "programmatore 39", "analista 39", "sistemista 39", "lavoro 39", "faccio 39", "vado 40", "bene 41", "ottimo 41", "meraviglioso 41", "stupendo 41", "musica 42", "rock 42", "pop 42", "jazz 42", "classica 42", "hip 42", "pianoforte 43", "tastiere 43", "tastiera 43", "chitarra 43", "colpa 44", "timido 45", "timidezza 45", "timida 45", "tempo 46", "caffe 47", "zucchero 47", "baudo 48", "bere 49", "bevuto 49", "ubriaco 49", "brillo 49", "bottiglia 49", "birra 50", "acqua 50", "whisky 50", "cola 50", "bicchiere 50", "fantasia 51", "caldo 52", "umido 52", "umidita 52", "anni 53", "eta 53", "dipende 54", "crisi 55", "uomo 56", "tu 57", "latte 58", "greg 58", "lillo 58", "fabio 58", "ingo 58", "mandingo 58", "fabulos 58", "geronimo 58", "bari 59", "cagliari 59", "firenze 59", "genova 59", "palermo 59", "roma 59", "torino 59", "venezia 59", "lotto 60", "ok 61", "maresciallo 62", "militare 62", "esercito 62", "generale 62", "-" //end array marker }; public static String swaps[][] = { { "mio", "tuo"}, { "mia", "tua"}, { "mie", "tue"}, { "miei", "tuoi"}, { "nostri", "vostri"}, { "nostre", "vostre"}, { "io", "tu"}, { "me", "te"}, { "sono", "sei"}, { "posso", "puoi"}, { "ho", "hai"}, { "mi", "ti"}, { "darmi", "darti" }, { "dirmi", "dirti" }, {"-","-"} }; public static Label MsgBar = new Label("Ready."); public static Label UserNameLabel = new Label("Ti chiami ?"); public static TextField InputTextField = new TextField("", 40); public static TextField UserNameField = new TextField("", 20); public static TextArea UserText = new TextArea(""); public static Button ExitButton = new Button("Esci"); public static Button ConnectButton = new Button("Connetti"); public static void say(String s) { String newText = s +"\n"; UserText.append(newText); } // currently unused public static void ElizaInit(String InitFile) { try { FileReader file = new FileReader(InitFile); BufferedReader buff = new BufferedReader(file); boolean eof = false; while (!eof) { String line = buff.readLine(); if (line == null) eof = true; else say(line); } buff.close(); } catch (Exception e2) { MsgBar.setText(">>>"+e2); UserText.setText("*** ERRORE IRREVERSIBILE:\nImpossibile inizializzare HALDO."); ConnectButton.setLabel("-"); } } public static void badword_handler(String sent) { String s=sent.toLowerCase(); if( (s.indexOf("troia") >= 0) || (s.indexOf("zoccola") >= 0) || (s.indexOf("baldracca") >= 0) || (s.indexOf("mignotta") >= 0) || (s.indexOf("puttana") >= 0) || (s.indexOf("fanculo") >= 0) || (s.indexOf("vaffanculo") >= 0) ) { MsgBar.setText("Disconnesso "); try { connected = false; InputTextField.setEditable(false); InputTextField.setText(""); UserNameField.setEditable(false); UserNameField.setText(""); UserText.setText(""); ConnectButton.setLabel("-------"); ConnectButton.setForeground(Color.black); ConnectButton.setBackground(Color.lightGray); UserNameLabel.setText("------"); ExitButton.setLabel("-------"); //while(true); } catch (Exception e2) { MsgBar.setText(">>>"+e2); } System.exit(0); } } public static String answer(String sent) { String key = new String(""); String rest = new String(""); String response = new String(""); String tk = new String(""); String k = new String(""); int c = -1; StringTokenizer st = new StringTokenizer(sent); boolean found = false; while (!found && st.hasMoreTokens()) { tk = st.nextToken(); //say("*"+tk); int i = 0; while(!found && (keywords[i] != "-") && (i< 10000)) { StringTokenizer st2 = new StringTokenizer(keywords[i]); k = (st2.nextToken()); c = Integer.parseInt(st2.nextToken()); if (tk.equalsIgnoreCase(k)) { found = true; key = k; //say("found: "+tk+" "+c); } i++; } } if (found) while (st.hasMoreTokens()) rest += (st.nextToken()+" "); else c = 0; //say("rest: ["+rest+"]"); history[(counter % 10)][2] = key; history[(counter % 10)][3] = rest; type_counter[c]++; Random r1 = new Random(); int r; switch(c) { case 1: response = "ti piacciono i computer ?"; break; case 2: response = "la e-mail di carlo è cconsoli@iol.it"; response += "\nscrivi se desideri ulteriori informazioni"; break; case 3: response = "la e-mail di marika è marikasilvestri@libero.it"; response += "\nscrivi se desideri ulteriori informazioni"; break; case 4: if (rest.length() > 10 ) response = "dimmi di piu' sul tuo "+rest; else response = "tuo "+rest; break; case 5: if (rest.length() > 10 ) response = "dimmi di piu' sui tuoi "+rest; else response = "i tuoi "+rest; break; case 6: if (rest.length() > 10 ) response = "dimmi di piu' sulle tue "+rest; else response = "le tue "+rest; break; case 7: //say(counter +" " +type_counter[7]); if ((counter < 10) || (type_counter[7] < 2)) response = "ciao "+ UserName +", piacere di conoscerti"; else { r = (int) (r1.nextDouble()*3); switch(r) { case 0: response = "già te ne vai ?"; break; case 1: response = "aspetta "+UserName+" non te ne andare, altri 5 minuti ... "; default: response = "ciao "+UserName+" a riscriverci presto !"; } } break; case 8: if (rest.equalsIgnoreCase("? ")) response = "sono HALDO"; else response = "perche' ti interessa se sono "+rest+" ?"; break; case 9: response = "mi chiamo HALDO"; break; case 10: response = "abbiamo una nutrita sezione di link nel nostro sito web"; response += "\n dal menu' inferiore, segui la voce 'link'"; break; case 11: response = "le informazioni sui viaggi, con foto, le trovi nella sezione 'viaggi' del nostro sito"; break; case 12: response = k+","+"che posto ! anche carlo e marika ci sono stati"; response += "\ntrovi le foto nella sezione viaggi"; break; case 13: response = "puoi rivolgere a carlo delle domande\n"; response += "in merito a "+key; response += "\nmanda una mail a cconsoli@iol.it"; break; case 14: response = "e cosi' sei "+rest+", bene ... "; if ((rest.toUpperCase()).indexOf("TIMID") >= 0) { response += "\nio sono timido, ma maschero con l'aggressivita'"; } break; case 15: response = ("non so se posso "+rest).replace('?',' '); break; case 16: response = ("vorresti "+rest).replace('?',' ')+"?"; break; case 17: response = "se sei interessato alla "+key; response += "\nmanda una mail a cconsoli@iol.it"; break; case 18: response = "perche vuoi "+rest+"?"; break; case 19: // say("**IN*"+Math.abs((counter % 10)-1)); // if user is female, set flag if (history[Math.abs((counter % 10)-1)][5].equals("sei una ragazza ?")) { UserSex = "f"; //say("dbg: female user"); } r = (int) (r1.nextDouble()*3); switch(r) { case 0: response = "ok"; break; case 1: response = "d'accordo, e poi ?"; break; default: response = "ok, e che altro mi dici oltre a '"; if(history[Math.abs((counter % 10)-1)][0] != null) /* response += history[Math.abs((counter % 10)-1)][2]+" "+history[Math.abs((counter % 10)-1)][3]; else */ response += history[Math.abs((counter % 10)-1)][0]; response += "' ?"; } //say("**MID*"); if (history[Math.abs((counter % 10)-1)][5].indexOf("PROVOLONE")>=0) { response = "Grande !! Manda una mail a cconsoli@iol.it con l'appuntamento"; } else if (history[Math.abs((counter % 10)-1)][5].indexOf("strumento")>=0) { response = "cosa suoni ?"; } else if (history[Math.abs((counter % 10)-1)][5].indexOf("vendere")>=0) { response = "carlo sta cercando una Yamaha DX-7 on un Roland D-5/50"; response += "\npuoi mandargli una mail se hai un'occasione a portata ?"; } //say("**OUT*"); break; case 20: // if user is male, set flag if (history[Math.abs((counter % 10)-1)][5].equals("sei una ragazza ?")) { UserSex = "m"; //say("dbg: male user"); } response = "pazienza ... "; break; case 21: if ((rest.toUpperCase()).indexOf("CHIAMI")>=0) response = "mi chiamo HALDO"; else if ((rest.toUpperCase()).indexOf("STA")>=0) response = "bene, grazie"; else if(history[(Math.abs(counter) % 10)][4] == "?") response = "non saprei "+key+" "+ rest.replace('?',' '); else response = "eh, gia'..."; break; case 22: response = "io non ho un padre, sono stato creato da Carlo"; response += "\ndimmi di piu' sulla tua famiglia"; break; case 23: response = "IK0YGJ è il nominativo di radioamatore di carlo"; response += "se hai domande in merito, invia una mail a ik0ygj@qsl.net"; response += "o vai alla home page di radioamatore www.qsl.net/ik0ygj"; break; case 24: response = "trovi un dizionario d'informatica all'indirizzo"; response += "\nhttp://wombat.doc.ic.ac.uk/foldoc/index.html"; response += "\nil FOLDOC è il più ricco dizionario esistente"; break; case 25: response = "anche carlo e marika sono appassionati di fotografia\n"; response += "hanno un archivio di quasi 1000 foto\n"; response += "alcune le trovi nella galleria immagini della sezione VIAGGI"; break; case 26: response = "se ti piace l'orologeria meccanica trovi dei link"; response += "\nnella sezione Links del sito"; break; case 27: response = "cosa ti interessa di me ?"; break; case 28: r = (int) (r1.nextDouble()*3); switch(r) { case 0: response = "come mai ti "+rest+" ?"; break; case 1: response = "davvero ti "+rest+" ?"; break; default: response = "non pensavo che ti "+rest+" ?"; } break; case 29: r = (int) (r1.nextDouble()*3); switch(r) { case 0: response = "come mai mi "+rest+" ?"; break; case 1: response = "davvero mi "+rest+" ?"; break; default: response = "perche' mi "+rest+" ?"; } break; case 30: response = "ma il fatto di dover "+rest; r = (int) (r1.nextDouble()*3); switch(r) { case 0: response += " e' proprio un obbligo ?"; break; case 1: response += " l'ha ordinato il medico ?"; break; default: response = " da fastidio a qualcuno ?"; } break; case 31: Date d = new Date(); if (((sent.toUpperCase()).indexOf(" GIORN") >= 0) || ((sent.toUpperCase()).indexOf(" ORE") >= 0) ) { response = "sono le "+d.getHours()+" e "+d.getMinutes()+" del "+d.getDate()+" "+(month[d.getMonth()-1]); } else if (((sent.toUpperCase()).indexOf(" TEMP") >= 0) ) { r = (int) (r1.nextDouble()*3); switch(r) { case 0: response = "fa caldo"; break; case 1: response = "fa freddo"; break; default: response = "tipico di "+month[d.getMonth()-1]; } response += ", anche se non c'e' piu' la mezza stagione"; } else if (((sent.toUpperCase()).indexOf("COMPUTER") >= 0) ) { r = (int) (r1.nextDouble()*3); switch(r) { case 0: response = "Pentium VII 8Ghz, 220Tb RAM "; break; case 1: response = "SUN SpacStescion"; break; default: response = "AIX v1.0 biprocessore RISC"; } } else if (((sent.toUpperCase()).indexOf("MACCHINA") >= 0) ) { r = (int) (r1.nextDouble()*3); switch(r) { case 0: response = "Ferrari TestaRossa"; break; case 1: response = "Lamborghini Diablo"; break; default: response = "la panda"; } }else response = "non saprei ... "; break; case 32: response = "dove vai in vacanza quest'anno ?"; break; case 33: response = "puo' essere che "+rest.replace('?', ' ')+", secondo te ?"; break; case 34: response = "cosa fai nel tempo libero ?"; break; case 35: response = "puo' essere ... "; break; case 36: response = "perche' dovresti "+rest+" ?"; break; case 37: response = "trovi una sezione di link dedicata allo shareware nel nostro sito"; break; case 38: r = (int) (r1.nextDouble()*2); switch(r) { case 0: response = "oggi, con la parita' le donne hanno preso il posto degli uomini"; break; default: response = "l'uomo e' cacciatore e la donna e' quella che scelglie"; } break; case 39: response = "ti piace il tuo lavoro ?"; break; case 40: response = "ok, vai "+rest; response += "; io sto qui, quando vuoi puoi chiamarmi"; break; case 41: r = (int) (r1.nextDouble()*3); switch(r) { case 0: response = "sono contento"; break; case 1: response = "bene !"; break; default: response = "proprio "+key+" ?"; } break; case 42: response = "sono contento che ascolti "+key+", a me piace jazz, blues e classica"; response += "\nsuoni qualche strumento ?"; break; case 43: response = "bene, carlo suona piano e chitarra mandagli una mail"; response += "\nse vuoi scambiare degli spartiti"; response += "\na proposito, hai una tastiera da vendere ?"; break; case 44: r = (int) (r1.nextDouble()*3); switch(r) { case 0: response = "gia', e' tutta colpa dei sindacati"; break; case 1: response = "eh si, e' tutta colpa degli extracomunitari"; break; default: response = "e' tutta colpa del buco dell'azoto"; } break; case 45: response = "io sono timido, ma maschero con l'aggressivita'"; break; case 46: r = (int) (r1.nextDouble()*3); switch(r) { case 0: response = "il mattino ha l'oro in bocca"; break; case 1: response = "chi ha tempo non aspetti tempo"; break; default: response = "il tempo e' denaro !"; } break; case 47: response = "io non prendo lo zucchero nel caffe', ma il caffe' nello zucchero"; response += "\ncapirai, gia' la vita e' tanto amara !"; break; case 48: response = "e' proprio un professionista"; break; case 49: response = "uno puo' bere quello che vuole, l'importante e' non miscihare"; break; case 50: response = "quando si ha sete non c'e' niente di meglio"; response += "\ndi un buon bicchiere d'acqua"; break; case 51: response = "ai miei tempi ci si divertiva con niente"; response += "\noggi i mocciosi hanno tutto e non sviluppeno piu' la fantasia"; break; case 52: response = "non e' tanto il caldo, ma l'umidita'"; break; case 53: response = "l'eta' vera e' quella che uno si sente"; break; case 54: response = "dipende tutto dal contesto"; break; case 55: response = "c'e' la crisi, c'e' la crisi e intanto tutti hanno almeno due macchine"; break; case 56: response = "l'uomo e' cacciatore e la donna e' quella che scelglie"; break; case 57: response = "l'importante e che tu sia sempre te stesso"; break; case 58: response = "a proposito di "+key+": ti piacciono i Latte e i Suoi Derivati ?"; response += "\nil sito web ufficiale e' web.tiscalinet.it/lsd"; break; case 59: response = "bella citta' "+key+", c'e' anche una ruota del lotto"; if (type_counter[60]<2) response += "\nse vuoi ti do i numeri da giocare basta che me li chiedi"; break; case 60: String ruote[] = {"bari", "cagliari", "firenze", "genova", "palermo", "roma", "torino", "venezia" }; if (type_counter[60]<2) { response = "ti piace il lotto, eh ? Io sono un esperto ... "; response += "\nallora mi giochi il tuo giorno di nascita e quattro tra i seguenti numeri"; for (int i=1; i<=5; i++) response += " "+((int) (r1.nextDouble()*90)+1); response += "\nsulla ruota di "+ruote[((int) (r1.nextDouble()*8))]; response += "\nprova tutte le combinazioni per 5 settimane"; } else response = "gioca i numeri che ti ho gia' dato, per 5 settimane almeno"; break; case 61: r = (int) (r1.nextDouble()*3); switch(r) { case 0: response = "bene"; break; case 1: response = "ok, bene"; break; default: response = "mi fa piacere"; } break; case 62: response = "tante volte nell'esercito conta piu' un maresciallo"; response += " al posto giusto che un generale"; break; // DEFAULT ********* default: if (sent.indexOf("DUMP") >= 0 ) { say("DUMPING HISTORY"); for (int i=0; i <= 9 ; i++ ) { say("Entry: "+(Math.abs(counter-i) % 10)); say("-String: "+history[(Math.abs(counter-i) % 10)][0]); say("-Swpd: "+history[(Math.abs(counter-i) % 10)][1]); say("-Key: "+history[(Math.abs(counter-i) % 10)][2]); say("-Rest: "+history[(Math.abs(counter-i) % 10)][3]); say("-Marker: "+history[(Math.abs(counter-i) % 10)][4]); say("-Answer: "+history[(Math.abs(counter-i) % 10)][5]); } say("HISTORY DUMPED"); } if (((sent.toUpperCase()).indexOf(" CERC") >= 0) || ((sent.toUpperCase()).indexOf(" TROV") >= 0) ) { response = "puoi ricercare su www.askjeeves.com\n"; response += "altrimenti vai alla nosrta sezione dei link"; return response; } int questions = 0; for (int i=0; i <= 9 ; i++ ) if ((history[(Math.abs(counter-i) % 10)][4].equals("?"))) questions++; if (history[(counter % 10)][4] == "?") { r = (int) (r1.nextDouble()*3); switch(r) { case 0: response = "perche' me lo chiedi ?"; break; case 1: response = "e che ne so io ?"; break; default: if (questions > 3 ) { response = "perche' fai tante domande ?"; } else response = "boh !"; } } else { // when no key is ever found // try to find trivia String selected_trivia = new String(""); int selected_score = 0; st = new StringTokenizer(sent); found = false; int trivias = 0; while (!found && st.hasMoreTokens()) { tk = st.nextToken(); //say("*"+tk); if (tk.length() >= 5 ) { int i = 0; while((trivia[i] != "-") && (i< 10000)) { if ((trivia[i].toUpperCase()).indexOf(tk.toUpperCase())>=0) { r = (int) (r1.nextDouble()*1000); if (selected_score < r) { selected_score = r; //say("***selected: "+trivia[i]+", score: "+selected_score); selected_trivia = trivia[i]; } trivias++; //say("found trivia #"+trivias+": "+tk+"\n"+trivia[i]); } i++; } } //say a trivia found if(trivias > 0) { response = selected_trivia; } else { r = (int) (r1.nextDouble()*8); switch(r) { case 0: response = "capisco"; break; case 1: response = "ok, poi ?"; break; case 2: response = "che mi racconti di te ?"; break; case 3: if (UserSex=="" && (UserName.trim()).endsWith("a") ) { response = "sei una ragazza ?"; } else response = "cosa fai nel tempo libero ?"; break; case 4: if (counter >= 10) { response = "prima mi avevi detto: '"; r = (int) (r1.nextDouble()*10); //say("fetching:"+r); response += history[r][0]; response += "'\npuoi spiegarti meglio ?"; } else response = "si, vai avanti"; break; case 5: if (type_counter[7] == 0) response = "beh, almeno potevi salutarmi; basterebbe pure un 'ciao' !"; else response = "mhh ... "; break; case 6: if (UserSex == "f") response = "***[entering PROVOLONE mode]: vuoi uscire con me ?"; else response = "interessante ... "; break; default: r = (int) (r1.nextDouble()*30); if (r == 0) response = "mah !"; else response = "vai avanti"; } } } } } return response; } public static String swap_sentence(String sent) { String swapped = new String(""); String s = sent; // strips away dot, comma and other punctuation s = s.replace(',',' '); s = s.replace('\'',' '); s = s.replace('.',' '); s = s.replace(':',' '); s = s.replace(';',' '); s = s.replace('è','e'); s = s.replace('é','e'); s = s.replace('ù','u'); s = s.replace('ò','o'); s = s.replace('ì','i'); if (s.indexOf("?")>= 0) { s = s.replace('?',' '); //s += "?"; history[(counter % 10)][4] = "?"; //say("-found '?': "+s); } if (s.indexOf("!")>= 0) { s = s.replace('!',' '); //s += "!"; history[(counter % 10)][4] = "!"; //say("-found '!': "+s); } boolean found; StringTokenizer st = new StringTokenizer(s); while (st.hasMoreTokens()) { found = false; String tk = (st.nextToken()); //say("processing:"+tk); for (int i=0; swaps[i][0]!="-"; i++) { //say("\t"+swaps[i][0]+"|"+swaps[i][1]); //say("---"); if (tk.equalsIgnoreCase((swaps[i][0])) ) { swapped += ((swaps[i][1])+" "); found = true; //say((swaps[i][0])); } else if (tk.equalsIgnoreCase((swaps[i][1])) ) { swapped += ((swaps[i][0])+" "); found = true; //say((swaps[i][1])); } } if (!found) swapped += (tk+" "); } //say(">"+swapped); history[(counter % 10)][1] = swapped; return swapped; } public static void main(String args[]) { ELIZAFrame app = new ELIZAFrame("HALDO Chat"); app.resize(600, 300); app.show(); app.applet.start(); } public void start() { repaint(); } public void init() { add(p); setLayout(new BorderLayout()); add("North", NPanel); add("South", SPanel); add("East", EPanel); add("West", WPanel); NPanel.add(UserNameLabel); NPanel.add(UserNameField); NPanel.add(ConnectButton); NPanel.add(ExitButton); ExitButton.setBackground(Color.red); ExitButton.setForeground(Color.white); add("Center", UserText); UserText.setEditable(false); UserText.setBackground(Color.black); UserText.setForeground(Color.green); SPanel.setLayout(new GridLayout(2,1)); SPanel.add(MsgBar); SPanel.add(InputTextField); InputTextField.setEditable(false); //ElizaInit("haldo.dat"); } public boolean action(Event e, Object o) { //UserText.setText("Evt. from: "+(String) o); if (e.target.equals(InputTextField) ) { // process input line if (connected) { MsgBar.setText("Sending ... "); counter++; history[(counter % 10)][0] = InputTextField.getText(); badword_handler(InputTextField.getText()); say(">> "+InputTextField.getText()); history[(counter % 10)][5] = answer(swap_sentence(InputTextField.getText())); say(history[(counter % 10)][5]); try { } catch (Exception e3) { MsgBar.setText(">>>"+e3); } MsgBar.setText("Connesso"); InputTextField.setText(""); } else MsgBar.setText("Non sei connesso."); } if (e.target instanceof Button) { String s = (String) o; if (s.equalsIgnoreCase("Esci")) { MsgBar.setText("Disconnected"); try { connected = false; InputTextField.setEditable(false); UserNameField.setEditable(true); UserNameField.setText(""); UserText.setText(""); ConnectButton.setLabel("Connetti"); ConnectButton.setForeground(Color.black); ConnectButton.setBackground(Color.lightGray); UserNameLabel.setText("Ti chiami ?"); } catch (Exception e2) { MsgBar.setText(">>>"+e2); } stop(); destroy(); System.exit(0); } if(s.equalsIgnoreCase("?")) { try { say("*************************************"); say("HALDO: il maggiordomo virtuale"); say(" v19990902"); say("\tUn applicazione della"); say("\tIntelligenza Artificiale"); say("\talla perdita di tempo"); say("\n(C) 1999 IK0YGJ"); say("cconsoli@iol.it"); say("*************************************"); } catch (Exception e9) { MsgBar.setText(">>>"+e9); } } if ( (true /*o.equals(UserNameField.getText())*/ || s.equalsIgnoreCase("Connetti")) && !connected) { if (UserNameField.getText().equalsIgnoreCase("") ) { MsgBar.setText("Please specify an user name."); return true; } UserName = UserNameField.getText(); UserNameField.setEditable(false); try { MsgBar.setText("Mi connetto... "); connected = true; ConnectButton.setLabel("?"); ConnectButton.setForeground(Color.white); ConnectButton.setBackground(Color.blue); UserNameLabel.setText("Benvenuto"); InputTextField.setEditable(true); MsgBar.setText("Connesso."); // resets all counters for (int i=0; i<=999; i++) type_counter[i] = 0; for (int i=0; i<=9; i++) for (int j=0; j<=4; j++) history[i][j] = ""; counter = 0; UserSex = ""; say("Ciao "+ UserName); say("sono HALDO, il maggiordomo virtuale di carlo e marika"); say("comprendo un linguaggio semplice e diretto"); say("puoi parlare con me del più e del meno o chiedere informazioni."); say("\n*** KNOWLEDGE BASE BY GREG, LILLO E FRANCESCO ***\n\n"); say("\nPiacere di fare la tua conoscenza"); } catch (Exception connect_e) { MsgBar.setText(">>>"+connect_e); } } return true; } return false; } } class ELIZAFrame extends Frame { ElizaFE applet; public ELIZAFrame(String frameName) { super(frameName); applet = new ElizaFE(); add("Center", applet); applet.init(); } public boolean HandleEvent(Event event) { if (event.id == Event.WINDOW_DESTROY) { try { } catch (Exception e2) { ElizaFE.MsgBar.setText(">>>"+e2); } applet.stop(); applet.destroy(); System.exit(0); } return false; } }