home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 8 / FreshFishVol8-CD2.bin / bbs / dev / ssl-4.1.lha / SSL / ssmac.h < prev    next >
Text File  |  1994-06-03  |  8KB  |  648 lines

  1. ; Universal Macros for SS.Library, 3.4
  2. ; (c) 1993,1994 SinSoft, PCSoft & MJSoft System Software
  3. ; ------------------------------------------------------------------------------
  4.  
  5. ; Global definitions
  6.  
  7. v    equr    a5
  8. s_W    equ    1
  9. s_b    equ    1
  10. s_w    equ    2
  11. s_l    equ    4
  12.  
  13. ; Initialization
  14.  
  15. SYSCNT    set    4
  16. execbase    equ    4
  17. _NOARP    equ    1
  18.     code
  19.  
  20.     opt    o+,w+
  21.     opt    chkimm
  22.  
  23. ; Includes
  24.  
  25.     ifnd    ALLSYSTEM
  26.     ifnd    SYSI
  27.     include    "system.gs"
  28.     elseif
  29.     include    "sys.i"
  30.     endc
  31.     elseif
  32.     include    "allsystem.gs"
  33.     endc
  34.     include    "Macro:SSL/SS.i"
  35.  
  36. ; General macros
  37.  
  38. push    macro    *reg
  39.     move.l    \1,-(sp)
  40.     endm
  41.  
  42. pop    macro    *reg
  43.     move.l    (sp)+,\1
  44.     endm
  45.  
  46. mpush    macro    *reglist
  47.     movem.l    \1,-(sp)
  48.     endm
  49.  
  50. mpop    macro    *reglist
  51.     movem.l    (sp)+,\1
  52.     endm
  53.  
  54. rptr    macro    *label
  55.     dc.w    \1-*
  56.     endm
  57.  
  58. ; Data definition macros
  59.  
  60. dv    macro    *.size,name
  61.     ifnc    '\0','b'
  62. SYSCNT    set    (SYSCNT+1)&$FFFE
  63.     endc
  64. \1    equ    SYSCNT
  65. SYSCNT    set    SYSCNT+s_\0
  66.     endm
  67.  
  68. dbuf    macro    *[.size],name,nritems
  69. SYSCNT    set    (SYSCNT+1)&$FFFE
  70. \1    equ    SYSCNT
  71. SYSCNT    set    SYSCNT+s_\0*\2
  72.     endm
  73.  
  74. alignlong    macro
  75. SYSCNT    set    (SYSCNT+3)&$FFFC
  76.     endm
  77.  
  78. ; Special data access macros
  79.  
  80. vpush    macro    *var
  81.     move.l    \1(v),-(sp)
  82.     endm
  83.  
  84. vpop    macro    *var
  85.     move.l    (sp)+,\1(v)
  86.     endm
  87.  
  88. get    macro    *.type,from,to
  89.     move.\0    \1(v),\2
  90.     endm
  91.  
  92. put    macro    *.type,from,to
  93.     move.\0    \1,\2(v)
  94.     endm
  95.  
  96. geta    macro    *from,to
  97.     lea    \1(v),\2
  98.     endm
  99.  
  100. getad    macro    *from,via,to
  101.     lea    \1(v),\2
  102.     move.l    \2,\3
  103.     endm
  104.  
  105. clv    macro    *.type,dest
  106.     clr.\0    \1(v)
  107.     endm
  108.  
  109. tsv    macro    *.type,src
  110.     tst.\0    \1(v)
  111.     endm
  112.  
  113. ; Normal data access macros
  114.  
  115. negv    macro    *.size,to
  116.     neg.\0    \1(v)
  117.     endm
  118.  
  119. notv    macro    *.size,to
  120.     not.\0    \1(v)
  121.     endm
  122.  
  123. stv    macro    *.size,to
  124.     st    \1(v)
  125.     endm
  126.  
  127. clrv    macro    *.size,to
  128.     clr.\0    \1(v)
  129.     endm
  130.  
  131. seqv    macro    *.size,to
  132.     seq    \1(v)
  133.     endm
  134.  
  135. snev    macro    *.size,to
  136.     sne    \1(v)
  137.     endm
  138.  
  139. sccv    macro    *.size,to
  140.     scc    \1(v)
  141.     endm
  142.  
  143. scsv    macro    *.size,to
  144.     scs    \1(v)
  145.     endm
  146.  
  147. tstv    macro    *.size,from
  148.     tst.\0    \1(v)
  149.     endm
  150.  
  151. bchgv    macro    *bitnr,byte
  152.     bchg    \1,\2(v)
  153.     endm
  154.  
  155. bclrv    macro    *bitnr,byte
  156.     bclr    \1,\2(v)
  157.     endm
  158.  
  159. bsetv    macro    *bitnr,byte
  160.     bset    \1,\2(v)
  161.     endm
  162.  
  163. btstv    macro    *bitnr,byte
  164.     btst    \1,\2(v)
  165.     endm
  166.  
  167. subqv    macro    *.type,nr,byte
  168.     subq.\0    \1,\2(v)
  169.     endm
  170.  
  171. addqv    macro    *.type,nr,byte
  172.     addq.\0    \1,\2(v)
  173.     endm
  174.  
  175. vpea    macro    *var
  176.     pea    \1(v)
  177.     endm
  178.  
  179. eorv    macro    *.type,src,dest
  180.     eor.\0    \1,\2(v)
  181.     endm
  182.  
  183. divsv    macro    *src,dest
  184.     divs    \1,\2(v)
  185.     endm
  186.  
  187. divuv    macro    *src,dest
  188.     divu    \1,\2(v)
  189.     endm
  190.  
  191. mulsv    macro    *src,dest
  192.     muls    \1,\2(v)
  193.     endm
  194.  
  195. muluv    macro    *src,dest
  196.     mulu    \1,\2(v)
  197.     endm
  198.  
  199. addv    macro    *.type,src,dest
  200.     add.\0    \1,\2(v)
  201.     endm
  202.  
  203. vadd    macro    *.type,src,dest
  204.     add.\0    \1(v),\2
  205.     endm
  206.  
  207. andv    macro    *.type,src,dest
  208.     and.\0    \1,\2(v)
  209.     endm
  210.  
  211. vand    macro    *.type,src,dest
  212.     and.\0    \1(v),\2
  213.     endm
  214.  
  215. cmpv    macro    *.type,src,dest
  216.     cmp.\0    \1,\2(v)
  217.     endm
  218.  
  219. vcmp    macro    *.type,src,dest
  220.     cmp.\0    \1(v),\2
  221.     endm
  222.  
  223. movev    macro    *.type,src,dest
  224.     move.\0    \1,\2(v)
  225.     endm
  226.  
  227. vmove    macro    *.type,src,dest
  228.     move.\0    \1(v),\2
  229.     endm
  230.  
  231. orv    macro    *.type,src,dest
  232.     or.\0    \1,\2(v)
  233.     endm
  234.  
  235. vor    macro    *.type,src,dest
  236.     or.\0    \1(v),\2
  237.     endm
  238.  
  239. subv    macro    *.type,src,dest
  240.     sub.\0    \1,\2(v)
  241.     endm
  242.  
  243. vsub    macro    *.type,src,dest
  244.     sub.\0    \1(v),\2
  245.     endm
  246.  
  247. vlea    macro    *src,dest
  248.     lea    \1(v),\2
  249.     endm
  250.  
  251. vmovev    macro    *.type,src,dest
  252.     move.\0    \1(v),\2(v)
  253.     endm
  254.  
  255. movemv    macro    *.type,src,dest
  256.     movem.\0    \1,\2(v)
  257.     endm
  258.  
  259. vmovem    macro    *.type,src,dest
  260.     movem.\0    \1(v),\2
  261.     endm
  262.  
  263. ; Text macros
  264.  
  265. tbase    macro    *basereg
  266. t    equr    \1
  267.     section    TEXTS,DATA
  268. TEXTBASE
  269.     code
  270.     endm
  271.  
  272.     ifd    TEXTRACT
  273. dt    macro
  274.     endm
  275. gett    macro
  276.     lea    \1(pc),\2
  277.     endm
  278. tlea    macro
  279.     lea    \1(pc),\2
  280.     endm
  281. tpea    macro
  282.     pea    \1(pc)
  283.     endm
  284.  
  285.     elseif
  286.  
  287. dt    macro    *.type ([c][l]),[label,]text
  288.     section    TEXTS,DATA
  289.     ifne    NARG-1
  290. \1    dc.b    '\2'
  291.     elseif
  292.     dc.b    '\1'
  293.     endc
  294.     ifc    '\0','W'
  295.     dc.b    0
  296.     endc
  297.     ifc    '\0','l'
  298.     dc.b    10,0
  299.     endc
  300.     ifc    '\0','cl'
  301.     dc.b    10
  302.     endc
  303.     ifc    '\0','lc'
  304.     dc.b    10
  305.     endc
  306.     code
  307.     endm
  308.  
  309. gett    macro    *textlabel,areg
  310.     ifd    t
  311.     lea    \1-TEXTBASE(t),\2
  312.     elseif
  313.     lea    \1,\2
  314.     endc
  315.     endm
  316.  
  317. tlea    macro    *textlabel,areg
  318.     ifd    t
  319.     lea    \1-TEXTBASE(t),\2
  320.     elseif
  321.     lea    \1,\2
  322.     endc
  323.     endm
  324.  
  325. tpea    macro    *textlabel
  326.     ifd    t
  327.     pea    \1-TEXTBASE(t)
  328.     elseif
  329.     pea    \1
  330.     endc
  331.     endm
  332.  
  333.     endc
  334.  
  335. dtl    macro    *text,areg
  336.     dt.\0    \@a,<\1>
  337.     gett    \@a,\2
  338.     endm
  339.  
  340. ; System calls
  341.  
  342. call    macro    *[base,]name
  343.     ifeq    NARG-1
  344.     jsr    _LVO\1(a6)
  345.     elseif
  346.     ifc    '\1','exec'
  347.     move.l    4.w,a6
  348.     elseif
  349.     ifc    '\1','ss'
  350.     move.l    (v),a6
  351.     elseif
  352.     move.l    \1base(v),a6
  353.     endc
  354.     endc
  355.     jsr    _LVO\2(a6)
  356.     endc
  357.     endm
  358.  
  359. jump    macro    *[base,]name
  360.     ifeq    NARG-1
  361.     jmp    _LVO\1(a6)
  362.     elseif
  363.     ifc    '\1','exec'
  364.     move.l    4.w,a6
  365.     elseif
  366.     ifc    '\1','ss'
  367.     move.l    (v),a6
  368.     elseif
  369.     move.l    \1base(v),a6
  370.     endc
  371.     endc
  372.     jmp    _LVO\2(a6)
  373.     endc
  374.     endm
  375.  
  376. ; Universal start & finish
  377.  
  378. start    macro
  379.  
  380.     ifd    GATHERTX
  381.     opt    x+
  382.     endc
  383.  
  384.     ifd    DEBUG    ; Stub for passing of arguments
  385.     opt    x+
  386. Debug__Init    move.l    4.w,a1
  387.     move.l    ThisTask(a1),a1
  388.     move.l    pr_GlobVec(a1),a2
  389.     move.l    pr_CIS(a1),d1
  390.     beq.s    3$
  391.     lsl.l    #2,d1
  392.     move.l    d1,a3
  393.     lea    fh_Buf(a3),a3
  394.     move.l    (a3)+,a1
  395.     add.l    a1,a1
  396.     add.l    a1,a1
  397.     clr.l    (a3)+
  398.     move.l    d0,(a3)+
  399.     bra.s    1$
  400. 2$    move.b    (a0)+,(a1)+
  401. 1$    dbf    d0,2$
  402. 3$
  403.     endc
  404.  
  405.     move.l    4.w,a6
  406.  
  407.     ifnd    _nowbstart
  408.     move.l    ThisTask(a6),a0
  409.     moveq    #0,d7
  410.     tst.l    pr_CLI(a0)
  411.     bne.s    Start__1
  412.     lea    pr_MsgPort(a0),a0
  413.     call    GetMsg
  414.     move.l    d0,d7
  415. Start__1
  416.     endc
  417.  
  418.     lea    ssname(pc),a1
  419.     call    OldOpenLibrary
  420.     tst.l    d0
  421.     bne.s    _ssok
  422.  
  423.     ifd    _GlobVec
  424.     move.l    $170(a2),a6
  425.     elseif
  426.     lea    _intname(pc),a1
  427.     call    OldOpenLibrary
  428.     tst.l    d0
  429.     beq.s    _enderr
  430.     move.l    d0,a6
  431.     moveq    #0,d0
  432.     endc
  433.     lea    _ssalert(pc),a0
  434.     moveq    #30,d1
  435.     call    DisplayAlert
  436.     ifnd    _GlobVec
  437.     move.l    a6,a1
  438.     call    exec,CloseLibrary
  439.     endc
  440. _enderr
  441.     ifnd    _nowbstart
  442.     tst.l    d7
  443.     beq.s    _endclierr
  444.     move.l    d7,a1
  445.     ifd    _GlobVec
  446.     move.l    4.w,a6
  447.     endc
  448.     call    ReplyMsg
  449. _endclierr
  450.     endc
  451.     moveq    #100,d0
  452.     rts
  453.  
  454.     ifnd    _GlobVec
  455. _intname    dc.b    'intuition.library'
  456.     endc
  457. _ssalert    dc.b    0,244,16,'You need '
  458. ssname    dc.b    'ss.library',0,0
  459.     even
  460.  
  461. _ssok    move.l    d0,a6
  462.     lea    _startstruc(pc),a0
  463.     call    StartupInit
  464.     ifd    t
  465.     lea    TEXTBASE,t
  466.     endc
  467.     ifd    DEBUG
  468.     vmovev.l stdout,stderr
  469.     endc
  470. go
  471.     endm
  472.  
  473. clistart    macro
  474. _nowbstart    equ    1
  475.     start
  476.     endm
  477.  
  478. tags    macro
  479. _startstruc    dc.w    _SYSCNT,SSVer
  480.     endm
  481.  
  482. finish    macro
  483.     dc.w    0
  484. _SYSCNT    equ    SYSCNT
  485.     ifd    TEXTRACT
  486.     include    "t:TextHunk.i"
  487.     endc
  488.     ifd    GATHERTX
  489.     section    TEXTS,DATA
  490. _TextHunkEnd
  491.     code
  492.     endc
  493.     endm
  494.  
  495. ; Startup tags
  496.  
  497. wbconsole    macro
  498.     dc.w    sst_wbconsole
  499.     endm
  500.  
  501. template    macro    *template
  502.     dc.w    sst_template
  503.     dc.b    '\1',0
  504.     even
  505. SYSCNT    set    (SYSCNT+1)&$FFFE
  506.     dc.w    SYSCNT
  507.     endm
  508.  
  509. defvar    macro    *varname
  510.     dc.w    sst_envvar
  511.     dc.b    '\1',0
  512.     even
  513.     endm
  514.  
  515. exitrout    macro    *routine
  516.     dc.w    sst_exitrout
  517. \@a    dc.w    \1-\@a
  518.     endm
  519.  
  520. errrout    macro    *routine
  521.     dc.w    sst_usererr
  522. \@a    dc.w    \1-\@a
  523.     endm
  524.  
  525. usrtrk    macro    *table
  526.     dc.w    sst_usertrk
  527. \@a    dc.w    \1-\@a
  528.     endm
  529.  
  530. library    macro    *name,version
  531.     dv.l    \1base
  532.     dc.w    sst_library
  533.     dc.b    '\1.library',0
  534.     even
  535.     dc.w    \2,\1base
  536.     endm
  537.  
  538. trylib    macro    *name,version
  539.     dv.l    \1base
  540.     dc.w    sst_trylib
  541.     dc.b    '\1.library',0
  542.     even
  543.     dc.w    \2,\1base
  544.     endm
  545.  
  546. cputype    macro    *min,max
  547.     dc.w    sst_cputype
  548.     dc.b    \1,\2
  549.     endm
  550.  
  551. fputype    macro    *min,max
  552.     dc.w    sst_fputype
  553.     dc.b    \1,\2
  554.     endm
  555.  
  556. sysver    macro    *min,max
  557.     dc.w    sst_sysver
  558.     dc.b    \1,\2
  559.     endm
  560.  
  561. diserr    macro    *flags
  562.     dc.w    sst_errors
  563.     dc.l    \1
  564.     endm
  565.  
  566. wbconname    macro    *name
  567.     dc.w    sst_wbconname
  568.     dc.b    '\1',0
  569.     even
  570.     endm
  571.  
  572. extrahelp    macro    *[text]
  573.     dc.w    sst_extrahelp
  574.     ifne    NARG
  575.     dc.b    '\1',0
  576.     even
  577.     endc
  578.     endm
  579.  
  580. endhelp    macro
  581.     dc.b    0
  582.     even
  583.     endm
  584.  
  585. ; ### Text output ###
  586.  
  587. write    macro    *text
  588.     dtl    <\1>,a0
  589.     call    ss,Puts
  590.     endm
  591.  
  592. writeln    macro    *text
  593.     dtl    <\1>,a0
  594.     call    ss,PutsNL
  595.     endm
  596.  
  597. printfs    macro    *[.L,]text
  598.     dtl.\0    <\1>,a0
  599.     move.l    sp,a1
  600.     call    ss,Printf
  601.     endm
  602.  
  603. printfv    macro    *[.L,]text,variable
  604.     dtl.\0    <\1>,a0
  605.     geta    \2,a1
  606.     call    ss,Printf
  607.     endm
  608.  
  609. printfr    macro    *[.L,]text,register
  610.     push    \2
  611.     dtl.\0    <\1>,a0
  612.     move.l    sp,a1
  613.     call    ss,Printf
  614.     pop    \2
  615.     endm
  616.  
  617. printfl    macro    *[.L,]text,reglist[,numreg]
  618.     mpush    \2
  619.     dtl.\0    <\1>,a0
  620.     move.l    sp,a1
  621.     call    ss,Printf
  622.     ifeq    NARG-3
  623.     ifgt    \3-2
  624.     lea    (\3*4)(sp),sp
  625.     elseif
  626.     addq.l    #4*\3,sp
  627.     endc
  628.     elseif
  629.     mpop    \2
  630.     endc
  631.     endm
  632.  
  633. err    macro    *text
  634.     dtl    <\1>,a0
  635.     jump    ss,ExitError
  636.     endm
  637.  
  638. doserr    macro    *text
  639.     dtl    <\1>,a0
  640.     jump    ss,DosError
  641.     endm
  642.  
  643. errc    macro    *.negcond,text
  644.     b\0.s    \@a
  645.     err    <\1>
  646. \@a
  647.     endm
  648.