Subversion Repositories NedoOS

Rev

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

  1. ;фюёЄєя ъ Їрщыютющ ёшёЄхьх Єюы№ъю ўхЁхч сєЇхЁ т #c000
  2. ;Єрь яюфъы■ўхэр pgtemp, Єрь ыхцшЄ фшЁхъЄюЁш  (р тю тЁхь  ўЄхэш /чряшёш Єрь file_buf, юэр цх яюфъы■ўхэр ё #4000, Єрь сєЇхЁ Єхъє∙хщ ёЄЁюъш ърЁЄшэъш - TODO уЁєчшЄ№ Єєфр)
  3. ;тю тЁхь  яхЁхсЁюёъш ёЄЁюъш т #4000 яюфъы■ўхэр pgtemp (Єрь сєЇхЁ Єхъє∙хщ ёЄЁюъш ърЁЄшэъш), р т #8000,#c000 яюфъы■ўхэ bitmap
  4. filelist_maxfiles=25
  5.  
  6. filelistx8=0
  7. filelisty=0
  8. filelistwid8=20
  9. filelisthgt=filelist_maxfiles*8
  10.  
  11. savex8=23
  12. savey=0
  13. savewid8=4
  14. savehgt=8
  15.  
  16. quitx8=36-3
  17. quity=100
  18. quitwid8=4+3
  19. quithgt=8
  20.  
  21. exitx8=36
  22. exity=192
  23. exitwid8=4
  24. exithgt=8
  25.  
  26. filenamex8=34
  27. filenamey=0
  28. filenamewid8=6 ;12 ёшьтюыют
  29. filenamehgt=8
  30.  
  31. drivesx8=22
  32. drivesy=16
  33. driveswid8=1
  34. driveshgt=20*8
  35.  
  36. catbuf=#c000
  37. scrbuf=#c000 ;for .scr
  38. file_buf=#ff00
  39. file_buf_end=file_buf+127
  40.  
  41. ; I    1    0      2    ╧Ёшчэръ ┬╠╨-Їрщыр - ёшьтюы√ 'BM'       (+)
  42. ;      2    2      4    ╨рчьхЁ ┬╠╨-Їрщыр (срщЄ)                (═└─╬ ╤╘╬╨╠╚╨╬┬└╥▄, ╫╚╥└╥▄ ═┼ ═╙╞═╬)
  43. ;      3    6      4    ╨хчхЁт (=0)                            (═└╠ ═┼ ═╙╞═╬)
  44. ;      4   10      4    ╤ьх∙хэшх т срщЄрї юЄ эрўрыр Їрщыр фю  
  45. ;                       эрўрыр юяшёрэш  ЁрёЄЁютюую шчюсЁрцхэш  (═└╠ ═┼ ═╙╞═╬, є эрё 118)
  46.                                                              
  47. ; II   5   14      4    ╨рчьхЁ ╬яшёрэш  ╚чюсЁрцхэш  (=40 WINDOWS) (═└╠ ═┼ ═╙╞═╬, тёхуфр 40)
  48. ;      6   18      4    ╪шЁшэр шчюсЁрцхэш  (т яшъёхырї)        (+)
  49. ;      7   22      4    ┬√ёюЄр шчюсЁрцхэш  (т яшъёхырї)        (+)
  50. ;      8   26      2    ╩юышўхёЄтю ЎтхЄют√ї яыюёъюёЄхщ (=1)    (═└╠ ═┼ ═╙╞═╬, тёхуфр 1)
  51. ;      9   28      2    ╩юышўхёЄтю сшЄ эр яшъёхы               (+ 1, 4, 8, 24 ┴╚╥)
  52. ;     10   30      4    ┬шф ёцрЄш  шэЇюЁьрЎшш (0,1 шыш 2)      (╧╬╩└ ╫╥╬ ┴┼╟ ╤╞└╥╚▀)
  53. ;     11   34      4    ╨рчьхЁ юсЁрчр ЁрёЄЁютюую шчюсЁрцхэш    (═└─╬ ╤╘╬╨╠╚╨╬┬└╥▄, ╫╚╥└╥▄ ═┼ ═╙╞═╬)
  54. ;     12   38      4    ╨хъюьхэфєхьюх уюЁшчюэ-юх ЁрчЁх°хэшх    (═└╠ ═┼ ═╙╞═╬)
  55. ;     13   42      4    ╨хъюьхэфєхьюх тхЁЄшъры№эюх ЁрчЁх°хэшх  (═└╠ ═┼ ═╙╞═╬)
  56. ;     14   46      4    ╩юышўхёЄтю ЎтхЄют т ярышЄЁх            (+)
  57. ;     15   50      4    ╩юышўхёЄтю трцэ√ї ЎтхЄют т ярышЄЁх     (═└╠ ═┼ ═╙╞═╬)
  58.  
  59. ;фры№°х шф╕Є ярышЄЁр (B, G, R, 0)
  60.  
  61. ;фры№°х шф╕Є ърЁЄшэър (фышэ√ ёЄЁюъ т срщЄрї ъЁрЄэ√ 4)
  62.  
  63.         macro READBYTE_A
  64.         inc ly
  65.         call m,readbyte_readbuf
  66.         ld a,(iy)
  67.         endm
  68.         macro READBYTE_E
  69.         inc ly
  70.         call m,readbyte_readbuf
  71.         ld e,(iy)
  72.         endm
  73.         macro READBYTE_D
  74.         inc ly
  75.         call m,readbyte_readbuf
  76.         ld d,(iy)
  77.         endm
  78.  
  79.         macro WRITEBYTE_A
  80.         ld (iy),a
  81.         inc ly
  82.         call m,writebyte_writebuf
  83.         endm
  84.  
  85. isfilename_act
  86.         ld a,(fcb_filename+8)
  87.         or #20
  88.         cp 'a'
  89.         ret
  90.  
  91. readfile_scr
  92. ;#c000=pgtemp
  93.         ld de,scrbuf
  94.         OS_SETDTA ;set disk transfer address = de
  95.         ld b,#1b00/128
  96. readfile_scr0
  97.         push bc
  98.         ld de,fcb
  99.         OS_FREAD
  100.         pop bc
  101.         djnz readfile_scr0
  102.        
  103.         call delbitmap ;єфрышЄ№ Єхъє∙є■ ърЁЄшэъє ш юётюсюфшЄ№ ёЄЁрэшўъш
  104.         ld hl,256
  105.         ld (curbitmapwid_edit),hl
  106.         ld hl,192
  107.         ld (curbitmaphgt),hl
  108.         call reserve_bmp_pages ;Єрь genmuldewid_ahl
  109.         ld hl,RSTPAL
  110.         ld de,workpal
  111.         ld bc,32
  112.         ldir
  113.        
  114.         ld de,0 ;y
  115.         ld hx,192
  116. readfile_scrlines0
  117.         ld lx,32
  118. readfile_scrline0
  119.         ld a,32
  120.         sub lx
  121.         ld c,a ;x(chr)
  122.         ld a,e
  123.         rla
  124.         rla
  125.         and %11100000
  126.         add a,c ;x(chr)
  127.         ld l,a
  128.         ld a,e
  129.         rra
  130.         rra
  131.         rra
  132.         xor e
  133.         and %00011000
  134.         xor e
  135.         and %00011111
  136.         add a,scrbuf/256
  137.         ld b,a ;bl=pixel addr
  138.         rra
  139.         rra
  140.         rra
  141.         and 3
  142.         add a,scrbuf/256+#18
  143.         ld h,a ;hl=attr addr
  144.         ld a,(hl) ;attr
  145.         and 7
  146.         bit 6,(hl) ;bright
  147.         jr z,$+4
  148.         or 8
  149.         ld (readfile_scr_ink),a
  150.         ld a,(hl) ;attr
  151.         rra
  152.         rra
  153.         rra
  154.         and 15
  155.         ld (readfile_scr_paper),a
  156.         ld h,b ;hl=pixels attr
  157. ;e  = %TTYYYyyy
  158. ;hl = %110TTyyy YYYxxxxx
  159.         ld a,c
  160.         add a,a
  161.         add a,a
  162.         add a,a
  163.         ld c,a
  164.         ld b,0 ;bc=x
  165.         ld a,(hl) ;pixels
  166.         push af
  167.         call calcbitmap_from_xy ;a=pg, hl=addr
  168.         ;push bc
  169.         SETPGBITMAPLOW
  170.         ;pop bc
  171.         pop af
  172.         scf
  173.         adc a,a
  174. readfile_scrchr00
  175. readfile_scr_paper=$+1
  176.         ld (hl),0
  177.         jr nc,$+4
  178. readfile_scr_ink=$+1
  179.         ld (hl),0
  180.         add a,a
  181.         ;inc bc
  182.         inc hl ;ёЄЁюър шьххЄ ъЁєуыє■ фышэє 256, Єръ ўЄю тё╕ т юфэющ ёЄЁрэшўъх
  183.         jr nz,readfile_scrchr00
  184.         dec lx
  185.         jr nz,readfile_scrline0
  186.         inc de
  187.         dec hx
  188.         jr nz,readfile_scrlines0
  189.         ret
  190.  
  191. readfile_rgbtopal
  192.         call calcRGBtopal_pp
  193.         ld (ix+1),a
  194.         call calcRGBtopal_pp
  195.         ld (ix),a
  196.         inc ix
  197.         inc ix
  198.         ret
  199.  
  200. readfile_pal
  201.         ld ix,workpal
  202.         ld c,16
  203. readfile_pal0
  204.         call readbyte
  205.         ld l,a ;r
  206.         call readbyte
  207.         ld d,a ;g
  208.         call readbyte
  209.         ld e,a ;e=B, d=G, l=R
  210.         call readfile_rgbtopal
  211.         dec c
  212.         jr nz,readfile_pal0
  213.         ret ;z
  214.  
  215. readbmp
  216. ;out: nz=ю°шсър
  217.         call setpgtemp
  218.         ld iy,file_buf_end
  219.  
  220.         call isfilename_act
  221.         jr z,readfile_pal
  222.         cp 's'
  223.         jp z,readfile_scr
  224.  
  225.         call readbyte
  226.         cp 'B'
  227.         ret nz
  228.         call readbyte
  229.         cp 'M'
  230.         ret nz
  231.         push iy
  232.         call delbitmap ;єфрышЄ№ Єхъє∙є■ ърЁЄшэъє ш юётюсюфшЄ№ ёЄЁрэшўъш
  233.         pop iy
  234.        
  235.         call readlong ;ЁрчьхЁ ┬╠╨-Їрщыр (срщЄ) ;hlde
  236.         call readlong ;ЁхчхЁт
  237.         call readlong ;ёьх∙хэшх т срщЄрї юЄ эрўрыр Їрщыр фю эрўрыр юяшёрэш  ЁрёЄЁютюую шчюсЁрцхэш 
  238.         call readlong ;ЁрчьхЁ юяшёрэш  шчюсЁрцхэш  (юс√ўэю 40 т Windows)
  239.         call readlong ;°шЁшэр
  240.         ld (curbitmapwid_edit),de
  241.         ;ld a,d;(curbitmapwid_view+1)
  242.         ;ld (readbmp_checkendline_HSB),a
  243.         ;ld a,e;(curbitmapwid_view)
  244.         ;ld (readbmp_checkendline_LSB),a
  245.         call readlong ;т√ёюЄр
  246.         ld a,#3e ;ld a,N
  247.         ld h,d
  248.         ld l,e
  249.         dec hl ;starty
  250.         bit 7,d
  251.         jr z,readbmp_noneghgt
  252.         ld hl,0 ;starty
  253.         call negde
  254.         ld a,#18 ;jr
  255. readbmp_noneghgt
  256.         ld (readbmp_nextlinejrneghgt),a
  257.         ld (curbitmaphgt),de
  258.         ld (readbmp_starty),hl
  259.         call readword ;ъюышўхёЄтю ЎтхЄют√ї яыюёъюёЄхщ
  260.         call readword ;ъюышўхёЄтю сшЄ эр яшъёхы
  261.         ld a,l
  262.         ld (readbmp_bpp),a
  263.  
  264.         push iy
  265.         call reserve_bmp_pages ;Єрь genmuldewid_ahl
  266.         pop iy
  267.         call readlong ;тшф ёцрЄш  шэЇюЁьрЎшш
  268.         call readlong ;ЁрчьхЁ юсЁрчр
  269.         call readlong ;╨хъюьхэфєхьюх уюЁшчюэ-юх ЁрчЁх°хэшх (эхЄ т ACDSee)
  270.         call readlong ;╨хъюьхэфєхьюх тхЁЄшъры№эюх ЁрчЁх°хэшх (эхЄ т ACDSee)
  271.         call readlong ;ъюышўхёЄтю ЎтхЄют т ярышЄЁх (фы  4сшЄ эх чрфр╕Єё )
  272.         ld a,d
  273.         dec a
  274.         or e
  275.         jr z,readbmp_pal_256c
  276.         ld a,e
  277.         or a
  278.         jr nz,$+4 ;ўшёыю ЎтхЄют эх чрфрэю - сєфхЄ 16
  279.         ld a,16
  280. readbmp_pal_256c
  281.         push af
  282.         call readlong ;ъюышўхёЄтю трцэ√ї ЎтхЄют т ярышЄЁх
  283. ;фры№°х шф╕Є ярышЄЁр?
  284.         ld ix,workpal
  285.         pop bc ;b=ўшёыю ЎтхЄют
  286.  
  287.         ld a,(readbmp_bpp)
  288.         cp 24
  289.         jr z,readbmp24
  290.  
  291.         ld c,0
  292. readbmp_pal0
  293.         call readlong ;e=B, d=G, l=R, h=0
  294.         ld a,c
  295.         cp 16
  296.         call c,readfile_rgbtopal
  297.         inc c
  298.         ld a,c
  299.         cp b
  300.         jr nz,readbmp_pal0
  301. ;фры№°х шф╕Є ърЁЄшэър?
  302.         ;ld de,(curbitmaphgt)
  303.         ;dec de ;y
  304. readbmp_bpp=$+1
  305.         ld a,0
  306.         cp 4
  307.         jr z,readbmp4
  308.         jr c,readbmp1
  309. readbmp8
  310.         call readbmp_start
  311. readbmp8_pic0
  312.         call readbmp_linestart
  313. ;bc=x т bitmap
  314. ;de=y т bitmap
  315. ;hl=addr
  316. readbmp8_pic00
  317.         READBYTE_A
  318.         and #0f
  319.         call readbmp_putbyte_checkendline
  320.         jr z,readbmp8_pic00
  321.         call readbmp_nextline
  322.         jr nz,readbmp8_pic0
  323.         ret
  324.  
  325. readbmp24
  326.         call readbmp_start
  327. readbmp24_pic0
  328.         call readbmp_linestart
  329. ;bc=x counter
  330. ;de=y т bitmap
  331. ;hl=addr
  332. readbmp24_pic00
  333.         push de
  334.         READBYTE_E ;b
  335.         READBYTE_D ;g
  336.         READBYTE_A ;r
  337.         rl d ;g
  338.         ld d,a ;r
  339.         ld a,%1
  340.         rla ;g
  341.         rl d
  342.         rla ;r
  343.         rl e
  344.         rla ;b ;a=%1grb
  345.         pop de
  346.         call readbmp_putbyte_checkendline
  347.         jr z,readbmp24_pic00
  348.         call readbmp_nextline
  349.         jr nz,readbmp24_pic0
  350.         ld hl,RSTPAL
  351.         ld de,workpal
  352.         ld bc,32
  353.         ldir
  354.         ret
  355.  
  356. ;эхы№ч  ўшЄрЄ№ ърЁЄшэъє яЁ ью т bitmap, шэрўх срщЄ√ юъЁєуыхэш  т ъюэЎх ёЄЁюъш чрЄЁєЄ фЁєує■ ёЄЁюъє
  357. ;ўшЄрхь ёЄЁюъє т pgtemp:tempc000, яюЄюь яхЁхсЁрё√трхь т bitmap
  358. readbmp4
  359.         call readbmp_start
  360. readbmp4_pic0
  361.         call readbmp_linestart
  362. ;bc=x counter
  363. ;de=y т bitmap
  364. ;hl=addr
  365. readbmp4_pic00
  366.         READBYTE_A
  367.         ld (hl),a
  368.          xor a
  369.          rrd ;(hl)=%0000llll, a=%0000rrrr
  370.         inc hl
  371.         dec bc ;x counter
  372.         call readbmp_putbyte_checkendline
  373.         jr z,readbmp4_pic00
  374.         call readbmp_nextline
  375.         jr nz,readbmp4_pic0
  376.         ret
  377.  
  378. readbmp1
  379.         call readbmp_start
  380. readbmp1_pic0
  381.         call readbmp_linestart
  382. ;bc=x counter
  383. ;de=y т bitmap
  384. ;hl=addr
  385. readbmp1_pic00
  386.         READBYTE_A
  387.         scf
  388.         rla
  389. readbmp1_pic000
  390.         ld (hl),0
  391.         rl (hl)
  392.         inc hl
  393.         dec bc ;x counter
  394.         add a,a
  395.         jr nz,readbmp1_pic000
  396.         bit 7,b
  397.         jr z,readbmp1_pic00
  398.         call readbmp_nextline
  399.         jr nz,readbmp1_pic0
  400.         ret
  401.  
  402. readbmp_start
  403. readbmp_starty=$+1
  404.         ld de,0
  405.         ld a,ly
  406.         ld lx,a
  407.         ret
  408.  
  409. readbmp_linestart
  410.         ld a,(curpgtemp)
  411.         SETPG16K ;фы  сєЇхЁр Єхъє∙хщ ёЄЁюъш
  412.         ;call setpgtemp ;фы  file_buf (фюыцхэ с√Є№ т√°х #c000) ;єцх яюфъы■ўхэ
  413.         ld bc,(curbitmapwid_edit)
  414.         dec bc
  415.         ld hl,tempc000
  416. ;hl=addr
  417.         ret
  418.  
  419. readbmp_putbyte_checkendline
  420. ;out: nz=endline
  421.         ld (hl),a
  422.         inc hl
  423.         dec bc ;x counter
  424.         bit 7,b
  425.         ret
  426.  
  427. readbmp_nextline
  428. ;out: z=ъюэхЎ ърЁЄшэъш
  429.         ld bc,0
  430. ;bc=x т bitmap (эх яюЁЄшЄё )
  431. ;de=y т bitmap (эх яюЁЄшЄё )
  432.         push de
  433.         call calcbitmap_setpg32k ;hl=addr
  434.         ex de,hl
  435.         ld hl,tempc000
  436.         ld bc,(curbitmapwid_edit)
  437.         ldir
  438.         pop de
  439.         call setpgtemp ;фы  file_buf (фюыцхэ с√Є№ т√°х #c000), шэрўх readbyte юсыюьшЄё 
  440.         xor a ;z
  441. readbmp_wait4bytes0
  442.         call nz,readbyte
  443.         ld a,ly
  444.         xor lx
  445.         and 3
  446.         jr nz,readbmp_wait4bytes0
  447. readbmp_nextlinejrneghgt=$
  448.         jr readbmp_nextline_neghgt
  449.         ld a,d
  450.         or e
  451.         dec de
  452.         ret ;out: z=ъюэхЎ ърЁЄшэъш
  453. readbmp_nextline_neghgt
  454.         inc de
  455.         ld a,(curbitmaphgt)
  456.         cp e
  457.         ret nz
  458.         ld a,(curbitmaphgt+1)
  459.         cp d
  460.         ret ;out: z=ъюэхЎ ърЁЄшэъш
  461.  
  462. savebmp_inch
  463. ;readbmp_inch
  464.         inc h
  465.         bit 6,h
  466.         ret z
  467.         push af
  468.         call calcbitmap_from_xy ;a=pg, hl=addr
  469.         push bc
  470.         SETPGBITMAPLOW
  471.         pop bc
  472.         pop af
  473.         ret
  474.  
  475. readlong
  476. ;e,d,l,h
  477.         call readword
  478.         ex de,hl
  479. readword
  480. ;l,h
  481.         call readbyte
  482.         ld l,a
  483.         call readbyte
  484.         ld h,a
  485.         ret
  486.  
  487. readbyte
  488.         READBYTE_A
  489.         ret
  490.  
  491. readbyte_readbuf
  492.         push bc
  493.         push de
  494.         push hl
  495.         push ix
  496.         ld de,file_buf
  497.         push de
  498.         OS_SETDTA ;set disk transfer address = de
  499.         ld de,fcb
  500.         OS_FREAD
  501.         pop iy
  502.         pop ix
  503.         pop hl
  504.         pop de
  505.         pop bc
  506.         ret
  507.  
  508. writelongzero
  509.         ld hl,0
  510.         ld d,h
  511.         ld e,l
  512. writelong
  513. ;e,d,l,h
  514.         ex de,hl
  515.         call writeword
  516.         ex de,hl
  517. writeword
  518. ;l,h
  519.         ld a,l
  520.         call writebyte
  521.         ld a,h
  522.         ;jp writebyte
  523. writebyte
  524.         WRITEBYTE_A
  525.         ret
  526.        
  527. writebyte_writebuf
  528.         push bc
  529.         push de
  530.         push hl
  531.         push ix
  532.         ld de,file_buf
  533.         push de
  534.         OS_SETDTA ;set disk transfer address = de
  535.         ld de,fcb
  536.         OS_FWRITE
  537.         pop iy
  538.         pop ix
  539.         pop hl
  540.         pop de
  541.         pop bc
  542.         ret
  543.        
  544. filemenu
  545.         call isitclick
  546.         ret nz ;ъэюяъє єцх фхЁцрыш
  547.  
  548.         ld hl,curpicname
  549.         ld de,savepicname
  550.         ld bc,12+1
  551.         ldir
  552.        
  553.         ld (filemenu_exitsp),sp
  554.         ld hl,RSTPAL
  555.         call copytemp_setpal
  556. filemenu_restart
  557.         call prfilemenu
  558.         ld a,ZONE_NO
  559.         ld (prarr_zone),a;юЄ ¤Єюую чртшёшЄ ЇюЁьр ёЄЁхыюўъш
  560.        
  561. filemenuloop
  562. ;1. тё╕ т√тюфшь
  563. ;2. цф╕ь ёюс√Єшх
  564. ;3. тё╕ ёЄшЁрхь
  565. ;4. юсЁрсрЄ√трхь ёюс√Єшх
  566.         call setpgshapes
  567.  
  568.         call ahl_coords
  569.         call filemenu_invarrzone
  570.         call ahl_coords
  571.         call shapes_memorizearr
  572.         call ahl_coords
  573.         call shapes_prarr
  574.        
  575.         call waitsomething ;т ¤Єю тЁхь  ёЄЁхыър тшфэр
  576. ;ўЄю-Єю шчьхэшыюё№
  577.  
  578.         call setpgshapes
  579.  
  580.         call ahl_oldcoords
  581.         call shapes_rearr
  582.         call ahl_oldcoords
  583.         call filemenu_invarrzone ;шэтхЁЄшЁютрЄ№ яєэъЄ яюф ёЄЁхыъющ
  584.        
  585.         ld a,(mousebuttons)
  586.         cpl
  587.         and 7
  588.         call nz,filemenu_fire
  589.         call file_control_keys
  590.         jr filemenuloop
  591. filemenu_exit
  592. filemenu_exitsp=$+1
  593.         ld sp,0
  594.         ;ld hl,workpalend
  595.         ;call setpalhl
  596.         jp showworkscreen
  597.        
  598. filemenu_quit
  599. ;TODO яЁютхЁшЄ№, ёюїЁрэхэ√ ыш ърЁЄшэъш
  600.         QUIT
  601.        
  602. file_control_keys
  603.         ld a,(key)
  604.         cp cs6
  605.         jr z,file_control_keys_down
  606.         cp cs7
  607.         jr z,file_control_keys_up
  608.         cp key_redraw
  609.         jp z,prfilemenu
  610.         cp '1'
  611.         jr z,file_control_keys_drive1
  612.         cp '2'
  613.         jr z,file_control_keys_drive2
  614.         cp '3'
  615.         jr z,file_control_keys_drive3
  616.         cp '4'
  617.         jr z,file_control_keys_drive4 ;TODO more drives
  618.         sub '5'
  619.         jr z,file_control_keys_drive0 ;a=0
  620.         ret
  621.        
  622. file_control_keys_drive1
  623. file_control_keys_drive2
  624. file_control_keys_drive3
  625. file_control_keys_drive4
  626.         sub '0'
  627. file_control_keys_drive0
  628. file_control_keys_drive_fail0
  629. filemenu_setdrive
  630.         ld e,a
  631.         push de
  632.         OS_SETDRV
  633.         pop de
  634.         or a
  635.         jr nz,file_control_keys_drive_fail
  636.         ld a,e
  637.         ld (curdrive),a
  638.          pop af ;ёэшьрхь рфЁхё тючтЁрЄр
  639.         jp filemenu_restart
  640. file_control_keys_drive_fail
  641. curdrive=$+1
  642.         ld a,0
  643.         jr file_control_keys_drive_fail0
  644.        
  645. file_control_keys_down
  646.         ld bc,(filelist_firstfilevisible)
  647.         ld hl,filelist_maxfiles
  648.         add hl,bc ;эюьхЁ Їрщыр, ъюЄюЁ√щ ёхщўрё фюыцхэ яю тшЄ№ё  ;CY=0
  649. filelist_nfiles=$+1
  650.         ld de,0
  651.         sbc hl,de
  652.         ret nc ;эюьхЁ Їрщыр сюы№°х, ўхь ўшёыю Їрщыют
  653.         inc bc
  654.         ld (filelist_firstfilevisible),bc
  655.  
  656.         call setpgshapes
  657.  
  658.         ld hl,+(filelisty+8)*40 + filelistx8 + scrbase
  659.         ld de,filelisty*40 + filelistx8 + scrbase
  660.         ld bc,+(filelisthgt-8)*256 + filelistwid8
  661.         call shapes_copybox
  662.        
  663.         ld de,+(filelisty + filelisthgt-8)*40 + filelistx8 + scrbase ;de=scr (эрўрыю ёЄЁюъш)
  664.         ld b,filelist_maxfiles-1 ;b=эюьхЁ тшфшьюую Їрщыр
  665.         jp prdirfile
  666.  
  667. file_control_keys_up
  668.         ld hl,(filelist_firstfilevisible)
  669.         ld a,h
  670.         or l
  671.         ret z
  672.         dec hl
  673.         ld (filelist_firstfilevisible),hl
  674.  
  675.         call setpgshapes
  676.  
  677.         ld de,+(filelisty+8)*40 + filelistx8 + scrbase
  678.         ld hl,filelisty*40 + filelistx8 + scrbase
  679.         ld bc,+(filelisthgt-8)*256 + filelistwid8
  680.         call shapes_copybox
  681.        
  682.         ld de,+(filelisty)*40 + filelistx8 + scrbase ;de=scr (эрўрыю ёЄЁюъш)
  683.         ld b,0 ;b=эюьхЁ тшфшьюую Їрщыр
  684.         jp prdirfile
  685.        
  686. filemenu_fire
  687.         call isitclick
  688.         ret nz ;ъэюяър єцх с√ыр эрцрЄр
  689.         call ahl_coords
  690.         call filemenu_isitsave
  691.         jp c,savefile
  692.         call filemenu_isitquit
  693.         jp c,filemenu_quit
  694.         call filemenu_isitexit
  695.         jp c,filemenu_exit
  696.         call filemenu_isitfilename
  697.         jp c,editfilename
  698.         call filemenu_findvisibledrivenumber
  699.         jp c,filemenu_setdrive
  700.         call filemenu_findvisiblefilenumber
  701.         ret nc;jp nc,filemenu_exit ;эх яюярыш т ёяшёюъ Їрщыют
  702.         ;a = эюьхЁ тшфшьюую Їрщыр
  703.         call file_findvisiblefile_a
  704.         call setpgtemp
  705.         ld de,fcb
  706.         push de ;FCB
  707.         ld bc,32;FCB_sz
  708.         ldir
  709.         pop de ;FCB
  710.         ld a,(fcb+FCB_FATTRIB)
  711.         cp FATTRIB_DIR;0x10
  712.         jr nz,filemenu_fire_not_dir
  713.         pop af ;ёэшьрхь рфЁхё тючтЁрЄр
  714.         ld hl,fcb_filename
  715.         ld de,temppicname
  716.         push de
  717.         call cpmname_to_dotname
  718.         pop de ;DE = Pointer to ASCIIZ string
  719.         OS_CHDIR
  720.         jp filemenu_restart
  721. filemenu_fire_not_dir
  722.         OS_FOPEN
  723.         or a
  724.         jr nz,filemenu_fire_finish;error
  725.  
  726.         call readbmp ;nz=ю°шсър (Єюуфр эх ьхэ Є№ шь  Їрщыр)
  727.  
  728.         push af
  729.  
  730.         call setpgtemp ;Є.ъ. яюёых ўЄхэш  bmp ьюцхЄ с√Є№ ы■ср  ёЄЁрэшЎр Єрь
  731.         ld de,fcb
  732.         push de
  733.         OS_FCLOSE
  734.         pop hl ;fcb
  735.         inc hl ;шь  т ЇюЁьрЄх CP/M
  736.  
  737.         pop af
  738.         jr nz,filemenu_fire_finish;error
  739.        
  740.         call isfilename_act
  741.         jr z,filemenu_fire_finish ;хёыш чруЁєчшыш Їрщы ярышЄЁ√, Єю эх ьхэ хь шь  Єхъє∙хщ ърЁЄшэъш
  742.  
  743.         ld de,curpicname
  744.         call cpmname_to_dotname
  745. filemenu_fire_finish
  746.         ;call clearwindowstate ;a=0
  747.         call kill_unfinished_shapes
  748.         xor a
  749.         ld h,a
  750.         ld l,a
  751.         ld (curbitmapxscroll),hl
  752.         ld (curbitmapyscroll),hl
  753.         jp filemenu_exit
  754.        
  755. cpmname_to_dotname
  756.         push hl
  757.         ld b,8
  758. cpmname_to_dotname0
  759.         ld a,(hl)
  760.         cp ' '
  761.         jr z,cpmname_to_dotname0q
  762.         ld (de),a
  763.         inc hl
  764.         inc de
  765.         djnz cpmname_to_dotname0
  766. cpmname_to_dotname0q
  767.         pop hl
  768.         ld bc,8
  769.         add hl,bc ;hl=pointer to ext
  770.         ld a,(hl)
  771.         cp ' '
  772.         jr z,cpmname_to_dotnameq
  773.         ld a,'.'
  774.         ld (de),a
  775.         inc de
  776.         ld  c,3
  777.         ldir
  778. cpmname_to_dotnameq
  779.         xor a
  780.         ld (de),a
  781.         ret
  782.  
  783. filemenu_invarrzone
  784. ;шэтхЁЄшЁютрЄ№ яєэъЄ яюф ёЄЁхыъющ
  785. ;hl=x эр ¤ъЁрэх
  786. ;a=y эр ¤ъЁрэх
  787.         call filemenu_isitsave
  788.         jr c,filemenu_invarrzone_invert
  789.        
  790.         call filemenu_isitquit
  791.         jr c,filemenu_invarrzone_invert
  792.                
  793.         call filemenu_isitexit
  794.         jr c,filemenu_invarrzone_invert
  795.                
  796.         call filemenu_isitfilename
  797.         jr c,filemenu_invarrzone_invert
  798.  
  799.         call filemenu_findvisibledrivenumber
  800.         jr c,filemenu_invarrzone_invert
  801.  
  802.         call filemenu_findvisiblefilenumber
  803.         ret nc ;эх яюярыш т ёяшёюъ Їрщыют
  804.         ;a = эюьхЁ тшфшьюую Їрщыр
  805.         add a,a
  806.         add a,a
  807.         add a,a
  808.         add a,filelisty
  809.         ld b,a ;y
  810.         ld c,filelistx8 ;x/8
  811.         ld de,8*256 + filelistwid8 ;d=hgt ;e=wid/8
  812. filemenu_invarrzone_invert
  813.         call setpgshapes
  814.         jp shapes_invbox
  815.        
  816. filemenu_isitfilename
  817. ;hl=x эр ¤ъЁрэх (эх яюЁЄшЄё )
  818. ;a=y эр ¤ъЁрэх (эх яюЁЄшЄё )
  819. ;out: CY=1 - яюярыш т ЁхфръЄшЁєхьюх шь  Їрщыр, bcde=ЁрчьхЁ√ фы  invarrzone
  820.         if 1==1
  821.         ld bc,filenamey*256 + filenamex8 ;y, x/8
  822.         ld de,filenamehgt*256 + filenamewid8 ;d=hgt ;e=wid/8
  823.         jr filemenu_isitbox
  824.         else
  825.         cp filenamey
  826.         ccf
  827.         ret nc ;jr nc,filemenu_invarrzone_nofilename ;nc=ьшью
  828.         cp filenamey+filenamehgt
  829.         ret nc ;jr nc,filemenu_invarrzone_nofilename ;nc=ьшью
  830.         ld bc,filenamex8*8
  831.         or a
  832.         sbc hl,bc
  833.         add hl,bc
  834.         ccf
  835.         ret nc ;jr nc,filemenu_invarrzone_nofilename ;nc=ьшью
  836.         ld bc,+(filenamex8*8)+(filenamewid8*8)
  837.         or a
  838.         sbc hl,bc
  839.         add hl,bc
  840.         ret ;nc=ьшью
  841.         endif
  842.  
  843. filemenu_isitsave
  844. ;hl=x эр ¤ъЁрэх (эх яюЁЄшЄё )
  845. ;a=y эр ¤ъЁрэх (эх яюЁЄшЄё )
  846. ;out: CY=1 - яюярыш т Save, bcde=ЁрчьхЁ√ фы  invarrzone
  847.         if 1==1
  848.         ld bc,savey*256 + savex8 ;y, x/8
  849.         ld de,savehgt*256 + savewid8 ;d=hgt ;e=wid/8
  850.         jr filemenu_isitbox
  851.         else
  852.         cp savey
  853.         ccf
  854.         ret nc ;jr nc,filemenu_invarrzone_nofilename ;nc=ьшью
  855.         cp savey+savehgt
  856.         ret nc ;jr nc,filemenu_invarrzone_nofilename ;nc=ьшью
  857.         ld bc,savex8*8
  858.         or a
  859.         sbc hl,bc
  860.         add hl,bc
  861.         ccf
  862.         ret nc ;jr nc,filemenu_invarrzone_nofilename ;nc=ьшью
  863.         ld bc,+(savex8*8)+(savewid8*8)
  864.         or a
  865.         sbc hl,bc
  866.         add hl,bc
  867.         ret ;nc=ьшью
  868.         endif
  869.  
  870. filemenu_isitquit
  871. ;hl=x эр ¤ъЁрэх (эх яюЁЄшЄё )
  872. ;a=y эр ¤ъЁрэх (эх яюЁЄшЄё )
  873. ;out: CY=1 - яюярыш т Quit, bcde=ЁрчьхЁ√ фы  invarrzone
  874.         ld bc,quity*256 + quitx8 ;y, x/8
  875.         ld de,quithgt*256 + quitwid8 ;d=hgt ;e=wid/8
  876.         jr filemenu_isitbox
  877.        
  878. filemenu_isitexit
  879. ;hl=x эр ¤ъЁрэх (эх яюЁЄшЄё )
  880. ;a=y эр ¤ъЁрэх (эх яюЁЄшЄё )
  881. ;out: CY=1 - яюярыш т Exit, bcde=ЁрчьхЁ√ фы  invarrzone
  882.         ld bc,exity*256 + exitx8 ;y, x/8
  883.         ld de,exithgt*256 + exitwid8 ;d=hgt ;e=wid/8
  884.         ;jr filemenu_isitbox
  885. filemenu_isitbox
  886. ;hl=x эр ¤ъЁрэх (эх яюЁЄшЄё )
  887. ;a=y эр ¤ъЁрэх (эх яюЁЄшЄё )
  888. ;b=y ;c=x/8 (эх яюЁЄ Єё )
  889. ;d=hgt ;e=wid/8 (эх яюЁЄ Єё )
  890. ;out: CY=1 - яюярыш т сюъё
  891.         cp b ;y
  892.         ccf
  893.         ret nc ;jr nc,filemenu_invarrzone_nofilename ;nc=ьшью
  894.         sub b ;y
  895.         cp d ;hgt
  896.         jr nc,filemenu_isitbox_addbret ;nc=ьшью
  897.         add a,b
  898.         push bc
  899.         ;ld bc,x8*8
  900.          ld b,0
  901.          sla c
  902.          rl b
  903.          sla c
  904.          rl b
  905.          sla c
  906.          rl b
  907.         or a
  908.         sbc hl,bc
  909.         add hl,bc
  910.         pop bc
  911.         ccf
  912.         ret nc ;jr nc,filemenu_invarrzone_nofilename ;nc=ьшью
  913.         push bc
  914.         ;ld bc,+(x8*8)+(wid8*8)
  915.          push af
  916.          ld a,c ;x8
  917.          add a,e ;wid8
  918.          ld b,0
  919.          add a,a
  920.          rl b
  921.          add a,a
  922.          rl b
  923.          add a,a
  924.          rl b
  925.          ld c,a
  926.          pop af
  927.         or a
  928.         sbc hl,bc
  929.         add hl,bc
  930.         pop bc
  931.         ret ;nc=ьшью
  932. filemenu_isitbox_addbret
  933.         add a,b
  934.         ret
  935.        
  936. filemenu_findvisiblefilenumber
  937. ;hl=x эр ¤ъЁрэх
  938. ;a=y эр ¤ъЁрэх
  939. ;out: nc = эх яюярыш т ёяшёюъ Їрщыют, a = эюьхЁ тшфшьюую Їрщыр
  940.         sub filelisty
  941.         rra
  942.         rra
  943.         rra
  944.         and 31
  945. filelist_filesvisible=$+1        
  946.         cp 0
  947.         ret nc ;эх яюярыш яю y т ёяшёюъ Їрщыют
  948.         ld bc,filelistx8*8
  949.         or a
  950.         sbc hl,bc
  951.         ld bc,filelistwid8*8
  952.         or a
  953.         sbc hl,bc
  954.         ret ;nc = эх яюярыш яю x т ёяшёюъ Їрщыют
  955.  
  956. filemenu_findvisibledrivenumber
  957. ;hl=x эр ¤ъЁрэх
  958. ;a=y эр ¤ъЁрэх
  959. ;out: nc = эх яюярыш т ёяшёюъ фЁрщтют, a = эюьхЁ тшфшьюую фЁрщтр ;bc = y, x/8 ;de = hgt, wid/8
  960.         ld c,a
  961.         sub drivesy
  962.         rra
  963.         rra
  964.         rra
  965.         and 31
  966. ;filelist_drivesvisible=$+1        
  967.         cp 20
  968.         ld d,a ;a = эюьхЁ тшфшьюую Їрщыр
  969.         ld a,c ;y
  970.         ret nc ;эх яюярыш яю y т ёяшёюъ фЁрщтют
  971.         push hl
  972.         ld bc,drivesx8*8
  973.         or a
  974.         sbc hl,bc
  975.         ld bc,driveswid8*8
  976.         or a
  977.         sbc hl,bc
  978.         pop hl
  979.         ret nc ;nc = эх яюярыш яю x т ёяшёюъ фЁрщтют
  980.         ld a,d ;a = эюьхЁ тшфшьюую Їрщыр
  981.         add a,a
  982.         add a,a
  983.         add a,a
  984.         add a,drivesy
  985.         ld b,a ;y
  986.         ld a,d ;a = эюьхЁ тшфшьюую Їрщыр
  987.         ld c,drivesx8 ;x/8
  988.         ld de,8*256 + driveswid8 ;d=hgt ;e=wid/8
  989.         scf
  990.         ret
  991.  
  992. prfilemenu_drive
  993.         db "A:",0
  994.        
  995. prfilemenu
  996. ;FILINFO_sz=32
  997.         call cls
  998.         ld lx,0 ;Їюэют√щ ЎтхЄ
  999.         call prfilename
  1000.         ld de,tsave
  1001.         ld hl,savey*40 + savex8 + scrbase
  1002.         call shapes_prtext48ega_oncolor
  1003.         ld de,tquit
  1004.         ld hl,quity*40 + quitx8 + scrbase
  1005.         call shapes_prtext48ega_oncolor
  1006.         ld de,texit
  1007.         ld hl,exity*40 + exitx8 + scrbase
  1008.         call shapes_prtext48ega_oncolor
  1009.  
  1010.         ld hl,drivesy*40 + drivesx8 + scrbase
  1011.         ld bc,256*(driveshgt/8) + 'A'
  1012. prfilemenu_drives0
  1013.         push bc
  1014.         push hl
  1015.         ld de,prfilemenu_drive
  1016.         ld a,c
  1017.         ld (de),a
  1018.         call shapes_prtext48ega_oncolor
  1019.         pop hl
  1020.         ld bc,40*8
  1021.         add hl,bc
  1022.         pop bc
  1023.         inc c
  1024.         djnz prfilemenu_drives0
  1025.        
  1026.         call setpgtemp
  1027.  
  1028.         ld de,fcb
  1029.         OS_SETDTA ;set disk transfer address = de
  1030.         call makeemptymask
  1031.         ld de,fcbmask
  1032.         OS_FSEARCHFIRST
  1033.         or a
  1034.        
  1035.         ld de,catbuf
  1036.         ld bc,0 ;nfiles
  1037.         ;ld a,' '
  1038.         ;ld (de),a
  1039.         jr nz,loaddir_error
  1040. loaddir0
  1041.         ;ld a,(fcb+FCB_FNAME)
  1042.         ;cp ' '
  1043.         ;jr z,loaddirq
  1044.         push bc
  1045.         ld hl,fcb
  1046.         ld bc,32;FCB_sz
  1047.         ldir
  1048.         pop bc
  1049.         inc bc ;nfiles
  1050.          ;inc bc
  1051.         bit 1,b ;ёЄЁрэшўър pgtemp чръюэўшырё№? max 512 Їрщыют яю 32 срщЄр
  1052.          ;dec bc
  1053.         jr nz,loaddirq
  1054.         push bc
  1055.         push de ;catbuf
  1056.         ld de,fcb
  1057.         OS_SETDTA ;set disk transfer address = de
  1058.          ;call makeemptymask ;т CP/M эх эєцэю, эю юЄёєЄёЄтшх тЁхфшЄ ьэюуючрфрўэюёЄш
  1059.          ld de,fcbmask ;т CP/M эх эєцэю, эю юЄёєЄёЄтшх тЁхфшЄ ьэюуючрфрўэюёЄш
  1060.         OS_FSEARCHNEXT
  1061.         pop de ;catbuf
  1062.         pop bc ;nfiles
  1063.         or a
  1064.         jr z,loaddir0
  1065. loaddir_error
  1066. loaddirq
  1067. ;bc=nfiles
  1068.         push bc
  1069.         call setpgs_scr
  1070.         pop bc
  1071.        
  1072.         ld (filelist_nfiles),bc
  1073.         ld hl,0
  1074.         ld (filelist_firstfilevisible),hl
  1075.         ld a,b
  1076.         or a
  1077.         jr nz,loaddir_max
  1078.         ld a,c
  1079.         cp filelist_maxfiles
  1080.         jr c,loaddir_maxq
  1081. loaddir_max
  1082.         ld c,filelist_maxfiles
  1083. loaddir_maxq
  1084.         ld a,c
  1085.         ld (filelist_filesvisible),a
  1086.         or a
  1087.         ret z ;эхЄ Їрщыют
  1088.  
  1089.         ld b,0 ;эюьхЁ тшфшьюую Їрщыр
  1090.         ld de,filelisty*40 + filelistx8 + scrbase ;scr
  1091. prdir0
  1092.         push bc ;c=nfiles, b=эюьхЁ тшфшьюую Їрщыр
  1093.         push de ;scr (эрўрыю ёЄЁюъш)
  1094.         call prdirfile
  1095.         pop de ;scr (эрўрыю ёЄЁюъш)
  1096.         ld hl,40*8
  1097.         add hl,de ;CY=0
  1098.         ex de,hl
  1099.         pop bc ;c=nfiles, b=эюьхЁ тшфшьюую Їрщыр
  1100.         inc b
  1101.         dec c
  1102.         jr nz,prdir0
  1103.         ret
  1104.  
  1105. makeemptymask
  1106.         ld hl,fcbmask_filename
  1107.         ld d,h
  1108.         ld e,l
  1109.         inc de
  1110.         ld bc,11-1
  1111.         ld (hl),'?'
  1112.         ldir
  1113.         ret
  1114.        
  1115. prdirfile
  1116. ;de=scr (эрўрыю ёЄЁюъш)
  1117. ;b=эюьхЁ тшфшьюую Їрщыр
  1118.         push de ;scr (эрўрыю ёЄЁюъш)
  1119.         ld a,b
  1120.         call file_findvisiblefile_a ;яюыєўшыш hl
  1121.         call setpgtemp
  1122.         ;ld de,filinfo
  1123.         ;ld bc,FILINFO_sz
  1124.         ld de,fcb_print
  1125.         ld bc,FCB_FATTRIB
  1126.         ldir
  1127.         ld a,(hl)
  1128.         and FATTRIB_DIR
  1129.         ld (prdirfile_dot_or_dir),a
  1130.         ld  c,32-FCB_FATTRIB ;FCB_sz-FCB_FATTRIB
  1131.         ldir
  1132.         ld lx,0
  1133.         call setpgshapes
  1134.         call setpgs_scr
  1135.         ;ld de,filinfo+FILINFO.FNAME
  1136.         ld de,fcb_print+FCB_FNAME
  1137.         ;ex de,hl
  1138.         ;push hl ;text
  1139.         ;xor a
  1140.         ;ld bc,15
  1141.         ;cpir ;hl сєфхЄ єърч√трЄ№ яюёых эєы , bc=ўшёыю юёЄрт°шїё  срщЄ
  1142.         ;ld b,c
  1143.         ;dec hl
  1144.         ;ld (hl),' '
  1145.         ;inc hl
  1146.         ;djnz $-3
  1147.         ;ld (hl),b ;0
  1148.         ;pop de ;de=text
  1149.         pop hl ;hl=scr (эрўрыю ёЄЁюъш)
  1150.         ;call shapes_prtext48ega_oncolor
  1151.         ld a,8
  1152.         call shapes_prNchars
  1153.         ld a,'.'
  1154. prdirfile_dot_or_dir=$+1
  1155.         xor 0
  1156.         call shapes_prchar48ega
  1157.         ld a,3
  1158.         call shapes_prNchars
  1159.        
  1160.         ex hl,de
  1161.         exx
  1162.         ;ld hl,(filinfo+FILINFO.FSIZE+2)
  1163.         ld hl,(fcb_print+FCB_FSIZE+2)
  1164.         exx
  1165.         ;ld hl,(filinfo+FILINFO.FSIZE)
  1166.         ld hl,(fcb_print+FCB_FSIZE)
  1167.         call shapes_prnumdword
  1168.        
  1169. ;       shapes_prchar48ega
  1170. ;a=char
  1171. ;hl=scr
  1172. ;       shapes_prnum
  1173. ;de=scr
  1174. ;hl=num      
  1175. ;ld hl,(fcb_print+FCB_FTIME)
  1176. ;       shapes_prNchars
  1177. ;hl=scr
  1178. ;de=text
  1179. ;a=Nchars
  1180.         ld a,' '
  1181.         ex de,hl
  1182.         call shapes_prchar48ega
  1183.         ex de,hl
  1184.        
  1185.         ld hl,(fcb_print+FCB_FDATE)
  1186.         push hl
  1187.         ld a,h
  1188.         srl a
  1189.         sub 20
  1190.         jr nc,$+4
  1191.         add a,100 ;XX century
  1192.         call shapes_prNN ;year
  1193.         ld a,'-'
  1194.         ex de,hl
  1195.         call shapes_prchar48ega
  1196.         ex de,hl
  1197.         pop hl
  1198.         ld a,l
  1199.         push af
  1200.         add hl,hl
  1201.         add hl,hl
  1202.         add hl,hl
  1203.         ld a,h
  1204.         and #0f
  1205.         call shapes_prNN ;month
  1206.         ld a,'-'
  1207.         ex de,hl
  1208.         call shapes_prchar48ega
  1209.         ex de,hl
  1210.         pop af
  1211.         and #1f
  1212.         call shapes_prNN ;day
  1213.        
  1214.         ld a,' '
  1215.         ex de,hl
  1216.         call shapes_prchar48ega
  1217.         ex de,hl
  1218.        
  1219.         ld hl,(fcb_print+FCB_FTIME)
  1220.         push hl
  1221.         ld a,h
  1222.         rra
  1223.         rra
  1224.         rra
  1225.         and #1f
  1226.         call shapes_prNN ;hour
  1227.         ld a,':'
  1228.         ex de,hl
  1229.         call shapes_prchar48ega
  1230.         ex de,hl
  1231.         pop hl
  1232.         ld a,l
  1233.         push af
  1234.         add hl,hl
  1235.         add hl,hl
  1236.         add hl,hl
  1237.         ld a,h
  1238.         and #3f
  1239.         call shapes_prNN ;minute
  1240.         ld a,':'
  1241.         ex de,hl
  1242.         call shapes_prchar48ega
  1243.         ex de,hl
  1244.         pop af
  1245.         add a,a
  1246.         and #3f
  1247.         jp shapes_prNN ;second
  1248.        
  1249. file_findvisiblefile_a
  1250. ;a = эюьхЁ тшфшьюую Їрщыр
  1251.         ld l,a
  1252.         ld h,catbuf/(32*256)
  1253. filelist_firstfilevisible=$+1
  1254.         ld bc,0
  1255.         add hl,bc
  1256.         add hl,hl
  1257.         add hl,hl
  1258.         add hl,hl
  1259.         add hl,hl
  1260.         add hl,hl ;(a+firstfilevisible)*FILINFO_sz = a*32
  1261.         ret
  1262.  
  1263. editfilename
  1264. editfilename0
  1265.         ld bc,filenamey*256 + filenamex8 ;y, x/8
  1266.         ld de,filenamehgt*256 + filenamewid8 ;d=hgt ;e=wid
  1267.         xor a
  1268.         call shapes_fillbox
  1269. editfilename_nokey
  1270.         call prfilename
  1271.         ;halt
  1272.         ;GET_KEY
  1273.         ;cp NOKEY
  1274.         ;jr z,editfilename_nokey
  1275.         YIELDGETKEYLOOP
  1276.         ld hl,savepicname
  1277.         cp key_enter
  1278.         ret z
  1279.         cp key_backspace
  1280.         jr z,editfilename_backspace
  1281.         cp 0x20
  1282.         jr c,editfilename_nokey ;яЁюўшх ёшёЄхьэ√х ъэюяъш эх эєцэ√
  1283.         ld e,a
  1284.         ld bc,12
  1285.         xor a
  1286.         cpir
  1287.         dec hl ;hl=эр ЄхЁьшэрЄюЁх
  1288.         jr nz,editfilename0 ;эх эр°ыш ЄхЁьшэрЄюЁ = ьръёшьры№эр  фышэр ёЄЁюъш, эхы№ч  ттюфшЄ№
  1289.         ld (hl),e
  1290.         inc hl
  1291.         ld (hl),a;0
  1292.         jr editfilename0
  1293. editfilename_backspace
  1294.         ld a,(savepicname)
  1295.         or a
  1296.         jr z,editfilename0 ;єфры Є№ эхўхую
  1297.         ld bc,12+1 ;ўЄюс√ Єюўэю эрщЄш ЄхЁьшэрЄюЁ
  1298.         xor a
  1299.         cpir
  1300.         dec hl ;hl=эр ЄхЁьшэрЄюЁх
  1301.         dec hl
  1302.         ld (hl),a;0
  1303.         jr editfilename0
  1304.  
  1305. prfilename
  1306.         call setpgshapes
  1307.         ld lx,0
  1308.         ld de,savepicname
  1309.         ld hl,filenamey*40 + filenamex8 + scrbase
  1310.         jp shapes_prtext48ega_oncolor
  1311.  
  1312. savefile
  1313.         call setpgtemp
  1314.         ld hl,savepicname
  1315.         ld de,catbuf
  1316.         ld bc,16
  1317.         push de
  1318.         ldir
  1319.         pop de ;ASCIIZ string for parsing (т #c000...)
  1320.         ld hl,fcb_filename ;Pointer to 11 byte buffer
  1321.         OS_PARSEFNAME
  1322.         ld de,fcb
  1323.         OS_FCREATE
  1324.  
  1325.         ld iy,file_buf
  1326.  
  1327.         call isfilename_act
  1328.         jp z,savefile_pal
  1329.        
  1330. ;хёыш bmp
  1331.         ld hl,savepicname
  1332.         ld de,curpicname
  1333.         ld bc,12+1
  1334.         ldir
  1335.  
  1336.         ld a,'B'
  1337.         call writebyte
  1338.         ld a,'M'
  1339.         call writebyte
  1340.        
  1341.         ld bc,(curbitmapwid_edit)
  1342.         dec bc
  1343.         ld a,c
  1344.         or 8-1
  1345.         ld c,a
  1346.         inc bc ;юъЁєуы╕ээр  ттхЁї фю 4 срщЄ (8 яшъёхыхщ)
  1347.         ld a,c
  1348.         ld (savebmp4_pic00_widLSB),a
  1349.         ld a,b
  1350.         ld (savebmp4_pic00_widHSB),a
  1351.         srl b
  1352.         rr c
  1353.         ld de,(curbitmaphgt)
  1354.         call mulbcde_ahl
  1355.         ex de,hl
  1356.         ld bc,118
  1357.         ld l,a
  1358.         ld h,b;0
  1359.         push hl
  1360.         push de
  1361.         ex de,hl
  1362.         add hl,bc
  1363.         ex de,hl
  1364.         ld c,b ;0
  1365.         adc hl,bc
  1366.        
  1367. ;hlde = hgt*wid_view/2 + 118
  1368.         call writelong ;ЁрчьхЁ ┬╠╨-Їрщыр (срщЄ)
  1369.         call writelongzero ;ЁхчхЁт
  1370.         ld  e,118
  1371.         call writelong ;ёьх∙хэшх т срщЄрї юЄ эрўрыр Їрщыр фю эрўрыр юяшёрэш  ЁрёЄЁютюую шчюсЁрцхэш 
  1372.         ld  e,40
  1373.         call writelong ;ЁрчьхЁ юяшёрэш  шчюсЁрцхэш  (юс√ўэю 40 т Windows)
  1374.         ld de,(curbitmapwid_edit)
  1375.         call writelong ;°шЁшэр
  1376.         ld de,(curbitmaphgt)
  1377.         call writelong ;т√ёюЄр
  1378.         ld  l,1
  1379.         call writeword ;ъюышўхёЄтю ЎтхЄют√ї яыюёъюёЄхщ
  1380.         ld  l,4
  1381.         call writeword ;ъюышўхёЄтю сшЄ эр яшъёхы
  1382.         ld  e,0
  1383.         ld l,e;0
  1384.         call writelong ;тшф ёцрЄш  шэЇюЁьрЎшш
  1385.  
  1386.         pop de
  1387.         pop hl
  1388. ;hlde = hgt*wid_view/2
  1389.         call writelong ;ЁрчьхЁ юсЁрчр
  1390.  
  1391.         call writelongzero ;╨хъюьхэфєхьюх уюЁшчюэ-юх ЁрчЁх°хэшх (эхЄ т ACDSee)
  1392.         call writelong ;╨хъюьхэфєхьюх тхЁЄшъры№эюх ЁрчЁх°хэшх (эхЄ т ACDSee)
  1393.         ld  e,16
  1394.         call writelong ;ъюышўхёЄтю ЎтхЄют т ярышЄЁх (фы  16 ьюцэю эх чрфртрЄ№)
  1395.         call writelong ;ъюышўхёЄтю трцэ√ї ЎтхЄют т ярышЄЁх
  1396. ;фры№°х шф╕Є ярышЄЁр
  1397.         ld ix,workpal
  1398.         ld c,16
  1399. savebmp_pal0
  1400.         ld l,(ix)
  1401.         inc ix
  1402.         ld h,(ix)
  1403.         inc ix
  1404. ;hl=color (DDp palette)
  1405. ;DDp palette: %grbG11RB(low),%grbG11RB(high), шэтхЁёэ√х
  1406.         call calchexcolor
  1407. ;b=#BB
  1408. ;d=#RR
  1409. ;e=#GG
  1410.         ld l,d
  1411.         ld h,0
  1412.         ld d,e
  1413.         ld e,b
  1414.         call writelong ;e=B, d=G, l=R, h=0
  1415.         dec c
  1416.         jr nz,savebmp_pal0
  1417. ;фры№°х шф╕Є ърЁЄшэър
  1418.         ld de,(curbitmaphgt)
  1419.         dec de ;y
  1420. savebmp4
  1421. savebmp4_pic0
  1422.         ld bc,0
  1423. ;bc=x т bitmap (эх яюЁЄшЄё )
  1424. ;de=y т bitmap (эх яюЁЄшЄё )
  1425.         call calcbitmap_from_xy ;a=pg, hl=addr
  1426.         push bc
  1427.         SETPGBITMAPLOW
  1428.         pop bc
  1429. savebmp4_pic00
  1430.         ld a,(hl)
  1431.         inc bc ;x
  1432.         inc l
  1433.         call z,savebmp_inch
  1434.         rlca
  1435.         rlca
  1436.         rlca
  1437.         rlca
  1438.         or (hl)
  1439.         inc bc
  1440.         inc l
  1441.         call z,savebmp_inch
  1442.         WRITEBYTE_A
  1443. savebmp4_pic00_widLSB=$+1
  1444.         ld a,0
  1445.         cp c
  1446.         jr nz,savebmp4_pic00
  1447. savebmp4_pic00_widHSB=$+1
  1448.         ld a,0
  1449.         cp b
  1450.         jr nz,savebmp4_pic00
  1451.         dec de
  1452.         bit 7,d
  1453.         jr z,savebmp4_pic0
  1454. savefile_close_quit
  1455.         call writebyte_writebuf
  1456.         ld de,fcb
  1457.         OS_FCLOSE
  1458.         ; pop af ;ёэшьрхь рфЁхё тючтЁрЄр (Є.ъ. т√ч√трыш call filemenu_fire)
  1459.         ;jp filemenu
  1460.         jp filemenu_exit
  1461.  
  1462. savefile_pal
  1463.         ld ix,workpal
  1464.         ld c,16
  1465. savefile_pal0
  1466.         ld l,(ix)
  1467.         inc ix
  1468.         ld h,(ix)
  1469.         inc ix
  1470. ;hl=color (DDp palette)
  1471. ;DDp palette: %grbG11RB(low),%grbG11RB(high), шэтхЁёэ√х
  1472.         call calchexcolor
  1473. ;b=#BB
  1474. ;d=#RR
  1475. ;e=#GG
  1476.         ld a,d ;r
  1477.         call writebyte
  1478.         ld a,e ;g
  1479.         call writebyte
  1480.         ld a,b ;b
  1481.         call writebyte
  1482.         dec c
  1483.         jr nz,savefile_pal0
  1484.         jr savefile_close_quit
  1485.  
  1486. fcb;=(-FCB_sz)&0xffff     ;ds FCB_sz
  1487.         ds FCB_sz
  1488. fcb_filename=fcb+FCB_FNAME        
  1489.  
  1490. fcb_print
  1491. fcbmask
  1492.         ds FCB_sz
  1493. fcbmask_filename=fcbmask+FCB_FNAME        
  1494.  
  1495. texit
  1496.         db "  Back",0
  1497. tquit
  1498.         db "  Quit to OS",0
  1499. tsave
  1500.         db "  Save",0
  1501.  
  1502. temppicname=#fe00 ;т√°х #c000
  1503. savepicname
  1504.         db "12345678.123",0
  1505.