home *** CD-ROM | disk | FTP | other *** search
/ Boot Disc 8 / boot-disc-1997-04.iso / PDA_Soft / Psion / comms / p3nfs / nfsc / nfsc.opl < prev    next >
Text File  |  1996-05-26  |  5KB  |  225 lines

  1. REM nfsc ╕1994 Rudolf König
  2. REM rfkoenig@immd4.uni-erlangen.de
  3. REM nfsc has to be distributed under
  4. REM the GNU Copyleft (Version 2)
  5. REM Please send email to jnweiger@immd4.informatik.uni-erlangen.de
  6.  
  7. REM uadd by Volker Lausch <volli@cs.tu-berlin.de>
  8.  
  9. proc transmit:
  10.     local dirnam$(255),hdr$(255),rname$(255),buf$(250)
  11.     local i%, ret%, cmd%, len%, hdradr%, statadr%
  12.     local roff&, size&, rh%, stat$(16), st2$(16), st2adr%
  13.     local wh%, dowr%, off&, dv$(5,7), dev$(8), maxdev%
  14.  
  15.     lopen "TTY:A" 
  16.     rsset:(16, 0, 8, 1, 0, &0)
  17.  
  18.     dv$(1) = "LOC::M:"
  19.     dv$(2) = "LOC::A:"
  20.     dv$(3) = "LOC::B:"
  21.     dv$(4) = "ROM::"
  22.     dv$(5) = "LOC::C:"
  23.     maxdev% = 3
  24.  
  25.     hdradr% = addr(hdr$) : st2adr% = addr(st2$)
  26.     pokeb addr(stat$), 12
  27.  
  28.     print "Welcome to nfsc, version 2.0 beta, pl10"
  29.     while 1
  30.         len% = 0 : cmd% = 1
  31.         iow(-1, 1, #uadd(addr(len%),0), cmd%)
  32.         ret% = iow(-1, 1, #uadd(hdradr%,0), len%)
  33.         if ret%
  34.           if ret% = -57
  35.             print "@";
  36.             continue
  37.           endif
  38.           raise ret%
  39.           stop
  40.         endif
  41. rem print "Got:";peekb(hdradr%+len%-1),hdr$,
  42.         ret% = 7
  43.         vector peekb(hdradr%+len%-1)
  44.             creat, gattr, mkd,  read
  45.             rdir,  remv,  renm, rmd
  46.             sattr, write, getd, statd
  47.         endv
  48.         lprint chr$(1); : print "X";
  49.         continue
  50.  
  51. sattr::
  52.         ret% = call($987, hdradr%+1, $f2f, 0,0,hdradr%+len%-3)
  53.         lprint chr$(ret%); : print "s";
  54.         continue
  55.  
  56. renm::
  57.         len% = peekb(hdradr%+len%-2)
  58.         iow(-1,1,#uadd(addr(dirnam$),0),len%)
  59.         trap rename hdr$, dirnam$
  60.         lprint chr$(err); : print "n";
  61.         continue
  62.  
  63. remv::
  64.         trap delete hdr$
  65.         lprint chr$(err); : print "d";
  66.         continue
  67.  
  68. rmd::
  69.         trap rmdir hdr$ : print "z";
  70.         lprint chr$(err);
  71.         continue
  72.  
  73. mkd::
  74.         trap mkdir hdr$ : print "m";
  75.         lprint chr$(err);
  76.         continue
  77.  
  78. creat::
  79.         ret% = ioopen(i%, hdr$, 2)
  80.         if ret%
  81.             lprint chr$(ret%); : print "C";
  82.         else
  83.             lprint chr$(0); : print "c";
  84.             ioclose(i%)
  85.         endif
  86.         continue
  87.  
  88. write::
  89.         off& = peekl(hdradr%+len%-7)
  90.         len% = peekw(hdradr%+len%-3)
  91.  
  92.         dowr% = 1
  93.         ret% = ioopen(wh%, hdr$, $300)
  94.         if ret% : dowr% = 0 : endif
  95.         if dowr% and (off& > 0)
  96.             ret% = ioseek(wh%, 1, off&)
  97.             if ret% : dowr% = 0 : endif
  98.         endif
  99.  
  100.         while len%
  101.             i% = len% : if i% > 250 : i% = 250 : endif
  102.             iow(-1,1,#uadd(addr(buf$),1),i%)
  103.             if dowr%
  104.                 ret% = iowrite(wh%, uadd(addr(buf$),1), i%)
  105.                 if ret% : dowr% = 0 : ioclose(wh%) : endif
  106.             endif
  107.             len% = len% - i%
  108.         endwh
  109.  
  110.         if dowr%
  111.             lprint chr$(0); : print "w";
  112.             ioclose(wh%)
  113.         else
  114.             lprint chr$(ret%); : print "W";
  115.         endif
  116.         continue
  117.  
  118. read::
  119.         off& = peekl(hdradr%+len%-7)
  120.         len% = peekw(hdradr%+len%-3)
  121.  
  122.         ret% = call($887, hdradr%+1, addr(stat$)+1, 0, 0, 0)
  123.         if ret%
  124.             lprint chr$(ret%); : print "R"; : continue
  125.         endif
  126.         if rname$ <> hdr$
  127.             if rh% : ioclose(rh%) : roff& = 0 : endif
  128.             ret% = ioopen(rh%, hdr$, $600)
  129.             if ret%
  130.                 lprint chr$(ret%); : print "R";
  131.                 hdr$ = "" : continue
  132.             endif
  133.             rname$ = hdr$
  134.         endif
  135.         size& = peekl(addr(stat$)+5)
  136.         if off& > size& : off& = size& : endif
  137.         if roff& <> off&
  138.             if ioseek(rh%, 1, off&)
  139.                 lprint chr$(1); : continue
  140.             endif
  141.             roff& = off&
  142.         endif
  143.         if off& + len% > size& : len% = size& - off& : endif
  144.         if len% < 0 : len% = 0 : endif
  145.         lprint chr$(0);stat$; : print "r";
  146.  
  147.         while len% > 0
  148.             i% = len% : if i% > 250 : i% = 250 : endif
  149.             ret% = ioread(rh%, uadd(addr(buf$),1), i%)
  150.             roff& = roff& + ret% : len% = len% - ret%
  151.             pokeb addr(buf$),ret% : lprint buf$;
  152.             if ret% <> i% : break : endif
  153.         endwh
  154.         if roff& = peekl(addr(stat$)+5)
  155.             ioclose(rh%) : rname$ = "" : roff& = 0 : rh% = 0
  156.         endif
  157.         continue
  158.  
  159. gattr::
  160.         ret% = call($887, hdradr%+1, addr(stat$)+1, 0, 0, 0)
  161.         if ret%
  162.             lprint chr$(ret%); : print "G";
  163.         else
  164.             if peekb(addr(stat$)+3) and 16
  165. statd::
  166.                 rem damned filesystem without linkcount :(
  167.                 i% = 0
  168.                 hdr$=dir$(hdr$+"\")+chr$(0) 
  169.                 while hdr$ <> chr$(0)
  170.                     call($887, hdradr%+1, st2adr%+1, 0, 0, 0)
  171.                     if peekb(st2adr%+3) and 16 : i% = i% + 1 : endif
  172.                     hdr$=dir$("")+chr$(0)
  173.                 endwh
  174.                 pokew addr(stat$)+1, i%
  175.                 if ret% = 7 : lprint chr$(0);stat$; : print "f"; : continue : endif
  176.             endif
  177.             lprint chr$(0);stat$; : print "g";
  178.         endif
  179.         continue
  180.  
  181. rdir::
  182.         lprint chr$(0); : print "l";
  183.         dirnam$=dir$(hdr$) : lprint dirnam$;chr$(0);
  184.         while dirnam$ <> ""
  185.             dirnam$=dir$("") : lprint dirnam$;chr$(0);
  186.         endwh
  187.         continue
  188.  
  189. getd::
  190.         i% = 1 : lprint chr$(0); : pokeb addr(buf$), 14
  191.         while i% <= maxdev%
  192.             dev$ = dv$(i%)+chr$(0)
  193.             ret% = call($a87, addr(dev$)+1, addr(buf$)+1, 0, 0, 0)
  194.             if ret% = 0: lprint dv$(i%);chr$(0);buf$; : endif
  195.             i% = i% + 1
  196.         endwh
  197.         lprint chr$(0); : print ">";
  198.         continue
  199.  
  200.     endwh
  201. endp
  202.  
  203. PROC rsset:(bd%, par%, db%, st%, hand%, term&)
  204.     local fr%, sr%(6), dm%, err%
  205.     
  206.     fr% = db%-5
  207.     if st% = 2 : fr% = 16 : endif
  208.     if par% : fr% = fr% or 32 : endif
  209.     sr%(1) = bd% or (bd%*256)
  210.     sr%(2) = fr% or (par% * 256)
  211.     sr%(3) = (hand% and 255) or $1100
  212.     sr%(4) = $13
  213.     pokel addr(sr%(5)), term&
  214.     err%=iow(-1,7,sr%(1),dm%)
  215.     if err% : raise err% : endif
  216. ENDP
  217.  
  218. PROC myuadd%:(ad%, of%)
  219.   LOCAL a&, o&, r%
  220.   a&=IABS(INT(ad%))
  221.   o&=IABS(INT(of%))
  222.   r%=a&+o&
  223.   RETURN r%
  224. ENDP
  225.