split function has been rewritten - clic - Clic is an command line interactive client for gopher written in Common LISP
HTML git clone git://bitreich.org/clic/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/clic/
DIR Log
DIR Files
DIR Refs
DIR Tags
DIR README
DIR LICENSE
---
DIR commit 2392f6517875c5509aaddeefe3c3b3f531be9f96
DIR parent 2c6f8af4c5b2efaa1720fda657a226a947d604ea
HTML Author: Solene Rapenne <solene@perso.pw>
Date: Fri, 3 Nov 2017 14:39:08 +0000
split function has been rewritten
Diffstat:
M clic.lisp | 64 +++++++++++++------------------
1 file changed, 26 insertions(+), 38 deletions(-)
---
DIR diff --git a/clic.lisp b/clic.lisp
@@ -3,7 +3,6 @@
#+ecl
(require 'sockets)
-
(defun color(num1 num2)
"generate string used to put ANSI color"
(format nil "~a[~a;~am" #\Escape num1 num2))
@@ -13,12 +12,12 @@
"h" "7" "8" "9" "+" "T" "g" "I"))
;; ansi colors
-(defparameter *red* (color 1 31))
-(defparameter *white* (color 0 70))
-(defparameter *blue* (color 4 34))
-(defparameter *green* (color 1 32))
-(defparameter *yellow* (color 0 33))
-(defparameter *cyan* (color 0 46))
+(defparameter *red* (color 1 31))
+(defparameter *white* (color 0 70))
+(defparameter *color-folder* (color 4 34))
+(defparameter *green* (color 1 32))
+(defparameter *color-file* (color 0 33))
+(defparameter *cyan* (color 0 46))
(defun print-with-color(text &optional (color *white*) (line-number nil))
"Used to display a line with a color"
@@ -26,33 +25,26 @@
(defmacro check(identifier &body code)
"Syntax to make a when easier for formatted-output func"
- `(progn
- (when (string= ,identifier line-type)
- ,@code)))
-
-(defun split-tab(text)
- (if (position #\Tab text)
- (append
- (loop for char across text
- counting char into count
- when (char= char #\Tab)
- collect
- (subseq text
- (let ((res (position #\Tab text :from-end t :end (- count 1))))
- (if res
- (+ 1 res)
- 0))
- (- count 1)))
- (list
- (subseq text
- (+ 1 (position #\Tab text :from-end t))
- (- (length text) 1))))
- nil))
+ `(progn (when (string= ,identifier line-type) ,@code)))
+
+(defun split(text separator)
+ "this function split a string with separator and return a list"
+ (let ((text (concatenate 'string text (string separator))))
+ (loop for char across text
+ counting char into count
+ when (char= char separator)
+ collect
+ (subseq text
+ (let ((res (position separator text :from-end t :end (- count 1))))
+ (if res
+ (+ 1 res)
+ 0))
+ (- count 1)))))
(defun formatted-output(line line-number)
"Used to display gopher response with color one line at a time"
(let ((line-type (subseq line 0 1))
- (infos (split-tab (subseq line 1))))
+ (infos (split (subseq line 1) #\Tab)))
;; see RFC 1436
;; section 3.8
@@ -65,7 +57,6 @@
(host (caddr infos))
(port (parse-integer (cadddr infos))))
-
;; RFC, page 4
(check "i"
@@ -74,13 +65,13 @@
;; 0 file
(check "0"
(setf (gethash line-number *links*) (list host port uri line-type ))
- (print-with-color text *yellow* line-number))
+ (print-with-color text *color-file* line-number))
;; 1 directory
(check "1"
(setf (gethash line-number *links*) (list host port uri line-type))
- (print-with-color text *blue* line-number))
+ (print-with-color text *color-folder* line-number))
;; 2 CSO phone-book
;; WE SKIP
@@ -120,14 +111,14 @@
;; h html link
(check "h"
- (print-with-color text *blue* "url"))
+ (print-with-color text *color-file* "url"))
;; I image
(check "I" 'unimplemented)))))
(defun getpage(host port uri &optional (type "1"))
"connect and display"
-
+
(format t "Asking gopher://~a:~a/~a~a~%" host port type uri)
;; we reset the links table
@@ -149,8 +140,6 @@
;; if the selector is 1 we omit it
(format stream "~a~%" uri)
(force-output stream)
-
-
;; for each line we receive we display it
(loop for line = (read-line stream nil nil)
@@ -169,7 +158,6 @@
(let ((infos (gethash key *links*)))
(apply 'getpage infos)))
-
(defun help()
"show help"
(format t "HOW TO USE CLI !~%")