mirror of
https://github.com/antoinevignau/source.git
synced 2025-01-17 12:31:16 +00:00
1 line
13 KiB
Plaintext
Executable File
1 line
13 KiB
Plaintext
Executable File
load 'macros.dump'
|
|
include 'driver.equ'
|
|
include 'wp.equ'
|
|
|
|
;-----------------------------------------------
|
|
;
|
|
; Imported addresses
|
|
;
|
|
;-----------------------------------------------
|
|
|
|
IMPORT D_BlinkButton
|
|
IMPORT W_CalcDocRect
|
|
IMPORT D_CloseDialog
|
|
IMPORT W_CurDoc
|
|
IMPORT X_DialogFromScrap
|
|
IMPORT X_DialogToScrap
|
|
IMPORT W_FindIt
|
|
IMPORT D_GetNewModalDialog
|
|
IMPORT W_InvalScroll
|
|
IMPORT W_ReplaceAll
|
|
IMPORT W_ReplaceFind
|
|
IMPORT W_ReplaceIt
|
|
IMPORT W_StartOver
|
|
IMPORT W_def_replace
|
|
IMPORT W_def_search
|
|
IMPORT W_FindRepDlg
|
|
IMPORT W_Hand
|
|
IMPORT W_ignoreValue
|
|
IMPORT W_Ptr
|
|
IMPORT Q_Rect
|
|
IMPORT W_Selected
|
|
IMPORT W_wholeValue
|
|
IMPORT W_Caret
|
|
IMPORT CaretOff
|
|
|
|
;-----------------------------------------------
|
|
;
|
|
; Forward addresses and entries
|
|
;
|
|
;-----------------------------------------------
|
|
|
|
ENTRY W_DispCharsIn
|
|
ENTRY W_DispCharsOut
|
|
ENTRY W_FindRepFilter
|
|
ENTRY W_FindRepWork
|
|
ENTRY W_FindReplace
|
|
ENTRY W_findactive
|
|
ENTRY W_foundonce
|
|
ENTRY W_hibounds
|
|
ENTRY W_lowbounds
|
|
ENTRY W_replactive
|
|
ENTRY W_visRect
|
|
****************************************************************
|
|
* ;
|
|
* FR.DIALOG -- drive the Find/Replace dialog ;
|
|
* ;
|
|
****************************************************************
|
|
|
|
|
|
********************************************************************
|
|
* Includes...
|
|
*
|
|
* Monday, May 1, 1989 1:51:41 AM
|
|
********************************************************************
|
|
|
|
|
|
|
|
|
|
|
|
****************************************************************
|
|
W_FindNext PROC EXPORT
|
|
;Using W_FRData
|
|
;Using W_FRdlgData
|
|
|
|
begin +b
|
|
|
|
pushlong #W_visRect ; get the docrect
|
|
jsl W_CalcDocRect
|
|
|
|
lda >W_def_search ; anything to find?
|
|
and #$ff
|
|
bne nodialog
|
|
|
|
jsl W_FindReplace ; if not, bring up the dialog
|
|
bra bye
|
|
|
|
nodialog jsl W_FindIt ; if so... well, you know.
|
|
|
|
bye return
|
|
|
|
ENDP
|
|
|
|
****************************************************************
|
|
W_FindReplace PROC EXPORT
|
|
;Using W_FRData
|
|
;Using W_FRdlgData
|
|
;Using WPGlobals
|
|
;Using ScreenData
|
|
|
|
local dialog:l,theitem:w
|
|
local W_Hand:l,W_Ptr:l,Q_Rect:r
|
|
|
|
begin +b
|
|
|
|
; compute the visRect and position
|
|
tool _SetPort,in=(W_CurDoc:l) ; the document
|
|
|
|
lda W_Caret
|
|
beq @nocaret
|
|
jsl CaretOff
|
|
@nocaret
|
|
|
|
pushlong #W_visRect ; get the docrect
|
|
jsl W_CalcDocRect
|
|
|
|
pushlong #W_visRect ; globalize it
|
|
_LocalToGlobal
|
|
pushlong #W_visRect+4
|
|
_LocalToGlobal
|
|
|
|
lda W_visRect ; too low to use the low bounds?
|
|
cmp W_lowbounds
|
|
bge usehigh
|
|
|
|
movelong W_lowbounds,>W_FindRepDlg
|
|
movelong W_lowbounds+4,>W_FindRepDlg+4
|
|
moveword W_lowbounds,W_visRect+4
|
|
bra gotvis
|
|
|
|
usehigh movelong W_hibounds,>W_FindRepDlg
|
|
movelong W_hibounds+4,>W_FindRepDlg+4
|
|
moveword W_hibounds,W_visRect
|
|
|
|
gotvis pushlong #W_visRect ; I've got the W_visRect, now localize
|
|
_GlobalToLocal
|
|
pushlong #W_visRect+4
|
|
_GlobalToLocal
|
|
|
|
moveword #1,W_replactive ; force W_Buttons to be turned off
|
|
moveword #1,W_findactive
|
|
moveword #0,W_foundonce
|
|
|
|
pushlong #W_def_replace
|
|
jsl W_DispCharsIn
|
|
pushlong #W_def_search
|
|
jsl W_DispCharsIn
|
|
|
|
jsl X_DialogFromScrap
|
|
|
|
spacelong
|
|
pushlong #W_FindRepDlg
|
|
jsl D_GetNewModalDialog
|
|
pulllong dialog
|
|
|
|
loop spaceword
|
|
pushlong #W_FindRepFilter+$80000000
|
|
_ModalDialog
|
|
pullword theitem
|
|
beq loop
|
|
|
|
cmp #$100 ; is it a button?
|
|
blt button
|
|
cmp #$200 ; is it a LineEdit thing?
|
|
blt edit
|
|
cmp #$300 ; is it a check box?
|
|
blt checkit
|
|
|
|
edit brl loop ; << nothing here >>
|
|
|
|
checkit spaceword
|
|
pushlong dialog
|
|
pushword theitem
|
|
_GetDItemValue
|
|
pla
|
|
eor #1
|
|
pha
|
|
pushlong dialog
|
|
pushword theitem
|
|
_SetDItemValue
|
|
|
|
brl loop
|
|
|
|
button jsr getOptions
|
|
|
|
lda theitem
|
|
cmp #6 ; Done?
|
|
beq done
|
|
dec a ; if not, do some real work
|
|
jtl W_FindRepWork
|
|
|
|
brl loop
|
|
|
|
done pushlong dialog
|
|
jsl D_CloseDialog
|
|
|
|
jsl X_DialogToScrap
|
|
|
|
jsl W_InvalScroll
|
|
|
|
return
|
|
*--------------------------------------------------------------*
|
|
* Get the values of the options check boxes ;
|
|
*--------------------------------------------------------------*
|
|
getOptions spaceword
|
|
spacelong
|
|
pushlong dialog
|
|
pushword #$202 ; D_Ignore case
|
|
_GetControlDItem
|
|
_GetCtlValue
|
|
pullword >W_ignoreValue
|
|
|
|
spaceword
|
|
spacelong
|
|
pushlong dialog
|
|
pushword #$203 ; Whole word(s)
|
|
_GetControlDItem
|
|
_GetCtlValue
|
|
pullword >W_wholeValue
|
|
|
|
rts
|
|
|
|
ENDP
|
|
|
|
****************************************************************
|
|
*
|
|
* W_FindRepFilter -- does all the special work while the dialog
|
|
* is active. The following W_Key translations are effected.
|
|
*
|
|
* W_Key MEANING
|
|
* -----------------------------------------------
|
|
* Apple-F/RETURN click Find Next
|
|
* Apple-R click Replace
|
|
* Apple-T click Replace, then Find
|
|
* Apple-A click Replace All
|
|
* Apple-1 click Go To Beginning
|
|
* Apple-D/ESC click Done
|
|
* Apple-I click D_Ignore Case
|
|
* Apple-W click Whole Word(s)
|
|
* Option-TAB Insert TAB in LineEdit record
|
|
* Option-return Insert return in LineEdit record
|
|
*
|
|
****************************************************************
|
|
W_FindRepFilter PROC EXPORT
|
|
;Using W_FRData
|
|
;Using W_FRdlgData
|
|
;Using WPGlobals
|
|
|
|
input dlgptr:l,eventptr:l,itemptr:l
|
|
output handled:w
|
|
local thekey:w,themods:w
|
|
|
|
begin +b
|
|
*--------------------------------------------------------------*
|
|
* First, check to see which W_Buttons should be active ;
|
|
*--------------------------------------------------------------*
|
|
pushlong dlgptr
|
|
pushword #$100 ; W_searchEdit
|
|
pushlong #W_def_search ; put this here so it sticks arounds
|
|
_GetIText
|
|
|
|
pushlong #W_def_search
|
|
jsl W_DispCharsOut
|
|
|
|
pushlong dlgptr
|
|
pushword #$101 ; W_replaceEdit
|
|
pushlong #W_def_replace
|
|
_GetIText
|
|
|
|
pushlong #W_def_replace
|
|
jsl W_DispCharsOut
|
|
|
|
lda >W_def_search ; get W_Search string length
|
|
and #$ff ; low byte
|
|
jeq nosearch
|
|
|
|
lda W_findactive ; was it already active?
|
|
jne checkreplace
|
|
|
|
inc W_findactive ; it is now!
|
|
|
|
pushword #0 ; D_Activate the control
|
|
spacelong
|
|
pushlong dlgptr
|
|
pushword #1 ; find next
|
|
_GetControlDItem
|
|
_HiliteControl
|
|
|
|
pushword #0 ; D_Activate the control
|
|
spacelong
|
|
pushlong dlgptr
|
|
pushword #4 ; replace all
|
|
_GetControlDItem
|
|
_HiliteControl
|
|
|
|
brl checkreplace ; check the replace string
|
|
|
|
nosearch lda W_findactive ; was it already inactive?
|
|
jeq keycheck
|
|
|
|
stz W_findactive ; it is now!
|
|
|
|
pushword #255 ; deactivate the control
|
|
spacelong
|
|
pushlong dlgptr
|
|
pushword #1 ; find next
|
|
_GetControlDItem
|
|
_HiliteControl
|
|
|
|
pushword #255 ; deactivate the control
|
|
spacelong
|
|
pushlong dlgptr
|
|
pushword #4 ; replace all
|
|
_GetControlDItem
|
|
_HiliteControl
|
|
|
|
brl noreplace
|
|
|
|
checkreplace lda W_Selected
|
|
jeq noreplace
|
|
lda W_foundonce
|
|
jeq noreplace
|
|
|
|
lda W_replactive
|
|
jne keycheck
|
|
|
|
inc W_replactive
|
|
|
|
pushword #0 ; D_Activate the control
|
|
spacelong
|
|
pushlong dlgptr
|
|
pushword #2 ; replace
|
|
_GetControlDItem
|
|
_HiliteControl
|
|
|
|
pushword #0 ; D_Activate the control
|
|
spacelong
|
|
pushlong dlgptr
|
|
pushword #3 ; replace, then find
|
|
_GetControlDItem
|
|
_HiliteControl
|
|
|
|
brl keycheck
|
|
|
|
noreplace lda W_replactive
|
|
jeq keycheck
|
|
|
|
stz W_replactive
|
|
|
|
pushword #255 ; deactivate the control
|
|
spacelong
|
|
pushlong dlgptr
|
|
pushword #2 ; replace
|
|
_GetControlDItem
|
|
_HiliteControl
|
|
|
|
pushword #255 ; deactivate the control
|
|
spacelong
|
|
pushlong dlgptr
|
|
pushword #3 ; replace, then find
|
|
_GetControlDItem
|
|
_HiliteControl
|
|
|
|
*--------------------------------------------------------------*
|
|
* Now check for W_Key equivalents ;
|
|
*--------------------------------------------------------------*
|
|
keycheck stz handled
|
|
|
|
lda [eventptr] ; event what
|
|
cmp #3 ; W_Key down
|
|
beq W_Key
|
|
cmp #5 ; auto W_Key
|
|
beq W_Key
|
|
brl exit
|
|
|
|
W_Key moveword [eventptr]:#2,thekey ; event message
|
|
|
|
cmpw theKey,#27 ; ESC?
|
|
bne notESC
|
|
lda #6 ; Done
|
|
ldx #1 ; simple button
|
|
jsr FakeButton
|
|
brl exit
|
|
|
|
notESC moveword [eventptr]:#$E,themods ; event modifiers
|
|
|
|
lda themods
|
|
and #$0100 ; is the apple W_Key down?
|
|
jeq notapple
|
|
*--------------------------------------------------------------*
|
|
* Check Apple W_Key equivalents ;
|
|
*--------------------------------------------------------------*
|
|
lda thekey
|
|
|
|
cmp #'f'
|
|
bne notFind
|
|
lda W_findactive
|
|
jeq exit
|
|
lda #1 ; Find Next
|
|
ldx #1 ; simple button
|
|
jsr FakeButton
|
|
brl exit
|
|
|
|
notFind cmp #'r'
|
|
bne notReplace
|
|
lda W_replactive
|
|
jeq exit
|
|
lda #2 ; Replace
|
|
ldx #1 ; simple button
|
|
jsr FakeButton
|
|
brl exit
|
|
|
|
notReplace cmp #'t'
|
|
bne notThen
|
|
lda W_replactive
|
|
jeq exit
|
|
lda #3 ; Replace, then Find
|
|
ldx #1 ; simple button
|
|
jsr FakeButton
|
|
brl exit
|
|
|
|
notThen cmp #'a'
|
|
bne notAll
|
|
lda W_findactive
|
|
jeq exit
|
|
lda #4 ; Replace All
|
|
ldx #1 ; simple button
|
|
jsr FakeButton
|
|
brl exit
|
|
|
|
notAll cmp #'i'
|
|
bne notIgnore
|
|
lda #$202 ; D_Ignore Case
|
|
ldx #2 ; check box
|
|
jsr FakeButton
|
|
brl exit
|
|
|
|
notIgnore cmp #'w'
|
|
bne notWhole
|
|
lda #$203 ; Whole Word(s)
|
|
ldx #2 ; check box
|
|
jsr FakeButton
|
|
brl exit
|
|
|
|
notWhole cmp #'1'
|
|
bne notStart
|
|
lda #5 ; Start Over
|
|
ldx #1 ; simple button
|
|
jsr FakeButton
|
|
brl exit
|
|
|
|
notStart cmp #'d'
|
|
bne notDone
|
|
lda #6 ; Done
|
|
ldx #1 ; simple button
|
|
jsr FakeButton
|
|
brl exit
|
|
|
|
notDone brl exit ; no more apple- things
|
|
*--------------------------------------------------------------*
|
|
* Check other W_Key equivalents ;
|
|
*--------------------------------------------------------------*
|
|
notApple lda themods
|
|
and #$0800 ; option?
|
|
beq notOption
|
|
|
|
lda theKey
|
|
cmp #9 ; Tab?
|
|
bne notTab
|
|
moveword #$4,[eventptr]:#2
|
|
brl exit
|
|
|
|
notTab cmp #13 ; return?
|
|
bne notReturn
|
|
moveword #$5,[eventptr]:#2
|
|
|
|
notReturn brl exit
|
|
|
|
notOption lda theKey
|
|
cmp #9 ; tab?
|
|
beq keepkey
|
|
cmp #8 ; <-?
|
|
beq keepkey
|
|
cmp #21 ; ->?
|
|
beq keepkey
|
|
cmp #32 ; normal W_Char?
|
|
bge keepkey
|
|
cmp #13 ; return?
|
|
bne nokey ; Don't let bogus char's through!
|
|
|
|
lda W_findactive ; let CR thru only if find is active
|
|
beq nokey ; (I don't want junk in my LE fields!)
|
|
|
|
keepkey brl exit
|
|
|
|
nokey inc handled ; I 'handled' it. Go away.
|
|
moveword #0,[itemptr]
|
|
|
|
exit return ; You do it.
|
|
*--------------------------------------------------------------*
|
|
* Fake a D_MouseDown on a control. A = item ID, X = ctl type ;
|
|
*--------------------------------------------------------------*
|
|
FakeButton sta [itemptr]
|
|
|
|
cpx #1
|
|
bne noblink
|
|
|
|
pushlong dlgptr
|
|
pushword [itemptr]
|
|
jsl D_BlinkButton
|
|
|
|
noblink inc handled ; forget the W_Key event.
|
|
|
|
rts
|
|
|
|
ENDP
|
|
|
|
****************************************************************
|
|
*
|
|
* W_DispCharsIn(string:l)
|
|
*
|
|
****************************************************************
|
|
W_DispCharsIn PROC EXPORT
|
|
|
|
input string:l
|
|
|
|
begin
|
|
|
|
short
|
|
lda [string]
|
|
beq bye
|
|
tay
|
|
|
|
loop lda [string],y
|
|
cmp #$9
|
|
bne nottab
|
|
lda #$4
|
|
bra storeit
|
|
|
|
nottab cmp #$d
|
|
bne next
|
|
lda #$5
|
|
storeit sta [string],y
|
|
|
|
next dey
|
|
bne loop
|
|
|
|
bye long
|
|
return
|
|
|
|
ENDP
|
|
|
|
****************************************************************
|
|
*
|
|
* W_DispCharsOut(string:l)
|
|
*
|
|
****************************************************************
|
|
W_DispCharsOut PROC EXPORT
|
|
|
|
input string:l
|
|
|
|
begin
|
|
|
|
short
|
|
lda [string]
|
|
beq bye
|
|
tay
|
|
|
|
loop lda [string],y
|
|
cmp #$4
|
|
bne nottab
|
|
lda #9
|
|
bra storeit
|
|
|
|
nottab cmp #$5
|
|
bne next
|
|
lda #$d
|
|
storeit sta [string],y
|
|
|
|
next dey
|
|
bne loop
|
|
|
|
bye long
|
|
return
|
|
|
|
ENDP
|
|
|
|
****************************************************************
|
|
W_FRData PROC EXPORT
|
|
EXPORT W_findactive
|
|
EXPORT W_replactive
|
|
EXPORT W_foundonce
|
|
EXPORT W_target
|
|
EXPORT W_firstpar
|
|
EXPORT W_firstline
|
|
EXPORT W_firstoff
|
|
EXPORT W_lastpar
|
|
EXPORT W_lastline
|
|
EXPORT W_lastoff
|
|
EXPORT W_FindRepWork
|
|
EXPORT W_visRect
|
|
EXPORT W_lowbounds
|
|
EXPORT W_hibounds
|
|
|
|
W_findactive DC.W 1 ; is there anything to find?
|
|
W_replactive DC.W 1 ; is there anything to replace it with?
|
|
W_foundonce DC.W 0 ; have I found anything yet?
|
|
|
|
W_target DS.B 64 ; the >real< W_Search string
|
|
|
|
W_firstpar DS.B 2 ; limits of found Q_Text
|
|
W_firstline DS.B 2
|
|
W_firstoff DS.B 2
|
|
W_lastpar DS.B 2
|
|
W_lastline DS.B 2
|
|
W_lastoff DS.B 2
|
|
|
|
W_FindRepWork
|
|
DC.L W_FindIt
|
|
DC.L W_ReplaceIt
|
|
DC.L W_ReplaceFind
|
|
DC.L W_ReplaceAll
|
|
DC.L W_StartOver
|
|
|
|
W_visRect DC.W 0,0,100,640 ; visible portion of D_WP window (local)
|
|
|
|
W_lowbounds DC.W 106,25,195,615
|
|
W_hibounds DC.W 17,25,106,615
|
|
|
|
ENDP
|
|
END
|
|
|