home *** CD-ROM | disk | FTP | other *** search
- ProcessOffset: Move.L _Offset(PC),A0 ;was the annoying option included?
- Cmp.L #0,A0
- Beq .NoOffset
-
- Lea WorkData,A1
- Moveq #0,D0
- .OffsetCopy Move.B (A0)+,D0 ;we need to get all the numbers before the comma
- Beq .BadOffset ;and put them elsewhere where we can work with them
- Move.B D0,(A1)+
- Cmp.B #',',D0 ;the comma is the seperator
- Bne.S .OffsetCopy
- Clr.B -1(A1) ;mark the end of the offset
- Move.L A0,A3 ;data after comma
-
- Move.L #WorkData,D1
- Move.L #_OffsetVal,D2
- CALL StrToLong,DOS ;convert a decimal string into a longword
- Cmp.L #-1,D0
- Beq .BadOffset
-
- Move.L _FileData(PC),A0 ;start of the data from our file to load
- Move.L _OffsetVal(PC),D0 ;how far into the do we need to go
- Lea (A0,D0.w),A4 ;move to it
-
- Move.B (A3),D0
- Cmp.B #'"',D0 ;are the characters an ASCII string, instead of a sequence of hex
- Bne.S .OffsetLoop2 ;if not, go process the hex
-
- Move.L A3,A0
- Lea WorkData,A1 ;copy the string elsewhere
- Bsr StripQuotes ;removing the quotes around it as we go
-
- Lea WorkData,A0
- .OffsetLoop Moveq #0,D0
- Moveq #0,D1
- Move.B (A0)+,D0 ;get a character of the string
- Beq.S .OffsetDone ;if it's zero, then the check has worked
- Move.B (A4)+,D1 ;data file
-
- Tst.B _Insensitive ;are we caring about case sensitivity?
- Beq.S .NoInsensitive ;if so, then skip the routines to convert to uppercase
- Bsr ChangeCase ;convert the OFFSET character
- Exg.L D1,D0 ;swap the two characters over
- Bsr ChangeCase ;convert the data from the file
- Exg.L D1,D0 ;swap the two characters over
- .NoInsensitive Cmp.B #'?',D0 ;is it a wildcard?
- Beq.S .OffsetLoop ;if so, then skip the comparison
- Cmp.B D0,D1 ;compare the two characters
- Beq.S .OffsetLoop ;if they are the same, then continue the check
- Bra.S .BadOffset ;if they are different, then stop checking with this class
-
- .OffsetLoop2 Moveq #0,D0
- Moveq #0,D1
- Move.B (A3)+,D0 ;get a character of the string
- Beq.S .OffsetDone
-
- Cmp.B #'.',D0 ;is a skip character
- Bne.S .NotSkip
- Addq #1,A3 ;jump over the second '.'
- Addq #1,A4 ;jump over the byte in the datafile
- Bra.S .OffsetLoop2
-
- .NotSkip Bsr ChangeCase ;the user may type the hex in upper or lower case
- Move.B D0,D1
- Sub.B #48,D1 ;drop ascii back to decimal
- Cmp.B #10,D1
- Blt.S .NotHex
- Subq #7,D1 ;drop hex back into base 10
- .NotHex Lsl.W #4,D1 ;we have the 10's column
-
- Move.B (A3)+,D0 ;get the second part of the hex number
- Bsr ChangeCase
- Sub.B #48,D0 ;remove Ascii coding
- Cmp.B #10,D0
- Blt.S .NotHex2
- Subq #7,D0 ;make hex into decimal
-
- .NotHex2 Add.B D0,D1 ;build the final number
- Move.B (A4)+,D0 ;get the character to compare out of the data file
-
- Tst.B _Insensitive ;are we caring about case sensitivity?
- Beq.S .NoInsensitive2 ;if so, then skip the routines to convert to uppercase
- Bsr ChangeCase ;convert the OFFSET character
- Exg.L D1,D0 ;swap the two characters over
- Bsr ChangeCase ;convert the data from the file
- Exg.L D1,D0 ;swap the two characters over
- .NoInsensitive2
- Cmp.L D0,D1 ;are they the same
- Beq.S .OffsetLoop2 ;if so, check the next character
- Bra.S .BadOffset
- .OffsetDone
-
- Addq.B #1,_Successful
-
- Cmp.B #MODE_ONE,_Mode
- Beq.S LaunchAction
- Bra.S .NoOffset
-
- .BadOffset Cmp.B #MODE_ALL,_Mode
- Beq CheckLoop
- .NoOffset
-