home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 1 / LSD Compendium Deluxe 1.iso / a / programming / assembly / mapsrc.lha / map.sub < prev    next >
Encoding:
Text File  |  1980-02-19  |  52.0 KB  |  3,448 lines

  1. endeditactual:
  2.     move.w #2,windowtype(a5)
  3.     bsr updatewindow
  4.     bne nowindow
  5.     bsr wind2setup
  6.     rts
  7. editactual:
  8.     move.w #3,windowtype(a5)
  9.     bsr updatewindow
  10.     bne nowindow
  11.     move.l #164,d6            ;bp strt
  12.     move.l #205,d7            ;stop
  13.     bsr plotpal
  14.     
  15.     move.b #0,d0
  16.     move.l #208,d2
  17.     bsr palcol_arrow
  18.     
  19.     bsr draweditblock
  20.     
  21.     rts
  22.  
  23. drawactual:
  24.  
  25.     rts
  26.     
  27. draweditblock:
  28.     moveq.l #0,d0
  29.     move.w blockwidth(a5),d0
  30.     add.l d0,d0    *2
  31.     add.l d0,d0    *4
  32.     add.l d0,d0    *8
  33.     move.w d0,blockpixelwidth(a5)
  34.     moveq.l #0,d1
  35.     move.w #160,d1
  36.     divu d0,d1
  37.     move.w d1,eb_dx(a5)
  38.     move.w blockheight(a5),d0
  39.     moveq.l #0,d1
  40.     move.w #160,d1
  41.     divu d0,d1
  42.     move.w d1,eb_dy(a5)
  43.     move.w d1,d0
  44.     cmp.w eb_dx(a5),d0
  45.     blo .x
  46.     move.w eb_dx(a5),eb_dy(a5)
  47.     bra .y
  48. .x    move.w eb_dy(a5),eb_dx(a5)
  49. .y
  50.     moveq #0,d0
  51.     move.w blockpixelwidth(a5),d1
  52.     cmp.w #80,d1
  53.     bhs .gotit    ;nodraw
  54.     move.w #480,d0
  55.     sub.w d1,d0
  56.     lsr.w #1,d0    ;divu #2
  57.     
  58. .gotit
  59.     move.w d0,blockeditactualx(a5)
  60.     
  61.     move.w #160,d0
  62.     move.w blockheight(a5),d1
  63.     sub.w d1,d0
  64.     lsr.w #1,d0
  65.     move.w d0,blockeditactualy(a5)
  66.     
  67.     bsr g_maskswap
  68.     move.w blockeditactualx(a5),d0
  69.     beq .nodrawa
  70.     move.w blockeditactualy(a5),d1
  71.  
  72.     move.l currentblockadr(a5),a0
  73.     bsr drawblock
  74. .nodrawa    
  75.     rts    
  76.     
  77. drawblock: ;draw block, d0 = x, d1 = y, a0 = block adr.
  78.     move.l d0,d6
  79.     move.l d1,d7
  80.  
  81.     lea block_gfx(a0),a0
  82.     
  83.     move.l chipblockbase(a5),a1
  84.     move.l exec(a5),a6
  85.  
  86.     moveq.l #0,d4
  87.     move.w blockwidth(a5),d4
  88.     btst #0,d4
  89.     beq .normal
  90.  
  91.     move.w blockheight(a5),d3
  92.  
  93.     mulu.w bitplanes(a5),d3
  94.     sub.w #1,d3
  95. .cloop
  96.  
  97.     move.l d4,d0
  98.  
  99.     jsr -624(a6)        ;copy mem
  100.  
  101.     addq.l #1,a1
  102.  
  103.     dbra d3,.cloop
  104.  
  105.     bra .back
  106. .normal
  107.     mulu.w blockheight(a5),d4
  108.  
  109.     mulu bitplanes(a5),d4
  110.     move.l d4,d0
  111.     jsr -624(a6)
  112. .back
  113.  
  114.     move.l d6,d0
  115.     move.l d7,d1
  116.     ext.l d0
  117.     ext.l d1
  118.  
  119.     lea chipimage(pc),a1
  120.     move.l intbase(a5),a6
  121.     move.l rastport(a5),a0
  122.     jsr -114(a6)
  123.     
  124.     rts
  125. chipimage: dc.l 0,0,0,0,0,0
  126.  
  127. draweditrec: ;draw block, block: d0 = x, d1 = y, d2 = colour.
  128.  
  129.     move.l gfxbase(a5),a6
  130.     move.l rastport(a5),a2
  131.  
  132.     exg.l d0,d2
  133.     move.l d1,d3
  134. .loop
  135.     move.l a2,a1
  136.     jsr -342(a6)
  137.  
  138.     move.l a2,a1
  139.     
  140.     move.l d2,d0
  141.     mulu eb_dx(a5),d0
  142.     move.l d3,d1
  143.     mulu eb_dy(a5),d1
  144.     move.l d0,d2
  145.     move.l d1,d3
  146.     add.w eb_dx(a5),d2
  147.     sub.w #1,d2
  148.     add.w eb_dy(a5),d3
  149.     sub.w #1,d3
  150.  
  151.     jsr -306(a6)
  152.     
  153.     rts
  154.  
  155.  
  156. getpixelnumber:    ;get block pixel: d0 = x, d1 = y, a0 = block
  157.             ;d0-d5,a0 = currupted. d0 = pixel colour
  158.     mulu blockwidth(a5),d1
  159.     lea (a0,d1.w),a0    ;=at line of block
  160.     move.l d0,d1
  161.     lsr.w #3,d0
  162.     lea (a0,d0.w),a0    ;=at start of byte
  163.     lsl.w #3,d0
  164.     sub.w d0,d1
  165.     move.w #7,d0
  166.     sub.w d1,d0        ;=bit to Btst
  167.     move.w bitplanes(a5),d1
  168.     subq #1,d1
  169.     moveq.l #0,d2
  170.     moveq.l #0,d3
  171.     move.w blockwidth(a5),d3
  172.     mulu.w blockheight(a5),d3    ;= bitplane size
  173.     moveq.l #1,d4
  174. .bitplanes
  175.     move.b (a0),d5
  176.     btst d0,d5
  177.     beq .nobit
  178.     or.w d4,d2    
  179. .nobit    lsl.w #1,d4
  180.     lea (a0,d3.w),a0
  181.     dbra d1,.bitplanes
  182.     move.l d2,d0    
  183.     rts
  184. getmasknumber:    ;get block pixel: d0 = x, d1 = y, a0 = block
  185.             ;d0-d5,a0 = currupted. d0 = pixel colour
  186.     mulu blockwidth(a5),d1
  187.     lea (a0,d1.w),a0    ;=at line of block
  188.     move.l d0,d1
  189.     lsr.w #3,d0
  190.     lea (a0,d0.w),a0    ;=at start of byte
  191.     lsl.w #3,d0
  192.     sub.w d0,d1
  193.     move.w #7,d0
  194.     sub.w d1,d0        ;=bit to Btst
  195.     moveq.l #0,d2
  196.     moveq.l #0,d3
  197.     move.w blockwidth(a5),d3
  198.     mulu.w blockheight(a5),d3    ;= bitplane size
  199.     moveq.l #1,d4
  200. .bitplanes
  201.     move.b (a0),d5
  202.     btst d0,d5
  203.     beq .nobit
  204.     or.w d4,d2    
  205. .nobit    move.l d2,d0    
  206.     rts
  207.  
  208.  
  209. writepixel: ;draws a pixel: d0 = x pos, d1 = ypos a0 = block d5 = colour
  210.     mulu blockwidth(a5),d1
  211.     lea (a0,d1.w),a0    ;=at line of block
  212.     move.l d0,d1
  213.     lsr.w #3,d0
  214.     lea (a0,d0.w),a0    ;=at start of byte
  215.     lsl.w #3,d0
  216.     sub.w d0,d1
  217.     move.w #7,d0
  218.     sub.w d1,d0        ;=bit to set
  219.     move.w bitplanes(a5),d1
  220.     subq #1,d1
  221.     moveq.l #0,d2
  222.     moveq.l #0,d3
  223.     move.w blockwidth(a5),d3
  224.     mulu.w blockheight(a5),d3    ;= bitplane size
  225.  
  226. .bitplanes
  227.     ;move.b (a0),d4    ;the byte of data of block
  228.     btst #0,d5
  229.     beq .nobit
  230.     bset d0,(a0)
  231.     bra .nobitr
  232. .nobit    bclr d0,(a0)
  233. .nobitr
  234.     lsr.w #1,d5
  235.     lea (a0,d3.w),a0
  236.     dbra d1,.bitplanes
  237.     move.l d2,d0    
  238.     rts
  239.  
  240. editmouse:
  241.     moveq.l #0,d6
  242.     move.l d6,d7
  243.     move.w mousex(a5),d6
  244.     move.w mousey(a5),d7
  245.  
  246.     moveq.l #0,d0
  247.     moveq.l #0,d1
  248.     cmp.w #164-3,d7
  249.     blo .splot
  250.     cmp.w #200-3,d7
  251.     bhi .splot
  252.     move.w d6,d0
  253.     move.w palspace(a5),d1
  254.     divu d1,d0
  255.     move.w palcolours(a5),d2
  256.     cmp.w d2,d0
  257.     bhi .nope
  258.  
  259.     move.l d0,-(sp)
  260.     move.b #1,d0
  261.     move.l #208,d2
  262.     bsr palcol_arrow
  263.     move.l (sp)+,d0
  264.     move.w d0,currentcolour(a5)
  265.     move.b #0,d0
  266.     move.l #208,d2
  267.     bsr palcol_arrow
  268.  
  269. .nope
  270.     rts
  271. .splot                ;d6 = x, d7 = y
  272.  
  273.  
  274.  ;    sub.l #3,d7
  275.      tst.l d7
  276.     bmi .nope
  277.     tst.l d6
  278.     bmi .nope
  279.     divu eb_dy(a5),d7
  280.  
  281.     divu eb_dx(a5),d6
  282.     ext.l d7
  283.     ext.l d6
  284.     move.l d7,d1
  285.     move.l d6,d0
  286.     
  287.     cmp.w blockpixelwidth(a5),d0
  288.     bhs .nope
  289.     cmp.w blockheight(a5),d1
  290.     bhs .nope
  291.     
  292.     move.w drawgad1+12,d6
  293.     
  294.     btst #7,d6
  295.     beq .off
  296.             ;Reached when Mask Selected. D0 = X pixel, D1 = Y pixel
  297.     move.l currentblockadr(a5),a0
  298.     lea block_gfx(a0),a0
  299.     
  300.     move.l d0,d6
  301.     move.l d1,d7
  302.     bsr getpixelnumber
  303.     move.l d0,d2
  304.     move.l d6,d0
  305.     move.l d7,d1
  306.     bsr draweditrec
  307.  
  308.     move.l d6,d0
  309.     move.l d7,d1
  310.  
  311.     move.w drawgad2+12,d5
  312.     btst #7,d5
  313.     beq .setd
  314.     move.l currentblockadr(a5),a4
  315.     move.w blockmask(a5),d2
  316.     lea (a4,d2.w),a0
  317.     move.l d0,d6
  318.     move.l d1,d7
  319.     moveq #0,d5
  320.  
  321.     bsr writepixelmask
  322.     rts
  323. .setd
  324.     move.l currentblockadr(a5),a4
  325.     move.w blockmask(a5),d2
  326.     lea (a4,d2.w),a0
  327.     move.l d0,d6
  328.     move.l d1,d7
  329.     moveq #1,d5
  330.  
  331.     bsr writepixelmask
  332.     move.l d6,d0
  333.     move.l d7,d1
  334.  
  335.     mulu eb_dy(a5),d1
  336.     mulu eb_dx(a5),d0
  337.     move.w eb_dx(a5),d2
  338.     move.w eb_dx(a5),d3
  339.     ext.l d2
  340.     ext.l d3
  341.     bsr drawdotty
  342.     rts    
  343.     
  344. .off
  345.     
  346.     move.l currentblockadr(a5),a4
  347.     lea block_gfx(a4),a0
  348.     move.l d0,d6
  349.     move.l d1,d7
  350.     moveq.l #0,d5
  351.     move.w currentcolour(a5),d5
  352.     bsr writepixel
  353.     cmp.w #80,blockpixelwidth(a5)
  354.     bhi .noactual
  355.     move.w currentcolour(a5),d0
  356.     move.l rastport(a5),a1
  357.     move.l gfxbase(a5),a6
  358.     jsr -342(a6)
  359.     move.l d6,d0
  360.     move.l d7,d1
  361.     add.w blockeditactualx(a5),d0
  362.     add.w blockeditactualy(a5),d1
  363.     move.l rastport(a5),a1
  364.     jsr -324(a6)
  365. .noactual
  366.  
  367.     move.l d6,d0
  368.     move.l d7,d1
  369.     moveq.l #0,d2
  370.     move.w currentcolour(a5),d2
  371.  
  372.  
  373.     bsr draweditrec
  374.     rts
  375.  
  376. writepixelmask: ;draws a pixel: d0 = x pos, d1 = ypos a0 = block ;d5 = bit to save 
  377.     mulu blockwidth(a5),d1
  378.     lea (a0,d1.w),a0    ;=at line of block
  379.     move.l d0,d1
  380.     lsr.w #3,d0
  381.     lea (a0,d0.w),a0    ;=at start of byte
  382.     lsl.w #3,d0
  383.     sub.w d0,d1
  384.     move.w #7,d0
  385.     sub.w d1,d0        ;=bit to set
  386.     moveq.l #0,d3
  387.     move.w blockwidth(a5),d3
  388.     mulu.w blockheight(a5),d3    ;= bitplane size
  389.  
  390.     btst #0,d5
  391.     beq .nobit
  392.     bset d0,(a0)
  393.     bra .nobitr
  394. .nobit    bclr d0,(a0)
  395. .nobitr
  396.         
  397.     rts
  398.     
  399.  
  400. drawdotty: * Draws "Dots" to show selected. It "And's" %01010... to bitplanes.
  401.        * Call D0 = x pos, d1 = y pos, d2 = x width, d3 = y height.
  402.     subq #1,d2
  403.     addq #2,d1        ;correct it
  404.     move.w bitplanes(a5),d4
  405.     subq.w #1,d4
  406.     lea bp1(a5),a4
  407.     
  408.     move.l (a4)+,a0
  409.     subq.w #1,d3
  410.     mulu #screenwidth,d1
  411.     move.w d0,d5
  412.     lsr.w #5,d5    ;/32
  413.     move.w d5,d7
  414.     add.w d7,d7    ;*2
  415.     add.w d7,d7    ;*4
  416.     
  417.     add.w d7,d1
  418.     lsl.w #5,d5    ;*32
  419.     sub.w d5,d0    ;d0 = x pixels right to strt.
  420.     lea (a0,d1.w),a0
  421.     
  422.     move.w d0,d7
  423.     add.w d2,d7
  424.     cmp.w #32,d7
  425.     bhs .not1c
  426.     moveq.l #-1,d5
  427.     lsr.l d0,d5
  428.     move.w #31,d0
  429.     sub.w d7,d0
  430.     move.l #$88888888,d6
  431.     lsr.l d0,d5
  432.     lsl.l d0,d5
  433.     move.l d6,d7
  434.     lsr.l #2,d7
  435.     and.l d5,d6
  436.     and.l d5,d7
  437.     
  438.     
  439. .loop2    move.w d3,d5
  440. .loop    eor.l d6,(a0)
  441.     subq #1,d5
  442.     bmi .done
  443.  
  444.     eor.l d7,40(a0)
  445.     lea 80(a0),a0
  446.     dbra d5,.loop
  447. .done    move.l (a4)+,a0
  448.     lea (a0,d1.w),a0
  449.     dbra d4,.loop2
  450.     rts
  451. .not1c    
  452.     moveq.l #-1,d5
  453.     lsr.l d0,d5
  454.     move.l #$88888888,d2
  455.     move.l d2,d6
  456.     move.l d6,d0
  457.     lsr.l #2,d0
  458.     move.l d0,eormidb(a5)
  459.     move.l d2,eormida(a5)
  460.     and.l d5,d6
  461.     and.l d5,d0
  462.     move.l d0,eorstrta(a5)
  463.     move.l d6,eorstrtb(a5)
  464.     sub.w #32,d7
  465.     move.l d7,d5
  466.     lsr.w #5,d5
  467.     move.w d5,numberofeorlongs(a5)
  468.     lsl.w #5,d5
  469.     sub.w d5,d7
  470.     move.w #31,d0
  471.     sub.w d7,d0
  472.     moveq.l #-1,d5
  473.     lsr.l d0,d5
  474.     lsl.l d0,d5
  475.     move.l d2,d6
  476.     lsr.l #2,d6
  477.     and.l d5,d6
  478.     and.l d5,d2
  479.     move.l d2,eorenda(a5)
  480.     move.l d6,eorendb(a5)
  481.     move.w numberofeorlongs(a5),d7
  482.     sub.w #1,numberofeorlongs(a5)
  483.     add.w #1,d7
  484.     add.w d7,d7
  485.     add.w d7,d7
  486.     move.w #40,d6
  487.     sub.w d7,d6
  488. .outer    move.w d3,d5
  489. .lines    move.l eorstrta(a5),d7
  490.     eor.l d7,(a0)+
  491.     move.w numberofeorlongs(a5),d0
  492.     bmi .donelongs
  493.     move.l eormida(a5),d7
  494. .longloop eor.l d7,(a0)+
  495.     dbra d0,.longloop
  496. .donelongs
  497.     move.l eorenda(a5),d7
  498.     eor.l d7,(a0)
  499.     subq #1,d5
  500.     bmi .donelines
  501.     lea (a0,d6.w),a0
  502.     move.l eorstrtb(a5),d7
  503.     eor.l d7,(a0)+
  504.     move.w numberofeorlongs(a5),d0
  505.     bmi .donelongs2
  506.     move.l eormidb(a5),d7
  507. .longloop2 eor.l d7,(a0)+
  508.     dbra d0,.longloop2
  509. .donelongs2
  510.     move.l eorendb(a5),d7
  511.     eor.l d7,(a0)
  512.     lea (a0,d6.w),a0
  513.     dbra d5,.lines
  514. .donelines
  515.     move.l (a4)+,a0
  516.     lea (a0,d1.w),a0
  517.     dbra d4,.outer
  518.  
  519.     rts
  520.  
  521. g_back:
  522.     move.w #0,windowtype(a5)
  523.     bsr updatewindow
  524.     bne nowindow
  525.     rts
  526. g_editblock:
  527.     move.w #2,windowtype(a5)
  528.     bsr updatewindow
  529.     bne nowindow
  530.     bsr wind2setup
  531.  
  532.     rts
  533.  
  534. editgad17
  535.     dc.l editgad18
  536.     dc.w 220,74,90,30,5,$1,1
  537.     dc.l image_90_30
  538.     dc.l 0,txted17,0,0,0,0
  539. txted17: dc.b 11,0,0,0
  540.     dc.w 10,10,0,0
  541.     dc.l txt_saveiffblock,0
  542.     dc.l g_saveiffblock
  543. txt_saveiffblock: dc.b "Save IFF",0
  544.     even
  545. editgad18
  546.     dc.l editgad19
  547.     dc.w 220,220,90,30,5,$1,1
  548.     dc.l image_90_30
  549.     dc.l 0,txted18,0,0,0,0
  550. txted18: dc.b 13,0,0,0
  551.     dc.w 10,10,0,0
  552.     dc.l txt_deleteblock,0
  553.     dc.l g_deleteblock
  554. txt_deleteblock: dc.b "REMOVE!!!",0
  555.     even
  556. editgad19
  557.     dc.l 0
  558.     dc.w 130,220,90,30,5,$1,1
  559.     dc.l image_90_30
  560.     dc.l 0,txted19,0,0,0,0
  561. txted19: dc.b 11,0,0,0
  562.     dc.w 6,10,0,0
  563.     dc.l txt_insertblock,0
  564.     dc.l g_insertblock
  565. txt_insertblock: dc.b "New Block",0
  566.     even
  567. drawgad1
  568.     dc.l drawgad2
  569.     dc.w 10,224,199,27,5,$101,1
  570.     dc.l image_199_27
  571.     dc.l 0,txtdraw1,0,0,0,0
  572. txtdraw1: dc.b 11,0,0,0
  573.     dc.w 6,8,0,0
  574.     dc.l txt_maskon,0
  575.     dc.l g_maskswap
  576. txt_maskon: dc.b "Boxed = Edit Mask On",0
  577.     even
  578. drawgad2
  579.     dc.l 0
  580.     dc.w 220,222,90,30,5,$101,1
  581.     dc.l image_90_30
  582.     dc.l 0,txtdraw2,0,0,0,0
  583. txtdraw2: dc.b 11,0,0,0
  584.     dc.w 6,10,0,0
  585.     dc.l txt_setclear,0
  586.     dc.l g_setclear
  587. txt_setclear: dc.b "Set/Clear",0
  588.     even
  589. g_setclear:
  590.     rts    
  591. g_maskswap:
  592.     move.w #0,tempspace(a5)
  593.     move.w drawgad1+12,d6
  594.     btst #7,d6
  595.     beq .off
  596.     move.w #-1,tempspace(a5)
  597. .off
  598.     move.l currentblockadr(a5),a4
  599.     move.w blockmask(a5),d0
  600.     lea (a4,d0.w),a4
  601.     moveq.l #0,d7    ;y
  602. .yline    moveq.l #0,d6    ;x
  603. .xline
  604.     move.l currentblockadr(a5),a0
  605.     lea block_gfx(a0),a0
  606.     
  607.     move.l d6,d0
  608.     move.l d7,d1
  609.     bsr getpixelnumber
  610.     move.l d0,d2
  611.     move.l d6,d0
  612.     move.l d7,d1
  613.     bsr draweditrec
  614.  
  615.     tst.w tempspace(a5)
  616.     beq .nodraw
  617.  
  618.     move.l a4,a0
  619.     move.l d6,d0
  620.     move.l d7,d1
  621.     bsr getmasknumber
  622.     tst.b d0
  623.     beq .nodraw
  624.     move.l d6,d0
  625.     move.l d7,d1
  626.     mulu eb_dy(a5),d1
  627.     mulu eb_dx(a5),d0
  628.     move.w eb_dx(a5),d2
  629.     move.w eb_dx(a5),d3
  630.     ext.l d2
  631.     ext.l d3
  632.     movem.l d0-d7/a0-a6,-(sp)
  633.     bsr drawdotty
  634.     movem.l (sp)+,d0-d7/a0-a6
  635. .nodraw
  636.     add.w #1,d6
  637.     cmp.w blockpixelwidth(a5),d6
  638.     blo .xline
  639.     add.w #1,d7
  640.     cmp.w blockheight(a5),d7
  641.     blo .yline
  642.     
  643.  
  644.     rts
  645.  
  646. g_namechoose
  647.     move.w #4,windowtype(a5)
  648.     
  649.     move.w #0,choose_type(a5)
  650.     move.l currentblockadr(a5),a0
  651.     move.w block_name(a0),choose_num(a5)
  652.     move.l #ch_blockname,choose_name(a5)
  653.  
  654.     bsr gochoose
  655.     move.l currentblockadr(a5),a0
  656.     move.w choose_num(a5),block_name(a0)
  657.     move.w #0,exitbit(a5)
  658.     move.w #2,windowtype(a5)
  659.     bsr updatewindow
  660.     bne nowindow
  661.     bsr wind2setup
  662.  
  663.     rts
  664. g_bye:    move.w #1,exitbit(a5)
  665.     rts
  666.  
  667. g_spec1choose
  668.     move.w #4,windowtype(a5)
  669.     
  670.     move.w #1,choose_type(a5)
  671.     move.l currentblockadr(a5),a0
  672.     move.w block_special(a0),choose_num(a5)
  673.     move.l #ch_blocktype,choose_name(a5)
  674.  
  675.     bsr gochoose
  676.     move.l currentblockadr(a5),a0
  677.     move.w choose_num(a5),block_special(a0)
  678.     move.w #0,exitbit(a5)
  679.     move.w #2,windowtype(a5)
  680.     bsr updatewindow
  681.     bne nowindow
  682.     bsr wind2setup
  683.  
  684.     rts
  685.  
  686. ch_blocktype: dc.b 14,0,0,0
  687.     dc.w 0,0,0,0
  688.     dc.l ch_blocktypea,0
  689. ch_blocktypea dc.b "Extra Name (id=1)",0
  690.     even
  691.  
  692.  
  693. g_blockspec1plus
  694.     move.l currentblockadr(a5),a0
  695.     move.w block_special(a0),d0
  696.     add.w #1,d0
  697.     beq .error
  698.     move.w #1,d1
  699.     bsr getnameadr
  700.     bne .error
  701.     move.l currentblockadr(a5),a0
  702.     add.w #1,block_special(a0)
  703.     bsr updateeditscreen
  704. .error    rts
  705.  
  706. g_blockspec1minus
  707.     move.l currentblockadr(a5),a0
  708.     move.w block_special(a0),d0
  709.     beq .error
  710.     sub.w #1,d0
  711.     move.w #1,d1
  712.     bsr getnameadr
  713.     bne .error
  714.     move.l currentblockadr(a5),a0
  715.     sub.w #1,block_special(a0)
  716.     bsr updateeditscreen
  717. .error    rts
  718.  
  719. g_blockspec2plus
  720.     move.l currentblockadr(a5),a0
  721.     move.b block_special+2(a0),d0
  722.     add.b #1,d0
  723.     beq .error
  724.     move.b d0,block_special+2(a0)
  725.     bsr updateeditscreen
  726. .error    rts
  727.     
  728. g_blockspec2minus
  729.     move.l currentblockadr(a5),a0
  730.     move.b block_special+2(a0),d0
  731.     beq .error
  732.     sub.b #1,d0
  733.     move.b d0,block_special+2(a0)
  734.     bsr updateeditscreen
  735. .error    rts
  736.  
  737. g_blockspec3plus
  738.     move.l currentblockadr(a5),a0
  739.     move.b block_special+3(a0),d0
  740.     add.b #1,d0
  741.     beq .error
  742.     move.b d0,block_special+3(a0)
  743.     bsr updateeditscreen
  744. .error    rts
  745.  
  746. g_blockspec3minus
  747.     move.l currentblockadr(a5),a0
  748.     move.b block_special+3(a0),d0
  749.     beq .error
  750.     sub.b #1,d0
  751.     move.b d0,block_special+3(a0)
  752.     bsr updateeditscreen
  753. .error    rts
  754.  
  755. g_editname:
  756.     bsr scrback
  757.     lea txt_editaname,a0
  758.     bsr plotmess
  759.     lea tempspace(a5),a0
  760.     move.l a0,a2
  761.     move.l #98,d3
  762.     bsr getmessage
  763.     move.b #10,tempspace+14(a5)
  764.     cmp.b #10,tempspace(a5)
  765.     beq .noname
  766.     lea tempspace(a5),a0
  767.     moveq.l #0,d0
  768. .loop    cmp.b #10,(a0)+
  769.  
  770.     beq .got
  771.     addq.l #1,d0    
  772.     bra .loop
  773. .got                * D0 = Length of new name.
  774.     move.b #-1,-1(a0)
  775.     move.l d0,d5
  776.     lea map_text,a0
  777.     bsr opennewfile        ;open text file
  778.     bne .errorbig
  779.  
  780.     lea saving,a0
  781.     bsr plotmess
  782.  
  783.     move.w choose_num(a5),d0
  784.     move.w choose_type(a5),d1
  785.     move.l textbase(a5),a0
  786.     move.w d0,d2
  787. .xloop    move.b (a0)+,d0
  788.     cmp.b d0,d1
  789.     beq .xfound
  790. .xzip    move.b (a0)+,d0
  791.     cmp.b #" ",d0
  792.     bhs .xzip
  793.     sub.l #1,a0
  794.     bra .xloop
  795. .xfound    
  796.     tst.w d2
  797.     beq .xgot
  798.     sub.w #1,d2
  799.     bra .xzip
  800. .xgot                ;a0 = start of new text
  801.     move.l a0,d6
  802.     move.l a0,d0
  803.     move.l textbase(a5),a0
  804.     sub.l a0,d0
  805.  
  806.     bsr savetofile        ;save text to start of edit bit
  807.     bne .errorbig
  808.     move.l d5,d0
  809.     lea tempspace(a5),a0
  810.     bsr savetofile
  811.     bne .errorbig
  812.     
  813.     move.l d6,a0
  814.     
  815. .xfo    move.b (a0)+,d0
  816.     cmp.b #$ff,d0
  817.     beq .xddd
  818.     cmp.b #" ",d0
  819.     blo .xddd
  820.     sub.l #1,d5
  821.     bra .xfo
  822.  
  823. .xddd    sub.l #1,a0
  824.     
  825.     move.l a0,a1
  826.     moveq.l #0,d0
  827. .xgetlast
  828.     add.l #1,d0
  829.     cmp.b #$ff,(a1)+
  830.     bne .xgetlast
  831.     bsr savetofile
  832.     bne .errorbig
  833.     bsr closefile
  834.     add.l textsize(a5),d5
  835.     
  836.     bsr releasetext
  837.     move.l d5,textsize(a5)
  838. .retry    bsr allocatetext
  839.     bne .baderror
  840. .retry2    
  841.     lea map_text,a0
  842.     bsr openoldfile
  843.     bne .ebaderror
  844.  
  845.     lea loading,a0
  846.     bsr plotmess
  847.  
  848.     move.l textbase(a5),a0
  849.     move.l textsize(a5),d0
  850.     bsr loadtofile
  851.     bne .ebaderror
  852.     bsr closefile
  853.  
  854.     move.l textsize(a5),theprefs(a5)
  855. .retry3
  856.     lea map_prefs,a0
  857.     bsr opennewfile
  858.     bne .dbaderror
  859.  
  860.     lea saving,a0
  861.     bsr plotmess
  862.  
  863.     lea theprefs(a5),a0
  864.     move.l #92,d0
  865.     bsr savetofile
  866.     bne .dbaderror
  867.     bsr closefile
  868.  
  869.     move.l currentblockadr(a5),a0
  870.     move.w choose_num(a5),d0
  871.     move.w d0,block_name(a0)
  872.  
  873.  
  874.     bsr updatechoosescreen
  875. .noname    
  876.     bsr scrfront
  877.     rts
  878. .error    lea nomem,a0
  879.     bsr plotmess
  880.     bsr readkey
  881.     bra .noname
  882. .errorbig
  883.     lea serror,a0
  884.     bsr plotmess
  885.     bsr readkey
  886.     bra .noname
  887. .baderror
  888.     lea baderror,a0
  889.     bsr plotmess
  890.     bsr askyn
  891.     beq .retry
  892. .plis
  893.     move.l bye(a5),a7
  894.     rts
  895. .ebaderror
  896.     lea noloade,a0
  897.     bsr plotmess
  898.     bsr askyn
  899.     beq .retry2
  900.     bra .plis
  901. .dbaderror
  902.     lea nosaved,a0
  903.     bsr plotmess
  904.     bsr askyn
  905.     beq .retry3
  906.     bra .plis
  907.  
  908. g_insertname:
  909.     bsr scrback
  910.     lea txt_insertaname,a0
  911.     bsr plotmess
  912.     lea tempspace(a5),a0
  913.     move.l a0,a2
  914.     move.l #98,d3
  915.     bsr getmessage
  916.     move.b #10,tempspace+14(a5)
  917.     cmp.b #10,tempspace(a5)
  918.     beq .noname
  919.     lea tempspace(a5),a0
  920.     moveq.l #1,d0
  921. .loop    cmp.b #10,(a0)+
  922.  
  923.     beq .got
  924.     addq.l #1,d0    
  925.     bra .loop
  926. .got                * D0 = Length of new name.
  927.     move.b #-1,-1(a0)
  928.     move.l d0,d5
  929.     lea map_text,a0
  930.     bsr opennewfile        ;open text file
  931.     bne .errorbig
  932.  
  933.     lea saving,a0
  934.     bsr plotmess
  935.  
  936.     move.l textbase(a5),a0
  937.     move.l textsize(a5),d0
  938.     sub.l #1,d0
  939.     bsr savetofile        ;save text (except -1)
  940.     bne .errorbig
  941.     
  942.     lea choose_type+1(a5),a0
  943.     moveq.l #1,d0
  944.     bsr savetofile
  945.     bne .errorbig
  946.     
  947.     move.l d5,d0
  948.     lea tempspace(a5),a0
  949.     bsr savetofile
  950.     bne .errorbig
  951.     bsr closefile
  952.     add.l textsize(a5),d5
  953.     
  954.     bsr releasetext
  955.     move.l d5,textsize(a5)
  956. .retry    bsr allocatetext
  957.     bne .baderror
  958. .retry2    
  959.     lea map_text,a0
  960.     bsr openoldfile
  961.     bne .ebaderror
  962.  
  963.     lea loading,a0
  964.     bsr plotmess
  965.  
  966.     move.l textbase(a5),a0
  967.     move.l textsize(a5),d0
  968.     bsr loadtofile
  969.     bne .ebaderror
  970.     bsr closefile
  971.  
  972.     move.w choose_type(a5),d0
  973.     bsr getlastname
  974.     move.w d0,choose_num(a5)
  975.  
  976.     move.l textsize(a5),theprefs(a5)
  977. .retry3
  978.     lea map_prefs,a0
  979.     bsr opennewfile
  980.     bne .dbaderror
  981.  
  982.     lea saving,a0
  983.     bsr plotmess
  984.  
  985.     lea theprefs(a5),a0
  986.     move.l #92,d0
  987.     bsr savetofile
  988.     bne .dbaderror
  989.     bsr closefile
  990.  
  991.     move.l currentblockadr(a5),a0
  992.     move.w choose_num(a5),d0
  993.     move.w d0,block_name(a0)
  994.  
  995.  
  996.     bsr updatechoosescreen
  997. .noname    
  998.     bsr scrfront
  999.     rts
  1000. .error    lea nomem,a0
  1001.     bsr plotmess
  1002.     bsr readkey
  1003.     bra .noname
  1004. .errorbig
  1005.     lea serror,a0
  1006.     bsr plotmess
  1007.     bsr readkey
  1008.     bra .noname
  1009. .baderror
  1010.     lea baderror,a0
  1011.     bsr plotmess
  1012.     bsr askyn
  1013.     beq .retry
  1014. .plis
  1015.     move.l bye(a5),a7
  1016.     rts
  1017. .ebaderror
  1018.     lea noloade,a0
  1019.     bsr plotmess
  1020.     bsr askyn
  1021.     beq .retry2
  1022.     bra .plis
  1023. .dbaderror
  1024.     lea nosaved,a0
  1025.     bsr plotmess
  1026.     bsr askyn
  1027.     beq .retry3
  1028.     bra .plis
  1029.  
  1030. getlastname:
  1031.     move.b d0,d1
  1032.     move.l textbase(a5),a1
  1033.  
  1034.     moveq #-1,d0
  1035. .loop
  1036.     cmp.b (a1),d1
  1037.     bne .neq
  1038.     addq.l #1,d0
  1039. .neq
  1040.     cmp.b #-1,(a1)+
  1041.     beq .gotit
  1042. .blip    move.b (a1)+,d3
  1043.     cmp.b #-1,d3
  1044.     beq .gotit
  1045.     cmp.b #" ",d3
  1046.     bhs .blip
  1047.     sub.l #1,a1
  1048.     bra .loop    
  1049.     
  1050. .gotit    rts
  1051.     
  1052. noloade: dc.b "Cannot load text. Y = Try again. N = exit program",10,0
  1053. nosaved: dc.b "Cannot save prefs. Y = Try again. N = exit program",10,0
  1054.  
  1055. baderror: dc.b "Serious Error. Cannot allocate memory for text. Do you want ",10
  1056.     dc.b "to try again (Y) or exit this program (N)?",10,0
  1057. serror: dc.b "ERROR - Cannot Save! Go to the main menu and try again!!!",10
  1058.     dc.b "press return please [Return]",0
  1059. txt_editaname: dc.b "Edit name: Please type in the new name.",10
  1060.     dc.b "Just press return to cancel this option.",10
  1061.     dc.b "Maximum length is 13 characters",10,10,0
  1062. txt_insertaname: dc.b "Please type in the new name to be inserted.",10
  1063.     dc.b "Just press return to cancel this option.",10
  1064.     dc.b "Maximum length is 13 characters",10,10,0
  1065.     even
  1066.  
  1067. gochoose:
  1068.  
  1069.     bsr updatewindow
  1070.     bne nowindow
  1071.  
  1072.     
  1073.  
  1074.     move.l intbase(a5),a6
  1075.     lea ch_txt1,a1
  1076.     move.l #0,d0
  1077.     move.l #0,d1
  1078.     move.l rastport(a5),a0
  1079.     jsr -216(a6)
  1080.     move.l choose_name(a5),a1
  1081.     move.l #140,d0
  1082.     move.l #0,d1
  1083.     move.l rastport(a5),a0
  1084.     jsr -216(a6)
  1085.     move.l intbase(a5),a6
  1086.     lea ch_txt2,a1
  1087.     move.l #0,d0
  1088.     move.l #16,d1
  1089.     move.l rastport(a5),a0
  1090.     jsr -216(a6)
  1091.     move.l intbase(a5),a6
  1092.     lea ch_txt3,a1
  1093.     move.l #0,d0
  1094.     move.l #32,d1
  1095.     move.l rastport(a5),a0
  1096.     jsr -216(a6)
  1097.  
  1098.     bsr updatechoosescreen
  1099.     bsr adit
  1100.     
  1101.     rts
  1102. updatechoosescreen:
  1103.     move.l #130,d0
  1104.     move.l #18,d1
  1105.     bsr writetextnum
  1106.  
  1107.     move.l #80,d0
  1108.     move.l #32,d1
  1109.     bsr writechoosename
  1110.     rts
  1111.  
  1112.  
  1113. writechoosename:
  1114.  
  1115.     move.l d0,d6
  1116.     move.l d1,d7
  1117. ;    move.l currentblockadr(a5),a0
  1118. ;    move.w block_name(a0),d0
  1119.     move.w choose_num(a5),d0
  1120.     move.w choose_type(a5),d1
  1121.     bsr getnameadr
  1122.     move.l a0,cbnstra
  1123.  
  1124.     move.l intbase(a5),a6
  1125.     lea cbnstr,a1
  1126.     move.l d6,d0
  1127.     move.l d7,d1
  1128.     move.l rastport(a5),a0
  1129.     jsr -216(a6)
  1130.  
  1131.     rts
  1132.  
  1133.  
  1134. writetextnum:
  1135.  
  1136.     move.l d0,d6
  1137.     move.l d1,d7
  1138.     moveq #0,d0
  1139.     move.w choose_num(a5),d0
  1140.     lea tempspace(a5),a0
  1141.     bsr worddecconv
  1142.     move.b #0,(a0)
  1143.     lea tempspace(a5),a0
  1144.     move.l a0,cbnstra
  1145.  
  1146.     move.l intbase(a5),a6
  1147.     lea cbnstr,a1
  1148.     move.l d6,d0
  1149.     move.l d7,d1
  1150.     move.l rastport(a5),a0
  1151.     jsr -216(a6)
  1152.  
  1153.     rts
  1154.  
  1155.  
  1156. ch_txt1: dc.b 1,0,0,0
  1157.     dc.w 0,0,0,0
  1158.     dc.l ch_txt1a,0
  1159. ch_txt1a dc.b "Text screen for:",0
  1160.     even
  1161. ch_txt2: dc.b 11,0,0,0
  1162.     dc.w 0,0,0,0
  1163.     dc.l ch_txt2a,0
  1164. ch_txt2a dc.b "Text number:",0
  1165.     even
  1166. ch_txt3: dc.b 14,0,0,0
  1167.     dc.w 0,0,0,0
  1168.     dc.l ch_txt3a,0
  1169. ch_txt3a dc.b "Its name:",0
  1170.     even
  1171.  
  1172.  
  1173. ch_blockname: dc.b 14,0,0,0
  1174.     dc.w 0,0,0,0
  1175.     dc.l ch_blocknamea,0
  1176. ch_blocknamea dc.b "Block Name (id=0)",0
  1177.     even
  1178.  
  1179.  
  1180.  
  1181. g_blockchooseplus:
  1182.     move.w choose_num(a5),d0
  1183.     add.w #1,d0
  1184.     beq .error
  1185.     move.w choose_type(a5),d1
  1186.     bsr getnameadr
  1187.     bne .error
  1188.     add.w #1,choose_num(a5)
  1189.     move.l currentblockadr(a5),a0
  1190.     move.w choose_num(a5),d0
  1191.     move.w d0,block_name(a0)
  1192.  
  1193.  
  1194.     bsr updatechoosescreen
  1195. .error    rts
  1196.  
  1197.  
  1198.  
  1199. g_blockchooseminus:
  1200.     move.w choose_num(a5),d0
  1201.     beq .error
  1202.     sub.w #1,d0
  1203.     move.w choose_type(a5),d1
  1204.     bsr getnameadr
  1205.     bne .error
  1206.     sub.w #1,choose_num(a5)
  1207.     move.l currentblockadr(a5),a0
  1208.     move.w choose_num(a5),d0
  1209.     move.w d0,block_name(a0)
  1210.  
  1211.  
  1212.     bsr updatechoosescreen
  1213. .error    rts
  1214.  
  1215.  
  1216.  
  1217. g_insertblock:
  1218.     cmp.w #65534,numberofblocks(a5)
  1219.     beq .error
  1220.     move.l exec(a5),a6
  1221.     move.l #$10000,d1
  1222.     moveq.l #0,d0
  1223.     move.w blocksize(a5),d0
  1224.     jsr -198(a6)
  1225.     tst.l d0
  1226.     beq .error
  1227.     move.l d0,a4
  1228.     move.l currentblockadr(a5),a0
  1229. .getlast move.l (a0),d0
  1230.     beq .gotlast
  1231.     move.l d0,a0
  1232.     bra .getlast
  1233. .gotlast
  1234.     move.w numberofblocks(a5),d0
  1235.     move.w d0,block_number(a4)
  1236.     add.w #1,numberofblocks(a5)
  1237.  
  1238.     move.l a0,block_prev(a4)
  1239.     move.l a4,(a0)
  1240.  
  1241.     move.w d0,currentblock(a5)
  1242.     move.l a4,currentblockadr(a5)
  1243.  
  1244.     bsr updateeditscreen
  1245.  
  1246.     rts
  1247.  
  1248. .error    bsr warning
  1249.     rts
  1250.  
  1251. wind2setup:
  1252.     move.l intbase(a5),a6
  1253.     lea prmbs,a1
  1254.     move.l #0,d0
  1255.     move.l #0,d1
  1256.     move.l rastport(a5),a0
  1257.     jsr -216(a6)
  1258.  
  1259.  
  1260.     lea bnst,a1
  1261.     move.l #0,d0
  1262.     move.l #10,d1
  1263.     move.l rastport(a5),a0
  1264.     jsr -216(a6)
  1265.  
  1266.     lea bnnam,a1
  1267.     move.l #0,d0
  1268.     move.l #32,d1
  1269.     move.l rastport(a5),a0
  1270.     jsr -216(a6)
  1271.  
  1272.     lea bnspec1,a1
  1273.     move.l #0,d0
  1274.     move.l #52,d1
  1275.     move.l rastport(a5),a0
  1276.     jsr -216(a6)
  1277.  
  1278.     lea bnspec2,a1
  1279.     move.l #0,d0
  1280.     move.l #72,d1
  1281.     move.l rastport(a5),a0
  1282.     jsr -216(a6)
  1283.  
  1284.     lea bnspec3,a1
  1285.     move.l #0,d0
  1286.     move.l #92,d1
  1287.     move.l rastport(a5),a0
  1288.     jsr -216(a6)
  1289.  
  1290.     bsr updateeditscreen
  1291.     rts
  1292.  
  1293.  
  1294. choosegad1:
  1295.     dc.l choosegad2
  1296.     dc.w 10,200,90,30,5,$1,1
  1297.     dc.l image_90_30
  1298.     dc.l 0,txtchoose1,0,0,0,0
  1299. txtchoose1: dc.b 11,0,0,0
  1300.     dc.w 14,12,0,0
  1301.     dc.l txt_bye,0
  1302.     dc.l g_bye
  1303. txt_bye: dc.b "Chosen",0
  1304.     even
  1305.  
  1306. choosegad2:
  1307.     dc.l choosegad3
  1308.     dc.w 110,14,16,16,5,$1,1
  1309.     dc.l image_16_16
  1310.     dc.l 0,txtchoose2,0,0,0,0
  1311. txtchoose2: dc.b 11,0,0,0
  1312.     dc.w 4,4,0,0
  1313.     dc.l txt_plus,0
  1314.     dc.l g_blockchooseplus
  1315. choosegad3:
  1316.     dc.l choosegad4
  1317.     dc.w 176,14,16,16,5,$1,1
  1318.     dc.l image_16_16
  1319.     dc.l 0,txtchoose3,0,0,0,0
  1320. txtchoose3: dc.b 11,0,0,0
  1321.     dc.w 4,4,0,0
  1322.     dc.l txt_minus,0
  1323.     dc.l g_blockchooseminus
  1324. choosegad4:
  1325.     dc.l choosegad5
  1326.     dc.w 50,80,199,27,5,$1,1
  1327.     dc.l image_199_27
  1328.     dc.l 0,txtchoose4,0,0,0,0
  1329. txtchoose4: dc.b 11,0,0,0
  1330.     dc.w 34,8,0,0
  1331.     dc.l txt_insertname,0
  1332.     dc.l g_insertname
  1333. txt_insertname: dc.b "Insert a Name",0
  1334.     even
  1335. choosegad5:
  1336.     dc.l 0
  1337.     dc.w 50,140,199,27,5,$1,1
  1338.     dc.l image_199_27
  1339.     dc.l 0,txtchoose5,0,0,0,0
  1340. txtchoose5: dc.b 11,0,0,0
  1341.     dc.w 34,8,0,0
  1342.     dc.l txt_changename,0
  1343.     dc.l g_editname
  1344. txt_changename: dc.b "Edit this Name",0
  1345.     even
  1346.  
  1347.  
  1348.  
  1349. palgad1:
  1350.     dc.l palgad2
  1351.     dc.w 10,200,90,30,5,$1,1
  1352.     dc.l image_90_30
  1353.     dc.l 0,txtpg1,0,0,0,0
  1354. txtpg1:    dc.b 11,0,0,0
  1355.     dc.w 8,12,0,0
  1356.     dc.l txt_main,0
  1357.     dc.l g_back
  1358. txt_main: dc.b "Main menu",0
  1359.     even
  1360. maingad3:
  1361.     dc.l maingad4
  1362.     dc.w 54,204,199,27,5,$1,1
  1363.     dc.l image_199_27
  1364.     dc.l 0,txtmg3,0,0,0,0
  1365. txtmg3:    dc.b 11,0,0,0
  1366.     dc.w 12,10,0,0
  1367.     dc.l txt_editpal,0,g_editpal
  1368. txt_editpal: dc.b "Change level pallete.",0
  1369.     even
  1370. maingad4:
  1371.     dc.l 0
  1372.     dc.w 54,150,199,27,5,$1,1
  1373.     dc.l image_199_27
  1374.     dc.l 0,txtmg4,0,0,0,0
  1375. txtmg4:    dc.b 11,0,0,0
  1376.     dc.w 12,10,0,0
  1377.     dc.l txt_editblock,0,g_editblock
  1378. txt_editblock: dc.b "Block control screen",0
  1379.     even
  1380. editgad1:
  1381.     dc.l editgad2
  1382.     dc.w 4,220,90,30,5,$1,1
  1383.     dc.l image_90_30
  1384.     dc.l 0,txted1,0,0,0,0
  1385. txted1:    dc.b 11,0,0,0
  1386.     dc.w 8,12,0,0
  1387.     dc.l txt_main,0
  1388.     dc.l g_back
  1389.  
  1390. editgad2:
  1391.     dc.l editgad3
  1392.     dc.w 124,7,16,16,5,$1,1
  1393.     dc.l image_16_16
  1394.     dc.l 0,txted2,0,0,0,0
  1395. txted2:    dc.b 11,0,0,0
  1396.     dc.w 4,4,0,0
  1397.     dc.l txt_plus,0
  1398.     dc.l g_blockplus
  1399. txt_plus dc.b "+",0
  1400.     even
  1401. editgad3:
  1402.     dc.l editgad4
  1403.     dc.w 58,7,16,16,5,$1,1
  1404.     dc.l image_16_16
  1405.     dc.l 0,txted3,0,0,0,0
  1406. txted3:    dc.b 11,0,0,0
  1407.     dc.w 4,4,0,0
  1408.     dc.l txt_minus,0
  1409.     dc.l g_blockminus
  1410. txt_minus dc.b "-",0
  1411.     even
  1412. editgad4:
  1413.  
  1414.     dc.l editgad5
  1415.     dc.w 220,30,16,16,5,$1,1
  1416.     dc.l image_16_16
  1417.     dc.l 0,txted4,0,0,0,0
  1418. txted4:    dc.b 11,0,0,0
  1419.     dc.w 4,4,0,0
  1420.     dc.l txt_plus,0
  1421.     dc.l g_blocknameplus
  1422. editgad5:
  1423.     dc.l editgad6
  1424.     dc.w 156,30,16,16,5,$1,1
  1425.     dc.l image_16_16
  1426.     dc.l 0,txted5,0,0,0,0
  1427. txted5:    dc.b 11,0,0,0
  1428.     dc.w 4,4,0,0
  1429.     dc.l txt_minus,0
  1430.     dc.l g_blocknameminus
  1431. editgad6:
  1432.     dc.l editgad7
  1433.     dc.w 240,30,74,18,5,$1,1
  1434.     dc.l image_74_18
  1435.     dc.l 0,txted6,0,0,0,0
  1436. txted6:    dc.b 11,0,0,0
  1437.     dc.w 10,4,0,0
  1438.     dc.l txt_nchoose,0
  1439.     dc.l g_namechoose
  1440. txt_nchoose: dc.b "Change",0
  1441.     even
  1442.  
  1443. editgad7:
  1444.     dc.l editgad8
  1445.     dc.w 150,6,74,18,5,$1,1
  1446.     dc.l image_74_18
  1447.     dc.l 0,txted7,0,0,0,0
  1448. txted7:    dc.b 11,0,0,0
  1449.     dc.w 10,4,0,0
  1450.     dc.l txt_bchoose,0
  1451.     dc.l g_blockchoose
  1452. txt_bchoose: dc.b "Choose",0
  1453.     even
  1454. editgad8:
  1455.     dc.l editgad9
  1456.     dc.w 220,50,16,16,5,$1,1
  1457.     dc.l image_16_16
  1458.     dc.l 0,txted8,0,0,0,0
  1459. txted8:    dc.b 11,0,0,0
  1460.     dc.w 4,4,0,0
  1461.     dc.l txt_plus,0
  1462.     dc.l g_blockspec1plus
  1463. editgad9:
  1464.     dc.l editgad10
  1465.     dc.w 156,50,16,16,5,$1,1
  1466.     dc.l image_16_16
  1467.     dc.l 0,txted9,0,0,0,0
  1468. txted9: dc.b 11,0,0,0
  1469.     dc.w 4,4,0,0
  1470.     dc.l txt_minus,0
  1471.     dc.l g_blockspec1minus
  1472. editgad10:
  1473.     dc.l editgad11
  1474.     dc.w 240,50,74,18,5,$1,1
  1475.     dc.l image_74_18
  1476.     dc.l 0,txted10,0,0,0,0
  1477. txted10: dc.b 11,0,0,0
  1478.     dc.w 10,4,0,0
  1479.     dc.l txt_nchoose,0
  1480.     dc.l g_spec1choose
  1481. editgad11:
  1482.     dc.l editgad12
  1483.     dc.w 90,70,16,16,5,$1,1
  1484.     dc.l image_16_16
  1485.     dc.l 0,txted11,0,0,0,0
  1486. txted11: dc.b 11,0,0,0
  1487.     dc.w 4,4,0,0
  1488.     dc.l txt_plus,0
  1489.     dc.l g_blockspec2plus
  1490. editgad12:
  1491.     dc.l editgad14
  1492.     dc.w 48,70,16,16,5,$1,1
  1493.     dc.l image_16_16
  1494.     dc.l 0,txted12,0,0,0,0
  1495. txted12: dc.b 11,0,0,0
  1496.     dc.w 4,4,0,0
  1497.     dc.l txt_minus,0
  1498.     dc.l g_blockspec2minus
  1499.  
  1500. editgad14:
  1501.     dc.l editgad15
  1502.     dc.w 90,90,16,16,5,$1,1
  1503.     dc.l image_16_16
  1504.     dc.l 0,txted14,0,0,0,0
  1505. txted14: dc.b 11,0,0,0
  1506.     dc.w 4,4,0,0
  1507.     dc.l txt_plus,0
  1508.     dc.l g_blockspec3plus
  1509. editgad15:
  1510.     dc.l editgad16
  1511.     dc.w 48,90,16,16,5,$1,1
  1512.     dc.l image_16_16
  1513.     dc.l 0,txted15,0,0,0,0
  1514. txted15: dc.b 11,0,0,0
  1515.     dc.w 4,4,0,0
  1516.     dc.l txt_minus,0
  1517.     dc.l g_blockspec3minus
  1518. editgad16:
  1519.     dc.l editgad17
  1520.     dc.w 120,74,90,30,5,$1,1
  1521.     dc.l image_90_30
  1522.     dc.l 0,txted16,0,0,0,0
  1523. txted16: dc.b 11,0,0,0
  1524.     dc.w 10,10,0,0
  1525.     dc.l txt_loadiffblock,0
  1526.     dc.l g_loadiffblock
  1527. txt_loadiffblock: dc.b "Load IFF",0
  1528.     even
  1529.  
  1530. updateeditscreen:
  1531.  
  1532.     move.l #78,d0
  1533.     move.l #11,d1
  1534.     bsr writecbn
  1535.  
  1536.     move.l #46,d0
  1537.     move.l #32,d1
  1538.     bsr writecbnname
  1539.  
  1540.     move.l #176,d0
  1541.     move.l #34,d1
  1542.     bsr writecbnnamen
  1543.  
  1544.     move.l #176,d0
  1545.     move.l #54,d1
  1546.     bsr writecbnspec1
  1547.  
  1548.     move.l #65,d0
  1549.     move.l #74,d1
  1550.     bsr writecbnspec2
  1551.  
  1552.     move.l #65,d0
  1553.     move.l #94,d1
  1554.     bsr writecbnspec3
  1555.  
  1556.     move.l #46,d0
  1557.     move.l #54,d1
  1558.     bsr writecbnspec
  1559.  
  1560.  
  1561.     rts
  1562. writecbnname:
  1563.  
  1564.     move.l d0,d6
  1565.     move.l d1,d7
  1566.     move.l currentblockadr(a5),a0
  1567.     move.w block_name(a0),d0
  1568.     move.w #0,d1
  1569.     bsr getnameadr
  1570.     move.l a0,cbnstra
  1571.  
  1572.     move.l intbase(a5),a6
  1573.     lea cbnstr,a1
  1574.     move.l d6,d0
  1575.     move.l d7,d1
  1576.     move.l rastport(a5),a0
  1577.     jsr -216(a6)
  1578.  
  1579.     rts
  1580.  
  1581. writecbnspec:
  1582.  
  1583.     move.l d0,d6
  1584.     move.l d1,d7
  1585.     move.l currentblockadr(a5),a0
  1586.     move.w block_special(a0),d0
  1587.     move.w #1,d1
  1588.     bsr getnameadr
  1589.     move.l a0,cbnstra
  1590.  
  1591.     move.l intbase(a5),a6
  1592.     lea cbnstr,a1
  1593.     move.l d6,d0
  1594.     move.l d7,d1
  1595.     move.l rastport(a5),a0
  1596.     jsr -216(a6)
  1597.  
  1598.     rts
  1599.  
  1600. cbnstr: dc.b 15,0,1,0
  1601.     dc.w 0,0,0,0
  1602. cbnstra    dc.l 0,0
  1603.  
  1604. getnameadr:
  1605.     move.l textbase(a5),a0
  1606.     move.w d0,d2
  1607. .loop    move.b (a0)+,d0
  1608.     cmp.b #-1,d0
  1609.     beq .error
  1610.     cmp.b d0,d1
  1611.     beq .found
  1612. .zip    move.b (a0)+,d0
  1613.     cmp.b #$ff,d0
  1614.     beq .error
  1615.     cmp.b #" ",d0
  1616.     bhs .zip
  1617.     sub.l #1,a0
  1618.     bra .loop
  1619. .found    
  1620.     tst.w d2
  1621.     beq .got
  1622.     sub.w #1,d2
  1623.     bra .zip
  1624. .got
  1625.     lea tempspace(a5),a1
  1626.     move.l a1,a2
  1627. .copy    move.b (a0)+,d0
  1628.     cmp.b #" ",d0
  1629.     blo .done
  1630.     cmp.b #-1,d0
  1631.     beq .done
  1632.     move.b d0,(a1)+
  1633.     bra .copy
  1634. .done   move.b #0,(a1)
  1635.     move.l a2,a0
  1636.     
  1637.     move.w #13,d0
  1638. .ploop    tst.b (a2)+
  1639.     beq .fda
  1640.     dbra d0,.ploop
  1641.     bra .frrt
  1642. .fda    sub.l #1,a2
  1643. .zzzz    move.b #" ",(a2)+
  1644.     dbra d0,.zzzz
  1645.     move.b #0,(a2)
  1646.  
  1647. .frrt    
  1648.     
  1649.     true
  1650. .error    
  1651.     lea aer,a0
  1652.     false
  1653. warning: moveq #-1,d0
  1654. .loop    move.w $dff006,$dff180
  1655.     dbra d0,.loop
  1656.     rts
  1657. aer:    dc.b "ERROR - NO NAME",0
  1658.     even
  1659.     
  1660.  
  1661. writecbn:
  1662.  
  1663.     move.l d0,d6
  1664.     move.l d1,d7
  1665.     moveq #0,d0
  1666.     move.w currentblock(a5),d0
  1667.     lea tempspace(a5),a0
  1668.     bsr worddecconv
  1669.     move.b #0,(a0)
  1670.     lea tempspace(a5),a0
  1671.     move.l a0,cbnstra
  1672.  
  1673.     move.l intbase(a5),a6
  1674.     lea cbnstr,a1
  1675.     move.l d6,d0
  1676.     move.l d7,d1
  1677.     move.l rastport(a5),a0
  1678.     jsr -216(a6)
  1679.  
  1680.     rts
  1681.  
  1682. writecbnnamen
  1683.  
  1684.     move.l d0,d6
  1685.     move.l d1,d7
  1686.     moveq #0,d0
  1687.     move.l currentblockadr(a5),a0
  1688.     move.w block_name(a0),d0
  1689.     lea tempspace(a5),a0
  1690.     bsr worddecconv
  1691.     move.b #0,(a0)
  1692.     lea tempspace(a5),a0
  1693.     move.l a0,cbnstra
  1694.     move.l intbase(a5),a6
  1695.     lea cbnstr,a1
  1696.     move.l d6,d0
  1697.     move.l d7,d1
  1698.     move.l rastport(a5),a0
  1699.     jsr -216(a6)
  1700.  
  1701.     rts
  1702.  
  1703. writecbnspec1
  1704.  
  1705.     move.l d0,d6
  1706.     move.l d1,d7
  1707.     moveq #0,d0
  1708.     move.l currentblockadr(a5),a0
  1709.     move.w block_special(a0),d0
  1710.     lea tempspace(a5),a0
  1711.     bsr worddecconv
  1712.     move.b #0,(a0)
  1713.     lea tempspace(a5),a0
  1714.     move.l a0,cbnstra
  1715.     move.l intbase(a5),a6
  1716.     lea cbnstr,a1
  1717.     move.l d6,d0
  1718.     move.l d7,d1
  1719.     move.l rastport(a5),a0
  1720.     jsr -216(a6)
  1721.  
  1722.     rts
  1723.  
  1724.  
  1725. writecbnspec2
  1726.  
  1727.     move.l d0,d6
  1728.     move.l d1,d7
  1729.     moveq #0,d0
  1730.     move.l currentblockadr(a5),a0
  1731.     move.b block_special+2(a0),d0
  1732.     lea tempspace(a5),a0
  1733.     bsr worddecconv
  1734.     move.b #0,(a0)
  1735.     lea tempspace+2(a5),a0
  1736.     move.l a0,cbnstra
  1737.     move.l intbase(a5),a6
  1738.     lea cbnstr,a1
  1739.     move.l d6,d0
  1740.     move.l d7,d1
  1741.     move.l rastport(a5),a0
  1742.     jsr -216(a6)
  1743.  
  1744.     rts
  1745.  
  1746.  
  1747. writecbnspec3
  1748.  
  1749.     move.l d0,d6
  1750.     move.l d1,d7
  1751.     moveq #0,d0
  1752.     move.l currentblockadr(a5),a0
  1753.     move.b block_special+3(a0),d0
  1754.     lea tempspace(a5),a0
  1755.     bsr worddecconv
  1756.     move.b #0,(a0)
  1757.     lea tempspace+2(a5),a0
  1758.     move.l a0,cbnstra
  1759.     move.l intbase(a5),a6
  1760.     lea cbnstr,a1
  1761.     move.l d6,d0
  1762.     move.l d7,d1
  1763.     move.l rastport(a5),a0
  1764.     jsr -216(a6)
  1765.  
  1766.     rts
  1767.  
  1768.  
  1769. worddecconv:
  1770. decconv_type set 5
  1771. decconv_type2 set 10000
  1772.     decconv
  1773.     rts
  1774.  
  1775. prmbs:    dc.b 12,0,0,0
  1776.     dc.w 0,0,0,0
  1777.     dc.l prmb,0
  1778. prmb    dc.b "(RMB=EDIT)",0
  1779.     even
  1780. bnst:    dc.b 14,0,0,0
  1781.     dc.w 0,0,0,0
  1782.     dc.l bns,0
  1783. bns    dc.b "Number:",0
  1784.     even
  1785. bnnam:    dc.b 14,0,0,0
  1786.     dc.w 0,0,0,0
  1787.     dc.l bnnams,0
  1788. bnnams    dc.b "Name:",0
  1789.     even
  1790. bnspec1: dc.b 14,0,0,0
  1791.     dc.w 0,0,0,0
  1792.     dc.l bnspec1s,0
  1793. bnspec1s dc.b "Any1:",0
  1794.     even
  1795. bnspec2: dc.b 14,0,0,0
  1796.     dc.w 0,0,0,0
  1797.     dc.l bnspec2s,0
  1798. bnspec2s dc.b "Any2:",0
  1799.     even
  1800. bnspec3: dc.b 14,0,0,0
  1801.     dc.w 0,0,0,0
  1802.     dc.l bnspec3s,0
  1803. bnspec3s dc.b "Any3:",0
  1804.  
  1805.     even
  1806.  
  1807. g_blockplus:
  1808.     move.w numberofblocks(a5),d0
  1809.     move.l currentblockadr(a5),a0
  1810.     move.w block_number(a0),d2
  1811.     add.w #1,d2
  1812.     cmp.w d0,d2
  1813.     beq .equal
  1814.     move.w d2,currentblock(a5)
  1815.     move.l (a0),currentblockadr(a5)
  1816.     bsr updateeditscreen
  1817. .equal    rts
  1818.  
  1819.  
  1820.  
  1821. g_blockminus:
  1822.     tst.w currentblock(a5)
  1823.     beq .endoflist
  1824.     sub.w #1,currentblock(a5)
  1825.     move.l currentblockadr(a5),a0
  1826.     move.l block_prev(a0),currentblockadr(a5)
  1827.     bsr updateeditscreen
  1828. .endoflist rts
  1829.  
  1830. g_blocknameplus
  1831.     move.l currentblockadr(a5),a0
  1832.     move.w block_name(a0),d0
  1833.     add.w #1,d0
  1834.     beq .error
  1835.     move.w #0,d1
  1836.     bsr getnameadr
  1837.     bne .error
  1838.     move.l currentblockadr(a5),a0
  1839.     add.w #1,block_name(a0)
  1840.     bsr updateeditscreen
  1841. .error    rts
  1842.  
  1843. g_blocknameminus
  1844.     move.l currentblockadr(a5),a0
  1845.     move.w block_name(a0),d0
  1846.     beq .error
  1847.     sub.w #1,d0
  1848.     move.w #0,d1
  1849.     bsr getnameadr
  1850.     bne .error
  1851.     move.l currentblockadr(a5),a0
  1852.     sub.w #1,block_name(a0)
  1853.     bsr updateeditscreen
  1854. .error    rts
  1855.  
  1856. screen_defs:
  1857.     dc.w 0,0,320,256
  1858. scr_devs_bp dc.w 0
  1859.     dc.b 0,0
  1860.     dc.w 2,15,0,0
  1861.     dc.l scr_devs_name
  1862.     dc.l 0,0,0,0
  1863.  
  1864. pallete:
  1865.     dc.w $0000,$0F00,$00f0,$000f,$0ff0,$00ff,$09B9,$0f0f
  1866.     dc.w $0337,$07ff,$0f7f,$0ff7,$077f,$0f77,$07f7,$0777,$048f,$084f,$0f84,$0f48
  1867.     dc.w $08f4,$04f8,$026a,$062a,$0a62,$0a26,$06a2,$02a6,$022f,$0f22,$0f2f,$0f2f
  1868.     dcb.w 32,$00f
  1869.  
  1870. palgad2:
  1871.     dc.l 0
  1872.     dc.w 100,202,199,27,5,$1,1
  1873.     dc.l image_199_27
  1874.     dc.l 0,txtpg2,0,0,0,0
  1875. txtpg2:    dc.b 11,0,0,0
  1876.     dc.w 8,10,0,0
  1877.     dc.l txt_paliff,0
  1878.     dc.l g_palloadiff
  1879. txt_paliff: dc.b "Load IFF file Pallete",0
  1880.     even
  1881.  
  1882. maingad1:
  1883.     dc.l maingad2
  1884.     dc.w 10,50,52,31,5,$1,1
  1885.     dc.l image_52_31
  1886.     dc.l 0,txtmg1,0,0,0,0
  1887. txtmg1:    dc.b 11,0,0,0
  1888.     dc.w 8,12,0,0
  1889.     dc.l txt_save,0
  1890. jump:    dc.l g_save
  1891. txt_save: dc.b "Save",0
  1892.     even
  1893. maingad2:
  1894.     dc.l maingad3
  1895.     dc.w 240,50,52,31,5,$1,1
  1896.     dc.l image_52_31
  1897.     dc.l 0,txtmg2,0,0,0,0
  1898. txtmg2:    dc.b 11,0,0,0
  1899.     dc.w 8,12,0,0
  1900.     dc.l txt_exit,0,g_exit
  1901. txt_exit: dc.b "Exit",0
  1902.     even
  1903.  
  1904. image_90_30
  1905.     dc.w 0,0
  1906.     dc.w 90,30
  1907.     dc.w 4
  1908.     dc.l gad_90_30
  1909.     dc.b %1111,0
  1910.     dc.l 0
  1911.  
  1912. image_199_27
  1913.     dc.w 0,0
  1914.     dc.w 199,27
  1915.     dc.w 4
  1916.     dc.l gad_199_27    
  1917.     dc.b %1111,0
  1918.     dc.l 0
  1919.  
  1920. image_74_18
  1921.     dc.w 0,0
  1922.     dc.w 74,18
  1923.     dc.w 4
  1924.     dc.l gad_74_18    
  1925.     dc.b %1111,0
  1926.     dc.l 0
  1927.  
  1928. image_52_31
  1929.     dc.w 0,0
  1930.     dc.w 64,31
  1931.     dc.w 4
  1932.     dc.l gad_52_31    
  1933.     dc.b %1111,0
  1934.     dc.l 0
  1935.  
  1936. image_16_16
  1937.     dc.w 0,0
  1938.     dc.w 16,16
  1939.     dc.w 4
  1940.     dc.l gad_16_16
  1941.     dc.b %1111,0
  1942.     dc.l 0
  1943. image_up
  1944.     dc.w 0,0
  1945.     dc.w 16,16
  1946.     dc.w 4
  1947.     dc.l gad_up
  1948.     dc.b %1111,0
  1949.     dc.l 0
  1950.  
  1951. windowdef:
  1952.     dc.w 0,2,320,256-2
  1953.     dc.b 0,0
  1954. idcmp:    dc.l $0,$1000+$800+$10000
  1955. windgad: dc.l 0,0
  1956.     dc.l 0 ;windname
  1957. windowdef_screenhd dc.l 0
  1958.     dc.l 0
  1959.     dc.w 0,2,320,256-2
  1960.     dc.w 15
  1961.     dc.l 0,0
  1962.  
  1963. windname: dc.w 0
  1964.  
  1965. redtext: dc.b 11,0,0,0
  1966.     dc.w 4,5,0,0
  1967.     dc.l text_redtext,0
  1968. text_redtext: dc.b "Red",0
  1969.     even
  1970.  
  1971. greentext: dc.b 15,0,0,0
  1972.     dc.w 4,5,0,0
  1973.     dc.l text_greentext,0
  1974. text_greentext: dc.b "Green",0
  1975.     even
  1976.  
  1977. bluetext: dc.b 13,0,0,0
  1978.     dc.w 4,5,0,0
  1979.     dc.l text_bluetext,0
  1980. text_bluetext: dc.b "Blue",0
  1981.     even
  1982.  
  1983. hextext: dc.b 11,0,0,0
  1984.     dc.w 4,5,0,0
  1985.     dc.l text_hextext,0
  1986. text_hextext: dc.b "0 1 2 3 4 5 6 7 8 9 A B C D E F",0
  1987.     even
  1988.  
  1989. normalpallete:
  1990.  
  1991.     dc.w $0000,$08A8,$09B9,$0ABA,$0BCB,$0CDC
  1992.     dc.w $0EEE,$0FFF,$0797,$0565,$0232,$0F00,$0FF0,$000F,$0F0F,$00F0
  1993.     dc.w $068C,$0f00,$00f0,$000f
  1994.     dc.w $0ff0,$00ff,$0f0f,$0777,$0888,$0999,$0AAA,$0BBB,$0CCC,$0DDD,$0EEE,$0FFF
  1995.  
  1996.  
  1997. closewindow:
  1998.     move.l windowhd(a5),d0
  1999.     beq .dont
  2000.     move.l d0,a0
  2001.     move.l intbase(a5),a6
  2002.     jsr -72(a6)
  2003.     clr.l windowhd(a5)
  2004. .dont
  2005.     rts
  2006. g_save
  2007.     bsr savedata
  2008.     rts
  2009. g_exit
  2010.     move.w #1,exitbit(a5)
  2011.     rts
  2012. g_editpal
  2013.     move.w #1,windowtype(a5)
  2014.     bsr updatewindow
  2015.     bne nowindow
  2016.     move.l #0,d6            ;bp strt
  2017.     move.l #70,d7            ;stop
  2018.     bsr plotpal
  2019.  
  2020.     bsr plotrgb
  2021.  
  2022.  
  2023.     rts
  2024.  
  2025. plotpal:
  2026.     move.w bitplanes(a5),d0
  2027.     bsr power
  2028.     move.w d1,palcolours(a5)
  2029.     move.w #320,d0
  2030.     divu d1,d0
  2031.     move.w d0,palspace(a5) 
  2032.  
  2033.     move.l gfxbase(a5),a6
  2034.     move.l rastport(a5),a4
  2035.  
  2036.  
  2037.     moveq.l #0,d5
  2038.     moveq.l #0,d4
  2039. .loop
  2040.     move.l d5,d0
  2041.     move.l a4,a1
  2042.     jsr -342(a6)
  2043.  
  2044.     move.l a4,a1
  2045.  
  2046.     move.w d4,d0            ;x1    ;left distance
  2047.     move.l d6,d1            ;y1    ;bp start
  2048.     move.l d0,d2
  2049.     add.w palspace(a5),d2        ;x2
  2050.     move.l d7,d3            ;y2    ;bp stop
  2051.     jsr -306(a6)
  2052.     
  2053.     add.w #1,d5
  2054.     add.w palspace(a5),d4
  2055.     cmp.w palcolours(a5),d5
  2056.     bls .loop
  2057.  
  2058.     rts
  2059.  
  2060. power:            ;2^(d0)
  2061.     moveq.l #1,d1
  2062.     tst.b d0
  2063.     beq .got
  2064.     sub.b #1,d0
  2065. .loop    add.l d1,d1
  2066.     dbra d0,.loop
  2067. .got    rts
  2068.  
  2069. g_palloadiff:
  2070.     bsr scrback
  2071.     move.b #1,d0
  2072.     bsr palchange_rgbarrow
  2073.  
  2074.     lea txtchoosepal,a0
  2075.     bsr plotmess
  2076.     bsr choosefile
  2077.     tst.b (a0)
  2078.     beq .exit
  2079.     move.l a0,d1
  2080.     bsr openoldfile
  2081.     bne .exit2
  2082.     lea tempspace(a5),a0
  2083.     move.l #12,d0
  2084.     bsr loadtofile
  2085.     bne .exit2
  2086.     cmp.l #"FORM",tempspace(a5)
  2087.     bne .notiff
  2088.     cmp.l #"ILBM",8+tempspace(a5)
  2089.     bne .notiff
  2090.  
  2091.     lea tempspace(a5),a0
  2092.     move.l #"BMHD",d0
  2093.     bsr findhunk
  2094.     bne .notiff
  2095.     moveq.l #0,d0
  2096.     move.b 8(a0),d0
  2097.     cmp.b #5,d0
  2098.     bls .twa
  2099.     move.b #5,d0
  2100. .twa    bsr power
  2101.     move.w d1,-(sp)    ;num of bitplanes
  2102.     bsr unloadhunk
  2103.  
  2104.     lea tempspace(a5),a0
  2105.     move.l #"CMAP",d0
  2106.     bsr findhunk
  2107.     beq .popa
  2108.     move.w (sp)+,d7
  2109.     bra .notiff
  2110. .popa
  2111.     move.w (sp)+,d7
  2112.     sub.w #1,d7
  2113.     lea pallete,a4
  2114. .dc    move.l #0,d0
  2115.     move.b (a0)+,d0
  2116.     move.b (a0)+,d1
  2117.     move.b (a0)+,d2
  2118.     lsl.w #4,d0
  2119.     lsr.b #4,d2
  2120.     and.w #$f00,d0
  2121.     and.w #$0f0,d1
  2122.     and.w #$f,d2
  2123.     or.b d1,d0
  2124.     or.b d2,d0
  2125.     move.w d0,(a4)+
  2126.     dbra d7,.dc
  2127.  
  2128.     bsr unloadhunk
  2129.     bsr closefile
  2130.  
  2131.     lea tpalloaded,a0
  2132.     bsr plotmess
  2133.     bsr readkey
  2134.     lea pallete,a1
  2135.     bsr setrgb
  2136.  
  2137. .exit
  2138.     move.b #0,d0
  2139.     bsr palchange_rgbarrow
  2140.  
  2141.     bsr scrfront
  2142.     rts
  2143. .exit2    lea tcantp,a0
  2144.     bsr plotmess
  2145.     bsr readkey
  2146.     bra .exit
  2147. .notiff    lea tnotiff,a0
  2148.     bsr plotmess
  2149.     bsr readkey
  2150.     bra .exit
  2151.  
  2152. choosefile:
  2153.  
  2154.     lea taskfile,a0
  2155.     bsr plotmess
  2156.     lea dirname(a5),a0
  2157.     move.l a0,a2
  2158.     move.l #120,d3
  2159.     bsr readmessage
  2160.     move.l a2,a0
  2161. .loop    move.b (a0)+,d0
  2162.     beq .got
  2163.     cmp.b #10,d0
  2164.     bne .loop
  2165.     move.b #0,-1(a0)
  2166. .got    move.l a2,a0
  2167.     
  2168.     rts
  2169.  
  2170. nowindow:
  2171.     bsr scrback
  2172.     lea windowerror,a0
  2173.     bsr plotmess
  2174.     bsr readkey
  2175.     move.l bye(a5),a7
  2176.     rts
  2177.  
  2178. findhunk:    ;tempspace = a0, hunkname = d0
  2179.         ;hunk in a0, kill hunk with unloadhunk
  2180.     move.l a0,a3
  2181.     move.l d0,d6
  2182. .next
  2183.     move.l #8,d0
  2184.     move.l a3,a0
  2185.     bsr loadtofile
  2186.     beq .lod
  2187.     false
  2188. .lod
  2189.     move.l (a3),d0
  2190.     cmp.l d6,d0
  2191.     beq .foundhunk
  2192.  
  2193.     move.l 4(a3),d2
  2194.     add.l #1,d2
  2195.     and.l #-2,d2
  2196.     move.l #0,d3
  2197. ;    move.l d2,d4
  2198.     move.l diskopt_currantfile(a5),d1
  2199.     move.l dosbase(a5),a6
  2200.     jsr -66(a6)
  2201. ;    cmp.l d4,d0
  2202.  
  2203. ;    beq .next
  2204.     not.l d0
  2205.     bne .next
  2206.     lea tbackseek,a0
  2207.     bsr plotmess
  2208.     bsr closefile
  2209.     false
  2210. .foundhunk
  2211.     move.l 4(a3),d3
  2212.     add.l #1,d3
  2213.     and.l #-2,d3
  2214.  
  2215.     move.l d3,hunksize(a5)
  2216.     move.l d3,d0
  2217.     moveq.l #0,d1
  2218.     move.l exec(a5),a6
  2219.     jsr -198(a6)
  2220.     move.l d0,hunkbase(a5)
  2221.     bne .memok
  2222.     bsr closefile
  2223.     lea nomemhunk,a0
  2224.     bsr plotmess
  2225.     false
  2226. .memok
  2227.  
  2228.     move.l d0,a0
  2229.     move.l hunksize(a5),d0
  2230.     bsr loadtofile
  2231.     beq .ok
  2232.     bsr unloadhunk
  2233.     false
  2234. .ok    move.l hunkbase(a5),a0
  2235.     true
  2236.  
  2237. unloadhunk:
  2238.     move.l hunksize(a5),d0
  2239.     move.l hunkbase(a5),a1
  2240.     move.l exec(a5),a6
  2241.     jsr -210(a6)
  2242.     rts
  2243.  
  2244. palmouse:
  2245.  
  2246.     moveq.l #0,d6
  2247.     move.l d6,d7
  2248.     move.w mousex(a5),d6
  2249.     move.w mousey(a5),d7
  2250.  
  2251.     moveq.l #0,d0
  2252.     moveq.l #0,d1
  2253.     cmp.w #70,d7
  2254.     bhi .splot
  2255.     move.w d6,d0
  2256.     move.w palspace(a5),d1
  2257.     divu d1,d0
  2258.     move.w palcolours(a5),d2
  2259.     cmp.w d2,d0
  2260.     bhi .nope
  2261.  
  2262.     move.l d0,-(sp)
  2263.     move.b #1,d0
  2264.     move.l #73,d2
  2265.     bsr palcol_arrow
  2266.     move.b #1,d0
  2267.     bsr palchange_rgbarrow
  2268.  
  2269.     move.l (sp)+,d0
  2270.     move.w d0,currentcolour(a5)
  2271.     move.b #0,d0
  2272.     move.l #73,d2
  2273.     bsr palcol_arrow
  2274.     move.b #0,d0
  2275.     bsr palchange_rgbarrow
  2276.  
  2277.  
  2278. .nope
  2279.     rts
  2280. .splot
  2281.     moveq.l #0,d6
  2282.     move.l d6,d7
  2283.     move.w mousex(a5),d6
  2284.     move.w mousey(a5),d7
  2285.     lsr.w #4,d6
  2286.     cmp.w #$f,d6
  2287.     bhi .lower
  2288.     move.w #100,d4
  2289.     move.w #116,d5
  2290.  
  2291.     cas3 d4,d5,d7
  2292.     blo .lower
  2293.     bhi .rhigher
  2294.  
  2295.     move.w #8,d3
  2296.     move.w #$ff,d4
  2297.     bsr pal_swap
  2298.     bra .lower
  2299. .rhigher add.w #32,d4
  2300.     add.w #32,d5
  2301.     cas3 d4,d5,d7
  2302.     blo .lower
  2303.     bhi .ghigher
  2304.     move.w #4,d3
  2305.     move.w #$f0f,d4
  2306.     bsr pal_swap
  2307.     bra .lower
  2308. .ghigher add.w #32,d4
  2309.     add.w #32,d5
  2310.     cas3 d4,d5,d7
  2311.     bne .lower
  2312.     move.w #0,d3
  2313.     move.w #$ff0,d4
  2314.     bsr pal_swap
  2315. .lower
  2316.     rts
  2317. pal_swap:
  2318.     lea pallete,a0
  2319.     moveq.l #0,d0
  2320.     move.w currentcolour(a5),d0
  2321.     add.l d0,d0
  2322.     lea (a0,d0.l),a0
  2323.     move.w (a0),d7
  2324.     lsl.w d3,d6
  2325.     and.w d4,d7
  2326.     or.w d6,d7
  2327.     move.w d7,-(sp)
  2328.     move.l a0,-(sp)
  2329.     move.b #1,d0
  2330.     bsr palchange_rgbarrow
  2331.     move.l (sp)+,a0
  2332.     move.w (sp)+,d7
  2333.     move.w d7,(a0)
  2334.     move.b #0,d0
  2335.     bsr palchange_rgbarrow
  2336.     lea pallete,a1
  2337.     bsr setrgb
  2338.     rts
  2339. plotrgb:
  2340.     move.l intbase(a5),a6
  2341.     
  2342.     lea image_16_16,a4
  2343.     move.l rastport(a5),a3
  2344.     move.l #100,d7
  2345.     move.w #2,d3
  2346. .loop2
  2347.     move.l #0,d6
  2348.     move.w #16,d5
  2349.     move.w #15,d4
  2350. .loop
  2351.     move.l a3,a0
  2352.     move.l a4,a1
  2353.     move.l d6,d0
  2354.     move.l d7,d1
  2355.     jsr -114(a6)
  2356.     add.w d5,d6
  2357.     dbra d4,.loop
  2358.     move.l a3,a0
  2359.     lea hextext,a1
  2360.     clr.l d0
  2361.     move.l d7,d1
  2362.     jsr -216(a6)
  2363.     add.w #32,d7
  2364.     dbra d3,.loop2
  2365.  
  2366.     lea redtext,a1
  2367.     move.l #260,d0
  2368.     move.l #100,d1
  2369.     move.l a3,a0
  2370.     jsr -216(a6)
  2371.  
  2372.     lea greentext,a1
  2373.     move.l #260,d0
  2374.     move.l #132,d1
  2375.     move.l a3,a0
  2376.     jsr -216(a6)
  2377.  
  2378.     lea bluetext,a1
  2379.     move.l #260,d0
  2380.     move.l #164,d1
  2381.     move.l a3,a0
  2382.     jsr -216(a6)
  2383.  
  2384.     move.b #0,d0
  2385.     bsr palchange_rgbarrow
  2386.     move.b #0,d0
  2387.     move.l #73,d2
  2388.     bsr palcol_arrow
  2389.  
  2390.     rts
  2391.  
  2392. palcol_arrow:    ;d0 = 0 (plot) d0 = 1 (erase) d2 = ypos
  2393.  
  2394.     move.b d0,d4
  2395.     moveq.l #0,d0
  2396.     moveq.l #0,d1
  2397.     
  2398.     move.w currentcolour(a5),d0    ;colour
  2399.     move.w palspace(a5),d1        ;space between colours
  2400.     mulu d1,d0            ;get start of colour
  2401.     sub.l #7,d0
  2402.     lsr.w #1,d1            ;half space
  2403.     add.l d1,d0            ;add half space to it
  2404.  
  2405.     tst.b d4
  2406.     bne .clear
  2407.  
  2408.     move.l intbase(a5),a6
  2409.     move.l rastport(a5),a0
  2410.     lea image_up,a1
  2411.  
  2412.     move.l d2,d1
  2413.     jsr -114(a6)
  2414.     rts
  2415.  
  2416. .clear    
  2417.     mulu #screenwidth,d2
  2418.     move.l d2,d1
  2419.     lsr.l #3,d0
  2420.     bsr clear16
  2421.  
  2422.     rts
  2423.  
  2424. palchange_rgbarrow:        ;d0 = 0 (plot) d0 = 1 (erase)
  2425.     move.b d0,d1
  2426.     lea pallete,a0
  2427.     moveq.l #0,d0
  2428.     move.w currentcolour(a5),d0
  2429.     add.l d0,d0
  2430.     lea (a0,d0.l),a0
  2431.     clr.l d5
  2432.     clr.l d6    
  2433.     clr.l d7
  2434.     move.w (a0),d7
  2435.     move.w d7,d6
  2436.     lsr.w #4,d6
  2437.     move.w d6,d5
  2438.     lsr.w #4,d5
  2439.     and.w #$f,d7    ;blue
  2440.     and.w #$f,d6    ;green
  2441.     and.w #$f,d5    ;red
  2442.  
  2443.     tst.b d1
  2444.     bne .clearit
  2445.     lsl.w #4,d5
  2446.     lsl.w #4,d6
  2447.     lsl.w #4,d7
  2448.  
  2449.     move.l intbase(a5),a6
  2450.     move.l rastport(a5),a4
  2451.     lea image_up,a3
  2452.  
  2453.     move.l a3,a1
  2454.     move.l a4,a0
  2455.     move.l #117,d1
  2456.     move.l d5,d0
  2457.     jsr -114(a6)
  2458.     move.l a3,a1
  2459.     move.l a4,a0
  2460.     move.l #149,d1
  2461.     move.l d6,d0
  2462.     jsr -114(a6)
  2463.     move.l a3,a1
  2464.     move.l a4,a0
  2465.     move.l #181,d1
  2466.     move.l d7,d0
  2467.     jsr -114(a6)
  2468.     rts
  2469. .clearit
  2470.     add.l d5,d5
  2471.     add.l d6,d6
  2472.     add.l d7,d7
  2473.     
  2474.     move.l #(117+2)*screenwidth,d1
  2475.     move.l d5,d0
  2476.     bsr clear16
  2477.     move.l #(149+2)*screenwidth,d1
  2478.     move.l d6,d0
  2479.     bsr clear16
  2480.     move.l #(181+2)*screenwidth,d1
  2481.     move.l d7,d0
  2482.     bsr clear16
  2483.  
  2484.     rts
  2485. clear16    ;d1 = y pos height*screenwidth ;d0 = x pos (bytes)
  2486.     move.l bp1(a5),a0
  2487.     move.w #15,d3
  2488.     move.w d3,d4
  2489.     lea (a0,d1.l),a0
  2490.     lea (a0,d0.l),a0
  2491. .b1    clr.b (a0)
  2492.     clr.b 1(a0)
  2493.     clr.b 2(a0)
  2494.     lea screenwidth(a0),a0
  2495.     dbra d4,.b1
  2496.     move.l bp2(a5),a0
  2497.     move.w d3,d4
  2498.     lea (a0,d1.l),a0
  2499.     lea (a0,d0.l),a0
  2500. .b2    clr.b (a0)
  2501.     clr.b 1(a0)
  2502.     clr.b 2(a0)
  2503.     lea screenwidth(a0),a0
  2504.     dbra d4,.b2
  2505.     move.l bp3(a5),a0
  2506.     move.w d3,d4
  2507.     lea (a0,d1.l),a0
  2508.     lea (a0,d0.l),a0
  2509. .b3    clr.b (a0)
  2510.     clr.b 1(a0)
  2511.     clr.b 2(a0)
  2512.     lea screenwidth(a0),a0
  2513.     dbra d4,.b3
  2514.     move.l bp4(a5),a0
  2515.     move.w d3,d4
  2516.     lea (a0,d1.l),a0
  2517.     lea (a0,d0.l),a0
  2518. .b4    clr.b (a0)
  2519.     clr.b 1(a0)
  2520.     clr.b 2(a0)
  2521.     lea screenwidth(a0),a0
  2522.     dbra d4,.b4
  2523.     rts
  2524.  
  2525.  
  2526.  
  2527. openscreen:
  2528.     tst.l screenhd(a5)
  2529.     bne .isopen
  2530.     move.w bitplanes(a5),d0
  2531.     cmp.w #4,d0
  2532.     bhs .bitok
  2533.     move.w #4,d0
  2534. .bitok    move.w d0,actualbp(a5)
  2535.     
  2536.     move.w d0,scr_devs_bp
  2537.     move.l intbase(a5),a6    
  2538.     lea screen_defs,a0
  2539.     jsr -198(a6)
  2540.     move.l d0,screenhd(a5)
  2541.     beq .error
  2542.     move.l d0,a0
  2543.     move.l $c0(a0),bp1(a5)
  2544.     move.l $c4(a0),bp2(a5)
  2545.     move.l $c8(a0),bp3(a5)
  2546.     move.l $cc(a0),bp4(a5)
  2547.     move.l $d0(a0),bp5(a5)
  2548.     lea 44(a0),a0
  2549.     move.l a0,viewport(a5)
  2550.     lea pallete,a1
  2551.     bsr setrgb
  2552.  
  2553.     move.l exec(a5),a6
  2554.     move.l #$10000,d1
  2555.     move.l #12,d0
  2556.     jsr -198(a6)
  2557.     move.l d0,ucprlist(a5)
  2558.     beq .error2
  2559.  
  2560.     lea normalpallete,a3
  2561.     move.l gfxbase(a5),a6
  2562.     move.l ucprlist(a5),a1
  2563.     move.l #$200,d0
  2564.     clr.l d1
  2565.     jsr -378(a6)            ;cwait
  2566.     move.l ucprlist(a5),a1
  2567.     jsr -366(a6)            ;cbump
  2568.  
  2569.     move.l #$180,d7
  2570.     move.w #32-1,d6
  2571. .copycop
  2572.     move.l d7,d0
  2573.     clr.l d1
  2574.     move.w (a3)+,d1
  2575.     move.l ucprlist(a5),a1        ;move
  2576.     jsr -372(a6)
  2577.     move.l ucprlist(a5),a1        ;bump
  2578.     jsr -366(a6)
  2579.     add.l #2,d7
  2580.     dbra d6,.copycop
  2581.  
  2582.     move.l ucprlist(a5),a1
  2583.     move.l #10000,d0
  2584.     move.l #256,d1
  2585.     jsr -378(a6)    
  2586.     move.l viewport(a5),a0
  2587.     move.l ucprlist(a5),20(a0)
  2588.     move.l intbase(a5),a6
  2589.     jsr -390(a6)
  2590.  
  2591. .isopen    true
  2592. .error    false
  2593. .error2    bsr closescreen
  2594.     bra .error
  2595. setrgb:    
  2596.     move.l viewport(a5),a0
  2597.     move.w #32,d0
  2598.     move.l gfxbase(a5),a6
  2599.     jsr -192(a6)
  2600.     rts
  2601.  
  2602. closescreen:
  2603.     bsr closewindow
  2604.  
  2605.     move.l screenhd(a5),d0
  2606.     beq .done
  2607.     move.l d0,a0
  2608.     move.l intbase(a5),a6
  2609.     jsr -66(a6)
  2610.     clr.l screenhd(a5)
  2611. .done    rts
  2612.  
  2613. allocateall:
  2614.     
  2615.     bsr allocatelevel
  2616.     bne .error
  2617.     bsr allocateblocks
  2618.     bne .error
  2619.     bsr allocatetext
  2620.     bne .error
  2621.     bsr allocblockchip
  2622.     bne .error
  2623.     true
  2624. .error    false
  2625.  
  2626. releaseall:
  2627.     bsr releaselevel
  2628.     bsr releaseblocks
  2629.     bsr releasetext
  2630.     bsr releaseblockchip
  2631.     bsr closescreen
  2632.     rts
  2633. allocblockchip:                ;allocates the level memory
  2634.     moveq.l #0,d0
  2635.     move.w blockwidth(a5),d0
  2636.     add.w #1,d0
  2637.     bclr #0,d0
  2638.     mulu.w blockheight(a5),d0
  2639.     mulu.w bitplanes(a5),d0
  2640.     move.l d0,chipblockbasesize(a5)
  2641.     move.l #$10002,d1
  2642.     move.l exec(a5),a6
  2643.     jsr -198(a6)
  2644.     move.l d0,chipblockbase(a5)
  2645.     beq .error
  2646.     
  2647.     lea chipimage+4,a0
  2648.     move.w blockwidth(a5),d0
  2649.     add.w d0,d0    ;*2
  2650.     add.w d0,d0    ;*4
  2651.     add.w d0,d0    ;*8
  2652.     move.w d0,blockpixelwidth(a5)
  2653.     move.w d0,(a0)+
  2654.     move.w blockheight(a5),(a0)+
  2655.     move.w bitplanes(a5),d0
  2656.     move.w d0,(a0)+
  2657.     move.l chipblockbase(a5),(a0)+
  2658.     bsr power
  2659.     sub.w #1,d1
  2660.     move.b d1,(a0)
  2661.     
  2662.     
  2663.     
  2664.     true
  2665. .error    false
  2666.  
  2667. releaseblockchip:
  2668.     move.l chipblockbasesize(a5),d0
  2669.     move.l chipblockbase(a5),a1
  2670.     move.l a1,d1
  2671.     beq .done
  2672.     move.l exec(a5),a6
  2673.     jsr -210(a6)
  2674.     clr.l chipblockbase(a5)
  2675. .done
  2676.     rts
  2677.  
  2678.  
  2679.  
  2680. allocatelevel:                ;allocates the level memory
  2681.     move.l lvlsize(a5),d0
  2682.     move.l #$10000,d1
  2683.     move.l exec(a5),a6
  2684.     jsr -198(a6)
  2685.     move.l d0,lvlbase(a5)
  2686.     beq .error
  2687.     true
  2688. .error    false
  2689.  
  2690. releaselevel:
  2691.     move.l lvlsize(a5),d0
  2692.     move.l lvlbase(a5),a1
  2693.     move.l a1,d1
  2694.     beq .done
  2695.     move.l exec(a5),a6
  2696.     jsr -210(a6)
  2697.     clr.l lvlbase(a5)
  2698. .done
  2699.     rts
  2700.  
  2701. allocateblocks:    ;allocates the blocks
  2702.     move.l exec(a5),a6
  2703.     move.l #$10000,d5
  2704.     move.w numberofblocks(a5),d7
  2705.     clr.l d6
  2706.     move.w blocksize(a5),d6
  2707.  
  2708.     move.l d5,d1
  2709.     move.l d6,d0
  2710.     jsr -198(a6)                ;mainblock
  2711.     move.l d0,blockbase(a5)
  2712.     beq .error
  2713.     sub.w #1,d7
  2714.     beq .done
  2715.     move.w #1,d4
  2716.     move.l d0,a4
  2717. .loop    move.l d5,d1
  2718.     move.l d6,d0
  2719.     jsr -198(a6)
  2720.     beq .error
  2721.     move.l d0,(a4)
  2722.     move.l d0,a3
  2723.     move.l a4,block_prev(a3)
  2724.     move.l a3,a4
  2725.     move.w d4,block_number(a4)
  2726.     add.w #1,d4
  2727.     sub.w #1,d7
  2728.     bne .loop
  2729. .done
  2730.     true
  2731. .error    false
  2732. releaseblocks:
  2733.     move.l blockbase(a5),d0
  2734.     beq .done
  2735.     clr.l blockbase(a5)
  2736.     move.l d0,a4
  2737. .go    move.l (a4),a3
  2738.     clr.l d6
  2739.     move.w blocksize(a5),d6
  2740.     move.l exec(a5),a6
  2741.     move.l d6,d0
  2742.     move.l a4,a1
  2743.     jsr -210(a6)
  2744.     move.l a3,a4    
  2745.     move.l a3,d0
  2746.     bne .go
  2747. .done    rts
  2748.  
  2749. allocatetext:
  2750.     move.l textsize(a5),d0
  2751.     move.l #$10000,d1
  2752.     move.l exec(a5),a6
  2753.     jsr -198(a6)
  2754.     move.l d0,textbase(a5)
  2755.     beq .error
  2756.     true
  2757. .error    false
  2758. releasetext:
  2759.     move.l textsize(a5),d0
  2760.     move.l textbase(a5),a1
  2761.     move.l a1,d1
  2762.     beq .done
  2763.     move.l exec(a5),a6
  2764.     jsr -210(a6)
  2765.     clr.l textbase(a5)
  2766. .done
  2767.     rts
  2768.  
  2769. cddirectory:            ;a0 = directory
  2770.     move.l a0,a4
  2771.     move.l a4,d1
  2772.     move.l #-2,d2
  2773.     move.l dosbase(a5),a6
  2774.     jsr -84(a6)
  2775.     move.l d0,lock(a5)
  2776.     beq .error
  2777.     move.l d0,d1
  2778.     jsr -126(a6)
  2779.     move.l d0,olddir(a5)
  2780.     true
  2781. .error    false
  2782. unlock:
  2783.     move.l dosbase(a5),a6
  2784.  
  2785.     move.l olddir(a5),d1
  2786.     jsr -126(a6)
  2787.     move.l lock(a5),d1
  2788.     beq .dont
  2789.     jsr -90(a6)
  2790.     clr.l lock(a5)
  2791. .dont    rts
  2792.  
  2793.  
  2794. readnumber:            ;reads a number from con (d0 = answer)
  2795.  
  2796.     lea wantnumber,a0
  2797.     bsr plotmess
  2798.  
  2799.     lea tempspace(a5),a0
  2800.     move.l a0,a2
  2801.     move.l #50,d3
  2802.     bsr readmessage
  2803.     move.l a2,a0
  2804.     decback
  2805.     rts
  2806. getmessage:        ;a0 = storage, d3 = size
  2807.     move.w d3,-(sp)
  2808.     move.l a0,-(sp)
  2809.     lea wantmessage,a0
  2810.     bsr plotmess
  2811.     move.l (sp)+,a0
  2812.     move.w (sp)+,d3
  2813.     bra readmessage
  2814.  
  2815. readmessage:            ;reads a message (a0 = storage d3 = size)
  2816.     move.l conbase(a5),d1
  2817.     move.l a0,d2
  2818.     move.l dosbase(a5),a6
  2819.     jsr -42(a6)
  2820.     rts
  2821.  
  2822. askyn:                ;asks for Y (set) or N (clear)
  2823.     lea askforyn,a0
  2824.     bsr plotmess
  2825.     bsr readkey
  2826.     uppercase
  2827.     cmp.b #"N",d0
  2828.     beq .no
  2829.     cmp.b #"Y",d0
  2830.     beq .yes
  2831.     lea wrongkey,a0
  2832.     bsr plotmess
  2833.     bra askyn
  2834. .yes    true
  2835. .no    false
  2836.  
  2837. readkey: readkey
  2838.     rts
  2839.     
  2840. plotmess:                 ;A0 = message, ending in a 0
  2841.     plotmess
  2842.     rts
  2843.  
  2844. updatewindow:
  2845.     lea windowpallete,a0
  2846.     clr.l d0
  2847.     move.w windowtype(a5),d0
  2848.     mulu #20,d0    
  2849.  
  2850.     lea (a0,d0.l),a0
  2851.     move.l (a0)+,a1
  2852.     move.l (a0)+,currentgad(a5)
  2853.     move.l (a0)+,idcmp
  2854.     move.l (a0)+,d0
  2855.     beq .nosetup
  2856.     movem.l d0-d7/a0-a6,-(sp)
  2857.     move.l d0,a4
  2858.     jsr (a4)
  2859.     movem.l (sp)+,d0-d7/a0-a6
  2860. .nosetup
  2861.     move.l a0,a4
  2862.     bsr setrgb
  2863.     move.l (a4),d0
  2864.     bne .cop
  2865.     move.l ucprlist(a5),a0
  2866.     move.l 4(a0),a0
  2867.     move.l 12(a0),a0
  2868.     move.w #$200,2(a0)
  2869.     bra .nocop
  2870. .cop    move.l ucprlist(a5),a0
  2871.     move.l 4(a0),a0
  2872.     move.l 12(a0),a0
  2873.     move.w d0,2(a0)
  2874.  
  2875. .nocop    
  2876.     tst.l windowhd(a5)
  2877.     beq .nowind
  2878.     bsr closewindow
  2879. .nowind
  2880.  
  2881.     move.l currentgad(a5),windgad
  2882.  
  2883.     lea windowdef,a0
  2884.     move.l screenhd(a5),windowdef_screenhd
  2885.     move.l intbase(a5),a6
  2886.     jsr -204(a6)
  2887.     move.l d0,windowhd(a5)
  2888.     beq .error
  2889.     move.l d0,a0
  2890.     move.l 50(a0),rastport(a5)
  2891.     move.l 86(a0),userport(a5)
  2892.  
  2893.     move.l intbase(a5),a6
  2894.     jsr -390(a6)
  2895.  
  2896.  
  2897.     true
  2898. .error    false
  2899.  
  2900. loaddata:
  2901.     bsr scrback
  2902.  
  2903.     lea loadmess,a0
  2904.     bsr plotmess
  2905.  
  2906. .errorx
  2907.     bsr askdir
  2908.  
  2909.     bsr cddirectory
  2910.     beq .found
  2911.     lea nodir,a0
  2912.     bsr plotmess
  2913.     bsr askyn
  2914.     beq .errorx
  2915.     move.l bye(a5),a7
  2916.     rts
  2917. .found
  2918.     
  2919.     
  2920.     lea map_prefs,a0
  2921.     bsr openoldfile
  2922.     bne .error
  2923.  
  2924.  
  2925.     lea loading,a0
  2926.     bsr plotmess
  2927.  
  2928.     lea theprefs(a5),a0
  2929.     move.l #92,d0
  2930.     bsr loadtofile
  2931.     bne .error
  2932.     
  2933.     lea theprefs(a5),a0
  2934.     move.l (a0)+,textsize(a5)
  2935.     move.l (a0)+,lvlsize(a5)
  2936.     move.w (a0)+,lvlwidth(a5)
  2937.     move.w (a0)+,lvlheight(a5)
  2938.     move.w (a0)+,blocksize(a5)
  2939.     move.w (a0)+,blockmask(a5)
  2940.     move.w (a0)+,numberofblocks(a5)
  2941.     move.w (a0)+,blockwidth(a5)
  2942.     move.w (a0)+,blockheight(a5)
  2943.     move.w (a0)+,bitplanes(a5)
  2944.     move.w (a0)+,numberoflevels(a5)
  2945.     move.w (a0)+,currentlevel(a5)
  2946.     move.w #63,d0
  2947.     lea pallete,a1
  2948. .copy    move.b (a0)+,(a1)+
  2949.     dbra d0,.copy
  2950.  
  2951.     bsr closefile
  2952.  
  2953.     bsr allocateall
  2954.     bne .memerror
  2955.  
  2956.     lea map_text,a0
  2957.     bsr openoldfile
  2958.     bne .error
  2959.  
  2960.     lea loading,a0
  2961.     bsr plotmess
  2962.  
  2963.     move.l textbase(a5),a0
  2964.     move.l textsize(a5),d0
  2965.     bsr loadtofile
  2966.     bne .error
  2967.     bsr closefile
  2968.  
  2969.     
  2970.     lea map_gfx,a0
  2971.     bsr openoldfile
  2972.     bne .error
  2973.  
  2974.     lea loading,a0
  2975.     bsr plotmess
  2976.  
  2977.     move.l blockbase(a5),a4
  2978.     
  2979.     moveq.l #0,d6
  2980.     move.w blocksize(a5),d6
  2981.     sub.w #8,d6
  2982. .loadblock
  2983.     move.l a4,a0
  2984.     move.l d6,d0
  2985.     move.l a4,-(sp)
  2986.     add.l #8,a0
  2987.     move.l d6,-(sp)
  2988.     bsr loadtofile
  2989.     beq .e2
  2990.     move.l (sp)+,d6
  2991.     move.l (sp)+,a4
  2992.     bra .error
  2993. .e2    move.l (sp)+,d6
  2994.     move.l (sp)+,a4
  2995.  
  2996.     move.l (a4),a4
  2997.     move.l a4,d0
  2998.     bne .loadblock
  2999.  
  3000.     bsr closefile
  3001.  
  3002.     lea map_level,a4
  3003.     lea 9(a4),a0
  3004.     clr.l d0
  3005.     move.w currentlevel(a5),d0
  3006. decconv_type set 3
  3007. decconv_type2 set 100
  3008.     decconv
  3009.     
  3010.     lea map_level,a0
  3011.     bsr openoldfile
  3012.     bne .error
  3013.  
  3014.     lea loading,a0
  3015.     bsr plotmess
  3016.  
  3017.     move.l lvlbase(a5),a0
  3018.     move.l lvlsize(a5),d0
  3019.     bsr loadtofile
  3020.     bne .error
  3021.     bsr closefile
  3022.  
  3023. .dontload
  3024.     bsr scrfront
  3025.     true
  3026.  
  3027. .error    
  3028.     lea errorload,a0
  3029.     bsr plotmess
  3030.     bsr scrfront
  3031.     false
  3032. .memerror
  3033.     lea nomem,a0
  3034.     bsr plotmess
  3035.     bsr readkey
  3036.     bra .error
  3037.  
  3038. savedata:
  3039.     bsr scrback
  3040.  
  3041.     lea savemess,a0
  3042.     bsr plotmess
  3043.     bsr askyn
  3044.     bne .dontsave
  3045.  
  3046.     lea map_prefs,a0
  3047.     bsr opennewfile
  3048.     bne .error
  3049.  
  3050.     lea saving,a0
  3051.     bsr plotmess
  3052.     lea theprefs(a5),a4
  3053.     lea textsize(a5),a0
  3054.     move.l (a0),(a4)+
  3055.     bsr savelong    
  3056.     bne .error
  3057.     lea lvlsize(a5),a0
  3058.     move.l (a0),(a4)+
  3059.     bsr savelong
  3060.     bne .error
  3061.     lea lvlwidth(a5),a0
  3062.     move.w (a0),(a4)+
  3063.     bsr saveword
  3064.     bne .error
  3065.     lea lvlheight(a5),a0
  3066.     move.w (a0),(a4)+
  3067.     bsr saveword
  3068.     bne .error
  3069.     lea blocksize(a5),a0
  3070.     move.w (a0),(a4)+
  3071.     bsr saveword
  3072.     bne .error
  3073.     lea blockmask(a5),a0
  3074.     move.w (a0),(a4)+
  3075.     bsr saveword
  3076.     bne .error
  3077.     lea numberofblocks(a5),a0
  3078.     move.w (a0),(a4)+
  3079.     bsr saveword
  3080.     bne .error
  3081.     lea blockwidth(a5),a0
  3082.     move.w (a0),(a4)+
  3083.     bsr saveword
  3084.     bne .error
  3085.     lea blockheight(a5),a0
  3086.     move.w (a0),(a4)+
  3087.     bsr saveword
  3088.     bne .error
  3089.     lea bitplanes(a5),a0
  3090.     move.w (a0),(a4)+
  3091.     bsr saveword
  3092.     bne .error
  3093.     lea numberoflevels(a5),a0
  3094.     move.w (a0),(a4)+
  3095.     bsr saveword
  3096.     bne .error
  3097.     lea currentlevel(a5),a0
  3098.     move.w (a0),(a4)+
  3099.     bsr saveword
  3100.     bne .error
  3101.     lea pallete,a0
  3102.     move.l #64,d0
  3103.     bsr savetofile
  3104.     bne .error
  3105.     lea pallete,a0
  3106.     move.w #63,d0
  3107. .bip    move.b (a0)+,(a4)+
  3108.     dbra d0,.bip
  3109.     
  3110.     bsr closefile
  3111.  
  3112.  
  3113.     lea map_text,a0
  3114.     bsr opennewfile
  3115.     bne .error
  3116.  
  3117.     lea saving,a0
  3118.     bsr plotmess
  3119.  
  3120.     move.l textbase(a5),a0
  3121.     move.l textsize(a5),d0
  3122.     bsr savetofile
  3123.     bne .error
  3124.     bsr closefile
  3125.  
  3126.     
  3127.     lea map_gfx,a0
  3128.     bsr opennewfile
  3129.     bne .error
  3130.  
  3131.     lea saving,a0
  3132.     bsr plotmess
  3133.  
  3134.     move.l blockbase(a5),a4
  3135.     
  3136.     moveq.l #0,d6
  3137.     move.w blocksize(a5),d6
  3138.     sub.w #8,d6
  3139. .saveblock
  3140.     move.l a4,a0
  3141.     move.l d6,d0
  3142.     move.l a4,-(sp)
  3143.     add.l #8,a0
  3144.     move.l d6,-(sp)
  3145.     bsr savetofile
  3146.     beq .e2
  3147.     move.l (sp)+,d6
  3148.     move.l (sp)+,a4
  3149.     bra .error
  3150. .e2    move.l (sp)+,d6
  3151.     move.l (sp)+,a4
  3152.  
  3153.     move.l (a4),a4
  3154.     move.l a4,d0
  3155.     bne .saveblock
  3156.  
  3157.     bsr closefile
  3158.  
  3159.     lea map_level,a4
  3160.     lea 9(a4),a0
  3161.     clr.l d0
  3162.     move.w currentlevel(a5),d0
  3163. decconv_type set 3
  3164. decconv_type2 set 100
  3165.     decconv
  3166.     
  3167.     lea map_level,a0
  3168.     bsr opennewfile
  3169.     bne .error
  3170.  
  3171.     lea saving,a0
  3172.     bsr plotmess
  3173.  
  3174.     move.l lvlbase(a5),a0
  3175.     move.l lvlsize(a5),d0
  3176.     bsr savetofile
  3177.     bne .error
  3178.     bsr closefile
  3179.  
  3180.  
  3181. .dontsave
  3182.     bsr scrfront
  3183.     rts
  3184. .error
  3185.     lea mnosave,a0
  3186.     bsr plotmess
  3187.     bsr readkey
  3188.     bra .dontsave
  3189.  
  3190. loadlong:
  3191.     move.l #4,d0
  3192.     bra loadtofile
  3193. loadword:
  3194.     move.l #2,d0
  3195.     bra loadtofile
  3196.  
  3197. savelong:
  3198.     move.l #4,d0
  3199.     bra savetofile
  3200. saveword:
  3201.     move.l #2,d0
  3202.     bra savetofile
  3203.  
  3204. savetofile:
  3205.     move.l d0,d7
  3206.     writefile
  3207.     cmp.l d7,d0
  3208.     bne .error
  3209.     lea dot,a0
  3210.     bsr plotmess
  3211.     true
  3212. .error    lea error,a0
  3213.     bsr plotmess
  3214.     bsr closefile
  3215.     move.l currentopen(a5),a0
  3216.     bsr deletefile
  3217.     false
  3218.  
  3219. loadtofile:
  3220.     move.l d0,d7
  3221.     readfile
  3222.     cmp.l d7,d0
  3223.     bne .error
  3224.     lea dot,a0
  3225.     bsr plotmess
  3226.     true
  3227. .error    lea error,a0
  3228.     bsr plotmess
  3229.     bsr closefile
  3230.     false
  3231.  
  3232. closefile:    
  3233.     move.l currentopen(a5),a4
  3234.     lea closetext,a0
  3235.     bsr plotmess
  3236.     move.l a4,a0
  3237.     bsr plotmess
  3238.     closefile
  3239.     lea eol,a0
  3240.     bsr plotmess
  3241.     rts
  3242. deletefile:
  3243.     move.l currentopen(a5),a4
  3244.     lea deletetext,a0
  3245.     bsr plotmess
  3246.     move.l a4,a0
  3247.     bsr plotmess
  3248.     deletefile
  3249.     lea eol,a0
  3250.     bsr plotmess
  3251.     rts
  3252.  
  3253. opennewfile:
  3254.  
  3255.     move.l a0,a4
  3256.     lea openmess,a0
  3257.     bsr plotmess
  3258.     move.l a4,a0
  3259.     bsr plotmess
  3260.     move.l a4,a0
  3261.  
  3262.     newopenfile
  3263.  
  3264.     tst.l filebase(a5)
  3265.     beq .openerror
  3266.     move.l a4,currentopen(a5)
  3267.     lea eol,a0
  3268.     bsr plotmess
  3269.     
  3270.     true
  3271. .openerror
  3272.     lea error,a0
  3273.     bsr plotmess
  3274.     false
  3275. openoldfile:
  3276.     move.l a0,a4
  3277.     lea openmess,a0
  3278.     bsr plotmess
  3279.     move.l a4,a0
  3280.     bsr plotmess
  3281.     move.l a4,a0
  3282.     oldopenfile
  3283.  
  3284.     tst.l filebase(a5)
  3285.     beq .openerror
  3286.     move.l a4,currentopen(a5)
  3287.     lea eol,a0
  3288.     bsr plotmess
  3289.     
  3290.     true
  3291. .openerror
  3292.     lea error,a0
  3293.     bsr plotmess
  3294.     false
  3295.  
  3296. newproject:
  3297.     lea askblockwidth,a0
  3298.     bsr plotmess
  3299.     bsr readnumber    
  3300.     move.w d0,blockwidth(a5)
  3301.     lea askblockheight,a0
  3302.     bsr plotmess
  3303.     bsr readnumber
  3304.     move.w d0,blockheight(a5)
  3305. .cols    lea askcolours,a0
  3306.     bsr plotmess
  3307.     bsr readnumber
  3308.     range d0,1,8
  3309.     tst.w d0
  3310.     bne .okay
  3311.     lea wrongcols,a0
  3312.     bsr plotmess
  3313.     bra .cols
  3314. .okay    move.w d0,bitplanes(a5)
  3315.  
  3316.     lea asklvlwidth,a0
  3317.     bsr plotmess
  3318.     bsr readnumber
  3319.     move.w d0,lvlwidth(a5)
  3320.     lea asklvlheight,a0
  3321.     bsr plotmess
  3322.     bsr readnumber
  3323.     move.w d0,lvlheight(a5)
  3324.  
  3325. .error
  3326.     bsr askdir
  3327.  
  3328.     bsr cddirectory
  3329.     beq .found
  3330.     lea nodir,a0
  3331.     bsr plotmess
  3332.     bsr askyn
  3333.     beq .error
  3334.     move.l bye(a5),a7
  3335.     rts
  3336. .found
  3337.     move.w #1,numberofblocks(a5)
  3338.     clr.l d0
  3339.     move.w blockwidth(a5),d0
  3340.     mulu.w blockheight(a5),d0
  3341.     move.w bitplanes(a5),d1
  3342.     add.w #1,d1
  3343.     mulu.w d1,d0
  3344.     add.w #block_gfx,d0
  3345.     move.w d0,blocksize(a5)
  3346.     move.w blockwidth(a5),d0
  3347.     mulu.w blockheight(a5),d0
  3348.     move.w bitplanes(a5),d1
  3349.     mulu.w d1,d0
  3350.     add.w #block_gfx,d0
  3351.     move.w d0,blockmask(a5)
  3352.     clr.l d0
  3353.     move.w lvlwidth(a5),d0
  3354.     mulu.w lvlheight(a5),d0
  3355.     move.l d0,d1
  3356.     add.l d0,d0
  3357.     move.l d0,lvlsp1(a5)
  3358.     add.l d1,d0
  3359.     move.l d0,lvlsp2(a5)
  3360.     add.l d1,d0
  3361.     move.l d0,lvlsize(a5)
  3362.  
  3363.     move.l #defualttexte-defualttext,textsize(a5)
  3364.     
  3365.     move.w #0,currentlevel(a5)
  3366.     move.w #1,numberoflevels(a5)
  3367.  
  3368.     bsr allocateall
  3369.     beq .alocgood
  3370.     bsr releaseall
  3371.     lea nomem,a0
  3372.     bsr plotmess
  3373.     bsr readkey
  3374. .exitit
  3375.     move.l bye(a5),a7
  3376.     rts
  3377. .alocgood
  3378.     lea defualttext,a0
  3379.     move.l textbase(a5),a1
  3380. .copytext:
  3381.     move.b (a0)+,d0
  3382.     move.b d0,(a1)+
  3383.     cmp.b #-1,d0
  3384.     bne .copytext
  3385.     
  3386.     lea txt_gonnasave,a0
  3387.     bsr  plotmess
  3388.     bsr savedata
  3389.     bne .errorsav
  3390.     
  3391.     rts
  3392. .errorsav
  3393.     lea txt_nosaveg,a0
  3394.     bsr plotmess
  3395.     bsr readkey
  3396.     bra .exitit
  3397.  
  3398. txt_gonnasave:
  3399.     dc.b "This verson of this map designer requires you to save the data",10
  3400.     dc.b "now. So i'm saving!...",10,0
  3401. txt_nosaveg: 
  3402.     dc.b "Uh oh! An error - Bye bye!. Press return please [Return]",0
  3403.     even
  3404.  
  3405. askdir:
  3406. .error    lea mdirname,a0
  3407.     bsr plotmess
  3408.     lea dirname(a5),a0
  3409.     move.l #128,d3
  3410.     bsr getmessage
  3411.     cmp.b #10,dirname(a5)
  3412.     beq .error
  3413.     lea mgonnafinddir,a0
  3414.     bsr plotmess 
  3415.     bsr readkey
  3416.     lea dirname(a5),a0
  3417.     move.l a0,a1
  3418. .fix    move.b (a1)+,d0
  3419.     cmp.b #10,d0
  3420.     bne .fix
  3421.     sub.l #1,a1
  3422.     move.b -1(a1),d0
  3423.     cmp.b #":",d0
  3424.     beq .ok
  3425.     cmp.b #"/",d0
  3426.     beq .ok
  3427.     move.b #"/",(a1)+
  3428. .ok    move.b #0,(a1)
  3429.     rts
  3430.  
  3431.  
  3432.  
  3433. scrfront:
  3434.     move.l screenhd(a5),d0
  3435.     beq .noscr
  3436.     move.l intbase(a5),a6
  3437.     move.l d0,a0
  3438.     jsr -252(a6)
  3439. .noscr    rts
  3440.  
  3441. scrback:
  3442.     move.l screenhd(a5),d0
  3443.     beq .noscr
  3444.     move.l intbase(a5),a6
  3445.     move.l d0,a0
  3446.     jsr -246(a6)
  3447. .noscr    rts
  3448.