home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Distributions / ucb / spencer_2bsd.tar.gz / 2bsd.tar / src / px / 30io.s < prev    next >
Text File  |  1980-02-17  |  4KB  |  334 lines

  1. /
  2. / IO operations
  3. /
  4. _GET:
  5.     jsr    pc,get
  6.     jsr    pc,iosync
  7.     return
  8. _PUT:
  9.     jsr    pc,put
  10.     return
  11. _MESSAGE:
  12.     mov    $_unit2,r0
  13.     jsr    pc,unit
  14.     mov    fchain,r2    / flush all files
  15. 1:
  16.     beq    2f
  17.     bit    $FWRITE,FUNIT(r2)
  18.     beq    3f
  19.     mov    FBUF(r2),-(sp)
  20.     jsr    pc,_fflush
  21.     tst    (sp)+
  22. 3:
  23.     mov    FCHAIN(r2),r2
  24.     br    1b
  25. 2:
  26.     mov    $_unit1,r2
  27.     mov    FBUF(r2),-(sp)
  28.     jsr    pc,_fflush
  29.     tst    (sp)+
  30.     return
  31. _FNIL:
  32.     mov    (sp),r0
  33.     mov    _file,-(sp)
  34.     mov    buf,-(sp)
  35.     jsr    pc,unit
  36.     jsr    pc,iosync
  37.     mov    (sp)+,buf
  38.     mov    (sp)+,_file
  39.     return
  40. _BUFF:
  41.     mov    r3,bufopt
  42.     return
  43. _EOF:
  44.     mov    (sp)+,r0
  45.     mov    _file,-(sp)
  46.     mov    buf,-(sp)
  47.     mov    $EOF,-(sp)
  48.     br    1f
  49. _EOLN:
  50.     mov    (sp)+,r0
  51.     mov    _file,-(sp)
  52.     mov    buf,-(sp)
  53.     mov    $EOF+EOLN,-(sp)
  54. 1:
  55.     jsr    pc,unit
  56.     cmp    buf,$_unit0
  57.     bne    1f
  58.     cmp    bufopt,$1
  59.     bne    1f
  60.     mov    $u1buf,-(sp)
  61.     jsr    pc,_fflush
  62.     tst    (sp)+
  63. 1:
  64.     mov    (sp)+,r1
  65.     clr    -(sp)
  66.     mov    buf,r2
  67.     bit    $EOF,FUNIT(r2)
  68.     bne    2f
  69.     jsr    pc,iosync
  70.     bit    r1,FUNIT(r2)
  71.     beq    1f
  72. 2:
  73.     mov    $1,(sp)
  74. 1:
  75.     mov    (sp)+,r0
  76.     mov    (sp)+,buf
  77.     mov    (sp)+,_file
  78.     mov    r0,-(sp)
  79.     return
  80. _RESET:
  81.     bne    1f        / branch if name given
  82.     cmp    *(sp),$_unit0
  83.     bne    1f
  84.     tst    _unit0+FNAME
  85.     bne    1f
  86.     clr    r0
  87.     sys    seek; 0; 0
  88.     bes    9f
  89.     tst    (sp)+
  90.     tst    (lc)+
  91.     bic    $EOF+EOLN,_unit0+FUNIT
  92.     bis    $SYNC,_unit0+FUNIT
  93.     return
  94. 9:
  95.     mov    $stdin,_file
  96.     mov    r0,_errno
  97.     mov    $ESEEK,_perrno
  98.     error    ESEEK
  99. 1:
  100.     jsr    pc,getname
  101.     mov    r0,r1
  102.     mov    PFNAME(r1),_file
  103.     mov    FNAME(r1),openrnm
  104.     sys    indir; openr
  105.     bes    eopen
  106.     mov    r0,*FBUF(r1)
  107.     bis    $SYNC|FREAD,r0
  108.     bis    r0,FUNIT(r1)
  109.     return
  110. ecreat:
  111.     mov    r0,_errno
  112.     mov    $ECREATE,_perrno
  113.     error    ECREATE
  114. eopen:
  115.     mov    r0,_errno
  116.     mov    $EOPEN,_perrno
  117.     error    EOPEN
  118. .data
  119. openr:    sys    open; openrnm: .. ; 0
  120. creit:    sys    creat; crenm: ..; 0644
  121. openw:    sys    open; openwnm: .. ; 1
  122. .text
  123. _REWRITE:
  124.     jsr    pc,getname
  125.     mov    r0,r1
  126.     mov    PFNAME(r1),_file
  127.     mov    FNAME(r1),crenm
  128.     sys    indir; creit
  129.     bes    ecreat
  130.     sys    close
  131.     mov    FNAME(r1),openwnm
  132.     sys    indir; openw
  133.     bes    eopen
  134.     mov    r0,*FBUF(r1)
  135.     bis    $EOF|FWRITE,r0
  136.     bis    r0,FUNIT(r1)
  137.     return
  138. _REMOVE:
  139.     bne    1f
  140.     mov    (lc)+,r3
  141. 1:
  142.     mov    sp,r1
  143.     mov    r3,r2
  144.     inc    r2
  145.     bic    $1,r2
  146.     add    r2,sp
  147.     add    r3,r1
  148.     mov    r1,r0
  149.     movb    (r1),r2
  150.     clrb    (r1)
  151. 1:
  152.     cmpb    -1(r1),$' 
  153.     bne    1f
  154.     clrb    -(r1)
  155.     dec    r3
  156.     bne    1b
  157. 1:
  158.     sub    r3,r1
  159.     mov    r1,1f
  160.     mov    r1,_file
  161.     sys    indir; 0f
  162.     bes    9f
  163.     movb    r2,(r0)
  164.     return
  165. .data
  166. 0:    sys    unlink; 1: ..
  167. .text
  168. 9:
  169.     mov    _file,sp
  170.     mov    r0,_errno
  171.     mov    $EREMOVE,_perrno
  172.     error    EREMOVE
  173. _UNITINP:
  174.     cmp    bufopt,$2
  175.     bge    1f            / bufopt >= 2, don't flush on read
  176.     cmp    $512.,u1cnt
  177.     beq    1f
  178.     mov    $u1buf,-(sp)
  179.     jsr    pc,_fflush
  180.     tst    (sp)+
  181. 1:
  182.     mov    $_unit0,buf
  183.     mov    $stdin,_file
  184.     return
  185. _UNITOUT:
  186.     mov    $_unit1,buf
  187.     mov    $stdout,_file
  188.     return
  189. _UNIT:
  190.     mov    (sp)+,r0
  191.     cmp    r0,$_unit0
  192.     beq    _UNITINP
  193.     jsr    pc,unit
  194.     return
  195. _READ8:
  196.     sub    $32.,sp
  197.     mov    sp,-(sp)
  198.     mov    $32.,-(sp)
  199.     mov    $1,-(sp)
  200.     jsr    pc,_preadn
  201.     bcs    1f
  202.     add    $6,sp
  203.     mov    sp,-(sp)
  204.     jsr    pc,_atof
  205.     add    $34.,sp
  206.     movf    fr0,-(sp)
  207.     return
  208. 1:
  209.     add    $38.,sp
  210.     clrf    -(sp)
  211.     return
  212. _READ4:
  213.     sub    $20.,sp
  214.     mov    sp,-(sp)
  215.     mov    $20.,-(sp)
  216.     clr    -(sp)
  217.     jsr    pc,_preadn
  218.     bcs    1f
  219.     add    $6.,sp
  220.     mov    sp,-(sp)
  221.     jsr    pc,_atol
  222.     add    $22.,sp
  223.     mov    r1,-(sp)
  224.     mov    r0,-(sp)
  225.     return
  226. 1:
  227.     add    $26.,sp
  228.     clr    -(sp)
  229.     sxt    -(sp)
  230.     return
  231. _READC:
  232.     jsr    pc,iosync
  233.     clr    -(sp)
  234.     movb    *buf,(sp)
  235.     jsr    pc,get
  236.     return
  237. _READLN:
  238.     jsr    pc,iosync
  239.     mov    buf,r0
  240.     bit    $EOLN+EOF,FUNIT(r0)
  241.     bne    1f
  242.     jsr    pc,get
  243.     br    _READLN
  244. 1:
  245.     jsr    pc,get
  246.     return
  247. _PAGE:
  248.     mov    $14,-(sp)
  249.     br    1f
  250. _WRITC:
  251.     beq    1f
  252.     mov    $323,r0
  253.     br    pwriteit
  254. 1:
  255.     movb    (sp)+,*buf
  256.     jsr    pc,put
  257.     tst    bufopt
  258.     beq    2f
  259.     return
  260. _WRITLN:
  261.     mov    $327,r0
  262.     mov    $'\n,-(sp)
  263.     mov    $1,r2
  264.     cmp    buf,$_unit1
  265.     bne    1f
  266.     cmp    bufopt,$1
  267.     bgt    1f
  268.     clr    r2
  269.     br    1f
  270. _WRITG:
  271.     mov    $325,r0
  272.     mov    (lc)+,-(sp)
  273.     br    pwriteit
  274. _WRHEX2:
  275.     mov    $267,r0
  276.     br    3f
  277. _WRHEX4:
  278.     mov    $277,r0
  279.     br    3f
  280. _WROCT2:
  281.     mov    $330,r0
  282.     br    3f
  283. _WROCT4:
  284.     mov    $331,r0
  285.     br    3f
  286. _WRIT2:
  287.     mov    $320,r0
  288.     br    3f
  289. _WRIT4:
  290.     mov    $321,r0
  291.     br    3f
  292. _WRIT8:
  293.     mov    $324,r0
  294.     br    3f
  295. _WRITB:
  296.     mov    $322,r0
  297.     br    3f
  298. _WRIT82:
  299.     mov    $326,r0
  300. 3:
  301. pwriteit:
  302.     mov    bufopt,r2
  303. 1:
  304.     mov    r3,-(sp)
  305.     mov    r0,-(sp)
  306.     jsr    pc,_pwrite
  307.     mov    r0,sp
  308.     tst    r2
  309.     bne    1f
  310. 2:
  311.     cmp    buf,$_unit1
  312.     bne    1f
  313.     mov    buf,r0
  314.     mov    FBUF(r0),-(sp)
  315.     jsr    pc,_fflush
  316.     tst    (sp)+
  317. 1:
  318.     return
  319. _DEFNAME:
  320.     jsr    pc,getname
  321.     bis    $100000,FUNIT(r0)
  322.     return
  323. _FLUSH:
  324.     mov    (sp)+,r0
  325.     jsr    pc,unit
  326.     mov    buf,r0
  327.     bit    $FWRITE,FUNIT(r0)
  328.     beq    1f
  329.     mov    FBUF(r0),-(sp)
  330.     jsr    pc,_fflush
  331.     tst    (sp)+
  332. 1:
  333.     return
  334.