+QueryDev
[www.jankratochvil.net.git] / project / QueryDev / QueryDev.asm
1 ;DEBUG  equ     1
2
3         include "SSMac.h"
4
5         clistart
6
7         moveq   #LDF_VOLUMES+LDF_DEVICES+LDF_READ,d1
8         call    dos,LockDosList
9         move.l  d0,d1
10         move.l  d0,d4
11         get.l   Arg_Volume,d2
12         moveq   #LDF_VOLUMES,d3
13         call    FindDosEntry
14         tst.l   d0
15         bne.s   EntryFound
16         dtl     <Volume %s not found>,a0
17 VolumeError     geta    Arg_Volume,a1
18         jump    ss,ExitError
19
20 EntryFound      move.l  d0,a2
21         move.l  dl_Task(a2),a2
22         moveq   #LDF_DEVICES,d2
23 NextDevice      move.l  d4,d1
24         call    NextDosEntry
25         dtl     <No device matching volume %s>,a0
26         move.l  d0,d4
27         beq.s   VolumeError
28         move.l  d0,a0
29         cmp.l   dvi_Task(a0),a2
30         bne.s   NextDevice
31         move.l  dvi_Name(a0),d2
32         moveq   #LDF_VOLUMES+LDF_DEVICES+LDF_READ,d1
33         call    UnLockDosList
34         lsl.l   #2,d2
35         move.l  d2,a0
36         get.l   Arg_VarName,d1
37         bne.s   SomeVarName
38         dtl     <DevName>,a1
39         move.l  a1,d1
40 SomeVarName     push    d1
41         moveq   #0,d3
42         move.b  (a0)+,d3
43         move.l  a0,d2
44         moveq   #1,d4
45         lsl.l   #GVB_GLOBAL_ONLY,d4
46         tstv.l  Arg_Global
47         bne.s   GlobalVar
48         lsl.l   #GVB_LOCAL_ONLY-GVB_GLOBAL_ONLY,d4
49 GlobalVar       call    SetVar
50         tst.l   d0
51         bne.s   Return
52         dtl     <Variable %s cannot be set>,a0
53         move.l  sp,a1
54         jump    ss,DosError
55
56 Return  addq    #4,sp
57         rts
58
59         tags
60         template <VOLUME/A,TO=VARNAME,GLOBAL/S>
61         dv.l    Arg_Volume
62         dv.l    Arg_VarName
63         dv.l    Arg_Global
64         finish
65         end