annotate 3rdparty/utils/boisy/grep.asm @ 3295:6b7a7b233925 default tip

makefile: Allow PORTS with level1/2 mix https://sourceforge.net/p/nitros9/feature-requests/10/
author Tormod Volden <debian.tormod@gmail.com>
date Tue, 19 Apr 2022 18:12:17 +0200
parents 0e08f0830fd8
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1 ***************************************************************************
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2 * GREP - Pattern matching utility
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
3 *
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
4 * The usage for GREP is:
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
5 *
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
6 * Grep <-c> "pattern" [file] (in that order)
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
7 *
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
8 * The -c option tells grep to search with case sensitivity.
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
9 * The pattern must be enclosed in double quotes (").
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
10 * If no file is specified, input is taken from StdIn
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
11 *
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
12 * Use: asm #16K grep.a o=grep
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
13 * You may have to modify the "use" directive...
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
14 *
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
15 * I got tired of waiting for someone to write this, so I took
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
16 * the challenge. I'm sure there are others who could use this.
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
17 * As always, you're free to distribute this source as long as
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
18 * long as this header is intact with the code. Enjoy!
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
19 *
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
20 *
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
21 * By: Boisy G. Pitre
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
22 * Southern Station, Box 8455
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
23 * Hattiesburg, MS 39406-8455
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
24 * Internet: bgpitre@seabass.st.usm.edu
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
25 *
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
26
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
27 nam grep
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
28 ttl pattern matching utility
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
29
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
30 ifp1
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
31 use defsfile
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
32 endc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
33
1242
bdd2f61d5dbc Fixed case issues in several files (thanks Rodney H.)
boisy
parents: 1231
diff changeset
34 mod Size,Name,Prgrm+Objct,ReEnt+1,Start,Fin
1260
0e08f0830fd8 Changes pointed out by Rodney H.
boisy
parents: 1242
diff changeset
35
0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
36 Name fcs /Grep/
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
37 Ed fcb $01
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
38
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
39 MaskByte rmb 1 Byte used for masking case
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
40 Path rmb 1 path of file (or StdIn)
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
41 StrSiz rmb 1 Size of pattern
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
42 Counter rmb 1 Counter for pattern size
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
43 ByteCmp rmb 1 Buffer to store masked byte
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
44 LineSiz rmb 2 Size of input line
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
45 SrchStr rmb 80 Line buffer
1231
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
46 numflag rmb 1 print line numbers if set
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
47 linecnt rmb 3 up to 999999 lines
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
48 linestr rmb 7 buffer for 6-digit number+space
0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
49 Line rmb 250 Line max is 250 chars
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
50 Stack rmb 200
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
51 Params rmb 200
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
52 Fin equ .
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
53
1260
0e08f0830fd8 Changes pointed out by Rodney H.
boisy
parents: 1242
diff changeset
54 HelpMsg fcc /Usage: Grep <-c> <-n> "pattern" [file]/
0e08f0830fd8 Changes pointed out by Rodney H.
boisy
parents: 1242
diff changeset
55 fcb C$CR
0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
56 HelpLen equ *-HelpMsg
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
57
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
58 Start clr Path Clear path (assume StdIn)
1231
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
59 clr numflag
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
60 clr linecnt
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
61 clr linecnt+1
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
62 clr linecnt+2
0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
63 lda #%00100000 Assume masking
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
64 sta MaskByte
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
65
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
66 Parse lda ,x+ Get char off cmd line
1260
0e08f0830fd8 Changes pointed out by Rodney H.
boisy
parents: 1242
diff changeset
67 cmpa #C$SPAC is it a space?
0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
68 beq Parse yep, get next char
1260
0e08f0830fd8 Changes pointed out by Rodney H.
boisy
parents: 1242
diff changeset
69 cmpa #C$CR is it a CR?
0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
70 beq Help Yep, premature, so show help
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
71 cmpa #'- is it a dash?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
72 beq Parse2 yeah, go to option handler
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
73 cmpa #'" is it a quote?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
74 beq GetStr yep, go to pattern handler
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
75 bra Help else wrong usage, show help
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
76
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
77 Parse2 lda ,x+ get char after dash
1260
0e08f0830fd8 Changes pointed out by Rodney H.
boisy
parents: 1242
diff changeset
78 anda #$DF and mask it
1231
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
79 cmpa #'N is it an N for line numbers?
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
80 bne Parse3 nope, try C
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
81 sta numflag set the line numbers flag
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
82 bra Parse and resume parsing
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
83 Parse3 cmpa #'C is it a C for case sensitivity?
0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
84 bne Help nope, bad option, show help
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
85 clr MaskByte else clear the mask byte
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
86 bra Parse and go back to parsing routine
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
87
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
88 GetStr leay SrchStr,u point to pattern buffer
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
89 clr StrSiz and clear the size variable
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
90
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
91 Store lda ,x+ get char
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
92 cmpa #'" is it the ending quote?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
93 beq ChckFile yep, see if a file was specified
1260
0e08f0830fd8 Changes pointed out by Rodney H.
boisy
parents: 1242
diff changeset
94 cmpa #C$CR is it a CR?
0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
95 beq Help Yep, in middle of quote! show help
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
96 ora MaskByte else mask char
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
97 sta ,y+ and save it in buffer
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
98 inc StrSiz increment the size by one
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
99 bra Store and get the next char
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
100
1260
0e08f0830fd8 Changes pointed out by Rodney H.
boisy
parents: 1242
diff changeset
101 EOF cmpb #E$EOF Is error an end-of-file?
0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
102 bne Error nope, other error
1231
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
103 bra Done else we're done
0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
104
1231
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
105 Help leax <HelpMsg,pcr Point to help message
0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
106 ldy #HelpLen load length
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
107 lda #2 to StdErr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
108 os9 I$WritLn and write
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
109 bcs Error exit if error
1231
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
110
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
111 Done clrb clear error register
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
112 Error os9 F$Exit and exit!
0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
113
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
114 ChckFile lda ,x get char
1260
0e08f0830fd8 Changes pointed out by Rodney H.
boisy
parents: 1242
diff changeset
115 cmpa #C$CR is it a CR?
0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
116 beq ReadIn yep, we'll use StdIn
1260
0e08f0830fd8 Changes pointed out by Rodney H.
boisy
parents: 1242
diff changeset
117 cmpa #C$SPAC is it a space?
0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
118 bne GetFile nope, its a filename char
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
119 leax 1,x else increment X
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
120 bra ChckFile and get the next char
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
121
1242
bdd2f61d5dbc Fixed case issues in several files (thanks Rodney H.)
boisy
parents: 1231
diff changeset
122 GetFile lda #READ. Open for read
0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
123 os9 I$Open
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
124 bcs Error
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
125 sta Path and save the path
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
126
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
127 ReadIn ldy #250 max. read = 250 chars
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
128 leax Line,u point X to line buffer
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
129 lda Path load A with path number
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
130 os9 I$ReadLn and get a line of chars
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
131 bcs EOF if error, check for EOF
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
132 sty LineSiz save bytes read
1231
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
133 * count lines in BCD, 6-digit version (3 bytes)
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
134 lda linecnt+2
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
135 adda #1
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
136 daa
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
137 sta linecnt+2
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
138 bcc Match
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
139 adca linecnt+1
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
140 daa
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
141 sta linecnt+1
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
142 bcc Match
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
143 adca linecnt
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
144 daa
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
145 sta linecnt
0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
146
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
147 Match ldb StrSiz load B with pattern size
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
148 stb Counter store it in counter
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
149 leay SrchStr,u point Y to pattern
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
150
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
151 Loop dec LineSiz+1 decrement line size counter
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
152 beq ReadIn if at end, read in another line
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
153 lda ,x+ else load A with char at X (line)
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
154 ora MaskByte mask it
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
155 sta ByteCmp store it in comparison location
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
156 lda ,y+ load A with char at Y (pattern)
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
157 cmpa ByteCmp compare it with saved byte
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
158 beq GetNext
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
159 bra Match else start from beginning of pattern
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
160 GetNext dec Counter decrement counter
1231
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
161 beq doline if at end, print the line (match!)
0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
162 bra Loop else check next char
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
163
1231
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
164 doline tst <numflag
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
165 bne bcdtoasc
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
166
0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
167 PrnLine leax Line,u point to line buffer
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
168 ldy #250 max. chars = 250
1231
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
169 PrnLine2
0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
170 lda #1 to StdOut
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
171 os9 I$WritLn and write the line
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
172 bcs Error exit if error
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
173 bra ReadIn else get next line
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
174
1231
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
175 bcdtoasc
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
176 leay linestr,u
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
177 ldb <linecnt
1260
0e08f0830fd8 Changes pointed out by Rodney H.
boisy
parents: 1242
diff changeset
178 bsr btod convert all 6 digits
1231
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
179 ldb <linecnt+1
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
180 bsr btod
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
181 ldb <linecnt+2
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
182 bsr btod
1260
0e08f0830fd8 Changes pointed out by Rodney H.
boisy
parents: 1242
diff changeset
183 ldb #C$SPAC
1231
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
184 stb ,y
1260
0e08f0830fd8 Changes pointed out by Rodney H.
boisy
parents: 1242
diff changeset
185 leax linestr+1,u but print only last 5
0e08f0830fd8 Changes pointed out by Rodney H.
boisy
parents: 1242
diff changeset
186 ldy #256
0e08f0830fd8 Changes pointed out by Rodney H.
boisy
parents: 1242
diff changeset
187 * to print 6 digits change previous 2 lines to leax linestr,u/ldy #257
1231
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
188 bra PrnLine2
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
189
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
190 btod pshs b
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
191 lsrb
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
192 lsrb
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
193 lsrb
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
194 lsrb
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
195 bsr btod2
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
196 puls b
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
197 btod2 andb #$0F
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
198 addb #'0
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
199 stb ,y+
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
200 rts
fae8fe2f21b5 Enhanced grep by Rodney Hamilton
boisy
parents: 0
diff changeset
201
0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
202 emod
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
203 Size equ *
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
204 end
1260
0e08f0830fd8 Changes pointed out by Rodney H.
boisy
parents: 1242
diff changeset
205