program driver use appgraphics use appgraphics_filo use filo implicit none type(apEditorConfig)::E integer::mywindow integer::key, delta, rowoff logical::cursor_moved mywindow = initwindow(640, 480, dbflag=.true., closeflag=.true.) call settextstyle(MONOSPACE_FONT, HORIZ_DIR, 20) call setfillstyle(SOLID_FILL, WHITE) E = initApEditor(mywindow) if(.not. editorOpen(E, "kilo.c")) then Print *, "Error opening file..." stop end if call drawApEditor(E) call swapbuffers() do while(.true.) call startidle(50) do while(kbhit()) cursor_moved = .false. rowoff = E%rowoff key = getch() ! Special character if(key == 0) then key = getch() delta = 0 select case(key) case(KEY_UP) E%cy = max(E%cy - 1, 1) cursor_moved = .true. case(KEY_DOWN) E%cy = min(E%cy + 1, E%screenrows) cursor_moved = .true. case(KEY_LEFT) E%cx = E%cx - 1 if(E%cx < 0) then E%cx = 0 E%coloff = min(E%coloff + 1, 0) end if cursor_moved = .true. case(KEY_RIGHT) E%cx = E%cx + 1 Print *, E%cx, E%cy, E%rowoff, E%coloff if(E%cx > E%screencols) then E%coloff = E%coloff - 1 E%cx = E%cx - 1 end if cursor_moved = .true. case(KEY_PGUP) delta = -1*E%screenrows case(KEY_PGDN) delta = E%screenrows end select rowoff = rowoff + delta rowoff = max(rowoff, 0) rowoff = min(rowoff, E%numrows - E%screenrows) else select case(key) case(8) ! Backspace call editorDelChar(E) case default call editorInsertChar(E, char(key)) end select cursor_moved = .TRUE. end if if(rowoff /= E%rowoff .or. cursor_moved) then e%rowoff = rowoff call drawApEditor(E) call swapbuffers() end if end do end do end program driver