annotate level2/cmds/makdir.asm @ 0:6641a883d6b0

Initial revision
author boisy
date Thu, 04 Apr 2002 16:34:12 +0000
parents
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 * MakDir - create directories
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
3 *
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
4 * $Id$
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
5 *
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
6 * Ed. Comments Who YY/MM/DD
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
7 * ------------------------------------------------------------------
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
8 * 5 Makes multiple directories from a single ADK
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
9 * pathlist (i.e. foo/bar/bar2)
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
10
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
11 nam Makdir
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
12 ttl program module
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
13
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
14 * Disassembled 94/12/08 21:42:56 by Alan DeKok
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
15
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
16 ifp1
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
17 use defsfile
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
18 endc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
19
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
20 tylg set Prgrm+Objct
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
21 atrv set ReEnt+rev
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
22 rev set $01
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
23 edition set 5
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
24
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
25 mod eom,name,tylg,atrv,start,size
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
26
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
27 Param rmb 2 parameter area
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
28 MFlag rmb 1 made a directory yet from this pathlist?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
29 rmb 200 stack space
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
30 size equ .
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
31
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
32 name fcs /MakDir/
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
33 fcb edition
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
34
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
35 Sk.1 leax 1,x go on to the next character
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
36 Skip lda ,x get a character
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
37 cmpa #C$SPAC space?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
38 beq Sk.1 if so, skip it
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
39 rts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
40
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
41 * Any pathnames at all?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
42 * Exit with error if none
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
43 Start bsr Skip skip the first bit, if applicable
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
44 cmpa #C$SPAC is it a CR?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
45 bne start2 no, go ahead and make directories
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
46 comb set carry
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
47 ldb #E$BPNam a CR is a bad pathname...
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
48 bra Exit and go exit
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
49
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
50 * skip leading spaces or '/' and setup pointers
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
51 start1 bsr Skip skip any non-zero characters, if applicable
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
52 start2 ldb #$FF a non-zero value
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
53 stb <MFlag we haven't made a directory from this pathname yet
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
54 stx <Param save in the parameter area
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
55 cmpa #PDELIM leading slash?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
56 bne S.020 if not, go get the name
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
57
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
58 * find the pseudo-end of the pathname, stopping at space, cr, '/'
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
59 S.010 leax 1,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
60 S.020 lda ,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
61 cmpa #C$SPAC space?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
62 beq S.030
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
63 cmpa #C$CR cr?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
64 beq S.030
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
65 cmpa #PDELIM slash?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
66 bne S.010 if none of these, then skip this character
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
67
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
68 * force the pathname to be a subset of the full pathname
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
69 S.030 pshs a,x save byte found, where we found it
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
70 lda #C$CR force it to be a CR
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
71 sta ,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
72
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
73 *try to open it for reading, i.e. does it already exists?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
74 ldx <Param get the start address of this pathname
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
75 lda #DIR.+READ. open the directory for reading
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
76 os9 I$Open check if the directory already exists
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
77 bcs S.040 if there was an error opening it, go make it
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
78 OS9 I$Close close the path to the file
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
79 bra S.050 skip making this directory
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
80
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
81 * The partial pathname doesn't exist, so create it
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
82 S.040 ldx <Param get the start address of this pathname
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
83 ldb #^SHARE. everything but SHARE.
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
84 os9 I$MakDir
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
85 bcs Error
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
86 clr <MFlag clear the flag: we've successfully made a directory
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
87
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
88 * make pathname full again, and continue
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
89 S.050 puls a,x restore byte, address
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
90 sta ,x restore it
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
91 cmpa #PDELIM was it a slash?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
92 beq S.010 yes, make pathname full again, and find next one
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
93
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
94 * searched this pathname, have we made a directory from it?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
95 tst <MFlag have we made a directory?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
96 bne CEF if not, error out with fake E$CEF
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
97
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
98 * check for end/continue flag
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
99 cmpa #C$SPAC was it a space?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
100 beq start1 yup, go get another pathname to create
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
101
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
102 ClnExit clrb no error
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
103 Exit OS9 F$Exit and exit
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
104
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
105 CEF comb set carry
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
106 ldb #E$CEF we've just tried to create an existing file
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
107 Error pshs b,cc save error code
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
108
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
109 lda #2 to STDERR
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
110 leax EMsg,pc to error found string
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
111 ldy #Elen
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
112 OS9 I$Write
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
113
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
114 ldx <param get pathname we're trying to open
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
115 ldy #200 a _very_ long pathname
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
116 OS9 I$WritLn we're sure that the name ends in a CR...
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
117 puls b,cc restore error code, condition
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
118 bra Exit
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
119
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
120 EMsg fcc /makdir: error creating /
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
121 ELen equ *-EMsg
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
122
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
123 emod
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
124 eom equ *
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
125 end