亚洲欧美第一页_禁久久精品乱码_粉嫩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;

#define APPEND   1     // insert after
#define INSERT   2     // insert before


///////////////////////////////////////////////////////////////////////
// 添加一行空行,mode指明了是在cp之前(INSERT)還是之后(APPEND)添加,如果出錯
// 則返回NULL
//
lineType* addNewLine(lineType *cp, int mode)
{
     lineType *tp;

     tp = (lineType *) malloc(sizeof(lineType));

     if (mode == APPEND)   // append after *cp
     {
          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;
     }
     else                  // Insert before *cp
     {
          tp->next = cp;
          if (cp != NULL)
          {
               if (cp->prev != NULL)
                    cp->prev->next = tp;
               else
                    BufferHead = tp;

               tp->prev = cp->prev;
               cp->prev = tp;
          }
          else
          {
               BufferHead = BufferTail = tp;
               tp->prev = NULL;
          }
     }

     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)
     {
////          printf("New File\n");
          BufferHead = BufferTail = NULL;

          return;
     }

     while ((c = fgetc(fp)) != EOF)
     {
          // add a new line to lineType link list
          if (genNewLine)
          {
               CurrentLinePtr = addNewLine(CurrentLinePtr, APPEND);
               CurrentLineNum++;
               genNewLine = 0;
          }

          // add char to clistType link list
          ccp = addCharToLine(ccp, c);
          charcount++;
          if (CurrentLinePtr->line == NULL)
               CurrentLinePtr->line = ccp;

          // check for new line condition
          if (c == '\n')
          {
               ccp = NULL;
               genNewLine = 1;
          }
     }

     fclose(fp);
////     printf("%d\n", charcount);
     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);
		//RecalcLineNum(CurrentLinePtr);
		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++)
    {
		// add a new line to lineType link list
		if (genNewLine)
		{
			CurrentLinePtr = addNewLine(CurrentLinePtr, APPEND);
			CurrentLineNum++;
			genNewLine = 0;
		}
		
		// add char to clistType link list
		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;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
五月激情丁香一区二区三区| 欧美日韩一二三| 欧美综合欧美视频| 午夜精品一区二区三区免费视频| 亚洲免费观看高清完整版在线观看| 99久久99久久综合| 亚洲综合色自拍一区| 欧美伦理电影网| 九色综合国产一区二区三区| 中文字幕精品一区| 91精品国产综合久久婷婷香蕉 | www.亚洲激情.com| 亚洲123区在线观看| 久久午夜色播影院免费高清 | 国产精品久久福利| 欧美日韩视频第一区| 欧美福利一区二区| 亚洲精品在线免费播放| 在线看国产一区二区| 欧美日韩亚洲综合| 久久精品免费在线观看| 欧美日韩国产精品成人| 色天使色偷偷av一区二区| 国产一区二区三区在线观看免费 | 欧美无乱码久久久免费午夜一区 | www.欧美色图| 欧美日韩www| 亚洲精品一区二区三区影院| 亚洲国产精品成人综合| 一片黄亚洲嫩模| 国产精品国产三级国产普通话蜜臀| 亚洲视频 欧洲视频| 中文字幕国产精品一区二区| 夜夜嗨av一区二区三区网页| 久久99九九99精品| 成人av免费网站| 国产白丝网站精品污在线入口| 日韩制服丝袜av| 亚洲成人综合网站| 国产精品一区二区免费不卡| 国产在线播放一区三区四| 色综合天天综合网国产成人综合天| 国产真实乱对白精彩久久| 久久精品99国产精品日本| 日韩精品电影在线观看| av在线综合网| xfplay精品久久| 亚洲成人免费看| 不卡视频在线观看| 精品毛片乱码1区2区3区| 欧美mv日韩mv国产网站app| 一区二区三区在线看| 国产乱淫av一区二区三区| 在线播放国产精品二区一二区四区| 久久久亚洲精品一区二区三区| ww久久中文字幕| 日韩激情中文字幕| 欧洲视频一区二区| 国产精品久久久久天堂| 久99久精品视频免费观看| 欧美日本视频在线| 亚洲精品视频自拍| 天堂久久一区二区三区| 在线观看一区日韩| 亚洲日本va午夜在线影院| 丁香网亚洲国际| 久久久精品国产免大香伊| 国产在线精品国自产拍免费| 日韩一区二区三区av| 久久久久久久久一| 精品在线免费观看| 精品国产乱码久久久久久图片| 日本亚洲欧美天堂免费| 国产精品影音先锋| 久久蜜桃一区二区| 国产曰批免费观看久久久| 色就色 综合激情| 欧美日韩国产在线观看| 国产一区二区精品久久91| 日韩一区二区在线播放| a在线欧美一区| 美女一区二区三区| 制服.丝袜.亚洲.中文.综合| 风间由美一区二区三区在线观看 | 91捆绑美女网站| 国产精品久久久久久久久久久免费看 | 欧美日韩在线观看一区二区| 免费不卡在线视频| 日韩视频在线永久播放| 色婷婷综合激情| 国产91精品精华液一区二区三区| 性做久久久久久久免费看| 国产精品欧美综合在线| 色综合色综合色综合色综合色综合 | 日韩欧美一区在线观看| 在线免费观看不卡av| 成人亚洲一区二区一| 亚洲视频网在线直播| 精品国产一区二区三区久久久蜜月| 欧美日韩一区 二区 三区 久久精品| 国产成人精品亚洲日本在线桃色| 国产欧美一区二区在线| 91啦中文在线观看| www.亚洲精品| 成人免费黄色在线| 国产成人啪午夜精品网站男同| 麻豆视频一区二区| 日本三级亚洲精品| 日韩中文字幕1| 偷拍日韩校园综合在线| 亚洲国产精品一区二区久久恐怖片| 日韩免费视频一区| zzijzzij亚洲日本少妇熟睡| 成人激情av网| 99久久99久久综合| 在线观看视频一区二区欧美日韩| 日本精品视频一区二区三区| 91小视频免费观看| 欧洲一区在线观看| 欧美日韩黄色影视| 在线播放一区二区三区| 欧美一区国产二区| 色综合色狠狠天天综合色| 91视视频在线观看入口直接观看www| 99精品国产热久久91蜜凸| 色女孩综合影院| 欧美日韩日日摸| 日韩欧美中文字幕公布| 精品国产一区二区三区久久久蜜月| 久久久久久日产精品| 国产精品九色蝌蚪自拍| 一区二区三区国产豹纹内裤在线| 亚洲高清久久久| 久久99国产精品久久99果冻传媒| 裸体健美xxxx欧美裸体表演| 国内外成人在线| 97久久精品人人做人人爽50路| 欧美网站大全在线观看| 日韩亚洲电影在线| 欧美国产日韩精品免费观看| 伊人色综合久久天天人手人婷| 五月天中文字幕一区二区| 久久成人麻豆午夜电影| 91小视频免费看| 日韩精品一区二| 中文字幕制服丝袜一区二区三区| 亚洲综合丁香婷婷六月香| 蜜臀av一级做a爰片久久| 99r精品视频| 日韩午夜在线观看视频| 国产精品传媒入口麻豆| 天堂久久久久va久久久久| 丁香婷婷深情五月亚洲| 欧美精品v国产精品v日韩精品 | 欧美精品九九99久久| 国产蜜臀av在线一区二区三区| 亚洲大片免费看| www.综合网.com| 欧美r级电影在线观看| 亚洲一区二区三区四区不卡| 国产精品一二三四区| 欧美人与禽zozo性伦| 国产精品乱人伦中文| 男女男精品视频网| 91丨porny丨户外露出| 国产亚洲污的网站| 亚洲午夜精品网| 成人免费视频免费观看| 91麻豆精品国产91| 亚洲免费观看高清| 国产成人亚洲综合色影视| 欧美高清视频一二三区| 中文在线一区二区| 精品一区二区三区在线播放| 欧美私人免费视频| 中文字幕一区在线| 亚洲一二三区在线观看| 国产成人免费在线视频| 精品国产sm最大网站| 捆绑变态av一区二区三区| 欧美日韩中字一区| 亚洲精品中文在线观看| 成人国产一区二区三区精品| 国产欧美一区二区精品性| 毛片基地黄久久久久久天堂| 欧美一区二区在线观看| 亚洲午夜电影网| 欧美在线观看一区| 亚洲一二三专区| 欧美亚洲精品一区| 亚洲精品午夜久久久| 色婷婷香蕉在线一区二区| 成人免费一区二区三区视频| 成人免费毛片高清视频| 欧美国产1区2区| 国产久卡久卡久卡久卡视频精品| 欧美mv日韩mv国产网站app| 精品午夜久久福利影院 | 在线观看日韩av先锋影音电影院| 中文字幕亚洲视频|