BSD 4_3 development
[unix-history] / usr / lib / lisp / common3.l
CommitLineData
5ffa1c4c
C
1(setq rcs-common2-
2 "$Header: common3.l,v 1.4 84/02/29 23:23:35 layer Exp $")
3
4;;
5;; common3.l -[Sat Sep 10 10:51:18 1983 by jkf]-
6;;
7;;
8
9(declare (macros t))
10
11(defun litatom macro (x)
12 `(and (atom . ,(cdr x))
13 (not (numberp . ,(cdr x)))))
14
15; This function really should compile optimally in-line
16;
17(defun nequal (arg1 arg2)
18 (not (equal arg1 arg2)))
19
20(defun lineread (&rest args)
21 (let (flag port)
22 (mapc (function ; get the options
23 (lambda (x)
24 (cond ((portp x) (setq port x))
25 ((setq flag x)))))
26 args)
27 (cond ((not (and flag ; flag for empty line
28 (eq (tyipeek port) #\lf)
29 (tyi port)))
30 (prog (input)
31 (setq input (ncons nil)) ; initialize for tconc.
32 (tconc input (read port)) ; do read to make sure
33 ; an s-expression gets read
34 loop
35 (cond ((not (eq (tyipeek port) #\lf))
36 (tconc input (read port))
37 (go loop))
38 ( t ; the actual list is in the CAR.
39 (tyi port)
40 (return (car input)))))))))
41
42(defun defv fexpr (l)
43 (set (car l) (cadr l)))
44
45
46(defun initsym (&rest l)
47 (mapcar (function initsym1) l))
48
49(defun initsym1 expr (l)
50 (prog (num)
51 (cond ((dtpr l)
52 (setq num (cadr l))
53 (setq l (car l)))
54 ( t (setq num 0)))
55 (putprop l num 'symctr)
56 (return (concat l num))))
57
58(defun newsym (name)
59 (concat name
60 (putprop name
61 (1+ (or (get name 'symctr)
62 -1))
63 'symctr)))
64
65(defun oldsym (sym)
66 (cond ((get sym 'symctr) (concat sym (get sym 'symctr)))
67 ( t sym)))
68
69(defun allsym (name)
70 (prog (num symctr syms)
71 (cond ((dtpr name)
72 (setq num (cadr name))
73 (setq name (car name)))
74 ( t (setq num 0)))
75 (or (setq symctr (get name 'symctr))
76 (return))
77 loop
78 (and (>& num symctr)
79 (return syms))
80 (setq syms (cons (concat name symctr) syms))
81 (setq symctr (1- symctr))
82 (go loop)))
83
84(defun remsym (&rest l)
85 (mapcar (function remsym1) l))
86
87(defun remsym1 expr (l)
88 (prog1 (oldsym (cond ((dtpr l) (car l))
89 ( t l)))
90 (mapc (function remob) (allsym l))
91 (cond ((dtpr l)
92 (putprop (car l) (1- (cadr l)) 'symctr))
93 ( t (remprop l 'symctr)))))
94
95(defun symstat (&rest l)
96 (mapcar (function (lambda (k)
97 (list k (get k 'symctr))))
98 l))
99
100;; from peter@renoir
101(defun wide-print-list (given-list &optional (left-margin (nwritn)))
102 ; given a (presumably long) list, print it as wide as possible.
103 (declare (special lpar rpar))
104 (let ((max-width 78))
105 (tab left-margin)
106 (cond ((not (listp given-list))
107 (patom given-list))
108 ((null given-list)
109 (patom nil))
110 (t
111 (patom lpar)
112 (do ((left given-list (cdr left))
113 (need-space-p nil t))
114 ((null left) nil)
115 (cond (need-space-p
116 (patom " ")))
117 (let* ((element (car left))
118 (length (flatc element))
119 (used (nwritn))
120 (available (- max-width used)))
121 (cond ((>= length available)
122 (tab (1+ left-margin))))
123 (cond ((listp element)
124 (wide-print-list element))
125 (t
126 (patom element)))))
127 (patom rpar)))))