Subversion Repositories NedoOS

Rev

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