v08i063: SMiLE = Simple MIni Line Editor
Brandon S. Allbery - comp.sources.misc
allbery at uunet.UU.NET
Mon Oct 2 00:35:36 AEST 1989
Posting-number: Volume 8, Issue 63
Submitted-by: acliu%skat.usc.edu at usc.edu (Alejandro Liu)
Archive-name: smile
SMiLE -- Simple MIni Line Editor
--------------------------------
This program was originally intended to be used in a BBS program, but
I got lazy and didn't write the BBS. The idea of this program is to
provide a very easy to use and rather "powerful" Line Editor with very
little terminal support. This program was orginially written for a
Commodore 64, so it should be rather easy to port to other system.
This current version is a Unix BSD type system. (Actually Sun OS
4.0.?). I haven't tested if it compiles on other system, but It
SHOULD!
You can include this program in your programs as long as you give me
credit and send me a E-mail postcard! And you can hack it as much as
you like provide it you keep the copyright notice and redistribut it
unmodified (You can distribute your changes in a DIFF file though!)
Alejandro Liu <acliu at skat.usc.edu>
#!/bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #!/bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create the files:
# smile.c
# bsd_tty.h
# smile.h
# smile_main.c
# suntty.c
# Makefile
# README
# smile.man
# This archive created: Fri Sep 29 03:14:38 1989
export PATH; PATH=/bin:$PATH
echo shar: extracting "'smile.c'" '(10091 characters)'
if test -f 'smile.c'
then
echo shar: over-writing existing file "'smile.c'"
fi
sed 's/^X//' << \SHAR_EOF > 'smile.c'
X/* SMiLE -- Simple MIni Line Editor
X Copyright (C) 1989 By Alejandro Liu
X You are given permission to Freely Copy and distribute this program
X in its unmodifed form provided that this copyright notice is included.
X */
X
X#include "smile.h"
X#include "bsd_tty.h"
X#include <ctype.h>
X#include <stdio.h>
X#include <strings.h>
X
X#define TRUE 1
X#define FALSE 0
X#define TSTR 100
X
Xmakebar(width)
Xchar width;
X{
X int i;
X for (i = 0;i<width;i++) {
X if (i%8)
X prtchr('-');
X else
X prtchr('!');
X };
X if ((width-1)%8)
X prtchr('!');
X prtchr(NEWLIN);
X}
X
Xsmile_intro(width)
Xint width;
X{
X prtstr("\n");
X prtstr("SMiLE -- Simple MIni Line Editor (C) By Alejandro Liu Aug 1989\n");
X prtstr("Press ESC (CTRL+[) for menu. CTRL+X to exit SMiLE\n");
X prtstr(" ");
X makebar(width);
X}
X
Xint smile(head,wwrap,width)
Xed_line *head;
Xchar wwrap,width;
X{
X ed_line *current, *temp;
X char c_buf[TSTR], c_lin, c_col, key, i, j;
X extern char smile_menu();
X
X c_col = 0;
X c_lin = 1;
X current = head;
X smile_intro(width);
X pull(&c_col, c_buf, current);
X showlin(c_lin,c_buf,c_col);
X
X for (;;) {
X key = 127 & getkey();
X switch (key) {
X case PREV_L:
X if (c_lin-1) {
X c_lin--;
X push(c_buf,current);
X temp = current->previous;
X current = temp;
X if (current == NULL) current = head;
X pull(&c_col, c_buf, current);
X prtchr(NEWLIN);
X showlin(c_lin,c_buf, c_col);
X }
X else
X beep();
X break;
X case NEXT_L:
X if (current->next == NULL)
X beep();
X else {
X c_lin++;
X push(c_buf, current);
X temp = current->next;
X current = temp;
X pull(&c_col, c_buf, current);
X prtchr(NEWLIN);
X showlin(c_lin,c_buf,c_col);
X }
X break;
X case INSER_L:
X case INSERT_L:
X insertl(current);
X push(c_buf,current);
X temp = current->next;
X current = temp;
X current->len = 0;
X c_col = 0;
X c_lin++;
X c_buf[0] = 0;
X prtchr(NEWLIN);
X showlin(c_lin,c_buf,c_col);
X break;
X case LEFT_C:
X if (c_col) {
X c_col--;
X backspace(1);
X }
X else
X beep();
X break;
X case RIGHT_C:
X if (c_col == current->len)
X beep();
X else {
X putchar(c_buf[c_col]);
X c_col++;
X }
X break;
X case DEL_00:
X case DEL_01:
X case DEL_02:
X if (c_col) {
X if (c_col == current->len) {
X delete(1);
X c_buf[c_col--] = 0;
X (current->len)--;
X }
X else {
X delete(1);
X for (i = c_col; i<=current->len;i++) {
X c_buf[i-1] = c_buf[i];
X if (c_buf[i])
X prtchr(c_buf[i]);
X else
X prtchr(' ');
X }
X backspace((current->len) - c_col + 1);
X c_col--;
X current->len--;
X }
X }
X else
X beep();
X break;
X case KILL_L:
X if (c_col == current->len) {
X if (current->next) {
X char *mirage;
X temp = current->next;
X delete(c_col + 3);
X c_col = strlen(c_buf) + strlen(temp->data);
X mirage = (char *)malloc(c_col + 1);
X strcpy(mirage,c_buf);
X strcat(mirage,temp->data);
X current->next = temp->next;
X free(temp->data);
X free(temp);
X if (temp = current->next)
X temp->previous = current;
X if (c_col >= width) {
X c_col = width -1;
X mirage[c_col] = 0;
X }
X current->len = c_col;
X strcpy(c_buf,mirage);
X free(mirage);
X showlin(c_lin, c_buf, c_col);
X }
X else
X beep();
X }
X else {
X for (i=c_col;i<current->len;i++)
X prtchr(' ');
X backspace(current->len - c_col);
X c_buf[current->len = c_col] = 0;
X }
X break;
X case MSG_LST:
X push(c_buf,current);
X listmsg(width, head);
X showlin(c_lin, c_buf, c_col);
X break;
X case PREVIEW:
X push(c_buf,current);
X preview(width, head);
X showlin(c_lin, c_buf, c_col);
X break;
X case EXIT:
X push(c_buf, current);
X return(NORMAL_SAVE);
X case MENU:
X push(c_buf,current);
X if (i = smile_menu(head,FULL_MENU, &wwrap, &width, MENU))
X if ((i == NORMAL_SAVE) || (i == QUICK_SAVE) || (i == ABORT)) {
X push(c_buf,current);
X return(i);
X }
X showlin(c_lin,c_buf,c_col);
X break;
X case DOTKEY0:
X case DOTKEY1:
X if (c_col == 0) {
X push(c_buf,current);
X if (i = smile_menu(head,DOT_MENU, &wwrap, &width, key)) {
X switch (i) {
X case NORMAL_SAVE:
X case QUICK_SAVE:
X case ABORT:
X push(c_buf,current);
X return(i);
X case DOTKEY0:
X case DOTKEY1:
X insertc(c_buf, &c_col, &(current->len), i);
X delete(1);
X break;
X }
X }
X showlin(c_lin,c_buf,c_col);
X break;
X }
X default:
X if ((31<key)&&(key<127)) {
X if (c_col == width) {
X if (wwrap) {
X i = c_col;
X while (i&&(c_buf[i--]!=32));
X if (i) {
X if ((c_col-i-1)>0)
X delete(c_col-i-1);
X c_buf[++i] = 0;
X insertl(current);
X push(c_buf,current);
X current = current->next;
X c_lin++;
X push(&c_buf[i+1], current);
X pull(&c_col, c_buf, current);
X c_col = current->len;
X prtchr(NEWLIN);
X showlin(c_lin,c_buf,c_col);
X }
X else {
X insertl(current);
X push(c_buf, current);
X current = current->next;
X current->len = 0;
X c_col = 0;
X c_lin++;
X c_buf[0]= 0;
X prtchr(NEWLIN);
X showlin(c_lin,c_buf,c_col);
X }
X insertc(c_buf,&c_col, &(current->len),key);
X }
X else
X beep();
X }
X else
X insertc(c_buf, &c_col, &(current->len),key);
X }
X else
X beep();
X }
X }
X}
X
Xinsertc(buffer, col, len, key)
Xchar buffer[], *col, *len, key;
X{
X buffer[*col] = key;
X if ((*col)++ == (*len))
X buffer[++(*len)] = 0;
X prtchr(key);
X}
X
Xbackspace(rept)
Xchar rept;
X{
X while (rept--)
X prtchr(8);
X}
X
Xdelete(rept)
Xchar rept;
X{
X while (rept--) {
X prtchr(8);
X prtchr(' ');
X prtchr(8);
X }
X}
X
Xshowlin(line,buffer,column)
Xchar line, column, *buffer;
X{
X char leng;
X printf("%2d>",line);
X prtstr(buffer);
X leng = strlen(buffer);
X if (leng != column)
X backspace(leng-column);
X}
X
X
Xchar smile_menu(head,type, wrap, width, nkey)
Xed_line *head;
Xchar type, *wrap, *width, nkey;
X{
X char key, *jet;
X extern char *getstr();
X if (type == FULL_MENU) {
X prtstr("\nSMiLE -- Simple MIni Line Editor MENU (C) Aug 1989 Alejandro Liu\n\n");
X prtstr("S - Quick Save A - Abort Editor L - List Text V - Preview Text\n");
X prtstr("W - Wrd Wrp Toggle N - Screen Width H - Help Screen C - Check Spelling\n");
X prtstr("Command -->");
X }
X else
X prtstr("Command: ");
X key = getkey();
X if (isupper(key))
X key = tolower(key);
X switch(key) {
X case DOTSAV:
X prtstr("Save Message\n");
X return(QUICK_SAVE);
X case DOTHLP:
X smile_help(*wrap,*width);
X break;
X case DOTABT:
X prtstr("Abort Message\n");
X return(ABORT);
X case DOTLST:
X prtstr("List Message\n");
X listmsg(*width,head);
X break;
X case DOTPVW:
X prtstr("Preview Message\n");
X preview(*width,head);
X break;
X case DOTWRW:
X if (*wrap) {
X *wrap = FALSE;
X prtstr("Word Wrap Is Off\n");
X }
X else {
X *wrap = TRUE;
X prtstr("Word Wrap Is On\n");
X }
X break;
X case DOTFNY:
X prtstr("Funny Command\n");
X prtstr("A Funny thing happened to me on my way to the forum... \n");
X prtstr("I Got there! hahahaha\n");
X break;
X case DOTSPC:
X prtstr("Check Spelling\n");
X prtstr("SMiLE Spell Checker\n");
X prtstr("Sorry, the dictionary has been erased\n");
X break;
X case DOTCWD:
X prtstr("Max Col? --> ");
X jet = getstr();
X *width = atoi(jet);
X prtstr("\nScreen Width Set to = ");
X printf("%d",*width);
X prtchr(NEWLIN);
X break;
X default:
X if ((type != FULL_MENU)&&(nkey == key)) {
X delete(13);
X return(key);
X }
X else {
X beep();
X prtstr("Unrecognized Command\n");
X }
X }
X return(0);
X}
X
Xlistmsg(width,head)
Xchar width;
Xed_line *head;
X{
X char cnt = 1;
X prtstr("SMiLE File Lister\n ");
X makebar(width);
X while (head) {
X if (((2+cnt)%24)==0)
X pause();
X printf("%2d>",cnt++);
X prtstr(head->data);
X prtchr(NEWLIN);
X head = head->next;
X }
X prtchr(NEWLIN);
X}
X
Xpreview(width,head)
Xchar width;
Xed_line *head;
X{
X char cnt = 3;
X prtstr("SMiLE File Previewer\n");
X makebar(width);
X while (head) {
X if (((cnt++)%24)==0)
X pause();
X prtstr(head->data);
X prtchr(NEWLIN);
X head = head->next;
X }
X prtchr(NEWLIN);
X}
X
Xinsertl(ptr)
Xed_line *ptr;
X{
X ed_line *tmp, *tmp2, bogus;
X tmp = (ed_line *)malloc(sizeof(bogus));
X tmp->previous = ptr;
X tmp2 = tmp->next = ptr->next;
X ptr->next = tmp;
X if (tmp2)
X tmp2->previous = tmp;
X tmp->data = (char *)malloc(2);
X tmp->len = 0;
X *(tmp->data) = 0;
X}
X
Xpull(col,buf,cur)
Xchar *col, *buf;
Xed_line *cur;
X{
X strcpy(buf,cur->data);
X cur->len = strlen(buf);
X if (*col>(cur->len))
X *col = cur->len;
X}
X
Xpush(buf,cur)
Xchar *buf;
Xed_line *cur;
X{
X free(cur->data);
X cur->len = strlen(buf);
X cur->data = (char *)malloc((cur->len) + 1);
X strcpy(cur->data,buf);
X}
X
Xpause()
X{
X prtstr("* MORE *");
X beep();
X getkey();
X delete(8);
X}
SHAR_EOF
if test 10091 -ne "`wc -c 'smile.c'`"
then
echo shar: error transmitting "'smile.c'" '(should have been 10091 characters)'
fi
echo shar: extracting "'bsd_tty.h'" '(370 characters)'
if test -f 'bsd_tty.h'
then
echo shar: over-writing existing file "'bsd_tty.h'"
fi
sed 's/^X//' << \SHAR_EOF > 'bsd_tty.h'
X/* SMiLE -- Simple MIni Line Editor
X Copyright (C) 1989 By Alejandro Liu
X You are given permission to Freely Copy and distribute this program
X in its unmodifed form provided that this copyright notice is included.
X */
X
X#define prtchr(dta) putchar(dta)
X#define NEWLIN '\n'
X#define beep() prtchr(7)
X#define prtstr(string) printf(string)
X#define getkey() getchar()
SHAR_EOF
if test 370 -ne "`wc -c 'bsd_tty.h'`"
then
echo shar: error transmitting "'bsd_tty.h'" '(should have been 370 characters)'
fi
echo shar: extracting "'smile.h'" '(1175 characters)'
if test -f 'smile.h'
then
echo shar: over-writing existing file "'smile.h'"
fi
sed 's/^X//' << \SHAR_EOF > 'smile.h'
X/* SMiLE -- Simple MIni Line Editor
X Copyright (C) 1989 By Alejandro Liu
X You are given permission to Freely Copy and distribute this program
X in its unmodifed form provided that this copyright notice is included.
X */
X
X#define PREV_L 16
X#define NEXT_L 14
X#define INSER_L 13
X#define INSERT_L 10
X#define LEFT_C 2
X#define RIGHT_C 6
X#define DEL_00 8
X#define DEL_01 127
X#define DEL_02 20
X#define KILL_L 11
X#define MSG_LST 12
X#define PREVIEW 22
X#define EXIT 24
X#define MENU 27
X#define DOTKEY0 '.'
X#define DOTKEY1 '/'
X#define DOTSAV 's'
X#define DOTHLP 'h'
X#define DOTABT 'a'
X#define DOTLST 'l'
X#define DOTPVW 'v'
X#define DOTWRW 'w'
X#define DOTFNY 'f'
X#define DOTSPC 'c'
X#define DOTCWD 'n'
X
Xstruct ED_line {
X struct ED_line *previous;
X struct ED_line *next;
X char len;
X char *data;
X};
X
Xtypedef struct ED_line ed_line;
X
X#define FULL_MENU 0
X#define DOT_MENU 1
X
X#define NORMAL_SAVE 1
X#define QUICK_SAVE 2
X#define ABORT 3
SHAR_EOF
if test 1175 -ne "`wc -c 'smile.h'`"
then
echo shar: error transmitting "'smile.h'" '(should have been 1175 characters)'
fi
echo shar: extracting "'smile_main.c'" '(3320 characters)'
if test -f 'smile_main.c'
then
echo shar: over-writing existing file "'smile_main.c'"
fi
sed 's/^X//' << \SHAR_EOF > 'smile_main.c'
X/* SMiLE -- Simple MIni Line Editor
X Copyright (C) 1989 By Alejandro Liu
X You are given permission to Freely Copy and distribute this program
X in its unmodifed form provided that this copyright notice is included.
X */
X
X#include "bsd_tty.h"
X#include "smile.h"
X#include <stdio.h>
X
Xmain(argc,argv)
Xint argc;
Xchar *argv[];
X{
X int x;
X extern int smile();
X ed_line head, *basura;
X char width, tk[256];
X FILE *ants;
X
X init_tty();
X if ((argc < 2)||(argc > 3)) {
X fprintf(stderr, "Usage: %s file [line lenght]\n",argv[0]);
X restore_tty();
X exit(1);
X }
X width = 35;
X if (argc == 3)
X width = atoi(argv[2]);
X if ((ants = fopen(argv[1],"r")) == NULL) {
X head.previous = head.next = NULL;
X head.data = (char *)malloc(2);
X head.len = *(head.data) = 0;
X }
X else {
X head.previous = NULL;
X basura = &head;
X loop:
X if (fgets(tk, width, ants)) {
X basura->len = strlen(tk);
X tk[--(basura->len)] = 0;
X basura->data = (char *)malloc(basura->len + 1);
X strcpy(basura->data,tk);
X basura->next = (ed_line *)malloc(sizeof(head));
X (basura->next)->previous = basura;
X basura = basura->next;
X goto loop;
X }
X else {
X basura->next = NULL;
X basura->len = 0;
X basura->data = (char *)malloc(2);
X *(basura->data) = 0;
X }
X fclose(ants);
X }
X x = smile(&head, 1, width);
X if (x == ABORT) {
X prtstr("SMiLE Aborted... Changes Discarded\n");
X }
X else {
X prtstr("SMiLE saving File\n");
X if (ants = fopen(argv[1],"w")) {
X basura = &head;
X while (basura) {
X fprintf(ants,"%s\n",basura->data);
X basura = basura->next;
X }
X fclose(ants);
X }
X else
X fprintf(stderr,"%s: can not write to file %s\n",argv[0],argv[1]);
X }
X restore_tty();
X}
Xsmile_help(wwst,width)
Xchar wwst,width;
X{
X prtstr("SMiLE Help SubSystem\n\n");
X prtstr("Current Screen Width = ");
X printf("%2d",width);
X prtstr(" Word Wrap is ");
X if (wwst)
X prtstr("enabled\n");
X else
X prtstr("disabled\n");
X prtstr("SMiLE -- Simple MIni Line Editor\n\n");
X prtstr("This is a simple mini line editor, suitable for editing messages for mail\n");
X prtstr("or BBS posts. It has two integrated command sets for maximum compatibilty.\n");
X prtstr("First Command set is the SMiLE command set, that supports Easy Multi line\n");
X prtstr("editing with easy cursor control, and the other is a C-Net or Color BBS, dot\n");
X prtstr("command or slash command set.\n");
X prtstr("The Slash and Command Set of C-Net and Color BBS is not completely supported\n");
X prtstr("except for the most common commands.\n");
X pause();
X prtstr("The New SMiLE commands that allow all the powerful SMiLE features are:\n");
X prtstr("CTRL + N Next Line CTRL + P Previous Line\n");
X prtstr("CTRL + B Backward Char CTRL + F Forward Char\n");
X prtstr("CTRL + K Kill Line CTRL + L List The Text\n");
X prtstr("CTRL + A Previews Text CTRL + [ ESC Key, invokes SMiLE Menu\n");
X prtstr("Typing . or / at the beggining of a Line enters the QUICK Menu Mode. i.e.\n");
X prtstr("you will be prompted for a option from the SMiLE menu, but no menu will be\n");
X prtstr("displayed. (C-Net/Color BBS Compatibility command)\n");
X}
SHAR_EOF
if test 3320 -ne "`wc -c 'smile_main.c'`"
then
echo shar: error transmitting "'smile_main.c'" '(should have been 3320 characters)'
fi
echo shar: extracting "'suntty.c'" '(1864 characters)'
if test -f 'suntty.c'
then
echo shar: over-writing existing file "'suntty.c'"
fi
sed 's/^X//' << \SHAR_EOF > 'suntty.c'
X/* SMiLE -- Simple MIni Line Editor
X Copyright (C) 1989 By Alejandro Liu
X You are given permission to Freely Copy and distribute this program
X in its unmodifed form provided that this copyright notice is included.
X */
X
X#include <stdio.h>
X#include <sys/ioctl.h>
X#include "bsd_tty.h"
X#define DEL_00 127
X#define DEL_01 20
X#define DEL_02 8
X#define LEFT_C 2
X#define RIGHT_C 6
X#define DONE0 13
X#define DONE1 10
X
X#define STDIN 0
X#define STDOUT 1
X#define STDERR 2
X#define ERROR -1
X#define TSTR 300
X
Xstruct sgttyb old;
X
Xinit_tty()
X{
X struct sgttyb new;
X if (ioctl(STDIN, TIOCGETP, &old) == ERROR) {
X perror("Can not get Terminal parameters -- ioctl");
X exit(1);
X }
X new.sg_ospeed = old.sg_ospeed;
X new.sg_ispeed = old.sg_ispeed;
X new.sg_flags = ((old.sg_flags | CBREAK) & ~ECHO) & ~TANDEM;
X if (ioctl(STDIN, TIOCSETN, &new) == ERROR) {
X perror("Can not set Terminal Characteristics -- ioctl");
X exit(1);
X }
X}
X
Xrestore_tty()
X{
X if (ioctl(STDIN, TIOCSETN, &old) == ERROR) {
X perror("Can not restore Terminal Characteristics -- ioctl");
X exit(1);
X }
X}
X
Xchar *getstr()
X{
X char *tmp1, *tmp2;
X char key;
X
X tmp1 = tmp2 = (char *)malloc(TSTR);
X *(tmp1) = 0;
X for (;;) {
X key = 127 & getkey();
X switch (key) {
X case DEL_00:
X case DEL_01:
X case DEL_02:
X if (tmp1 == tmp2)
X beep();
X else {
X delete(1);
X *(--tmp1) = 0;
X }
X break;
X case LEFT_C:
X if (tmp1 == tmp2)
X beep();
X else {
X backspace(1);
X --tmp1;
X }
X break;
X case RIGHT_C:
X if (*tmp1)
X prtchr(*(tmp1++));
X else
X beep();
X break;
X case DONE0:
X case DONE1:
X key = strlen(tmp2) + 1;
X tmp1 = (char *)malloc(key);
X strcpy(tmp1,tmp2);
X free(tmp2);
X return(tmp1);
X default:
X if ((31<key)&&(key<127)) {
X if (!(*tmp1))
X *(tmp1+1) = 0;
X *(tmp1++) = key;
X prtchr(key);
X }
X else
X beep();
X }
X }
X}
SHAR_EOF
if test 1864 -ne "`wc -c 'suntty.c'`"
then
echo shar: error transmitting "'suntty.c'" '(should have been 1864 characters)'
fi
echo shar: extracting "'Makefile'" '(440 characters)'
if test -f 'Makefile'
then
echo shar: over-writing existing file "'Makefile'"
fi
sed 's/^X//' << \SHAR_EOF > 'Makefile'
X# Primitive Makefile. Not that great but helps!
X
Xsmile: smile.o smile_main.o suntty.o
X cc -O smile.o smile_main.o suntty.o -o smile
X
Xsmile.o: smile.c smile.h bsd_tty.h
X cc -c -O smile.c
X
Xsmile_main.o: smile_main.c smile.h
X cc -c -O smile_main.c
X
Xsuntty.o: suntty.c
X cc -c -O suntty.c
X
Xlint:
X lint smile.c smile_main.c suntty.c
X
Xshar:
X shar -c -p X smile.c bsd_tty.h smile.h smile_main.c suntty.c \
X Makefile README smile.man > smile.shar
X
SHAR_EOF
if test 440 -ne "`wc -c 'Makefile'`"
then
echo shar: error transmitting "'Makefile'" '(should have been 440 characters)'
fi
echo shar: extracting "'README'" '(869 characters)'
if test -f 'README'
then
echo shar: over-writing existing file "'README'"
fi
sed 's/^X//' << \SHAR_EOF > 'README'
XSMiLE -- Simple MIni Line Editor
X--------------------------------
X
XThis program was originally intended to be used in a BBS program, but
XI got lazy and didn't write the BBS. The idea of this program is to
Xprovide a very easy to use and rather "powerful" Line Editor with very
Xlittle terminal support. This program was orginially written for a
XCommodore 64, so it should be rather easy to port to other system.
XThis current version is a Unix BSD type system. (Actually Sun OS
X4.0.?). I haven't tested if it compiles on other system, but It
XSHOULD!
X
XYou can include this program in your programs as long as you give me
Xcredit and send me a E-mail postcard! And you can hack it as much as
Xyou like provide it you keep the copyright notice and redistribut it
Xunmodified (You can distribute your changes in a DIFF file though!)
X
X Alejandro Liu <acliu at skat.usc.edu>
X
SHAR_EOF
if test 869 -ne "`wc -c 'README'`"
then
echo shar: error transmitting "'README'" '(should have been 869 characters)'
fi
echo shar: extracting "'smile.man'" '(2090 characters)'
if test -f 'smile.man'
then
echo shar: over-writing existing file "'smile.man'"
fi
sed 's/^X//' << \SHAR_EOF > 'smile.man'
X.TH SMILE L
X.SH NAME
XSMiLE \- Simple MIni Line Editor
X.SH SYNTAX
X.B smile
X.I
Xfilename [screen width]
X.SH DESCRIPTION
XThis program is a very simple line editor that doesn't use the TermCap
Xor Curses library to do its editing. It provides "advanced" features
Xlike auto word wrap, and Full line editing. The main advantage of
X.I smile
Xis that it can be used in almost any CRT terminal, regardless of its
Xtype, as long as it supports the almost universal convention of using
X^H (ASCII 8) as non destructive backspace.
X.SH OPERATION
X.I smile
Xis entered from UNIX by typing the command line followed by a filename
Xand an optional Screen width. The default is specified during
Xcompilation time and varies from site to site.
X.PP
X.I smile
Xis advertised to be very easy to use, and it has a built in help (sort
Xof) that can be displayed any time. The commands to know are:
X.br
X.sp
X.nf
Xkey function
X--- --------
X^N Next Line
X^P Previous Line
X^F Forward Character
X^B Backward Character
X^K Kill line
X^A Previews text
X^L List Text
XESC SMILE menu
X.sp
X.fi
X.PP
XAlso,
X.I smile
Xsupports the use of "dot" or "slash" command that are very common on
Xsome BBS programs line editors. Basicly what they do is at the first
Xcolumn of any line if you press any of those keys you will be prompted
Xfor a menu option. Pressing "." or "/" again will put a "." or "/" in
Xthe text.
X.PP
XOptions in
X.I smile
Xmenu:
X.br
X.sp
X.nf
XOption function
X------ --------
X S Saves the file
X A Abort Editor and discards changes
X W Word Wrap Togle
X N New Screen Width
X H Help Screen
X C Check Spelling
X P Preview Text
X L List Text
X.sp
X.fi
X.SH AUTHOR
XAlejandro Liu
X.SH "SEE ALSO"
Xemacs(1), vi(1), ed(1)
X.SH BUGS
X.I Smile
Xdoesn't support terminals that don't use ^H as backspace. Also, the
Xprogram will perform strangely of terminals that the ^H performs a
Xdestructive backspace.
X.PP
XThe Spell checker doesn't work.
X.PP
X.I Smile
Xkeeps with the UNIX tradition of optimism by doing very little error
Xchecking!
X.PP
X.I Smile
Xwas originally written for the C-64 (Serious Bug here!) for use in a
XBBS program.
X.br
X
SHAR_EOF
echo shar: a missing newline was added to "'smile.man'"
if test 2090 -ne "`wc -c 'smile.man'`"
then
echo shar: error transmitting "'smile.man'" '(should have been 2090 characters)'
fi
# End of shell archive
exit 0
Alejandro Liu
acliu%skat at usc.edu acliu at skat.usc.edu
(Simple .signature, $CHEAP$)
More information about the Comp.sources.misc
mailing list