home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / C / MAXONC3_6OF8.DMS / in.adf / LIBSRC.LHA / LIBSRC / extstream.asm < prev    next >
Encoding:
Assembly Source File  |  1994-04-17  |  2.5 KB  |  118 lines

  1.  
  2. * Maxon C++ Library:
  3. * Modul "extstream"
  4. * Jens Gelhar 29.04.92, 08.04.94
  5.  
  6.     xdef    _0dt__fstreambase__T
  7.     xdef    _0dt__ifstream__T,_0dt__ofstream__T,_0dt__fstream__T
  8.     xdef    _0ct__ifstream__T,_0ct__ofstream__T,_0ct__fstream__T
  9.     xdef    _0ct__ifstream__TPCci,_0ct__ofstream__TPCci,_0ct__fstream__TPCci
  10.     xdef    close__fstreambase__T
  11.     xdef    open__fstreambase__TPCci
  12.  
  13.     xref    fclose__P06stream,fopen__PCcPCc
  14.  
  15. _0dt__fstream__T:
  16.     addq.l #6,4(a7)        ; nur Basisklasse destruieren
  17. _0dt__ifstream__T:
  18. _0dt__ofstream__T:
  19.     addq.l #6,4(a7)        ; Basisklasse "fstreambase"
  20. _0dt__fstreambase__T:
  21. close__fstreambase__T:
  22.     move.l    4(a7),a0
  23.     move.l    (a0),a0        ; virtuelle Basisklasse "ios"
  24.     tst.l    (a0)
  25.     beq.b    .clo0
  26.     move.l    (a0),-(a7)
  27.     clr.l    (a0)
  28.     jsr    fclose__P06stream
  29.     addq.l    #4,a7
  30. .clo0    rts
  31.  
  32. _0ct__ofstream__T:
  33. _0ct__ifstream__T:
  34.     movem.l    a0/d0,-(a7)
  35.     move.l    8+4(a7),a0
  36.     clr.b    5(a0)        ; Fehlerflag/Basis löschen
  37.     move.b    4(a0),d0
  38.     or.b    6+4(a0),d0    ; Lizenz zum Töten? (soll heißen: darf virtuelle Basisklasse "ios" hier konstruiert werden?)
  39.     and.w    #1,d0
  40.     beq.b    ctnix
  41.     bra.b    ctIn
  42.  
  43. _0ct__fstream__T:
  44.     movem.l    a0/d0,-(a7)
  45.     move.l    8+4(a7),a0
  46.     clr.b    5(a0)        ; Fehlerflag/Basis löschen
  47.     clr.b    5+6(a0)        ; Fehlerflag/Basis löschen
  48.     move.b    4(a0),d0
  49.     or.b    6+4(a0),d0    ; Lizenz zum Töten?
  50.     or.b    12+4(a0),d0
  51.     and.w    #1,d0
  52.     beq.b    ctnix
  53. ctIn    move.l    (a0),a0
  54.     clr.l    (a0)        ; Filehandle löschen
  55.     movem.l    (a7)+,a0/d0
  56.     rts
  57.  
  58. _0ct__ofstream__TPCci:
  59. _0ct__ifstream__TPCci:
  60.     movem.l    a0/d0,-(a7)
  61.     move.l    8+4(a7),a0    ; "this"
  62.     move.b    4(a0),d0
  63.     or.b    6+4(a0),d0    ; Lizenz zum Töten?
  64.     and.w    #1,d0
  65.     bne.b    ctOpen
  66. ctnix    movem.l (a7)+,d0/a0
  67.     rts
  68.  
  69. _0ct__fstream__TPCci:
  70.     movem.l    a0/d0,-(a7)
  71.     move.l    8+4(a7),a0    ; "this"
  72.     move.b    4(a0),d0
  73.     or.b    6+4(a0),d0    ; Lizenz zum Töten?
  74.     or.b    12+4(a0),d0
  75.     and.w    #1,d0
  76.     beq.s    ctnix
  77.     clr.b    6+5(a0)        ; Fehlerflag/Basis
  78. ctOpen    ; Datei öffnen:
  79.     clr.b    5(a0)        ; Fehlerflag/Basis
  80.     move.l    8+4+8(a7),-(a7)
  81.     move.l    8+4+8(a7),-(a7)
  82.     move.l    a0,-(a7)
  83.     jsr    open__fstreambase__TPCci(pc)
  84.     lea    12(a7),a7
  85.     bra.b    ctnix
  86.  
  87. open__fstreambase__TPCci:
  88.     ; Stack-Argumente:
  89.     ; 0 L "this", 4 L Name, 8 i Mode
  90.     move.l    a0,-(a7)
  91.     moveq    #7,d0
  92.     and.w    4+4+8+2(a7),d0        ; Modus:
  93.     asl.l    #1,d0
  94.     move.w    str(pc,d0),d0
  95.     clr.l    -(a7)
  96.     move.w    d0,(a7)
  97.     move.l    a7,-(a7)        ; Modusstring
  98.     move.l    8+4+4+4(a7),-(a7)    ; Name
  99.     jsr    fopen__PCcPCc
  100.     lea    12(a7),a7
  101.     move.l    4+4(a7),a0        ; _extstreamclass
  102.     move.l    (a0),a0            ; _filebufclass
  103.     move.l    d0,(a0)
  104.     move.l    (a7)+,a0
  105.     rts
  106.  
  107. str:    dc.b 'r',0    ; -
  108.     dc.b 'r',0    ; in
  109.     dc.b 'w',0    ;    out
  110.     dc.b 'r+'    ; in|out
  111.     dc.b 'a',0    ;        app
  112.     dc.b 'a+'    ; in|    app
  113.     dc.b 'a',0    ;    out|app
  114.     dc.b 'w+'    ; in|out|app
  115.  
  116.     end
  117.  
  118.