annotate level1/cmds/ngu.asm @ 2758:e4a0f58a5f9b

Found that people who do not have the envirornment variable NITROS9DIR set before building the project get a error missing file "/rules.mak". Found this is caused do to the fact that the code to set this envirornment variable is in the rules.mak which can't get loaded. To fix this the code needed to set the envirornment variable that is in the rules.mak is now in the makefile(s) right before the include for the rules.mak file. This should fix the problem for those who do not have the NITROS9DIR envirornment variable preset.
author drencor-xeen
date Mon, 14 Jan 2013 14:37:46 -0600
parents 20841f236e32
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
820
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
1 ********************************************************************
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
2 * NGU - The "Next Great Utility"
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
3 *
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
4 * $Id$
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
5 *
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
6 * NGU is a template for writing utilities under OS-9/6809. It has
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
7 * robust option handling and is littered with comments to help you
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
8 * write your own utilities.
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
9 *
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
10 * NGU uses a two-pass method for parsing the command line. On the
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
11 * first pass, dash options are processed and internal flags are set
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
12 * accordingly. As the options are processed, they are cleared to
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
13 * spaces so that they won't be present on the second pass.
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
14 *
902
bffd011cbef3 Made more changes
boisy
parents: 854
diff changeset
15 * e.g.
bffd011cbef3 Made more changes
boisy
parents: 854
diff changeset
16 * 1st pass: ngu -x foo1 -y foo2 -t=bar1 -ab
bffd011cbef3 Made more changes
boisy
parents: 854
diff changeset
17 * 2nd pass: ngu foo1 foo2
bffd011cbef3 Made more changes
boisy
parents: 854
diff changeset
18 *
bffd011cbef3 Made more changes
boisy
parents: 854
diff changeset
19 * For the second pass, NGU parses the remaining arguments, which don't
bffd011cbef3 Made more changes
boisy
parents: 854
diff changeset
20 * begin with -. Presumably these are filenames or other names that are to be
820
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
21 * processed.
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
22 *
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
23 * Features:
823
357c62d55b8f Changes
boisy
parents: 822
diff changeset
24 * - Written for 6809 and 6309 processors in fast, compact
357c62d55b8f Changes
boisy
parents: 822
diff changeset
25 * assembly language.
357c62d55b8f Changes
boisy
parents: 822
diff changeset
26 *
820
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
27 * - Both options and files can be specified anywhere
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
28 * on the command line
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
29 * (i.e ngu -a test1 -b test2 -c=foo)
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
30 *
902
bffd011cbef3 Made more changes
boisy
parents: 854
diff changeset
31 * - Multiple options can be combined behind one dash:
820
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
32 * (i.e ngu -ab test1 -c=foo test2 test3)
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
33 *
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
34 * - Several useful assembly routines are provided for
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
35 * copying strings and determining string length.
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
36 *
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
37 * Limitations:
823
357c62d55b8f Changes
boisy
parents: 822
diff changeset
38 * - Only single character option names can be processed.
902
bffd011cbef3 Made more changes
boisy
parents: 854
diff changeset
39 * Multi-character option names (i.e. -delete) aren't supported.
820
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
40 *
902
bffd011cbef3 Made more changes
boisy
parents: 854
diff changeset
41 * - The current file counter is one byte, counting a maximum
820
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
42 * of 255 files.
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
43 *
1325
84ea83668304 Redid comments, reset all rev nibbles that weren't explictly set to 0
boisy
parents: 929
diff changeset
44 * Edt/Rev YYYY/MM/DD Modified by
84ea83668304 Redid comments, reset all rev nibbles that weren't explictly set to 0
boisy
parents: 929
diff changeset
45 * Comment
820
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
46 * ------------------------------------------------------------------
1325
84ea83668304 Redid comments, reset all rev nibbles that weren't explictly set to 0
boisy
parents: 929
diff changeset
47 * 1 2003/01/11 Boisy G. Pitre
84ea83668304 Redid comments, reset all rev nibbles that weren't explictly set to 0
boisy
parents: 929
diff changeset
48 * Put your development info here.
820
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
49
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
50 nam NGU
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
51 ttl The "Next Great Utility"
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
52
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
53 ifp1
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
54 use defsfile
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
55 endc
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
56
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
57 * Here are some tweakable options
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
58 DOHELP set 1 1 = include help info
929
c04528763543 stack/parameter size increased to prevent collisions with memory
boisy
parents: 902
diff changeset
59 STACKSZ set 128 estimated stack size in bytes
c04528763543 stack/parameter size increased to prevent collisions with memory
boisy
parents: 902
diff changeset
60 PARMSZ set 256 estimated parameter size in bytes
820
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
61 COPTSIZ set 64 max size of C option's parameter
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
62
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
63 * Module header definitions
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
64 tylg set Prgrm+Objct
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
65 atrv set ReEnt+rev
1332
80f15c027ebb Improved ngu somewhat
boisy
parents: 1325
diff changeset
66 rev set $00
820
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
67 edition set 1
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
68
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
69 mod eom,name,tylg,atrv,start,size
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
70
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
71 * Your utility's static storage vars go here
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
72 org 0
902
bffd011cbef3 Made more changes
boisy
parents: 854
diff changeset
73 * These vars are used by the base template and shouldn't be removed
820
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
74 parmptr rmb 2 pointer to our command line params
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
75 bufptr rmb 2 pointer to user expandable buffer
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
76 bufsiz rmb 2 size of user expandable buffer
902
bffd011cbef3 Made more changes
boisy
parents: 854
diff changeset
77 filecnt rmb 1
bffd011cbef3 Made more changes
boisy
parents: 854
diff changeset
78 * These vars are used for this example, it will probably change for you
820
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
79 gota rmb 1
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
80 gotb rmb 1
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
81 coptflg rmb 1 1 = this option has been processed once already
823
357c62d55b8f Changes
boisy
parents: 822
diff changeset
82 cleartop equ . everything up to here gets cleared at start
820
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
83 copt rmb COPTSIZ buffer for what follows after -c=
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
84 * Next is a user adjustable buffer with # modifier on command line.
902
bffd011cbef3 Made more changes
boisy
parents: 854
diff changeset
85 * Some utilities won't need this flexibility, some will.
820
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
86 * Currently set up to be larger for Level 2 than Level 1
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
87 * Note: this buffer must come just before the stack
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
88 IFGT Level-1
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
89 bigbuff rmb 8*1024 8K default buffer for Level 2
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
90 ELSE
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
91 bigbuff rmb 512 512 byte default buffer for Level 1
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
92 ENDC
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
93 * Finally the stack for any PSHS/PULS/BSR/LBSRs that we might do
929
c04528763543 stack/parameter size increased to prevent collisions with memory
boisy
parents: 902
diff changeset
94 rmb STACKSZ+PARMSZ
820
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
95 size equ .
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
96
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
97 * The utility name and edition goes here
821
b0b1886efbd0 added unknown option
boisy
parents: 820
diff changeset
98 name fcs /NGU/
820
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
99 fcb edition
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
100
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
101 * Place constant strings here
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
102 IFNE DOHELP
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
103 HlpMsg fcb C$LF
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
104 fcc /Use: NGU [<opts>] <path> [<path>] [<opts>]/
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
105 fcb C$LF
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
106 fcc / -a option 1/
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
107 fcb C$LF
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
108 fcc / -b option 2/
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
109 fcb C$LF
822
83e3677c8b1f Made option comparisons lowercase, added more help
boisy
parents: 821
diff changeset
110 fcc / -c=f option 3/
83e3677c8b1f Made option comparisons lowercase, added more help
boisy
parents: 821
diff changeset
111 fcb C$LF
823
357c62d55b8f Changes
boisy
parents: 822
diff changeset
112 CR fcb C$CR
820
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
113 HlpMsgL equ *-HlpMsg
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
114 ENDC
821
b0b1886efbd0 added unknown option
boisy
parents: 820
diff changeset
115 UnkOpt fcc /unknown option: /
b0b1886efbd0 added unknown option
boisy
parents: 820
diff changeset
116 UnkOptL equ *-UnkOpt
820
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
117
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
118 * Here's how registers are set when this process is forked:
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
119 *
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
120 * +-----------------+ <-- Y (highest address)
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
121 * ! Parameter !
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
122 * ! Area !
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
123 * +-----------------+ <-- X, SP
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
124 * ! Data Area !
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
125 * +-----------------+
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
126 * ! Direct Page !
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
127 * +-----------------+ <-- U, DP (lowest address)
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
128 *
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
129 * D = parameter area size
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
130 * PC = module entry point abs. address
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
131 * CC = F=0, I=0, others undefined
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
132
823
357c62d55b8f Changes
boisy
parents: 822
diff changeset
133 * The start of the program is here.
820
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
134 * Before any command line processing is done, we clear out
823
357c62d55b8f Changes
boisy
parents: 822
diff changeset
135 * our static memory from U to cleartop, then determine the
357c62d55b8f Changes
boisy
parents: 822
diff changeset
136 * size of our data area (minus the stack).
820
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
137 start pshs u,x save registers for later
823
357c62d55b8f Changes
boisy
parents: 822
diff changeset
138 leax <cleartop,u point to end of area to zero out
820
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
139 IFNE H6309
821
b0b1886efbd0 added unknown option
boisy
parents: 820
diff changeset
140 subr u,x subtract U from X
b0b1886efbd0 added unknown option
boisy
parents: 820
diff changeset
141 tfr x,w and put X in W
b0b1886efbd0 added unknown option
boisy
parents: 820
diff changeset
142 clr ,-s put a zero on the stack
b0b1886efbd0 added unknown option
boisy
parents: 820
diff changeset
143 tfm s,u+ and use TFM to clear starting at U
b0b1886efbd0 added unknown option
boisy
parents: 820
diff changeset
144 leas 1,s clean up the stack
820
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
145 ELSE
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
146 pshs x save end pointer on stack
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
147 clrnxt clr ,u+ clear out
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
148 cmpu ,s done?
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
149 bne clrnxt branch if not
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
150 leas 2,s else clear stack
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
151 ENDC
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
152 puls x,u and restore our earlier saved registers
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
153 leay bigbuff,u point Y to copy buffer offset in U
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
154 stx <parmptr save parameter pointer
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
155 sty <bufptr save pointer to buffer
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
156 tfr s,d place top of stack in D
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
157 IFNE H6309
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
158 subr y,d
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
159 ELSE
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
160 pshs y save Y on stack
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
161 subd ,s++ get size of space between copybuf and X
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
162 ENDC
929
c04528763543 stack/parameter size increased to prevent collisions with memory
boisy
parents: 902
diff changeset
163 subd #STACKSZ+PARMSZ subtract out our stack/param size
820
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
164 std <bufsiz size of our buffer
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
165
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
166 * At this point we have determined our buffer space and saved pointers
821
b0b1886efbd0 added unknown option
boisy
parents: 820
diff changeset
167 * for later use. Now we will parse the command line for options that
854
053078ef1289 Made some adjustments
boisy
parents: 829
diff changeset
168 * begin with a dash.
053078ef1289 Made some adjustments
boisy
parents: 829
diff changeset
169 * Note that X will NOT point to a space, but to either a CR (if no
053078ef1289 Made some adjustments
boisy
parents: 829
diff changeset
170 * parameters were passed) or the first non-space character of the
053078ef1289 Made some adjustments
boisy
parents: 829
diff changeset
171 * parameter.
053078ef1289 Made some adjustments
boisy
parents: 829
diff changeset
172 * Here we merely grab the byte at X into A and test for end of line,
902
bffd011cbef3 Made more changes
boisy
parents: 854
diff changeset
173 * exiting if so. Utilities that don't require arguments should
bffd011cbef3 Made more changes
boisy
parents: 854
diff changeset
174 * comment out the following three lines.
854
053078ef1289 Made some adjustments
boisy
parents: 829
diff changeset
175 lda ,x get first char
820
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
176 cmpa #C$CR CR?
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
177 lbeq ShowHelp if so, no parameters... show help and exit
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
178 GetChar lda ,x+ get next character on cmd line
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
179 cmpa #C$CR CR?
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
180 lbeq DoNGU if so, do whatever this utility does
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
181 cmpa #'- is it an option?
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
182 beq GetDash if so, process it
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
183 inc <filecnt else must be a non-option argument (file)
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
184 lbsr SkipNSpc move past the argument
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
185 ChkDash lbsr SkipSpcs and any following spaces
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
186 bra GetChar start processing again
1332
80f15c027ebb Improved ngu somewhat
boisy
parents: 1325
diff changeset
187 GetDash clr -1,x and wipe out the dash from the cmd line
820
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
188 GetDash2 ldd ,x+ load option char and char following
822
83e3677c8b1f Made option comparisons lowercase, added more help
boisy
parents: 821
diff changeset
189 ora #$20 make lowercase
83e3677c8b1f Made option comparisons lowercase, added more help
boisy
parents: 821
diff changeset
190 IsItA cmpa #'a is it this option?
820
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
191 bne IsItB branch if not
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
192 inc <gota
829
a114971abd3b Changed the name of a def because it collided with Level 2
boisy
parents: 823
diff changeset
193 bra FixCmdLn
822
83e3677c8b1f Made option comparisons lowercase, added more help
boisy
parents: 821
diff changeset
194 IsItB cmpa #'b is it this option?
820
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
195 bne IsItC branch if not
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
196 inc <gotb
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
197 bra FixCmdLn
822
83e3677c8b1f Made option comparisons lowercase, added more help
boisy
parents: 821
diff changeset
198 IsItC cmpa #'c is it this option?
820
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
199 bne BadOpt branch if not
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
200 tst <coptflg was this option already specified?
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
201 bne BadOpt show help if so
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
202 cmpb #'= 2nd char =?
823
357c62d55b8f Changes
boisy
parents: 822
diff changeset
203 lbne ShowHelp show help if not
820
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
204 inc <coptflg else tag this option as parsed
1332
80f15c027ebb Improved ngu somewhat
boisy
parents: 1325
diff changeset
205 * ldb #C$SPAC get space
80f15c027ebb Improved ngu somewhat
boisy
parents: 1325
diff changeset
206 clr -$01,x write over c
80f15c027ebb Improved ngu somewhat
boisy
parents: 1325
diff changeset
207 clr ,x+ and = sign, inc X to dest dir
820
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
208 * check for valid char after -c=
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
209 lda ,x
1332
80f15c027ebb Improved ngu somewhat
boisy
parents: 1325
diff changeset
210 lbeq ShowHelp
820
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
211 cmpa #C$SPAC
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
212 lbeq ShowHelp
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
213 cmpa #C$CR
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
214 lbeq ShowHelp
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
215 leay <copt,u point Y to parameber buffer
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
216 tfr y,d transfer Y to D
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
217 addd #COPTSIZ
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
218 pshs b,a save updated ptr value
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
219 L0339 lda ,x get byte at X
1332
80f15c027ebb Improved ngu somewhat
boisy
parents: 1325
diff changeset
220 clr ,x+ store nul byte at X and inc
820
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
221 sta ,y+ save loaded byte at Y and inc
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
222 cmpy ,s are we at end?
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
223 beq L035D branch if so (buffer too small)
1332
80f15c027ebb Improved ngu somewhat
boisy
parents: 1325
diff changeset
224 tsta else is char in A a nul byte?
80f15c027ebb Improved ngu somewhat
boisy
parents: 1325
diff changeset
225 beq L0350 branch if so
80f15c027ebb Improved ngu somewhat
boisy
parents: 1325
diff changeset
226 cmpa #C$SPAC a space?
820
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
227 beq L0350 branch if so
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
228 cmpa #C$CR cr?
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
229 bne L0339 get next byte if not
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
230 L0350 leax -1,x
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
231 sta ,x restore previous A
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
232 leas $02,s kill stack
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
233 lbra ChkDash
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
234 L035D leas $02,s
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
235 ldb #$BF else buffer size too small
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
236 orcc #Carry
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
237 lbra Exit
1332
80f15c027ebb Improved ngu somewhat
boisy
parents: 1325
diff changeset
238 FixCmdLn clr -$01,x and wipe out option character
820
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
239 cmpb #'0
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
240 lblt ChkDash start dash option processing again
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
241 lbra GetDash possibly another option following?
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
242
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
243 * We branch here if we encounter an unknown option character
821
b0b1886efbd0 added unknown option
boisy
parents: 820
diff changeset
244 * A = bad option character
b0b1886efbd0 added unknown option
boisy
parents: 820
diff changeset
245 BadOpt leax UnkOpt,pcr
b0b1886efbd0 added unknown option
boisy
parents: 820
diff changeset
246 ldy #UnkOptL
b0b1886efbd0 added unknown option
boisy
parents: 820
diff changeset
247 ldb #C$CR
b0b1886efbd0 added unknown option
boisy
parents: 820
diff changeset
248 pshs d save bad option and CR on stack
b0b1886efbd0 added unknown option
boisy
parents: 820
diff changeset
249 lda #$02 stderr
b0b1886efbd0 added unknown option
boisy
parents: 820
diff changeset
250 os9 I$Write
b0b1886efbd0 added unknown option
boisy
parents: 820
diff changeset
251 leax ,s point X at option char on stack
b0b1886efbd0 added unknown option
boisy
parents: 820
diff changeset
252 os9 I$WritLn print option and CR
b0b1886efbd0 added unknown option
boisy
parents: 820
diff changeset
253 puls d clean up stack
b0b1886efbd0 added unknown option
boisy
parents: 820
diff changeset
254 lbra ShowHelp
820
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
255
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
256
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
257 * At this point options are processed.
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
258 * We load X with our parameter pointer and go down the command line
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
259 * looking at each file to process (options have been wiped out with
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
260 * spaces)
823
357c62d55b8f Changes
boisy
parents: 822
diff changeset
261 *
357c62d55b8f Changes
boisy
parents: 822
diff changeset
262 * Note, the following two instructions may not be needed, depending on
357c62d55b8f Changes
boisy
parents: 822
diff changeset
263 * if your utility requires a non-option on the command line.
820
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
264 DoNGU tst <filecnt we should have at least one file on cmdline
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
265 lbeq ShowHelp if not, exit with error
1332
80f15c027ebb Improved ngu somewhat
boisy
parents: 1325
diff changeset
266 ldx <parmptr get our parameter pointer
823
357c62d55b8f Changes
boisy
parents: 822
diff changeset
267 DoLoop lbsr SkipSpcs skip any leading spaces
357c62d55b8f Changes
boisy
parents: 822
diff changeset
268 cmpa #C$CR end of parameters?
357c62d55b8f Changes
boisy
parents: 822
diff changeset
269 beq ExitOk if so, end the utility
357c62d55b8f Changes
boisy
parents: 822
diff changeset
270 pshs x save pointer to arg
357c62d55b8f Changes
boisy
parents: 822
diff changeset
271 bsr ProcFile process file at X
357c62d55b8f Changes
boisy
parents: 822
diff changeset
272 puls x get arg pointer
357c62d55b8f Changes
boisy
parents: 822
diff changeset
273 lbsr SkipNSpc skip the argument we just processed
357c62d55b8f Changes
boisy
parents: 822
diff changeset
274 bra DoLoop
357c62d55b8f Changes
boisy
parents: 822
diff changeset
275
357c62d55b8f Changes
boisy
parents: 822
diff changeset
276 * This routine processes one file at a time.
357c62d55b8f Changes
boisy
parents: 822
diff changeset
277 * Entry: X = ptr to argument on the command line.
357c62d55b8f Changes
boisy
parents: 822
diff changeset
278 * On exit, X can point to the argument or past it.
357c62d55b8f Changes
boisy
parents: 822
diff changeset
279 * Note that there are NO leading spaces.
357c62d55b8f Changes
boisy
parents: 822
diff changeset
280 * They have been skipped by the caller.
357c62d55b8f Changes
boisy
parents: 822
diff changeset
281 * The following code just echos the command line argument, followed
357c62d55b8f Changes
boisy
parents: 822
diff changeset
282 * by a carriage return.
357c62d55b8f Changes
boisy
parents: 822
diff changeset
283 ProcFile
357c62d55b8f Changes
boisy
parents: 822
diff changeset
284 pshs x save ptr
357c62d55b8f Changes
boisy
parents: 822
diff changeset
285 lda #$01 standard output
357c62d55b8f Changes
boisy
parents: 822
diff changeset
286 bsr StrLen get length of argument in Y
357c62d55b8f Changes
boisy
parents: 822
diff changeset
287 puls x recover ptr
357c62d55b8f Changes
boisy
parents: 822
diff changeset
288 os9 I$Write write name out
357c62d55b8f Changes
boisy
parents: 822
diff changeset
289 leax CR,pcr point to carriage return
357c62d55b8f Changes
boisy
parents: 822
diff changeset
290 os9 I$WritLn write it out
357c62d55b8f Changes
boisy
parents: 822
diff changeset
291 rts
820
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
292
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
293 ShowHelp equ *
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
294 IFNE DOHELP
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
295 leax >HlpMsg,pcr point to help message
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
296 ldy #HlpMsgL get length
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
297 lda #$02 std error
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
298 os9 I$WritLn write it
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
299 ENDC
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
300 ExitOk clrb clear carry
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
301 Exit os9 F$Exit and exit
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
302
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
303 * This routine counts the number of non-whitespace characters
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
304 * starting at X
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
305 *
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
306 * Entry:
1332
80f15c027ebb Improved ngu somewhat
boisy
parents: 1325
diff changeset
307 * X = ptr to string (space, nul byte or CR terminated)
820
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
308 * Exit:
823
357c62d55b8f Changes
boisy
parents: 822
diff changeset
309 * Y = length of string
820
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
310 * X = ptr to byte after string
823
357c62d55b8f Changes
boisy
parents: 822
diff changeset
311 StrLen pshs a
357c62d55b8f Changes
boisy
parents: 822
diff changeset
312 ldy #$0000
820
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
313 StrLenLp lda ,x+
1332
80f15c027ebb Improved ngu somewhat
boisy
parents: 1325
diff changeset
314 beq StrLenEx
820
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
315 cmpa #C$SPAC
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
316 beq StrLenEx
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
317 cmpa #C$CR
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
318 beq StrLenEx
823
357c62d55b8f Changes
boisy
parents: 822
diff changeset
319 leay 1,y
820
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
320 bra StrLenLp
823
357c62d55b8f Changes
boisy
parents: 822
diff changeset
321 StrLenEx puls a,pc
820
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
322
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
323 * This routine copies a string of text from X to Y until
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
324 * a whitespace character or CR is encountered
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
325 *
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
326 * Entry:
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
327 * X = ptr to src string
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
328 * Y = ptr to dest string
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
329 * Exit:
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
330 * D = number of bytes copied
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
331 * X = ptr to byte after original string
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
332 * Y = ptr to byte after copied string
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
333 StrCpy pshs u
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
334 ldu #$0000
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
335 CopyFnLp lda ,x+
1332
80f15c027ebb Improved ngu somewhat
boisy
parents: 1325
diff changeset
336 beq CopyFnEx
820
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
337 cmpa #C$SPAC
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
338 beq CopyFnEx
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
339 cmpa #C$CR
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
340 beq CopyFnEx
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
341 sta ,y+
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
342 leau 1,u
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
343 bra CopyFnLp
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
344 CopyFnEx tfr u,d
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
345 puls u,pc
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
346
1332
80f15c027ebb Improved ngu somewhat
boisy
parents: 1325
diff changeset
347 * This routine skip over spaces and nul bytes
820
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
348 *
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
349 * Entry:
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
350 * X = ptr to data to parse
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
351 * Exit:
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
352 * X = ptr to first non-whitespace char
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
353 * A = non-whitespace char
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
354 SkipSpcs lda ,x+
1332
80f15c027ebb Improved ngu somewhat
boisy
parents: 1325
diff changeset
355 beq SkipSpcs
820
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
356 cmpa #C$SPAC
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
357 beq SkipSpcs
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
358 leax -1,x
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
359 rts
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
360
1332
80f15c027ebb Improved ngu somewhat
boisy
parents: 1325
diff changeset
361 * This routine skips over everything but spaces, nul bytes and CRs
820
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
362 *
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
363 * Entry:
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
364 * X = ptr to data to parse
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
365 * Exit:
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
366 * X = ptr to first whitespace char
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
367 * A = whitespace char
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
368 SkipNSpc lda ,x+
1332
80f15c027ebb Improved ngu somewhat
boisy
parents: 1325
diff changeset
369 beq EatOut
820
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
370 cmpa #C$SPAC
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
371 beq EatOut
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
372 cmpa #C$CR
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
373 bne SkipNSpc
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
374 EatOut leax -1,x
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
375 rts
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
376
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
377 emod
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
378 eom equ *
2de53dfabcc8 Added for future development
boisy
parents:
diff changeset
379 end