home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 2 / crawlyvol2.bin / apps / dtp / pgsmodst / atariimp / metafile.s < prev    next >
Text File  |  1991-05-23  |  18KB  |  1,117 lines

  1.  
  2.  Include "equ.h"
  3.  Include "impequ.h"
  4.  
  5.  SECTION metafile,CODE,PUBLIC
  6. *******************************************
  7. ***  object format            ***
  8. *******************************************
  9. dumbentry:
  10.     clr.l    d0
  11.     rts
  12.  
  13.     dc.l    "IMPO"
  14.     dc.w    201
  15.     dc.l    0
  16.  
  17. table:    dc.l    0
  18.     dc.l    name,special,check,metafile
  19.  
  20. *
  21. * GEM Metafile
  22. *
  23. check:    move.l    table,a0
  24.     move.l    buff1(a0),a1
  25.     move.l    (a1),a1
  26.     cmp.w    #$ffff,(a1)+
  27.     bne    never
  28.     cmp.w    #$0e00,(a1)
  29.     beq    v101
  30.     cmp.w    #$1800,(a1)        ;major version number
  31.     bne    never
  32. v101:    moveq    #2,d0
  33.     rts
  34. *
  35. *
  36. *
  37. metafile:
  38.     move.l    #1200,xpoint
  39.     move.l    #1200,ypoint
  40.     move.w    #0,angle
  41.  
  42.     clr.b    object+ob_Flag
  43.     clr.w    object+ob_Slant
  44.     clr.w    object+ob_Twist
  45.     move.w    #50,object+ob_LWidth        ;1 point line
  46.     move.b    #1,object+ob_LType        ;solid line
  47.     move.b    #1,object+ob_LColor        ;black line
  48.     move.b    #0,object+ob_FType        ;no fill
  49.     move.b    #1,object+ob_FColor        ;black fill
  50.     clr.b    object+ob_LBegin
  51.     clr.b    object+ob_LEnd
  52.     move.w    #900,object+ob_HStandOff    ;1/8 inch
  53.     move.w    #900,object+ob_VStandOff    ;1/8 inch
  54.  
  55.     move.l    table,a0
  56.     move.l    f_openr(a0),a0
  57.     jsr    (a0)
  58.  
  59.     move.l    table,a0
  60.     move.l    o_open(a0),a0
  61.     jsr    (a0)
  62.  
  63.     move.l    table,a0
  64.     move.l    o_begingroup(a0),a0
  65.     jsr    (a0)
  66.     beq    meta10
  67.  
  68.     bsr    objgeti
  69.     bsr    objgeti
  70.     move.w    d0,length
  71.  
  72.     moveq    #4,d0
  73.     bsr    objskip
  74.  
  75.     bsr    objgetie
  76.     move.l    d0,objdx
  77.     bsr    objgetie
  78.     move.l    d0,objdy
  79.  
  80.     bsr    objgetie
  81.     move.l    d0,-(sp)
  82.     bsr    objgetie
  83.     move.l    (sp)+,d1
  84.     sub.l    objdx,d1
  85.     sub.l    objdy,d0
  86.     cmp.l    d1,d0
  87.     bcs    meta0
  88.     move.l    d0,d1
  89. meta0:    move.w    #1600,xyscale
  90. meta1:    cmp.l    #24000,d1
  91.     bcs    meta2
  92.     lsr.l    #1,d1
  93.     lsl.w    xyscale
  94.     bra    meta1
  95.  
  96. meta2:    moveq    #0,d0
  97.     move.w    length,d0
  98.     lsl.w    #1,d0
  99.     sub.w    #16,d0
  100.     bsr    objskip
  101.  
  102. meta5:    bsr    objgeti
  103.     beq    meta10
  104.  
  105.     cmp.w    #$ffff,d0
  106.     beq    meta9
  107.     move.w    d0,opcode
  108.     bsr    objgeti
  109.     beq    meta10
  110.     move.w    d0,vertex
  111.     bsr    objgeti
  112.     beq    meta10
  113.     move.w    d0,integer
  114.     bsr    objgeti
  115.     beq    meta10
  116.     move.w    d0,subopcode
  117.  
  118.     lea    gemlist,a0
  119. meta6:    move.w    (a0)+,d0
  120.     beq    meta8                ;just skip it
  121.     cmp.w    opcode,d0
  122.     beq    meta7                ;execute routine
  123.     addq.l    #4,a0
  124.     bra    meta6
  125. *
  126. meta7:    move.l    (a0),a0
  127.     jsr    (a0)            ;go do the meta command
  128.     bra    meta5
  129. *
  130. *
  131. meta8:    bsr    opskip
  132.     beq    meta10
  133.     bra    meta5
  134.  
  135. opskip:    moveq    #0,d0
  136.     move.w    vertex,d0
  137.     lsl.w    #1,d0
  138.     add.w    integer,d0
  139.     lsl.w    #1,d0
  140.     bra    objskip
  141.  
  142. *
  143. * end of input file.  close and flush buffer
  144. *
  145. meta9:    move.l    table,a0
  146.     move.l    o_endgroup(a0),a0
  147.     jsr    (a0)
  148.     beq    meta10
  149.  
  150.     move.l    table,a0
  151.     move.l    o_close(a0),a0
  152.     jsr    (a0)
  153.  
  154.     move.l    table,a0
  155.     move.l    f_closer(a0),a0
  156.     jmp    (a0)
  157. *
  158. *
  159. *
  160. opf0:    addq.l    #4,sp
  161. opfail:    addq.l    #4,sp
  162. meta10:    move.l    table,a0
  163.     move.l    o_abort(a0),a0
  164.     jsr    (a0)
  165.  
  166.     move.l    table,a0
  167.     move.l    f_closer(a0),a0
  168.     jmp    (a0)
  169.  
  170.  
  171. ***********************************
  172. ***********************************
  173. * vsl_type
  174. *
  175. op15:    bsr    objgeti
  176.     move.b    d0,vsltype
  177.     rts
  178. *
  179. * vsl_width
  180. op16:    bsr    objgeti
  181.     mulu    #4,d0
  182.     move.w    d0,vslwidth
  183.     bra    objgeti
  184. *
  185. * vsl_color
  186. op17:    bsr    objgeti
  187.     move.b    d0,vslcolor
  188.     rts
  189. *
  190. * vsl_ends
  191. op108:    bsr    objgeti
  192.     move.b    d0,vslbgn
  193.     bsr    objgeti
  194.     move.b    d0,vslend
  195.     rts
  196. *
  197. * vsf_interior
  198. op23:    bsr    objgeti
  199.     move.b    d0,vsfinterior
  200.     rts
  201. *
  202. * vsf_style
  203. op24:    bsr    objgeti
  204.     move.b    d0,vsfstyle
  205.     rts
  206. *
  207. * vsf_color
  208. op25:    bsr    objgeti
  209.     move.b    d0,vsfcolor
  210.     rts
  211. *
  212. * vsf_perimeter
  213. op104:    bsr    objgeti
  214.     move.b    d0,vsfperimeter
  215.     rts
  216.  
  217. *
  218. * v_pline
  219. op6:    move.w    vertex,d0
  220.     cmp.w    #2,d0
  221.     bne    op6a
  222.     bsr    objgetxy
  223.     move.l    d0,object+ob_Left
  224.     move.l    d1,object+ob_Top
  225.     bsr    objgetxy
  226.     move.l    d0,object+ob_Right
  227.     move.l    d1,object+ob_Bottom
  228.     move.b    #tdln,object+ob_Type
  229.     bsr    putlstyle
  230.     bra    putobj
  231. *
  232. op6a:    move.l    #$7fffffff,object+ob_Left
  233.     move.l    #$7fffffff,object+ob_Top
  234.     move.l    #$80000000,object+ob_Right
  235.     move.l    #$80000000,object+ob_Bottom
  236.  
  237.     move.w    vertex,d0
  238.     mulu    #10,d0        ;* bytes per line
  239.     add.l    #22,d0        ;length,width,height,xscl,yscl,cnt
  240. *                ;newpath,strokepath
  241.     clr.w    d1
  242.     clr.w    d2
  243.     move.l    table,a0
  244.     move.l    m_alloc(a0),a0
  245.     jsr    (a0)
  246.     beq    opfail
  247.  
  248.     move.l    a0,mptr
  249.     move.l    (a0),a4
  250.     lea    20(a4),a4
  251.     move.l    a4,pptr
  252.  
  253.     move.w    vertex,subopcode
  254.     bra    vpln5
  255. vpln1:    bsr    objgetxy
  256.     move.l    pptr,a0
  257.     move.w    #LINETO,(a0)+        ;the first one will be changed
  258.     move.l    d0,(a0)+        ;to a MOVETO
  259.     move.l    d1,(a0)+
  260.     move.l    a0,pptr
  261.  
  262.     cmp.l    object+ob_Left,d0
  263.     bge    vpln2
  264.     move.l    d0,object+ob_Left
  265. vpln2:    cmp.l    object+ob_Top,d1
  266.     bge    vpln3
  267.     move.l    d1,object+ob_Top
  268. vpln3:    cmp.l    object+ob_Right,d0
  269.     ble    vpln4
  270.     move.l    d0,object+ob_Right
  271. vpln4:    cmp.l    object+ob_Bottom,d1
  272.     ble    vpln5
  273.     move.l    d1,object+ob_Bottom
  274. vpln5:    subq.w    #1,subopcode
  275.     bcc    vpln1
  276.  
  277.  
  278.     move.l    mptr,a0
  279.     move.l    (a0),a0
  280.     move.w    vertex,d0
  281.     mulu    #10,d0        ;* bytes per line
  282.     add.l    #22,d0        ;length,width,height,xscl,yscl,cnt
  283. *                ;newpath,strokepath
  284.     move.l    d0,(a0)+
  285.     move.l    object+ob_Right,d0
  286.     sub.l    object+ob_Left,d0
  287.     move.l    d0,(a0)+
  288.     move.l    object+ob_Bottom,d0
  289.     sub.l    object+ob_Top,d0
  290.     move.l    d0,(a0)+
  291.     move.w    #100,(a0)+
  292.     move.w    #100,(a0)+
  293.     move.w    vertex,d0
  294.     addq.w    #2,d0            ;newpath,strokepath
  295.     move.w    d0,(a0)+
  296.     move.w    #NEWPATH,(a0)+
  297.     move.w    #MOVETO,(a0)
  298.  
  299.     move.l    object+ob_Left,d0
  300.     move.l    object+ob_Top,d1
  301.     move.w    vertex,d7
  302.     bra    vpln8
  303. vpln7:    addq.l    #2,a0
  304.     sub.l    d0,(a0)+
  305.     sub.l    d1,(a0)+
  306. vpln8:    dbf    d7,vpln7
  307. *
  308.     move.w    #STROKEPATH,(a0)
  309. *
  310.     move.b    #tpoly,object+ob_Type
  311.     bsr    putlstyle
  312.     bsr    putobj
  313.  
  314.     move.l    mptr,a0
  315.     move.l    (a0),a0
  316.     move.l    (a0),d0
  317.     move.l    table,a0
  318.     move.l    o_malloc(a0),a0
  319.     jsr    (a0)
  320.     beq    opfail
  321.  
  322.     move.l    mptr,a1
  323.     move.l    (a1),a1
  324.     move.l    (a1),d0
  325.     lsr.w    #1,d0
  326.     bra    vpln11
  327. vpln10:    move.w    (a1)+,(a0)+
  328. vpln11:    dbf    d0,vpln10
  329.  
  330.     move.l    mptr,a0
  331.     move.l    table,a1
  332.     move.l    m_delete(a1),a1
  333.     jsr    (a1)
  334.     rts
  335.  
  336. *
  337. * v_gtext
  338. *
  339. op8:    bsr    objgetxy
  340.     move.l    d0,object+ob_Left
  341.     move.l    d1,object+ob_Bottom
  342.     move.l    xpoint,d2
  343.     mulu    integer,d2
  344.     add.l    d2,d0
  345.     sub.l    ypoint,d1
  346.     move.l    d0,object+ob_Right
  347.     move.l    d1,object+ob_Top
  348.  
  349.     move.w    angle,object+ob_Slant
  350.     move.w    angle,object+ob_Twist
  351.     clr.b    object+ob_LType
  352.     move.w    #25,object+ob_LWidth
  353.     clr.b    object+ob_FType
  354.     move.b    #ttxt,object+ob_Type
  355.     bsr    putobj
  356.     clr.w    object+ob_Slant
  357.     clr.w    object+ob_Twist
  358.  
  359.     lea    column,a0
  360.     move.b    #1,cm_LCalc(a0)
  361.     move.b    #1,cm_QCalc(a0)
  362.     move.l    object+ob_Left,cm_Left(a0)
  363.     move.l    object+ob_Top,cm_Top(a0)
  364.     move.l    #$7fffff,cm_Right(a0)
  365.     move.l    #$7fffff,cm_Bottom(a0)
  366.     clr.w    cm_Flag(a0)
  367.  
  368.     move.l    #1000,cm_Font(a0)
  369.     clr.l    cm_Attrb(a0)
  370.     move.l    xpoint,cm_XPoint(a0)
  371.     move.l    ypoint,cm_YPoint(a0)
  372.     clr.w    cm_Spacing(a0)
  373.     move.w    #$8000,cm_Lead(a0)
  374.     clr.w    cm_BMod(a0)
  375.     clr.w    cm_PIndent(a0)
  376.     clr.w    cm_LIndent(a0)
  377.     clr.w    cm_RIndent(a0)
  378.     clr.b    cm_Tag(a0)
  379.     clr.b    cm_Justify(a0)        ;block left
  380.     move.b    #9,cm_CFStyle(a0)
  381.     move.b    #1,cm_CFColor(a0)
  382.     move.b    #0,cm_CLStyle(a0)
  383.     move.b    #1,cm_CLColor(a0)
  384.     move.w    #100,cm_CLWidth(a0)
  385.     clr.l    cm_Tabs(a0)
  386.  
  387.     move.l    #cm_Sizeof+4,d0
  388.     add.w    integer,d0
  389.     addq.l    #1,d0
  390.     bclr    #0,d0            ;round up
  391.  
  392.     move.l    table,a0
  393.     move.l    o_malloc(a0),a0
  394.     jsr    (a0)
  395.     beq    opfail
  396.  
  397.     lea    column,a1
  398.     move.w    #cm_Sizeof,d0
  399.     bra    txt2
  400. txt1:    move.b    (a1)+,(a0)+
  401. txt2:    dbf    d0,txt1
  402.  
  403.     clr.w    (a0)+
  404.     move.w    integer,(a0)+
  405.  
  406.     bra    txt4
  407. txt3:    move.l    a0,-(sp)
  408.     bsr    objgeti
  409.     move.l    (sp)+,a0
  410.     beq    opfail
  411.     move.b    d0,(a0)+
  412. txt4:    subq.w    #1,integer
  413.     bcc    txt3
  414.  
  415.     rts
  416.  
  417. *
  418. *
  419. * v_fillarea
  420. *
  421. op9:    move.l    #$7fffffff,object+ob_Left
  422.     move.l    #$7fffffff,object+ob_Top
  423.     move.l    #$80000000,object+ob_Right
  424.     move.l    #$80000000,object+ob_Bottom
  425.  
  426.     move.w    vertex,d0
  427.     mulu    #10,d0        ;* bytes per line
  428.     add.l    #24,d0        ;length,width,height,xscl,yscl,cnt
  429. *                ;newpath,closepath,fillpath
  430.     clr.w    d1
  431.     clr.w    d2
  432.     move.l    table,a0
  433.     move.l    m_alloc(a0),a0
  434.     jsr    (a0)
  435.     beq    opfail
  436.  
  437.     move.l    a0,mptr
  438.     move.l    (a0),a4
  439.     lea    20(a4),a4
  440.     move.l    a4,pptr
  441.  
  442.     move.w    vertex,subopcode
  443.     bra    vfil5
  444. vfil1:    bsr    objgetxy
  445.     move.l    pptr,a0
  446.     move.w    #LINETO,(a0)+        ;the first one will be changed
  447.     move.l    d0,(a0)+        ;to a MOVETO
  448.     move.l    d1,(a0)+
  449.     move.l    a0,pptr
  450.  
  451.     cmp.l    object+ob_Left,d0
  452.     bge    vfil2
  453.     move.l    d0,object+ob_Left
  454. vfil2:    cmp.l    object+ob_Top,d1
  455.     bge    vfil3
  456.     move.l    d1,object+ob_Top
  457. vfil3:    cmp.l    object+ob_Right,d0
  458.     ble    vfil4
  459.     move.l    d0,object+ob_Right
  460. vfil4:    cmp.l    object+ob_Bottom,d1
  461.     ble    vfil5
  462.     move.l    d1,object+ob_Bottom
  463. vfil5:    subq.w    #1,subopcode
  464.     bcc    vfil1
  465.  
  466.  
  467.     move.l    mptr,a0
  468.     move.l    (a0),a0
  469.     move.w    vertex,d0
  470.     mulu    #10,d0        ;* bytes per line
  471.     add.l    #24,d0        ;length,width,height,xscl,yscl,cnt
  472. *                ;newpath,closepath,fillpath
  473.     move.l    d0,(a0)+
  474.     move.l    object+ob_Right,d0
  475.     sub.l    object+ob_Left,d0
  476.     move.l    d0,(a0)+
  477.     move.l    object+ob_Bottom,d0
  478.     sub.l    object+ob_Top,d0
  479.     move.l    d0,(a0)+
  480.     move.w    #100,(a0)+
  481.     move.w    #100,(a0)+
  482.     move.w    vertex,d0
  483.     addq.w    #3,d0            ;newpath,closepath,fillpath
  484.     move.w    d0,(a0)+
  485.     move.w    #NEWPATH,(a0)+
  486.     move.w    #MOVETO,(a0)
  487.  
  488.     move.l    object+ob_Left,d0
  489.     move.l    object+ob_Top,d1
  490.     move.w    vertex,d7
  491.     bra    vfil8
  492. vfil7:    addq.l    #2,a0
  493.     sub.l    d0,(a0)+
  494.     sub.l    d1,(a0)+
  495. vfil8:    dbf    d7,vfil7
  496. *
  497.     move.w    #CLOSEPATH,(a0)+
  498.     move.w    #FILLPATH,(a0)
  499. *
  500.     move.b    #tpoly,object+ob_Type
  501.     bsr    putfstyle
  502.     bsr    putobj
  503.  
  504.     move.l    mptr,a0
  505.     move.l    (a0),a0
  506.     move.l    (a0),d0
  507.     move.l    table,a0
  508.     move.l    o_malloc(a0),a0
  509.     jsr    (a0)
  510.     beq    opfail
  511.  
  512.     move.l    mptr,a1
  513.     move.l    (a1),a1
  514.     move.l    (a1),d0
  515.     lsr.w    #1,d0
  516.     bra    vfil11
  517. vfil10:    move.w    (a1)+,(a0)+
  518. vfil11:    dbf    d0,vfil10
  519.  
  520.     move.l    mptr,a0
  521.     move.l    table,a1
  522.     move.l    m_delete(a1),a1
  523.     jsr    (a1)
  524.     rts
  525.  
  526. *
  527. * output primitives
  528. op11:    move.w    subopcode,d0
  529.     cmp.w    #1,d0
  530.     beq    vbar
  531.     cmp.w    #2,d0
  532.     beq    arc
  533.     cmp.w    #3,d0
  534.     beq    pie
  535.     cmp.w    #4,d0
  536.     beq    circle
  537.     cmp.w    #5,d0
  538.     beq    ellipse
  539.     cmp.w    #6,d0
  540.     beq    elparc
  541.     cmp.w    #7,d0
  542.     beq    elppie
  543.     cmp.w    #8,d0
  544.     beq    rndrect
  545.     cmp.w    #9,d0
  546.     beq    frndrect
  547.     cmp.w    #10,d0
  548.     beq    jgtext
  549. *
  550. * unknown sub-opcode, skip it
  551. *
  552.     moveq    #0,d0
  553.     move.w    vertex,d0
  554.     lsl.w    #1,d0
  555.     add.w    integer,d0
  556.     lsl.w    #1,d0
  557.     bra    objskip
  558. *
  559. * v_bar
  560. *
  561. vbar:    bsr    objgetxy
  562.     move.l    d0,object+ob_Left
  563.     move.l    d1,object+ob_Top
  564.     bsr    objgetxy
  565.     move.l    d0,object+ob_Right
  566.     move.l    d1,object+ob_Bottom
  567.  
  568.     move.b    #tbox,object+ob_Type
  569.     bsr    putfstyle
  570.     bsr    putobj
  571.     moveq    #0,d0
  572.     bsr    objputw
  573.     moveq    #0,d0
  574.     bra    objputw
  575. *
  576. * arc drawing primitive
  577. *
  578. arc:    bsr    objgetxy
  579.     move.l    d0,object+ob_Left
  580.     move.l    d1,object+ob_Top
  581.     moveq    #8,d0
  582.     bsr    objskip
  583.     bsr    objgetdxy
  584.     move.l    d0,object+ob_Right
  585.     move.l    d0,object+ob_Bottom
  586.     bsr    objgeti
  587.     move.w    d0,object+ob_BAngle
  588.     bsr    objgeti
  589.     move.w    d0,object+ob_EAngle
  590.  
  591.     move.b    #tcir,object+ob_Type
  592.     bsr    putlstyle
  593.     bra    putcir
  594. *
  595. * pie drawing primitive
  596. *
  597. pie:    bsr    objgetxy
  598.     move.l    d0,object+ob_Left
  599.     move.l    d1,object+ob_Top
  600.     moveq    #8,d0
  601.     bsr    objskip
  602.     bsr    objgetdxy
  603.     move.l    d0,object+ob_Right
  604.     move.l    d0,object+ob_Bottom
  605.     bsr    objgeti
  606.     move.w    d0,object+ob_BAngle
  607.     bsr    objgeti
  608.     move.w    d0,object+ob_EAngle
  609.     move.b    #tcir,object+ob_Type
  610.     bsr    putfstyle
  611.     bra    putcir
  612.  
  613. *
  614. * circle drawing primitive
  615. *
  616. circle:
  617.     move.w    #0,object+ob_BAngle
  618.     move.w    #3600,object+ob_EAngle
  619.     bsr    objgetxy
  620.     move.l    d0,object+ob_Left
  621.     move.l    d1,object+ob_Top
  622.     moveq    #4,d0
  623.     bsr    objskip
  624.     bsr    objgetdxy
  625.     move.l    d0,object+ob_Right
  626.     move.l    d0,object+ob_Bottom
  627.     move.b    #tcir,object+ob_Type
  628.     bsr    putfstyle
  629.     bra    putcir
  630. *
  631. * ellipse drawing primitive
  632. *
  633. ellipse:
  634.     move.w    #0,object+ob_BAngle
  635.     move.w    #3600,object+ob_EAngle
  636.     bsr    objgetxy
  637.     move.l    d0,object+ob_Left
  638.     move.l    d1,object+ob_Top
  639.     bsr    objgetdxy
  640.     move.l    d0,object+ob_Right
  641.     move.l    d1,object+ob_Bottom
  642.     move.b    #telp,object+ob_Type
  643.     bsr    putfstyle
  644.     bra    putcir
  645. *
  646. * elliptical arc drawing primitive
  647. *
  648. elparc:
  649.     bsr    objgetxy
  650.     move.l    d0,object+ob_Left
  651.     move.l    d1,object+ob_Top
  652.     bsr    objgetdxy
  653.     move.l    d0,object+ob_Right
  654.     move.l    d1,object+ob_Bottom
  655.     bsr    objgeti
  656.     move.w    d0,object+ob_BAngle
  657.     bsr    objgeti
  658.     move.w    d0,object+ob_EAngle
  659.     move.b    #telp,object+ob_Type
  660.     bsr    putlstyle
  661.     bra    putcir
  662.  
  663. *
  664. * elliptical pie drawing primitive
  665. *
  666. elppie:
  667.     bsr    objgetxy
  668.     move.l    d0,object+ob_Left
  669.     move.l    d1,object+ob_Top
  670.     bsr    objgetdxy
  671.     move.l    d0,object+ob_Right
  672.     move.l    d1,object+ob_Bottom
  673.     bsr    objgeti
  674.     move.w    d0,object+ob_BAngle
  675.     bsr    objgeti
  676.     move.w    d0,object+ob_EAngle
  677.     move.b    #telp,object+ob_Type
  678.     bsr    putfstyle
  679.     bra    putcir
  680.  
  681. *
  682. putcir:    move.l    object+ob_Left,d0
  683.     move.l    object+ob_Top,d1
  684.     move.l    object+ob_Right,d2
  685.     move.l    object+ob_Bottom,d3
  686.     sub.l    d2,object+ob_Left
  687.     sub.l    d3,object+ob_Top
  688.     add.l    d2,d0
  689.     add.l    d3,d1
  690.     move.l    d0,object+ob_Right
  691.     move.l    d1,object+ob_Bottom
  692.  
  693.     bsr    putobj
  694.     move.w    object+ob_BAngle,d0
  695.     mulu    #10,d0
  696.     bsr    objputw
  697.     move.w    object+ob_EAngle,d0
  698.     mulu    #10,d0
  699.     bra    objputw
  700.  
  701. *
  702. * rounded rectangle drawing primitive
  703. *
  704. rndrect:
  705.     bsr    objgetxy
  706.     move.l    d0,object+ob_Left
  707.     move.l    d1,object+ob_Top
  708.     bsr    objgetxy
  709.     move.l    d0,object+ob_Right
  710.     move.l    d1,object+ob_Bottom
  711.  
  712.     move.b    #tbox,object+ob_Type
  713.     bsr    putlstyle
  714.     bsr    putobj
  715.     move.w    #900,d0
  716.     bsr    objputw
  717.     move.w    #900,d0
  718.     bra    objputw
  719.  
  720. *
  721. * filled rounded rectangle drawing primitive
  722. *
  723. frndrect:
  724.     bsr    objgetxy
  725.     move.l    d0,object+ob_Left
  726.     move.l    d1,object+ob_Top
  727.     bsr    objgetxy
  728.     move.l    d0,object+ob_Right
  729.     move.l    d1,object+ob_Bottom
  730.  
  731.     move.b    #tbox,object+ob_Type
  732.     bsr    putfstyle
  733.     move.w    vslwidth,object+ob_LWidth
  734.     move.b    vslcolor,object+ob_LColor
  735.     bsr    putobj
  736.     move.w    #900,d0
  737.     bsr    objputw
  738.     move.w    #900,d0
  739.     bra    objputw
  740.  
  741.  
  742. *
  743. * justified graphics text
  744. *
  745. jgtext:    subq.w    #2,integer        ;null terminated& justify mode
  746.  
  747.     bsr    objgetxy
  748.     move.l    d0,object+ob_Left
  749.     move.l    d1,object+ob_Bottom
  750.     sub.l    ypoint,d1
  751.     move.l    d0,object+ob_Right
  752.     move.l    d1,object+ob_Top
  753.     bsr    objgetdxy
  754.     add.l    d0,object+ob_Right
  755.  
  756.     bsr    objgeti
  757.     beq    opfail
  758.     bsr    objgeti
  759.     beq    opfail
  760.  
  761.     move.w    angle,object+ob_Slant
  762.     move.w    angle,object+ob_Twist
  763.  
  764.     clr.b    object+ob_LType
  765.     move.w    #25,object+ob_LWidth
  766.     clr.b    object+ob_FType
  767.     move.b    #ttxt,object+ob_Type
  768.     bsr    putobj
  769.  
  770.     clr.w    object+ob_Slant
  771.     clr.w    object+ob_Twist
  772.  
  773.     lea    column,a0
  774.     move.b    #1,cm_LCalc(a0)
  775.     move.b    #1,cm_QCalc(a0)
  776.     move.l    object+ob_Left,cm_Left(a0)
  777.     move.l    object+ob_Top,cm_Top(a0)
  778.     move.l    #$7fffff,cm_Right(a0)
  779.     move.l    #$7fffff,cm_Bottom(a0)
  780.     clr.w    cm_Flag(a0)
  781.  
  782.     move.l    #1000,cm_Font(a0)
  783.     clr.l    cm_Attrb(a0)
  784.     move.l    xpoint,cm_XPoint(a0)
  785.     move.l    ypoint,cm_YPoint(a0)
  786.     clr.w    cm_Spacing(a0)
  787.     move.w    #$8000,cm_Lead(a0)
  788.     clr.w    cm_BMod(a0)
  789.     clr.w    cm_PIndent(a0)
  790.     clr.w    cm_LIndent(a0)
  791.     clr.w    cm_RIndent(a0)
  792.     clr.b    cm_Tag(a0)
  793.     clr.b    cm_Justify(a0)        ;block left
  794.     move.b    #9,cm_CFStyle(a0)
  795.     move.b    #1,cm_CFColor(a0)
  796.     move.b    #0,cm_CLStyle(a0)
  797.     move.b    #1,cm_CLColor(a0)
  798.     move.w    #100,cm_CLWidth(a0)
  799.     clr.l    cm_Tabs(a0)
  800.  
  801.     move.l    #cm_Sizeof+4,d0
  802.     add.w    integer,d0
  803.     addq.l    #1,d0
  804.     bclr    #0,d0            ;round up
  805.  
  806.     move.l    table,a0
  807.     move.l    o_malloc(a0),a0
  808.     jsr    (a0)
  809.     beq    opfail
  810.  
  811.     lea    column,a1
  812.     move.w    #cm_Sizeof,d0
  813.     bra    jtxt2
  814. jtxt1:    move.b    (a1)+,(a0)+
  815. jtxt2:    dbf    d0,jtxt1
  816.  
  817.     clr.w    (a0)+
  818.     move.w    integer,(a0)+
  819.  
  820.     bra    jtxt4
  821. jtxt3:    move.l    a0,-(sp)
  822.     bsr    objgeti
  823.     move.l    (sp)+,a0
  824.     beq    opfail
  825.     move.b    d0,(a0)+
  826. jtxt4:    subq.w    #1,integer
  827.     bcc    jtxt3
  828.  
  829.     rts
  830.  
  831. *
  832. * vst_height
  833. *
  834. op12:    bsr    objgetdxy
  835.     move.l    d1,xpoint
  836.     move.l    d1,ypoint
  837.     rts
  838.  
  839. *
  840. * vst_rotation
  841. *
  842. op13:    bsr    objgeti
  843.     mulu    #10,d0
  844.     move.w    d0,angle
  845.     rts
  846.  
  847. *
  848. * vst_point
  849. *
  850. op107:    bsr    objgeti
  851.     mulu    #100,d0
  852.     move.l    d0,xpoint
  853.     move.l    d0,ypoint
  854.     rts
  855.  
  856. *
  857. * vr_recfl
  858. op114:    bsr    objgetxy
  859.     move.l    d0,object+ob_Left
  860.     move.l    d1,object+ob_Top
  861.     bsr    objgetxy
  862.     move.l    d0,object+ob_Right
  863.     move.l    d1,object+ob_Bottom
  864.  
  865.     move.b    #tbox,object+ob_Type
  866.     bsr    putfstyle
  867.     bsr    nolstyle
  868.     bsr    putobj
  869.     moveq    #0,d0
  870.     bsr    objputw
  871.     moveq    #0,d0
  872.     bra    objputw
  873.  
  874. *******************************************
  875. ***                    ***
  876. *******************************************
  877. putlstyle:
  878.     move.b    vsltype,object+ob_LType
  879.     move.w    vslwidth,object+ob_LWidth
  880.     move.b    vslbgn,object+ob_LBegin
  881.     move.b    vslend,object+ob_LEnd
  882.     move.b    vslcolor,object+ob_LColor
  883.     bra    nofstyle
  884.  
  885. nolstyle:
  886.     clr.b    object+ob_LType
  887.     clr.w    object+ob_LWidth
  888.     clr.b    object+ob_LBegin
  889.     clr.b    object+ob_LEnd
  890.     clr.b    object+ob_LColor
  891.     rts
  892.  
  893. putfstyle:
  894.     moveq    #0,d0            ;finterior=0 or > 3 is hollow
  895.     cmp.b    #1,vsfinterior
  896.     bne    putfs1
  897.     moveq    #9,d0
  898. putfs1:    cmp.b    #2,vsfinterior
  899.     bne    putfs2
  900.     move.b    vsfstyle,d0
  901.     addq.b    #1,d0
  902. putfs2:    cmp.b    #3,vsfinterior
  903.     bne    putfs3
  904.     move.b    vsfstyle,d0
  905.     add.b    #25,d0
  906. putfs3:    move.b    d0,object+ob_FType    ;fill type
  907.     move.b    vsfcolor,object+ob_FColor
  908.     bsr    nolstyle
  909.     tst.b    vsfperimeter
  910.     beq    rrts
  911.     move.b    #1,object+ob_LType
  912.     move.w    #25,object+ob_LWidth
  913.     move.b    vsfcolor,object+ob_LColor
  914. rrts:    rts
  915.  
  916. nofstyle:
  917.     clr.b    object+ob_FType
  918.     clr.b    object+ob_FColor
  919.     rts
  920.  
  921.  
  922. putobj:    move.l    table,a1
  923.     move.l    o_obj(a1),a1
  924.     lea    object,a0
  925.     jsr    (a1)
  926.     beq    opf0
  927.     rts
  928.  
  929. ***
  930. ***
  931. ***
  932. objgetdxy:
  933.     bsr    objgetie
  934.     move.l    d0,temp
  935.     bsr    objgetie
  936.     move.l    d0,d1
  937.     move.l    temp,d0
  938.     bra    objd1
  939. *
  940. objgetxy:
  941.     bsr    objgetie
  942.     move.l    d0,temp
  943.     bsr    objgetie
  944.     move.l    d0,d1
  945.     move.l    temp,d0
  946.     sub.l    objdx,d0
  947.     sub.l    objdy,d1
  948. objd1:    move.l    d1,-(sp)
  949.  
  950.     move.w    #7200,d1
  951.     move.l    table,a0
  952.     move.l    muls1632(a0),a0
  953.     jsr    (a0)
  954.     move.w    xyscale,d2
  955.     move.l    table,a0
  956.     move.l    divs1648(a0),a0
  957.     jsr    (a0)
  958.  
  959.     move.l    d0,d1
  960.     move.l    (sp)+,d0
  961.     move.l    d1,-(sp)
  962.  
  963.     move.w    #7200,d1
  964.     move.l    table,a0
  965.     move.l    muls1632(a0),a0
  966.     jsr    (a0)
  967.     move.w    xyscale,d2
  968.     move.l    table,a0
  969.     move.l    divs1648(a0),a0
  970.     jsr    (a0)
  971.     move.l    d0,d1
  972.     move.l    (sp)+,d0
  973.     rts
  974. *
  975. objgetie:
  976.     move.l    table,a0
  977.     move.l    f_geti(a0),a0
  978.     jsr    (a0)
  979.     beq    rrts
  980.     ext.l    d0
  981.     moveq    #1,d1
  982.     rts
  983.  
  984. objgeti:
  985.     move.l    table,a0
  986.     move.l    f_geti(a0),a0
  987.     jmp    (a0)
  988. *
  989. objskip:
  990.     move.l    table,a0
  991.     move.l    f_skip(a0),a0
  992.     jmp    (a0)
  993. *
  994. objputw:
  995.     move.l    table,a0
  996.     move.l    o_putw(a0),a0
  997.     jsr    (a0)
  998.     beq    opf0
  999.     rts
  1000.  
  1001. *******************************************************************
  1002. ***    called when the import routine choosen finds something    ***
  1003. ***    wrong with the file loaded.                ***
  1004. *******************************************************************
  1005. notright:
  1006.     rts
  1007.  
  1008. never:    moveq    #0,d0
  1009.     rts
  1010.  
  1011. maybe:    moveq    #1,d0
  1012.     rts
  1013.  
  1014. right:    moveq    #2,d0
  1015.     rts
  1016.  
  1017. *************************************************************
  1018. *************************************************************
  1019.  SECTION metafile,DATA,PUBLIC
  1020.  
  1021. gemlist:
  1022.     dc.w    6
  1023.     dc.l    op6
  1024.     dc.w    8
  1025.     dc.l    op8
  1026.     dc.w    9
  1027.     dc.l    op9
  1028.     dc.w    11
  1029.     dc.l    op11
  1030.     dc.w    12
  1031.     dc.l    op12
  1032.     dc.w    13
  1033.     dc.l    op13
  1034.     dc.w    15
  1035.     dc.l    op15
  1036.     dc.w    16
  1037.     dc.l    op16
  1038.     dc.w    17
  1039.     dc.l    op17
  1040.     dc.w    23
  1041.     dc.l    op23
  1042.     dc.w    24
  1043.     dc.l    op24
  1044.     dc.w    25
  1045.     dc.l    op25
  1046.  
  1047.     dc.w    107
  1048.     dc.l    op107
  1049.     dc.w    108
  1050.     dc.l    op108
  1051.     dc.w    104
  1052.     dc.l    op104
  1053.     dc.w    114
  1054.     dc.l    op114
  1055.  
  1056.     dc.w    1
  1057.     dc.l    opskip
  1058.     dc.w    5
  1059.     dc.l    opskip
  1060.     dc.w    22
  1061.     dc.l    opskip
  1062.     dc.w    32
  1063.     dc.l    opskip
  1064.     dc.w    39
  1065.     dc.l    opskip
  1066.     dc.w    106
  1067.     dc.l    opskip
  1068.     dc.w    107
  1069.     dc.l    opskip
  1070.  
  1071.     dc.w    0            ;end of list
  1072.  
  1073. *
  1074. special:
  1075.     dc.w    1
  1076.     dc.l    spcl1
  1077.  
  1078. name:    dc.b    "GEM Metafile v2.1.2",0
  1079. spcl1:    dc.b    "Object",0
  1080.  
  1081.  
  1082.  SECTION metafile,BSS,PUBLIC
  1083. xyscale:    ds.w    1
  1084.  
  1085. opcode:        ds.w    1
  1086. vertex:        ds.w    1
  1087. integer:    ds.w    1
  1088. subopcode:    ds.w    1
  1089.  
  1090. vsltype:    ds.b    1
  1091. vslcolor:    ds.b    1
  1092. vslend:        ds.b    1
  1093. vslbgn:        ds.b    1
  1094. vslwidth:    ds.w    1
  1095.  
  1096. vsfinterior:    ds.b    1
  1097. vsfstyle:    ds.b    1
  1098. vsfcolor:    ds.b    1
  1099. vsfperimeter:    ds.b    1
  1100.  
  1101. object:        ds.w    ob_SizeOf/2
  1102. column:        ds.w    cm_Sizeof/2
  1103. xpoint:        ds.l    1
  1104. ypoint:        ds.l    1
  1105. angle:        ds.w    1
  1106.  
  1107. objdx:        ds.l    1
  1108. objdy:        ds.l    1
  1109. objxs:        ds.l    1
  1110. objys:        ds.l    1
  1111.  
  1112. temp:        ds.l    1
  1113.  
  1114. mptr:        ds.l    1
  1115. pptr:        ds.l    1
  1116. length:        ds.w    1
  1117.