Gedit中文乱码

缺省配置下,用 Ubuntu 的文本编辑器(gedit)打开 GB18030/GBK/GB2312 等类型的中文编码文本文件时,将会出现乱码。

出现这种情况的原因是,gedit 使用一个编码匹配列表,只有在这个列表中的编码才会进行匹配,不在这个列表中的编码将显示为乱码。您要做的就是将 GB18030 加入这个匹配列表。

  • 命令行方式,适用于所有 Ubuntu 用户。

复制以下命令到终端中,然后回车即可:

gconftool-2 –set –type=list –list-type=string /apps/gedit-2/preferences/encodings/auto_detected “[UTF-8,CURRENT,GB18030,BIG5-HKSCS,UTF-16]”

  • 图形化方式,适用于 Ubuntu 用户,而不适用于 KUbuntu/XUbuntu 用户。

您可以遵循以下步骤,使您的 gedit 正确显示中文编码文件。

  1. 按下 Alt-F2,打开“运行应用程序”对话框。
  2. 在文本框中键入“gconf-editor”,并按下回车键,打开“配置编辑器”。
  3. 展开左边的树节点,找到 /apps/gedit-2/preferences/encodings 节点并单击它。
  4. 双击右边的 auto_detected 键,打开“编辑键”对话框。
  5. 单击列表右边的“添加”按钮,输入“GB18030”,单击确定按钮。
  6. 列表的最底部新增加了一个“GB18030”。单击选中它,并单击右边的 “向上” 按钮直到 “GB18030” 位于列表的顶部为止。
  7. 单击确定按钮,关闭配置编辑器。

现在,您的 gedit 应该能够顺利打开 GB18030 编码的文本文件了。

Advertisements

汇编:显示存储器与直接写屏等

显示存储器与直接写屏:

;*******************************************************************************************************************************************

;用直接写屏方式变化色彩显示26个字母   

   ;A904
.MODEL        SMALL
.CODE
START:
MOV       AH,0
MOV       AL,3        ;设置80*25 文本16 色
INT       10H
MOV       BX,0B800H   ;显存中起始段地址
MOV       DS,BX
MOV       SI,0
MOV       DL,41H      ;字符的ASCII码
MOV       BL,80H      ;设置彩色文本显示字符属性
MOV       CX,26       ;字符个数
L1:  MOV       [SI],DL
MOV       [SI+1],BL   ;送显示字符的属性
ADD       SI,2
INC       DL
INC       BL
LOOP      L1
MOV       AH,4CH
INT       21H
END       START
;*******************************************************************************************************************************************

;从键盘缓冲区读出键值并显示字符和扫描码

 ;*******************************************************************************************************************************************

        CODE SEGMENT

            ASSUME CS:CODE
KB_BUFFER_HEAD  =         DS:[1AH]
KB_BUFFER_TAIL  =         DS:[1CH]
BUFFER  =         1EH
END_BUFFER  =         3EH
BUFFER_SEG  =         40H

      START:
MOV       AX,BUFFER_SEG
MOV       DS,AX

     WAITKB:  MOV       BX,KB_BUFFER_HEAD
CMP       BX,KB_BUFFER_TAIL
JE        WAITKB
MOV       BX,KB_BUFFER_HEAD
MOV       DX,[BX]
CMP       DL,13
JE        EXIT
MOV       AH,2
INT       21H
MOV       DL,DH
MOV       AH,2
INT       21H
ADD       BX,2
CMP       BX,END_BUFFER
JB        KEEP
MOV       BX,BUFFER
KEEP:  MOV       KB_BUFFER_HEAD,BX
STI
LOOP      WAITKB
EXIT:
MOV       AH,4CH
INT       21H


        CODE  ENDS
END       START
;*******************************************************************************************************************************************

子程序设计:用堆栈传递参数或参数地址

本题有利于理解堆栈,其中有类似于指针的指针

;*******************************************************************************************************************************************
 
DATA  SEGMENT
                  DW        50 DUP (?)
TOS  LABEL     WORD
ARY  DW        100 DUP (4)
NUM  DW        100
SUM  DW        ?
ATYPE  DW        2
DATA  ENDS

 

        CODE  SEGMENT
              ASSUME    CS:CODE,DS:DATA,SS:DATA
  MAIN  PROC      FAR
MOV       AX,DATA
MOV       SS,AX
LEA       SP,TOS  ; ss:sp  >> data:tos

          ;ds和0 压入堆栈,以便返回dos
PUSH      DS
XOR       AX,AX
PUSH      AX
MOV       AX,DATA
MOV       DS,AX       ;ds=ss

         ;参数地址压入堆栈
LEA       BX,ARY
PUSH      BX
LEA       BX,NUM
PUSH      BX
LEA       BX,SUM
PUSH      BX
CALL      PROSUM2
RET
 MAIN  ENDP

;————————————————————————————————————————————————————–
  PROSUM2  PROC      NEAR
MOV       BP,SP
MOV       SI,[BP+6]
MOV       DI,[BP+4]
MOV       CX,[DI]
MOV       DI,[BP+2]
XOR       AX,AX
CMP       ATYPE,1
JZ        SUMBYTE

  NEXT:  ADD       AX,[SI]
ADD       SI,2
LOOP      NEXT
MOV       [DI],AX
JMP       EXIT

 SUMBYTE:  ADD       AL,[SI]
ADD       SI,1
LOOP      SUMBYTE
MOV [DI],AL

        EXIT:  RET       6
PROSUM2  ENDP
      
  CODE  ENDS
              END       MAIN

;*******************************************************************************************************************************************

 

;冒泡排序法

;*******************************************************************************************************************************************

DATA  SEGMENT
A  DW        9,4,26,85,38
DATA  ENDS
CODE  SEGMENT
ASSUME    CS:CODE,DS:DATA
START:
MOV       AX,DATA
MOV       DS,AX
MOV       DI,4

        LP1:  MOV       CX,DI
MOV       BX,0
LP2:  MOV       AX,A[BX]
CMP       AX,A[BX+2]
JGE       CONT
XCHG      AX,A[BX+2]
MOV       A[BX],AX
CONT:  ADD       BX,2
LOOP      LP2
DEC       DI
JNZ       LP1
MOV       AH,4CH
INT       21H
CODE  ENDS
END       START
;*******************************************************************************************************************************************

军队国家化

http://zh.wikipedia.org/wiki/%E5%86%9B%E9%98%9F%E5%9B%BD%E5%AE%B6%E5%8C%96

军队国家化 ,即军队不专属于特定人士拥有,无政党派系分别,属一之全体人民所拥有的,使全国军队皆受国家的编组,尊重军令与政令的统一,此亦是维持国家安定的关键基础。[1]另一方面,也能视为是否为民主国家的判断指标之一。而相反的情况是军队私有化或是军队党化

军队国家化的实质是军队不得成为党派或私人干涉和影响国内政治的工具,即不得以枪杆子保卫政党或政权;军人的职责仅为保卫国家,服务全体国民…….

………………..

……………………

支持军队国家化观点

一些国家的民主运动人士和1946年的中国共产党持有军队国家化观点[19][20],支持军队国家化观点如下[21][22][23][24]

  • 军队给养来自国库,而非党库。因此军队天然属于国家。
  • 军人服兵役乃是依据宪法“公民有服兵役义务”条款之规定,乃是参加国防军而非党卫军,属于国家行为,而非党派行为。“青年参军是基于作为公民的义务和国法的强制,并非是基于对某党主张的向往和信仰,以国家的名义征兵加入的却是党军,这是以公谋私,是非法占有。”[25]
  • 军队国家化往往为宪法所明定或间接规定,例如“武装力量属于人民”,或武装力量的职责在于“保卫祖国”,而并非保卫政党。因此反对军队国家化属于违宪行为。
  • 民主社会的政党应以人民的选票来保卫执政地位,而非枪杆子。
  • 党指挥枪在操作上往往成为枪指挥党,而酿成政变。

反对军队国家化观点

一些国家的执政党,例如中国共产党,在1946年曾支持军队国家化,并签署了废除党军的整军协定,但现今明确反对军队国家化,并把军队国家化与“军队非党化”同等批判,观点如下[26]

  • 马克思列宁主义暴力革命原则决定了党必须要有自己的军队。
  • 坚持党对军队的绝对领导,是军队建设发展的最高政治原则,是人民解放军永远不变的军魂。
  • 敌对势力大肆鼓吹“军队非党化、非政治化”和“军队国家化”,企图挑拨和离间党与军队的关系,使我军脱离党的领导,进而颠覆我国的基本社会制度。使中国丧失自己特有的政治优势,最终变成西方的附庸。
  • “军队非党化”掩盖了政党与军队之间的内在联系,在理论和实践上都是极其荒谬和虚伪的。
  • 列宁认为:“军队不可能而且也不应当保持中立”
  • 政治制度决定军事制度,政党制度的不同决定了党军关系的差异。不同的党情、国情和军情,必然会派生出不同的党军关系模式。

编译和链接

 #include <stdio.h>
  int main()
  {
  
          printf("Hello World\n");
          return 0;
  }

         
Linux 下 GCC 
1.预编译
gcc -E hello.c -o hello.i
或cpp hello.c>hello.i
2.编译
gcc -S hello.i -o hello.s

以上可以通过:gcc -S hello.i -o hello.s
也可以直接调用/usr/lib/gcc/i486-linux-gnu/4.3/ccl hello.c
3.汇编
  as hello.s -o hello.o
或者 gcc -c hello.s -o hello.o
以上过程可以直接:gcc -c hello.c -o hello.o
4.链接 
ld -static /usr/lib/crt1.o /usr/lib/crti.o
 /usr/lib/gcc/i486-linux-gnu/4.3/crtbeginT.o 
-L/usr/lib/gcc/i486-linux-gnu/4.3 -L/usr/lib 
-L/lib hello.o --start-group -lgcc -lgcc_eh -lc 
--end-group /usr/lib/gcc/i486-linux-gnu/4.3/crtend.o
 /usr/lib/crtn.o

Vim

在终端 输入以下命令来编辑vimrc配置文件:
sudo vim /etc/vim/vimrc 或者 sudo gedit /etc/vim/vimrc

1、显示行号

在文件末端添加一新行,输入 set nu

2、语法高亮
在文件中找到 “syntax on   这一行,去掉前面的双引号”,双引号是注释的意思

3、自动缩进

在文件末尾添加一行,输入  set autoindent
在添加一行,输入         set cindent
其中 autoindent 是自动缩进; cindent是特别针对 C语言语法自动缩进

注意:如果设置好以上设置后,VIM没有作出相应的动作,那么请你把你的VIM升级到最新版,一般只要在终端输入以下命令即可:sudo apt-get install vim

set showmatch “高亮显示匹配的括号

set tabstop=4 “设置tab键为4个空格

4.代码格式化

格式化全文: gg=G

自动缩进当前行: ==

格式化当前光标接下来的10行: 10=

格式化选定的行: v   (向上下选择)=

5. 改变窗口大小 *window-resize*

                                                *CTRL-W_=*
CTRL-W =        使得所有窗口 (几乎) 等宽、等高,但当前窗口使用 'winheight' 和
                'winwidth'。

:res[ize] -N                                    *:res* *:resize* *CTRL-W_-*
CTRL-W -        使得当前窗口高度减 N (默认值是 1)。
                如果在 'vertical' 之后使用,则使得宽度减 N。

:res[ize] +N                                    *CTRL-W_+*
CTRL-W +        使得当前窗口高度加 N (默认值是 1)。
                如果在 'vertical' 之后使用,则使得宽度加 N。

:res[ize] [N]
CTRL-W CTRL-_                                   *CTRL-W_CTRL-_* *CTRL-W__*
CTRL-W _        设置当前窗口的高度为 N (默认值为最大可能高度)。

z{nr}<CR>       设置当前窗口的高度为 {nr}*<a name="CTRL-W_CTRL-W_<*
CTRL-W <        使得当前窗口宽度减 N (默认值是 1)。

                                                *">CTRL-W_>*
CTRL-W >        使得当前窗口宽度加 N (默认值是 1)。

:vertical res[ize] [N]                  *:vertical-resize* *CTRL-W_bar*
CTRL-W |        设置当前窗口的宽度为 N (默认值为最大可能宽度)。

布线问题 分支限界

//============================================================================
// Name        : lab6_1_2.cpp
// Author      : Binda
// Version     :
// Copyright   : Copyright © 2010- 2011
// Description :布线问题
//============================================================================

#include <iostream>
#include<stdio.h>
using namespace std;
#define N 8
typedef struct {
	int row;
	int col;
} Position;
typedef struct {
	//struct Position;
	int row[10000];
	int col[10000];
	int end;
	int begin;
} Queue;
int grid[100][100];
Position start, finish;
int PathLen = 0;
Position * path;
int n, m, a, b, x;
void printGrid()
{
	 for(int i=0;i<N+2;i++){
				  for(int j=0;j<N+2;j++)
				  {
				     printf(" %.2d",grid[i][j]);
				  }
				  cout<<endl;
		}
}
bool FindPath(Position start, Position finish) {//计算从起点位置start到目标位置finish的最短布线路径,找到最短布线路//径则返回true,否则返回false
	if ((start.row == finish.row) && (start.col == finish.col)) {
		PathLen = 0;
		return true;
	} //start=finish
	//设置方格阵列“围墙”
	int i;
	for (i = 0; i <= m + 1; i++)
		grid[0][i] = grid[n + 1][i] = 1; //顶部和底部
	for (i = 0; i <= n + 1; i++)
		grid[i][0] = grid[i][m + 1] = 1; //左翼和右翼
	int j;
	//初始化相对位移
	Position offset[4];
	offset[0].row = 0;
	offset[0].col = 1;//右
	offset[1].row = 1;
	offset[1].col = 0;//下
	offset[2].row = 0;
	offset[2].col = -1;//左
	offset[3].row = -1;
	offset[3].col = 0;//上
	int NumOfNbrs = 4;//相邻方格数
	Position here, nbr;
	here.row = start.row;
	here.col = start.col;
	grid[start.row][start.col] = 2;
	//标记可达方格位置
	//LinkedQueue<Position> Q;
	Queue Q;
	Q.end = 0;
	Q.begin = 0;
	do {//标记相邻可达方格
		for (i = 0; i < NumOfNbrs; i++) {
			nbr.row = here.row + offset[i].row;
			nbr.col = here.col + offset[i].col;
			if (grid[nbr.row][nbr.col] == 0) {
				//该方格未被标记
				grid[nbr.row][nbr.col] = grid[here.row][here.col] + 1;//统计步数
				if ((nbr.row == finish.row) && (nbr.col == finish.col))
					break; //完成布线
				//Q.Add(nbr);
				Q.col[Q.end] = nbr.col;
				Q.row[Q.end] = nbr.row;
				Q.end++;
			}
		}
		//是否到达目标位置finish?
		if ((nbr.row == finish.row) && (nbr.col == finish.col)){
			//return true;
			break;//完成布线
		}
		//活结点队列是否非空?
		if (Q.begin == Q.end)
			return false;//无解
		else {
			here.row = Q.row[Q.begin];
			here.col = Q.col[Q.begin];
			Q.begin++;//取下一个扩展结点
		}
	} while (true);
	//构造最短布线路径
	PathLen = grid[finish.row][finish.col] - 2;
	path = new Position[PathLen];
	//从目标位置finish开始向起始位置回溯
	here = finish;
	for (j = PathLen - 1; j >= 0; j--) {
		path[j] = here;
		//找前驱位置
		for (i = 0; i < NumOfNbrs; i++) {
			nbr.row = here.row + offset[i].row;
			nbr.col = here.col + offset[i].col;
			if (grid[nbr.row][nbr.col] == j + 2)
				break;
		}
		here = nbr;//向前移动
	}
	return true;
}
int main() {
	int j;
	printf("输入电路板区域n*m和封锁的格数x:\n");
	//  cin>>n>>m>>x;
	n = 8;
	m = 8;
	// x=16;
	//printf("输入封锁的坐标:\n");
	for (a = 0; a < n + 2; a++)
		for (b = 0; b < m + 2; b++)
			grid[a][b] = 0;

	/* for( x = x ; x >= 1 ; x -- )
	 {
	 cin >> a >> b ;
	 grid[a][b]= 1;
	 }*/
	//设置障碍
	for (int i = 1; i <= 5; i++)
		for (int j = 4; j <= 5; j++)
			grid[i][j] = 1;

	for (int i = 6; i <= 8; i++)
		for (int j = 7; j <= 8; j++)
			grid[i][j] = 1;
     printGrid();
	//printf("输入起始位置和结束位置:\n");
	//cin>>start.row>>start.col>>finish.row>>finish.col;
	start.row = 3;
	start.col = 2;
	finish.row =5;
	finish.col = 6;
	if (FindPath(start, finish)) {
		printf("输出路径长度及途中坐标:");
		cout << PathLen << endl;
		cout << start.row << " " << start.col << endl;
		for (j = 0; j < PathLen; j++)
			cout << path[j].row << " " << path[j].col << endl;
	} else
	cout << "No Solution!" << endl;
	printGrid();
	delete[] path;
	return 0;
}

svn 命令 (更新中)

1.删除文件内容
svn rm https://algorithm-proj.googlecode.com/svn/trunk/lab6/lab6_1 -m "It's totally a mesh"
 
2. 取出文件夹内容
svn checkout https://algorithm-proj.googlecode.com/svn/trunk/demo/LCS
3. 列出文件夹内容
svn ls https://algorithm-proj.googlecode.com/svn/trunk/demo/LCS
4.提交
svn commit /home/binda/LCS -m "JUST TEST SVN ON LINUX"