トップ 差分 一覧 Farm ソース 検索 ヘルプ PDF RSS ログイン

2001db1.c

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define MAXLINE  100
#define MAXWIDTH 50

int plen,cnum,width,cspace;
char table[MAXLINE][MAXWIDTH];

void cleartable(void);
void writetable(void);
void copytable(int line, int column, char buf[MAXWIDTH]);
void strcpy2(int start, int haba, char buf[MAXWIDTH], char buf2[MAXWIDTH]);

int main(void)
{
	char buf[MAXWIDTH];
	char buf2[MAXWIDTH];
	int i;
	int line, column, len;
	
	while(1){
		gets(buf);
		plen=atoi(buf);
		if(plen==0)
			break;
			
		gets(buf);
		cnum=atoi(buf);
		gets(buf);
		width=atoi(buf);
		gets(buf);
		cspace=atoi(buf);
		
//		printf("%d %d %d %d\n", plen,cnum,width,cspace);
		
		cleartable();
		
		line=0;
		column=0;
		
		while(1){
			gets(buf);
			len=strlen(buf);
//			printf("%8s len=%d ",buf, len);
			
			if(buf[0]=='?'){
//				printf("%c\n", buf[0]);
//				writetable();
				break;
			}
			
			if(len<=width){
//				printf("len<=width ");
				copytable(line,column,buf); 	// tableにbufを書き込む
				line++;
				if(line>plen){
					line=0;
					column++;
					if(column==cnum){
//						writetable();		// table全部出力
						cleartable();
						line=0;
						column=0;
					}
				}
			}else{
//				printf("len>width ");
				for(i=0; i<len/width; i++){
					strcpy2(i*width,width,buf,buf2); 	// i文字目からwidth文字分buf2にコピー
					copytable(line,column,buf2); 		// tableにbuf2を書き込む
					line++;
					if(line>plen){
						if(column==0){
							column=1;
							line=0;
						}else{
//							writetable();		// table全部出力
							cleartable();
							line=0;
							column=0;
						}
					}
				}
				if(len%width>0){ // コピーの残ったものがあったら
//					puts("amari");
					strcpy(buf2,"..................................................");
					strcpy2((len/width)*width,len%width,buf,buf2); // i文字目からwidth文字分buf2にコピー
					copytable(line,column,buf2); // tableにbuf2を書き込む
					line++;
					if(line>plen){
						if(column==0){
							column=1;
							line=0;
						}else{
//							writetable();	// table全部出力
							cleartable();
							line=0;
							column=0;
						}
					}
				}
			}
			
//			printf("line=%d column=%d\n", line, column);
			writetable();
			
		}
//		writetable();
	}
	return 0;
}

void cleartable(void)
{
	int x,y;
	
	for(y=0; y<MAXLINE; y++){
		for(x=0; x<MAXWIDTH; x++){
			table[x][y]='.';
		}
	}
}

void writetable(void)
{
	int x,y;
	
	for(y=0; y<plen; y++){
		for(x=0; x<width*2+cspace; x++){
			printf("%c",table[x][y]);
		}
		printf("\n");
	}
	printf("#\n");
}

void copytable(int line, int column, char buf[MAXWIDTH])
{
	int i;
	int len=strlen(buf);
	
	for(i=0; i<len; i++){
		table[column*width+column*cspace+i][line]=buf[i];
	}
}

void strcpy2(int start, int haba, char buf[MAXWIDTH], char buf2[MAXWIDTH])
{
	int x;
	
	for(x=0; x<haba; x++){
		buf2[x]=buf[start+x];
	}
}