-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathUade01.asm
365 lines (283 loc) · 9.7 KB
/
Uade01.asm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
;;.OPT
;;2; FILE > Uade01
;;.TTL
;;Fileserver file UADE01
;;ORG &400
.UADE01
;*********************************
;* H E A D E R F I L E 1 *
;*********************************
;*** MODULE CODE NAMES ***
;* NOTE WHENEVER A MODULE IS ENTERED *
;* IT PLACES ITS NAME ON THE ARGUMENT *
;* STACK (THIS IS DONE BY THE ENTER RTN) *
MODUSR = &10;=> USRMAN (THE USERTB MANAGER)
MODAUT = &20;=> AUTMAN (THE AUTHENTICATOR)
MODSTR = &30;=> STRMAN (THE STORE MANAGER)
MODDIR = &40;=> DIRMAN (THE DIRECTORY MANAGER)
MODMAP = &50;=> MAPMAN (THE MAP MANAGER)
MODRND = &60;=> RNDMAN (THE RANDOM ACCESS MANAGER)
MODDSC = &70;=> DSCMAN (THE DISC MANAGER)
MODCOM = &80;=> CMND. PROCESSOR PSEUDO NAME
EXTER0 = &C0;=> external (BBC Machine) number
;USRMAN RETURN CODES
URERRA = EXTER0 - 1;MACHINE NUMBER NOT IN USERTB
URERRB = EXTER0 - 8;USERTB FULL
URERRD = MODUSR + 4;OBJECT NOT A DIRECTORY
URERRE = EXTER0 -&12;USER NOT LOGGED ON
URERRF = MODUSR + 6;M/C NUMBER EQUALS ZERO
;STRMAN RETURN CODES
STERRB = MODSTR + 2;SIN = 0
STERRD = MODSTR + 4;REF COUNT = $00
STERRE = MODSTR + 5;SIZE TOO BIG OR SIZE=0 !
STERRF = MODSTR + 6;INVALID WINDOW ADDRESS
STERRG = MODSTR + 7;NO FREE CACHE DESCRIPTORS
STERRH = MODSTR + 8;WINDOW REF COUNT > 0
STERRK = MODSTR +&0B;REF COUNT = $FF
STERRL = MODSTR +&0C;STORE DEADLOCK !!
STERRM = MODSTR +&0D;ARITH OVERFLOW IN TSTGAP
;DIRMAN RETURN CODES
DRERRA = &CC;INVALID SEPARATOR IN FILE TITLE
DRERRB = MODDIR + 2;BROKEN DIRECTORY
DRERRC = &D6;OBJECT NOT FOUND
DRERRD = EXTER0 - 2;OBJECT NOT A DIRECTORY
DRERRE = EXTER0 - 3;INSUFFICIENT ACCESS
DRERRF = MODDIR + 6;WRONG ARG TO SET/READ OBJECT ATTRIBUTES
DRERRG = &C3;DIR ENTRY LOCKED
DRERRI = &C2;OBJECT IN USE (I.E. OPEN)
DRERRJ = EXTER0 -&C;DIR NOT EMPTY
DRERRK = EXTER0 -&11;TYPES DON'T MATCH
DRERRL = MODDIR +12;NO WRITE ACCESS
DRERRM = EXTER0 -&D;MAX DIR SIZE REACHED
DRERRN = MODDIR +14;CLIENT ASKS FOR TOO MANY ENTRIES
DRERRO = MODDIR +15;BAD ARG. TO EXAMINE
DRERRP = MODDIR +1;cdir too big
;AUTMAN RETURN CODES
ATERRA = MODAUT + 1;CANNOT FIND PASSWORD FILE
ATERRB = EXTER0 - 4;USERID NOT FOUND IN PW FILE
ATERRC = EXTER0 - 5;INCORRECT PASSWORD
ATERRD = EXTER0 - 6;INSUFFICIENT PRIVILEGE
ATERRE = EXTER0 - 7;SYNTAX ERROR IN PASSWORD
ATERRF = EXTER0 -&F;USERID ALREADY IN PASSWORD FILE
ATERRG = ∾bad user name in PW file**13/4/83**
ATERRH = EXTER0 -&E;PASSWORD FILE FULL UP
ATERRI = MODAUT + 9;OBJECT '$.PASSWORDS' HAS WRONG TYPE
;RNDMAN RETURN CODES
RDERRA = MODRND + 1;RNDMAN.RESTART CALLED TWICE
RDERRB = &DE;INVALID HANDLE
RDERRC = &C0;HANDLE QUOTA EXHAUSTED
RDERRD = MODRND + 4;HANDTB FULL
RDERRE = RDERRA;OBJECT NOT OPEN
RDERRF = MODRND + 6;RNDMAN.COPY NOT FOR FILE OBJECTS
RDERRG = MODRND + 7;RANDTB FULL
RDERRH = &C2;File already open
RDERRI = MODRND + 9;Object not file
RDERRJ = &DF;END OF FILE
RDERRK = DRERRE;Insufficient access
RDERRL = EXTER0 -&9;Attempt to point outside file
RDERRM = MODRND +&0D;Invalid arg to RDSTAR
RDERRN = &C1;File not open for update
RDERRO = &D4;File not open for input ** 15/11/84 **
;MAPMAN RETURN CODES
MPERRA = &C8;DISC NUMBER NOT FOUND
MPERRB = &C6;DISC SPACE EXHAUSTED
MPERRC = MODMAP + 3;SIN NOT FOR START OF CHAIN
MPERRD = MODMAP + 4;DISC NOT A FILE SERVER DISC
MPERRF = MODMAP + 6;ILLEGAL DRIVE NUMBER
MPERRI = MODMAP + 9;NEW MAP DOESN'T FIT IN OLD SPACE
MPERRJ = MODMAP +&0A;DISC OF SAME NAME ALREADY IN USE !
MPERRK = &D6;DISC NAME NOT FOUND
MPERRL = EXTER0 -&A;DISC ERROR ON MAP READ/WRITE
MPERRM = MODMAP + 11;NO MORE SPACE IN MAP DESCRIPTORS
MPERRN = MODMAP + 12;Insufficient user free space (yay!)
;DSCMAN RETURN CODES
DCERRA = MODDSC + 1;INVALID NUMBER OF SECTORS
DCERRB = MODDSC + 2;STORE ADDRESS OVERFLOW
DCERRC = MODDSC + 3;ACCESSING BEYOND END OF FILE
DCERRE = &C9;DISC PROTECTED
DCERRF = &C7;UNRECOVERABLE DISC ERROR
;COMMAND PROC Errors
RNAMQQ = EXTER0 -&10;Renaming accross two discs
LODERA = EXTER0 -&B;Trying to load a directory
LODERB = DRERRE;Insufficient access
SAVERA = MODCOM + 3;Too much data sent from client
WAITER = MODCOM + 4;Wait bombs out
COERRA = MODCOM + 5;Invalid function code
SAERRA = &CF;Invalid setaccess string
SYNERR = &FE
NAMERR = &FD;Bad file name etc.
SAERRC = MODCOM +&0A;File too big
WOTERR = &FE
SPERRA = MODCOM +&0C;Bad priviledge letter
PBERRA = MODCOM +&0D;Excess data in PUTBYTES
INFERA = MODCOM +&0E;Bad INFO argument.
ARGERR = MODCOM +&0F;Bad arg to RDAR
DTERR = MODCOM +&10;Bad date and time
;INTERNAL ERRORS
IERRAA = 1;(SETFS) FRAME SIZE TOO BIG
IERRAB = 2;(ENTRY) FUNCT CODE = 0
IERRAC = 3;(ENTRY) UNKNOWN ENTRY REASON
IERRAD = 4;(GETVEC) SIZE TOO BIG
IERRAE = 5;(GETVEC) INSUFFICIENT SPACE
IERRAF = 6;(GETVEC) SIZE OF STORE REQUESTED = 0
IERRAH = 8;(GETINT) NOT A DIGIT
IERRAI = 9; UNABLE TO OPEN RXCB
IERRAJ = 10;(RDBTMP) BIT MAP DISC ERROR
IERRAK = 11;writing to sector zero
;NEW ERRORS FOR LEVEL3
;F6 cached bit map holds no free sectors
;FC single block allocate fails
;FA multiple block allocate fails
;F9 attempting to zero an illegal amount of disc
;F8 write error (data read <> data written)
;F5 Internal bit map cache error
;COMMAND CODES SENT TO CLIENT
CCSAVE = 1
CCLOAD = 2
CCCAT = 3
CCINF = 4
CCLGON = 5
CCSDIS = 6
CCSDIR = 7
CCCMND = 8
CCSLIB = 9
CCDSCS = &A
CCUSRS = &B
;M A N I F E S T S
;ODDS AND ENDS
OSWRCH = &FFEE;BBC addresses here
OSRDCH = &FFE0
OSCRLF = &FFE7
OSCLI = &FFF7
OSASCI = &FFE3
OSWORD = &FFF1
OSBYTE = &FFF4
STKSZE = &FF;SIZE OF ARGUMENT STACK
MAXUSE = 80; Maximum number of users
MAXDRV = 5; Maximum number of drives
BASEYR = 81;BASE YEAR FOR FS DATE
YRHUND = 20
ESC = &1B
ABTCH = 'Q'
ACK = 6
NACK = &15
;BOOLEAN CONSTANTS
;DIRTY MARKER (CLEAN=0)
DIRTY = &FF
UNLKIT = &FF
;INTER MODULE ARGUMENT STACK CONSTANTS
FRAMSZ = 0;POSN OF FRAME SIZE ON ARGUMENT STACK
MODNME = 1;POSN OF MODULE NAME ON ARGUMENT STACK
ENTRES = 2;POSN OF MODULE ENTRY REASON ON ARGUMENT STACK
FINFO = ENTRES + 1;SIZE OF INFO STORED ON ARGUMENT STACK
ARGA = FINFO;FOR FUNCTION CODE AND RETURN CODE
ARGB = ARGA + 1
ARGC = ARGB + 1
ARGD = ARGC + 1
ARGE = ARGD + 1
ARGF = ARGE + 1
ARGG = ARGF + 1
ARGH = ARGG + 1
ARGI = ARGH + 1
ARGJ = ARGI + 1
ARGK = ARGJ + 1
ARGL = ARGK + 1
ARGM = ARGL + 1
ARGN = ARGM + 1
ARGO = ARGN + 1
ARGP = ARGO + 1
ARGQ = ARGP + 1
ARGR = ARGQ + 1
ARGS = ARGR + 1
ARGT = ARGS + 1
;DISC BLOCK SIZE
BLKSZE = &100;= 256 BYTES
;FLAGS AND MASKS (ACCESS BITS ETC.)
READAC = 1;BIT0 -> READ ACCESS
WRITAC = 2;BIT1 -> WRITE ACCESS
LOCKED = &10;BIT4 -> LOCK BIT
TYPE = &20;BIT5 -> TYPE BIT (DIR/FILE)
OWNER = &40;BIT6 -> OWNER ACCESS BIT
LOCKPV = &20;BIT5 -> LOCK USER PRIVILEGES, E.G. PREVENT CHANGE OF PASSWORD
SYSTPV = &40;BIT6 -> SYSTEM PRIVILEGE
NTSYST = &9F; &BF;Complement of SYSTPV
INUSE = &80;BIT7 -> IN USE BIT
FILEJC = &80;BIT7 -> FILE JUST CREATED
TYPFIL = 0;OBJECT TYPE = FILE
TYPDIR = &20;OBJECT TYPE = DIRECTORY
ANYBDY = 0;ANYBODY ACCESS
RDWRAC = 3;READ WRITE ACCESS
RWLACC = &13;Read/write/locked access
ACCDEF = &C;Owner RW, public no access
TXFLAG = &80
RXFLAG = &7F
MONON = &FF
MONOFF = 0;Monitor switch
;D O S ROUTINES AND ADDRESSES
TRADD = 1
CMD = 5;SCSI command byte
LENGTH = &B
;PAGE ZERO
CLEAR 0,256
ORG &B0
.ARGPTR SKIP 2;PTR TO CUR STK ARGS
.NEWARG SKIP 2;PTR TO NEW ARGS
ORG &20
.CLRPTR SKIP 2;PTR USED BY CLRSTR RTN
.MOVFRM SKIP 2;PTR USED BY MOVE & COMPAR RTNS
.MOVTO SKIP 2;PTR USED BY MOVE & COMPAR RTNS
.COMPTR SKIP 2;PTR TO COMND LINE(RDLINE)
.GENPTR SKIP 2;PTR AVAILABLE TO ALL MODULES
.USTPTR SKIP 2;PTR TO USERTB (USRMAN/FINDMC)
.URMPPT SKIP 2;PTR TO USERINFO(USRMAN)
.PREV SKIP 2;PTR TO PREVIOUS CACHE ENTRY(STRMAN)
.CRNT SKIP 2;PTR TO CURRENT CACHE ENTRY(STRMAN)
.CMPPTR SKIP 2;PTR TO ARGUMENTS (STRMAN)
.NAMPTR SKIP 2;PTR TO FILE TITLE (DIRMAN)
.PREVEN SKIP 2;PTR TO PREVIOUS DIR ENTRY (DIRMAN)
.CRNTEN SKIP 2;CURRENT DIR ENTRY (DIRMAN)
.TXTPTR SKIP 2;USED TO PT TO CHARS IN TXTNAM(DIRMAN)
.DIRFRE SKIP 2;PTR TO FREE CHAIN PTR (DIRMAN)
.INFPTR SKIP 2;PTR TO STORE AREA FOR RETRIEVE INFO
.DPTRLD SKIP 2;PTR TO FIRST BYTE OF A DIR
.DPTRTR SKIP 2;PTR TO LAST BYTE OF DIR
.DRUSIN SKIP 2;PTR TO USERINFO
.HNDPTR SKIP 2;PTR TO HANDLE INFO (SET BY FNDHND)
.RNDPTR SKIP 2;PTR TO OBJECT DETAILS (RNDMAN)
.RNDTMP SKIP 3;Current buffer position (RNDMAN)
.AUTPTR SKIP 2;POINTER TO USERID (AUTMAN)
.PWFPTR SKIP 2;PASSWORD FILE POINTER(AUTMAN)
.ATUSPT SKIP 2;PTR TO AUTMAN'S USERINFO AREA
.JWORK SKIP 2;Used in UADE14
.MAPPTR SKIP 2;PTR TO BASE OF DISC MAP
.MPSCPT SKIP 2;POINTER INTO MAP
.MPMBPT SKIP 2;MAP BLOCK PTR
.MAPENT SKIP 2;PTR. TO MAP TABLE ENTRY
.MPCYPT SKIP 2;PTR TO CYLINDER MAP
.MAPGEN SKIP 2;GENERAL MAP MANAGER PTR
.GNCBPT SKIP 2;GENERAL CONTROL BLOCK POINTER
.DNMPTR SKIP 2;PTR TO DISC NAME (MAPMAN)
.DNMBUF SKIP &12;DISC NAME BUFFER
.DSCTMP SKIP 2;PTR TO A MAP'S DIRTY FLAG (DSCMAN)
.CVTUPT SKIP 2;USER INF. PTR. CVT. PROG.
.SCTPTR SKIP 2;PTR TO SECTOR ZERO (SEE STRTFS)
.NETCB SKIP 2;POINTER TO NET CONTROL BLOCK (C.PROC.)
.RTEPTR SKIP 2;Ptr. to RNDTAB entry
.RDUPTR SKIP 2;Ptr. to user id. in RNDPTR
.COZERO ;12 byte area used by C.proc.
;zero page used in RENAME 24/9/84
.LAST SKIP 1
.NAME SKIP 1
.ONAME SKIP 1
.RTYPE SKIP 1
.PTR SKIP 2
.PTR1 SKIP 2
.REXIST SKIP 1
ORG COZERO + 12
;***
.VSTPTR SKIP 2;area used by VSTRNG only
.OLDEV SKIP 2
.GP1 SKIP 2;ANOTHER GENERAL POINTER
BRKPTR = &FD;2 byte pointer used in MOS BRK handling
;.LNK
;UADE02