1 task Startup(StartupObject s {initialstate}) {
2 String firstmachine=s.parameters[0];
3 String firstpage=s.parameters[1];
4 QueryList ql=new QueryList() {initialized};
5 Query firstquery=new Query(firstmachine, firstpage){};
6 taskexit(s{!initialstate});
9 task requestQuery(Query q{!requested}) {
10 String hostname=q.getHostName();
12 StringBuffer req=new StringBuffer("GET ");
14 req.append(q.getPath());
15 req.append(" HTTP/1.1\r\nHost:");
16 req.append(q.getHostName());
17 req.append("\r\n\r\n");
18 q.write(req.toString().getBytes());
19 taskexit(q{requested});
22 task readResponse(Query q{requested && ! received && IOPending}) {
31 int numchars=q.read(b);
32 if ((numchars==1) && (b[0]=='\r'))
34 } else if (q.state==1) {
36 int numchars=q.read(b);
43 } else if (q.state==2) {
45 int numchars=q.read(b);
52 } else if (q.state==3) {
54 int numchars=q.read(b);
63 byte[] buffer=new byte[1024];
64 int numchars=q.read(buffer);
67 taskexit(q{received});
69 String curr=(new String(buffer)).subString(0,numchars);
70 q.response.append(curr);
75 task processPage(Query q{received&&!processed}, QueryList ql{initialized}) {
77 String href=new String("href=\"");
78 String searchstr=q.response.toString();
83 int mindex=searchstr.indexOf(href,index);
86 int endquote=searchstr.indexOf('"', mindex+href.length());
88 String match=searchstr.subString(mindex+href.length(), endquote);
89 String match2=q.makewebcanonical(match);
90 if (match2!=null&&!ql.checkQuery(match2)) {
92 System.printString(q.getHostName(match));
93 System.printString(" ");
94 System.printString(q.getPathName(match));
95 System.printString("\n");
96 Query newq=new Query(q.getHostName(match), q.getPathName(match)){};
102 taskexit(q{processed});