Use the C function getTerminalHeight instead of termsize for getting the terminal height - 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 1272da9d52dd55f3de944489c2314728f99099ee
DIR parent 40244f6eac457069e60611709cda1851aae1eb08
HTML Author: killruana <killruana@gmail.com>
Date: Sat, 11 Nov 2017 13:31:31 +0100
Use the C function getTerminalHeight instead of termsize for getting the terminal height
Diffstat:
M clic.lisp | 78 ++++++++++++++++----------------
1 file changed, 39 insertions(+), 39 deletions(-)
---
DIR diff --git a/clic.lisp b/clic.lisp
@@ -10,11 +10,11 @@
#+sbcl
(progn
(load-shared-object "./extension.so")
- (declaim (inline termsize))
- (sb-alien:define-alien-routine "termsize" int)
+ (declaim (inline getTerminalHeight))
+ (sb-alien:define-alien-routine "getTerminalHeight" unsigned-int)
(defun c-termsize ()
"return terminal height"
- (sb-alien:with-alien ((res int (termsize))))))
+ (sb-alien:with-alien ((res unsigned-int (getTerminalHeight))))))
#+ecl
(progn
@@ -96,7 +96,7 @@
(subseq text
;; if we can't find a separator at the left of the current, then it's the start of
;; the string
- (if left-separator-position (+ 1 left-separator-position) 0)
+ (if left-separator-position (+ 1 left-separator-position) 0)
(- count 1))))))
(defun formatted-output(line)
@@ -109,71 +109,71 @@
(when (and
(= (length infos) 4)
(member line-type *allowed-selectors* :test #'equal))
-
+
(let ((line-number (+ 1 (hash-table-count *links*)))
(text (car infos))
(uri (cadr infos))
(host (caddr infos))
(port (parse-integer (cadddr infos))))
-
+
;; RFC, page 4
(check "i"
(print-with-color text))
-
+
;; 0 text file
(check "0"
(setf (gethash line-number *links*)
(make-location :host host :port port :uri uri :type line-type ))
(print-with-color text 'file line-number))
-
+
;; 1 directory
(check "1"
(setf (gethash line-number *links*)
(make-location :host host :port port :uri uri :type line-type ))
(print-with-color text 'folder line-number))
-
+
;; 2 CSO phone-book
;; WE SKIP
(check "2")
-
+
;; 3 Error
(check "3"
(print-with-color "error" 'red line-number))
-
+
;; 4 BinHexed Mac file
(check "4"
(print-with-color text))
-
+
;; 5 DOS Binary archive
(check "5" 'unimplemented)
-
+
;; 6 Unix uuencoded file
(check "6" 'unimplemented)
-
+
;; 7 Index search server
(check "7" 'unimplemented)
-
+
;; 8 Telnet session
(check "8" 'unimplemented)
-
+
;; 9 Binary
(check "9" 'unimplemented)
-
+
;; + redundant server
(check "+" 'unimplemented)
-
+
;; T text based tn3270 session
(check "T" 'unimplemented)
-
+
;; g GIF file
(check "g" 'unimplemented)
-
+
;; h http link
(check "h"
(print-with-color (concatenate 'string
text " " uri)
'http "url"))
-
+
;; I image
(check "I" 'unimplemented)))))
@@ -187,22 +187,22 @@
:fill-pointer 0
:initial-element nil
:adjustable t))
-
+
;; we prepare informations about the connection
(let* ((address (sb-bsd-sockets:get-host-by-name host))
(host (car (sb-bsd-sockets:host-ent-addresses address)))
(socket (make-instance 'sb-bsd-sockets:inet-socket :type :stream :protocol :tcp)))
-
+
(sb-bsd-sockets:socket-connect socket host port)
-
+
;; we open a stream for input/output
(let ((stream (sb-bsd-sockets:socket-make-stream socket :input t :output t)))
-
+
;; sending the request here
;; 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)
while line
@@ -243,7 +243,7 @@
(defun show-bookmarks()
"display the bookmarks like a page"
(setf *links* (make-hash-table))
-
+
;; for each bookmark we add it to *links*
;; and display it
(loop for bookmark in *bookmarks*
@@ -306,21 +306,21 @@
(cadr *posix-argv*)
#+ecl
(car (last (cdr (si::command-args)))))
-
+
(defun user-input(input)
(cond
;; show help
((string= "HELP" input)
(help-shell))
-
+
;; bookmark current link
((string= "A" input)
(add-bookmark))
-
+
;; show bookmarks
((string= "B" input)
(show-bookmarks))
-
+
;; go to previous page
((string= "P" input)
(p))
@@ -329,11 +329,11 @@
((or (string= "X" input)
(string= "Q" input))
(quit))
-
+
;; show history
((string= "H" input)
(format t "~{~a~%~}" *history*))
-
+
;; follow a link
(t
;; we ignore error in case of bad input
@@ -370,7 +370,7 @@
(defun visit(destination)
"visit a location"
-
+
(getpage (location-host destination)
(location-port destination)
(location-uri destination))
@@ -378,26 +378,26 @@
;; we reset the links table ONLY if we have a new folder
(when (string= "1" (location-type destination))
(setf *links* (make-hash-table)))
-
+
;; goes to the history !
(push destination *history*)
(display-buffer (location-type destination))
-
+
(when *offline*
(let ((path (concatenate 'string
"history/" (location-host destination)
"/" (location-uri destination) "/")))
(ensure-directories-exist path)
-
+
(with-open-file
(save-offline (concatenate
'string path (location-type destination))
:direction :output
:if-does-not-exist :create
:if-exists :supersede)
-
+
(loop for line in *buffer*
while line
do
@@ -420,7 +420,7 @@
(defun main()
"fetch argument, display page and go to shell if type is 1"
- (let ((destination
+ (let ((destination
(let ((argv (get-argv)))
(if argv
;; url as argument