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

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