annotate level1/cmds/touch.a @ 2231:27f07aa0bca0

Updated modules to use Darren Atkinson's latest changes to low level read/write routines
author boisy
date Sun, 12 Apr 2009 18:48:24 +0000
parents a51439f6b206
children aaba193af04f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1862
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
1 ********************************************************************
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
2 * Touch - Changes last modification date/time
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
3 *
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
4 * $Id$
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
5 *
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
6 * Edt/Rev YYYY/MM/DD Modified by
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
7 * Comment
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
8 * ------------------------------------------------------------------
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
9 * 2 2003/01/11 Boisy G. Pitre
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
10 * Rewrote touch from scratch, made almost 90% smaller than C version
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
11 * found in the OS-9 Development System.
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
12
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
13 nam Touch
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
14 ttl Changes last modification date/time
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
15
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
16 use defsfile.d
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
17
1868
cba8a54bc509 Slowly but surely
boisy
parents: 1862
diff changeset
18 rev set $00
cba8a54bc509 Slowly but surely
boisy
parents: 1862
diff changeset
19 edition set 2
cba8a54bc509 Slowly but surely
boisy
parents: 1862
diff changeset
20
1862
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
21 * Here are some tweakable options
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
22 DOHELP set 0 1 = include help info
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
23 STACKSZ set 128 estimated stack size
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
24 PARMSZ set 256 estimated parameter size
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
25 ZOPTSIZ set 64 max size of -z option's parameter
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
26
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
27 * Module header definitions
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
28 rev set $00
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
29 edition set 2
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
30
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
31 psect touch_a,Prgrm+Objct,ReEnt+rev,edition,200,start
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
32
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
33 * Your utility's static storage vars go here
1868
cba8a54bc509 Slowly but surely
boisy
parents: 1862
diff changeset
34 vsect dp
1862
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
35 parmptr rmb 2 pointer to our command line params
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
36 bufptr rmb 2 pointer to user expandable buffer
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
37 bufsiz rmb 2 size of user expandable buffer
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
38 * What follows are utility specific options
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
39 nocreate rmb 1
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
40 quiterr rmb 1
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
41 filemode rmb 1
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
42 filecnt rmb 1
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
43 zoptflg rmb 1 1 = this option has been processed once already
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
44 zpath rmb 1 path to -z file
1868
cba8a54bc509 Slowly but surely
boisy
parents: 1862
diff changeset
45 cleartop equ * everything up to here gets cleared at start
1862
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
46 zopt rmb ZOPTSIZ buffer for what follows after -c=
1868
cba8a54bc509 Slowly but surely
boisy
parents: 1862
diff changeset
47 endsect
cba8a54bc509 Slowly but surely
boisy
parents: 1862
diff changeset
48
1862
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
49 * Next is a user adjustable buffer with # modifier on command line.
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
50 * Some utilities won't need this, some will.
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
51 * Currently set up to be larger for Level 2 than Level 1
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
52 * Note: this buffer must come just before the stack
1868
cba8a54bc509 Slowly but surely
boisy
parents: 1862
diff changeset
53 vsect
1862
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
54 IFGT Level-1
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
55 bigbuff rmb 8*1024 8K default buffer for Level 2
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
56 ELSE
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
57 bigbuff rmb 512 512 byte default buffer for Level 1
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
58 ENDC
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
59 endsect
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
60
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
61 * Place constant strings here
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
62 IFNE DOHELP
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
63 HlpMsg fcb C$LF
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
64 fcc /Use: Touch [<opts>] <path> [<path>] [<opts>]/
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
65 fcb C$LF
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
66 fcc / -c = don't create files/
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
67 fcb C$LF
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
68 fcc / -q = don't quit on error/
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
69 fcb C$LF
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
70 fcc / -x = search execution directory/
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
71 fcb C$LF
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
72 fcc / -z = get files from standard input/
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
73 fcb C$LF
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
74 fcc / -z=<file> get files from <file>/
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
75 fcb C$LF
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
76 CR fcb C$CR
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
77 HlpMsgL equ *-HlpMsg
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
78 ENDC
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
79 UnkOpt fcc /unknown option: /
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
80 UnkOptL equ *-UnkOpt
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
81 CantTch fcc /can't touch "/
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
82 CantTchL equ *-CantTch
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
83 EndCant fcc /" - /
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
84 EndCantL equ *-EndCant
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
85
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
86 * Here's how registers are set when this process is forked:
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
87 *
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
88 * +-----------------+ <-- Y (highest address)
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
89 * ! Parameter !
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
90 * ! Area !
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
91 * +-----------------+ <-- X, SP
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
92 * ! Data Area !
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
93 * +-----------------+
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
94 * ! Direct Page !
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
95 * +-----------------+ <-- U, DP (lowest address)
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
96 *
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
97 * D = parameter area size
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
98 * PC = module entry point abs. address
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
99 * CC = F=0, I=0, others undefined
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
100
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
101 * The start of the program is here.
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
102 * Before any command line processing is done, we clear out
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
103 * our static memory from U to cleartop, then determine the
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
104 * size of our data area (minus the stack).
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
105 start pshs u,x save registers for later
1868
cba8a54bc509 Slowly but surely
boisy
parents: 1862
diff changeset
106 leax <cleartop point to end of area to zero out
1862
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
107 IFNE H6309
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
108 subr u,x subtract U from X
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
109 tfr x,w and put X in W
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
110 clr ,-s put a zero on the stack
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
111 tfm s,u+ and use TFM to clear starting at U
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
112 leas 1,s clean up the stack
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
113 ELSE
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
114 pshs x save end pointer on stack
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
115 clrnxt clr ,u+ clear out
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
116 cmpu ,s done?
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
117 bne clrnxt branch if not
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
118 leas 2,s else clear stack
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
119 ENDC
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
120 puls x,u and restore our earlier saved registers
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
121 leay bigbuff,u point Y to copy buffer offset in U
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
122 stx <parmptr save parameter pointer
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
123 sty <bufptr save pointer to buffer
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
124 tfr s,d place top of stack in D
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
125 IFNE H6309
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
126 subr y,d
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
127 ELSE
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
128 pshs y save Y on stack
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
129 subd ,s++ get size of space between copybuf and X
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
130 ENDC
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
131 subd #STACKSZ+PARMSZ subtract out our stack
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
132 std <bufsiz size of our buffer
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
133
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
134 * At this point we have determined our buffer space and saved pointers
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
135 * for later use. Now we will parse the command line for options that
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
136 * begin with -
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
137 lda ,x
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
138 cmpa #C$CR CR?
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
139 lbeq ShowHelp if so, no parameters... show help and exit
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
140 GetChar lda ,x+ get next character on cmd line
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
141 cmpa #C$CR CR?
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
142 lbeq DoTouch if so, do whatever this utility does
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
143 cmpa #'- is it an option?
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
144 beq GetDash if so, process it
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
145 inc <filecnt else must be a non-option argument (file)
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
146 lbsr SkipNSpc move past the argument
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
147 ChkDash lbsr SkipSpcs and any following spaces
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
148 bra GetChar start processing again
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
149 GetDash lda #C$SPAC get a space char
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
150 sta -1,x and wipe out the dash from the cmd line
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
151 GetDash2 ldd ,x+ load option char and char following
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
152 ora #$20 make lowercase
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
153 IsItC cmpa #'c is it this option?
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
154 bne IsItQ branch if not
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
155 sta <nocreate
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
156 lbra FixCmdLn
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
157 IsItQ cmpa #'q is it this option?
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
158 bne IsItX branch if not
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
159 inc <quiterr
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
160 lbra FixCmdLn
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
161 IsItX cmpa #'x is it this option?
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
162 bne IsItZ branch if not
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
163 lda #EXEC.
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
164 sta <filemode
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
165 bra FixCmdLn
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
166 IsItZ cmpa #'z is it this option?
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
167 bne BadOpt branch if not
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
168 tst <zoptflg was this option already specified?
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
169 bne BadOpt show help if so
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
170 sta <zoptflg else tag this option as parsed
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
171 cmpb #'= 2nd char =?
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
172 bne FixCmdLn
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
173 GetZFile ldb #C$SPAC get space
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
174 stb -$01,x write over c
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
175 stb ,x+ and = sign, inc X to dest dir
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
176 * check for valid char after -z=
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
177 lda ,x
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
178 cmpa #C$SPAC
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
179 lbeq ShowHelp
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
180 cmpa #C$COMA
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
181 lbeq ShowHelp
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
182 cmpa #C$CR
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
183 lbeq ShowHelp
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
184 leay <zopt,u point Y to parameber buffer
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
185 tfr y,d transfer Y to D
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
186 addd #ZOPTSIZ
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
187 pshs b,a save updated ptr value
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
188 ldb #C$SPAC get space
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
189 L0339 lda ,x get byte at X
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
190 stb ,x+ store space at X and inc
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
191 sta ,y+ save loaded byte at Y and inc
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
192 cmpy ,s are we at end?
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
193 beq L035D branch if so (buffer too small)
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
194 cmpa #C$SPAC else is char in A a space?
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
195 beq L0350 branch if so
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
196 cmpa #C$COMA coma?
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
197 beq L0350 branch if so
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
198 cmpa #C$CR cr?
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
199 bne L0339 get next byte if not
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
200 L0350 leax -1,x
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
201 sta ,x restore previous A
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
202 leas $02,s kill stack
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
203 * attempt to open a path to the file
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
204 pshs x
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
205 leax <zopt,u
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
206 lda #READ.
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
207 os9 I$Open
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
208 lbcs Exit
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
209 sta <zpath
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
210 puls x
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
211 lbra ChkDash
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
212 L035D leas $02,s
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
213 ldb #$BF else buffer size too small
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
214 orcc #Carry
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
215 lbra Exit
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
216 FixCmdLn lda #C$SPAC get space
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
217 sta -$01,x and wipe out option character
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
218 cmpb #'0
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
219 lblt ChkDash start dash option processing again
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
220 lbra GetDash possibly another option following?
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
221
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
222 * We branch here if we encounter an unknown option character
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
223 * A = bad option character
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
224 BadOpt leax UnkOpt,pcr
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
225 ldy #UnkOptL
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
226 ldb #C$CR
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
227 pshs d save bad option and CR on stack
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
228 lda #$02 stderr
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
229 os9 I$Write
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
230 leax ,s point X at option char on stack
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
231 os9 I$WritLn print option and CR
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
232 puls d clean up stack
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
233 lbra ShowHelp
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
234
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
235
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
236 * At this point options are processed.
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
237 * We load X with our parameter pointer and go down the command line
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
238 * looking at each file to process (options have been wiped out with
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
239 * spaces)
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
240 *
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
241 * Note, the following two instructions may not be needed, depending on
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
242 * if your utility requires a non-option on the command line.
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
243 DoTouch tst <zoptflg -z specified?
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
244 beq DoFiles no, do any files on command line
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
245 ReadZ lda <zpath
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
246 ldy #80
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
247 os9 I$ReadLn
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
248 lbsr SkipSpcs
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
249 cmpa #C$CR
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
250 beq ClosEx
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
251 bcs TestErr
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
252 bsr ProcFile
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
253 bra ReadZ
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
254 TestErr cmpb #E$EOF
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
255 lbne Exit
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
256 tsta
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
257 lbeq ExitOk
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
258 ClosEx os9 I$Close close path to -z= file
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
259 lbra ExitOk
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
260
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
261 DoFiles tst <filecnt we should have at least one file on cmdline
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
262 lbeq ShowHelp if not, exit with error
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
263 ldx <parmptr get our parameter pointer off stack
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
264 DoLoop lbsr SkipSpcs skip any leading spaces
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
265 cmpa #C$CR end of parameters?
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
266 beq ExitOk if so, end the utility
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
267 pshs x save pointer to arg
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
268 bsr ProcFile process file at X
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
269 puls x get arg pointer
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
270 lbsr SkipNSpc skip the argument we just processed
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
271 bra DoLoop
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
272
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
273 * This routine processes one file at a time.
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
274 * Entry: X = ptr to argument on the command line.
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
275 * On exit, X can point to the argument or past it.
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
276 * Note that there are NO leading spaces.
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
277 * They have been skipped by the caller.
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
278 * The following code just echos the command line argument, followed
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
279 * by a carriage return.
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
280 ProcFile
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
281 lda #WRITE.
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
282 ora <filemode
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
283 pshs x
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
284 os9 I$Open
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
285 puls x
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
286 bcc CloseIt
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
287 ora #DIR.
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
288 pshs x
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
289 os9 I$Open
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
290 puls x
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
291 bcc CloseIt
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
292 * open failed... should we do create?
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
293 tst <nocreate
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
294 beq DoCreate
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
295 ChkQuit bsr CantTouch
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
296 tst <quiterr
1868
cba8a54bc509 Slowly but surely
boisy
parents: 1862
diff changeset
297 beq ExitOk
1862
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
298 bra ProcRTS
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
299 DoCreate ldb #PREAD.+UPDAT.
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
300 pshs x
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
301 os9 I$Create
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
302 puls x
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
303 bcs ChkQuit
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
304 CloseIt os9 I$Close
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
305 ProcRTS rts
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
306
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
307 CantTouch
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
308 pshs x,b save pointer to file and error code
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
309 leax CantTch,pcr
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
310 lda #$02
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
311 ldy #CantTchL
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
312 os9 I$Write
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
313 ldx 1,s
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
314 pshs x
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
315 bsr StrLen
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
316 puls x
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
317 os9 I$Write
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
318 leax EndCant,pcr
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
319 ldy #EndCantL
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
320 os9 I$Write
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
321 puls b
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
322 os9 F$PErr
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
323 puls x,pc
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
324
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
325 ShowHelp equ *
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
326 IFNE DOHELP
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
327 leax >HlpMsg,pcr point to help message
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
328 ldy #HlpMsgL get length
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
329 lda #$02 std error
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
330 os9 I$WritLn write it
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
331 ENDC
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
332 ExitOk clrb clear carry
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
333 Exit os9 F$Exit and exit
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
334
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
335 * This routine counts the number of non-whitespace characters
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
336 * starting at X
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
337 *
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
338 * Entry:
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
339 * X = ptr to string (space, comma or CR terminated)
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
340 * Exit:
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
341 * Y = length of string
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
342 * X = ptr to byte after string
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
343 StrLen pshs a
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
344 ldy #$0000
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
345 StrLenLp lda ,x+
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
346 cmpa #C$SPAC
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
347 beq StrLenEx
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
348 cmpa #C$COMA
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
349 beq StrLenEx
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
350 cmpa #C$CR
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
351 beq StrLenEx
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
352 leay 1,y
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
353 bra StrLenLp
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
354 StrLenEx puls a,pc
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
355
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
356 * This routine copies a string of text from X to Y until
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
357 * a whitespace character or CR is encountered
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
358 *
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
359 * Entry:
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
360 * X = ptr to src string
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
361 * Y = ptr to dest string
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
362 * Exit:
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
363 * D = number of bytes copied
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
364 * X = ptr to byte after original string
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
365 * Y = ptr to byte after copied string
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
366 StrCpy pshs u
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
367 ldu #$0000
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
368 CopyFnLp lda ,x+
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
369 cmpa #C$SPAC
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
370 beq CopyFnEx
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
371 cmpa #C$COMA
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
372 beq CopyFnEx
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
373 cmpa #C$CR
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
374 beq CopyFnEx
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
375 sta ,y+
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
376 leau 1,u
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
377 bra CopyFnLp
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
378 CopyFnEx tfr u,d
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
379 puls u,pc
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
380
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
381 * This routine skip over spaces and commas
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
382 *
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
383 * Entry:
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
384 * X = ptr to data to parse
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
385 * Exit:
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
386 * X = ptr to first non-whitespace char
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
387 * A = non-whitespace char
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
388 SkipSpcs lda ,x+
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
389 cmpa #C$SPAC
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
390 beq SkipSpcs
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
391 cmpa #C$COMA
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
392 beq SkipSpcs
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
393 leax -1,x
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
394 rts
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
395
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
396 * This routine skips over everything but spaces, commas and CRs
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
397 *
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
398 * Entry:
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
399 * X = ptr to data to parse
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
400 * Exit:
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
401 * X = ptr to first whitespace char
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
402 * A = whitespace char
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
403 SkipNSpc lda ,x+
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
404 cmpa #C$SPAC
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
405 beq EatOut
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
406 cmpa #C$COMA
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
407 beq EatOut
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
408 cmpa #C$CR
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
409 bne SkipNSpc
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
410 EatOut leax -1,x
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
411 rts
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
412
25d7f19ee2e8 To be tested later
boisy
parents:
diff changeset
413 endsect