home *** CD-ROM | disk | FTP | other *** search
/ ticalc.org / ticalc_org_rev_b.iso / archives / 86 / asm / source / ate.asm < prev    next >
Encoding:
Assembly Source File  |  2001-07-01  |  49.4 KB  |  3,236 lines

  1. ;Advanced Text Editer 1.0
  2. ;by Jonah Cohen <ComAsYuAre@aol.com>
  3. ;http://jonah.ticalc.org
  4.  
  5. ;#define handle_errors    ;NOTE: not working!
  6. ;#define custom_font
  7. ;#define grayscale
  8.  
  9. #include "TI86.inc"
  10.  
  11. .plugin lite86j
  12.  
  13. .org _asm_exec_ram
  14.  
  15.     nop
  16.     jp start
  17.     .dw 0
  18.     .dw shell_title
  19.  
  20. shell_title:
  21.     .db "Advanced Text Editor 1.0",0
  22.  
  23. file_name:
  24.     .db $12,1,0,0,0,0,0,0,0,0,0
  25.  
  26. exec_basic:
  27.     call _PARSEINP
  28.     in a,(5)
  29.     cp $0d
  30.     ld a,$0d
  31.     out (5),a
  32.     jp nz,_JforceCmdNoChar        ;stop
  33.     call _runIndicOff
  34.     jr decompress                ;in case code was recopied
  35.  
  36. exec_asm:
  37.     call _exec_assembly
  38.     ex (sp),hl
  39.     push af
  40.     push hl
  41.  
  42. decompress:
  43.     ld a,(start+3)
  44.     cp $cd
  45.     ret z                        ;already decompressed
  46.     ld hl,start+9002
  47.     ld de,$9000+8999
  48.     ld bc,9000
  49.     lddr
  50.     inc hl
  51.     inc de
  52.     ex de,hl
  53. decompress_data:
  54.     ld a,(hl)
  55.     inc hl
  56.     scf
  57.     adc a,a
  58.     .db $06
  59. decompress_loop:
  60.     add a,a
  61.     jr z,decompress_data
  62.     jr c,decompress_chunk
  63.     ldi
  64.     jr decompress_loop
  65. decompress_chunk:
  66.     ld b,a
  67.     ld c,$1f
  68.     ld a,(hl)
  69.     cp c
  70.     jp z,refresh_data            ;when we're done
  71.     push bc
  72.     inc hl
  73.     ld b,(hl)
  74.     inc hl
  75.     push hl
  76.     ld l,b
  77.     ld b,a
  78.     or c
  79.     rlca
  80.     rlca
  81.     rlca
  82.     ld h,a
  83.     ld a,b
  84.     and c
  85.     add a,3
  86.     ld c,a
  87.     ld b,0
  88.     add hl,de
  89.     ldir
  90.     pop hl
  91.     pop af
  92.     jr decompress_loop
  93.  
  94. start:
  95.     call decompress
  96. prog_start:
  97. #ifdef grayscale
  98.     call remove_int
  99. #endif
  100.     call _flushAllMenus
  101.     call _runIndicOff
  102.     call _clrWindow
  103.  
  104. #ifdef handle_errors
  105.     ;ld (stack_save),sp
  106. #endif
  107.  
  108.     call _OP6TOOP1
  109.     ld hl,_Flags+anumeditFlgs
  110.     bit ex_asm_module,(hl)
  111.     res ex_asm_module,(hl)
  112.     jp nz,load_prog_edit
  113.  
  114.     ld hl,prog_start
  115.     ld (progstart+1),hl
  116.  
  117.     ld hl,title
  118.     ld de,$fc30
  119.     ld bc,title_end-title
  120.     ldir
  121.  
  122.     ld b,3
  123. title_loop:
  124.     ld e,(hl)
  125.     inc hl
  126.     ld d,(hl)
  127.     inc hl
  128.     ld (_penCol),de
  129.     call _vputs
  130.     djnz title_loop
  131.  
  132.     ld hl,file_name
  133.     rst 20h
  134.     ld a,3
  135.     call check_file_validity
  136.     ld a,2
  137.     jr nz,draw_main_menu
  138.     inc a
  139. draw_main_menu:
  140.     ld hl,main_menu
  141.     ld (hl),a
  142.     call draw_menu
  143.  
  144.     ld hl,edit_buffer+1
  145.     ld (edit_start),hl
  146.     ld (edit_cursor),hl
  147.     ld (edit_cursor2),hl
  148.     call _RAM_PAGE_1
  149.     xor a
  150.     ld (hl),a                    ;overwrite previous prog data
  151.     ld (mode_flag),a            ;lowercase alpha
  152.  
  153. choose_option:
  154.     call getkey
  155.     cp K_EXIT
  156.     jp z,exit
  157.     sub K_F3
  158.     ld hl,(main_menu)
  159.     dec l
  160.     dec l                        ;check if count is 2
  161.     jr z,skip_f3
  162.     or a
  163.     jp z,load_prog_edit
  164. skip_f3:
  165.     dec a                        ;cp K_F2
  166.     jp z,load_prog
  167.     dec a                        ;cp K_F1
  168.     jr nz,choose_option
  169.  
  170. new_prog:
  171.     ld (folder),a                ;default folder
  172.     ld hl,file_type
  173.     ld a,(hl)
  174.     sub 3                        ;if all, reset to basic
  175.     jr nz,$+3
  176.     ld (hl),a
  177.  
  178.     ld hl,new_text
  179.     call disp_title
  180.     call disp_mode
  181.     ld a,4                        ;stop before All
  182.     call draw_file_types
  183. new_prog_restart:
  184.     ld hl,browse_name+2
  185.     ld (hl),0
  186. get_file_redraw:
  187.     push hl
  188.     ld b,6
  189.     call clear_file
  190.     ld hl,browse_name+2
  191.     call _vputs
  192.     pop hl
  193. get_file_name:
  194.     call getkey_cursor
  195.     jp z,prog_start
  196.     ld de,file_type
  197.     cp K_LEFT
  198.     jr nz,not_filetype_left
  199.     ld a,(de)
  200.     dec a
  201. change_filetype_redraw:
  202.     cp 3
  203.     jr c,do_filetype_redraw
  204.     rlca
  205.     add a,a
  206.     and 3
  207. do_filetype_redraw:
  208.     ld (de),a
  209.     push hl
  210.     call redraw_file_types
  211.     pop hl
  212.     jr get_file_name
  213. not_filetype_left:
  214.     cp K_RIGHT
  215.     jr nz,not_filetype_right
  216.     ld a,(de)
  217.     inc a
  218.     jr change_filetype_redraw
  219. not_filetype_right:
  220.     cp K_ENTER
  221.     jr z,get_file_selected
  222.     cp K_CLEAR
  223.     jr z,new_prog_restart
  224.     cp K_DEL
  225.     jr nz,get_file_not_del
  226.     ld de,browse_name+2
  227.     call _cphlde
  228.     jr z,get_file_name
  229.     dec hl
  230.     ld (hl),0
  231.     jr get_file_redraw
  232. get_file_not_del:
  233.     push hl
  234.     ld de,browse_name+2
  235.     call varname_char
  236.     pop hl
  237.     jr nz,get_file_name
  238.     ld de,browse_name+10
  239.     call _cphlde
  240.     jr nc,get_file_name
  241.     ld (hl),a
  242.     inc hl
  243.     call _vputmap
  244.     ld (hl),a
  245.     jr get_file_name
  246. get_file_selected:
  247.     ld de,browse_name+2
  248.     call _cphlde
  249.     jr z,get_file_name            ;nothing inputted
  250.     ex de,hl
  251.     call _strLength
  252.     dec hl
  253.     ld (hl),c                    ;store size
  254.     dec hl
  255.     rst 20h
  256.     call check_file_name
  257.     jp z,new_prog                ;source file already exists
  258.     jp nc,new_prog                ;var already exists
  259.     ld de,file_name
  260.     call _MOVFROP1                ;store new file name
  261.     call _RAM_PAGE_1
  262.     ld hl,(file_type)
  263.     ld h,0
  264.     add hl,hl
  265.     ld de,default_source_table
  266.     add hl,de
  267.     call $33
  268.     ld de,edit_buffer+1
  269. copy_source:
  270.     ld a,(hl)
  271.     ld (de),a
  272.     inc hl
  273.     inc de
  274.     cp $d6
  275.     jr nz,copy_source
  276.     ld (edit_cursor),de
  277.     ld hl,default_source
  278.     ld bc,default_source_end-default_source
  279.     ldir
  280.     ex de,hl
  281.     ld (edit_cursor2),hl
  282.     ld (edit_end),hl            ;set end
  283.     jp first_edit
  284.  
  285. draw_file_types:
  286.     ld (max_file_type),a
  287. redraw_file_types:
  288.     call backup_screen
  289.     ld hl,$fd20
  290.     ld bc,112*256
  291. clear_file_type:
  292.     ld (hl),c
  293.     inc hl
  294.     djnz clear_file_type
  295.  
  296.     ld a,(file_type)
  297.     inc a
  298.     ld (selected_filetype),a
  299.     ld hl,(_penCol)
  300.     push hl
  301.     ld h,18
  302.     ld a,(max_file_type)
  303.     dec a                        ;if new menu, a=4 so we get 3
  304.     and 3                        ;thus menu is shifted over 3 more
  305.     add a,15
  306.     ld l,a
  307.     ld (_penCol),hl
  308.     ld hl,file_types
  309.     xor a
  310. disp_new_file_types:
  311.     cp 0
  312. selected_filetype = $-1
  313.     jr nz,not_selected_filetype
  314.     ld (iy+5),%1010
  315. not_selected_filetype:
  316.     push af
  317.     call _vputs
  318.     ld (iy+5),a
  319.     call _VPUTBLANK
  320.     call _VPUTBLANK
  321.     pop af
  322.     inc a
  323.     cp 4
  324. max_file_type = $-1
  325.     jr nz,disp_new_file_types
  326.     ld hl,$231d
  327.     ld (_penCol),hl
  328.     ld hl,file_prompt
  329.     call _vputs
  330.     pop hl
  331.     ld (_penCol),hl
  332.     ld a,$7c
  333.     out (0),a
  334.     ret
  335.  
  336. clear_files:
  337.     ld b,29
  338. clear_file:
  339.     ;b=number of pixel rows to clear
  340.     ld hl,$fe30
  341. get_file_clear:
  342.     ld de,8
  343.     add hl,de
  344. get_file_clear_line:
  345.     ld (hl),d
  346.     inc hl
  347.     dec e
  348.     jr nz,get_file_clear_line
  349.     djnz get_file_clear
  350.     ld hl,$2340
  351.     ld (_penCol),hl
  352.     ret
  353.  
  354. load_prog:
  355.     ld hl,load_text
  356.     call disp_title
  357.     call disp_mode
  358.  
  359. choose_file:
  360.     ld a,5                        ;include All
  361.     call draw_file_types
  362.  
  363.     xor a
  364.     ld (check_file_selected-1),a
  365.  
  366.     ld hl,default_search_name
  367.     rst 20h
  368.     ld de,file_names
  369. find_files:
  370.     push de
  371.     xor a
  372.     call _findAlphaUp
  373.     jr c,done_find_files
  374.     call check_file
  375.     pop de
  376.     jr nz,find_files
  377.     call _RAM_PAGE_1
  378.     ld hl,_OP1
  379.     ld bc,16
  380.     ldir                        ;add to table of files
  381.     jr find_files
  382.  
  383. done_find_files:
  384.     pop hl                        ;hl=end of list
  385.     ld de,file_names
  386.     call _cphlde
  387.     jr nz,not_no_source
  388.  
  389. ;no source
  390.     ld a,choose_file_loop-check_file_selected
  391.     ld (check_file_selected-1),a
  392.     call clear_files
  393.     ld hl,not_found
  394.     call _vputs
  395.     jp choose_file_loop
  396.  
  397. not_no_source:
  398.     ld bc,-16
  399.     add hl,bc
  400.     ld (file_end),hl
  401.     ex de,hl
  402.     ld (file_first),hl
  403.     jr choose_file_redraw
  404.  
  405. prev_file:
  406.     ld de,file_names
  407.     ld bc,-16
  408.     jr move_selector
  409.  
  410. next_file:
  411.     ld de,(file_end)
  412.     ld bc,16
  413.  
  414. move_selector:
  415.     call _cphlde
  416.     jr z,choose_file_loop
  417.     add hl,bc
  418. move_selector_check_scroll:
  419.     push hl
  420.     ex de,hl
  421.     ld hl,(file_first)
  422.     call _cphlde
  423.     jr nc,$+3
  424.     ex de,hl                    ;min in de
  425.     pop hl
  426.     push hl
  427.     ld bc,-48
  428.     add hl,bc
  429.     call _cphlde
  430.     jr nc,$+3
  431.     ex de,hl                    ;max in hl
  432.     ld (file_first),hl
  433.     pop hl
  434.  
  435. choose_file_redraw:
  436.     ld (file_selected),hl
  437.     call backup_screen
  438.     call clear_files
  439.     call _RAM_PAGE_1
  440.     ld hl,0
  441. file_first = $-2
  442. display_file_names:
  443.     push hl
  444.     ld de,0
  445. file_selected = $-2
  446.     call _cphlde
  447.     jr nz,no_highlight_filename
  448.     ld (iy+5),%1010
  449.     push hl
  450.     rst 20h                        ;copy to OP1
  451.     pop hl
  452. no_highlight_filename:
  453.     call _VPUTBLANK
  454.     inc hl
  455.     ld b,(hl)
  456.     inc hl
  457.     call _vputsn
  458.     ld (iy+5),b
  459.     ld hl,_penCol
  460.     ld (hl),$40
  461.     inc hl
  462.     ld a,(hl)
  463.     add a,7
  464.     ld (hl),a
  465.     pop hl
  466.     cp 60
  467.     jr nc,choose_file_loop
  468.     ld de,16
  469.     add hl,de
  470.     ld de,0
  471. file_end = $-2
  472.     inc de
  473.     call _cphlde
  474.     jr c,display_file_names
  475.  
  476. choose_file_loop:
  477.     ld a,$7c
  478.     out (0),a
  479.     call getkey
  480.     cp K_EXIT
  481.     jp z,prog_start
  482.     cp K_LEFT
  483.     jr nz,not_file_left
  484.     ld b,-1
  485. change_filetype:
  486.     ld hl,file_type
  487.     ld a,(hl)
  488.     add a,b
  489.     and 3
  490.     ld (hl),a
  491.     jp choose_file
  492. not_file_left:
  493.     ld b,1
  494.     cp K_RIGHT
  495.     jr z,change_filetype
  496.     jr check_file_selected        ;self-modified
  497. check_file_selected:
  498.     ld hl,(file_selected)
  499.     cp K_DOWN
  500.     jp z,next_file
  501.     cp K_UP
  502.     jp z,prev_file
  503.     cp K_ENTER
  504.     jr z,load_prog_edit
  505.     cp K_SECOND
  506.     jr z,load_prog_edit
  507.     call get_alpha
  508.     jr nz,choose_file_loop
  509.     ld c,a
  510.     ld hl,(file_selected)
  511.     ld de,(file_end)
  512.     ld b,2
  513. scroll_file_choice:
  514.     call _cphlde
  515.     jr c,scroll_file_next
  516.     ld hl,file_names
  517.     ld de,(file_selected)
  518.     djnz scroll_file_no_add        ;restart at top
  519.     jr choose_file_loop            ;didn't find any
  520. scroll_file_next:
  521.     push bc
  522.     ld bc,16
  523.     add hl,bc
  524.     pop bc
  525. scroll_file_no_add:
  526.     inc hl \ inc hl
  527.     ld a,(hl)                    ;get first letter of filename
  528.     dec hl \ dec hl
  529.     set 5,a
  530.     cp c
  531.     jp z,move_selector_check_scroll
  532.     jr scroll_file_choice
  533.  
  534. load_prog_edit:
  535.     call check_file_name
  536.     jp nc,exit
  537.     call _clrLCD
  538.     call load_op1
  539.  
  540. first_edit:
  541.     xor a
  542.     ld (edit_buffer),a
  543.     inc a
  544.     ld (dir),a
  545. #ifdef grayscale
  546.     call install_int
  547. #endif
  548.     call detect_f5_files
  549. edit_draw_menu:
  550.     call draw_editor_menu
  551.  
  552. edit:
  553.     call _RAM_PAGE_1
  554.     call set_column
  555. edit_save_column:
  556.     call backup_screen
  557. #ifdef grayscale
  558.     ld (page),a
  559.     ld a,5
  560.     ld (counter),a
  561.     ld a,$06
  562.     ld (toggle),a
  563. #endif
  564.     ld hl,$ff80
  565.     ld de,$ff7f
  566.     ld bc,896
  567.     call _lddr
  568.     inc c                        ;$0001
  569.     ld (_penCol),bc
  570.  
  571.     call check_cursors
  572.     ld a,1
  573.     jr nz,text_selected
  574.     ld de,edit_buffer+1
  575. edit_start = $-2
  576.     call disp_chars
  577.     jr finish_disp_screen
  578.  
  579. text_selected:
  580.     jr c,$+4
  581.     ex de,hl
  582.     inc a
  583.     push de
  584.     ld de,(edit_start)
  585.     call disp_chars
  586.  
  587.     push hl
  588.     ld (iy+5),%00001010
  589.     ld hl,_penCol
  590.     dec (hl)
  591.     ld h,a
  592.     call _VPUTBLANK
  593.     ld a,h
  594.     pop de
  595.     pop hl
  596.     call disp_chars
  597.     ld (iy+5),0
  598.  
  599. finish_disp_screen:
  600.     ex de,hl
  601.     ld hl,edit_buffer+1
  602. edit_end = $-2
  603.     call disp_chars
  604.  
  605.     ld hl,(edit_buffer+1)
  606.     ld de,0
  607. first_chars = $-2
  608.     call _cphlde
  609.     ld (first_chars),hl
  610.     call nz,draw_editor_menu    ;if first 2 chars changed, redraw menu
  611.     call disp_mode                ;display mode
  612.     ld a,$7c
  613.     out (0),a
  614. #ifdef grayscale
  615.     ld (page),a
  616.     ld a,5
  617.     ld (counter),a
  618.     ld a,$0c
  619.     ld (toggle),a
  620. #endif
  621.     ;ld hl,(edit_end)
  622.     ;inc hl
  623.     ;ld (hl),$d6
  624.     xor a
  625.     ld (cursor_state),a
  626.  
  627. wait_for_key:
  628. ;main key input routine
  629.     jr alpha_notselected
  630. alpha_selected:
  631.     halt
  632.     ld a,%01011111
  633.     out (1),a
  634.     nop \ nop
  635.     in a,(1)
  636.     rla
  637.     jr nc,alpha_notselected
  638.     ld a,alpha_notselected-alpha_selected
  639.     ld (alpha_selected-1),a
  640.     or a
  641. toggle_alpha_call:
  642.     call toggle_alpha            ;if cursor didn't move, switch mode
  643.  
  644. alpha_notselected:
  645.     jr second_notselected
  646. second_selected:
  647.     halt
  648.     ld a,%00111111
  649.     out (1),a
  650.     nop \ nop
  651.     in a,(1)
  652.     and %00100000
  653.     jr z,second_notselected
  654.     ld a,second_notselected-second_selected
  655.     ld (second_selected-1),a
  656. toggle_second_call:
  657.     call toggle_second            ;if cursor didn't move, switch mode
  658.  
  659. second_notselected:
  660.     ld a,(alpha_selected-1)
  661.     or a
  662. just_do_arrows:
  663.     ld a,(cursor_state)
  664.     jp z,do_arrows
  665.     ld a,(second_selected-1)
  666.     or a
  667.     jr z,just_do_arrows
  668.  
  669.     call check_cursors
  670.     jr nz,no_cursor
  671.     call getkey_cursor2
  672.     jr got_key
  673. no_cursor:
  674.     call getkey
  675. got_key:
  676.     push af
  677.     call get_char_no_mode
  678.     pop bc
  679.     jp z,insert_char
  680.     ld a,b
  681.     cp K_DEL
  682.     jp z,delete
  683.     cp K_CLEAR
  684.     jp z,clear
  685.     sub K_MORE
  686.     jp z,paste
  687.     inc a                        ;cp K_EXIT
  688.     jp z,check_save
  689.     inc a                        ;sub K_SECOND
  690.     inc a                        ;sub K_F1-K_SECOND
  691.     jp z,list
  692.     inc a
  693.     jp z,find
  694.     inc a
  695.     jp z,choose_char
  696.     inc a
  697.     jp z,save_prog
  698.     inc a
  699.     jp z,f5
  700.  
  701. do_arrows:
  702.     or a
  703.     call z,draw_cursor
  704.  
  705.     ld hl,alpha_selected-1
  706.     ld a,(hl)
  707.     or a
  708.     jr z,no_alpha_toggle        ;already held down
  709.     ld a,%01011111
  710.     out (1),a
  711.     nop \ nop
  712.     in a,(1)
  713.     rla
  714.     jr c,no_alpha_toggle
  715.     ld (hl),0
  716.     ld hl,toggle_alpha_call
  717.     ld (hl),$cd                    ;call
  718. no_alpha_toggle:
  719.  
  720.     ld hl,second_selected-1
  721.     ld a,(hl)
  722.     or a
  723.     jr z,no_second_toggle        ;already held down
  724.     ld a,%00111111
  725.     out (1),a
  726.     nop \ nop
  727.     in a,(1)
  728.     and %00100000
  729.     jr nz,no_second_toggle
  730.     ld (hl),a
  731.     ld hl,toggle_second_call
  732.     ld (hl),$cd                    ;call
  733. no_second_toggle:
  734.  
  735.     ld a,%01111110
  736.     out (1),a
  737.     nop \ nop
  738.     in a,(1)
  739.     cpl
  740.     and $0f
  741.     jp z,wait_for_key
  742.     ld hl,toggle_alpha_call
  743.     ld (hl),$dc
  744.     ld hl,toggle_second_call
  745.     ld (hl),$dc
  746.     ld b,0
  747. get_arrow:
  748.     rra
  749.     inc b
  750.     jr nc,get_arrow
  751.     call check_cursors
  752.     jr z,go_to_arrow            ;one cursor
  753.     ld a,(second_selected-1)
  754.     cp 1
  755.     ccf
  756.     jr nc,go_to_arrow            ;nc if 2nd held
  757.     call _cphlde
  758.     jr c,go_to_arrow
  759.     ex de,hl
  760.     scf                            ;carry if cursors different
  761. go_to_arrow:
  762.     dec b
  763.     jp z,go_down
  764.     dec b
  765.     jr z,go_left
  766.     dec b
  767.     jr z,go_right
  768.  
  769. go_up:
  770.     jr nc,go_up2
  771.     ld (edit_cursor),hl
  772.     call set_column
  773.     call check_cursor
  774. go_up2:
  775.     call bol
  776.     ld a,(alpha_selected-1)
  777.     or a
  778.     jp z,page_up
  779.     ld de,edit_buffer+1
  780.     call _cphlde
  781.     jr nz,up_skip_search        ;not first line
  782. set_cursor_edit:
  783.     ld (edit_cursor),hl
  784.     call check_cursor
  785.     jp edit
  786. up_skip_search:
  787.     dec hl
  788.     call bol
  789.     call add_row
  790. cursor_check_scroll:
  791.     call check_cursor
  792. check_scroll:
  793.     ld hl,(edit_cursor)
  794.     ld de,(edit_start)
  795.     call _cphlde
  796.     jr nc,check_scroll_down
  797.     call bol                    ;beginning of line cursor is on
  798.     ld (edit_start),hl
  799.     jp edit_save_column
  800.  
  801. go_left:
  802.     jr nc,left2
  803.     ld (edit_cursor),hl
  804.     call set_column
  805.     jr cursor_check_scroll
  806. left2:
  807.     ld a,(alpha_selected-1)
  808.     or a
  809.     jp z,home
  810.     ld de,edit_buffer+1
  811.     call _cphlde
  812.     jp z,wait_for_key            ;first character already
  813.     ld de,(edit_start)
  814.     call _cphlde
  815.     dec hl
  816.     jr nz,set_cursor_edit        ;not off screen
  817. finish_left_right:
  818.     ld (edit_cursor),hl
  819.     call set_column
  820.     jr cursor_check_scroll        ;check cursor, scroll up
  821.  
  822. go_right:
  823.     dec de
  824.     jr nc,$+3
  825.     ex de,hl
  826.     ld a,(alpha_selected-1)
  827.     or a
  828.     jp z,end
  829.     ld de,(edit_end)
  830.     call _cphlde
  831.     jp z,wait_for_key            ;last character of program
  832.     inc hl
  833.     jr finish_left_right
  834.  
  835. go_down:
  836.     jr nc,go_down2
  837.     ex de,hl
  838.     ld (edit_cursor),hl
  839.     call set_column
  840.     call check_cursor
  841. go_down2:
  842.     ld a,(alpha_selected-1)
  843.     or a
  844.     jp z,page_down
  845.     call eol
  846.     dec hl
  847.     ld (edit_cursor),hl
  848.     ld de,(edit_end)
  849.     call _cphlde
  850.     push af
  851.     call z,set_column            ;last char
  852.     pop af
  853.     jr z,skip_add_row            ;last char
  854.     inc hl
  855.     call add_row
  856. skip_add_row:
  857.     call check_cursor
  858. check_scroll_down:
  859.     ld hl,(edit_cursor)
  860.     ld b,8
  861. scroll_down_loop:
  862.     push bc
  863.     call bol
  864.     pop bc
  865.     ld de,(edit_start)
  866.     call _cphlde
  867.     jr c,no_scrolling            ;edit_start is already lower
  868.     dec hl
  869.     djnz scroll_down_loop
  870.     inc hl
  871.     ld (edit_start),hl
  872. no_scrolling:
  873.     jp edit_save_column
  874.  
  875. home:
  876.     call bol
  877. finish_home_end:
  878.     jp set_cursor_edit
  879.  
  880. end:
  881.     call eol
  882.     dec hl
  883.     jr finish_home_end
  884.  
  885. page_down:
  886.     ld b,9
  887. page_down_loop:
  888.     push bc
  889.     call eol
  890.     pop bc
  891.     djnz page_down_loop
  892.     dec hl
  893.     call bol
  894. finish_paging:
  895.     call add_row
  896.     ld (edit_cursor),hl
  897.     jp cursor_check_scroll
  898.  
  899. page_up:
  900.     ld b,9
  901. page_up_loop:
  902.     call bol
  903.     dec hl
  904.     djnz page_up_loop
  905. done_page_up:
  906.     inc hl
  907.     jr finish_paging
  908.  
  909. check_cursor:
  910.     ld a,(second_selected-1)
  911.     or a
  912.     ret z
  913.     ld hl,(edit_cursor)
  914.     ld (edit_cursor2),hl
  915.     ret
  916.  
  917. check_cursors:
  918.     ld hl,edit_buffer+1
  919. edit_cursor = $-2
  920.     ld de,edit_buffer+1
  921. edit_cursor2 = $-2
  922.     jp _cphlde
  923.  
  924. add_row:
  925.     push hl
  926.     call eol
  927.     pop de
  928.     dec hl
  929.     sbc hl,de                    ;carry=0 from eol
  930.     jr z,next_char_closer
  931.     ld a,0
  932. column = $-1
  933.     ld b,l                        ;b=# of chars in row
  934.     ld h,char_width_table/256
  935. get_column:
  936.     ex de,hl
  937.     ld e,(hl)
  938.     ex de,hl
  939.     inc de
  940.     ld c,a                        ;how close it is to previous char
  941.     sub (hl)
  942.     jr c,got_column                ;past cursor
  943.     djnz get_column                ;at end of row
  944.     xor a                        ;how close it is to next char
  945. got_column:
  946.     neg                            ;how close it is to next char
  947.     cp c
  948.     jr c,next_char_closer
  949.     dec de
  950. next_char_closer:
  951.     ex de,hl
  952.     ld (edit_cursor),hl
  953.     ret
  954.  
  955. set_column:
  956.     ld hl,(edit_cursor)
  957.     push hl
  958.     call bol
  959.     pop de
  960.     xor a
  961. add_column:
  962.     call _cphlde
  963.     jr nz,continue_column
  964.     ld (column),a
  965.     ret
  966. continue_column:
  967.     push hl
  968.     ld l,(hl)
  969.     ld h,char_width_table/256
  970.     add a,(hl)
  971.     pop hl
  972.     inc hl
  973.     jr add_column
  974.  
  975. paste:
  976.     ld hl,clipboard
  977.     call paste_hl
  978.     jp check_scroll_down
  979.  
  980. paste_hl:
  981.     push hl
  982.     call check_cursors
  983.     call nz,del_hl_de            ;delete selected string
  984.     pop hl
  985.     ld a,(hl)
  986.     or a
  987.     ret z                        ;no string
  988.     push hl
  989.     call _strLength                ;bc=length of string
  990.     ld hl,(edit_end)
  991.     push hl
  992.     add hl,bc
  993.     ld de,edit_buffer+max_size
  994.     call _cphlde
  995.     jr nc,max_paste
  996.     ex de,hl
  997. max_paste:
  998.     ld (edit_end),de
  999.     pop hl                        ;de=destination, hl=edit_end
  1000.     ld bc,(edit_cursor)
  1001.     push hl
  1002.     or a
  1003.     sbc hl,bc
  1004.     inc hl
  1005.     ex (sp),hl                    ;hl=edit_end, push size to copy
  1006.     pop bc
  1007.     lddr
  1008.     ex de,hl
  1009.     sbc hl,de
  1010.     ex (sp),hl                    ;clipboard
  1011.     pop bc                        ;size of clipboard
  1012.     ld de,(edit_cursor)
  1013.     push de
  1014.     jr z,$+4
  1015.     ldir
  1016.     ex de,hl
  1017.     ld (edit_cursor),hl            ;new cursor
  1018.     ld (edit_cursor2),hl
  1019.     call set_column
  1020.  
  1021.     ex (sp),hl                    ;get previous cursor
  1022.     call bol                    ;beginning of line previous cursor was on
  1023.     dec hl
  1024.     call bol                    ;line before it
  1025.     pop de                        ;end of pasted text
  1026.     jp insert_line_breaks_hl_de    ;refresh all line breaks in pasted text
  1027.  
  1028. save_prog:
  1029.     ld hl,file_name
  1030.     rst 20h
  1031.     ld hl,_OP1+1
  1032.     ld c,(hl)
  1033.     ld b,0
  1034.     add hl,bc
  1035.     inc hl
  1036.     ld (hl),b                    ;set null byte
  1037. save_redraw:
  1038.     call clear_bottom
  1039.     ld hl,save_as
  1040.     call _vputs
  1041.     ld hl,_OP1+2
  1042.     call _vputs
  1043.     dec hl
  1044. save_getkey:
  1045.     call getkey_cursor
  1046.     jp z,edit_draw_menu
  1047.     cp K_ENTER
  1048.     jr z,save_selected
  1049.     cp K_CLEAR
  1050.     jr nz,save_not_clear
  1051.     xor a
  1052.     ld (_OP1+2),a
  1053.     jr save_redraw
  1054. save_not_clear:
  1055.     cp K_DEL
  1056.     jr nz,save_not_del
  1057.     dec hl
  1058.     ld (hl),0
  1059.     jr save_redraw
  1060. save_not_del:
  1061.     push hl
  1062.     ld de,_OP1+2
  1063.     call varname_char
  1064.     pop hl
  1065.     jr nz,save_getkey
  1066.     ld de,_OP1+10
  1067.     call _cphlde
  1068.     jr nc,save_getkey
  1069.     ld (hl),a
  1070.     inc hl
  1071.     ld (hl),0
  1072.     call _vputmap
  1073.     jr save_getkey
  1074. save_selected:
  1075.     ld de,_OP1+2
  1076.     call _cphlde
  1077.     jr z,save_getkey            ;nothing entered
  1078.     push hl
  1079.     sbc hl,de
  1080.     ld a,l
  1081.     dec de
  1082.     ld (de),a                    ;size byte
  1083.     call check_file_name
  1084.     pop hl
  1085.     jr nc,save_getkey            ;invalid
  1086.     call _RAM_PAGE_1
  1087.     ld de,file_name
  1088.     call _MOVFROP1
  1089.     call save_source
  1090.     call insert_line_breaks        ;refresh line breaks
  1091.     call clear_bottom
  1092.     ld hl,saved
  1093. draw_status:
  1094.     call _vputs
  1095.     call getkey
  1096.     jp edit_draw_menu
  1097.  
  1098. list:
  1099.     ld a,(cursor_state)
  1100.     or a
  1101.     call nz,draw_cursor            ;erase cursor
  1102.     xor a
  1103.     ld (selected_list_item),a
  1104.     ld hl,(file_type)
  1105.     ld h,a
  1106.     add hl,hl
  1107.     ld de,f1_table
  1108.     add hl,de
  1109.     call $33                    ;hl->table of list items
  1110.     ld (list_table),hl
  1111. redraw_list:
  1112.     call backup_screen
  1113.     call draw_rect
  1114.     ld hl,0
  1115. list_table = $-2
  1116.     xor a
  1117.     ld de,$0912
  1118. new_list_item:
  1119.     ld (_penCol),de
  1120.     push af
  1121.     push de
  1122.     cp 0
  1123. selected_list_item = $-1
  1124.     jr nz,not_selected
  1125.     ld (iy+5),%1010
  1126. not_selected:
  1127.     call _VPUTBLANK
  1128.     ld a,(hl)
  1129.     inc hl
  1130.     and 31
  1131.     ld b,a
  1132. disp_list_item:
  1133.     ld a,(hl)
  1134.     inc hl
  1135.     call _vputmap
  1136.     djnz disp_list_item
  1137.     ld (iy+5),b
  1138.     pop de
  1139.     ld a,e
  1140.     add a,34
  1141.     ld e,a
  1142.     cp 100
  1143.     jr c,not_new_list_line
  1144.     ld a,d
  1145.     add a,8
  1146.     ld d,a
  1147.     ld e,$12
  1148. not_new_list_line:
  1149.     pop af
  1150.     inc a
  1151.     cp 15
  1152.     jr nz,new_list_item
  1153.     ld a,$7c
  1154.     out (0),a
  1155. get_list_choice:
  1156.     call getkey
  1157.     cp K_EXIT
  1158.     jp z,edit_save_column
  1159.     cp K_SECOND
  1160.     jr z,list_item_chosen
  1161.     cp K_ENTER
  1162.     jr z,list_item_chosen
  1163.     ld b,a
  1164.     ld a,(selected_list_item)
  1165.     ld d,3
  1166.     dec b
  1167.     jr z,list_item_inc
  1168.     ld d,1
  1169.     dec b
  1170.     jr z,list_item_dec
  1171.     dec b
  1172.     jr z,list_item_inc
  1173.     ld d,3
  1174.     dec b
  1175.     jr nz,get_list_choice
  1176. list_item_dec:
  1177.     sub d
  1178.     jr nc,set_list_item
  1179.     xor a
  1180. set_list_item:
  1181.     ld (selected_list_item),a
  1182.     jr redraw_list
  1183. list_item_inc:
  1184.     add a,d
  1185.     cp 15
  1186.     jr c,set_list_item
  1187.     ld a,14
  1188.     jr set_list_item
  1189.  
  1190. list_item_chosen:
  1191.     ld hl,(list_table)
  1192.     ld d,0
  1193.     ld a,(selected_list_item)
  1194.     ld b,a
  1195.     inc b
  1196.     jr get_next_list_item
  1197. get_list_item:
  1198.     ld a,(hl)
  1199.     and 63
  1200.     inc a
  1201.     ld e,a
  1202.     add hl,de
  1203. get_next_list_item:
  1204.     djnz get_list_item
  1205.     ex de,hl
  1206.     ld a,(de)
  1207.     ld c,a
  1208.     and 63
  1209.     ld b,a
  1210.     ld hl,insert_string            ;create string here
  1211.     push hl
  1212. copy_list_item:
  1213.     inc de
  1214.     ld a,(de)
  1215.     ld (hl),a
  1216.     inc hl
  1217.     djnz copy_list_item
  1218.     ld a,c
  1219.     ld b,' '
  1220.     rla
  1221.     jr c,append_to_list
  1222.     ld b,'('
  1223.     rla
  1224.     jr nc,no_append
  1225. append_to_list:
  1226.     ld (hl),b
  1227.     inc hl
  1228. no_append:
  1229.     ld (hl),0
  1230.     pop hl
  1231.     call paste_hl                ;insert string
  1232.     jp edit_save_column
  1233.  
  1234. draw_rect:
  1235.     ld hl,$fc71
  1236.     call draw_edge
  1237.     ld bc,41*256
  1238. rect_loop:
  1239.     push bc
  1240.     call list_clear_row
  1241.     pop bc
  1242.     djnz rect_loop
  1243. draw_edge:
  1244.     ld c,-1
  1245. list_clear_row:
  1246.     set 0,(hl)
  1247.     ld b,12
  1248. level_clear_loop:
  1249.     inc hl
  1250.     ld (hl),c
  1251.     djnz level_clear_loop
  1252.     inc l
  1253.     set 7,(hl)
  1254.     inc l
  1255.     inc hl
  1256.     inc l
  1257.     ret
  1258.  
  1259. find:
  1260.     call check_cursors
  1261.     jr z,find_new
  1262.     jr nc,$+3
  1263.     ex de,hl
  1264.     or a
  1265.     sbc hl,de
  1266.     ld bc,12
  1267.     push hl
  1268.     sbc hl,bc
  1269.     ex de,hl
  1270.     pop de
  1271.     ld b,c
  1272.     jr nc,$+3
  1273.     ld b,e
  1274.     ld de,search_string
  1275. copy_search_string:
  1276.     ld a,(hl)
  1277.     or a
  1278.     jr nz,$+4
  1279.     ld a,' '
  1280.     ld (de),a
  1281.     inc hl
  1282.     inc de
  1283.     djnz copy_search_string
  1284.     xor a
  1285.     ld (de),a
  1286. find_new:
  1287.     call clear_bottom
  1288.     ld hl,search_prompt
  1289.     call _vputs
  1290.     ld hl,search_string
  1291.     call custm_vputs
  1292.     dec hl
  1293. refresh_dir:
  1294.     call draw_dir
  1295. find_input:
  1296.     call getkey_cursor
  1297.     jp z,edit_draw_menu
  1298.     cp K_ENTER
  1299.     jr z,find_selected
  1300.     cp K_CLEAR
  1301.     jr nz,find_not_clear
  1302.     xor a
  1303.     ld (search_string),a
  1304.     jr find_new
  1305. find_not_clear:
  1306.     cp K_DEL
  1307.     jr nz,find_not_del
  1308.     dec hl
  1309.     ld (hl),0
  1310.     jr find_new
  1311. find_not_del:
  1312.     cp K_UP
  1313.     jr nz,find_not_up
  1314.     xor a
  1315.     ld (dir),a
  1316.     jr refresh_dir
  1317. find_not_up
  1318.     cp K_DOWN
  1319.     jr nz,find_char
  1320.     ld (dir),a                    ;K_DOWN is already 1 :-)
  1321.     jr refresh_dir
  1322. find_char:
  1323.     push hl
  1324.     call get_char
  1325.     pop hl
  1326.     jr nz,find_input
  1327.     ld de,search_string+12
  1328.     call _cphlde
  1329.     jr z,find_input                ;max length
  1330.     ld (hl),a
  1331.     inc hl
  1332.     ld (hl),0
  1333.     call custm_vputmap
  1334.     jr find_input
  1335. find_selected:
  1336.     ld a,(search_string)
  1337.     or a
  1338.     jr z,find_input                ;nothing inputted
  1339.     call check_cursors
  1340.     jr c,$+3
  1341.     ex de,hl
  1342.     ld a,0
  1343. dir = $-1
  1344.     or a
  1345.     jr z,find_up
  1346.  
  1347. find_down:
  1348.     inc hl
  1349.     ld de,(edit_end)
  1350.     call _cphlde
  1351.     jr nc,string_not_found
  1352.     push hl
  1353.     call check_hl
  1354.     pop hl
  1355.     jr find_down
  1356.  
  1357. find_up:
  1358.     dec hl
  1359.     ld de,edit_buffer+1
  1360.     call _cphlde
  1361.     jr c,string_not_found
  1362.     push hl
  1363.     call check_hl
  1364.     pop hl
  1365.     jr find_up
  1366.  
  1367. string_not_found:
  1368.     call clear_bottom
  1369.     ld hl,str_not_found
  1370.     jp draw_status
  1371.  
  1372. check_hl:
  1373.     ld de,search_string
  1374. find_loop:
  1375.     ld a,(de)
  1376.     or a
  1377.     jr nz,find_not_done
  1378.     pop de                        ;remove call from stack
  1379.     ld (edit_cursor2),hl
  1380.     pop hl
  1381.     jp draw_menu_check_scrolling
  1382. find_not_done:
  1383.     set 5,a                        ;lowercase
  1384.     ld b,a
  1385.     ld a,(hl)
  1386.     or a
  1387.     jr nz,$+4
  1388.     ld a,' '
  1389.     set 5,a                        ;lowercase
  1390.     cp b
  1391.     ret nz
  1392.     inc hl
  1393.     inc de
  1394.     push de
  1395.     ld de,(edit_end)
  1396.     inc de
  1397.     call _cphlde
  1398.     pop de
  1399.     jr c,find_loop
  1400.     or a                        ;nz
  1401.     ret
  1402.  
  1403. draw_dir:
  1404.     ld a,(_penCol)
  1405.     push af
  1406.     ld a,$79
  1407.     ld (_penCol),a
  1408.     ld a,(dir)
  1409.     add a,30
  1410.     call _vputmap
  1411.     pop af
  1412.     ld (_penCol),a
  1413.     ret
  1414.  
  1415. choose_char:
  1416. #ifdef custom_font
  1417.     call clear_bottom
  1418. #else
  1419.     ld hl,_plotSScreen+912
  1420.     call clear_screen_bottom
  1421.     set textwrite,(iy+new_grf_flgs)
  1422. #endif
  1423.     ld a,(first_char)
  1424.     ld c,a
  1425.     ld hl,char_table
  1426.     ld b,16
  1427. create_char_table:
  1428.     push bc
  1429.     ld (hl),c
  1430.     ld a,l
  1431.     add a,a
  1432.     add a,a
  1433.     add a,a
  1434.     add a,4
  1435.     push hl
  1436.     ld l,(hl)
  1437.     ld h,char_width_table/256
  1438.     ld b,(hl)
  1439.     pop hl
  1440.     srl b
  1441.     sub b
  1442.     ld (_penCol),a
  1443.     ld a,(hl)
  1444.     inc hl
  1445.     call custm_vputmap
  1446.     pop bc
  1447.     inc c
  1448.     ld a,c                        ;1-127
  1449.     add a,a
  1450.     sbc a,a
  1451.     and 129
  1452.     add a,c
  1453.     ld c,a
  1454.     djnz create_char_table
  1455. #ifndef custom_font
  1456.     res textwrite,(iy+new_grf_flgs)
  1457.     ld hl,_plotSScreen+1023
  1458.     ld de,$ffff
  1459.     ld bc,112
  1460.     call _lddr
  1461.     inc de
  1462. #else
  1463.     ld de,$fc00+912
  1464. #endif
  1465.     ld hl,(current_char)
  1466.     ld h,0                        ;l=current char
  1467.     add hl,de
  1468.     ld bc,$07fe
  1469.     ld de,16
  1470. highlight_char:
  1471.     ld a,(hl)
  1472.     xor c                        ;flip all bits but 0
  1473.     ld (hl),a
  1474.     add hl,de
  1475.     djnz highlight_char
  1476.     ld bc,32*256
  1477. current_char = $-2
  1478. first_char = $-1
  1479. choose_char_getkey:
  1480.     push bc
  1481.     call getkey
  1482.     pop bc
  1483.     cp K_EXIT
  1484.     jp z,edit_draw_menu
  1485.     dec a
  1486.     jr nz,not_down
  1487.     ld a,16
  1488. check_char:                        ;if b>127, b=b-127
  1489.     add a,b
  1490.     ld b,a
  1491.     add a,a
  1492.     sbc a,a
  1493.     and 129
  1494.     add a,b
  1495.     ld b,a
  1496. save_char:
  1497.     ld (current_char),bc
  1498.     jp choose_char
  1499. not_down:
  1500.     dec a
  1501.     jr nz,not_left
  1502.     dec c
  1503.     jp p,save_char
  1504. scroll_left:
  1505.     inc c
  1506.     ld a,127-1
  1507.     jr check_char
  1508. not_left:
  1509.     dec a
  1510.     jr nz,not_right
  1511.     inc c
  1512.     ld a,16
  1513.     cp c
  1514.     jr nz,save_char
  1515. scroll_right:
  1516.     dec c
  1517.     ld a,1
  1518.     jr check_char
  1519. not_right:
  1520.     dec a
  1521.     jr nz,not_up
  1522.     ld a,127-16
  1523.     jr check_char
  1524. not_up:
  1525.     cp K_SECOND-4
  1526.     jr z,char_selected
  1527.     cp K_ENTER-4
  1528.     jr nz,choose_char_getkey
  1529. char_selected:
  1530.     push bc
  1531.     call draw_editor_menu
  1532.     pop hl
  1533.     ld h,char_table/256
  1534.     ld a,(hl)
  1535.  
  1536. insert_char:
  1537.     push af                        ;save char
  1538.     ld b,0
  1539.     cp $d6
  1540.     jr nz,insert_abc
  1541.     ld a,(file_type)
  1542.     cp 2
  1543.     jr nz,insert_abc            ;not an asm file
  1544.     push bc
  1545.     call check_cursors
  1546.     call nz,del_hl_de
  1547.     ld hl,(edit_cursor)
  1548.     push hl
  1549.     call eol
  1550.     dec hl
  1551.     pop de
  1552.     pop bc
  1553.     call _cphlde                ;only indent if cursor was at end of line
  1554.     jr nz,insert_abc
  1555.     dec hl
  1556.     ld a,(hl)
  1557.     cp ':'
  1558.     jr z,indent
  1559.     inc hl
  1560.     call bol
  1561.     ld a,(hl)
  1562.     cp ' '
  1563.     jr nz,insert_abc
  1564. indent:
  1565.     ld bc,' '*256
  1566. insert_abc:
  1567.     pop af
  1568.     ld hl,insert_string+2
  1569.     ld (hl),c
  1570.     dec hl
  1571.     ld (hl),b
  1572.     dec hl
  1573.     ld (hl),a
  1574.     call paste_hl
  1575.     jp check_scroll_down
  1576.  
  1577. check_save:
  1578.     ld hl,save_menu
  1579.     ld (hl),3
  1580.     ld a,(file_type)
  1581.     or a
  1582.     jr nz,check_save_menu
  1583.     ld (hl),4
  1584. check_save_menu:
  1585.     call draw_menu
  1586. check_save_getkey:
  1587.     call getkey
  1588.     cp K_EXIT
  1589.     jr z,progstart
  1590.     sub K_F4
  1591.     jr nz,not_lock_prog
  1592. lock_prog:
  1593.     ld a,(file_type)
  1594.     dec a
  1595.     jr nz,check_save_getkey
  1596.     ld hl,(edit_end)
  1597.     inc hl
  1598.     ld (edit_end),hl
  1599.     push hl
  1600.     ld de,edit_buffer
  1601.     sbc hl,de
  1602.     ex (sp),hl
  1603.     pop bc
  1604.     ld d,h
  1605.     ld e,l
  1606.     dec hl
  1607.     lddr
  1608.     inc a                        ;save
  1609. not_lock_prog:
  1610.     dec a                        ;F3
  1611.     jr nz,not_save_exit
  1612. save_exit
  1613.     call save_source
  1614. progstart:
  1615.     jp exit
  1616. not_save_exit:
  1617.     dec a                        ;F2
  1618.     jr z,progstart
  1619.     dec a                        ;F1
  1620.     jp z,edit_draw_menu
  1621.     jr check_save_getkey
  1622.  
  1623. cut_hl_de:
  1624. ;copy code between hl and de to clipboard and remove from edit_buffer
  1625.     xor a
  1626.     .db 1                        ;ld bc,xxxx
  1627. del_hl_de:
  1628. ;remove code between hl and de from edit_buffer
  1629.     ld a,skip_cut-do_cut
  1630.  
  1631.     ld (do_cut-1),a
  1632.  
  1633. get_code_size:
  1634.     push hl
  1635.     or a
  1636.     sbc hl,de
  1637.     push af
  1638.     push de
  1639.     ld de,$f600-clipboard        ;max space in clipboard
  1640.     call _cphlde
  1641.     jr c,max_clipboard
  1642.     ex de,hl
  1643. max_clipboard:
  1644.     ex (sp),hl
  1645.     pop bc
  1646.     pop af
  1647.     pop de
  1648.     jr c,get_code_size            ;wrong order
  1649.     ld (edit_cursor),hl
  1650.     ld (edit_cursor2),hl
  1651.     push hl
  1652.  
  1653.     jr do_cut
  1654. do_cut:
  1655.  
  1656.     ld de,clipboard
  1657.     jr z,no_cut
  1658. copy_to_clipboard:
  1659.     ld a,(hl)
  1660.     or a
  1661.     jr nz,$+4
  1662.     ld a,' '
  1663.     ld (de),a
  1664.     inc de
  1665.     cpi                            ;doesn't affect carry
  1666.     jp pe,copy_to_clipboard
  1667. no_cut:
  1668.     ex de,hl
  1669.     ld (hl),c
  1670.  
  1671. skip_cut:
  1672.     ld hl,(edit_end)
  1673.     sbc hl,de                    ;size to copy
  1674.     push de
  1675.     ex (sp),hl
  1676.     pop bc
  1677.     pop de
  1678.     jr z,no_del_copy
  1679.     ldir
  1680. no_del_copy:
  1681.     ld (edit_end),de            ;new end
  1682.     call check_cursors
  1683.     jr c,got_del_cursor
  1684.     ex de,hl
  1685. got_del_cursor:
  1686.     ld (edit_cursor),hl
  1687.     ld (edit_cursor2),hl
  1688.     ld hl,(edit_start)
  1689. del_check:
  1690.     dec hl
  1691.     ld de,(edit_cursor)
  1692.     call _cphlde
  1693.     jp c,refresh_current_line_breaks    ;done
  1694.     call bol
  1695.     ld (edit_start),hl            ;scroll up
  1696.     jr del_check
  1697.  
  1698. delete:
  1699.     call check_cursors
  1700.     jr nz,do_delete
  1701.     ld hl,edit_buffer+1
  1702.     call _cphlde
  1703.     jr z,edit2
  1704.     ld h,d
  1705.     ld l,e
  1706.     dec de                        ;cut one letter
  1707. do_delete:
  1708.     call cut_hl_de
  1709.     jr edit2
  1710.  
  1711. clear:
  1712.     call check_cursors
  1713.     jr nz,do_delete
  1714.     push hl
  1715.     ld a,$d6
  1716.     cp (hl)
  1717.     jr z,clear_row
  1718.     ld de,(edit_end)
  1719.     call _cphlde
  1720.     jr z,clear_row
  1721.     call eol
  1722.     dec hl
  1723.     jr do_clear
  1724.  
  1725. clear_row:
  1726.     dec hl
  1727.     call bol
  1728. do_clear:
  1729.     pop de
  1730.     call cut_hl_de
  1731. edit2:
  1732.     jp edit
  1733.  
  1734. detect_f5_files:
  1735.     ld hl,zac_present
  1736.     ld (hl),$20
  1737.     push hl
  1738.     ld hl,zac-1
  1739.     rst 20h
  1740.     rst 10h
  1741.     pop hl
  1742.     jr c,check_text_view
  1743.     ld (hl),$28
  1744. check_text_view:
  1745.     ld hl,text_view_present
  1746.     ld (hl),$20
  1747.     push hl
  1748.     ld hl,textview-1
  1749.     rst 20h
  1750.     rst 10h
  1751.     pop hl
  1752.     ret c
  1753.     ld (hl),$28
  1754.     ret
  1755.  
  1756. f5:
  1757.     jr can_run_f5
  1758. check_f5 = $-1
  1759. can_run_f5:
  1760.     call save_source            ;save source
  1761.     res 4,(iy+9)
  1762.     ld hl,file_name
  1763.     rst 20h
  1764.     call _OP1TOOP6
  1765.  
  1766.     ld hl,(progstart+1)
  1767.     push hl
  1768.     ld hl,(edit_start)
  1769.     push hl
  1770.     ld hl,(edit_cursor)
  1771.     push hl
  1772.     ld hl,(edit_cursor2)
  1773.     push hl
  1774.     ld a,(mode_flag)
  1775.     push af
  1776.  
  1777.     ld a,0
  1778. file_type = $-1
  1779.     or a
  1780.     jr nz,not_exec_basic
  1781.     call _clrWindow
  1782.     ld hl,_Flags+NewDispf
  1783.     ld a,(hl)
  1784.     set ProgramExecuting,(hl)
  1785.     push af
  1786.     push hl
  1787.  
  1788.     call exec_basic
  1789.  
  1790.     pop hl
  1791.     pop af
  1792.     ld (hl),a
  1793.     ld b,0
  1794.     jr done_exec
  1795.  
  1796. not_exec_basic:
  1797.     ld hl,textview-1
  1798.     dec a
  1799.     jr z,call_prog
  1800.     ld hl,zac-1
  1801. call_prog:
  1802.     rst 20h
  1803.     set ex_asm_module,(iy+anumeditFlgs)    ;module execution (uses OP6)
  1804. #ifdef grayscale
  1805.     call remove_int
  1806. #endif
  1807.     call exec_asm
  1808.     pop bc
  1809.     pop de
  1810.  
  1811. done_exec:
  1812.     pop af
  1813.     ld (mode_flag),a
  1814.     pop hl
  1815.     ld (edit_cursor2),hl
  1816.     pop hl
  1817.     ld (edit_cursor),hl
  1818.     pop hl
  1819.     ld (edit_start),hl
  1820.     pop hl
  1821.     ld (progstart+1),hl
  1822.     ld a,b
  1823.     or a
  1824.     jr nz,error
  1825.     ld hl,file_name
  1826.     rst 20h
  1827.     jp load_prog_edit
  1828.  
  1829. error:
  1830.     push de
  1831. #ifdef grayscale
  1832.     call install_int
  1833. #endif
  1834.     call load_op1
  1835.     call detect_f5_files
  1836.     call _RAM_PAGE_1
  1837.     ;call _POPREALO2
  1838.     pop de
  1839.     ld hl,edit_buffer+1
  1840.     ld a,(hl)
  1841.     cp 'A'
  1842.     jr z,skip_dec_de            ;Zac returns line numbers off by 1 in includes
  1843. search_for_line:
  1844.     dec de
  1845. skip_dec_de:
  1846.     ld a,d
  1847.     or e
  1848.     jr nz,search_not_done
  1849.     ld (edit_cursor2),hl
  1850. draw_menu_check_scrolling:
  1851.     ld (edit_cursor),hl
  1852.     call draw_editor_menu
  1853.     call set_column
  1854.     jp check_scroll
  1855. search_not_done:
  1856.     ld a,$d6
  1857.     ld bc,-1
  1858.     cpir
  1859.     jr search_for_line
  1860.  
  1861. custm_vputs:
  1862.     ld a,(hl)
  1863.     inc hl
  1864.     or a
  1865.     ret z
  1866.     cp $d6
  1867.     jr nz,$+4
  1868.     ld a,$5c
  1869.     call custm_vputmap
  1870.     jr custm_vputs
  1871.  
  1872. disp_chars:
  1873.     push af
  1874.     push de
  1875.     push hl
  1876.     ld hl,_penRow
  1877.     ld a,(hl)
  1878.     cp 50
  1879.     jr nc,no_prespace            ;off screen already
  1880.     dec hl
  1881.     ld a,(hl)
  1882.     dec a                        ;check if we're at the beginning of a new line
  1883.     jr nz,no_prespace
  1884.     ld (hl),a
  1885.     ld h,(iy+5)
  1886.     set 1,(iy+5)                ;underline
  1887.     call _VPUTBLANK                ;display a leading space
  1888.     ld (iy+5),h                    ;reset display
  1889. no_prespace:
  1890.     pop hl
  1891.     pop de
  1892.     pop af
  1893.  
  1894.     or a
  1895.     push af
  1896.     scf
  1897.     sbc hl,de
  1898.     ld b,h
  1899.     ld c,l
  1900.     ex de,hl
  1901.     jr c,done_disp_chars
  1902.     inc bc
  1903.     ld a,(_penRow)
  1904.     cp 50
  1905.     jr nc,done_disp_chars        ;finished
  1906.  
  1907. disp_char_loop:
  1908.     ld a,(hl)
  1909.     cp $d6
  1910.     jr z,new_line
  1911.     or a
  1912.     jr nz,not_new_line
  1913. new_line:
  1914.     call _VPUTBLANK
  1915.     ex de,hl
  1916.     ld hl,_penRow
  1917.     ld a,(hl)
  1918.     add a,7
  1919.     ld (hl),a
  1920.     dec hl
  1921.     ld (hl),1
  1922.     ex de,hl
  1923.     cp 50
  1924.     jr nc,done_disp_chars        ;off screen
  1925.     bit 3,(iy+5)
  1926.     jr z,inc_char
  1927.     xor a
  1928.     ld (de),a
  1929.     ld a,' '
  1930. not_new_line:
  1931.     call custm_vputmap            ;display character
  1932. inc_char:
  1933.     cpi
  1934.     jp pe,disp_char_loop
  1935. done_disp_chars:
  1936.     pop af
  1937.     dec a
  1938. save_cursor:
  1939.     ret nz
  1940.     ex de,hl
  1941.     ld hl,(_penCol)
  1942.     dec l
  1943.     ld (cursor_col),hl
  1944.     ex de,hl
  1945.     ret
  1946.  
  1947. #ifdef custom_font
  1948. vputmap:
  1949.     jp _vputmap
  1950. custm_vputmap:
  1951.     cp ' '
  1952.     jr c,vputmap
  1953.     cp 128
  1954.     jr nc,vputmap
  1955.     cp '#'
  1956.     jr z,vputmap
  1957.     cp '*'
  1958.     jr z,vputmap
  1959.     push hl
  1960.     ld hl,char_bitmap+1
  1961.     ld (char_start),hl
  1962.     dec hl
  1963.     ld b,8
  1964. clear_bitmap:
  1965.     ld (hl),0
  1966.     inc hl
  1967.     djnz clear_bitmap
  1968.     ld hl,shift_down
  1969.     ld bc,5
  1970.     cpir
  1971.     jr nz,no_shift
  1972.     ld hl,char_bitmap+2
  1973.     ld (char_start),hl
  1974. no_shift:
  1975.     sub 32
  1976.     ld l,a
  1977.     ld a,$b7                    ;or a
  1978.     ld (shift),a
  1979.     srl l
  1980.     jr nc,no_rld
  1981.     ld a,$37                    ;scf
  1982.     ld (shift),a
  1983. no_rld:
  1984.     ld h,0
  1985.     ld a,l
  1986.     add a,a
  1987.     add a,a
  1988.     rl h
  1989.     add a,l
  1990.     ld l,a
  1991.     ld a,0
  1992.     adc a,h
  1993.     ld h,a                        ;multiply by 5
  1994.     ld de,FontStart
  1995.     add hl,de
  1996.     ld de,char_bitmap
  1997. char_start = $-2
  1998.     ld bc,5
  1999.     ldir
  2000.     ld d,c
  2001.     ld hl,char_bitmap-1
  2002.     ld bc,7*256+%11110000
  2003.     bit 3,(iy+5)
  2004.     jr z,shift_loop
  2005.     ld d,c                        ;inverted text
  2006. shift_loop:
  2007.     inc hl
  2008. shift:
  2009.     or a
  2010.     jr nc,skip_rld
  2011.     xor a
  2012.     rld
  2013. skip_rld:
  2014.     ld a,(hl)
  2015.     and c
  2016.     xor d
  2017.     ld (hl),a
  2018.     djnz shift_loop
  2019. ;char_bitmap contains our char
  2020.     ld ix,char_bitmap
  2021.     ld hl,(_penCol)
  2022.     ld b,l
  2023.     ld c,h
  2024. ;putsprite
  2025.     ld h,$fc>>2
  2026.     ld a,c
  2027.     add a,a
  2028.     add a,a
  2029.     ld l,a
  2030.     ld a,b
  2031.     rra
  2032.     add hl,hl
  2033.     rra
  2034.     add hl,hl
  2035.     rra
  2036.     or l
  2037.     ld l,a
  2038.     ld a,b
  2039.     and 7
  2040.     ld (putspritex-1),a
  2041.     ld bc,$0700
  2042. putspritel:
  2043.     ex de,hl
  2044.     ld l,(ix)
  2045.     ld h,c
  2046.     inc ix
  2047.     jr putspritex
  2048. putspritex:
  2049.     add hl,hl
  2050.     add hl,hl
  2051.     add hl,hl
  2052.     add hl,hl
  2053.     add hl,hl
  2054.     add hl,hl
  2055.     add hl,hl
  2056.     add hl,hl
  2057.     ex de,hl
  2058.     ld a,d
  2059.     or (hl)
  2060.     ld (hl),a
  2061.     inc hl
  2062.     ld a,e
  2063.     or (hl)
  2064.     ld (hl),a
  2065.     ld de,15
  2066.     add hl,de
  2067.     djnz putspritel
  2068.  
  2069.     ld hl,_penCol
  2070.     ld a,(hl)
  2071.     add a,4
  2072.     ld (hl),a
  2073.     pop hl
  2074.     ret
  2075. #else
  2076. custm_vputmap:
  2077.     cp ' '
  2078. vputmap:
  2079.     jp nz,_vputmap
  2080.     bit 3,(iy+5)
  2081.     jr nz,vputmap
  2082.     push hl
  2083.     ld hl,_penCol
  2084.     inc (hl)
  2085.     pop hl
  2086.     ret
  2087. #endif
  2088.  
  2089. draw_cursor:
  2090.     ld hl,(_penCol)
  2091.     push hl
  2092.     ld hl,0
  2093. cursor_col = $-2
  2094. cursor_row = $-1
  2095.     ld (_penCol),hl
  2096.     ld a,0
  2097. cursor_state = $-1
  2098.     xor 8
  2099.     ld (cursor_state),a
  2100.     or 2
  2101.     ld hl,_Flags+textFlags
  2102.     ld (hl),a
  2103.     call _VPUTBLANK
  2104.     ld (hl),a
  2105.     pop hl
  2106.     ld (_penCol),hl
  2107.     ret
  2108.  
  2109. getkey_cursor:                    ;removes cursor after a key is pressed
  2110.     push hl
  2111.     ld hl,(_penCol)
  2112.     ld (cursor_col),hl
  2113.     call getkey_cursor2
  2114. clear_cursor:                    ;push something and call this to remove cursor
  2115.     push af
  2116.     ld a,(cursor_state)
  2117.     or a
  2118.     call nz,draw_cursor
  2119.     pop af
  2120.     pop hl
  2121.     cp K_EXIT
  2122.     ret
  2123.  
  2124. getkey:
  2125.     ld a,$b7                    ;or a
  2126.     ld (cursor_toggle),a
  2127.     jr getkey_loop
  2128. getkey_cursor2:                    ;leaves cursor
  2129.     ld a,$37                    ;scf
  2130.     ld (cursor_toggle),a
  2131. getkey_loop:
  2132.     xor a
  2133.     ld (cursor_state),a            ;always show the cursor when you move
  2134.     ld c,200                    ;apd countdown
  2135. cursor_loop:
  2136.     push bc
  2137. cursor_toggle:
  2138.     or a
  2139.     call c,draw_cursor
  2140.     pop bc
  2141.     ld b,60                        ;cursor speed
  2142. getkey_wait:
  2143.     xor a
  2144.     call _getcsc
  2145.     or a
  2146.     ret nz
  2147.     in a,(3)
  2148.     bit 3,a
  2149.     jr z,shut_down
  2150.     halt
  2151.     djnz getkey_wait
  2152.     dec c
  2153.     jr nz,cursor_loop
  2154. shut_down:
  2155.     ld a,1
  2156.     out (3),a
  2157.     halt
  2158.     ld a,11
  2159.     out (3),a
  2160. release_on:
  2161.     halt
  2162.     in a,(3)
  2163.     bit 3,a
  2164.     jr z,release_on
  2165.     jr getkey_loop
  2166.  
  2167. get_char:
  2168.     cp K_SECOND
  2169.     jr z,toggle_second
  2170.     cp K_ALPHA
  2171.     jr z,toggle_alpha
  2172. get_char_no_mode:
  2173.     cp K_PRGM
  2174.     jr nz,not_prgm
  2175.     ld hl,prgm_keys
  2176.     jr prgm_custm_sign
  2177. not_prgm:
  2178.     cp K_CUSTOM
  2179.     jr nz,not_custm
  2180.     ld hl,custm_keys
  2181.     jr prgm_custm_sign
  2182. not_custm:
  2183.     cp K_SIGN
  2184.     jr nz,not_sign
  2185.     ld hl,sign_keys
  2186. prgm_custm_sign:
  2187.     ld a,0
  2188. mode_flag = $-1
  2189.     rra
  2190.     ld e,a
  2191.     ld d,0
  2192.     add hl,de
  2193.     ld a,(hl)
  2194.     cp a
  2195.     ret
  2196. not_sign:
  2197.     ld hl,standard_keys
  2198.     push hl
  2199.     ld bc,5
  2200.     cpir
  2201.     pop hl
  2202.     jr nz,not_normal_key
  2203.     add hl,bc
  2204.     ld a,(file_type)
  2205.     inc a
  2206.     ld c,a
  2207.     add a,a
  2208.     add a,a
  2209.     add a,c
  2210.     ld c,a
  2211.     add hl,bc
  2212.     ld a,(hl)
  2213.     cp a
  2214.     ret
  2215. not_normal_key:
  2216.     ld hl,mode_flag
  2217.     bit 1,(hl)
  2218.     jr nz,special_char
  2219. get_alpha:
  2220.     ld hl,letters
  2221.     ld bc,26
  2222.     cpir
  2223.     ret nz
  2224.     ld a,'a'
  2225.     add a,c
  2226.     ld hl,mode_flag
  2227.     dec (hl)
  2228.     inc (hl)
  2229.     ret z
  2230.     res 5,a
  2231.     cp a
  2232.     ret
  2233. special_char:
  2234.     ld hl,key_table1
  2235.     ld bc,key_table2-key_table1
  2236.     cpir
  2237.     ret nz
  2238.     ld hl,key_table2
  2239.     add hl,bc
  2240.     ld a,(hl)
  2241.     cp a
  2242.     ret
  2243. toggle_second:
  2244.     ld hl,mode_flag
  2245.     ld a,2
  2246.     jr save_flag
  2247. toggle_alpha:
  2248.     ld hl,mode_flag
  2249.     bit 1,(hl)
  2250.     jr nz,toggle_second
  2251.     ld a,1
  2252. save_flag:
  2253.     xor (hl)
  2254.     ld (hl),a
  2255. disp_mode:
  2256.     ld a,(mode_flag)
  2257.     ld l,a
  2258.     ld h,0
  2259.     ld de,mode_table
  2260.     add hl,de
  2261.     ld a,(hl)
  2262.     ld hl,$1400
  2263.     ld (_curRow),hl
  2264.     call _putc
  2265. nz:
  2266.     or 1
  2267.     ret
  2268.  
  2269. varname_char:
  2270.     cp K_SECOND
  2271.     jr z,toggle_second
  2272.     cp K_ALPHA
  2273.     jr z,toggle_alpha
  2274.     ld b,a
  2275.     ld a,(mode_flag)
  2276.     bit 1,a
  2277.     ld a,b
  2278.     jr z,get_alpha
  2279.     call _cphlde
  2280.     jr z,nz
  2281. get_num:
  2282.     ld hl,num_table
  2283.     ld bc,10
  2284.     cpir
  2285.     ret nz
  2286.     ld a,c
  2287.     add a,'0'
  2288.     cp a
  2289.     ret
  2290.  
  2291. clear_bottom:
  2292.     ld hl,$fc00+912
  2293. clear_screen_bottom:
  2294.     ld b,112
  2295.     xor a
  2296. clear_bottom_loop:
  2297.     ld (hl),a
  2298.     inc hl
  2299.     djnz clear_bottom_loop
  2300.     ld hl,$3901
  2301.     ld (_penCol),hl
  2302.     call clear_cursor            ;pops call off stack anyway :-)
  2303.  
  2304. save_source:
  2305.     ld hl,file_name
  2306.     rst 20h
  2307.     rst 10h
  2308.     call nc,_delvar
  2309.     call _RAM_PAGE_1
  2310.     ld hl,(edit_end)
  2311.     push hl
  2312.     ld de,edit_buffer+1
  2313.     xor a
  2314. strip_spaces:
  2315.     ld bc,-1
  2316.     cpdr
  2317.     call _cphlde
  2318.     jr c,done_strip_spaces
  2319.     inc hl
  2320.     ld (hl),' '
  2321.     dec hl
  2322.     jr strip_spaces
  2323. done_strip_spaces:
  2324.     pop hl                        ;retrieve edit_end
  2325.     or a
  2326.     dec de
  2327.     sbc hl,de                    ;hl=size
  2328.     call _CREATEPROG
  2329.     push hl
  2330.     dec hl
  2331.     dec hl
  2332.     dec hl
  2333.     dec hl
  2334.     ld (hl),0                    ;set folder
  2335. folder = $-1
  2336.     pop hl
  2337.     call _DATA_SIZE_TO_DE
  2338.     call _SET_ABS_DEST_ADDR
  2339.     ld a,1
  2340.     ld hl,edit_buffer-$8000
  2341.     call _SET_ABS_SRC_ADDR
  2342.     xor a
  2343.     ex de,hl
  2344.     call _MM_LDIR_SET_SIZE
  2345.     call _RAM_PAGE_1
  2346.     ld hl,edit_buffer+1
  2347.     ld a,(hl)
  2348.     or a
  2349.     jr nz,save_file_name
  2350.     ex de,hl
  2351.     ld hl,(edit_end)
  2352.     scf
  2353.     sbc hl,de
  2354.     jr z,save_file_name
  2355.     push de
  2356.     ex (sp),hl
  2357.     pop bc
  2358.     inc hl
  2359.     ldir
  2360.     ld (edit_end),de
  2361. save_file_name:
  2362.     ld hl,_asapvar
  2363.     rst 20h
  2364.     rst 10h
  2365.     xor a
  2366.     ld hl,file_name-_asm_exec_ram+4    ;offset
  2367.     add hl,de
  2368.     adc a,b
  2369.     call _SET_ABS_DEST_ADDR
  2370.     xor a
  2371.     ld hl,file_name
  2372.     call _SET_ABS_SRC_ADDR
  2373.     ld hl,11
  2374.     call _MM_LDIR_SET_SIZE
  2375.     jp _RAM_PAGE_1
  2376.  
  2377. load_op1:
  2378.     ld de,file_name
  2379.     call _MOVFROP1
  2380. ;selected prog is in OP1
  2381.     rst 10h
  2382.     call _DATA_SIZE_TO_DE
  2383.     call _GET_DATA_SIZE_DE_INC
  2384.     ld a,e
  2385.     or a
  2386.     jr nz,detok
  2387.     ld a,d
  2388.     or a
  2389.     jr nz,no_detok
  2390. detok:
  2391.     push de
  2392.     call _setupEditequ
  2393.     pop de
  2394.     ld hl,$298e
  2395.     or a
  2396.     sbc hl,de
  2397.     jr nz,not_locked_tokenized
  2398. ;locked tokenized
  2399.     call _bufDelete
  2400.     call _bufDelete
  2401.     jr not_untok
  2402. not_locked_tokenized:
  2403.     ld a,d
  2404.     or e
  2405.     jr nz,not_untok
  2406. ;locked untokenized
  2407.     call _bufDelete
  2408.     jr done_detok
  2409. not_untok:
  2410.     call _detok
  2411.     call _bufToTop
  2412.     xor a
  2413.     call _bufInsert
  2414. done_detok:
  2415.     call _closeEditequ
  2416. no_detok:
  2417.     rst 10h
  2418.     push hl
  2419.     dec hl
  2420.     dec hl
  2421.     dec hl
  2422.     dec hl
  2423.     ld a,(hl)
  2424.     ld (folder),a            ;save folder
  2425.     pop hl
  2426.     call _DATA_SIZE_TO_DE
  2427.     call _SET_ABS_SRC_ADDR
  2428.     ld hl,edit_buffer
  2429.     add hl,de
  2430.     ld (edit_end),hl            ;set end of buffer
  2431.     ld a,1
  2432.     ld hl,edit_buffer-$8000
  2433.     call _SET_ABS_DEST_ADDR
  2434.     xor a
  2435.     ex de,hl
  2436.     call _MM_LDIR_SET_SIZE
  2437.     call _RAM_PAGE_1
  2438.  
  2439. insert_line_breaks:
  2440.     ld hl,edit_buffer+1
  2441.     ld de,(edit_end)
  2442. insert_line_breaks_hl_de:
  2443.     ld (done_line_breaks),de
  2444. insert_line_breaks_loop:
  2445.     call refresh_line_breaks
  2446.     push hl
  2447.     ld de,0
  2448. done_line_breaks = $-2
  2449.     or a
  2450.     sbc hl,de
  2451.     pop hl
  2452.     jr c,insert_line_breaks_loop
  2453.     ret
  2454.  
  2455. refresh_current_line_breaks:
  2456.     ld hl,(edit_cursor)
  2457.     call bol
  2458.     push hl
  2459.     dec hl
  2460.     call bol
  2461.     call refresh_line_breaks
  2462.     pop de
  2463.     dec hl
  2464.     call _cphlde
  2465.     ret nc
  2466.     ex de,hl
  2467.  
  2468. refresh_line_breaks:
  2469.     ld ix,0                        ;ixh=length of line, ixl=done flag
  2470.     push hl                        ;hl->starting line to refresh
  2471.     ld hl,0
  2472.     ld b,h                        ;flag for occurrence of $00
  2473.     ld de,(edit_end)
  2474.     or a
  2475.     sbc hl,de
  2476.     ld (end_of_word),hl
  2477.     pop hl
  2478.  
  2479. refresh_line_breaks_loop:
  2480.     push hl
  2481.     sll b                        ;so it's not 0
  2482.  
  2483. ;get new word
  2484.     ld c,0                        ;word size in c
  2485.     ex de,hl
  2486.  
  2487. next_letter:
  2488.     ld a,(de)
  2489.     or a
  2490.     jr nz,not_line_break
  2491.     ld b,a                        ;b=0 so we keep going
  2492.     ld a,' '
  2493.     ld (de),a
  2494. not_line_break:
  2495.     inc de
  2496.     ld h,char_width_table/256
  2497.     ld l,a
  2498.     ld a,(hl)                    ;get width of char
  2499.     add a,c                        ;add to total
  2500.     cp width
  2501.     jr nc,word_too_long            ;word is too long
  2502.     ld c,a
  2503.     ld a,l                        ;get char back
  2504.     ld hl,0
  2505. end_of_word = $-2
  2506.     add hl,de
  2507.     jr c,no_more_lines            ;end of document
  2508.     cp ' '
  2509.     jr z,finish_word
  2510.     cp $d6
  2511.     jr nz,next_letter            ;stop if we hit end of line
  2512. no_more_lines:
  2513.     ld ixl,1                    ;not going any further
  2514.  
  2515. finish_word:
  2516.     ex de,hl                    ;end of word
  2517.     pop de
  2518.     ld a,ixh
  2519.     add a,c
  2520.     ld ixh,a
  2521.     cp width
  2522.     jr nc,need_line_break
  2523.     ld a,ixl
  2524.     or a                        ;check if we're done
  2525.     jr z,refresh_line_breaks_loop
  2526.     ret
  2527.  
  2528. need_line_break:
  2529.     ex de,hl
  2530.     dec hl
  2531.     ld (hl),0                    ;space marked as line break
  2532.     inc hl
  2533.     dec b                        ;stop only if previous word had a break
  2534.     jr nz,refresh_line_breaks
  2535.     ret
  2536.  
  2537. word_too_long:                    ;insert a space character
  2538.     ld a,c
  2539.     push de
  2540.     ld hl,(edit_end)
  2541.     ld de,edit_buffer+max_size
  2542.     call _cphlde
  2543.     jr c,$+3
  2544.     ex de,hl
  2545.     pop de
  2546.     push hl
  2547.     dec de
  2548.     dec de
  2549.     dec de
  2550.     or a
  2551.     sbc hl,de
  2552.     ex (sp),hl
  2553.     pop bc
  2554.     ld d,h
  2555.     ld e,l
  2556.     inc hl
  2557.     ld (edit_end),hl
  2558.     ld (end_of_word),hl
  2559.     jr z,no_letters_to_shift    ;values are the same
  2560.     ex de,hl
  2561.     lddr
  2562. no_letters_to_shift:
  2563.     ld c,a
  2564.     xor a
  2565.     ld (de),a                    ;mark space as a line break
  2566.     inc de
  2567.     ld hl,(edit_cursor)
  2568.     call _cphlde
  2569.     jr c,finish_word
  2570.     inc hl
  2571.     ld (edit_cursor),hl
  2572.     call check_cursor
  2573.     jr finish_word
  2574.  
  2575. exit:
  2576.     res 4,(iy+9)
  2577.     call save_file_name
  2578.     ;xor a
  2579.     ;ld (_asapvar+1),a            ;force recopy
  2580.     jp _clrWindow
  2581.  
  2582. bol:                            ;beginning of line
  2583.     ld de,edit_buffer+1
  2584.     call _cphlde
  2585.     ex de,hl
  2586.     ret c
  2587.     ex de,hl
  2588.     ld d,$d6
  2589. bol_search:
  2590.     dec hl
  2591.     ld a,(hl)
  2592.     or a
  2593.     jr z,got_bol
  2594.     cp d
  2595.     jr nz,bol_search
  2596. got_bol:
  2597.     inc hl
  2598.     ret
  2599.  
  2600. eol:                            ;end of line
  2601.     ex de,hl
  2602.     ld hl,(edit_end)
  2603.     inc hl
  2604.     or a
  2605.     sbc hl,de                    ;maximum search
  2606.     ld b,h
  2607.     ld c,l
  2608.     ex de,hl
  2609.     ret z
  2610.     ld d,$d6
  2611. eol_search:
  2612.     ld e,(hl)
  2613.     ld a,d
  2614.     cpi
  2615.     ret z
  2616.     ret po
  2617.     ld a,e
  2618.     or a
  2619.     jr nz,eol_search
  2620.     ret
  2621.  
  2622. disp_title:
  2623.     push hl
  2624.     call _clrLCD
  2625.     pop hl
  2626.     ld c,(hl)                    ;b already 0
  2627.     inc hl
  2628.     ld (_penCol),bc
  2629.     call _vputs
  2630.     ld hl,$fc00
  2631.     ld b,112
  2632. invert:
  2633.     ld a,(hl)
  2634.     cpl
  2635.     ld (hl),a
  2636.     inc hl
  2637.     djnz invert
  2638.     ret
  2639.  
  2640. refresh_data:
  2641.     xor a
  2642.     ld (clipboard),a
  2643.     ld (search_string),a
  2644. ;create width table
  2645.     ld hl,char_width_table
  2646.     ld (hl),1                    ;space
  2647.     inc l
  2648. create_char_loop:
  2649.     ld a,l
  2650. #ifdef custom_font
  2651.     cp '#'
  2652.     jr z,normal_char
  2653.     cp '*'
  2654.     jr z,normal_char
  2655.     cp 32
  2656.     jr c,normal_char
  2657.     cp 128
  2658.     jr nc,normal_char
  2659.     ld b,4
  2660.     jr got_width
  2661. normal_char:
  2662. #endif
  2663.     push hl
  2664.     call _copycharmaps
  2665.     ld b,(hl)
  2666.     pop hl
  2667. got_width:
  2668.     ld (hl),b
  2669.     inc l
  2670.     jr nz,create_char_loop
  2671.     ret
  2672.  
  2673. draw_menu:
  2674.     push hl
  2675.     ld de,$ffff
  2676.     ld b,0
  2677.     call draw_bar_border
  2678.     ld a,5
  2679. draw_bar_loop:
  2680.     ld hl,bar_middle+15
  2681.     call _lddr16
  2682.     dec a
  2683.     jr nz,draw_bar_loop
  2684.     call draw_bar_border
  2685.     pop hl
  2686.     ld a,$39
  2687.     ld (_penRow),a
  2688.     set 3,(iy+5)
  2689.     ld b,(hl)
  2690.     inc hl
  2691. draw_menu_loop:
  2692.     ld a,(hl)
  2693.     ld (_penCol),a
  2694.     inc hl
  2695.     call _vputs
  2696.     djnz draw_menu_loop
  2697.     res 3,(iy+5)
  2698.     ret
  2699.  
  2700. draw_bar_border:
  2701.     ld hl,bar_border+15
  2702. _lddr16:
  2703.     ld c,16
  2704.  
  2705. _lddr:
  2706.     ldd
  2707.     ldd
  2708.     ldd
  2709.     ldd
  2710.     ldd
  2711.     ldd
  2712.     ldd
  2713.     ldd
  2714.     ldd
  2715.     ldd
  2716.     ldd
  2717.     ldd
  2718.     ldd
  2719.     ldd
  2720.     ldd
  2721.     ldd
  2722.     ret po
  2723.     jr _lddr
  2724.  
  2725. backup_screen:
  2726.     ld hl,$ffff
  2727.     ld de,$f9ff
  2728.     ld bc,1024
  2729.     call _lddr
  2730.     ld a,$76
  2731.     out (0),a
  2732.     ret
  2733.  
  2734. draw_editor_menu:
  2735.     xor a
  2736.     ld (check_f5),a
  2737.     ld a,2
  2738.     ld (file_type),a
  2739.     ld hl,editor_menu
  2740.     call draw_menu
  2741.     call _RAM_PAGE_1
  2742.     ld hl,57*256+108
  2743.     ld (_penCol),hl                ;for updating f5
  2744.     ld hl,(edit_buffer+1)
  2745.     ld a,h
  2746.     cp ':'
  2747.     jr nz,basic_prog
  2748.     ld a,l
  2749.     cp 'A'
  2750.     jr z,disable_f5
  2751.     cp 'Z'
  2752.     jr nz,not_asm_source
  2753.     ld hl,build
  2754. zac_present:
  2755.     jr nz,disp_f5
  2756. disable_f5:
  2757.     ld a,edit2-can_run_f5+256
  2758.     ld (check_f5),a
  2759.     ret
  2760. not_asm_source:
  2761.     cp 'T'
  2762.     jr nz,basic_prog                ;not text file
  2763.     ld a,1
  2764.     ld (file_type),a
  2765.     ld hl,view
  2766. text_view_present:
  2767.     jr nz,disp_f5
  2768.     jr disable_f5
  2769. basic_prog:
  2770.     xor a
  2771.     ld (file_type),a
  2772.     ld hl,run
  2773. disp_f5:
  2774.     set 3,(iy+5)
  2775.     call _vputs
  2776.     res 3,(iy+5)
  2777.     ret
  2778.  
  2779. check_file:
  2780.     ld a,(file_type)
  2781. check_file_validity:
  2782.     push af
  2783.     rst 10h
  2784.     call _DATA_SIZE_TO_DE
  2785.     push hl
  2786.     ld hl,max_size+3
  2787.     or a
  2788.     sbc hl,de
  2789.     pop hl
  2790.     pop bc
  2791.     ret c                        ;invalid size
  2792.     call _GET_DATA_SIZE_DE_INC
  2793.     push hl
  2794.     ld hl,$288e
  2795.     call _cphlde
  2796.     pop hl
  2797.     jr z,invalid_file
  2798.     ld c,a
  2799.     ld a,b
  2800.     cp 3
  2801.     ret z
  2802.     or a
  2803.     jr nz,check_not_basic
  2804. check_basic:
  2805.     push bc
  2806.     push de
  2807.     push hl
  2808.     call check_asm
  2809.     pop hl
  2810.     pop de
  2811.     pop bc
  2812.     jr z,invalid_file
  2813.     call check_text
  2814. toggle_z:
  2815.     jr z,invalid_file
  2816.     cp a
  2817.     ret
  2818. invalid_file
  2819.     or 1
  2820.     ret
  2821. check_not_basic:
  2822.     dec a
  2823.     jr nz,check_asm
  2824. check_text:
  2825.     ld a,e
  2826.     or a
  2827.     ret nz
  2828.     ld a,d
  2829.     cp 'T'
  2830.     ret nz
  2831.     jr check_colon
  2832. check_asm:
  2833.     ld a,e
  2834.     or a
  2835.     ret nz
  2836.     ld a,d
  2837.     cp 'Z'
  2838.     jr z,check_colon
  2839.     cp 'A'
  2840.     ret nz
  2841. check_colon:
  2842.     ld a,c
  2843.     call _GETB_AHL
  2844.     cp ':'
  2845.     ret
  2846.  
  2847. check_file_name:
  2848.     ;checks file_name in op1
  2849.     ;nc=invalid
  2850.     ;c=valid file
  2851.     ;    z=source file
  2852.     ;    nz=not source
  2853.     rst 10h
  2854.     inc b                        ;nz
  2855.     ret c
  2856.     ld a,(_OP1)
  2857.     cp $12
  2858.     jr nz,invalid_file_name
  2859.     ld a,3                        ;all datatypes
  2860.     call check_file_validity
  2861.     scf
  2862.     ret z                        ;a source file
  2863. invalid_file_name:
  2864.     or a
  2865.     ret
  2866.  
  2867. #ifdef handle_errors
  2868. error_syntax = 135
  2869. error_undefined = 142
  2870.  
  2871. error_handler:
  2872.     ;push af
  2873.     ;call _popErrorHandler
  2874.     ;pop af
  2875.     ;cp error_syntax
  2876.     ;jr z,trap_error
  2877.     ;cp error_undefined
  2878.     ;jp nz,_monErrHand            ;default error handler
  2879. trap_error:
  2880.     push af
  2881.     call _runIndicOff
  2882.     ld hl,0
  2883. fpbase = $-2
  2884.     ld (_FPBASE),hl
  2885.     ld hl,0
  2886. opbase = $-2
  2887.     ld (_OPBASE),hl
  2888.     ld hl,basic_backup
  2889.     ld de,_PARSEVAR
  2890.     ld bc,_LASTENTRYPTR-_PARSEVAR
  2891.     ldir
  2892.     ld a,$0d
  2893.     out (5),a
  2894.     call _popErrorHandler
  2895.     pop af
  2896.     jp _monErrHand
  2897.  
  2898.     ;ld sp,0
  2899. ;stack_save = $-2
  2900.     ;call _OP3TOOP1
  2901.     ;jp load_prog_edit
  2902. #if 0
  2903.     ld hl,(_ELCNT)
  2904.     xor a
  2905.     call _dispHL
  2906.     call _newline
  2907.     ld hl, _OP3+2                ;name of basic program
  2908.     call _puts
  2909.     call _newline
  2910.     ld hl,(_P_CURPC+1)
  2911.     ld a,(_P_CURPC)
  2912.     call _dispHL
  2913.     call _newline
  2914.     jp _JforceCmdNoChar
  2915. #endif
  2916.  
  2917. #endif
  2918.  
  2919.  
  2920. #ifdef grayscale
  2921. int_start:
  2922.     ld hl,counter
  2923.     dec (hl)
  2924.     jr nz,no_reset
  2925.     ld (hl),5
  2926.     jr flip_page
  2927. no_reset:
  2928.     ld a,(hl)
  2929.     dec a
  2930.     ret nz
  2931. flip_page:
  2932.     ld a,$3c
  2933. page = $-1-int_start+_alt_interrupt_exec
  2934.     xor $0c
  2935. toggle = $-1-int_start+_alt_interrupt_exec
  2936.     ld (page),a
  2937.     out (0),a
  2938.     ret
  2939. counter = $-int_start+_alt_interrupt_exec
  2940.     .db 5
  2941. int_end:
  2942.  
  2943. install_int:
  2944.     ld de,$f000
  2945.     ld b,7
  2946. background_loop:
  2947.     push bc
  2948.     ld hl,background
  2949.     ld c,8
  2950. background_sprite_loop:
  2951.     ld a,(hl)
  2952.     inc hl
  2953.     ld b,16
  2954. background_row_loop:
  2955.     ld (de),a
  2956.     inc de
  2957.     djnz background_row_loop
  2958.     dec c
  2959.     jr nz,background_sprite_loop
  2960.     pop bc
  2961.     djnz background_loop
  2962.     ld h,d
  2963.     ld l,e
  2964.     inc de
  2965.     ld (hl),0
  2966.     ld bc,127
  2967.     ldir
  2968.     ld hl,int_start
  2969.     ld de,_alt_interrupt_exec
  2970.     push de
  2971.     ld bc,int_end-int_start
  2972.     ldir
  2973.     pop hl
  2974.     ld a,(hl)
  2975.     dec hl
  2976.     push hl
  2977.     ld de,40
  2978.     ld b,5
  2979. checksum_loop:
  2980.     add hl,de
  2981.     add a,(hl)
  2982.     djnz checksum_loop
  2983.     pop hl
  2984.     ld (hl),a
  2985.     set 2,(iy+$23)
  2986.     ret
  2987.  
  2988. remove_int:
  2989.     res 2,(iy+$23)
  2990.     ld a,$7c
  2991.     out (0),a
  2992.     ret
  2993.  
  2994. #endif
  2995.  
  2996. data_start:
  2997.  
  2998. default_search_name:
  2999.     .db $12,1,0
  3000.  
  3001. title:
  3002.     .db $01,$FF,$FF,$FF,$FF,$FE,$00,$00,$FF,$FF,$80,$03,$FF,$F0,$00,$00
  3003.     .db $00,$00,$00,$00,$00,$FE,$00,$7F,$FF,$FF,$80,$03,$FF,$E0,$00,$00
  3004.     .db $00,$00,$00,$00,$01,$FE,$00,$01,$FF,$FF,$00,$7F,$FF,$E0,$00,$00
  3005.     .db $00,$7F,$FF,$FF,$FF,$FE,$00,$00,$03,$E0,$00,$07,$C0,$00,$00,$00
  3006.     .db $00,$00,$00,$03,$FF,$FE,$00,$00,$03,$C0,$00,$07,$80,$00,$00,$00
  3007.     .db $00,$00,$00,$00,$03,$DE,$03,$FF,$FF,$C0,$00,$07,$80,$00,$00,$00
  3008.     .db $00,$00,$00,$00,$07,$9F,$00,$00,$07,$C0,$00,$0F,$FF,$80,$00,$00
  3009.     .db $00,$00,$00,$00,$0F,$0F,$00,$00,$0F,$80,$1F,$FF,$FF,$80,$00,$00
  3010.     .db $00,$00,$FF,$FF,$FF,$0F,$00,$00,$7F,$80,$00,$0F,$FF,$80,$00,$00
  3011.     .db $00,$00,$FF,$FF,$FE,$0F,$00,$00,$0F,$80,$00,$1F,$00,$00,$00,$00
  3012.     .db $00,$00,$00,$00,$3E,$0F,$00,$00,$0F,$00,$00,$1F,$00,$00,$00,$00
  3013.     .db $00,$00,$00,$00,$7F,$FF,$80,$00,$1F,$00,$00,$FE,$00,$00,$00,$00
  3014.     .db $00,$00,$00,$00,$FF,$FF,$87,$83,$FF,$00,$F8,$3E,$00,$3F,$80,$00
  3015.     .db $00,$00,$00,$00,$FC,$0F,$87,$80,$1E,$07,$F8,$3E,$00,$07,$80,$00
  3016.     .db $00,$FF,$FF,$FF,$F0,$07,$87,$81,$FE,$00,$F8,$3F,$FF,$07,$80,$00
  3017.     .db $00,$FF,$FF,$FF,$F0,$07,$8F,$80,$3E,$01,$F8,$7F,$FE,$0F,$80,$00
  3018.     .db $00,$00,$00,$03,$E0,$07,$8F,$80,$3E,$07,$F8,$7F,$FE,$0F,$80,$00
  3019. title_end:
  3020.  
  3021.     .db 25,25,"Advanced Text Editor for",0
  3022.     .db 16,32,"Basic, TextView, and Asm files",0
  3023.     .db 39,42,"by Jonah Cohen",0
  3024.  
  3025.  
  3026. bar_border:
  3027.     .db %01111111,%11111111,%11111110,%00011111,%11111111,%11111111,%10000111,%11111111
  3028.     .db %11111111,%11100001,%11111111,%11111111,%11111000,%01111111,%11111111,%11111110
  3029.  
  3030. bar_middle:
  3031.     .db %11111111,%11111111,%11111111,%00111111,%11111111,%11111111,%11001111,%11111111
  3032.     .db %11111111,%11110011,%11111111,%11111111,%11111100,%11111111,%11111111,%11111111
  3033.  
  3034.  
  3035. #ifdef grayscale
  3036. background:
  3037.     .db %10000011
  3038.     .db %10000100
  3039.     .db %01001000
  3040.     .db %00111000
  3041.     .db %00011100
  3042.     .db %00010010
  3043.     .db %00100001
  3044.     .db %11000001
  3045. #endif
  3046.  
  3047. main_menu:
  3048.     .db 3
  3049.     .db 5,"NEW",0
  3050.     .db 30,"OPEN",0
  3051.     .db 56,"LAST",0
  3052.  
  3053. editor_menu:
  3054.     .db 4
  3055.     .db 5,"LIST",0
  3056.     .db 31,"FIND",0
  3057.     .db 56,"CHAR",0
  3058.     .db 82,"SAVE",0
  3059.  
  3060. run:    .db "  RUN",0
  3061. view:    .db "VIEW ",0
  3062. build:    .db "BUILD",0
  3063.  
  3064. save_menu:
  3065.     .db 4
  3066.     .db 4,"BACK",0
  3067.     .db 31,"QUIT",0
  3068.     .db 56,"SAVE",0
  3069.     .db 82,"LOCK",0
  3070.  
  3071. zac:                .db 3,"Zac"
  3072. textview:            .db 8,"TextView"
  3073.  
  3074. new_text:            .db 49,"New file",0
  3075. file_prompt:        .db "File name: ",0
  3076. load_text:             .db 49,"Open file",0
  3077. save_as:            .db "Save as: ",0
  3078. saved:                .db "Saved",0
  3079. line_prompt:        .db "Goto line number: ",0
  3080. search_prompt:        .db "Search for: ",0
  3081. str_not_found:        .db "Not found",0
  3082. not_found:            .db "No files found",0
  3083.  
  3084. file_types:
  3085.     .db "File type:",0
  3086.     .db " Basic",0
  3087.     .db " Text",0
  3088.     .db " Asm",0
  3089.     .db " All",0
  3090.  
  3091. default_source_table:
  3092.     .dw basic_default_source
  3093.     .dw text_default_source
  3094.     .dw asm_default_source
  3095.  
  3096. basic_default_source:
  3097.     .db "ClLCD",$d6
  3098.  
  3099. text_default_source:
  3100.     .db "T:Description",$d6
  3101.  
  3102. asm_default_source:
  3103.     .db "Z:Progname",$d6
  3104.  
  3105. default_source:
  3106.     .db "See F1 for built-in commands"
  3107. default_source_end:
  3108.  
  3109. f1_table:
  3110.     .dw basic_f1_list
  3111.     .dw text_f1_list
  3112.     .dw asm_f1_list
  3113.  
  3114. ;format of list entries:
  3115. ;  bits 0-5: length of string
  3116. ;  bit 6: trailing (
  3117. ;  bit 7: trailing space
  3118.  
  3119. basic_f1_list:
  3120.     .db $84,"Disp"
  3121.     .db $05,"ClLCD"
  3122.     .db $82,"If"
  3123.     .db $85,"Input"
  3124.     .db $83,"Lbl"
  3125.     .db $43,"For"
  3126.     .db $86,"Prompt"
  3127.     .db $84,"Goto"
  3128.     .db $04,"Then"
  3129.     .db $45,"Outpt"
  3130.     .db $85,"Pause"
  3131.     .db $04,"Else"
  3132.     .db $44,"Menu"
  3133.     .db $04,"Stop"
  3134.     .db $03,"End"
  3135.  
  3136. asm_f1_list:
  3137.     .db $88,"#include"
  3138.     .db $08,".db ",'"','"',",0"
  3139.     .db $84,".org"
  3140.     .db $83,".db"
  3141.     .db $83,".dw"
  3142.     .db $82,"ld"
  3143.     .db $84,"call"
  3144.     .db $84,"djnz"
  3145.     .db $82,"cp"
  3146.     .db $83,"inc"
  3147.     .db $83,"dec"
  3148.     .db $82,"ex"
  3149.     .db $82,"jr"
  3150.     .db $82,"jp"
  3151.     .db $03,"ret"
  3152.  
  3153. text_f1_list:
  3154.     .db $02,"#B"
  3155.     .db $02,"#I"
  3156.     .db $02,"#U"
  3157.     .db $02,"#i"
  3158.     .db $02,"#C"
  3159.     .db $02,"#R"
  3160.     .db $02,"#S"
  3161.     .db $03,"#D0"
  3162.     .db $03,"#D1"
  3163.     .db $03,"#D2"
  3164.     .db $03,"#D3"
  3165.     .db $03,"#D4"
  3166.     .db $02,"#T"
  3167.     .db $01,LcapCCed
  3168.     .db $01,"~"
  3169.  
  3170. letters:
  3171.     .db $19,$21,$0a,$12,$1a,$22,$0b,$13,$1b
  3172.     .db $23,$2b,$0c,$14,$1c,$24,$2c,$0d,$15
  3173.     .db $1d,$25,$2d,$0e,$16,$1e,$26,$2e
  3174.  
  3175. standard_keys:
  3176.     .db K_ENTER,K_GRAPH,K_TABLE,K_XVAR,K_STO
  3177.  
  3178. basic_keys:
  3179.     .db Lstore,":)(",$d6
  3180.  
  3181. textview_keys:
  3182.     .db 178,":~#",$d6
  3183.  
  3184. asm_keys:
  3185.     .db '=',":;_",$d6
  3186.  
  3187. num_table:
  3188. key_table1:
  3189.     .db K_9,K_8,K_7,K_6,K_5,K_4,K_3,K_2,K_1,K_0
  3190.     .db K_DOT,K_LEFTPAR,K_RIGHTPAR,K_COMMA
  3191.     .db K_PLUS,K_MINUS,K_STAR,K_SLASH,K_EE
  3192. ;these are letters A-F
  3193.     .db K_LN,K_RAISE,K_TAN,K_COS,K_SIN,K_LOG
  3194.  
  3195. key_table2:
  3196.     .db "ABCDEF",Lpound,"/*-+",Lcomma,")(.0123456789"
  3197.  
  3198. prgm_keys:
  3199.     .db Lquote,'$'
  3200.  
  3201. custm_keys:
  3202.     .db Lapostrophe,'%'
  3203.  
  3204. sign_keys:
  3205.     .db ' ',Lneg
  3206.  
  3207. mode_table:
  3208.     .db 226,225,223,223
  3209.  
  3210. #ifdef custom_font
  3211. shift_down:
  3212.     .db "gjpqy"
  3213. #endif
  3214.  
  3215. ;#include "font.asm"            ;custom font
  3216.  
  3217.                 .org ($+255)&$ff00            ;put on 256-byte boundary
  3218. char_table:            .org $+16                ;char menu characters
  3219. browse_name:        .org $+12                ;file name in new
  3220. search_string:        .org $+13                ;string to search for in find routine
  3221. char_bitmap:        .org $+20                ;bitmap for custom font
  3222. insert_string:        .org $+9                ;for inserting strings
  3223.                 .org ($+255)&$ff00            ;put on 256-byte boundary
  3224. char_width_table:    .org $+256                ;width of all 256 chars
  3225. #ifdef handle_errors
  3226. basic_backup:        .org $+256                ;pointers for basic programs (handle_errors)
  3227. #endif
  3228. clipboard:                                    ;stuff that's cut
  3229.  
  3230. file_names            =    $8100                ;files in open menu
  3231. edit_buffer            =    $8100                ;open file text
  3232. max_size            =    $bf00-edit_buffer    ;max file size
  3233. width                =    121                    ;max column for editing
  3234.  
  3235. .end
  3236.