home *** CD-ROM | disk | FTP | other *** search
/ back2roots/padua / padua.7z / padua / ftp.vapor.com / microdot-1 / md1_src_02.lzx / sup.a < prev    next >
Text File  |  1989-06-24  |  9KB  |  608 lines

  1.  
  2.     section    "text",code
  3.  
  4. ;    include 'microdot.i'
  5.  
  6. call    MACRO
  7.     xref    _LVO\1
  8.     jsr        _LVO\1(a6)
  9.     ENDM
  10.  
  11.     xref    _SysBase
  12.     xdef    _asprintf
  13.  
  14. _asprintf:
  15.         movem.l a2/a3/a6,-(sp)
  16.  
  17.         move.l    4*4(sp),a3       ;Get the output string pointer
  18.  
  19. asl1:
  20.         tst.b    (a3)+
  21.         bne.s    asl1
  22.         subq.l    #1,a3
  23.         bra.s    xxxx
  24.  
  25.     xdef    _sprintf
  26.  
  27.     xref _LocaleBase
  28.  
  29. _sprintf:
  30.         movem.l a2/a3/a6,-(sp)
  31.  
  32.         move.l    4*4(sp),a3       ;Get the output string pointer
  33. xxxx:
  34.     IFND MDV20
  35.         tst.l    _LocaleBase(a4)
  36.         bne.s    skip
  37.         move.l    5*4(sp),a0       ;Get the FormatString pointer
  38.         bsr        _replacebigd
  39.     ENDC
  40. skip:
  41.         move.l    5*4(sp),a0       ;Get the FormatString pointer
  42.         lea.l    6*4(sp),a1       ;Get the pointer to the DataStream
  43.         lea.l    stuffChar(pc),a2
  44.         move.l    _SysBase(a4),a6
  45.         jsr    -522(a6)
  46.  
  47.         movem.l (sp)+,a2/a3/a6
  48.         rts
  49.  
  50.     ;------ PutChProc function used by RawDoFmt -----------
  51.     stuffChar:
  52.         move.b    d0,(a3)+        ;Put data to output string
  53.         rts
  54.  
  55.  
  56.     xdef    _dofmt
  57. _dofmt:
  58.     movem.l    a3/a6,-(sp)
  59.     move.l    a0,a3
  60.     move.l    a1,a0
  61.     move.l    a2,a1
  62.  
  63.     IFND MDV20
  64.         tst.l    _LocaleBase(a4)
  65.         bne.s    skip2
  66.         movem.l    a0/a1,-(sp)
  67.         bsr        _replacebigd
  68.         movem.l    (sp)+,a0/a1
  69.     ENDC
  70. skip2:
  71.     lea    stuffChar(pc),a2
  72.     move.l    _SysBase(a4),a6
  73.     jsr    -522(a6)
  74.     movem.l    (sp)+,a3/a6
  75.     rts
  76.  
  77. xp:    dc.w    0
  78.     xdef    _dofmtextabs
  79. _dofmtextabs:
  80.     movem.l    a3/a6,-(sp)
  81.  
  82.     lea    xp(pc),a6
  83.     clr.w    (a6)
  84.  
  85.     move.l    a0,a3
  86.     move.l    a1,a0
  87.     move.l    a2,a1
  88.     lea    extab(pc),a2
  89.     move.l    _SysBase(a4),a6
  90.  
  91.     IFND MDV20
  92.         tst.l    _LocaleBase(a4)
  93.         bne.s    skip3
  94.         movem.l    a0/a1,-(sp)
  95.         bsr        _replacebigd
  96.         movem.l    (sp)+,a0/a1
  97.     ENDC
  98. skip3:
  99.     jsr    -522(a6)    ; rawdofmt
  100.     movem.l    (sp)+,a3/a6
  101.     rts
  102.  
  103. extab:            ; d0 = byte, a3 = ptr
  104.     lea        xp(pc),a0
  105.     cmp.w    #1023,(a0)
  106.     bge.s    exret
  107.  
  108.     cmp.b    #9,d0    ; istab
  109.     beq.s    existab
  110.     addq.w    #1,(a0)
  111.     move.b    d0,(a3)+
  112. exret:
  113.     rts
  114. existab:
  115. ;    movem.l    a0/d1,-(sp)    ; put spaces until tab is filled
  116. ;    lea    xp(pc),a0
  117.     moveq    #32,d0
  118. ex1:
  119.     move.w    (a0),d1
  120.     addq.w    #1,d1
  121.     move.w    d1,(a0)
  122.     move.b    d0,(a3)+    ; put space
  123.     and.w    #3,d1
  124.     bne.s    ex1
  125.  
  126. ;    movem.l    (sp)+,a0/d1
  127.     rts
  128.  
  129.  
  130.     xdef    _clnl
  131. _clnl:    ; a0 = strptr
  132.     moveq    #10,d1
  133. clnl1:
  134.     move.b    (a0)+,d0
  135.     beq.s    clnl2
  136.     sub.b    d1,d0
  137.      beq.s    clnl3
  138.     subq.b    #3,d0
  139.     bne.s    clnl1
  140. clnl3:
  141.     clr.b    -(a0)
  142. clnl2:
  143.     rts
  144.  
  145.  
  146.     xdef    _callreg    ; a0/a6
  147. _callreg:
  148.     addq.l    #1,d0
  149.     asl.l    #2,d0
  150.     move.l    d0,a0
  151.     jmp    (a0)
  152.  
  153.     IFND    MDV20
  154.  
  155.     xdef    _myAllocVec    ; d0 = size, d1 = req
  156. _myAllocVec:
  157.     movem.l    a6/d7,-(sp)
  158.     move.l    _SysBase(a4),a6
  159.     addq.l    #4,d0
  160.     move.l    d0,d7
  161.     jsr        -198(a6)    ; AllocMem
  162.     move.l    d0,a0
  163.     tst.l    d0
  164.     beq.s    mav1
  165.     move.l    d7,(a0)+
  166.     move.l    a0,d0
  167. mav1:
  168.     movem.l    (sp)+,a6/d7
  169.     rts
  170.  
  171.     xdef    _myFreeVec    ; a1 = block
  172. _myFreeVec:
  173.     move.l    a6,-(sp)
  174.     move.l    _SysBase(a4),a6
  175.  
  176.     move.l    -(a1),d0    ; get back size
  177.     jsr        -210(a6)
  178.  
  179.     move.l    (sp)+,a6
  180.     rts
  181.  
  182.     xref    _GfxBase
  183.  
  184. ; quick sabd13
  185.     xdef    _sabd13    ; a1, d0..d2, a6 = gfxbase
  186. _sabd13:
  187.     movem.l    a2/d3,-(sp)
  188.     move.l    a1,a2    ; save rp
  189.     move.l    d1,d3
  190.     jsr        -342(a6)    ; SetAPen
  191.     move.l    d3,d0
  192.     move.l    a2,a1
  193.     jsr        -348(a6)    ; SetBPen
  194.     move.l    d2,d0
  195.     move.l    a2,a1
  196.     jsr        -354(a6)    ; SetDrMd
  197.     movem.l    (sp)+,a2/d3
  198.     rts
  199.  
  200.     ENDC
  201.  
  202. ; replace sclib __tzset()
  203.  
  204.     xref    ___timezone
  205.     xref    ___daylight
  206.     xdef    ___tzset
  207.     xdef    @__tzset
  208. ___tzset:
  209. @__tzset:
  210.     clr.l    ___timezone(a4)
  211.     clr.l    ___daylight(a4)
  212.     rts
  213.  
  214. ; replace sclib time()
  215.     xref    _DOSBase
  216.     xref    __CXD33
  217.  
  218.     xdef    _time
  219.     xdef    @time
  220. _time:
  221.     MOVEA.L     0004(A7),A0
  222. @time:    
  223.     SUBA.W      #$c,A7
  224.     MOVEM.L     D2-D3/D7/A5-A6,-(A7)
  225.     MOVEA.L     A0,A5
  226.     LEA         $14(A7),A0
  227.     MOVE.L      A0,D1
  228.     MOVEA.L     _DOSBase(A4),A6
  229.     JSR         -192(A6)    ; DateStamp
  230.     MOVE.L      $1C(A7),D0
  231.     MOVEQ       #$32,D1
  232.     JSR         __CXD33(PC)
  233.     MOVE.L      #$b6a,D1
  234.     ADD.L       $14(A7),D1
  235.     MOVE.L      D1,D2
  236.     ASL.L       #4,D2
  237.     SUB.L       D1,D2
  238.     MOVE.L      D2,D3
  239.     ASL.L       #2,D3
  240.     SUB.L       D2,D3
  241.     ASL.L       #5,D3
  242.     ADD.L       $18(A7),D3
  243.     MOVE.L      D3,D7
  244.     ASL.L       #4,D7
  245.     SUB.L       D3,D7
  246.     ASL.L       #2,D7
  247.     ADD.L       D0,D7
  248.     MOVE.L      A5,D0
  249.     BEQ.B       tns
  250.     MOVE.L      D7,(A5)
  251. tns:
  252.     MOVE.L      D7,D0
  253.     MOVEM.L     (A7)+,D2-D3/D7/A5-A6
  254.     ADDA.W      #$C,A7
  255.     RTS
  256.  
  257. ; tricky dicky char stuff
  258.  
  259.     xdef    _skillfirstspace
  260. ; a0 = strptr
  261. _skillfirstspace:
  262.     moveq    #32,d1
  263.     move.l    d2,a1
  264.     moveq    #9,d2
  265. skf1:
  266.     move.b    (a0)+,d0
  267.     beq.s    skf2
  268.     cmp.b    d1,d0
  269.     beq.s    doskf
  270.     cmp.b    d2,d0
  271.     bne.s    skf1
  272. doskf:
  273.     clr.b    -1(a0)
  274. skf2:
  275.     move.l    a1,d2
  276.     rts
  277.  
  278.     xdef    _skillatch    ; a0 = string, d0 = char
  279.  
  280. _skillatch:
  281. kl:
  282.     move.b    (a0)+,d1
  283.     beq.s    ek
  284.     cmp.b    d1,d0
  285.     bne.s    kl
  286.     clr.b    -(a0)
  287. ek:
  288.     rts
  289.     
  290.  
  291. ;    expandtabs( from, to, tabsize )
  292. ;                a0   a1    d0
  293.  
  294.     xdef    _expandtabs
  295. _expandtabs:
  296.     movem.l    d2/d3/d4/d5/d6,-(sp)
  297.     moveq    #9,d2        ; TAB, fⁿr Vergleichszwecke
  298.     moveq    #32,d5        ; space to fill
  299.     moveq    #0,d1        ; To-Offset
  300. exl:
  301.     move.b    (a0)+,d3
  302.     beq.s    exl_end
  303.     cmp.b    d2,d3        ; isses en tab?
  304.     beq.s    exl_found
  305.     move.b    d3,0(a1,d1.w)
  306.     addq.w    #1,d1
  307.     bra.s    exl
  308. ; tab gefunden
  309. exl_found:
  310.     move.l    d1,d4        ; aktuelle charpos
  311.     divu    d0,d4        ; durch tabsize dividieren
  312.     swap    d4            ; im lowword steht jetzt mod
  313.     move.w    d0,d6
  314.     sub.w    d4,d6
  315.     bra.s    exl_exp
  316. exl_expl:
  317.     move.b    d5,0(a1,d1.w)
  318.     addq.w    #1,d1
  319. exl_exp:
  320.     dbra    d6,exl_expl
  321.     bra.s    exl
  322.  
  323. exl_end:
  324.     clr.b    0(a1,d1.w)
  325.     movem.l    (sp)+,d2/d3/d4/d5/d6
  326.     rts
  327.  
  328.     IFND    MDV20
  329.  
  330. ; CreateProc13    ; a0 = func, a1 = name, d0 = stack, d1 = pri
  331.     xdef    _CreateProc13
  332.  
  333.     cnop    0,4
  334. fakeseg:
  335.     dc.l    16    ; len
  336.     dc.l    0    ; nextseg
  337.     jmp    $7ffffffe
  338.  
  339.     cnop    0,4
  340.  
  341. _CreateProc13:
  342.     movem.l    d2-d4/a6,-(sp)
  343.     move.l    _DOSBase(a4),a6
  344.     move.l    d0,d4    ; stack
  345.     move.l    d1,d2    ; pri
  346.     move.l    a1,d1    ; name
  347.     lea        fakeseg(pc),a1
  348.     move.l    a0,10(a1)    ; seglist
  349.     move.l    a1,d3
  350.     lsr.l    #2,d3        ; BPTR
  351.     addq.l    #1,d3        ; +1 (actually pointing to nextseg)
  352.     jsr        -138(a6)    ; CreateProc
  353.     move.l    d0,d1        ; non zero?
  354.     beq.s    cp13ret
  355.     moveq    #92,d1
  356.     sub.l    d1,d0        ; offset MsgPort
  357. cp13ret:
  358.     movem.l    (sp)+,d2-d4/a6
  359.     rts
  360.  
  361.     ENDC
  362.  
  363. ; 2.0-Ersatz fⁿr strlwr & strupr via utility lib
  364.  
  365.     IFD        MDV20
  366.  
  367.     xref    _UtilityBase
  368.  
  369.     xref    _LVOToLower
  370.     xref    _LVOToUpper
  371.  
  372.     xdef    @strlwr
  373. @strlwr:
  374.     movem.l    a2/a6,-(sp)
  375.     move.l    _UtilityBase(a4),a6
  376.     move.l    a0,a2
  377. strlwr1:
  378.     move.b    (a2),d0
  379.     beq.s    strlwr2
  380.     jsr        _LVOToLower(a6)
  381.     move.l    d0,(a2)+
  382.     bra.s    strlwr1
  383. strlwr2:
  384.     movem.l    a2/a6,-(sp)
  385.     rts
  386.  
  387.  
  388.     xdef    @strupr
  389. @strupr:
  390.     movem.l    a2/a6,-(sp)
  391.     move.l    _UtilityBase(a4),a6
  392.     move.l    a0,a2
  393. strupr1:
  394.     move.b    (a2),d0
  395.     beq.s    strupr2
  396.     jsr        _LVOToUpper(a6)
  397.     move.l    d0,(a2)+
  398.     bra.s    strupr1
  399. strupr2:
  400.     movem.l    a2/a6,-(sp)
  401.     rts
  402.  
  403.     ENDC
  404.  
  405. fmtint4:        ; integer mit 4 stellen ausgeben
  406.                 ; d0 = int, a0 = to, d3 = 10, d4 = '0', d1 = blank
  407.  
  408.     
  409.     divu.w    d3,d0
  410.     swap    d0
  411.     add.b    d4,d0
  412.     move.b    d0,3(a0)
  413.  
  414.     clr.w    d0
  415.     swap    d0
  416.     divu.w    d3,d0
  417.     swap    d0
  418.     add.b    d4,d0
  419.     move.b    d0,2(a0)
  420.  
  421.     clr.w    d0
  422.     swap    d0
  423.     divu.w    d3,d0
  424.     swap    d0
  425.     add.b    d4,d0
  426.     move.b    d0,1(a0)
  427.  
  428. ;    clr.w    d0
  429.     swap    d0
  430.     add.b    d4,d0
  431.     move.b    d0,(a0)
  432.  
  433.     cmp.b    (a0),d4
  434.     bne.s    fmtint4ret
  435.     move.b    d1,(a0)
  436.  
  437.     cmp.b    1(a0),d4
  438.     bne.s    fmtint4ret
  439.     move.b    d1,1(a0)
  440.  
  441.     cmp.b    2(a0),d4
  442.     bne.s    fmtint4ret
  443.     move.b    d1,2(a0)
  444.  
  445. fmtint4ret:
  446.     addq    #4,a0
  447.     rts
  448.  
  449.     xref    _brettlist_namesize
  450.     
  451.     xdef    _formatbrettline    ; a0 = buffer, a1 = mbrett
  452. _formatbrettline:
  453.     movem.l    a2/d2-d4,-(sp)
  454.  
  455.     moveq    #5,d2
  456.     moveq    #'0',d4
  457.     moveq    #10,d3
  458.  
  459.     moveq    #32,d1
  460.     move.l    _brettlist_namesize(a4),d0
  461. ; zuerst 39 zeichen strncpy viewname
  462.     lea        14(a1),a2    ; viewname
  463. fbl1:
  464.     move.b    (a2)+,(a0)+
  465.     dbeq    d0,fbl1
  466.     bne.s    fbl4
  467.     subq.l    #1,a0
  468. ;    beq.s    fbl2
  469. fbl3:
  470.     move.b    d1,(a0)+    ; fill
  471. fbl2:
  472.     dbra    d0,fbl3
  473. fbl4:
  474.     move.b    d2,(a0)+    ; '|'
  475.     move.l    228(a1),d0
  476.     bsr.b    fmtint4        ; mb->b.mails
  477.     move.b    d2,(a0)+    ; '|'
  478.     move.l    232(a1),d0
  479.     bsr.b    fmtint4        ; mb->b.newmails
  480.     move.b    d2,(a0)+    ; '|'
  481.     move.l    224(a1),d0    ; 
  482.     bsr        fmtint4        ; mb->b.unreadmails
  483.     move.b    d2,(a0)+    ; '|'
  484.  
  485. ; 5 bytes lastwrite-datum
  486.     lea        96(a1),a2    ; mb->lastwritedate
  487.  
  488.     IFD    MDV20
  489.     move.l    (a2)+,(a0)+
  490.     ELSE
  491.     move.b    (a2)+,(a0)+
  492.     move.b    (a2)+,(a0)+
  493.     move.b    (a2)+,(a0)+
  494.     move.b    (a2)+,(a0)+
  495.     ENDC
  496.  
  497.     move.b    (a2),(a0)+
  498.     move.b    d2,(a0)+    ; '|'
  499.  
  500.     lea        184(a1),a2    ; mb->betreff
  501. fbl5:
  502.     move.b    (a2)+,(a0)+
  503.     bne.s    fbl5
  504.  
  505.     movem.l    (sp)+,a2/d2-d4
  506.     rts
  507.  
  508.  
  509. ; alle %lD durch %ld ersetzen
  510.  
  511.     IFND    MDV20
  512.  
  513. numtab:
  514.     dc.b    '0123456789-.',0
  515.     cnop    0,4
  516.  
  517.     xdef    _replacebigd
  518.  
  519. _replacebigd:    ; a0 = string
  520.     movem.l    d2-d5/a2,-(sp)
  521.     lea        numtab(pc),a1
  522.  
  523.     moveq    #'%',d1
  524.     moveq    #'l',d2
  525.     moveq    #'D',d3
  526.  
  527. rep1:
  528.     move.b    (a0)+,d4
  529.     beq.s    repex
  530. repi:    ; '%'?
  531.     cmp.b    d4,d1
  532.     bne.s    rep1
  533. rep2:    ; % gefunden; nun evt. Ziffern ⁿberspringen
  534.     move.b    (a0)+,d4
  535.     beq.s    repex
  536. ; test auf ziffern
  537.     move.l    a1,a2        ; a1 = numtab
  538. rep3:
  539.     move.b    (a2)+,d5
  540.     beq.s    rep4        ; ende numtab; keine ziffer oder so gefunden
  541.     cmp.b    d4,d5
  542.     bne.s    rep3
  543. ; ziffer; bingo, einfach ⁿberspringen
  544.     bra.s    rep2
  545. ; keine (weiteren) ziffern: mu▀ 'l'ásein
  546. rep4:
  547.     cmp.b    d4,d2        ; 'l'
  548.     bne.s    repi
  549.     cmp.b    (a0),d3        ; 'D'?
  550.     bne.s    repi
  551.     move.b    #'d',(a0)+
  552.     bra.s    rep1
  553. repex:
  554.     movem.l    (sp)+,d2-d5/a2
  555.     rts
  556.  
  557.     ENDC
  558.  
  559.  
  560. ;
  561. ; Bitfield manipulating functions
  562. ;
  563.  
  564.     xdef    _setbit
  565.     xdef    _tstbit
  566.     xdef    _tstbitfield
  567.  
  568. _setbit:    ; a0 = bitfield, d0 = bitnum
  569.     move.l    d0,d1
  570.     lsr.l    #3,d1
  571.     and.w    #7,d0
  572.     bset    d0,0(a0,d1.w)
  573.     rts
  574.  
  575. _tstbit:    ; a0 = bitfield, d0 = bitnum
  576.     move.l    d0,d1
  577.     lsr.l    #3,d1
  578.     and.w    #7,d0
  579.     btst    d0,0(a0,d1.w)
  580.     sne        d0
  581.     rts
  582.  
  583. _tstbitfield:    ; a0 = bitfield, d0 = bitcount
  584.     moveq    #31,d1
  585.     add.l    d0,d1
  586.     lsr.l    #5,d1    ; d1 = lw-count
  587.     bra.s    tsb2
  588. tsb1:
  589.     move.l    (a0)+,d0
  590.     bne.s    tsb3
  591. tsb2:
  592.     dbf    d1,tsb1
  593. tsb3:
  594.     rts
  595.  
  596.     xdef    _storeselsup
  597. _storeselsup: ; a0 from, d0 new
  598.     moveq    #126,d1
  599.     move.l    a0,a1
  600.     subq.l    #4,a1
  601. sss1:
  602.     move.l    -(a1),-(a0)
  603.     dbf    d1,sss1
  604.     move.l    d0,(a1)
  605.     rts
  606.  
  607.     END
  608.