aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjames <>2008-02-27 01:31:14 +0000
committerjames <>2008-02-27 01:31:14 +0000
commit4add819b42c292ee2a6fc4aeda782a447b1bcf27 (patch)
tree17b7f7ce7e45c6c6262db7cfeb548a4d6f1006e1
parent74feb0db53bf6ed2d53ca59e3aed001f1160e62a (diff)
downloadsympathy-4add819b42c292ee2a6fc4aeda782a447b1bcf27.tar.gz
sympathy-4add819b42c292ee2a6fc4aeda782a447b1bcf27.tar.bz2
sympathy-4add819b42c292ee2a6fc4aeda782a447b1bcf27.zip
*** empty log message ***
-rw-r--r--apps/mainloop.c7
-rw-r--r--apps/mainloop.h5
-rw-r--r--apps/sympathy.c27
-rw-r--r--apps/usage.c15
-rw-r--r--src/log.c5
-rw-r--r--src/prototypes.h4
-rw-r--r--src/ptty.c7
-rw-r--r--src/utf8.c25
-rw-r--r--src/util.c17
-rw-r--r--src/vt102.c38
10 files changed, 97 insertions, 53 deletions
diff --git a/apps/mainloop.c b/apps/mainloop.c
index 3f1c28d..07290e1 100644
--- a/apps/mainloop.c
+++ b/apps/mainloop.c
@@ -11,6 +11,9 @@ static char rcsid[] =
/*
* $Log$
+ * Revision 1.14 2008/02/27 01:31:14 james
+ * *** empty log message ***
+ *
* Revision 1.13 2008/02/26 23:56:12 james
* *** empty log message ***
*
@@ -391,7 +394,7 @@ msg_from_server (ANSI * a, IPC_Msg * m, Context * c)
void
mainloop (TTY * tty, Socket * server_socket, Socket * client_socket,
- ANSI * ansi, Log * log, int nhistory)
+ ANSI * ansi, Log * log, int nhistory,int width)
{
fd_set rfds, wfds;
Context c = { 0 };
@@ -402,7 +405,7 @@ mainloop (TTY * tty, Socket * server_socket, Socket * client_socket,
c.tp = tty_parser_new ();
c.u = utf8_new ();
- c.v = vt102_new ();
+ c.v = vt102_new (width);
c.h = history_new (nhistory);
c.l = log;
/* are we being fed by a tty or a socket */
diff --git a/apps/mainloop.h b/apps/mainloop.h
index 3bbd960..5d347e7 100644
--- a/apps/mainloop.h
+++ b/apps/mainloop.h
@@ -12,6 +12,9 @@
/*
* $Log$
+ * Revision 1.3 2008/02/27 01:31:14 james
+ * *** empty log message ***
+ *
* Revision 1.2 2008/02/20 18:49:11 staffcvs
* *** empty log message ***
*
@@ -27,6 +30,6 @@
extern void
mainloop (TTY * tty, Socket * server_socket, Socket * client_socket, ANSI * a,
- Log * log, int nhistory);
+ Log * log, int nhistory, int width);
#endif /* __MAINLOOP_H__ */
diff --git a/apps/sympathy.c b/apps/sympathy.c
index 13b54ef..4a9f18a 100644
--- a/apps/sympathy.c
+++ b/apps/sympathy.c
@@ -11,6 +11,9 @@ static char rcsid[] =
/*
* $Log$
+ * Revision 1.15 2008/02/27 01:31:14 james
+ * *** empty log message ***
+ *
* Revision 1.14 2008/02/24 00:43:55 james
* *** empty log message ***
*
@@ -239,6 +242,7 @@ main (int argc, char *argv[])
int c;
extern char *optarg;
extern int optind, opterr, optopt;
+ int width=VT102_COLS_80;
int oflags[128];
char *oargs[128];
@@ -255,16 +259,7 @@ main (int argc, char *argv[])
memset (oflags, 0, sizeof (oflags));
memset (oargs, 0, sizeof (oargs));
-#if 0
- "sympathy -t [-K] [-d serialdev|-p] [-b baud] [-f] [-L log]\n"
- "sympathy -s [-K] [-d serialdev|-p] [-b baud] [-f] [-L log] [-F] [-k skt]\n"
- " [-n hlines]\n"
- "sympathy [-s -c] [-K] [-d serialdev|-p] [-b baud] [-f] [-L log] [-k skt]\n"
- " [-n hlines]\n"
- "sympathy -c [-H] -k skt\n"
- "sympathy -r id [-H]\n" "sympathy {-l|-ls}\n"
-#endif
- while ((c = getopt (argc, argv, "utscr:lKHd:pb:fL:Fk:n:")) != EOF)
+ while ((c = getopt (argc, argv, "w:utscr:lKHd:pb:fL:Fk:n:")) != EOF)
{
switch (c)
{
@@ -397,6 +392,7 @@ main (int argc, char *argv[])
oflags['f'] = 0;
oflags['L'] = 0;
oflags['n'] = 0;
+ oflags['w'] = 0;
if (server_socket)
{
socket_free_parent (server_socket);
@@ -405,6 +401,7 @@ main (int argc, char *argv[])
}
}
+
if (oflags['c'] && !oflags['k'])
fatal_moan ("-c requires a socket to be specified with -s or -k");
@@ -418,6 +415,12 @@ main (int argc, char *argv[])
oflags['p']++;
}
+ if (oflags['w']) {
+ width=safe_atoi(oargs['w']);
+ if ((width>VT102_MAX_COLS) || (width<1))
+ fatal_moan("-w requires a width between 1 and %d\n",VT102_MAX_COLS);
+ }
+
if (oflags['s'] && !oflags['F'])
{
daemon (1, 0); /*incase socket is relative path, unlink then will fail */
@@ -436,7 +439,7 @@ main (int argc, char *argv[])
if (oflags['p'])
{
- tty = ptty_open (NULL, NULL);
+ tty = ptty_open (NULL, NULL, width);
if (!tty)
fatal_moan ("unable to open a ptty");
}
@@ -493,7 +496,7 @@ main (int argc, char *argv[])
}
}
- mainloop (tty, server_socket, client_socket, ansi, log, history);
+ mainloop (tty, server_socket, client_socket, ansi, log, history,width);
if (ansi)
{
diff --git a/apps/usage.c b/apps/usage.c
index 07da7fa..62061fd 100644
--- a/apps/usage.c
+++ b/apps/usage.c
@@ -10,6 +10,9 @@ static char rcsid[] = "$Id$";
/*
* $Log$
+ * Revision 1.10 2008/02/27 01:31:14 james
+ * *** empty log message ***
+ *
* Revision 1.9 2008/02/24 00:43:55 james
* *** empty log message ***
*
@@ -48,10 +51,10 @@ usage (void)
fprintf (stderr, "Usage:\n"
"sympathy -t [-K] [-d serialdev|-p] [-b baud] [-f] [-L log] [-u]\n"
- "sympathy -s [-K] [-d serialdev|-p] [-b baud] [-f] [-L log] [-u] [-F]\n"
- " [-k skt] [-n hlines]\n"
+ "sympathy -s [-K] [-d serialdev|-p] [-b baud] [-f] [-L log] [-u] [-k skt]\n"
+ " [-n hlines] [-w width] [-F]\n"
"sympathy [-s -c] [-K] [-d serialdev|-p] [-b baud] [-f] [-L log] [-u] [-k skt]\n"
- " [-n hlines]\n"
+ " [-n hlines] [-w width]\n"
"sympathy -c [-H] [-u] -k skt\n"
"sympathy -r id [-H] [-u]\n"
"sympathy {-l|-ls}\n"
@@ -89,10 +92,12 @@ usage (void)
" -F do not detach, run the server in the foreground\n"
" -H instead of connecting the user's terminal to the session\n"
" emit HTML of the current state of the screen on stdout\n"
- " -L log activity on the device to the file log\n"
+ " -L log log activity on the device to the file log\n"
" -n hlines the number of lines of history to store in the\n"
" server, that are replayed on connexion\n"
- " -u don't emit utf-8 instead map all non ascii characters as ?\n");
+ " -u don't emit utf-8 try to use ISO-2202 to the local terminal\n"
+ " -w width start session with a screen of width width<=132\n"
+ );
exit (1);
diff --git a/src/log.c b/src/log.c
index ef0dfb5..7c04f23 100644
--- a/src/log.c
+++ b/src/log.c
@@ -10,6 +10,9 @@ static char rcsid[] = "$Id$";
/*
* $Log$
+ * Revision 1.5 2008/02/27 01:31:14 james
+ * *** empty log message ***
+ *
* Revision 1.4 2008/02/27 00:54:16 james
* *** empty log message ***
*
@@ -101,7 +104,7 @@ file_log_new (char *fn)
l->fp = f;
l->do_close = dc;
- fput_cp(f,0xffef);
+ fput_cp (f, 0xffef);
return (Log *) l;
}
diff --git a/src/prototypes.h b/src/prototypes.h
index a115592..dd7dfeb 100644
--- a/src/prototypes.h
+++ b/src/prototypes.h
@@ -51,7 +51,7 @@ extern void vt102_reset_state(VT102 *v);
extern void vt102_parse_char(Context *c, int ch);
extern void vt102_send(Context *c, uint8_t key);
extern void vt102_reset(VT102 *v);
-extern VT102 *vt102_new(void);
+extern VT102 *vt102_new(int width);
extern void vt102_set_ansi(VT102 *v, int ansi);
extern void vt102_free(VT102 *v);
/* tty.c */
@@ -81,7 +81,7 @@ extern int ring_space(Ring *r);
extern int ring_bytes(Ring *r);
extern Ring *ring_new(int n);
/* ptty.c */
-extern TTY *ptty_open(char *path, char *argv[]);
+extern TTY *ptty_open(char *path, char *argv[], int width);
/* terminal.c */
extern int terminal_winches;
extern void terminal_atexit(void);
diff --git a/src/ptty.c b/src/ptty.c
index 98f1282..b8e77b1 100644
--- a/src/ptty.c
+++ b/src/ptty.c
@@ -10,6 +10,9 @@ static char rcsid[] = "$Id$";
/*
* $Log$
+ * Revision 1.12 2008/02/27 01:31:14 james
+ * *** empty log message ***
+ *
* Revision 1.11 2008/02/26 23:23:17 james
* *** empty log message ***
*
@@ -137,7 +140,7 @@ ptty_write (TTY * _t, void *buf, int len)
}
TTY *
-ptty_open (char *path, char *argv[])
+ptty_open (char *path, char *argv[],int width)
{
PTTY *t;
pid_t child;
@@ -150,7 +153,7 @@ ptty_open (char *path, char *argv[])
client_termios (&ctermios);
winsize.ws_row = VT102_ROWS;
- winsize.ws_col = VT102_COLS_80;
+ winsize.ws_col = width ? width:VT102_COLS_80;
child = forkpty (&fd, name, &ctermios, &winsize);
diff --git a/src/utf8.c b/src/utf8.c
index 7512c43..aaa5ffc 100644
--- a/src/utf8.c
+++ b/src/utf8.c
@@ -10,6 +10,9 @@ static char rcsid[] = "$Id$";
/*
* $Log$
+ * Revision 1.9 2008/02/27 01:31:14 james
+ * *** empty log message ***
+ *
* Revision 1.8 2008/02/27 00:54:16 james
* *** empty log message ***
*
@@ -154,26 +157,27 @@ utf8_new (void)
}
-int utf8_encode (char *ptr, int ch)
+int
+utf8_encode (char *ptr, int ch)
{
if (ch < 0x80)
{
ptr[0] = ch;
- return 1;
+ return 1;
}
else if (ch < 0x800)
{
ptr[0] = 0xc0 | (ch >> 6);
ptr[1] = 0x80 | (ch & 0x3f);
- return 2;
+ return 2;
}
else if (ch < 0x10000)
{
ptr[0] = 0xe0 | (ch >> 12);
ptr[1] = 0x80 | ((ch >> 6) & 0x3f);
ptr[2] = 0x80 | (ch & 0x3f);
- return 3;
+ return 3;
}
else if (ch < 0x1fffff)
{
@@ -181,18 +185,19 @@ int utf8_encode (char *ptr, int ch)
ptr[1] = 0x80 | ((ch >> 12) & 0x3f);
ptr[2] = 0x80 | ((ch >> 6) & 0x3f);
ptr[3] = 0x80 | (ch & 0x3f);
- return 4;
+ return 4;
}
- return 0;
+ return 0;
}
void
utf8_emit (TTY * t, int ch)
{
uint8_t buf[4];
-int i;
- i=utf8_encode(buf,ch);
- if (!i) return;
+ int i;
+ i = utf8_encode (buf, ch);
+ if (!i)
+ return;
- t->xmit (t, buf, i);
+ t->xmit (t, buf, i);
}
diff --git a/src/util.c b/src/util.c
index ea46e77..91cb58b 100644
--- a/src/util.c
+++ b/src/util.c
@@ -10,6 +10,9 @@ static char rcsid[] = "$Id$";
/*
* $Log$
+ * Revision 1.7 2008/02/27 01:31:14 james
+ * *** empty log message ***
+ *
* Revision 1.6 2008/02/27 00:54:16 james
* *** empty log message ***
*
@@ -143,13 +146,15 @@ client_termios (struct termios *termios)
cfsetospeed (termios, B9600);
}
-int fput_cp(FILE *f,uint32_t ch)
+int
+fput_cp (FILE * f, uint32_t ch)
{
-char buf[4];
-int i;
-i=utf8_encode(buf,ch);
+ char buf[4];
+ int i;
+ i = utf8_encode (buf, ch);
-if (!i) return 0;
+ if (!i)
+ return 0;
-return fwrite(buf,i,1,f);
+ return fwrite (buf, i, 1, f);
}
diff --git a/src/vt102.c b/src/vt102.c
index 7c211c5..a879999 100644
--- a/src/vt102.c
+++ b/src/vt102.c
@@ -10,6 +10,9 @@ static char rcsid[] = "$Id$";
/*
* $Log$
+ * Revision 1.45 2008/02/27 01:31:14 james
+ * *** empty log message ***
+ *
* Revision 1.44 2008/02/27 00:54:16 james
* *** empty log message ***
*
@@ -387,7 +390,7 @@ vt102_log_line (Context * c, int line)
{
CRT_Pos e = { c->v->current_width - 1, line };
CRT_Pos p = { 0, line };
- char logbuf[4*(VT102_MAX_COLS + 1)],*logptr=logbuf;
+ char logbuf[4 * (VT102_MAX_COLS + 1)], *logptr = logbuf;
if (!c->l)
return;
@@ -404,9 +407,9 @@ vt102_log_line (Context * c, int line)
int ch = c->v->crt.screen[CRT_ADDR_POS (&p)].chr;
if (ch < 32)
ch = ' ';
- logptr+=utf8_encode(logptr,ch);
+ logptr += utf8_encode (logptr, ch);
}
- *logptr=0;
+ *logptr = 0;
c->l->log (c->l, logbuf);
}
@@ -996,12 +999,15 @@ vt102_regular_char (Context * c, VT102 * v, uint32_t ch)
if (ch < VT102_CHARSET_SIZE)
{
- int cs;
- if ((cs=vt102_charset_c0[ch])) {
- ch=cs;
- } else if ((cs=charset_from_csid[v->g[v->cs]][ch])) {
- ch=cs;
- }
+ int cs;
+ if ((cs = vt102_charset_c0[ch]))
+ {
+ ch = cs;
+ }
+ else if ((cs = charset_from_csid[v->g[v->cs]][ch]))
+ {
+ ch = cs;
+ }
}
v->crt.screen[CRT_ADDR_POS (&v->pos)].chr = ch;
v->crt.screen[CRT_ADDR_POS (&v->pos)].attr = v->attr;
@@ -1738,10 +1744,10 @@ vt102_parse_char (Context * c, int ch)
break;
#if 0
/*ACK*/ case 6:
- break;
+ break;
#endif
/*BEL*/ case 7:
- //FIXME beep
+ //FIXME beep
break;
/*BS*/ case 8:
vt102_cursor_retreat (c->v);
@@ -2016,7 +2022,7 @@ vt102_reset (VT102 * v)
}
VT102 *
-vt102_new (void)
+vt102_new (int width)
{
VT102 *v;
@@ -2026,6 +2032,14 @@ vt102_new (void)
vt102_reset (v);
+ if (width) {
+ v->current_width =width;
+ v->crt.width = v->current_width;
+ v->screen_end.x = v->current_width - 1;
+ v->top_margin = v->screen_start;
+ v->bottom_margin = v->screen_end;
+ vt102_cursor_home (v);
+ }
return v;
}