Subversion Repositories NedoOS

Rev

Rev 76 | Rev 289 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download

  1.         DEVICE ZXSPECTRUM128
  2.         ;device pentagon1024
  3.  
  4.         include "../_sdk/sys_h.asm"
  5.  
  6. MAXCMDSZ=COMMANDLINE_sz-1 ;эх ёўшЄр  ЄхЁьшэрЄюЁр
  7.  
  8. scrwid=320
  9. scrwid8=scrwid/8
  10. scrhgt=200
  11.  
  12. scrbase=0x8000
  13. scrbase16k=0x4000
  14.  
  15. tempc000=0x4000 ;ъЁєуыюх!
  16. tempe000=0x6000
  17.  
  18. editpal_c0=0x80
  19. editpal_e0=editpal_c0+0x20
  20. tabclippal=0xc000
  21.  
  22. titlehgt=8
  23.  
  24. workzonex8=4
  25. workzoney=8
  26. workzonewid8=scrwid/8-workzonex8-4
  27. workzonehgt=scrhgt-workzoney
  28.  
  29. rightpanelx8=workzonex8+workzonewid8
  30.  
  31. colorx8=0
  32. colory=scrhgt-16
  33. colorhgt=16
  34.  
  35. palettey=workzoney
  36. palettex8=rightpanelx8
  37.  
  38. navigatorx=rightpanelx8*8
  39. navigatory=palettey+(8*4)
  40. navigatorhgt=31 ;ыєў°х эх єтхышўштрЄ№, ўЄюс√ эх с√ыю яхЁхяюыэхэш  яЁш єьэюцхэшш эр bitmapwid (max 2048)
  41. navigatorwid=31
  42.  
  43. coordsx=navigatorx
  44. coordsy=navigatory+navigatorhgt+1
  45. coordswindowx=coordsx
  46. coordswindowy=coordsy+16
  47. coordswindowwid=32
  48. coordswindowhgt=32
  49.  
  50. ZONE_NO=0
  51. ZONE_TOP=1
  52. ZONE_LEFT=2
  53. ZONE_RIGHT=3
  54. ZONE_WORK=4
  55. ZONE_PAL=5
  56. ZONE_NAVIGATOR=6
  57.  
  58. TOOL_WINDOW=0
  59. TOOL_PENCIL=1
  60. TOOL_BRUSH=2
  61. TOOL_LINE=3
  62. TOOL_FILL=4
  63. TOOL_TEXT=5
  64. NTOOLS=6
  65.  
  66. backcolor=%00111111
  67.  
  68. bmpmaxpages=251
  69. maxbitmaps=4
  70.        
  71.         macro SHAPESPROC name
  72. ;_=$
  73.         ;org _curorg
  74. name
  75.         ;call setpgshapes
  76.         ;jp _
  77. ;_curorg=$
  78.         ;org _
  79.         endm
  80.  
  81.         macro SETPGBITMAPLOW
  82.         ld ($+4),a
  83.         ld a,(tbitmappages)
  84.         SETPG32KLOW
  85.         endm
  86.        
  87.         ;macro SETPGBITMAPHIGH
  88.         ;ld ($+4),a
  89.         ;ld a,(tbitmappages)
  90.         ;SETPG32KHIGH
  91.         ;endm
  92.  
  93.         org PROGSTART
  94. gfxeditor_begin
  95. main_go
  96.         jp main_go2
  97.         ds 256
  98. main_go2
  99.         ld sp,0x4000 ;эх фюыцхэ юяєёърЄ№ё  эшцх 0x3b00! шэрўх тючьюцэр яюЁўр OS
  100.         ld e,0 ;EGA
  101.         OS_SETGFX
  102.         OS_GETSCREENPAGES
  103. ;de=ёЄЁрэшЎ√ 0-ую ¤ъЁрэр (d=ёЄрЁ°р ), hl=ёЄЁрэшЎ√ 1-ую ¤ъЁрэр (h=ёЄрЁ°р )
  104.         ld a,e
  105.         ld (setpgs_scr_low),a
  106.         ld a,d
  107.         ld (setpgs_scr_high),a
  108.        
  109.         OS_GETMAINPAGES
  110. ;dehl=эюьхЁр ёЄЁрэшЎ т 0000,4000,8000,c000
  111.         ld a,e
  112.         ld (curpgshapes),a
  113.         ld a,h
  114.         ld (curpgpal),a
  115.         ld a,l
  116.         ld (curpgtemp),a
  117.  
  118.         call setpgs_scr
  119.         call setpgshapes
  120.         xor a
  121.         call shapes_cls
  122.        
  123.         ld hl,COMMANDLINE ;command line
  124.         call skipword
  125.         call skipspaces
  126.         ld a,(hl)
  127.         or a
  128.         jr z,noautoload
  129. ;command line = "scratch <file to load>"
  130.         push hl
  131.         call findlastslash. ;de=after last slash or beginning of path
  132.         pop hl
  133.         push de
  134.         dec de
  135.         ld a,(de)
  136.         cp '/'
  137.         jr nz,$+4
  138.         xor a
  139.         ld (de),a ;юЄЁхчрЄ№ шь  Їрщыр
  140.         inc de
  141.         ex de,hl;ld de,wordbuf ;ASCIIZ string for parsing (т #c000...)
  142.         ;push de
  143.         jr nz,autoload_nopath
  144.         OS_CHDIR
  145. autoload_nopath
  146.         ;pop hl
  147.         ;call findlastslash.
  148.         pop de ;de=after last slash
  149.        
  150.         ld hl,fcb_filename ;Pointer to 11 byte buffer
  151.         OS_PARSEFNAME
  152.         ld de,fcb
  153.         OS_FOPEN
  154.         or a
  155.         jr nz,noautoload;error
  156.         call readbmp ;nz=ю°шсър (Єюуфр эх ьхэ Є№ шь  Їрщыр)
  157.         jr nz,autoloaderror
  158.        
  159.         ld hl,fcb_filename ;Pointer to 11 byte buffer
  160.         ld de,curpicname
  161.         call cpmname_to_dotname
  162.  
  163. autoloaderror
  164.         ld de,fcb
  165.         OS_FCLOSE
  166.         jr autoloadq
  167. noautoload
  168.         ld bc,320 ;wid
  169.         ld de,200 ;hgt
  170.         xor a ;color
  171.         call newbitmap
  172. autoloadq
  173.        
  174.         ld de,pathbuf_forBDOS ;de=pointer to 64 byte (MAXPATH_sz!) buf
  175.         OS_GETPATH
  176.         ld a,(de)
  177.         sub '0'
  178.         ld (curdrive),a
  179.        
  180.         ;call initcontrol
  181.  
  182.         call showworkscreen
  183.        
  184. mainloop
  185. ;1. тё╕ т√тюфшь
  186. ;2. цф╕ь ёюс√Єшх
  187. ;3. тё╕ ёЄшЁрхь
  188. ;4. юсЁрсрЄ√трхь ёюс√Єшх
  189.         call ahl_coords
  190.         call invarrzone ;шэтхЁЄшЁєхь яєэъЄ яюф ёЄЁхыъющ
  191.         call ahl_coords
  192.         call showline ;Ёшёєхь эютє■ ышэш■
  193.         call ahl_coords
  194.         call showwindow ;Ёшёєхь эютюх юъэю
  195.         call ahl_coords
  196.         call showcopywindow ;Ёшёєхь эютюх юъэю ъюяшЁютрэш 
  197.         call ahl_coords
  198.         call checkfirezone
  199.         ld (prarr_zone),a
  200.        
  201.         call setpgshapes
  202.  
  203.         call ahl_coords
  204.         call showbitmapcoords
  205.         call ahl_coords
  206.         call shapes_memorizearr
  207.         call ahl_coords
  208.         call shapes_prarr ;Ёшёєхь ёЄЁхыъє
  209.        
  210.         call waitsomething ;т ¤Єю тЁхь  ёЄЁхыър тшфэр
  211. ;ўЄю-Єю шчьхэшыюё№ - ёЄшЁрхь ёЄЁхыъє ш ёЄрЁюх юъэю, фтшурхь ёЄЁхыъє, Ёшёєхь эютюх юъэю ш ёЄЁхыъє
  212.  
  213.         call setpgshapes
  214.        
  215.         call ahl_oldcoords
  216.         call shapes_rearr ;ёЄшЁрхь ёЄЁхыъє
  217.         call ahl_oldcoords
  218.         call showcopywindow ;ёЄшЁрхь ёЄрЁюх юъэю ъюяшЁютрэш 
  219.         call ahl_oldcoords
  220.         call showwindow ;ёЄшЁрхь ёЄрЁюх юъэю
  221.         call ahl_oldcoords
  222.         call showline ;ёЄшЁрхь ёЄрЁє■ ышэш■
  223.         call ahl_oldcoords
  224.         call invarrzone ;тюёёЄрэртыштрхь (шэтхЁЄшЁєхь) яєэъЄ яюф ёЄЁхыъющ
  225.        
  226.         call control_mousebuttons
  227.         call control_keys
  228.  
  229.         jp mainloop
  230.        
  231. ahl_coords
  232.         ld a,(arry)
  233.         ld hl,(arrx)
  234.         ret
  235. ahl_oldcoords
  236.         ld a,(oldarry)
  237.         ld hl,(oldarrx)
  238.         ret
  239.  
  240. showline
  241. ;hl=x эр ¤ъЁрэх
  242. ;a=y эр ¤ъЁрэх
  243. curlinestate=$+1
  244.         ld c,0
  245.         dec c
  246.         ret nz
  247.         call checkfirezone
  248.         cp ZONE_WORK
  249.         ret nz
  250. ;out: bc=x cur, de=y cur т сшЄь¤ях (ё ъышяшЁютрэшхь яю workzone)          
  251.         ;push bc
  252.         ;push de
  253.         ld (curlinex2),bc
  254.         ld (curliney2),de
  255.        
  256. curlinex=$+1
  257.         ld bc,-1 ;яю єьюыўрэш■ ышэш  ўхЁхч shift эхфюёЄєяэр
  258. curliney=$+1
  259.         ld de,0
  260. ;bc=x т bitmap
  261. ;de=y т bitmap
  262.         call calccoords_frombitmapcoords_noclip ;hl=x, de=y
  263.  
  264.         push hl ;x
  265.         push de ;y
  266.        
  267. curlinex2=$+1
  268.         ld bc,0
  269. curliney2=$+1
  270.         ld de,0
  271.         call calccoords_frombitmapcoords_noclip ;hl=x2, de=y2
  272.         ex de,hl ;hl=y2
  273.         push de
  274.         pop ix ;iy=x2
  275.  
  276.         pop de ;y
  277.         pop bc ;x
  278.        
  279.         call setpgshapes
  280. ;bc=x (т яыюёъюёЄш ¤ъЁрэр, эю ьюцхЄ с√Є№ юЄЁшЎрЄхы№э√ь)
  281. ;de=y (т яыюёъюёЄш ¤ъЁрэр, эю ьюцхЄ с√Є№ юЄЁшЎрЄхы№э√ь)
  282. ;ix=x2
  283. ;hl=y2
  284.         jp shapes_line
  285.        
  286. invarrzone
  287. ;шэтхЁЄшЁютрЄ№ яєэъЄ яюф ёЄЁхыъющ
  288. ;hl=x эр ¤ъЁрэх
  289. ;a=y эр ¤ъЁрэх
  290.         push af ;y
  291.         call checkfirezone
  292.         pop bc ;b=y
  293.         cp ZONE_LEFT
  294.         ret nz
  295.         ld a,b;(arry)
  296.         call calccurtool
  297.         ret nc ;эхЄ Єръющ Єєыч√
  298.         add a,a
  299.         add a,a
  300.         add a,a
  301.         add a,a
  302.         add a,workzoney
  303.         ld b,a ;y
  304.         ld c,0 ;x/8
  305.         ld de,#1004 ;d=hgt ;e=wid
  306.         call setpgshapes
  307.         jp shapes_invbox
  308.        
  309. control_mousebuttons
  310.         ld a,(mousebuttons)
  311.         cpl
  312.         and 7
  313.         cp 3
  314.         jr nc,mmb ;LMB+RMB шыш MMB
  315.         rra
  316.         jp c,fire
  317.         rra
  318.         jr c,rmb
  319.         ret ;эшъюуфр
  320.  
  321. isitclick
  322.         ld a,(oldmousebuttons)
  323.         cpl
  324.         and 7
  325.         ret ;nz=ъэюяъє єцх фхЁцрыш
  326.  
  327. mmb
  328.         call ahl_coords
  329.         call checkfirezone ;out: a=ъюф чюэ√
  330.         cp ZONE_WORK
  331.         jr z,mmb_work
  332.         cp ZONE_PAL
  333.         ret nz ;эх ярышЄЁр
  334.         call ahl_coords
  335.         sub palettey
  336.         cp 4*8
  337.         ret nc ;эх ярышЄЁр
  338.         rra
  339.         and #0c
  340.         ld c,a
  341.         ld a,l
  342.         srl h
  343.         rra
  344.         srl h
  345.         rra
  346.         srl h
  347.         rra
  348.         sub palettex8
  349.         ret c ;эх ярышЄЁр
  350.         ;a=x8-palettex8
  351.         add a,c
  352.         add a,a
  353.         ld l,a
  354.         ld h,0
  355.         ld bc,workpal
  356.         add hl,bc ;hl=єърчрЄхы№ эр Єхъє∙шщ ЎтхЄ т ярышЄЁх
  357.         ld (mmb_setpal_coloraddr),hl
  358.         ld a,(hl)
  359.         inc hl
  360.         ld h,(hl)
  361.         ld l,a
  362.         call editpal
  363. mmb_setpal_coloraddr=$+1
  364.         ld (0),hl
  365.         jp showworkscreen        
  366. mmb_work
  367. ;Ёшёютрэшх ёхЄъющ
  368. ;bc=x т bitmap, de=y т bitmap
  369.         ld a,(curcolor1)
  370.         ld (curcolorA),a
  371.         ld a,(curcolor2)
  372.         ld (curcolorB),a
  373.         ld a,(curtool1)
  374.         ld (curtool),a
  375.         xor a
  376.         ld (curmousebutton),a
  377.         jr fire_or_rmb_action_
  378.  
  379. rmb
  380.         ld a,(curcolor2)
  381.         ld (curcolorA),a
  382.         ld (curcolorB),a
  383.         ld a,(curtool2)
  384.         ld (curtool),a
  385.         ld a,1
  386.         ld (curmousebutton),a
  387.        
  388. fire_or_rmb_action_
  389.         call ahl_coords
  390.         call checkfirezone ;out: a=ъюф чюэ√
  391.         cp ZONE_LEFT
  392.         jp z,setcurtool
  393.         cp ZONE_PAL
  394.         jp z,setcurcolor
  395.         cp ZONE_NAVIGATOR
  396.         jp z,fire_or_rmb_navigator
  397.         cp ZONE_TOP
  398.         jp z,filemenu
  399.         cp ZONE_WORK
  400.         ret nz
  401.         xor a
  402.         ld (windowcopymode),a ;ьхэ хь ърЁЄшэъє - т√ъы■ўрхь Ёхцшь ъюяшЁютрэш 
  403. ;bc=x т bitmap, de=y т bitmap
  404.         ld a,(curtool)
  405.         cp TOOL_PENCIL
  406.         jp z,fire_or_rmb_pencil
  407.         cp TOOL_LINE
  408.         jp z,fire_or_rmb_line
  409.         cp TOOL_FILL
  410.         jp z,fire_or_rmb_fill
  411.         cp TOOL_WINDOW
  412.         jp z,fire_or_rmb_window
  413.         cp TOOL_BRUSH
  414.         jp z,fire_or_rmb_brush
  415.         ret
  416.  
  417. fire_or_rmb_fill
  418.         ld a,(curcolorA)
  419.         ex af,af'
  420.        ld a,(curcolorB)
  421.        call fillbitmap
  422.        call setpgs_scr
  423.        jp showbitmap
  424.        
  425. fire
  426.        ld a,(curcolor1)
  427.        ld (curcolorA),a
  428.        ld (curcolorB),a
  429.        ld a,(curtool1)
  430.        ld (curtool),a
  431.        xor a
  432.        ld (curmousebutton),a
  433.        jr fire_or_rmb_action_
  434.  
  435. fire_or_rmb_line
  436. ;bc=x т bitmap, de=y т bitmap
  437.        call isitclick
  438.         ret nz ;ъэюяъє єцх фхЁцрыш
  439.        ld hl,(curlinestate)
  440.        dec l
  441.        jr z,fire_or_rmb_line_finish
  442.        ld a,1
  443.        ld (curlinestate),a
  444.        ld (curlinex),bc
  445.        ld (curliney),de
  446.        ret
  447. fire_or_rmb_line_finish
  448.        ld hl,(curliney)
  449.        ld ix,(curlinex)
  450.        ld a,(curcolorA)
  451.        ex af,af'
  452.         ld a,(curcolorB)
  453.         call prlinebitmap
  454.         xor a
  455.         ld (curlinestate),a
  456.         jp showbitmap
  457.  
  458. fire_or_rmb_brush
  459. ;bc=x т bitmap, de=y т bitmap
  460.         ld (minx),bc
  461.         ld (maxx),bc
  462.         ld (miny),de
  463.         ld (maxy),de
  464.        
  465.         ;call ahl_oldcoords
  466.         ;call checkfirezone ;out: a=ъюф чюэ√
  467.         ;cp ZONE_WORK
  468.         ;jr nz,firebrushpixel ;ёЄрЁюх яюыюцхэшх с√ыю тэх Ёрсюўхщ чюэ√ - ышэш■ эхы№ч  (TODO ъышяшЁютрЄ№ ышэш■)
  469.  
  470.         call ahl_oldcoords
  471.         call calcbitmapcoords ;out: bc=x т bitmap, de=y т bitmap
  472.         push bc ;x2
  473.         push de ;y2
  474.         call ahl_coords
  475.         call calcbitmapcoords ;out: bc=x т bitmap, de=y т bitmap
  476.         ld (curlinex),bc
  477.         ld (curliney),de
  478.         pop hl ;y2
  479.         or a
  480.         sbc hl,de
  481.         ld (brushlinedy),hl
  482.         pop hl ;x2
  483.         or a
  484.         sbc hl,bc
  485.         ld (brushlinedx),hl
  486.        
  487. ;firebrushpixel
  488.         ;call ahl_coords
  489.         ;call calcbitmapcoords ;out: bc=x т bitmap, de=y т bitmap
  490. ;bc=x т bitmap, de=y т bitmap
  491.         call firepixelpp
  492.         dec bc
  493.         call firepixelpp
  494.         dec de
  495.         call firepixelpp
  496.         inc bc
  497.         call firepixelpp
  498.         inc bc
  499.         call firepixelpp
  500.         inc de
  501.         call firepixelpp
  502.         inc de
  503.         call firepixelpp
  504.         dec bc
  505.         call firepixelpp
  506.         dec bc
  507.         call firepixelpp
  508.        
  509.         jp fire_scrupdate
  510.        
  511. firepixelpp
  512.         call checkminmaxxy
  513. ;bc=x т bitmap (эх яюЁЄшЄё )
  514. ;de=y т bitmap (эх яюЁЄшЄё )
  515.         ;jr $
  516.         push bc
  517.         push de
  518. brushlinedx=$+2
  519.         ld ix,0
  520.         add ix,bc
  521. brushlinedy=$+1
  522.         ld hl,0
  523.         add hl,de
  524.        
  525.         push bc
  526.         push de
  527.         push ix
  528.         pop bc
  529.         ex de,hl
  530.         call checkminmaxxy ;яюЁЄшЄ hl
  531.         ex de,hl
  532.         pop de
  533.         pop bc
  534.  
  535.         ld a,(curcolorA)
  536.         ex af,af'
  537.        ld a,(curcolorB)
  538.        ;call setpixel_fast_coloraa
  539.        call prlinebitmap
  540.  
  541.        pop de
  542.        pop bc
  543.        ret
  544.  
  545. fire_or_rmb_pencil        
  546. ;bc=x т bitmap, de=y т bitmap (тёхуфр яюыюцшЄхы№э√х, Є.ъ. ь√ т workzone - TODO яЁш єфхЁцрэшш Ёхцшьр Ёшёютрэш  єўхёЄ№ юЄЁшЎрЄхы№э√х)
  547.        ld (minx),bc
  548.        ld (maxx),bc
  549.        ld (miny),de
  550.        ld (maxy),de
  551.        
  552.        ;call ahl_oldcoords
  553.        ;call checkfirezone ;out: a=ъюф чюэ√
  554.        ;cp ZONE_WORK
  555.        ;jr nz,firepixel ;ёЄрЁюх яюыюцхэшх с√ыю тэх Ёрсюўхщ чюэ√ - ышэш■ эхы№ч 
  556. fireline
  557.        ;ld a,#fe
  558.        ;in a,(#fe)
  559.         ld a,(cur_cs_halfrow)
  560.        rra ;Caps Shift
  561.        jr c,fireline_noshift
  562.        ld bc,(curlinex)
  563.        ld a,b
  564.        inc a
  565.        ret z ;#ffxx - эхЄ яЁхф√фє∙хщ Єюўъш
  566.        ld de,(curliney)
  567.        jr fireline_noshiftq
  568. fireline_noshift
  569.        call ahl_oldcoords
  570.        call calcbitmapcoords ;out: bc=x т bitmap, de=y т bitmap
  571. fireline_noshiftq
  572.        call checkminmaxxy
  573.        push bc ;x2
  574.        push de ;y2
  575.        call ahl_coords
  576.        call calcbitmapcoords ;out: bc=x т bitmap, de=y т bitmap
  577.        ld (curlinex),bc
  578.        ld (curliney),de
  579.        call checkminmaxxy
  580.        pop hl ;y2
  581.        pop ix ;x2
  582.        ld a,(curcolorA)
  583.        ex af,af'
  584.         ld a,(curcolorB)
  585.         call prlinebitmap
  586.        
  587.         if 1==0
  588.        
  589.         jr fire_scrupdate
  590.        
  591. firepixel
  592.         call ahl_coords
  593.         call calcbitmapcoords ;out: bc=x т bitmap, de=y т bitmap
  594.         call checkminmaxxy
  595. ;bc=x т bitmap (эх яюЁЄшЄё )
  596. ;de=y т bitmap (эх яюЁЄшЄё )
  597.         ld a,(curcolorA)
  598.         ex af,af'
  599.        ld a,(curcolorB)
  600.        call setpixel_fast_coloraa
  601.        
  602.        endif
  603.        
  604. fire_scrupdate
  605. ;юсэютшЄ№ ўрёЄ№ ¤ъЁрэр
  606. ;bc=minx
  607. ;de=miny
  608. ;hl=maxx, maxy
  609.        call setpgs_scr
  610. minx=$+1
  611.        ld bc,0
  612. miny=$+1
  613.        ld de,0
  614.        call calccoords_frombitmapcoords ;hl=x,a=y(min)
  615.        dup 3
  616.        srl h
  617.        rr l
  618.        edup
  619.        push af
  620.        push hl ;x/8(min)
  621. maxx=$+1
  622.        ld bc,0
  623. maxy=$+1
  624.        ld de,0
  625. ;юЄёхърхь ъююЁфшэрЄ√ ётхЁїє, ўЄюс√ эх фхырЄ№ ¤Єю ърцф√щ Ёрч т checkminmaxxy
  626.        ld hl,(curbitmapwid_edit)
  627.        dec hl
  628.        call minhl_bc_tobc
  629.        ld hl,(curbitmaphgt)
  630.        dec hl
  631.        or a
  632.        sbc hl,de
  633.        add hl,de
  634.        jr nc,$+3 ;de<=hl
  635.        ex de,hl
  636.        call calccoords_frombitmapcoords ;hl=x,a=y(max)
  637.        dup 3
  638.        srl h
  639.        rr l
  640.        edup
  641.        inc hl ;hl=x/8(max) ё юъЁєуыхэшхь т сюы№°є■ ёЄюЁюэє
  642.        pop de ;x/8(min)
  643.        pop bc ;y(min)
  644.        inc a ;y(max) ё юъЁєуыхэшхь т сюы№°є■ ёЄюЁюэє
  645.        sub b ;y(max)-y(min)
  646.         ;jr z,$ ;ret z
  647.        ld hy,a ;hy=hgt
  648.        ld a,l ;x/8(max) ё юъЁєуыхэшхь т сюы№°є■ ёЄюЁюэє
  649.        sub e ;x/8(min)
  650.         ;jr z,$ ;ret z
  651.        ld lx,a ;lx=wid(chr)
  652.        ld l,e
  653.        ld h,b
  654.        push hl ;h=y эр ¤ъЁрэх, l=x эр ¤ъЁрэх
  655.        ex de,hl
  656.        add hl,hl
  657.        add hl,hl
  658.        add hl,hl ;hl=x(min)
  659.        ld a,b ;a=y(min)
  660.        call calcbitmapcoords
  661.        ld h,b
  662.        ld l,c ;hl=x т bitmap ;de=y т bitmap
  663.        pop bc ;b=y эр ¤ъЁрэх, c=x эр ¤ъЁрэх
  664.        jp prbitmapbox
  665.  
  666. setcurcolor
  667.        call isitclick
  668.         ret nz ;ъэюяъє єцх фхЁцрыш
  669.        ld a,(curmousebutton)
  670.        or a
  671.        ld de,curcolor1
  672.        jr z,$+5
  673.        ld de,curcolor2
  674.        call ahl_coords
  675.        sub palettey
  676.        rra
  677.        and #0c
  678.        ld bc,-palettex8*8
  679.        add hl,bc
  680.        srl l
  681.        srl l
  682.        srl l
  683.        add a,l
  684.        ld (de),a
  685.        jp showcurcolor
  686.        
  687. checkfirecoords
  688. ;hl=x эр ¤ъЁрэх, a=y эр ¤ъЁрэх
  689. ;out: CY=тэх сшЄь¤яр
  690. ;bc=x т bitmap, de=y т bitmap
  691.        call calcbitmapcoords ;out: bc=x т bitmap, de=y т bitmap
  692.        ld hl,(curbitmapwid_edit)
  693.        scf
  694.        sbc hl,bc
  695.        ret c ;x>(bitmapwid-1) => x>=bitmapwid
  696.        ld hl,(curbitmaphgt)
  697.        scf
  698.        sbc hl,de
  699.        ret ;CY: y>(bitmaphgt-1) => y>=bitmaphgt
  700.  
  701. checkminmaxxy
  702. ;bc=x, de=y (ьюуєЄ с√Є№ юЄЁшЎрЄхы№э√х) (эх яюЁЄ Єё )
  703.        bit 7,b
  704.        jr nz,checkminmaxxy_nox
  705.        ld hl,(maxx)
  706.        or a
  707.        sbc hl,bc
  708.        jr nc,$+6
  709.        ld (maxx),bc
  710.        ld hl,(minx)
  711.        or a
  712.        sbc hl,bc
  713.        jr c,$+6
  714.        ld (minx),bc
  715.        jr checkminmaxxy_xq
  716. checkminmaxxy_nox
  717.        ld hl,0
  718.        ld (minx),hl
  719. checkminmaxxy_xq
  720.        bit 7,d
  721.        jr nz,checkminmaxxy_noy
  722.        ld hl,(maxy)
  723.        or a
  724.        sbc hl,de
  725.        jr nc,$+6
  726.        ld (maxy),de
  727.        ld hl,(miny)
  728.        or a
  729.        sbc hl,de
  730.        ret c
  731.        ld (miny),de
  732.        ret
  733. checkminmaxxy_noy
  734.        ld hl,0
  735.        ld (miny),hl
  736.        ret
  737.        
  738. control_keys
  739. key=$+1
  740.        ld a,0
  741.        cp key_left
  742.        jp z,control_keys_left
  743.        cp key_down
  744.        jp z,control_keys_down
  745.        cp key_up
  746.        jp z,control_keys_up
  747.        cp key_right
  748.        jp z,control_keys_right
  749.        cp '+'
  750.        jp z,control_keys_plus
  751.        cp '-'
  752.        jp z,control_keys_minus
  753.        cp 'c'
  754.        jp z,control_keys_clear
  755.        cp 'w'
  756.        jp z,window_allpicture
  757.        cp 'v'
  758.        jp z,window_copy
  759.        cp 'V'
  760.        jp z,window_copy
  761.        cp 'z'
  762.        jp z,control_keys_swapcolors
  763.        cp 'x'
  764.        jp z,window_mirrhor
  765.        cp 'y'
  766.        jp z,window_mirrver
  767.        cp key_redraw
  768.        jp z,showworkscreen
  769.        sub '1'
  770.        cp 4
  771.        jr c,control_keys_selectbmp
  772.        
  773.        ret
  774.        
  775. control_keys_swapcolors
  776.        ld hl,(curcolor1) ;1, 2
  777.        ld a,l
  778.        ld l,h
  779.        ld h,a
  780.        ld (curcolor1),hl
  781.        jp showworkscreen
  782.        
  783. control_keys_selectbmp
  784.        call selectbmp
  785.        call kill_unfinished_shapes
  786.        jp showworkscreen ;control_scale_checksize
  787.  
  788. kill_unfinished_shapes
  789.        xor a
  790.        ld (curlinestate),a ;єсштрхь эхфююяЁхфхы╕ээє■ ышэш■
  791.        dec a
  792.        ld (curlinex+1),a ;юЄьхэ хь эрўры№эє■ Єюўъє ышэшш ўхЁхч shift
  793.         ld a,(curwindowstate)
  794.         dec a
  795.         call z,clearwindowstate ;єсштрхь эхфююяЁхфхы╕ээюх юъэю
  796.        ret
  797.  
  798. findcurbitmap
  799. ;a=эюьхЁ
  800.        ld c,a
  801.        ld b,0
  802.        ld de,bitmapstruct_sz
  803.        call mulbcde_ahl
  804.        ld bc,bitmaps
  805.        add hl,bc
  806.        ret
  807.        
  808. control_keys_right
  809.        call control_getscrollvalue ;de=scrollvalue
  810.        ld hl,(curbitmapxscroll)
  811.        add hl,de
  812. control_keys_setxscroll
  813.        ld (curbitmapxscroll),hl
  814. control_scroll_checksize
  815.        call control_scroll_checksizepp
  816.        call shownavigator
  817.        call showtitle
  818.        jp showbitmap
  819. control_scroll_checksizepp
  820.        ld hl,+(workzonex8+workzonewid8)*8 ;hl=x
  821.        ld a,workzoney+workzonehgt ;a=y        
  822.        call calcbitmapcoords ;out: bc=x т bitmap, de=y т bitmap
  823.  
  824.        ld hl,(curbitmaphgt)
  825.        or a
  826.        sbc hl,de
  827.        jr nc,control_scroll_nocorrecty ;hgt>=y
  828. ;hl<0 (ёъюы№ъю ыш°эшї яшъёхыхщ bitmap яю y)
  829. ;яюёўшЄрЄ№ bitmaphgt-(workzonehgt/scale) = bitmaphgt+hl
  830.        ld de,workzonehgt
  831.        call scalescrcoords
  832.        ld hl,(curbitmaphgt)
  833.        call subhldecheck0
  834.        ld (curbitmapyscroll),hl
  835. control_scroll_nocorrecty
  836.        ld hl,(curbitmapwid_edit)
  837.        or a
  838.        sbc hl,bc
  839.        ret nc ;wid>=x
  840. ;hl<0 (ёъюы№ъю ыш°эшї яшъёхыхщ bitmap яю x)
  841. ;яюёўшЄрЄ№ bitmapwid-(workzonewid/scale) = bitmapwid+hl
  842.        ld de,workzonewid8*8
  843.        call scalescrcoords
  844.        ld hl,(curbitmapwid_edit)
  845.        call subhldecheck0
  846.        ld (curbitmapxscroll),hl
  847.        ret
  848.        
  849. control_keys_left
  850.        call control_getscrollvalue ;de=scrollvalue
  851.        ld hl,(curbitmapxscroll)
  852.        ;or a
  853.        ;sbc hl,de
  854.        ;jr nc,$+5
  855.        ;ld hl,0
  856.        call subhldecheck0
  857.        jr control_keys_setxscroll
  858.        ;ld (curbitmapxscroll),hl
  859.        ;jr control_scroll_checksize
  860.        
  861. control_keys_down
  862.        call control_getscrollvalue ;de=scrollvalue
  863.        ld hl,(curbitmapyscroll)
  864.        add hl,de
  865. control_keys_setyscroll
  866.        ld (curbitmapyscroll),hl
  867.        jr control_scroll_checksize
  868.  
  869. control_keys_up
  870.        call control_getscrollvalue ;de=scrollvalue
  871.        ld hl,(curbitmapyscroll)
  872.        ;or a
  873.        ;sbc hl,de
  874.        ;jr nc,$+5
  875.        ;ld hl,0
  876.        call subhldecheck0
  877.        jr control_keys_setyscroll
  878.        ;ld (curbitmapyscroll),hl
  879.        ;jp control_scroll_checksize
  880.  
  881. control_getscrollvalue
  882.        ld de,64
  883.        jp scalescrcoords
  884.        
  885. control_scale_checksize
  886.        call control_scroll_checksizepp
  887.  
  888.        call setpgshapes
  889.  
  890.        ld bc,workzoney*256 + workzonex8 ;b=y ;c=x/8
  891.        ld de,workzonehgt*256 + workzonewid8 ;d=hgt ;e=wid8
  892.        ld a,%00111111 ;a=%33210210
  893.        call shapes_fillbox
  894.        jp control_scroll_checksize;showworkscreen
  895. control_keys_plus
  896.        ld a,(curbitmapscale)
  897.        inc a
  898.        cp 5+1
  899.        jr c,$+3
  900.        dec a
  901.        ld (curbitmapscale),a
  902.        jp control_scroll_checksize ;эх эєцэю яхЁхяхўрЄ√трЄ№ яєёЄюх ьхёЄю
  903. control_keys_minus
  904.        ld a,(curbitmapscale)
  905.        dec a
  906.        jr nz,$+3
  907.        inc a
  908.        ld (curbitmapscale),a
  909.        jp control_scale_checksize
  910.  
  911. control_keys_clear
  912.        ld a,(curwindowstate)
  913.        cp 2
  914.        ret nz
  915.        ld bc,(curwindowx) ;bc=x т bitmap
  916.        ld de,(curwindowy) ;de=y т bitmap
  917.        ld hl,(curwindowwid) ;hl=wid
  918.        ld ix,(curwindowhgt) ;ix=hgt
  919.        ld a,(curcolor2)
  920.        ex af,af'
  921.         ld a,(curcolor2)
  922. ;a=color1
  923. ;a'=color2
  924.         call bitmap_fillbox
  925.         jp showbitmap
  926.  
  927. checkfirezone
  928. ;hl=x
  929. ;a=y
  930. ;out: a=ъюф чюэ√ ш фы  ZONE_WORK: bc=x т bitmap, de=y т bitmap
  931.         ld c,a
  932.         cp workzoney
  933.         ld a,ZONE_TOP
  934.         ret c ;top
  935.         ld a,ZONE_LEFT
  936.         ld de,workzonex8*8
  937.         ;or a
  938.         sbc hl,de
  939.         add hl,de
  940.         ret c ;left
  941.         ld de,+(workzonex8+workzonewid8)*8
  942.         ;or a
  943.         sbc hl,de
  944.         add hl,de
  945.         ld a,c
  946.         jr nc,checkfirezone_right ;right
  947.         call checkfirecoords ;CY=тэх сшЄь¤яр
  948.         ld a,ZONE_NO
  949.         ret c ;bc=x т bitmap, de=y т bitmap
  950.         ld a,ZONE_WORK
  951.         ret
  952. checkfirezone_right
  953.         cp navigatory
  954.         ld a,ZONE_PAL
  955.         ret c ;pal
  956.         cp navigatory+navigatorhgt
  957.         ld a,ZONE_NAVIGATOR
  958.         ret c ;navigator
  959.         ld a,ZONE_RIGHT
  960.         ret ;right
  961.  
  962. showworkscreen
  963.         call setpgs_scr
  964.         call setpgshapes
  965.         ld a,backcolor
  966.         call shapes_cls
  967.  
  968.         call showtitle
  969.         call showbitmap
  970.         call showtools
  971.         call showcurcolor
  972.         call showpalette
  973.  
  974.         jp shownavigator
  975.        
  976. showcurcolor
  977.         call setpgshapes
  978.  
  979.         ld de,256*colorhgt+2
  980.         push de ;y
  981.         ld bc,256*colory+colorx8
  982.         ld a,(curcolor1)
  983.         call shapes_colortocolormask
  984.         call shapes_prbox
  985.         ;ld de,256*colorhgt+2
  986.         pop de ;y
  987.         ld bc,256*colory+colorx8+2
  988.         ld a,(curcolor2)
  989.         call shapes_colortocolormask
  990.         jp shapes_prbox
  991.  
  992. calccurtool
  993. ;a=y
  994. ;юяЁхфхы хЄ эюьхЁ Єєыч√ яю ъююЁфшэрЄрь ёЄЁхыъш
  995. ;out: a=tool, NC: a>=NTOOLS
  996.         sub 8
  997.         rra
  998.         rra
  999.         rra
  1000.         rra
  1001.         and #0f
  1002.         cp NTOOLS
  1003.         ret
  1004.  
  1005. setcurtool
  1006.         call isitclick
  1007.         ret nz ;ъэюяъє єцх фхЁцрыш
  1008.         xor a
  1009.         ld (curlinestate),a ;юЄьхэшЄ№ эхфююяЁхфхы╕ээє■ ышэш■
  1010. curmousebutton=$+1 ;0=LMB
  1011.         or 0
  1012.         ld hl,curtool1
  1013.         jr z,$+5
  1014.         ld hl,curtool2
  1015.         ld a,(arry)
  1016.         call calccurtool
  1017.         ret nc ;>=NTOOLS
  1018.         ld (hl),a
  1019.         cp TOOL_WINDOW
  1020.         jr nz,showcurtool
  1021.         ld a,1
  1022.         ld (windowcopymode),a
  1023.         ;jp showcurtool
  1024. showcurtool
  1025.         call setpgshapes
  1026.  
  1027.         ld bc,256*(colory-10)+colorx8+1
  1028.         call calcscr_from_xchr_y        
  1029.         ld de,text_ntool
  1030.         ld a,(curtool1)
  1031.         add a,'0'
  1032.         ld (de),a
  1033.         inc de
  1034.         inc de
  1035.         ld a,(curtool2)
  1036.         add a,'0'
  1037.         ld (de),a
  1038.         dec de
  1039.         dec de
  1040.         ld lx,backcolor
  1041.         jp shapes_prtext48ega_oncolor
  1042.  
  1043. text_ntool
  1044.         db "0 0",0
  1045.        
  1046. showtools
  1047.         call setpgshapes
  1048.  
  1049.         ld de,ttools
  1050.         ld bc,256*workzoney+0
  1051. showtools0
  1052.         push bc
  1053.         push de
  1054.         ld de,#1004
  1055.         ld a,backcolor
  1056.         call shapes_prbox
  1057.         pop de
  1058.         pop bc
  1059.         push bc
  1060.         ld a,b
  1061.         add a,4
  1062.         ld b,a
  1063.         call calcscr_from_xchr_y
  1064.         set 5,h ;эр 4 яшъёхы  яЁртхх
  1065.         call shapes_prtext48ega_black
  1066.         pop bc
  1067.         ld a,b
  1068.         add a,#10
  1069.         ld b,a
  1070.         inc de
  1071.         ld a,(de)
  1072.         inc a
  1073.         jr nz,showtools0
  1074.         ret
  1075.  
  1076. showpalette
  1077.         call setpgshapes
  1078.  
  1079.         xor a
  1080.         ld b,workzoney ;b
  1081.         ld e,4
  1082. prpal0
  1083.         ld c,palettex8
  1084.         ld d,4
  1085. prpal1
  1086.         push af
  1087.         push de
  1088.         ld de,#0801 ;hgt, wid(chr)
  1089.         push bc
  1090.         call shapes_colortocolormask
  1091.         call shapes_prbox
  1092.         pop bc
  1093.         pop de
  1094.         pop af
  1095.         inc c
  1096.         inc a
  1097.         dec d
  1098.         jr nz,prpal1
  1099.         push af
  1100.         ld a,b
  1101.         add a,8
  1102.         ld b,a ;y
  1103.         pop af
  1104.         dec e
  1105.         jr nz,prpal0
  1106.         ret
  1107.  
  1108. showtitle
  1109.         call setpgshapes
  1110.  
  1111.         ld bc,0 ;b=y ;c=x/8
  1112.         ld de,titlehgt*256 + scrwid8 ;d=hgt ;e=wid8
  1113.         xor a ;a=%33210210
  1114.         call shapes_fillbox
  1115.         ld hl,prchar48ega_white
  1116.         ld (prchar48ega_colorproc),hl
  1117.         ld hl,scrbase ;scr
  1118.         ld a,(curbmp)
  1119.         add a,'1'
  1120.         call shapes_prchar48ega
  1121.         ld a,':'
  1122.         call shapes_prchar48ega
  1123.         ld de,curpicname
  1124.         call shapes_prtext48ega
  1125.         ld a,' '
  1126.         call shapes_prchar48ega
  1127.         ld lx,0 ;Їюэют√щ ЎтхЄ
  1128.         ex de,hl
  1129.         ld hl,(curbitmapwid_edit)
  1130.         call shapes_prnum
  1131.         ex de,hl
  1132.         ld a,'x'
  1133.         call shapes_prchar48ega
  1134.         ex de,hl
  1135.         ld hl,(curbitmaphgt)
  1136.         call shapes_prnum
  1137.         ex de,hl
  1138.         ld a,' '
  1139.         call shapes_prchar48ega
  1140.         ex de,hl
  1141.         ld a,(curbitmapscale)
  1142.         ld l,a
  1143.         ld h,0
  1144.         add hl,hl
  1145.         add hl,hl
  1146.         ld bc,tscalesnames-4
  1147.         add hl,bc
  1148.         ex de,hl
  1149.         call shapes_prtext48ega
  1150.        
  1151.         ld a,'%'
  1152.         jp shapes_prchar48ega
  1153.        
  1154.        
  1155. tscalesnames
  1156.         db " 25",0
  1157.         db " 50",0
  1158.         db "100",0
  1159.         db "200",0
  1160.         db "400",0
  1161.        
  1162. showbitmap
  1163.         ld hl,workpal
  1164.         call copytemp_setpal
  1165.         call setpgs_scr
  1166.         ld hl,(curbitmapwid_edit)
  1167.         ld de,(curbitmaphgt)
  1168.         ld a,d
  1169.         or e
  1170.         ret z ;яєёЄющ сшЄь¤я
  1171.         call scalebitmapcoords ;hl=wid, de=hgt
  1172.         inc hl
  1173.         srl h
  1174.         rr l
  1175.         inc hl
  1176.         srl h
  1177.         rr l
  1178.         inc hl
  1179.         srl h
  1180.         rr l ;wid(chr)
  1181.         ld bc,workzonewid8
  1182.         or a
  1183.         sbc hl,bc
  1184.         add hl,bc
  1185.         jr nc,$+3 ;wid>=workzonewid => схЁ╕ь °шЁшэє Ёрсюўхщ чюэ√
  1186.         ld c,l ;wid<workzonewid => схЁ╕ь wid сшЄь¤яр
  1187.         ld lx,c;workzonewid8 ;lx=wid(chr)
  1188.         ex de,hl
  1189.         ld bc,workzonehgt
  1190.         or a
  1191.         sbc hl,bc
  1192.         add hl,bc
  1193.         jr nc,$+3 ;hgt>=workzonehgt => схЁ╕ь °шЁшэє Ёрсюўхщ чюэ√
  1194.         ld c,l ;hgt<workzonehgt => схЁ╕ь hgt сшЄь¤яр
  1195.         ld hy,c;workzonehgt ;hy=hgt
  1196.        
  1197.         ld hl,(curbitmapxscroll) ;hl=x т bitmap
  1198.         ld de,(curbitmapyscroll) ;de=y т bitmap
  1199.         ld bc,workzoney*256+workzonex8 ;c=x/8 эр ¤ъЁрэх, b=y эр ¤ъЁрэх
  1200.         jp prbitmapbox
  1201.  
  1202. calcscr_from_xchr_y
  1203. ;b=y
  1204. ;c=x/8
  1205. ;out: hl=scraddr
  1206. ;эх яюЁЄшЄ de
  1207.          ld a,c
  1208. calcscr_from_xchr_ya
  1209.         ld l,b
  1210.         ld h,0
  1211.          ld b,scrbase/256/8
  1212.          ld c,l
  1213.         add hl,hl
  1214.         add hl,hl
  1215.         add hl,bc;de ;y*5
  1216.         add hl,hl
  1217.         add hl,hl
  1218.         add hl,hl ;y*40 + scrbase
  1219.          add a,l
  1220.          ld l,a
  1221.          ret nc
  1222.          inc h
  1223.         ret
  1224.  
  1225. cls
  1226.         call setpgs_scr
  1227.         call setpgshapes
  1228.         xor a
  1229.         jp shapes_cls
  1230.  
  1231.         align 256
  1232. tmirror
  1233. _=0
  1234.         dup 256
  1235. _0=_&1
  1236. _1=_>>1&1
  1237. _2=_>>2&1
  1238. _3=_>>3&1
  1239. _4=_>>4&1
  1240. _5=_>>5&1
  1241. _6=_>>6&1
  1242. _7=_>>7&1
  1243.         db (_0<<7)+(_1<<6)+(_2<<5)+(_3<<4)+(_4<<3)+(_5<<2)+(_6<<1)+(_7)
  1244. _=_+1
  1245.         edup
  1246.  
  1247. ttools
  1248.         db "Window",0
  1249.         db "Pencil",0
  1250.         db "Brush",0
  1251.         db "Line",0
  1252.         db "Fill",0
  1253.         db "Text",0
  1254.         db -1
  1255.        
  1256. curtool
  1257.         db 0
  1258. curtool1
  1259.         db 1
  1260. curtool2
  1261.         db 0
  1262. curcolorA
  1263.         db 0
  1264. curcolorB
  1265.         db 0
  1266. curcolor1
  1267.         db 15
  1268. curcolor2
  1269.         db 0
  1270.    
  1271. prarr_zone
  1272.         db 0
  1273.  
  1274. setpgs_scr
  1275. setpgs_scr_low=$+1
  1276.         ld a,0;pgscr0_0 ;scr0_0
  1277.         SETPG32KLOW
  1278. setpgs_scr_high=$+1
  1279.         ld a,0;pgscr0_1 ;scr0_1
  1280.         SETPG32KHIGH
  1281.         ret
  1282.  
  1283. setpgshapes
  1284.         push bc
  1285. curpgshapes=$+1
  1286.         ld a,0;pgshapes
  1287.         SETPG16K
  1288.         pop bc
  1289.         ret
  1290.  
  1291. setpgpal
  1292.         push bc
  1293. curpgpal=$+1
  1294.         ld a,0;pgshapes
  1295.         SETPG32KLOW
  1296.         pop bc
  1297.         ret
  1298.  
  1299. setpgtemp
  1300.         push bc
  1301. curpgtemp=$+1
  1302.         ld a,0;pgshapes
  1303.         SETPG32KHIGH
  1304.         pop bc
  1305.         ret
  1306.  
  1307.         include "window.asm"
  1308.         include "navigator.asm"
  1309.        
  1310.         include "pal.asm"
  1311.        
  1312.         include "bitmap.asm"
  1313.  
  1314.         include "prbitmap.asm"
  1315.        
  1316.         include "control.asm"
  1317.         include "math.asm"
  1318.        
  1319.         include "files.asm"
  1320.  
  1321. skipword
  1322. ;hl=string
  1323. ;out: hl=terminator/space addr
  1324. getword0
  1325.         ld a,(hl)
  1326.         or a
  1327.         ret z
  1328.         cp ' '
  1329.         ret z
  1330.         inc hl
  1331.         jr getword0
  1332.  
  1333. skipspaces
  1334. ;hl=string
  1335. ;out: hl=after last space
  1336.         ld a,(hl)
  1337.         cp ' '
  1338.         ret nz
  1339.         inc hl
  1340.         jr skipspaces
  1341.  
  1342. ;hl = poi to filename in string
  1343. findlastslash.
  1344. nfopenfnslash.
  1345.         ld d,h
  1346.         ld e,l ;de = after last slash
  1347. ;find last slash
  1348. nfopenfnslash0.
  1349.         ld a,[hl]
  1350.         inc hl
  1351.         or a
  1352.         jr z,nfopenfnslashq.
  1353.         cp '/'
  1354.         jr nz,nfopenfnslash0.
  1355.         jr nfopenfnslash.
  1356. nfopenfnslashq.
  1357. ;de = after last slash or beginning of path
  1358.         ret
  1359.  
  1360. wordbuf
  1361.         ds MAXCMDSZ+1
  1362.        
  1363. pathbuf_forBDOS
  1364.         ds MAXPATH_sz ;ёхщўрё шёяюы№чєхЄё  Єюы№ъю яЁш шэшЎшрышчрЎшш (яЁюўшЄрЄ№ Єхъє∙шщ фЁрщт)
  1365.  
  1366.         display "$ before align=",/h,$
  1367.        
  1368.         .align 256
  1369. ;;;;;;;;;;;;;;;;;;; ЄрсышЎ√ фы  prbitmap
  1370. tpixelrecode
  1371. ;%00003210 => %33210210
  1372.         dup 256
  1373. _3=$&8
  1374. _210=$&7
  1375.         db (_3*#18) + (_210*#09)
  1376.         edup
  1377.        
  1378. tpixelrecodeLEFT
  1379. ;%00003210 => %.3...210
  1380.         dup 256
  1381. _3=$&8
  1382. _210=$&7
  1383.         db (_3*#08) + (_210*#01)
  1384.         edup
  1385.        
  1386. tpixelrecodeRIGHT
  1387. ;%00003210 => %3.210...
  1388.         dup 256
  1389. _3=$&8
  1390. _210=$&7
  1391.         db (_3*#10) + (_210*#08)
  1392.         edup
  1393.        
  1394. ;;;;;;;;;;;;;;;;;;; ЄрсышЎ√ фы  ярышЄЁ√
  1395. tsin
  1396.         incbin "tsin200"
  1397. tarcsin
  1398.         incbin "tarcsin"
  1399. tsqr
  1400. ;рЁуєьхэЄ +-0..127 (ёююЄтхЄёЄтєхЄ -1..+1)
  1401. ;Ёхчєы№ЄрЄ 0..127 (ёююЄтхЄёЄтєхЄ -1..+1)
  1402. _=0
  1403.         dup 128
  1404.         db (_*_)/128
  1405. _=_+1
  1406.         edup
  1407. _=128
  1408.         dup 128
  1409.         db (_*_)/128
  1410. _=_-1
  1411.         edup
  1412. tsqrt
  1413. ;рЁуєьхэЄ 0..255 (ёююЄтхЄёЄтєхЄ 0..2)
  1414. ;Ёхчєы№ЄрЄ 0..127 (ёююЄтхЄёЄтєхЄ 0..1) ш т√°х
  1415.         incbin "sqrtmax2"
  1416. tbitmappages
  1417.         display "tbitmappages=",tbitmappages
  1418.         ds bmpmaxpages,#7f
  1419.        
  1420. activeend
  1421.         display "activeend=",activeend
  1422.         ds #4000-$
  1423. SHAPES_begin
  1424.         include "prshapes.asm"
  1425.         include "prarrow.asm"
  1426.         include "prtext.asm"
  1427.         .align 256
  1428. font48
  1429.         incbin "64qua.fnt"
  1430. SHAPES_sz=$-SHAPES_begin
  1431.         display "Shapes size ",/d,SHAPES_sz," bytes"
  1432.        
  1433. gfxeditor_end
  1434.  
  1435.         display "Size ",/d,gfxeditor_end-gfxeditor_begin," bytes"
  1436.         display "Free (incl. stack) ",/d,#4000-activeend," bytes"
  1437.  
  1438.         savebin "scratch.com",gfxeditor_begin,gfxeditor_end-gfxeditor_begin
  1439.        
  1440.         ;LABELSLIST "..\us\user.l"
  1441.