--- main.c.orig Fri Jan 26 21:31:22 2001 +++ main.c Fri Dec 15 01:11:42 2006 @@ -49,11 +49,17 @@ * * 4.0 Petri Kutvonen, 1-Sep-91 * - * 4.0 convert from Linux source code to FreeBSD. - * Added tabmask change option. (-T) tabsize 8 to 4. - * Added automatic .c file setup cmode. like OS-9 uEMacs. - * Tadashi Yumoto, 27-Jan-01 + * 4.0 convert from Linux source code to FreeBSD. + * Added tabmask change option. (-T) tabsize 8 to 4. + * Added automatic .c file setup cmode. like OS-9 uEMacs. + * Tadashi Yumoto, 27-Jan-01 + * 4.0.17 added file access permission test in file.c. + * Tadashi Yumoto, 14-Apr-01 * + * modified -t option for -t4 or -t or -t8 supported. + * fixed bug in eval.c not set "tabsize". + * added help message. + * Tadashi Yumoto 30-Dec-01 */ #include @@ -89,6 +95,19 @@ #include #endif +static int prtuse(char*); + +#if UNIX +static void emergencyexit(); +#ifdef SIGWINCH +extern void sizesignal(); +#endif +#endif + +#if defined(TOYCODE) && defined(BSD) +#include +#include +#endif #if CALLED emacs(argc, argv) #else @@ -131,13 +150,6 @@ int sink; /* for file name scan */ #endif -#if UNIX - static void emergencyexit(); -#ifdef SIGWINCH - extern void sizesignal(); -#endif -#endif - #if PKCODE & VMS (void) umask(-1); /* use old protection (this is at wrong place) */ #endif @@ -225,9 +237,21 @@ #if TOYCODE case 't': /* -t for tabmask change */ case 'T': - tabmask = 0x03; - tabsize = 4; - break; + case 'x': + case 'X': + if ( argv[carg][2] == '4' || argv[carg][2] == NULL ) { + tabsize = 4; + tabmask = 0x03; + } else if ( argv[carg][2] == '8' ) { + tabmask = 0x07; + } + break; + case 'h': case 'H': case '?': + TTclose(); + TTkclose(); + vttidy(); + prtuse(argv[0]); + exit(0); #endif default: /* unknown switch */ /* ignore this for now */ @@ -273,7 +297,11 @@ sink = strlen(argv[carg]); if (sink >= 2 && (argv[carg][sink-2] == '.' && (argv[carg][sink-1] == 'c' || argv[carg][sink-1] == 'h'))) - bp->b_mode |= MDCMOD; + bp->b_mode |= gmode | MDCMOD; + /* for C++ */ + if (sink >= 3 && (argv[carg][sink-3] == '.' && + (argv[carg][sink-2] == 'c' && argv[carg][sink-1] == 'c'))) + bp->b_mode |= gmode | MDCMOD; #endif } } @@ -769,7 +797,7 @@ ALWAYS null terminate */ -char *strncpy(dst, src, maxlen) +char *mystrncpy(dst, src, maxlen) char *dst; /* destination of copied string */ char *src; /* source */ @@ -913,5 +941,44 @@ #undef exit exit(status); #endif +} +#endif + +#if TOYCODE +static char *helpmsg[] = { + "Description:\n", + " Light-weight full screen editor.\n", +#if PKCODE + " use termcap but,\n", + " em recognizes the size of the screen dynamically.\n", +#endif + "\n", + "Options: upper/lower case handling same way.\n", + " -a ... process error file.\n", + " -e ... edit file.\n", + " -g ... initial goto line .\n", +#if PKCODE + " +g ... initial goto line .\n", +#endif +#if CRYPT + " -k ... cryption.\n", +#endif +#if PKCODE + " -n ... accept null chars.\n", +#endif + " -r ... restrictive use.\n", + " -s ... initial serarch string.\n", + " -v ... view file.\n", + " -t<4/8> ... force tab width change to 4/8.\n", +}; + +static int prtuse(pname) +char *pname; +{ + char **p = helpmsg, + **e = helpmsg + (sizeof (helpmsg) / (sizeof (char **))); + + fprintf(stderr,"Syntax: %s {[] file ...}\n",pname); + while ( p < e ) fputs(*p++,stderr); } #endif