做一個文本編譯器的界面怎麼做
㈠ 用匯編語言編程設計一個簡單的文本編輯器界面,顯示文本文件的建立、編輯、退出界面。急用,
偷懶的方法是先用c#或者遲坦備MFC編寫,之信悄後使用visual studio自帶的碼毀mpbin.exe 加上/diasm 導出該匯編源碼。。。沒試過,逆向的時候看過核心的匯編代碼
不急的話我給你做。。。。
㈡ 怎麼去實現一個簡單文本編輯器
1.設計目的
簡易文本編輯器是一個面向用戶的系統服務程序,廣泛用於源程序的輸入、刪除、替換、查找、修改等一系列操作,甚至用於報刊和書籍的編輯排版以及辦公室的公文書信的起草和潤色,是一個比較實用的應用軟體。該程序是專門為用戶做文本編輯而精心設計的,可以滿足文本操作的大部分要求。
2.設計內容和要求
(1)讀取(文本)文件建立新字元串(2)查看源(文本)文件內容和組成信息(3)查看當前字元串(4)查看當前字元串的組成信息(5)查找指定位置開始的指定長度字元串(6)查找指定的字元串的位置(7)在當前字元串指定的位置插入字元串(8)從當前字元串中刪除指定的子字元串(9)替換當前字元串指定的子字元串(10)保存對(文本)文件的修改
(11) 另存為(文本)文件 (12) 退出程序
3.本設計所採用的數據結構
在該程序中用到的數據結構只有鏈表
程序中所使用的基本操作和存儲結構均採用串的鏈式存儲結構,並定義相應的操作函數。
typedef struct _String//定義鏈串結構
{char character ;//組成串的字元( 數據域 )
struct _String* next ;//指向下一串結構的指針( 鏈域 )
} String ;//串類型
4.功能模塊詳細設計
4.1詳細設計思想
該程序所使用的基本操作和存儲結構為採用串的鏈式存儲結構,並定義相應的操作函數。文本編輯的操作調用以下函數並結合庫函數來實現文本編輯的圖形界面。
定義鏈式存儲結構:
typedef struct _String//定義鏈串結構
{
char character ;//組成串的字元( 數據域 )
struct _String* next ;//指向下一串結構的指針( 鏈域 )
} String ;//串類型
定義串的信息結構:
typedef struct _StringInformation//定義串信息結構
{
String* str ;//鏈串首結點
int letters_count ;//字母個數
int figures_count ;//數字個數
int space_count ;//空格個數
int endline_count ;//換行符個數
int others_count ;//其他字元個數
int characters_count ;//總字元個數
} StringInformation ;//串信息類型
定義串的引索結構:
typedef struct _Index//定義串索引結構
{
int sub_index ;//子串在其父串的位置( 或索引 )
struct _Index* next_index ;//指向子串的下一個串索引結構的指針
} Index ;//串索引類型
所要調用的子函數有:
int StringToUnsignedInt( char* s , int max );//字元串轉換成無符號整數
void InitalizeStringInformation( StringInformation* SI , int initalizeAll ) ;//串信息初始化
void CreatStringFromArray( String** S , char* cString ) ;//從字元數組建立字元串
int CreatStringFromFile( String** S ,char* filePath ) ; //從文件建立字元串
int StringLength( String* S ) ;//求串長
int StringCompare( String* S1 , String* S2 ) ;//串比較
void StringCopy( String** targetString , String* sourceString ) ;//串拷貝
void SubString(String* S ,int index ,int subLength ,String** subS ) ;//子串提取
int SubStringIndex( String* S , String* subS ) ; //求子串在父串首次出現的位置
int StringInsert( String** S , int index , String* insertedString ) ; //串插入
int SubStringDelete( String** S , int index , int subLength ) ; //子串刪除
void PrintString( String* S ) ;//串輸出
void PrintIndex( Index* subIndex ) ;//子串的所有索引輸出
void PrintStringInformation( StringInformation* SI ) ;//串組成信息輸出
void SaveToFile( String* S , char* filePath ) ;//保存字元串到文件
void DestroyString( String** S ) ;//串銷毀
void DestroyIndex( Index** subIndex ) ;//子串索引銷毀
(1)讀取(文本)文件建立新字元串
該函數的設計思想為從字元數組建立字元串或者從文件建立字元串。就文件建立字元串而言,首先要定義一個串StringInformation
S,tempString = S.str,然後打開計算機中的txt文件gets( filePath ),
調用函數CreatStringFromFile( &S.str , filePath )將filePath寫入字元串S中來實現 。
(2)查看源(文本)文件內容和組成信息
先要調用函數PrintString(
Source.str )來進行串輸出,然後調用子函數PrintStringInformation( &Source
)將串組成信息輸出,最後將串銷毀DestroyString( &Source.str )。
(3)查看當前字元串
先要清屏system( "cls" );然後調用子函數PrintString( S.str )將串S輸出。
(4)查看當前字元串的組成信息
調用子函數PrintStringInformation( &S )將串S的組成信息輸出
(5)查找指定位置開始的指定長度字元串
先輸入字串的起始位置gets(
input ),position = StringToUnsignedInt( input , -1 )
調用該函數將input轉換成無符號整數並將值賦予position;然後再輸入子字元串的長度gets( input ),subLength =
StringToUnsignedInt( input , -1
)調用此函數將input轉換成無符號整數並將值賦予subLength,然後調用該函數 SubString( S.str , position ,
subLength , &subString )進行子串提取;
(6)查找指定的字元串的位置
首先要輸入將要查找的字元串gets(
cString ),CreatStringFromArray( &subString , cString
)然後調用該函數將cString置為串subString,調用SubStringIndexAll( S.str , subString ,
&subIndex )輸出子串subString在父串S中出現的所有位置,然後銷毀subString 。
(7)在當前字元串指定的位置插入字元串
首先請輸入將插入字元串的位置 gets( input ),然後調用函數position = StringToUnsignedInt( input , -1 )將input轉換成無符號整數並將值賦予position;
再輸入將插入的字元串
gets( cString ),CreatStringFromArray( &newString , cString
)用字元數組建立字元串法建立newString,然後再調用函數StringInsert( &S.str , position ,
newString )將newString插入文件S.str中,然後再銷毀newString。
(8)從當前字元串中刪除指定的子字元串
首先輸入將刪除的子字元串gets(
cString ),然後調用函數CreatStringFromArray( &subString , cString
)建立新的字元串subString,調用函數count = SubStringIndexAll( S.str , subString ,
&subIndex )輸出子串subString在父串S中出現的所有位置。
然後輸入將要刪除的子字元串的位置gets(
input ),position = StringToUnsignedInt( input ,
-1)調用該函數將input轉換成無符號整數並將值賦予position ;
再調用函數將子字元串刪除SubStringReplaceSingle( &S.str , position , subString ,
NULL )。
(9)替換當前字元串指定的子字元串
先輸入將被替換的子字元串 gets( cString )
,CreatStringFromArray( &subString , cString
)調用函數將cString生成字元串subString ,調用函數SubStringIndexAll( S.str , subString ,
&subIndex )輸出子串subString在父串S中出現的所有位置。
再輸入將替換的子字元串的位置gets(
input ),將輸入的input轉換為無符號整形position = StringToUnsignedInt( input , -1 );
然後輸入一個字元串以替換上面的字元串 gets( cString ),調用CreatStringFromArray(
&replaceString , cString )將輸入的cString CreatStringFromArray(
&replaceString , cString
)置成新串replaceString,然後調用函數SubStringReplaceSingle( &S.str , position ,
subString , replaceString )替換子字元串 ,然後銷毀subString。
(10)保存對(文本)文件的修改
調用函數SaveToFile( S.str , filePath )將已修改的文本保存
(11)另存為(文本)文件
先輸入將另存為的文件的絕對路徑 gets( anotherPath )。然後再調用函數SaveToFile( S.str , anotherPath )另存文件
(12)退出程序
調用函數DestroyString( &S.str )將字元串S銷毀,退出程序
㈢ 用VB做文本編輯器
意思就是做個記事本吧
看下面的
用VB做一個記事本實在不很復雜,我們完全可以通過向導來很方便地做出來。但本文只打算討論用手動方法製作記事本,旨在向VB初學者展示:學VB原來是如此容易!
通過閱讀、研究本遲跡文並按本文所述進行嘗試,初學者將學到很多東西,如怎樣使用RichText控制項來打開和保存文件,怎樣製作菜單、工具欄和狀態欄以及如何對其編寫代碼等。
第一章 讓我們的記事本馬上運行
急於求成是初學者共有的心願。那好,請按如下三個步驟做,我們的願望立即就可以實現!
步驟一:繪制界面。
新建一個標准EXE工程,將其Caption屬性改為「超級記事本」,點擊Icon屬性給它找個合適的Icon圖標。單擊菜單「工程」-「部件」,在彈出的「部件」對話框里找到Microsoft RichText Box 6.0和公共對話框Microsoft Common Dialog 6.0並選中它們,單擊「確定」按鈕。這時左邊的工具欄上出現了我們剛才新添的兩個控制項了。在窗體上繪制RichText Box和Commn Dialog,其中RichText Box的大小和位置可不用理睬,我們將在代碼中處理它,當然,有必要把它的ScrollBar屬性設為2-rtfVertical,這樣在打開和編輯文件時垂直滾動條才可用。
步驟二:編輯菜單。
按Ctrl E調出菜單編輯器,我們來做如下幾個菜單:
一.文件菜單:
文件(第一層) mnuFile
新建(第二層) mnuNew
打開(第二層) mnuOpen
保存(第二層)中旦洞 mnuSave
- (第二層) mnuFileSep (分隔線)
退出(第二層) mnuExit
二.編輯菜單:
編輯(第一層) mnuEdit
復制(第二層) mnuCopy
剪切(第二層) mnuCut
粘貼(第二層) mnuPaste
- (第二層) mnuEditSep (分隔線)
全選(第二層) mnuSelecAll
三.搜索菜單:
搜索(第一層) mnuSearch
查找(第二層) mnuFind
查找下一個(第二層) mnuFindOn
四.幫助菜單:
幫助(第一層) mnuHelp
使用說明(第二層) mnuUsage
關於(第二賣枯層) mnuAbout
(註:各菜單項的快捷鍵請自行設置)
好了,其它的菜單項以後再根據需要添加。現在進入:
步驟三:編寫代碼。
'聲明查找變數
Dim sFind As String
'聲明文件類型
Dim FileType, FiType As String
'初始化程序
Private Sub Form_Load()
'設置程序啟動時的大小
Me.Height = 6000
Me.Width = 9000
End Sub
'設置編輯框的位置和大小
Private Sub Form_Resize()
On Error Resume Next '出錯處理
RichTextBox1.Top=20
RichTextBox1.Left=20
RichTextBox1.Height = ScaleHeight-40
RichTextBox1.Width = ScaleWidth-40
End Sub
'新建文件
Private Sub mnuNew_Click()
RichTextBox1.Text = '清空文本框
FileName = 未命名
Me.Caption = FileName
End Sub
'打開文件
Private Sub mnuOpen_Click()
CommonDialog1.Filter = 文本文檔(*.txt)|*.txt|RTF文檔(*.rtf)|*.rtf|所有文件(*.*)|*.*
CommonDialog1.ShowOpen
RichTextBox1.Text = '清空文本框
FileName = CommonDialog1.FileName
RichTextBox1.LoadFile FileName
Me.Caption = 超級記事本:
㈣ 如何用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);
㈤ 如何用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();
}
}
}
㈥ 如何使用文本編輯器製作一個網頁
第一步:在空文件夾中單擊右鍵,選擇「新建--文本文檔」。然後這個空文件夾里立即多了一個名為「新建 文本文檔.txt」的文件。將此文件後綴"txt"改大山名為"html"。例如:1.html
這樣,一個沒有網頁代碼和內容的一個空網頁就建成了。
哇噻,看見了嗎?你的第一個網頁。怎不令人激動和興奮呢!所有的過程只是鍵入幾個單詞而已。
也可以是相對的,相對於當前頁面來說。
所以,假設你有另外一個HTML文檔「flyingmoss.html」,其中一行代碼可以寫成<a href="flyingmoss.html">The miracle of moss in flight</a> ,諸如此類。
連接不僅可以連接到其他的HTML文檔,也可以連接到頁面上的其他文件。
連接還可以轉到頁面的其他部分。你可以給幾乎所有的標簽增加id屬性,比如<h2 id="moss">Moss</h2>,然後連接到它,像是這樣做:<a href="#moss">Go to moss</a>,點擊這個連接會直接滾動到帶有這個id的元素。
注意a標簽允許你為連接打開新窗口,而不是取代當前窗口,初聽起來似乎是一個不錯的主意,因為它不會讓用戶離開你的頁面。
但是,有很多理由證明,你不應該這樣做。
從易用性的觀點來滾團中看,這種方法破壞導航。最常用的導航工具是瀏覽器上的「後退」,打開新窗口使這個功能失去了作用。
更廣泛地,還是從易用的觀點來或森看,用戶不需要到處都是彈出的新窗口。如果用戶需要打開新窗口,他們有權利(是的,有權利。不要強行干涉別人意志,不是很好嗎?在一般情況下,建議你盡量不要使用新窗口——譯者注)讓自己來控制。
㈦ 用JAVA設計一個簡單文本編輯器
要求挺多
㈧ 如何製作vb中文本編輯
1、菜單:
單擊【工具】-【菜單編輯器】,在菜單編輯器對話框中進行編輯,比較簡單。特別說明:1、子菜單要點擊右箭頭,編輯完子菜單,再點擊右箭頭返回主菜單編輯。2、菜單編輯器中的標題是菜單中顯示的名稱喚困和,而名稱是菜單在軟體中的識別符,一般用英文或漢語拼音,這個識別符可以在軟體中編輯他的動作。其他你可以自己琢磨。
2、工具欄:
工具欄必須在【工程】-【部件】的部件對話框中添加Microsoft Windows Common Controls 6.0(SP4),添加後在左邊工具欄或出現8個工具,其中Toolbar是工具欄工具,ImageList是圖片編輯工具。單擊Toolbar工具放到窗體,會出現工具欄編輯對話框,單擊下一步,如果需要傳統工具欄,在這里點擊左邊項目,再點擊右箭頭,如果不需要點擊下一步,單擊完成。然後右擊Toolbar1控制項,單擊【屬性】,和盯在對話框中點擊bottons標簽,點擊insert button按鈕,即可編輯工具欄項目了。注意:在編輯工具欄前,你必須放置ImageList工具,在ImageList1控制項的屬性中放置工具欄的圖標。詳細你慢慢熟悉就可以了。
3、增強文本框?可能你需要的是可以顯示多行文字的textbox控制項吧?其實就是textbox控制項的幾個屬性:MultiLine屬性設置為1,可以顯示多行文字, ScrollBars屬性是設置是否顯示滾動條,0為不顯示,1為顯示水平滾動條,2為顯示垂直滾動條,3為顯示水平和垂直滾尺族動條。例如:
Text1.MultiLine = 1
Text1.ScrollBars = 2
㈨ 如何用VB編輯一個文本編輯器
Private Sub Bold_Click()
Text1.FontBold = True
End Sub
Private Sub Clean_Click()
Text1.Text = "轎腔"
End Sub
Private Sub Display_Click()
Text1.Text = inpext
End Sub
Private Sub Exit_Click()
End
End Sub
Private Sub Font20_Click()
Text1.FontSize = 20
End Sub
Private Sub Input_Click()
inpt = InputBox("請輸入一段文字"枯戚, "輸入沒帆陵對話框")
inptext = inptext & inpt
End Sub
Private Sub Italic_Click()
Text1.FontItalic = True
End Sub
Private Sub Normal_Click()
Text1.FontBold = False
Text1.FontItalic = False
Text1.FontUnderline = False
Text1.FontSize = 10
End Sub
Private Sub Under_Click()
Text1.FontUnderline = True
End Sub
㈩ 用匯編語言設計一個「簡單的文本編輯器」
說明: 雙擊可執行文件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 ;結束