📄 e3.s
字号:
.include "macros" @@ ************ BEGIN including e3.h ************.equ WS,1.equ EM,2.equ PI,4.equ VI,8.equ NE,16.equ DEFAULT_MODE,1.equ MAKE_BACKUP,1 @(no value known).equ LESSWRITEOPS,1 @(no value known).equ BEEP_IN_VI,1 @(no value known).equ USE_BUILTINHELP,1 @(no value known).ifdef BEOS .else .ifdef QNX .else .ifdef ATHEOS .else .ifdef LINUX .equ TERMIOS_SET,21506.equ TERMIOS_GET,21505.equ TERMIOS_WSIZE,21523.equ NCCS,19.equ VMIN,6.equ UIDGID_WORD,1 @(no value known).struct 0stat_struc.st_dev:.struct 4stat_struc.st_ino:.struct 8stat_struc.st_mode:.struct 10stat_struc.st_nlink:.struct 12stat_struc.st_uid:.struct 14stat_struc.st_gid:.struct 16stat_struc.st_rdev:.struct 20stat_struc.st_size:.struct 24stat_struc.st_blksize:.struct 28stat_struc.st_blocks:.struct 32stat_struc.st_atime:.struct 36stat_struc.__unused1:.struct 40stat_struc.st_mtime:.struct 44stat_struc.__unused2:.struct 48stat_struc.st_ctime:.struct 52stat_struc.__unused3:.struct 56stat_struc.__unused4:.struct 60stat_struc.__unused5:.struct 64.equ stat_struc_size,64.equ SYS_exit,1.equ SYS_fork,2.equ SYS_read,3.equ SYS_write,4.equ SYS_open,5.equ SYS_close,6.equ SYS_unlink,10.equ SYS_execve,11.equ SYS_lseek,19.equ SYS_utime,30.equ SYS_kill,37.equ SYS_rename,38.equ SYS_pipe,42.equ SYS_brk,45.equ SYS_ioctl,54.equ SYS_dup2,63.equ SYS_sigaction,67.equ SYS_readlink,85.equ SYS_fchown,95.equ SYS_fstat,108.equ SYS_wait4,114.equ SYS_select,142.ifndef ARMCPU .else .struct 0utimbuf_struc.actime:.struct 4utimbuf_struc.modtime:.struct 8.equ utimbuf_struc_size,8.endif .ifdef CRIPLED_ELF .endif .equ CURSORMGNT,1 @(no value known).equ SIGCONT,18.equ SIGSTOP,19.equ CAPTURE_STDERR,1 @(no value known).ifdef EX .else .purgem USE_EX_NO_SED .ifndef PERLPIPE .equ SEDPATH,0.else .endif .endif .equ MAXERRNO,32.equ ERRNOMEM,12.equ ERRNOIO,5.equ ERRNOEXEC,31.macro errortext .ascii "Op not permitted".byte 10.ascii "No such file|directory".byte 10.byte 10.byte 10.ascii "Input/output".byte 10.ascii "No such device".byte 10.byte 10.byte 10.ascii "Bad file descriptor".byte 10.ascii "No child processes".byte 10.byte 10.ascii "Memory exhausted".byte 10.ascii "Permission denied".byte 10.byte 10.byte 10.ascii "Device|resource busy".byte 10.ascii "File exists".byte 10.byte 10.ascii "No such device".byte 10.byte 10.ascii "Is a directory".byte 10.ascii "Invalid argument".byte 10.ascii "Too many open files".byte 10.ascii "Too many open files".byte 10.ascii "Inappropriate ioctl".byte 10.ascii "Text file busy".byte 10.ascii "File too large".byte 10.ascii "No space on device".byte 10.ascii "Illegal seek".byte 10.ascii "R/O file system".byte 10.ascii "Can't exec ".ifdef USE_EX_NO_SED .else .byte '/','b','i','n','/','s','e','d',10.endif .ascii "Broken pipe".byte 10.endm .ifdef LIBC .endif .ifdef ARMCPU .purgem USE_MATH .purgem USE_UNDO .purgem USE_PIPE .endif .else .ifdef FREEBSD .ifdef EX .else .ifndef PERLPIPE .else .endif .endif .ifdef USE_EX_NO_SED .else .endif .ifdef LIBC .endif .else .ifdef W32 .else .endif .endif .endif .endif .endif .endif .ifdef TERMIOS_SET .ifdef ARMCPU .struct 0termios_struc.c_iflag:.struct 4termios_struc.c_oflag:.struct 8termios_struc.c_cflag:.struct 12termios_struc.c_lflag:.struct 16termios_struc.c_line:.struct 17termios_struc.c_cc:.struct 36.equ termios_struc_size,36.else .ifdef speed_t1 .endif .ifdef speed_t2 .endif .ifdef speed_t3 .endif .endif .struct 0winsize_struc.ws_row:.struct 2winsize_struc.ws_col:.struct 4winsize_struc.ws_xpixel:.struct 6winsize_struc.ws_ypixel:.struct 8.equ winsize_struc_size,8.ifndef IXON .endif .endif .ifndef LINUX .endif .ifdef LESSWRITEOPS .equ LESSWRITEOPS_OR_CURSORMGNT,1 @(no value known).endif .ifdef CURSORMGNT .equ LESSWRITEOPS_OR_CURSORMGNT,1 @(no value known).endif .equ stdtxtlen,10.ifdef FREEBSD .else .ifdef QNX .else .equ O_WRONLY_CREAT_TRUNC,577.endif .endif .equ O_RDONLY,0.equ PERMS,420.equ stdin,0.equ stdout,1.equ optslen,124.equ TAB,8.equ TABCHAR,9.equ SPACECHAR,32.equ CHANGED,42.equ UNCHANGED,SPACECHAR.equ LINEFEED,10.equ NEWLINE,LINEFEED.equ RETURN,13.equ SEDBLOCK,4096.ifdef CRIPLED_ELF .endif .ifndef ARMCPU .ifdef USE_SPECIAL_HEADER .ifdef TINLINK .else .endif .else .endif .endif .ifdef DYN .endif @@ ************ END include ************.text.code 32ORGheader:.global _start_start: CALL SetTermStruc.ifdef SELFTEST .else .ifdef W32 .else .ifdef BEOS .else .ifdef DYN .else .ifdef SYS_sigaction CALL SetSigHandler.endif .ifdef ATHEOS .endif ldmfd r13!,{r3} ldmfd r13!,{r5} mov r7,#+1prog: ldrb r12,[r5] add r5,r5,r7 and r12,r12,#0xFF bic r0,r0,#0xFF orr r0,r0,r12 mov r12,r0 and r12,r12,#0xFF mov r11,r0,lsl #24 mov r11,r11,lsr #24 orrs r11,r11,r12 and r11,r11,#0xFF bic r0,r0,#0xFF orr r0,r0,r11 bne prog mov r9,r5 mov r10,#0x5 sub r9,r9,r10 mov r5,R9 CALL SetEditMode beq prog1 ldr r11,= DEFAULT_MODE strB r11,[r0]prog1: ldmfd r13!,{r5}.endif .endif .endif .endif .ifdef CURSORMGNT orrs r5,r5,r5 beq moreenvmorearg: ldmfd r13!,{r2} orrs r2,r2,r2 bne moreargmoreenv: ldmfd r13!,{r2} cmp r2,#0 beq ReStart.ifndef ARMCPU .else mov r11,#0x54 ldrB r10,[r2] cmp r10,r11 bne moreenv mov r9,r2 mov r10,#0x1 add r9,r9,r10 mov r11,#0x45 ldrB r10,[R9] cmp r10,r11 bne moreenv mov r9,r2 mov r10,#0x2 add r9,r9,r10 mov r11,#0x52 ldrB r10,[R9] cmp r10,r11 bne moreenv mov r9,r2 mov r10,#0x3 add r9,r9,r10 mov r11,#0x4d ldrB r10,[R9] cmp r10,r11 bne moreenv mov r9,r2 mov r10,#0x5 add r9,r9,r10 mov r11,#0x6c ldrB r10,[R9] cmp r10,r11 bne ReStart mov r9,r2 mov r10,#0x6 add r9,r9,r10 mov r11,#0x69 ldrB r10,[R9] cmp r10,r11 bne ReStart mov r9,r2 mov r10,#0x7 add r9,r9,r10 mov r11,#0x6e ldrB r10,[R9] cmp r10,r11 bne ReStart mov r9,r2 mov r10,#0x8 add r9,r9,r10 mov r11,#0x75 ldrB r10,[R9] cmp r10,r11.endif bne ReStart A_DR r12,revvoff ldr r11,= boldlen ldrB r10,[r12] adds r10,r10,r11 strB r10,[r12].endif ReStart: CALL NewFile blo E3exitMainCharLoop: CALL ChkCursPos CALL IsViMode bne MCL A_DR r12,blockbegin ldr r2,[r12] cmp r2,#0 beq MCL stmfd r13!,{r4} mov r4,r2 CALL KeyEnd A_DR r12,blockende str r4,[r12] ldmfd r13!,{r4} CALL ShowBl1MCL: CALL DispNewScreen CALL RestoreStatusLine CALL HandleChar.ifdef W32LF .endif A_DR r1,endeedit mov r11,#0x0 ldrB r10,[r1] cmp r10,r11 beq MainCharLoop eors r5,r5,r5 mov r11,#0x2 ldrB r10,[r1] cmp r10,r11 beq ReStartE3exit: CALL KursorStatusLine.ifdef W32 .endif A_DR r2,text CALL WriteFile00 A_DR r1,tempfile2 CALL Unlink.ifdef W32 .else ldr r2,= TERMIOS_SET CALL IOctlTerminal0 b Exit.endif HandleChar: CALL ReadChar mov r12,#0xff mov r11,r0,lsl #16 mov r11,r11,lsr #24 cmp r11,r12 bne ExtAscii A_DR r5,mode mov r11,#0x6 ldrB r10,[r5] tst r10,r11 beq NO_EM01 mov r12,#0xb mov r11,r0,lsl #24 mov r11,r11,lsr #24 cmp r11,r12 beq IsCtrlK A_DR r12,EmaCtrlK mov r11,#0x0 strB r11,[r12]IsCtrlK: mov r12,#0x13 mov r11,r0,lsl #24 mov r11,r11,lsr #24 cmp r11,r12 beq IsCtrlS mov r12,#0x12 mov r11,r0,lsl #24 mov r11,r11,lsr #24 cmp r11,r12 beq IsCtrlS A_DR r12,EmaCtrlS mov r11,#0x0 strB r11,[r12]IsCtrlS:NO_EM01: ldr r11,= VI ldrB r10,[r5] cmp r10,r11 beq ISVI1 mov r12,#0x20 mov r11,r0,lsl #24 mov r11,r11,lsr #24 cmp r11,r12 bhs NormChar mov r12,r0 and r12,r12,#0xFF bic r1,r1,#0xFF orr r1,r1,r12 ldr r12,= jumps1 mov r11,r1,lsl #24 mov r11,r11,lsr #24 adds r11,r11,r12 and r11,r11,#0xFF bic r1,r1,#0xFF orr r1,r1,r11 ldr r11,= WS ldrB r10,[r5] cmp r10,r11 beq CJump mov r12,#0x20 mov r11,r1,lsl #24 mov r11,r11,lsr #24 adds r11,r11,r12 and r11,r11,#0xFF bic r1,r1,#0xFF orr r1,r1,r11 ldr r11,= EM ldrB r10,[r5] cmp r10,r11 beq CJump mov r12,#0x20 mov r11,r1,lsl #24 mov r11,r11,lsr #24 adds r11,r11,r12 and r11,r11,#0xFF bic r1,r1,#0xFF orr r1,r1,r11 ldr r11,= PI ldrB r10,[r5] cmp r10,r11 beq CJump mov r12,#0x20 mov r11,r1,lsl #24 mov r11,r11,lsr #24 adds r11,r11,r12 and r11,r11,#0xFF bic r1,r1,#0xFF orr r1,r1,r11CJump: b CompJump2ISVI1: mov r12,#0x7 mov r11,r0,lsl #24 mov r11,r11,lsr #24 cmp r11,r12 beq KeyDel mov r12,#0x8 mov r11,r0,lsl #24 mov r11,r11,lsr #24 cmp r11,r12 beq KeyDell ldr r12,= RETURN mov r11,r0,lsl #24 mov r11,r11,lsr #24 cmp r11,r12 beq KeyRetNormChar: A_DR r12,mode mov r11,#0x6 ldrB r10,[r12] tst r10,r11 beq NOEM0 CALL ShowBl0NOEM0: CALL CheckMode.ifdef USE_UNDO .else bne OverWriteChar.endif NormCh2: stmfd r13!,{r0}.ifdef W32LF .endif CALL Insert1Byte ldmfd r13!,{r0} blo InsWriteEndOverWriteChar: mov r7,#+1 strb r0,[r4] add r4,r4,r7SetChg: A_DR r12,changed ldr r11,= CHANGED strB r11,[r12]InsWriteEnd: RETKeyVICmdr: CALL ReadOneChar ldr r11,= NEWLINE ldrB r10,[r4] cmp r10,r11 beq InsWriteEnd ldr r12,= RETURN mov r11,r0,lsl #24 mov r11,r11,lsr #24 cmp r11,r12 bne KeyVICmdr1 ldr r12,= NEWLINE bic r0,r0,#0xFF orr r0,r0,r12KeyVICmdr1:.ifdef USE_UNDO .endif KeyVICmdr2: strB r0,[r4] b SetChgKeyEmaCtrlQ: A_DR r5,asknumber CALL GetOctalToInteger bls InsWriteEnd mov r12,r2 mov r2,r0 mov r0,r12 mov r11,#0x0 mov r8,#0x1 add r11,r11,r8,lsl #8 cmp r0,r11 blo NormCh2 RETCtrlKMenu: A_DR r1,Ktable mov r12,#0x4b bic r0,r0,#0xFF orr r0,r0,r12 b MenuCtrlQMenu: A_DR r1,Qtable b PicoQMPicoJMenu: A_DR r1,PicoJtable mov r12,#0x4a bic r0,r0,#0xFF orr r0,r0,r12 b MenuPicoQMenu: A_DR r1,PicoQtablePicoQM: mov r12,#0x51 bic r0,r0,#0xFF orr r0,r0,r12 b MenuCtrlXMenu: A_DR r1,Xtable mov r12,#0x58 bic r0,r0,#0xFF orr r0,r0,r12Menu: mov r2,#0x5e mov r8,#0x20 add r2,r2,r8,lsl #8 mov r8,#0x20 add r2,r2,r8,lsl #16 mov r8,#0x20 add r2,r2,r8,lsl #24 mov r12,r0 and r12,r12,#0xFF bic r2,r2,#0xFF00 orr r2,r2,r12,lsl #8MakeScanCode: CALL WriteTwo stmfd r13!,{r1} CALL GetChar ldmfd r13!,{r1} mov r12,#0x1f mov r11,r0,lsl #24 mov r11,r11,lsr #24 ands r11,r11,r12 and r11,r11,#0xFF bic r0,r0,#0xFF orr r0,r0,r11 ldr r12,= Ktable_size mov r11,r0,lsl #24 mov r11,r11,lsr #24 cmp r11,r12 bhs InsWriteEnd and r12,r0,#0xFF ldrB r12,[r1,r12] bic r0,r0,#0xFF orr r0,r0,r12 mov r12,r0 and r12,r12,#0xFF bic r0,r0,#0xFF00 orr r0,r0,r12,lsl #8ExtAscii: mov r12,r0,lsr #8 and r12,r12,#0xFF bic r1,r1,#0xFF orr r1,r1,r12 ldr r12,= jumps1 mov r11,r1,lsl #24 mov r11,r11,lsr #24 cmp r11,r12 bhs InsWriteEnd eors r0,r0,r0 A_DR r12,EmaCtrl str r0,[r12]CompJump2: mov r12,#0x0 bic r1,r1,#0xFF00 orr r1,r1,r12,lsl #8 mov r1,r1 mov r1,r1,lsl #16 mov r1,r1,lsr #16 mov r9,r1 mov r10,#0x2 mov r8,r9 mul r9,r8,r10 A_DR r10,jumptab1 add r9,r9,r10 ldrH r1,[R9] A_DR r11,_start adds r1,r1,r11 stmfd r13!,{r14} add r14,pc,#4 mov pc,r1 mov r0,r0 mov r1,r1 mov r2,r2 mov r3,r3 ldmfd r13!,{r14} A_DR r12,numeriere mov r11,#0x1 ldrB r10,[r12] cmp r10,r11 bne BZNret stmfd r13!,{r4} A_DR r5,sot mov r12,r4 mov r4,r5 mov r5,r12 eors r3,r3,r3BZNLoop: mrs r8,CPSR and r8,r8,#0x20000000 mov r11,#0x1 adds r3,r3,r11 mrs r12,CPSR orrcc r12,r12,r8 msr CPSR_f,r12 CALL LookForward mrs r8,CPSR and r8,r8,#0x20000000 mov r11,#0x1 adds r4,r4,r11 mrs r12,CPSR orrcc r12,r12,r8 msr CPSR_f,r12 cmp r4,r5 bls BZNLoop A_DR r12,linenr str r3,[r12] ldmfd r13!,{r4} A_DR r12,numeriere mov r11,#0x0 strB r11,[r12]BZNret: RETKeyRetNoInd: eors r0,r0,r0 b KeyRetNIndKeyRet:.ifndef NO_AUTO_INDENT .ifdef SELFTEST .else CALL CheckMode bne OvrRet CALL CountToLineBegin mrs r8,CPSR and r8,r8,#0x20000000 mov r11,#0x1 adds r5,r5,r11 mrs r12,CPSR orrcc r12,r12,r8 msr CPSR_f,r12 mrs r8,CPSR and r8,r8,#0x20000000 mov r11,#0x1 adds r5,r5,r11 mrs r12,CPSR orrcc r12,r12,r8 msr CPSR_f,r12 orrs r0,r0,r0 beq KeyRetNInd mov r1,r0 eors r0,r0,r0 mrs r8,CPSR and r8,r8,#0x20000000 mov r11,#0x1 subs r0,r0,r11 mrs r12,CPSR orrcc r12,r12,r8 msr CPSR_f,r12KeyRetSrch: mrs r8,CPSR and r8,r8,#0x20000000 mov r11,#0x1 adds r0,r0,r11 mrs r12,CPSR orrcc r12,r12,r8 msr CPSR_f,r12 cmp r0,r1 bhs KeyRetNInd mov r9,r5 add r9,r9,r0 ldr r11,= SPACECHAR ldrB r10,[R9] cmp r10,r11 beq KeyRetSrch mov r9,r5 add r9,r9,r0 ldr r11,= TABCHAR ldrB r10,[R9] cmp r10,r11 beq KeyRetSrch.endif .else .endif KeyRetNInd: stmfd r13!,{r5} stmfd r13!,{r0} CALL GoDown ldmfd r13!,{r0} stmfd r13!,{r0}.ifdef W32LF .endif CALL InsertByte0 ldmfd r13!,{r2} ldmfd r13!,{r5} blo SimpleRet mrs r8,CPSR and r8,r8,#0x20000000 A_DR r12,linenr mov r11,#0x1 ldr r10,[r12] adds r10,r10,r11 str r10,[r12] mrs r12,CPSR orrcc r12,r12,r8 msr CPSR_f,r12 mov r7,#+1.ifdef W32LF .else ldr r12,= NEWLINE bic r0,r0,#0xFF orr r0,r0,r12 strb r0,[r4] add r4,r4,r7.endif cmp r2,#0 beq SimpleRet cmps r2,#0 addeq pc,pc,#16@reploop: ldrb r12,[r5] add r5,r5,r7
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -