導航:首頁 > 源碼編譯 > 行文本編譯器設計與實現

行文本編譯器設計與實現

發布時間:2023-08-08 21:07:32

⑴ 如何用java編寫一個簡單的文本編輯器

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;

public class f1 extends Frame implements ActionListener
{
private MenuBar menubar=new MenuBar();
private Menu filemenu=new Menu("文件");
private Menu editmenu=new Menu("編輯");
private Menu formmenu=new Menu("格式");
private MenuItem[] itemf=new MenuItem[4];
private MenuItem[] iteme=new MenuItem[6];
private MenuItem[] items=new MenuItem[2];
private TextArea tf=new TextArea();

public int a=0,b=0,c=0,style=Font.PLAIN,size=15;
public String s1="red:"+a+" "+"green:"+b+" "+"blue"+c,
s2="宋體";

public String[] sz1={"10","16","24","30","32","36"},
sz2={"宋體","黑體","幼圓","隸書","行楷","Arial","Georgia"},
sz3={"粗體","傾斜","常規","粗斜"};

JDialog dialog=new JDialog(this,"字體",true);
Container cp=dialog.getContentPane();
JLabel[] lb=new JLabel[8];
JLabel lb1=new JLabel(s1,JLabel.LEFT);
JButton b1=new JButton("確定"),
b2=new JButton("取消");
JComboBox jc1=new JComboBox(),
jc2=new JComboBox(),
jc3=new JComboBox();
JScrollBar jb1=new JScrollBar(JScrollBar.HORIZONTAL,10,5,0,260);
JScrollBar jb2=new JScrollBar(JScrollBar.HORIZONTAL,10,5,0,260);
JScrollBar jb3=new JScrollBar(JScrollBar.HORIZONTAL,10,5,0,260);

⑵ 簡單的實現一個富文本編輯器

使用過 office 文檔的同學一定知道他的便捷,不僅可以很好的編輯文檔,還可以賦予它一定的格式、段落、縮進,還可以使用圖片等等。

如果我們在 web 上也想要實現這樣的效果,那麼我們應該怎麼做呢?

我們可以在網上找到已經封裝好的插件,例如:draft 或者 pell,這些插件都是開箱即用的,也可以在此之上進行封裝。

當然,我們也可以選擇自己封裝一個我們需要的插件。

那怎麼才能實現一個富文本編輯器呢?

我們可以選擇 document.execCommand 來實現一個簡易的富文本編輯器。

下面先來看下 document.execCommand 語法:

我們分別看看參數的含義:

既然知道了語法,那我們現在封裝一個執行函數用來執行指令:

接下來,我們來做下工具欄的設計和封裝。

假設工具欄有很多格式化的按鈕,當我們點擊的時候所選擇的區域的文字會做相應改變,按鈕既有顯示的樣式,還有執行功能的方法,可以使用對象來表示,所有按鈕屬性的集合形成了工具欄。

我們使用 actions 作為工具欄按鈕的集合,即:

現在,我們來講解下欄位:

我們已經完成了工具欄的部分,現在我們實現下完整的頁面和編輯區域吧!

首先創建富文本容器,在容器內分別放置工具欄和編輯區域:

我們最後來看一下實現的效果吧:

應用效果怎麼樣呢?我們看下面:

我們已經簡單的實現了一個富文本編輯器,但是這個編輯器還有很大的空間等待我們去優化,比如:點擊工具欄閃爍的問題,更多的功能等。

⑶ 如何用C#編寫文本編輯器

首先,打開你的開發工具Microsoft visual studio 2005。文件——》新建項目——》項目類型選擇visualc#,模板選擇windows 應用程序,到此我們已經創建好一個window窗體了!

接著修改窗體的屬性,窗體名字修改為EditorForm,窗體的text屬性修改為你要的命名。在工具箱了選擇MenuStrip控制項如圖,把菜單拖到窗體去!

usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Text;
usingSystem.Windows.Forms;

namespaceSimpleEditor
{
publicpartialclassEditorForm:Form
{
stringpath=null;

stringisSaved="n";

intinitLenglt=0;

publicEditorForm(stringpath)
{
this.path=path;

InitializeComponent();
}

privatevoid新建NToolStripMenuItem_Click(objectsender,EventArgse)
{

if(this.richTextBox1.TextLength>0&&(isSaved.Equals("n")))
{

if(MessageBox.Show("文件沒有保存是否新建文件?","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Warning)==DialogResult.Yes)
{
this.richTextBox1.Clear();
this.Text="簡單的編輯器";
this.initLenglt=richTextBox1.TextLength;
}

}

else
{
this.richTextBox1.Clear();
this.Text="簡單的編輯器";
this.initLenglt=richTextBox1.TextLength;
}
}

privatevoid打開OToolStripMenuItem_Click(objectsender,EventArgse)
{
//確定用戶選擇了文件
if(this.openFileDialog.ShowDialog()==DialogResult.OK)
{
//得到用戶選擇的文件路徑和文件名
path=this.openFileDialog.FileName;

//讀取文件內容

this.OpenFile();

}

}


privatevoidOpenFile()
{
try
{
stringextName=this.path.Substring(this.path.LastIndexOf("."));

if(extName.ToLower().Equals(".txt"))
{
//純文本文件
this.richTextBox1.LoadFile(path,RichTextBoxStreamType.PlainText);

}

if(extName.ToLower().Equals(".rtf"))
{
this.richTextBox1.LoadFile(path,RichTextBoxStreamType.RichText);
}

this.Text="文本編輯器"+path;


this.isSaved="y";
}

catch(Exceptionex)
{
MessageBox.Show("請選擇合適文件,打開失敗");
}
}

privatevoid保存SToolStripMenuItem_Click(objectsender,EventArgse)
{
if(string.IsNullOrEmpty(this.path))
{

this.saveFileDialog1.Title="保存為";
if(this.saveFileDialog1.ShowDialog()==DialogResult.OK)
{
this.path=this.saveFileDialog1.FileName;

SaveFile();}

}

else
{

stringextNanme=path.Substring(this.path.LastIndexOf("."));
if(extNanme.ToLower().Equals(".txt"))
{
this.richTextBox1.SaveFile(this.path,RichTextBoxStreamType.PlainText);

}

if(extNanme.ToLower().Equals(".rtf"))
{
this.richTextBox1.SaveFile(this.path,RichTextBoxStreamType.RichText);
}
}

this.initLenglt=richTextBox1.TextLength;

}

privatevoidSaveFile()
{
try
{
if(this.saveFileDialog1.FilterIndex==1)
{
//純文本文件
this.richTextBox1.SaveFile(path,RichTextBoxStreamType.PlainText);

}

if(this.saveFileDialog1.FilterIndex==2)
{
this.richTextBox1.SaveFile(path,RichTextBoxStreamType.RichText);
}

this.Text="文本編輯器"+path;


this.initLenglt=richTextBox1.TextLength;


this.isSaved="y";
}

catch(Exceptionex)
{}}

privatevoid另存為AToolStripMenuItem_Click(objectsender,EventArgse)
{

if(this.saveFileDialog1.ShowDialog()==DialogResult.OK)
{
this.path=this.saveFileDialog1.FileName;

SaveFile();

}
}

privatevoidEditorForm_Load(objectsender,EventArgse)
{
this.剪切TToolStripMenuItem.Enabled=false;
this.復制CToolStripMenuItem.Enabled=false;

if(!string.IsNullOrEmpty(this.path))
{
this.OpenFile();
}
}

privatevoid字體ToolStripMenuItem_Click(objectsender,EventArgse)
{
try
{
stringextName=this.path.Substring(this.path.LastIndexOf("."));

if(extName.ToLower().Equals(".txt"))
{
this.SettxtFont();
}

if(extName.ToLower().Equals(".rtf"))
{
this.SetRichtextFont();
}
}

catch(Exceptionex)
{
}
}

privatevoidSettxtFont()
{
if(this.fontDialog1.ShowDialog()==DialogResult.OK)
{
Fontfont=this.fontDialog1.Font;

this.richTextBox1.Font=font;
}
}

privatevoidSetRichtextFont()
{
if(this.fontDialog1.ShowDialog()==DialogResult.OK)
{
Fontfont=this.fontDialog1.Font;

this.richTextBox1.SelectionFont=font;
}
}

privatevoid字體顏色ToolStripMenuItem_Click(objectsender,EventArgse)
{
stringextName=this.path.Substring(this.path.LastIndexOf("."));

if(extName.ToLower().Equals(".rtf"))
{
if(this.colorDialog1.ShowDialog()==DialogResult.OK)
{
Colorcolor=this.colorDialog1.Color;

this.richTextBox1.SelectionColor=color;
}
}
}

privatevoid剪切TToolStripMenuItem_Click(objectsender,EventArgse)
{
if(richTextBox1.SelectionLength>0)
{
this.richTextBox1.Cut();
}
}

privatevoid粘貼PToolStripMenuItem_Click(objectsender,EventArgse)
{
this.richTextBox1.Paste();
}

privatevoid復制CToolStripMenuItem_Click(objectsender,EventArgse)
{
if(richTextBox1.SelectionLength>0)
{
this.richTextBox1.Copy();
}
}

privatevoidrichTextBox1_SelectionChanged(objectsender,EventArgse)
{
if(richTextBox1.SelectionLength>0)
{
this.剪切TToolStripMenuItem.Enabled=true;

this.復制CToolStripMenuItem.Enabled=true;
}

else
{
this.剪切TToolStripMenuItem.Enabled=false;
this.復制CToolStripMenuItem.Enabled=false;
}
}

privatevoid編輯EToolStripMenuItem_Click(objectsender,EventArgse)
{

}

privatevoid全選AToolStripMenuItem_Click(objectsender,EventArgse)
{
this.richTextBox1.SelectedText.ToString();
}

privatevoid退出XToolStripMenuItem_Click(objectsender,EventArgse)
{
this.Close();
}

privatevoidEditorForm_FormClosing(objectsender,FormClosingEventArgse)
{
if(this.richTextBox1.TextLength>this.initLenglt)
{
if(MessageBox.Show("文件沒有保存是否退出?","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Warning)==DialogResult.No)
{
e.Cancel=true;
}
}
}

privatevoid關於AToolStripMenuItem_Click(objectsender,EventArgse)
{
AboutBoxaboutbox=newAboutBox();
aboutbox.ShowDialog();
}

privatevoid撤消UToolStripMenuItem_Click(objectsender,EventArgse)
{
this.richTextBox1.Undo();
}


}
}

⑷ 設計一個簡單的文本編輯器,用C語言實現

#include <conio.h>
#include <sing.h>
#include "keyscode.h"
#include "menu.h"

suct line{
int charnum;
char *base;
};

typedef suct line SequListElemType;

#include "sequlist.h"

#define MAXLINES 1000

int key;
int cureditline=0;
int curscrtopline=0;
int cureditcol=0;
int funckey;
int editwinx=2;
int editwiny=3;
int editwinlines=20;
int mainover=0;
FILE *curfile;

char filename[255]="test.txt";

SequList *Document;

char ascii(int k);
prinoc(int startfileline,int startscrline);
readdoc(FILE *fp);

editline(int curline,int maxcolnum)
{
char s[2000];
setscrcolor(BLUE,YELLOW);
scpy(s,Document->elem[curline].base);
getsing(editwinx,editwiny curline-curscrtopline,s,maxcolnum);
free(Document->elem[curline].base);
Document->elem[curline].base=(char *)malloc(slen(s) 1);
scpy(Document->elem[curline].base,s);
}

prinoc(int startfileline,int startscrline)
{
int i;
int j;
cursor_hide();
i=startscrline;
j=startfileline;
setscrcolor(BLUE,YELLOW);
gotoxy(editwinx,editwiny startscrline);
while(i<=editwinlines && i<Document->length)
{
clearscrline(editwinx,editwiny i,78);
putsxy(editwinx,editwiny i ,Document->elem[j -1].base);
}
while(i<=editwinlines)
clearscrline(editwinx,editwiny i ,78);
cursor_show();
}

getline(FILE *fp,char *l)
{
int i=0;
while(!feof(fp))
if((l[i ]=fgetc(fp))=='\n')
break;
l[i-1]='\0';
}

closedoc(FILE *fp)
{

int i;
fclose(fp);
for(i=0;i<Document->length;i )
free(Document->elem[i].base);
SequListDesoy(Document);
}

readdoc(FILE *fp)
{
char *newline;
char s[20000];
int linenum=0;
suct line curline;
if(!fp) return;
while(!feof(fp))
{
getline(fp,s);
linenum ;
newline=(char *)malloc(slen(s) 1);
scpy(newline,s);
curline.base=newline;
curline.charnum=slen(newline);
SequListInsert(Document,linenum,curline);
}
}

char ascii(int k)
{
char c;
c=(k<<8)>>8;
if(c>=32&&c<127)
return c;
else
return 0;
}

insertchar(char *s,char c,int pos)
{
int i;
for(i=slen(s) 1;i>pos;i--)
s[i]=s[i-1];
s[i]=c;
}
deletechar(char *s,int pos)
{
int i;
int j;
j=slen(s);
for(i=pos;i<=j;i )
s[i]=s[i 1];
}
clearscrline(int x,int y,int num)
{
int i;
for(i=0;i<num;i )
putcxy(x i,y,'');
}
getsindiag(int x,int y,int w,char *title,char *s)
{
char buf[2000];
gettext(x,y,x w 2,y 2,buf);
setscrcolor(LIGHTGRAY,BLACK);
box(x,y,w 2,3);
putsxy(x 3,y,title);
getsing(x 1,y 1,s,w);
puttext(x,y,x w 2,y 2,buf);
}

insertnewline(int linenum)
{
suct line l;
l.base=(char *)malloc(80);
l.charnum=0;
l.base[0]='\0';
SequListInsert(Document,linenum,l);
}
deleteline(int linenum)
{
SequListDelete(Document,linenum);
}

getsing(int x,int y,char *s,int num)
{
int k;
int n;
char c;
int curpos=0;
int thisover=0;
cursor_show();
/* putsxy(x,y,s); */
gotoxy(x,y);
while(!thisover)
{
if(k=bioskey(1))
{ switch(k){
case KEYEsc:
case KEYReturn:
case KEYUp:
case KEYDown:
case KEYAlt_x:
case KEYCl_y:
return;
break;
default:
bioskey(0);
}
}
else
continue;
switch(k){
case KEYHome:
curpos=0;
gotoxy(x curpos,y);
break;
case KEYEnd:
curpos=slen(s);
gotoxy(x curpos,y);
break;
case KEYReturn:
thisover=1;
break;
case KEYLeft:
if(curpos) curpos--;
gotoxy(x curpos,y);
break;
case KEYRight:
if(curpos<num) curpos ;
gotoxy(x curpos,y);
break;
case KEYDelete:
if(curpos<slen(s))
{
deletechar(s,curpos);
cursor_hide();
clearscrline(x,y,num);
putsxy(x,y,s);
gotoxy(x curpos,y);
cursor_show();
}
break;
case KEYBackspace:
if(curpos)
{
deletechar(s,curpos-1);
curpos--;
cursor_hide();
clearscrline(x,y,num);
putsxy(x,y,s);
gotoxy(x curpos,y);
cursor_show();
}
break;
case KEYEsc:
return;
default:
c=ascii(k);
if (c&&slen(s)<num)
{
insertchar(s,c,curpos);
cursor_hide();
clearscrline(x,y,num);
curpos ;
putsxy(x,y,s);
gotoxy(x curp os,y);
cursor_show();
}
break;
}
}
}

dofunc(int itemno)
{
switch(itemno)
{
case 0:
break;
case 1: /*Open file*/
getsindiag(3,4,50,"Open file Name",filename);
if(curfile=fopen(filename,"r "))
{
readdoc(curfile);
prinoc(1,0);
}
break;
case 3:
mainover=1;
break;
case 21:
showmessagew();
default:
break;
}
}

main()
{ int i;
char c;

char *mainmenuitem[10]={"File","Edit ","Help"};
char *submenu1[10]={"New","Open","Save","Exit to system"};
char *submenu2[10]={"Copy","Cut","Paste "};
char *submenu3[20]={"HelpContent","About"};

initmenu(MAINMENU_V,3,&mainmenu,mainmenuitem);
initmenu(SUBMENU_H,4,&submenu[0],submenu1);
initmenu(SUBMENU_H,3,&submenu[1],submenu2);
initmenu(SUBMENU_H,2,&submenu[2],submenu3);
for(i=0;i<3;i )
addsubmenu(&mainmenu,i,&submenu[i]);
definemenupos(3,1,&mainmenu);
cursor_hide();
showmenu(&mainmenu);
showmainw(1,2,80,23);
showmessagew();

SequListInit(&Document,MAXLINES);
insertnewline(1);
setscrcolor(BLUE,YELLOW);
while(!mainover)
{
if(key=bioskey(1))
{if(!ascii(key))
bioskey(0);
}
else
continue;
switch(key){
case KEYBackspace:
case KEYDelete:
case KEYHome:
case KEYEnd:
case KEYReturn:
if(cureditline-curscrtopline<editwinlines)
cureditline ;
else
{
curscrtopline ;
prinoc(curscrtopline 1,editwiny);
}
insertnewline(cureditline 1);
prinoc(curscrtopline 1,0);
gotoxy(editwinx,editwiny cureditline);
editline(cureditline,78);
break;
case KEYUp:
if (cureditline>0)
{
cureditline--;
gotoxy(editwinx,editwiny cureditline);
editline(cureditline,78);
}
break;
case KEYDown:
if (cureditline<Document->length-1)
{
cureditline ;
gotoxy(editwinx,editwiny cureditline);
editline(cureditline,78);
}
break;
case KEYCl_y:
deleteline(cureditline 1);
if(Document->length==0)
insertnewline(cureditline 1);
if(cureditline>=Document->length)
insertnewline(cureditline 1);
prinoc(cureditline 1,cureditline-curscrtopline);
gotoxy(editwinx,editwiny cureditline);
editline(cureditline,78);
break;
case KEYLeft:
case KEYRight:
break;
case KEYCl_s:
break;
case ESC:
cursor_hide();
dofunc(getmenuitem());
break;
case KEYAlt_x:
mainover=1;
break;
default:
gotoxy(editwinx,editwiny cureditline-curscrtopline);
editline(cureditline,78);
break;
}
}
closedoc(curfile);
setscrcolor(BLACK,WHITE);
clrscr();
cursor_show();
}

⑸ 用匯編語言設計一個「簡單的文本編輯器」

說明: 雙擊可執行文件wbbjq.exe,在出現的界面中輸入任意文本內容,利用DEL鍵、
BACKSPACE鍵、HOME鍵、END鍵、上下左右游標鍵對文本進行全屏幕編輯,
按f1鍵激活菜單file,下移游標,選擇save,輸入文件名。也可以選擇FILE菜單
的其他菜單項,他們的功能均可實現。按f10激活幫助,按ESC鍵退出幫助。

源程序:
red_chr macro ;讀取字元宏定義
mov ah,0
int 16h
endm
string macro p1 ;輸入字元游標
mov ah,9
lea dx,p1
int 21h
endm
win macro opr1,opr2,opr3,opr4,opr5,opr6 ;建立窗口
mov ah,06h
mov al,opr1
mov bh,opr2
mov ch,opr3
mov cl,opr4
mov dh,opr5
mov dl,opr6
int 10h
endm
pos_curse macro op1,op2,op3 ;定義游標位置
mov ah,2
mov bh,op1
mov dh,op2
mov dl,op3
int 10h
endm
pos_get macro ;顯示游標位置
mov ah,03h
mov bh,0
int 10h
endm
data segment ;定義數據段
menu db 'File Edit Help $'

mass_1 db 'F1 Active file F10 Active help','$'
manu_1 db ' New ',13,10,'$'
manu_2 db ' Open ',13,10,'$'
manu_3 db ' Save ',13,10,'$'
manu_4 db ' Save as ',13,10,'$'
manu_5 db ' Exit ','$'
handle dw ?
message1 db ' Please input file name:','$'
message2 db ' Please input save file name:','$'
message3 db ' Please input open file name:','$'
message4 db ' ***The file is not save! Save it now? (Y/N)***: ','$'
path db 50 p(0),'$'
buffer db 2000 p(?)
bak db 3850 p(0)
line db ?
row db ?
char db ?
help_mas1 db ' welcome use editor! $' ;幫助內容
help_mas2 db 'please the first active help! $'
help_mas3 db 'good lucky!! $'
help_mas4 db '==========================================================$'
help_mas5 db 'Press F1 to active file. $'
help_mas6 db 'You can use DOWN cursor key to choose the fuction $'
help_mas7 db 'Press F10 to show the help massage.Press Esc To Quit$'
date db 'today ??/??/','$' ;調用日期
hanglie db '???//???','$' ;行//列
data ends
code segment
main proc far ;主程序
assume cs:code,ds:data
start:
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
call wind
call edit
ret
main endp
wind proc near ;創建窗口子程序
win 0,3eh,1,0,24,79 ;定義窗口背景
win 1,1fh,0,0,0,79
win 0,1fh,24,0,24,79
show: ;顯示菜單位置及內容
pos_curse 0,0,1
mov ah,9
lea dx,menu
int 21h
show_2: ;顯示狀態欄位置及內容
pos_curse 0,24,1
mov ah,9
lea dx,mass_1
int 21h
call win3
call win4
pos_curse 0,1,0
mov row,dh
mov line,dl
wind endp
edit proc near
char_get: ;讀字元
call com
com proc near ;定義功能鍵
pos_get
mov row,dh
mov line,dl
first:
pos_curse 0,row,line
j00: mov ah,0
int 16h ;從鍵盤讀字元 ah=掃描碼 al=字元碼
push ax
lea dx,buffer
mov buffer[bx],al
inc bx
cmp ah,48h ;上
jz up_1
cmp ah,50h ;下
jz down_1
cmp ah,4bh ;左
jz left
cmp ah,4dh ;右
jz right
cmp ah,1ch ;回車
jz enter_1
call fuc_key
mov ah,2
mov dl,al
int 21h
pop ax
call menu_show
jmp j6
down_1:
jmp down
enter_1:
jmp enter_2
up_1: jmp up
left: ;游標左移
pos_get
mov row,dh
mov dl,line
cmp line,0
jnz direct
mov line,79
dec row
cmp row,0
je stop2
jmp first
stop2:
mov row,1
jmp first
direct:
dec line
call win4 ;顯示游標位置
jmp first
right: ;游標右移
pos_get
mov row,dh
mov dl,line
cmp line,79
jnz direct2
mov line,0
inc row
cmp row,24
je returns1
jmp first
direct2:
inc line
call win4
jmp first
enter_2:
jmp enter
up: ;上移游標
pos_get
mov row,dh
mov dl,line
dec row
cmp row,0
je stop1
call win4
jmp first
stop1:
mov row,1
jmp first
down: ;下移游標
pos_get
mov row,dh
mov dl,line
inc row
cmp row,24
je stop3
call win4
jmp first
stop3:
mov row,23
jmp first
returns1:
jmp returns
enter: ;回車換行
pos_get
mov row,dh
mov line,dl
inc row
cmp row,24
je returns
mov line,0
call win4
jmp first
returns:
mov row,24
mov line,0
jmp first
j6:
ret
com endp
fuc_key proc near ;功能鍵子程序
next:
cmp ah,47h ;home
jz home
cmp ah,4fh ;end
jz _end
cmp ah,0eh ;backspace
jz bak_sp
cmp ah,53h
jz del
cmp ah,44h ;F10
jz help_0
ret
help_0: call help
home: ;HOME鍵的功能
pos_get
mov row,dh
mov line,0
call win4
jmp first
_end: ;END鍵的功能
pos_get
mov row,dh
mov line,79
call win4
jmp first
bak_sp: ;退格鍵的功能
pos_get
mov row,dh
mov line,dl
cmp line,0
je stop
dec line
jmp ab
stop:
mov line,0
ab:
pos_get 0,row,line
mov ah,2
mov dl,00
int 21h
call win4
jmp first
del: ;DEL刪除
pos_get
mov row,dh
mov line,dl
dec line
pos_get 0,row,line
mov ah,2
mov dl,00
int 21h
inc line
call win4
jmp first
cm:
cmp line,00
jz pos_cm
pos_cm:
pos_curse 0,0,0
jmp first
help proc near ;顯示幫助信息
call savedisplay ;顯示幫助信息每行的位置
pos_get
push dx
win 0,57h,4,5,21,70
pos_curse 0,6,25
string help_mas1
pos_curse 0,8,11
string help_mas2
pos_curse 0,10,11
string help_mas3
pos_curse 0,12,11
string help_mas4
pos_curse 0,14,11
string help_mas5
pos_curse 0,16,11
string help_mas6
pos_curse 0,18,11
string help_mas7
pop dx
pos_curse 0,dh,dl
mov ah,0
int 16h
cmp ah,36h ;F10 active help
jnz cls
call help
cls:
win 0,1eh,9,10,13,70 ;清屏
call backdisplay
help endp
fuc_key endp
menu_show proc near ;顯示菜單
call savedisplay
push cx
cmp ah,3bh ;F1功能
jz menu_sh
jmp char_get
menu_sh: ;定義菜單的背景字體顏色
pos_get
push dx
win 0,06h,2,1,7,11
win 0,65h,1,0,6,10
pos_curse 0,1,0
string manu_1
string manu_2
string manu_3
string manu_4
string manu_5
pop dx
dec dl
pos_curse 0,dh,dl
copmar:
red_chr
cmp ah,50h
jz manu_n
jmp manu_hid
manu_hid: ;菜單隱藏
win 0,1eh,1,1,7,11
call backdisplay
jmp char_get
manu_n: ;開始定義各個菜單項
win 0,65h,5,1,5,8
pos_curse 0,5,0
string manu_5
win 0,15h,1,1,1,8
pos_curse 0,1,0
string manu_1
red_chr
cmp ah,48h
je manu_n
cmp al,0dh
jz new_1
cmp ah,50h
je manu_o
jmp manu_hid
manu_n0:
jmp manu_n
manu_o:
win 0,65h,1,1,1,8
pos_curse 0,1,0
string manu_1
win 0,15h,2,1,2,8
pos_curse 0,2,0
string manu_2
red_chr
cmp ah,48h
je manu_o
cmp al,0dh
jz open_1
cmp ah,50h
je manu_s
jmp manu_hid
new_1: jmp new_2
manu_s:
win 0,65h,2,1,2,8
pos_curse 0,2,0
string manu_2
win 0,15h,3,1,3,8
pos_curse 0,3,0
string manu_3
red_chr
cmp al,0dh
jz save_1
cmp ah,48h
je manu_s
cmp ah,50h
je manu_a
jmp manu_hid
open_1: jmp open_2
manu_n1:
jmp manu_n
manu_a:
win 0,65h,3,1,3,8
pos_curse 0,3,0
string manu_3
win 0,15h,4,1,4,8
pos_curse 0,4,0
string manu_4
red_chr
cmp ah,1ch
jz save_2
cmp ah,48h
je manu_a
cmp ah,50h
je manu_e
jmp manu_hid
manu_n2:
jmp manu_n1
new_2: jmp new
save_1: call save
save_2: call saveas
manu_e:
win 0,65h,4,1,4,8
pos_curse 0,4,0
string manu_4
win 0,15h,5,1,5,8
pos_curse 0,5,0
string manu_5
red_chr
cmp ah,50h
je manu_n2
cmp ah,48h
je manu_e
cmp ah,1ch
je exit
jmp manu_hid
exit:
call backdisplay
win 0,07h,15,10,17,61
win 0,24h,14,9,16,60
mov dh,15
mov dl,9
mov bh,0
mov ah,2
int 10h
lea dx,message4
mov ah,9
int 21h
mov ah,1
int 21h
cmp al,79h
jnz q
call quitt
q: cmp al,6eh
jz quit
quit: win 0,07h,0,0,24,79
pos_curse 0,0,0
mov ah,4ch
int 21h
ret
menu_show endp
new proc near ;新建文件
pos_get
push dx
call backdisplay
win 0,07h,15,10,17,61
win 0,24h,14,9,16,60,
mov dh,15
mov dl,9
mov bh,0
mov ah,2
int 10h
lea dx,message1
cmp al,0dh
mov ah,9
int 21h
mov bx,0
all:
mov ah,1
int 21h
cmp al,0dh
je alll
mov path[bx],al
inc bx
jmp all
alll:
win 0,3eh,15,9,17,61
pop dx
pos_curse 0,dh,dl
lea dx,path
mov ah,3ch
mov cx,00
int 21h
mov handle,ax
mov bx,ax
mov ah,3eh
int 21h
win 0,3eh,1,0,23,79
mov dh,1
mov dl,0
mov bh,0
mov ah,2
int 10h
jmp char_get
new endp
open_2: jmp open
saveas proc near ;另存為文件 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
win 0,3eh,1,0,6,10
call backdisplay
win 0,07h,15,10,17,61
win 0,24h,14,9,16,60,
mov dh,15
mov dl,9
mov bh,0
mov ah,2
int 10h
lea dx,message2
mov ah,9
int 21h
mov bx,0
bll:
mov ah,1
int 21h
cmp al,0dh
je blll
mov path[bx],al
inc bx
jmp bll
blll:
pos_get
push dx
win 0,3eh,1,0,23,79
call backdisplay
pop dx
pos_curse 0,dh,dl
lea dx,path
mov ah,3ch
mov cx,00
int 21h
mov handle,ax
lea dx,buffer
mov bx,handle
mov cx,2000
mov ah,40h
int 21h
mov bx,handle
mov ah,3eh
int 21h
call backdisplay
jmp char_get
saveas endp
open proc near ;打開文件
call backdisplay
win 0,07h,15,10,17,61
win 0,24h,14,9,16,60
mov dh,15
mov dl,9
mov bh,0
mov ah,2
int 10h
lea dx,message3
mov ah,9
int 21h
mov bx,0
cll:
mov ah,1
int 21h
cmp al,13
je clll
mov path[bx],al
inc bx
jmp cll
clll:
win 0,3eh,1,0,23,79
lea dx,path
mov ah,3dh
mov al,0
int 21h
mov handle,ax
lea dx,buffer
mov bx,handle
mov cx,2000
mov ah,3fh
int 21h
win 0,3eh,1,23,1,79
mov dh,1
mov dl,0
mov bh,0
mov ah,2
int 10h
mov cx,1000
sub bx,bx
replay:
mov dl,buffer[bx]
inc bx
mov ah,2
int 21h
loop replay
mov bx,handle
mov ah,3eh
int 21h
mov dh,1
mov dl,0
mov bh,0
mov ah,2
int 10h
mov cx,10
mov bx,0
cleapath_3:
mov bl,0
mov path[bx],bl
loop cleapath_3
jmp char_get
open endp
save proc near ;保存文件
pos_get
push dx
win 0,3eh,1,0,6,10
call backdisplay
mov ah,path
cmp ah,21h
jl j_3
jmp j_4
j_3:
win 0,07h,15,10,17,61
win 0,24h,14,9,16,60,
mov dh,15
mov dl,9
mov bh,0
mov ah,2
int 10h
lea dx,message2
mov ah,9
int 21h
mov bx,0
dll:
mov ah,1
int 21h
cmp al,0dh
je dlll
mov path[bx],al
inc bx
jmp dll
dlll:
win 0,3eh,1,0,23,79
pop dx
pos_curse 0,dh,dl
j_4: lea dx,path
mov ah,3ch
mov cx,00
int 21h
mov handle,ax
lea dx,buffer
mov bx,handle
mov cx,2000
mov ah,40h
int 21h
mov bx,handle
mov ah,3eh
int 21h
call backdisplay
jmp char_get
save endp
savedisplay proc near
push ax
push bx
push cx
push dx
push ds
mov ax,0002h
int 33h
mov bx,0d
mov cx,3840d
loop1:
mov ax,0b800h
mov ds,ax
mov dl,ds:[bx]
mov ax,data
mov ds,ax
mov bak[bx],dl
inc bx
loop loop1
mov ax,0001h
int 33h
pop ds
pop dx
pop cx
pop bx
pop ax
savedisplay endp
backdisplay proc near
push ax
push bx
push cx
push dx
push ds
mov bx,0d
mov cx,3840d
loop11:
mov ax,data
mov ds,ax
mov dl,bak[bx]
mov ax,0b800h
mov ds,ax
mov ds:[bx],dl
inc bx
loop loop11
pop ds
pop dx
pop cx
pop bx
pop ax
ret
backdisplay endp
quitt proc near ;退出
call backdisplay
win 0,07h,15,10,17,61
win 0,24h,14,9,16,60,
mov dh,15
mov dl,9
mov bh,0
mov ah,2
int 10h
lea dx,message2
mov ah,9
int 21h
mov bx,0
qll:
mov ah,1
int 21h
cmp al,0dh
je qlll
mov path[bx],al
inc bx
jmp qll
qlll:
win 0,07h,15,10,17,61
win 0,3eh,14,9,16,60
call backdisplay
lea dx,path
mov ah,3ch
mov cx,00
int 21h
mov handle,ax
lea dx,buffer
mov bx,handle
mov cx,2000
mov ah,40h
int 21h
mov bx,handle
mov ah,3eh
int 21h
call backdisplay
win 0,07h,0,0,24,79
mov ah,4ch
int 21h
ret
quitt endp
edit endp
win3 proc near ;顯示日期
mov ah,2ah
int 21h
mov bl,10d
mov ax,0
mov al,dh
div bl
add ax,3030h
mov [date+6],al
mov [date+7],ah
mov ax,0
mov al,dl
div bl
add ax,3030h
mov [date+9],al
mov [date+10],ah
win 0,1dh,0,67,0,79
pos_curse 0,0,67
mov dx,offset date
mov ah,09h
int 21h
ret
win3 endp
win4 proc near ;顯示行//列
mov ah,03h
mov bh,0
int 10h
mov bl,100d
mov bh,10d
mov ax,0
mov al,dh
div bl
add al,30h
mov [hanglie+0],al
mov al,ah
mov ah,0
div bh
add ax,3030h
mov [hanglie+1],al
mov [hanglie+2],ah
mov ax,0
mov al,dl
div bl
add al,30h
mov [hanglie+5],al
mov al,ah
mov ah,0
div bh
add ax,3030h
mov [hanglie+6],al
mov [hanglie+7],ah
win 0,1dh,24,60,24,70
pos_curse 0,24,61
mov dx,offset hanglie
mov ah,09h
int 21h
ret
win4 endp
code ends
end start ;結束

閱讀全文

與行文本編譯器設計與實現相關的資料

熱點內容
吃雞手機國際服伺服器超時怎麼辦 瀏覽:66
努比亞Z5無命令 瀏覽:640
展示網站雲伺服器 瀏覽:870
代碼混淆器php 瀏覽:365
貝恩pdf 瀏覽:207
丙烯pdf 瀏覽:366
雲伺服器華碩 瀏覽:711
sublime3運行python 瀏覽:188
怎麼把安卓視頻傳到蘋果上面 瀏覽:81
手機拍鬼片用什麼app 瀏覽:640
爬山虎app是干什麼用的 瀏覽:505
有哪些寫給程序員的歌 瀏覽:49
成都市命令 瀏覽:993
建立系列文件夾 瀏覽:983
蘋果開機白屏帶文件夾問號 瀏覽:733
體驗服為什麼伺服器會關閉 瀏覽:41
酒店命令 瀏覽:750
中走絲線切割編程視頻 瀏覽:80
衣服壓縮袋手泵原理 瀏覽:714
通達信編程書籍 瀏覽:981