ref: 7bc4d4f57bc35956c69039e92ebef1737f973e95
parent: 587970db0cef17219e895e5870d7e900166a76de
	author: Julien Blanchard <julien@typed-hole.org>
	date: Sun Jun 21 10:02:24 EDT 2020
	
Add a Query type
--- a/toe.c
+++ b/toe.c
@@ -2,8 +2,15 @@
#include <libc.h>
#include <bio.h>
+typedef struct Query
+{+ char *domain;
+ char *user;
+} Query;
+
+
void
-visit(char *domain, char *user)
+toe(Query *query)
 {char *naddr;
char *line;
@@ -10,19 +17,19 @@
int fd;
Biobuf out, body;
- naddr = netmkaddr(domain, "tcp", "79");
+ naddr = netmkaddr(query->domain, "tcp", "79");
fd = dial(naddr, 0, 0, 0);
 	if(fd < 0){-		print("unable to connect to %s: %r", domain);+		print("unable to connect to %s: %r", query->domain);return;
}
-	if (user == nil) {+	if (query->user == nil) {fprint(fd, "\r\n");
 	} else {- fprint(fd, "%s\r\n", user);
+ fprint(fd, "%s\r\n", query->user);
}
-
+
Binit(&body, fd, OREAD);
Binit(&out, 1, OWRITE);
@@ -30,38 +37,47 @@
Bprint(&out, "%s", line);
free(line);
}
-
+
Bflush(&out);
Bflush(&body);
close(fd);
+ free(query);
}
+Query *
+mk_query(char *query_str)
+{+ char *user, *domain;
+ Query *new_query = malloc(sizeof(Query));
+
+	if (query_str[0] == '@') {+ user = nil;
+ domain = query_str + 1;
+  	} else if (strstr(query_str, "@") == nil) {+ user = query_str;
+ domain = "localhost";
+  	} else {+ user = strtok(query_str, "@");
+ domain = strtok(nil, "@");
+ }
+
+ new_query->user = user;
+ new_query->domain = domain;
+
+ return new_query;
+}
+
void
main(int argc, char **argv)
 {- char *user, *domain, *query;
-
 	if( argc == 2 ) {- query = argv[1];
+ Query *query = mk_query(argv[1]);
-		if (query[0] == '@') {- user = nil;
- domain = query + 1;
-		} else if (strstr(argv[1], "@") == nil) {- user = argv[1];
- domain = "localhost";
-		} else {- user = strtok(argv[1], "@");
- domain = strtok(nil, "@");
- }
-
- visit(domain, user);
+ toe(query);
exits(0);
- }
-   	else if( argc > 2 ) {-      	print("Too many arguments supplied.\n");- }
-   	else {-      	print("Usage: toe [user]@server.\n");- }
+  	} else if( argc > 2 ) {+    	print("Too many arguments supplied.\n");+  	} else {+    	print("Usage: toe [user]@server.\n");+ }
}
--
⑨