home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / TURBODSG / RTDS15UP.LBR / REMUSR.MQC / REMUSR.MAC
Text File  |  2000-06-30  |  5KB  |  294 lines

  1. ;REMUSR.MAC - T-function 41 support for remote TD system
  2. ;          (works with SPICPS module)
  3. ; 02-22-85 fixed to use tdos parameter area correctly thru
  4. ;       user of IY register.
  5. ; 05-09-85 installed rsp for twix detect/display
  6. ;
  7.     name    ('remusr')
  8. ;
  9. cr    equ    0dh
  10. lf    equ    0ah
  11. ;
  12. wtsecs    equ    180        ; 3 minute timeout timer
  13. ;
  14. .z80
  15. ;
  16. ; If you use this with TurboPlus 1.41, please consult your TurboPlus
  17. ; manual. you may have to gen in "USRSUP".
  18. ;
  19.     public    usrfcn,uprms,usrnit
  20.     extrn    crproc,alloc,conin
  21. ;
  22.     common    /?init?/
  23. ;
  24. usrnit:    ld    a,(conin+3)
  25.     ld    (ci03),a
  26.     ld    a,(conin+1eh)
  27.     ld    (ci1e),a
  28.     ld    a,1
  29.     ld    (remoff),a        ;come up dualio on
  30.     ld    h,0
  31. dly:    dec    hl
  32.     ld    a,h
  33.     or    l
  34.     jr    nz,dly
  35.     ld    de,twix
  36.     call    crproc##
  37.     jp    usrnt1##
  38. ;
  39.     cseg
  40. ;
  41. usrfcn:    push    iy
  42.     ld    iy,(memres##+4)
  43.     ld    a,h
  44.     cp    90h        ;90h = set parameters
  45.     jp    z,setpar
  46.     cp    91h        ;91h = get parameters
  47.     jr    z,getpar
  48.     cp    92h
  49.     jp    z,gsbk        ;92h = set/reset break
  50.     cp    93h
  51.     jp    z,reb        ;93h = reset slave
  52.     cp    94h
  53.     jr    z,priv        ;94h, l=0=nonpr, l=1=priv
  54.     cp    95h
  55.     jr    z,glob        ;95h, l=0=inhibit global, l=1=allow global
  56.     cp    96h
  57.     jp    z,unrs        ;96h = unrestrict user area in L
  58.     cp    97h
  59.     jp    z,remc        ;97h, l=0=dualio off, l=1=dualio on
  60.     cp    98h
  61.     jp    z,abpr        ;experimental
  62.     xor    a
  63.     dec    a        ;return with invalid
  64.     pop    iy
  65.     jp    usrfc1##
  66. ;
  67. popr:    pop    iy
  68.     ret
  69. ;
  70. ; this should make your hair stand up straight and send
  71. ; goose bumps up your spine...
  72. ;
  73. priv:    ld    a,l
  74.     or    a
  75.     jr    z,npr
  76.     set    7,(iy+5bh)
  77.     jr    popr
  78. ;
  79. npr:    res    7,(iy+5bh)
  80.     jr    popr
  81. ;
  82. glob:    ld    a,l
  83.     or    a
  84.     jr    z,ngl
  85.     set    5,(iy+5bh)
  86.     jr    popr
  87. ngl:    res    5,(iy+5bh)
  88.     jr    popr
  89. ;
  90. getpar:
  91. ; the following code must be uncommented for use with no command int!
  92.     push    bc
  93.     ld    hl,(srhdrv##+1)
  94.     inc    hl
  95.     ld    a,(hl)
  96.     inc    hl
  97.     or    a
  98.     jr    nz,nidle
  99.     ld    hl,idlem
  100. nidle:    ld    de,proc
  101.     ld    bc,23        ;up to 23 char of command line
  102.     ldir
  103.     xor    a        ;terminate cl
  104.     ld    (de),a
  105.     ld    hl,uusr
  106.     ld    a,(iy+40h)
  107.     ld    (hl),a
  108.     inc    hl
  109.     ld    a,(iy+3dh)
  110.     ld    (hl),a
  111.     ld    a,(iy+5bh)
  112.     and    80h
  113.     ld    (privf),a    ;store privilege flag
  114.     pop    bc
  115. ; end of code for TD-resident CPR
  116.     ld    d,b        ;move destination address...
  117.     ld    e,c        ;...to de
  118.     ld    hl,uprms
  119. movpar:    ld    bc,128
  120.     ldir
  121.     xor    a
  122.     jr    popr
  123. ;
  124. setpar:    ld    h,b
  125.     ld    l,c
  126.     ld    de,uprms
  127.     jr    movpar
  128. ;
  129. gsbk:    ld    a,l
  130.     or    a
  131.     jr    nz,on
  132.     ld    a,0c9h
  133.     ld    (conin+3),a
  134. gsbk1:    ld    (conin+1eh),a
  135.     xor    a
  136.     jp    popr
  137. ;
  138. on:    ld    a,(ci03)
  139.     ld    (conin+3),a
  140.     ld    a,(ci1e)
  141.     jr    gsbk1
  142. ;
  143. remc:    ld    a,l
  144.     ld    (remoff),a
  145.     jp    popr
  146. ;
  147. reb:    di
  148.     halt
  149. ;
  150. ; unrestrict a certain user area
  151. ; ret with Z = not found, NZ = success
  152. ;
  153. unrs:    ld    a,l
  154.     inc    a
  155.     ld    hl,usrtbl
  156.     ld    b,(hl)
  157.     inc    hl
  158. ..u:    cp    (hl)
  159.     jr    z,..us
  160.     inc    hl
  161.     djnz    ..u
  162.     ld    e,0
  163.     jp    popr
  164. ;
  165. ..us:    ld    (hl),0
  166.     ld    e,0ffh
  167.     jp    popr
  168. ;
  169. ; command interpreter restriction
  170. ; keep caller outta user 0 and whatever
  171. ;
  172. cmdres::
  173.     ld    a,(uacl)
  174.     cp    9
  175.     jr    z,gocfun
  176.     ld    a,e        ;get set/get fcn
  177.     inc    a        ;test for set
  178.     jr    z,gocfun    ;get user number -- do it
  179.     push    hl
  180.     ld    hl,usrtbl    ;point to user # table
  181.     ld    b,(hl)        ;get count
  182.     inc    hl
  183. ..rl:    cp    (hl)        ;if user # in table...
  184.     jr    z,..rs        ;...then restrict
  185.     inc    hl
  186.     djnz    ..rl
  187.     pop    hl
  188. gocfun:    ld    c,32
  189.     jp    cmdint##+247h
  190. ;
  191. ..rs:    pop    hl
  192.     ret            ;restrict = do nothing
  193. ;
  194. abpr:    ld    hl,abc
  195.     inc    (hl)
  196.     jp    popr
  197. ;
  198. ; twix resident process
  199. ;
  200. twix:    call    donot        ; check and possibly display
  201.     ld    de,60        ; delay 1 second
  202.     ld    c,2
  203.     call    otntry##
  204.     ld    a,(ulog)
  205.     cp    77h
  206.     jr    nz,twix
  207.     ld    a,(tomc##)
  208.     cp    0ffh
  209.     jr    nz,cht
  210.     ld    a,(seccnt)
  211.     dec    a
  212.     ld    (seccnt),a
  213.     jr    nz,twix
  214.     ld    hl,swat
  215.     call    xxot
  216.     ld    de,120        ; delay 2 seconds before doomsday
  217.     ld    c,2
  218.     call    otntry##
  219.     di
  220.     halt
  221. ;
  222. cht:    ld    a,wtsecs
  223.     ld    (seccnt),a
  224.     jr    twix
  225. ;
  226. donot:    ld    hl,noteon
  227.     ld    a,(hl)
  228.     inc    a
  229.     ret    nz
  230.     ld    (hl),0
  231.     inc    hl
  232. xxot:    ld    a,(conast##)
  233.     ld    b,a
  234. ..l1:    ld    a,(hl)
  235.     cp    '$'
  236.     ret    z
  237.     inc    hl
  238.     ld    e,2
  239.     ld    c,a
  240.     push    hl
  241.     push    bc
  242.     call    condra##
  243.     pop    bc
  244.     pop    hl
  245.     jr    ..l1
  246. ;
  247.     dseg
  248. ;
  249. usrtbl:    db    4        ;number of entries (4)
  250.     db    1        ;user 0
  251.     db    2        ;user 1
  252.     db    3        ;user 2
  253.     db    32        ;user 31
  254.     ds    28        ;room for 32 total
  255. ;
  256. ci03:    db    0
  257. ci1e:    db    0
  258. ;
  259. remoff::db    0ffh
  260. seccnt:    db    wtsecs
  261. swat:    db    cr,lf,lf,'SWAT!',cr,lf,lf,'$'
  262. ;
  263. int:    db    0
  264. abc::    db    0
  265. ;
  266. idlem:    db    '+++IDLE(8)+++',0
  267. ;
  268. timtbl::db    20,10,10,30,60,60,10,10,30,255    ;ACL time
  269. ;    ACL  =     0  1  2  3  4  5  6  7  8  9
  270. ;
  271. ; parameter block
  272. ;
  273. uprms:
  274. uacl::    db    0        ;access level
  275. ulog::    db    0        ;logged flag
  276. uintm::    db    0,0,0,0,0    ;login time/date
  277. uusr::    db    0        ;current user
  278. udrv:    db    0        ;current drive
  279. ucurt:    db    0,0,0,0,0,0    ;current time (not used here)
  280. privf:    db    0        ;priv flag (0=nonpr, 80=priv)
  281. name:    db    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0    ;up to 16 chars of name
  282. proc:    ds    31        ;process
  283. noteon::db    0        ;0=empty, ff=64-byte note follows
  284. ;
  285. ; the following field must be up to 64 char with terminating dollar sign.
  286. ;
  287. note::    ds    64
  288.     end
  289.     ret    z
  290.     inc    hl
  291.     ld    e,2
  292.     ld    c,a
  293.     push    hl
  294.     pu