home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AmigActive 6
/
AACD06.ISO
/
AACD
/
Programming
/
DOpus4-GPL
/
Program
/
assembly.asm
< prev
next >
Wrap
Assembly Source File
|
2000-01-27
|
6KB
|
390 lines
; Directory Opus 4
; Original GPL release version 4.12
; Copyright 1993-2000 Jonathan Potter
;
; This program is free software; you can redistribute it and/or
; modify it under the terms of the GNU General Public License
; as published by the Free Software Foundation; either version 2
; of the License, or (at your option) any later version.
;
; This program is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
; GNU General Public License for more details.
;
; You should have received a copy of the GNU General Public License
; along with this program; if not, write to the Free Software
; Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
;
; All users of Directory Opus 4 (including versions distributed
; under the GPL) are entitled to upgrade to the latest version of
; Directory Opus version 5 at a reduced price. Please see
; http://www.gpsoft.com.au for more information.
;
; The release of Directory Opus 4 under the GPL in NO WAY affects
; the existing commercial status of Directory Opus 5.
* include "exec/types.i"
include "devices/inputevent.i"
*STRUCTURE RLEinfo,0
* APTR rle_sourceptr
* APTR rle_destplanes
* WORD rle_imagebpr
* WORD rle_imageheight
* WORD rle_imagedepth
* WORD rle_destbpr
* WORD rle_destheight
* WORD rle_destdepth
* BYTE rle_masking
* BYTE rle_compression
* LONG rle_offset
* LABLE rle_SIZEOF
_LVORawDoFmt equ -$20a
VIEW_FILE_SIZE equ 0
VIEW_MAX_LINE_LENGTH equ 4
VIEW_TAB_SIZE equ 8
VIEW_TEXT_BUFFER equ 12
XREF _WorkbenchBase
section code
XDEF _lsprintf
_lsprintf:
movem.l a2/a3/a6,-(sp)
move.l 4*4(sp),a3
move.l 5*4(sp),a0
lea.l 6*4(sp),a1
lea.l stuffChar(pc),a2
move.l 4,a6
jsr _LVORawDoFmt(a6)
movem.l (sp)+,a2/a3/a6
rts
stuffChar:
move.b d0,(a3)+
rts
XDEF _countlines
_countlines:
movem.l d2-d5/a2,-(sp) ; save registers
move.l VIEW_FILE_SIZE(a0),d1
move.l VIEW_MAX_LINE_LENGTH(a0),d2
move.l VIEW_TEXT_BUFFER(a0),a0
* D1 = viewsize
* D2 = maximum line length
* A0 = buffer
* ---
* D0 = number of lines
* D3 = number of characters counted
* D5 = earliest position to wordwrap from
* A1 = last white space character (for wordwrap)
moveq #0,d0
moveq #0,d3
move.l d2,d5
sub.l #10,d5
move.l #0,a1
loop:
addq #1,d3
cmp.l d2,d3
bne skip1
cmp.l #0,a1
beq nolastspace
move.l a0,a2
sub.l a1,a2
cmp.l d5,a2
bge nolastspace
add.l a2,d1
move.l a1,a0
nolastspace:
move.b #10,(a0)
addq #1,d0
moveq #0,d3
sub.l a1,a1
bra skip3
skip1:
cmpi.b #10,(a0)
bne skip2
sub.l a1,a1
addq #1,d0
moveq #0,d3
bra skip3
skip2:
cmpi.b #9,(a0)
bne skip3
move.b #32,(a0)
skip3:
cmpi.b #32,(a0)
bne notspace
move.l a0,a1
notspace:
subq.l #1,d1
cmpi.l #0,d1
beq endcountlines
addq.l #1,a0
bra loop
endcountlines:
cmpi.b #10,(a0)
beq lastlf
addq #1,d0
lastlf:
movem.l (sp)+,d2-d5/a2
rts
XDEF _smartcountlines
_smartcountlines:
movem.l d2-d7/a2,-(sp)
move.l VIEW_FILE_SIZE(a0),d1
move.l d1,d7
move.l VIEW_MAX_LINE_LENGTH(a0),d2
move.l VIEW_TEXT_BUFFER(a0),a0
moveq #0,d0
moveq #0,d3
moveq #0,d4
move.l d2,d5
sub.l #10,d5
moveq #0,d6
move.l #0,a1
aloop:
addq #1,d3
cmp.l d2,d3
bne askip1
cmp.l #0,a1
beq nolastspace1
move.l a0,a2
sub.l a1,a2
cmp.l d5,a2
bge nolastspace1
add.l a2,d1
move.l a1,a0
nolastspace1:
move.b #10,(a0)
sub.l a1,a1
addq #1,d0
moveq #0,d3
bra askip2
askip1:
cmpi.b #-33,(a0)
blt aokay
cmpi.b #-1,(a0)
ble aishex
cmpi.b #9,(a0)
blt aishex
cmpi.b #14,(a0)
blt aokay
cmpi.b #32,(a0)
blt aishex
cmpi.b #128,(a0)
blt aokay
cmpi.b #160,(a0)
bge aokay
aishex:
cmpi.l #6,d7
blt nomorecheck
addq #1,d4
cmpi.l #6,d4
bge nomorecheck
cmpi.b #27,(a0)
bne aokay1
moveq #1,d6
bra aokay1
nomorecheck:
move.l #-1,d0
movem.l (sp)+,d2-d7/a2
rts
aokay:
moveq #0,d4
cmpi.b #1,d6
bne aokay1
cmpi.b #'[',(a0)
beq isansi
moveq #0,d6
bra aokay1
isansi:
move.l #-2,d0
movem.l (sp)+,d2-d7/a2
rts
aokay1:
cmpi.b #10,(a0)
bne askip2
sub.l a1,a1
addq #1,d0
moveq #0,d3
askip2:
cmpi.b #32,(a0)
bne notspace1
move.l a0,a1
notspace1:
subq.l #1,d1
cmpi.l #0,d1
beq endsmartcount
addq.l #1,a0
bra aloop
endsmartcount:
cmpi.b #10,(a0)
beq lastlf1
addq #1,d0
lastlf1:
movem.l (sp)+,d2-d7/a2
rts
XDEF _ansicountlines
tabsize:
dc.l 0
_ansicountlines:
movem.l d2-d7/a2,-(sp)
move.l VIEW_TAB_SIZE(a0),d0
move.l d0,tabsize
move.l VIEW_FILE_SIZE(a0),d1
move.l VIEW_MAX_LINE_LENGTH(a0),d2
move.l VIEW_TEXT_BUFFER(a0),a0
moveq #0,d0
moveq #0,d3
move.l d2,d5
sub.l #10,d5
moveq #0,d6
move.l tabsize,d7
move.l #0,a1
nloop:
cmpi.b #32,(a0)
bge notillegal
cmpi.b #0,(a0)
blt notillegal
cmpi.b #9,(a0)
beq notillegal
cmpi.b #10,(a0)
beq notillegal
cmpi.b #27,(a0)
beq notillegal
move.b #' ',(a0)
bra nottab
notillegal:
cmpi.b #27,(a0)
bne notescape
moveq #1,d6
bra nnotspace
notescape:
cmpi.b #1,d6
bne notansi
cmpi.b #';',(a0)
beq nnotspace
cmpi.b #'[',(a0)
beq nnotspace
cmpi.b #'0',(a0)
blt endansi
cmpi.b #'9',(a0)
ble nnotspace
endansi:
moveq #0,d6
bra nnotspace
notansi:
cmpi.b #9,(a0)
bne nottab
add.l d7,d3
move.l tabsize,d7
bra notnexttab
nottab:
addq #1,d3
subq #1,d7
cmpi.b #0,d7
bgt notnexttab
move.l tabsize,d7
notnexttab:
cmp.l d2,d3
blt nskip1
cmp.l #0,a1
beq nnolastspace
move.l a0,a2
sub.l a1,a2
cmp.l d5,a2
bge nnolastspace
add.l a2,d1
move.l a1,a0
nnolastspace:
move.b #10,(a0)
addq #1,d0
moveq #0,d3
moveq #0,d6
move.l tabsize,d7
sub.l a1,a1
bra nskip2
nskip1:
cmpi.b #10,(a0)
bne nskip2
sub.l a1,a1
addq #1,d0
moveq #0,d3
moveq #0,d6
move.l tabsize,d7
nskip2:
cmpi.b #32,(a0)
beq isspace
cmpi.b #9,(a0)
bne nnotspace
isspace:
move.l a0,a1
nnotspace:
addq.l #1,a0
subq.l #1,d1
cmpi.l #0,d1
bgt nloop
movem.l (sp)+,d2-d7/a2
rts
XDEF _removetabs
_removetabs:
move.l VIEW_FILE_SIZE(a0),d1
move.l VIEW_TEXT_BUFFER(a0),a0
moveq #0,d0
rloop:
cmpi.b #9,(a0)
bne rskip
move.b #' ',(a0)
rskip:
addq.l #1,a0
subq.l #1,d1
cmpi.l #0,d1
bgt rloop
rts
XDEF _filteroff
_filteroff:
btst.b #1,$bfe001
bne alreadyon
bset.b #1,$bfe001
moveq.l #1,d0
rts
alreadyon:
moveq.l #0,d0
rts
XDEF _filteron
_filteron:
bclr.b #1,$bfe001
rts
end