亚洲欧美第一页_禁久久精品乱码_粉嫩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久久亚洲一区二区三区青草| 亚洲妇女屁股眼交7| 日本欧美一区二区三区乱码| 九一久久久久久| 1024亚洲合集| 青青国产91久久久久久| 国产精品中文字幕日韩精品| 国产·精品毛片| 国产高清亚洲一区| 欧美日韩日日夜夜| 亚洲国产激情av| 亚洲亚洲精品在线观看| 国产精品一二三四区| 欧美视频在线一区二区三区| 国产欧美日产一区| 日韩精品亚洲专区| av电影在线不卡| 精品国产髙清在线看国产毛片| 国产精品午夜在线观看| 午夜精品久久久久久久久久| 久久99精品久久久久婷婷| 成人激情免费网站| 成人禁用看黄a在线| 97久久人人超碰| 久久嫩草精品久久久久| 亚洲一区二区精品视频| 成人福利视频网站| 欧美va在线播放| 日韩精品久久久久久| 色婷婷香蕉在线一区二区| 国产精品视频在线看| 美国毛片一区二区三区| 欧美色老头old∨ideo| 依依成人精品视频| 看片网站欧美日韩| 欧美精品日韩综合在线| 一区二区三区在线播| 国产一区在线不卡| 日韩欧美视频一区| 男女男精品视频网| 色视频欧美一区二区三区| 亚洲欧美一区二区在线观看| 国产成人免费视频一区| 欧美变态口味重另类| 美女视频黄久久| 日韩一级在线观看| 久久99精品国产.久久久久| 制服丝袜中文字幕一区| 视频一区二区三区中文字幕| 成人精品免费网站| 久久久久久久综合日本| 麻豆91免费观看| 精品视频免费看| 视频一区中文字幕| 欧美日韩大陆一区二区| 亚洲成av人在线观看| 色综合 综合色| 成人欧美一区二区三区黑人麻豆| 成人免费视频一区| 国产精品理伦片| 在线一区二区视频| 亚洲成人黄色小说| 日韩精品一区在线| 国产91精品一区二区麻豆网站 | 91精品欧美福利在线观看| 午夜精品国产更新| 欧美一区二区三区免费观看视频 | 久久综合色8888| 国产一区二区美女诱惑| 久久噜噜亚洲综合| av亚洲精华国产精华精华| 亚洲视频免费看| 欧美日韩久久不卡| 老司机精品视频在线| 欧美国产一区视频在线观看| aaa国产一区| 亚洲国产人成综合网站| 69堂国产成人免费视频| 国产麻豆精品久久一二三| 亚洲色图视频免费播放| 欧美高清性hdvideosex| 国产美女视频91| 亚洲精品自拍动漫在线| 欧美精品久久天天躁| 国产乱码精品一品二品| 亚洲小说欧美激情另类| 欧美一区二区三区成人| 成人精品视频.| 日本视频在线一区| 久久综合狠狠综合久久激情| 91丝袜高跟美女视频| 久久99精品久久只有精品| 亚洲欧美综合色| 日韩午夜精品视频| 91美女视频网站| 久草精品在线观看| 夜夜嗨av一区二区三区中文字幕| 91精品国产色综合久久| 99精品视频一区二区| 亚洲va欧美va天堂v国产综合| 欧美午夜精品一区二区三区 | 3d成人动漫网站| 午夜精品免费在线观看| 日韩免费观看高清完整版| 国产98色在线|日韩| 精品电影一区二区三区| 欧美日韩一区二区三区免费看| 国v精品久久久网| 五月天欧美精品| 亚洲欧美在线aaa| 久久久99精品久久| 日韩一区二区免费视频| 欧美日韩在线观看一区二区| 国产91精品在线观看| 精品一区二区免费看| 天使萌一区二区三区免费观看| 久久久久久久av麻豆果冻| 欧美一区二区三区四区久久| 欧美区在线观看| 97精品久久久午夜一区二区三区| 国产一区二区三区香蕉| 精品伊人久久久久7777人| 日韩激情在线观看| 首页国产欧美久久| 偷偷要91色婷婷| 亚洲自拍偷拍网站| 亚洲精品成a人| 国产精品毛片久久久久久久| 国产亚洲欧美一区在线观看| 久久天天做天天爱综合色| 日本高清不卡aⅴ免费网站| 99久久免费视频.com| 国产91精品入口| 东方欧美亚洲色图在线| 国产成人在线网站| 高清av一区二区| 豆国产96在线|亚洲| 成人sese在线| 国产91精品露脸国语对白| 成人教育av在线| 97精品久久久午夜一区二区三区| 国产精品正在播放| 成人午夜视频网站| 91麻豆高清视频| 欧美午夜不卡在线观看免费| 欧美日韩国产首页| 91香蕉视频在线| 欧美撒尿777hd撒尿| 欧美肥胖老妇做爰| 欧美午夜精品理论片a级按摩| 欧美老肥妇做.爰bbww视频| 欧美一二三四在线| 国产日韩成人精品| 亚洲精品第1页| 日本女人一区二区三区| 国产一区二区三区国产| 91亚洲精品久久久蜜桃| 91麻豆免费视频| 日韩一区二区三| 国产日韩欧美a| 亚洲国产欧美在线| 国精产品一区一区三区mba桃花| 久久99久久精品欧美| 成人av手机在线观看| 欧美日韩亚洲高清一区二区| 日韩免费福利电影在线观看| 中文字幕欧美激情一区| 亚洲丝袜制服诱惑| 日本欧美在线看| 成人app在线观看| 欧美久久高跟鞋激| 日韩欧美一卡二卡| 亚洲婷婷在线视频| 亚洲在线成人精品| 国产精品综合一区二区| 欧美三级电影网| 中文字幕精品一区| 日韩av二区在线播放| av欧美精品.com| 日韩欧美中文一区| www久久精品| 性做久久久久久免费观看| 国产99精品在线观看| 91精品国产综合久久久久久| 国产精品毛片久久久久久久| 一区二区高清视频在线观看| 久久国产尿小便嘘嘘尿| 在线观看一区二区精品视频| 国产午夜亚洲精品不卡| 亚洲一区二区三区四区五区中文 | 中文字幕五月欧美| 奇米色一区二区| 欧美在线免费观看亚洲| 中文字幕成人网| 久久99久久久久久久久久久| 欧美顶级少妇做爰| 亚洲综合免费观看高清完整版| 国产精品自产自拍| 在线免费不卡视频|