1 | (*
|
---|
2 | (c) copyright 1988 by the Vrije Universiteit, Amsterdam, The Netherlands.
|
---|
3 | See the copyright notice in the ACK home directory, in the file "Copyright".
|
---|
4 | *)
|
---|
5 |
|
---|
6 | (*
|
---|
7 | Module: Interface to termcap database
|
---|
8 | From: Unix manual chapter 3
|
---|
9 | Version: $Header: /cvsup/minix/src/lib/ack/libm2/Termcap.mod,v 1.1 2005/10/10 15:27:46 beng Exp $
|
---|
10 | *)
|
---|
11 |
|
---|
12 | (*$R-*)
|
---|
13 | IMPLEMENTATION MODULE Termcap;
|
---|
14 |
|
---|
15 | IMPORT XXTermcap;
|
---|
16 | FROM SYSTEM IMPORT ADR, ADDRESS;
|
---|
17 | FROM Unix IMPORT isatty;
|
---|
18 | FROM Arguments IMPORT
|
---|
19 | GetEnv;
|
---|
20 |
|
---|
21 | TYPE STR = ARRAY[1..32] OF CHAR;
|
---|
22 | STRCAP = POINTER TO STR;
|
---|
23 |
|
---|
24 | VAR Buf, Buf1 : ARRAY [1..1024] OF CHAR;
|
---|
25 | BufCnt : INTEGER;
|
---|
26 |
|
---|
27 | PROCEDURE Tgetent(name: ARRAY OF CHAR) : INTEGER;
|
---|
28 | VAR i: INTEGER;
|
---|
29 | x: STRCAP;
|
---|
30 | BEGIN
|
---|
31 | i := XXTermcap.tgetent(ADR(Buf), ADR(name));
|
---|
32 | BufCnt := 1;
|
---|
33 | IF isatty(1) THEN
|
---|
34 | ELSE
|
---|
35 | (* This used to be something returned by gtty(). To increase
|
---|
36 | * portability we forget about old terminals needing delays.
|
---|
37 | * (kjb)
|
---|
38 | *)
|
---|
39 | XXTermcap.ospeed := 0;
|
---|
40 | END;
|
---|
41 | IF i > 0 THEN
|
---|
42 | IF Tgetstr("pc", x) THEN
|
---|
43 | XXTermcap.PC := x^[1];
|
---|
44 | ELSE XXTermcap.PC := 0C;
|
---|
45 | END;
|
---|
46 | IF Tgetstr("up", x) THEN ; END; XXTermcap.UP := x;
|
---|
47 | IF Tgetstr("bc", x) THEN ; END; XXTermcap.BC := x;
|
---|
48 | END;
|
---|
49 | RETURN i;
|
---|
50 | END Tgetent;
|
---|
51 |
|
---|
52 | PROCEDURE Tgetnum(id: ARRAY OF CHAR): INTEGER;
|
---|
53 | BEGIN
|
---|
54 | RETURN XXTermcap.tgetnum(ADR(id));
|
---|
55 | END Tgetnum;
|
---|
56 |
|
---|
57 | PROCEDURE Tgetflag(id: ARRAY OF CHAR): BOOLEAN;
|
---|
58 | BEGIN
|
---|
59 | RETURN XXTermcap.tgetflag(ADR(id)) = 1;
|
---|
60 | END Tgetflag;
|
---|
61 |
|
---|
62 | PROCEDURE Tgoto(cm: STRCAP; col, line: INTEGER): STRCAP;
|
---|
63 | BEGIN
|
---|
64 | RETURN XXTermcap.tgoto(cm, col, line);
|
---|
65 | END Tgoto;
|
---|
66 |
|
---|
67 | PROCEDURE Tgetstr(id: ARRAY OF CHAR; VAR res: STRCAP) : BOOLEAN;
|
---|
68 | VAR a, a2: ADDRESS;
|
---|
69 | b: CARDINAL;
|
---|
70 | BEGIN
|
---|
71 | a := ADR(Buf1[BufCnt]);
|
---|
72 | a2 := XXTermcap.tgetstr(ADR(id), ADR(a));
|
---|
73 | res := a2;
|
---|
74 | IF a2 = NIL THEN
|
---|
75 | RETURN FALSE;
|
---|
76 | END;
|
---|
77 | b := a - a2;
|
---|
78 | INC(BufCnt, b);
|
---|
79 | RETURN TRUE;
|
---|
80 | END Tgetstr;
|
---|
81 |
|
---|
82 | PROCEDURE Tputs(cp: STRCAP; affcnt: INTEGER; p: PUTPROC);
|
---|
83 | BEGIN
|
---|
84 | XXTermcap.tputs(cp, affcnt, XXTermcap.PUTPROC(p));
|
---|
85 | END Tputs;
|
---|
86 |
|
---|
87 | PROCEDURE InitTermcap;
|
---|
88 | VAR Bf: STR;
|
---|
89 | BEGIN
|
---|
90 | IF GetEnv("TERM", Bf) = 0 THEN
|
---|
91 | Bf := "dumb";
|
---|
92 | END;
|
---|
93 | IF Tgetent(Bf) <= 0 THEN
|
---|
94 | END;
|
---|
95 | END InitTermcap;
|
---|
96 |
|
---|
97 | BEGIN
|
---|
98 | InitTermcap;
|
---|
99 | END Termcap.
|
---|