亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? myedlin.c

?? 一個小的行編譯器程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <conio.h>

typedef struct clistTag
{
     char  c;
     struct clistTag *next, *prev;

} clistType;

typedef struct lineTag
{
     clistType *line;
     struct lineTag *next, *prev;

} lineType;

char        Currentfname[BUFSIZ];
lineType   *BufferHead = NULL;
lineType   *BufferTail = NULL;
lineType   *CurrentLinePtr = NULL;
int         CurrentLineNum = 0;
int         LastLineNum = 0;
char		CmdStr[128];
char		ParaArray[5][128];
int			ParaCount;

///////////////////////////////////////////////////////////////////////
// 在內存中指定的指針cp指向的行之后添加一行新空行,出錯則返回NULL
//
lineType* addNewLine(lineType *cp)
{
	lineType *tp;
	
	tp = (lineType *) malloc(sizeof(lineType));
	
	if (cp != NULL)
	{
		tp->next = cp->next;
		tp->prev = cp;
		tp->line = NULL;
		
		if (cp->next != NULL)
			cp->next->prev = tp;
		else
			BufferTail = tp;
		
		cp->next = tp;
	}
	else
	{
		tp->next = NULL;
		
		tp->prev = NULL;
		tp->line = NULL;
		
		BufferHead = tp;
	}
	
	tp->prev = cp;
	
	return tp;
}


///////////////////////////////////////////////////////////////////////////////
// 添加一個字符到鏈表中去
//
clistType * addCharToLine(clistType *cp, char c)
{
     clistType *tp;

     tp = (clistType *) malloc(sizeof(clistType));
     tp->next = NULL;
     tp->prev = cp;
     tp->c = c;
     if (cp != NULL)
          cp->next = tp;
     
     return tp;
}


///////////////////////////////////////////////////////////////////////////////
// 把文件的內容讀到內存中來.
//
void ReadFile(void)
{
     FILE *fp;
     char c;
     int genNewLine = 1, charcount = 0;
     clistType *ccp = NULL;

     CurrentLineNum = 0;
     CurrentLinePtr = NULL;

     if ((fp = fopen(Currentfname, "r")) == NULL)
     {
          BufferHead = BufferTail = NULL;

          return;
     }

     while ((c = fgetc(fp)) != EOF)
     {
          // 添加一行新行到lineType鏈表
          if (genNewLine)
          {
               CurrentLinePtr = addNewLine(CurrentLinePtr);
               CurrentLineNum++;
               genNewLine = 0;
          }

          // 添加一個字符到clistType鏈表
          ccp = addCharToLine(ccp, c);
          charcount++;
          if (CurrentLinePtr->line == NULL)
               CurrentLinePtr->line = ccp;

          // 檢測換行標志
          if (c == '\n')
          {
               ccp = NULL;
               genNewLine = 1;
          }
     }

     fclose(fp);
     LastLineNum = CurrentLineNum;
     BufferTail = CurrentLinePtr;
}


///////////////////////////////////////////////////////////////////////////
// 將p指定的字符鏈表的內容輸出到文件或屏幕(stdout)
//
int Println(FILE *fp, clistType *p, int linenum)
{
     int charcount = 0;
     int nlFound = 0;

     if (linenum)
          fprintf(fp, "%6d: ", linenum);

     while (p != NULL)
     {
          fprintf(fp, "%c", p->c);
          nlFound = p->c == '\n' ? 1 : 0;
          p = p->next;
          charcount++;
     }

//     if (nlFound == 0 && fp == stdout)
	 if (nlFound == 0)
          fprintf(fp, "\n");

     return charcount;
}


////////////////////////////////////////////////////////////////////
// 把內存中的內容寫到文件
//
int WriteFile(char *filename)
{
     char *fname;
     int  charcount = 0;
     FILE *fp;
     lineType *lp = BufferHead;

     fname = (filename == NULL) ? Currentfname : filename;

     if ((fp = fopen(fname, "w")) == NULL)
     {
          fprintf(stdout, "Unable to write to file %s\n", fname);
          return -1;
     }

     while (lp != NULL)
     {
          charcount += Println(fp, lp->line, 0);
          lp = lp->next;
     }

////     printf("Wrote %d\n", charcount);
     return charcount;
}



/////////////////////////////////////////////////////////////////////////
// 根據三種基準和偏移量在內存中定位到具體的一行為當前行
//
int SeekPos(int offset, int origin)
{
     lineType *p;
     int line, lineno;

     switch (origin)
     {
     default:
     case SEEK_SET:
          p = BufferHead;
          line = offset;                   // only positive offsets
          lineno = 1;
          break;

     case SEEK_CUR:
          p = CurrentLinePtr;
          line = CurrentLineNum + offset;  // +- offsets
          lineno = CurrentLineNum;
          break;

     case SEEK_END:
          p = BufferTail;
          line = LastLineNum - offset;     // only positive offsets
          lineno = LastLineNum;
          break;
     }

     if (line > 0 && line <= LastLineNum)
     {
          while (p != NULL)
          {
               if (lineno == line)
               {
                    CurrentLineNum = lineno;
                    CurrentLinePtr = p;

                    return lineno;
               }
               
               switch (origin)
               {
               default:
               case SEEK_SET:
                    p = p->next;
                    lineno++;

                    break;

               case SEEK_CUR:
                    if (offset < 0)
                    {
                         p = p->prev;
                         lineno--;
                    }
                    else
                    {
                         p = p->next;
                         lineno++;
                    }

                    break;

               case SEEK_END:
                    p = p->prev;
                    lineno--;

                    break;
               }
          }
     }

     return 0;
}

///////////////////////////////////////////////////////////////////
// 從內存中刪除指定的行
//
int DeleteLine(int lineno)
{
	SeekPos(lineno,SEEK_SET);

	if (CurrentLinePtr != NULL)
	{
		clistType *tcp, *cp = CurrentLinePtr->line;
		lineType *lp;
		
		while (cp != NULL)    // free each char in line
		{
			tcp = cp->next;
			free(cp);
			cp = tcp;
		}
		
		if (CurrentLinePtr->prev != NULL)
			CurrentLinePtr->prev->next = CurrentLinePtr->next;
		if (CurrentLinePtr->next != NULL)
			CurrentLinePtr->next->prev = CurrentLinePtr->prev;
		
		lp = CurrentLinePtr;
		if (CurrentLinePtr->next != NULL)
		{
			// guard against deleting first line
			if (CurrentLinePtr == BufferHead)
				BufferHead = CurrentLinePtr->next;
			
			CurrentLinePtr = CurrentLinePtr->next;
		}
		else
		{
			CurrentLinePtr = CurrentLinePtr->prev;
			BufferTail = CurrentLinePtr;
			if (BufferTail == NULL)   // check for last line == head
				BufferHead = NULL;
		}
		
		free(lp);

		//重新計算行號
		if (CurrentLineNum == LastLineNum)
		{
			CurrentLineNum--;
			LastLineNum--;
		}
		else
		{
			LastLineNum--;
		}
		
		return 1;
	}
	
	return 0;
}

/////////////////////////////////////////////////////////////////////////
//  在第line_no行之后插入一行文本,line_no為行號
//
void sc_I(int line_no)
{
	char str[128];
	int i;
	clistType *ccp = NULL;
	int genNewLine = 1;

	SeekPos(line_no, SEEK_SET); // 定位于line_no行

	gets(str);

    for(i=0;str[i]!='\0';i++)
    {
		if (genNewLine)
		{
			CurrentLinePtr = addNewLine(CurrentLinePtr);
			CurrentLineNum++;
			genNewLine = 0;
		}
		
		ccp = addCharToLine(ccp, str[i]);
		if (CurrentLinePtr->line == NULL)
		{
			CurrentLinePtr->line = ccp;
		}
	}
	
	if (line_no == LastLineNum)
	{
		LastLineNum = CurrentLineNum;
		BufferTail = CurrentLinePtr;
	}
	else
	{
		LastLineNum++;
	}
}

/////////////////////////////////////////////////////////////////////////
//  刪除start_line_no行與end_line_no行之間的文本
//
void sc_D(int start_line_no, int end_line_no)
{
	int line = end_line_no-start_line_no;
	int i;
	for (i=0; i<=line; i++)
	{
		DeleteLine(start_line_no);
	}
}

/////////////////////////////////////////////////////////////////////////
//  顯示start_line_no行與end_line_no行之間的文本
//
void sc_L(int start_line_no, int end_line_no)
{
	int i;
	if (start_line_no==CurrentLineNum && end_line_no==CurrentLineNum)
	{
		Println(stdout, CurrentLinePtr->line, CurrentLineNum);
	}
	else
	{
		for (i=start_line_no; i<=end_line_no; i++)
		{
			SeekPos(i, SEEK_SET);
			Println(stdout, CurrentLinePtr->line, CurrentLineNum);
		}
	}
}

/////////////////////////////////////////////////////////////////////////
//  搜索指定的文本
//
int sc_S(int startln, int endln, char* schtext)
{
	clistType *cp;
	char current_line_text[255];
	char *result;
	int i;
	int lineno;
	if (startln==CurrentLineNum && endln==CurrentLineNum)
	{
		cp = CurrentLinePtr->line;
		for(i=0; i<255; i++)
		{
			if (cp != NULL)
			{
				current_line_text[i] = cp->c;
				cp = cp->next;
			}
			else
			{
				break;
			}
		}
		if (i==255 && cp==NULL)
		{
			printf("Error! The number of character exceeds 255!\n");
			return 0;
		}
		result = strstr(current_line_text, schtext);
		if (result)
		{
			Println(stdout, CurrentLinePtr->line, CurrentLineNum);
			return (result-current_line_text+1);
		}
	}
	else
	{
		for (lineno=startln; lineno<=endln; lineno++)
		{
			SeekPos(lineno, SEEK_SET);
			cp = CurrentLinePtr->line;
			for(i=0; i<255; i++)
			{
				if (cp != NULL)
				{
					current_line_text[i] = cp->c;
					cp = cp->next;
				}
				else
				{
					break;
				}
			}
			if (i==255 && cp==NULL)
			{
				printf("Error! The number of character exceeds 255!\n");
				return 0;
			}
			result = strstr(current_line_text, schtext);
			if (result)
			{
				Println(stdout, CurrentLinePtr->line, CurrentLineNum);
				return (result-current_line_text+1);
			}
		}
	}

	printf("%s not found!\n", schtext);
	return 0;
}

////////////////////////////////////////////////////////////////////////////
// 復制文本行
//
int sc_C(int startln, int endln, int toln)
{
	clistType *cp;
	clistType *ccp = NULL;
	int line;
	int genNewLine;
	int copy_behind=toln>endln?1:0;

	if (startln==CurrentLineNum && endln==CurrentLineNum)
	{
		cp = CurrentLinePtr->line;

		for(genNewLine=1; cp!=NULL; cp=cp->next)
		{
			// add a new line to lineType link list
			if (genNewLine)
			{
				SeekPos(toln, SEEK_SET);
				CurrentLinePtr = addNewLine(CurrentLinePtr);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久成人免费日本黄色| 一区二区三区在线视频观看58 | 亚洲一二三四在线观看| 国产精品看片你懂得| 国产精品国产三级国产专播品爱网| 日韩三级在线观看| 亚洲少妇最新在线视频| 亚洲另类中文字| 亚洲午夜免费福利视频| 丝袜美腿亚洲一区| 精品亚洲欧美一区| 欧美日韩大陆一区二区| 欧美日韩视频第一区| 国产精品剧情在线亚洲| 精品一区精品二区高清| 69堂国产成人免费视频| 亚洲精品视频在线| 99久久久国产精品免费蜜臀| 91视频免费看| 欧美在线啊v一区| 亚洲欧美在线视频| 成人免费精品视频| 亚洲国产高清aⅴ视频| 国模一区二区三区白浆| 成人久久视频在线观看| 91麻豆精品秘密| 欧美日韩情趣电影| 亚洲国产精品久久不卡毛片| 日韩精品国产精品| 国产+成+人+亚洲欧洲自线| 92精品国产成人观看免费| 国产精品欧美一区喷水| 夜夜精品视频一区二区| 久久99热99| 日韩精品一区二区三区中文精品| 国产精品日日摸夜夜摸av| 亚洲精品欧美激情| 91九色02白丝porn| 亚洲欧美区自拍先锋| 国产在线乱码一区二区三区| 精品播放一区二区| 国产99精品国产| 91麻豆精品国产91久久久久久久久| 久久久99精品久久| 成人国产精品视频| 一区二区三区四区国产精品| 国产麻豆精品在线| 国产精品全国免费观看高清| 色综合久久天天| 亚洲成人免费在线| 久久先锋影音av鲁色资源网| 成人黄色片在线观看| 日韩久久久久久| 国产91在线看| 精品国产一区二区亚洲人成毛片| 亚洲精品久久7777| 欧美一个色资源| 国产精品538一区二区在线| 欧美精品三级日韩久久| 亚洲黄色av一区| 日韩一级大片在线观看| 丰满白嫩尤物一区二区| 精品久久久久久综合日本欧美| 国产成人午夜视频| 亚洲v日本v欧美v久久精品| 一本一本大道香蕉久在线精品 | 秋霞影院一区二区| 中文字幕高清不卡| 91精品国产手机| 亚洲制服丝袜一区| 91国偷自产一区二区使用方法| 日韩精彩视频在线观看| 欧美激情综合网| 欧美日韩成人综合| 五月婷婷色综合| 中文字幕不卡的av| 欧美一级一级性生活免费录像| 日韩国产欧美三级| 欧美日韩二区三区| 视频一区国产视频| 自拍偷拍亚洲激情| 精品国产乱码久久久久久浪潮 | 欧美一二三在线| 91丨porny丨首页| 亚洲男人的天堂在线aⅴ视频| 高清不卡在线观看av| 国产欧美一区二区精品婷婷| 欧美日本一区二区三区| 成人黄色小视频在线观看| 欧美激情一区不卡| 精品不卡在线视频| 91精品在线一区二区| 91啪亚洲精品| 99视频一区二区| 国产91综合一区在线观看| 久久99精品国产91久久来源| 亚洲一级二级三级在线免费观看| 国产精品久久久久一区二区三区共 | 蜜桃一区二区三区四区| 555www色欧美视频| 欧美三级韩国三级日本一级| 青青国产91久久久久久| xf在线a精品一区二区视频网站| 国产精一区二区三区| 日韩电影在线一区二区| 久久色视频免费观看| 不卡一区在线观看| 亚洲成人自拍一区| 亚洲精品老司机| 在线不卡一区二区| 国产精品亚洲人在线观看| 日韩av电影天堂| 国产精品不卡在线| 中文字幕在线不卡| 亚洲女爱视频在线| 一区二区国产盗摄色噜噜| 一区二区三区视频在线观看| 日韩视频免费观看高清完整版 | 国产精品一二二区| 懂色av一区二区三区免费观看 | 青娱乐精品在线视频| 国产嫩草影院久久久久| 欧美日韩国产经典色站一区二区三区 | 欧美日韩中文一区| 欧美日韩一区视频| 成人午夜激情在线| 日韩av电影一区| 狠狠色2019综合网| 午夜伦欧美伦电影理论片| 视频在线观看一区二区三区| 日本一区二区电影| 亚洲欧美电影院| 日韩高清欧美激情| 国产麻豆91精品| 99热99精品| 欧美精品123区| 欧美电影免费观看高清完整版 | 亚洲精品乱码久久久久久日本蜜臀| 亚洲欧美欧美一区二区三区| 亚洲国产美女搞黄色| 日韩精品午夜视频| 国产91在线|亚洲| 欧美三级韩国三级日本三斤| 日韩欧美黄色影院| 制服丝袜日韩国产| 久久久久免费观看| 亚洲综合激情另类小说区| 免费成人结看片| 91丨porny丨中文| 日韩欧美国产电影| 欧美一区二区三区精品| 欧美日韩五月天| 国产女同互慰高潮91漫画| 亚洲一区二区成人在线观看| 国产一区二区三区四区五区入口| 成人免费av在线| 8x8x8国产精品| 中文字幕亚洲区| 久草热8精品视频在线观看| 日韩精品色哟哟| 日本在线播放一区二区三区| 水野朝阳av一区二区三区| 亚洲国产精品久久人人爱蜜臀 | 青青草原综合久久大伊人精品优势| 亚洲一区二区三区国产| 国产精品影音先锋| 欧美精品黑人性xxxx| 国产精品久久久久久久久免费樱桃 | 激情欧美一区二区| 欧美精品日韩精品| 亚洲日本中文字幕区| 国产精品国产三级国产普通话三级| 国产精品水嫩水嫩| 国产精品成人一区二区三区夜夜夜| 欧美国产一区二区在线观看| 日韩av一级片| 欧美午夜精品一区二区三区| 国产精品久久影院| 国产精品1区2区| 欧美白人最猛性xxxxx69交| 五月激情六月综合| 日本黄色一区二区| 亚洲欧美国产毛片在线| 成人av在线观| 欧美三级视频在线观看| 91精品国产色综合久久ai换脸 | 欧美色图激情小说| 日韩一级完整毛片| 国产日韩欧美a| 韩国女主播成人在线| 99精品久久只有精品| 国产精品女同互慰在线看| 国产精品99久久久久久宅男| 一本久久a久久免费精品不卡| 国产视频不卡一区| 国产一区二区三区精品欧美日韩一区二区三区 | 国产午夜精品理论片a级大结局 | 色偷偷久久一区二区三区| 国产精品全国免费观看高清| 国产精品综合一区二区三区|