#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define LINE_SIZE 256
#define CMD_SIZE 100
 
void execmd(FILE *temp_file, char *temp_cmd, int *p);
void display_all(FILE *temp_file);
void save_end(int *p);
 
int main(int argc, char *argv[]){
 
	FILE *txtfile;
	int start = 0;
	int coe = 1;//終了条件(Condition Of End)
	int *p_coe = &coe;        //coeへのポインタ
	char cmd[CMD_SIZE];            //コマンド
 
	//ファイルの引数を調べる。
	if(argc != 2){
		printf("引数にはファイルのパスを指定してください\n");
		exit(1);
	}
 
	//終了するまで無限ループ
	while(coe){
 
		//ファイルが開けるかどうかを調べる。
		if((txtfile = fopen(argv[1], "r")) == NULL){
			printf("ファイルを開くことが出来ません");
			exit(1);
		}
 
		//*を表示する
		if(start) printf("*");
		else{
			printf("ファイルを終わりまで読み込みました\n*");
			start++;
		}
 
		//コマンドを入力
		fgets(cmd, CMD_SIZE, stdin);
		execmd(txtfile, cmd, p_coe);
 
		//ファイルを閉じる
		fclose(txtfile);
	}
 
	return 0;
}
 
//機能はここに追加
void execmd(FILE *temp_file, char *temp_cmd, int *p){
 
	if(strcmp(temp_cmd, "l\n") == 0 || strcmp(temp_cmd, "L\n") == 0) display_all(temp_file);
	if(strcmp(temp_cmd, "e\n") == 0 || strcmp(temp_cmd, "E\n") == 0) save_end(p);
 
	return;
}
 
//以下は拡張した関数群
 
//すべての行を表示
void display_all(FILE *temp_file){
	char str[LINE_SIZE];
	int i = 1;
 
	while(!feof(temp_file)){
		if(fgets(str, LINE_SIZE - 1, temp_file) == NULL) strcpy(str, "\n");
		if(ferror(temp_file)){
			printf("ファイルエラー\n");
			break;
		}
 
		if(!feof(temp_file)) printf("%8d: %s", i, str);
		else{
			if(strcmp(str, "\n") != 0) printf("%8d: %s\n", i, str);
		}
		i++;
	}
 
	return;
}
 
//セーブして終了
void save_end(int *p){
 
	*p = 0;
 
	return;
}
最終更新:2007年06月21日 18:01