/*

body -- 入力の一部を切りとる

Copyright (c) 1993 Delmonta

*/

#include<stdio.h>
#include<stdlib.h>

typedef	char	bool;

unsigned long	sttlin = 1;		/* 開始行			*/
unsigned long	endlin = -1;		/* 終了行			*/
bool		ptlin = 0;		/* NZなら行番号を表示		*/
bool		ptsure = 0;		/* NZなら現在の行を表示		*/
unsigned long	lineno = 0;		/* 現在処理中の行番号		*/

void	addline(void)
{
	lineno++;

	if	(lineno==sttlin   && ptsure==0)
		ptsure=1;
	if	(lineno==endlin+1 && ptsure==1)
		ptsure=2;

	if	(ptsure==1 && ptlin==1)
		printf("%8ld:",lineno);
}

void	putfile(fp)
FILE	*fp;
{
	int	c;

	while( (c=getc(fp)) != EOF)
	{
		if	(ptsure==1)
			putchar(c);
		if	(c == '\n')
		{
			addline();
			if	(ptsure==2)
				return;
		}
	}

	putchar	('\n');
}

int	main(argc,argv)
int	argc;
char	*argv[];
{
	putchar	('\n');

	for	( ; (++argv)[0]!=NULL ;)
	{
		if	(argv[0][0] == '-')
		{
			switch(argv[0][1])
			{
			case 'S':
			case 's':
				sttlin = atol(&argv[0][2]);
				if	(sttlin < 1)
				{
					fprintf(stderr,"不正な行番号です.\n");
					exit(1);
				}
				break;

			case 'E':
			case 'e':
				endlin = atol(&argv[0][2]);
				if	(endlin<sttlin && endlin!=0)
				{
					fprintf(stderr,"終了行は開始行以上にしてください.\n");
					exit(1);
				}
				break;

			case 'L':
			case 'l':
				ptlin=1;
				break;

			default:
				fprintf(stderr,"不正なパラメータです. ---%s\n",argv[0]);
				exit(1);
			}
		}
		else
			break;
	}

	if	(argv[0]==NULL)
	{	addline();
		putfile(stdin);
	}
	else
	{
		for	( ; argv[0]!=NULL ; argv++)
		{
			FILE	*fp = fopen(argv[0],"r");
			if	(fp == NULL)
			{
				fprintf(stderr,"ファイル %s がオープンできません.\n",argv[0]);
				continue;
			}
			printf("%s\n",argv[0]);

			lineno = 0;
			ptsure = 0;
			addline();
			putfile(fp);
			fclose(fp);
		}
	}
}