This commit is contained in:
Oliver Lehmann 1990-04-05 16:55:15 +00:00
parent daec666835
commit bab0218e7d
4 changed files with 440 additions and 0 deletions

View File

@ -0,0 +1,122 @@
# include "form.h"
static int _del_ch(field, length)
register char *field;
register int length;
{
register char *p;
for (p = field; length; --length, p++)
*p = *(p + 1);
*p = ' ';
MM_pts(field);
MM_repos();
return (1);
}
static int _ins_ch(field, length)
register char *field;
register int length;
{
register char *p;
for (p = field + length; length; --length, --p)
*p = *(p - 1);
*field = ' ';
MM_pts(field);
MM_repos();
return (1);
}
MM_edit(form)
register struct MM_form *form;
{
register int ch;
register char *t;
register int p;
register int l;
register int line;
register int col;
t = form->f_field;
l = form->f_len - 1;
p = 0;
for ( ; ; )
{
switch (ch = MM_getchar())
{
case C_HELP:
case C_MENUE:
if (form->f_help)
{
line = MMline;
MMline = 1;
col = MMcol;
MMcol = 1;
MMclr_screen(1, 1);
(*form->f_help)(form);
MMclr_screen(2, 1);
MMframe(form, line, col);
}
continue;
case C_NEXT:
case C_PREV:
if (form->f_mode & F_SENDED)
{
MM_input(form);
if (form->f_func && !(*form->f_func)(form))
continue;
form->f_mode &= ~F_SENDED;
}
/* fall through */
case C_QUIT:
MM_backup(ch);
MMline = form->f_line;
MMcol = form->f_col;
return (1);
case C_FIELD:
ch = -p;
rel_pos:
t += ch;
MM_rel_pos(ch);
p += ch;
continue;
case C_LEFT:
ch = p? -1: l;
goto rel_pos;
case C_RIGHT:
right_pos:
ch = (p == l)? -p: 1;
goto rel_pos;
case C_DELETE:
form->f_mode |= F_SENDED | F_FILLED;
_del_ch(t, l - p);
continue;
case C_INSERT:
form->f_mode |= F_SENDED | F_FILLED;
_ins_ch(t, l - p);
continue;
default:
if (ch >= ' ' && ch < 0177)
{
form->f_mode |= F_SENDED | F_FILLED;
*t = ch;
write(1, t, 1);
goto right_pos;
}
MMerror(" UNGUELTIGES ZEICHEN ");
}
}
}

View File

@ -0,0 +1,32 @@
# include "form.h"
MMframe(frame, line, col)
register struct MM_form *frame;
int line;
int col;
{
register struct MM_form *form;
register int invers;
MMclr_screen(2, 1);
form = frame;
do
{
if (form->f_len)
{
if (invers = form->f_mode & (F_INPUT | F_MENUE))
{
MM_pos(form->f_line, form->f_col);
MM_pts(MM_cs[(form == frame)? CS_SO: CS_SE]);
}
MM_pos(form->f_line, form->f_col + 1);
MM_pta(form->f_field, form->f_len);
if (invers)
MM_pts(MM_cs[CS_SE]);
}
}
while ((form = form->f_next) != frame);
MM_abs_pos(line, col);
return (1);
}

View File

@ -0,0 +1,62 @@
# include "form.h"
/*
** SHELL CALL BS SHELL
** return (0) = ok
** return (1) = error
*/
MMshell(frame, shell, quit, command)
struct MM_form *frame;
int shell;
int quit;
register char *command;
{
register int i;
register int pid;
register int line;
register int col;
int status;
if (!command || !*command)
return (0);
line = MMline;
MMline = 1;
col = MMcol;
MMcol = 1;
MMclr_line(1, 1);
MMclr_screen(2, 1);
if ((pid = fork()) < 0)
{
return (1);
}
if (!pid)
{
setuid(getuid());
setgid(getgid());
for (i = 3; i < 20; i++)
close(i);
if (shell)
execlp("sh", "sh", "-c", command, (char *) 0);
else
execlp(command, command, (char *) 0);
exit(1);
}
/* wait for shell to complete */
while ((i = wait(&status)) != -1)
if (i == pid)
break;
i = status >> 8;
if (!i && quit)
{
MMclr_line(1, 1);
MM_ptis(" ENDE ");
MM_getchar();
MMclr_line(1, 1);
}
MMframe(frame, line, col);
return (i);
}

View File

@ -0,0 +1,224 @@
STATIC
------
_del_ch: edit.c _del_ch(field, length)
char *field;
int length;
_find: value.c struct MM_form *_find(frame, var, no)
struct MM_form *frame;
char *var;
int no;
_getcha:r getchar.c _getchar()
_ins_ch edit.c _ins_ch(field, length)
char *field;
int length;
_transl:ate getchar.c _translate(key_string)
char **key_string;
_value value.c _value(form)
struct MM_form *form;
_Error: error.c int _Error;
_Peek_c:h getchar.c int _Peek_ch[];
_Peek_p:tr getchar.c int _Peek_ptr;
_Tree: getchar.c struct MM_tree *_Tree;
_Tty main.c struct sgttyb _Tty;
_Tty_fd main.c int _Tty_fd;
_Tty_flags main.c int _Tty_flags;
INTERN
------
MM_abs_:pos screen.c MM_abs_pos(line, col)
int line;
int col;
MM_back:up getchar.c MM_backup(character)
int character;
MM_cs: string.c char *MM_cs[];
MM_cs_c:m screen.c int MM_cs_cm;
MM_edit: edit.c MM_edit(form)
struct MM_form *form;
MM_getc:har getchar.c MM_getchar()
MM_inco:de getchar.c MM_incode(key_string, key_code)
char *key_string;
int key_code;
MM_inpu:t input.c MM_input(form)
struct MM_form *form;
MM_need: input.c struct MM_form *MM_need(frame)
struct MM_form *frame;
MM_outp:ut output.c MM_output(form)
struct MM_form *form;
MM_pos: screen.c MM_pos(line, col)
int line;
int col;
MM_pta: string.c MM_pta(string, length)
char *string;
int length;
MM_ptis: string.c MM_ptis(string)
char *string;
MM_pts: string.c MM_pts(string)
char *string;
MM_rel_:pos screen.c MM_rel_pos(col)
int col;
MM_repo:s screen.c MM_repos()
MM_outc:ode getchar.c MM_outcode(key_stroutg, key_code)
char *key_string;
int key_code;
MM_var: var.c MM_var(form, var, format, type)
struct MM_form *form;
char *var;
char *format;
int type;
EXTERN
------
MMalloc: alloc.c struct MM_form *MMalloc(frame, line, col, len, var)
struct MM_form **frame;
int line;
int col;
int len;
char *var;
MMclr_e:rror error.c MMclr_error()
MMclr_l:ine screen.c MMclr_line(line, col)
int line;
int col;
MMclr_s:creen screen.c MMclr_screen(line, col)
int line;
int col;
MMclr_v:alue value.c MMclr_value(frame)
struct MM_form *frame;
MMcol: screen.c int MMcol;
MMerror: error.c MMerror(error_text)
char *error_text;
MMexit_:form main.c MMexit_form(clear)
int clear;
MMform: form.c MMform(frame)
struct MM_form *frame;
MMframe: frame.c MMframe(frame, line, col)
struct MM_form *frame;
int line;
int col;
MMfree: free.c MMfree(frame)
struct MM_form **frame;
MMinit_:form main.c MMinit_form(clear)
int clear;
MMin_fi:eld input.c MMin_field(form, func, help, need)
struct MM_form *form;
int (*func)();
int (*help)();
int need;
MMline: screen.c int MMline;
MMmen_f:ield menue.c MMmen_field(form, func, help, menue_text)
struct MM_form *form;
int (*func)();
int (*help)();
char *menue_text;
MMnext: next.c MMnext()
MMout_f:ield output.c MMout_field(form, output_text)
struct MM_form *form;
char *output_text;
MMpmove: screen.c char *MMpmove(src, dst, len, ch)
char *src;
char *dst;
int len;
int ch;
MMsmove: screen.c MMsmove(src, dst)
char *src;
char *dst;
MMset_f:ield value.c MMset_field(frame, var, no)
struct MM_form *frame;
char *var;
int no;
MMset_v:alue value.c MMset_value(frame, var, no)
struct MM_form *frame;
char *var;
int no;
MMshell: shell.c MMshell(form, shell, quit, command)
struct MM_form *form;
int shell;
int quit;
char *command;
MMval_f:ield value.c MMval_field(form, func)
struct MM_form *form;
int (*func)();
MMvalue: value.c MMvalue(frame)
struct MM_form *frame;
MMvarc: var_c.c MMvarc(form, var, format)
struct MM_form *form;
char *var;
char *format;
MMvarf4: var_f4.c MMvarf4(form, var, format)
struct MM_form *form;
char *var;
char *format;
MMvarf8: var_f8.c MMvarf8(form, var, format)
struct MM_form *form;
char *var;
char *format;
MMvari1: var_i1.c MMvari1(form, var, format)
struct MM_form *form;
char *var;
char *format;
MMvari2: var_i2.c MMvari2(form, var, format)
struct MM_form *form;
char *var;
char *format;
MMvari4: var_i4.c MMvari4(form, var, format)
struct MM_form *form;
char *var;
char *format;