'===========================================================================
' Subject: QB EDITOR FOR TEXT FILES           Date: 03-21-99 (19:08)       
'  Author: Geukens Stijn                      Code: QB, QBasic, PDS        
'  Origin: ERKASAN@village.uunet.be         Packet: TEXT.ABC
'===========================================================================
'QB-editor
'made by Geukens Stijn
'originally it is an editor/debugger for assembler that i made for school
'i adapted it into an editor for TXT-files
'for anything mail at ERKASAN@VILLAGE.UUNET.BE


DECLARE SUB menuline.find ()
DECLARE SUB menuline.change ()
DECLARE SUB een.lijn (x%, Y%, max.y%, tekst$)
DECLARE SUB menuline.open (sort$, openexe%, getdirexe%)
DECLARE SUB menuline2 ()
DECLARE SUB menuline.select ()
DECLARE SUB scherm.wissen ()
DECLARE SUB menuline ()
DECLARE SUB scherm ()

maximum.aantal.rijen% = 2000

CLS
DIM l(2000) 'length line
DIM tekst$(2000)'lines
DIM asmlist$(300)'files
DIM rijselected(500)'selected lines
DIM tel.i%(60)'found words

DIM SHARED nieuw%, gewijzigd%, file$, rij%, tempregel%, regel%, eindregel%, startregel%


ON ERROR GOTO error.handler

auther$ = "Gemaakt door Geukens Stijn - Egyptestraat 28 - 8730 Oedelem"

CLS




i% = 0

CALL scherm


' ************ initialisering ***************

insert$ = "Insert   "
insert% = 1
nieuw% = 1
gewijzigd% = 0
file$ = ""
rij% = 0
maxrij% = 0
tempregel% = 3
regel% = 2
hrt% = 80
maximum.rijlengte% = 1022

einde% = 0
eindregel% = 22
startregel% = 3
sort$ = "J"
begin.cursor% = 0
LOCATE regel%


' *******************************************

blancotijd = TIMER
backuptijd = TIMER

DO
    rij% = rij% + 1
    IF rij% > maxrij% THEN
        maxrij% = rij%
    END IF

    cursor% = 2
    IF regel% < 22 THEN
        regel% = regel% + 1
    END IF

    
    DO
top:
        IF TIMER > blancotijd + 4 THEN GOSUB blanco: blancotijd = TIMER
        IF TIMER > backuptijd + 30 THEN GOSUB backup: backuptijd = TIMER
        
        merge% = 0

'***** foutcorrecties
        IF cursor% <= 1 THEN cursor% = 2
        IF rij% < 0 THEN rij% = 1: regel% = 3
        IF regel% < 3 AND rij% < 20 THEN rij% = 1: regel% = 3
'*****

        ' row;file;status:

        IF gewijzigd% = 1 THEN
                status$ = "(Gewijzigd)  "
        ELSE
                status$ = "(Ongewijzigd)"
        END IF
       
        IF LEN(k$) > 1 AND RIGHT$(k$, 1) = "R" THEN
            IF insert% = 1 THEN
                insert% = 0
                insert$ = "Type Over"
            ELSE
                insert% = 1
                insert$ = "Insert   "
            END IF
        END IF

        LOCATE 23, 8: COLOR 0, 3: PRINT USING "####"; rij%;
        PRINT " - ";
        PRINT USING "####"; cursor% - 1 + begin.cursor%
        
        IF file$ = "" THEN
            LOCATE 23, 27: PRINT "NAAMLOOS ";
        ELSE
            LOCATE 23, 27: PRINT USING "\           \ "; file$;
        END IF
        LOCATE 23: PRINT status$
        LOCATE 23, 70: PRINT insert$
        COLOR 15, 1
        seek$ = LCASE$(tekst$(rij%))

        'current cursor position:
        
        IF MID$(tekst$(rij%), cursor% - 1 + begin.cursor%, 1) = "" OR MID$(tekst$(rij%), cursor% - 1 + begin.cursor%, 1) = " " THEN
            LOCATE regel%, cursor%: COLOR 15 + 16: PRINT "_": COLOR 15, 1
        ELSE
            LOCATE regel%, cursor%: COLOR 15 + 16: PRINT MID$(tekst$(rij%), cursor% - 1 + begin.cursor%, 1): COLOR 15, 1
        END IF

'******************************************************************************
'**************************** SELECTS *****************************************
'******************************************************************************      
       
        k$ = INKEY$ 'key pressed

        SELECT CASE k$

'******************************************************************************
'**************************** F1 - VERTAAL ***********************************
           
            CASE CHR$(0) + CHR$(59) 'compile
                'excluded

'**************************** F1 - VERTAAL ***********************************
'******************************************************************************


'******************************************************************************
'**************************** F2 - VOERUIT ***********************************

            CASE CHR$(0) + CHR$(60) 'execute
                'excluded

'**************************** F2 - VOERUIT ***********************************
'******************************************************************************



'******************************************************************************
'**************************** F3 - SAVE AS ***********************************

            CASE CHR$(0) + CHR$(61) 'save as
save:          
                temp.sort$ = sort$
                sort$ = ""
                GOSUB filelist
                sort$ = temp.sort$
                temp$ = ""
                temp1$ = ""
                temp2$ = ""
                LOCATE 2, 1: COLOR , 1: PRINT STRING$(80, " "): COLOR 15, 1
                LOCATE 2, 1: COLOR 4, 7: PRINT " Give filename: ";
                temp$ = file$
                l.temp% = LEN(temp$)
                IF LCASE$(RTRIM$(RIGHT$(file$, 3))) = "txt" THEN
                        cut.temp% = 4
                        ext$ = ".txt"
                ELSE
                        cut.temp% = 0
                        ext$ = ".txt"
                END IF
               
                temp$ = LEFT$(temp$, l.temp% - cut.temp%)
               
                CALL een.lijn(2, 17, 12, temp$)
                               
                IF temp$ = "" THEN GOTO noname

                IF LCASE$(RTRIM$(RIGHT$(temp$, 4))) = ".txt" OR LCASE$(RTRIM$(RIGHT$(temp$, 3))) = ".in" THEN
                        tempfile$ = temp$
                ELSE
                        tempfile$ = temp$ + ext$
                END IF
                IF tempfile$ = file$ THEN GOTO saving
                
                IF INSTR(tempfile$, ",") > 0 THEN BEEP: GOTO noname
                IF INSTR(tempfile$, "/") > 0 THEN BEEP: GOTO noname
                IF INSTR(tempfile$, "*") > 0 THEN BEEP: GOTO noname
                IF INSTR(tempfile$, "?") > 0 THEN BEEP: GOTO noname
                IF INSTR(tempfile$, "<") > 0 THEN BEEP: GOTO noname
                IF INSTR(tempfile$, ">") > 0 THEN BEEP: GOTO noname
                IF INSTR(tempfile$, "|") > 0 THEN BEEP: GOTO noname
                IF INSTR(tempfile$, ";") > 0 THEN BEEP: GOTO noname
                IF INSTR(tempfile$, CHR$(34)) > 0 THEN BEEP: GOTO noname
                IF INSTR(tempfile$, ".") > 0 THEN
                        l.temp% = LEN(tempfile$)
                        IF LCASE$(RTRIM$(RIGHT$(tempfile$, 3))) = "txt" THEN
                                cut.temp% = 4
                                ext$ = ".txt"
                        ELSEIF LCASE$(RTRIM$(RIGHT$(tempfile$, 2))) = "in" THEN
                                cut.temp% = 3
                                ext$ = ".in"
                        ELSE
                                cut.temp% = 0
                                ext$ = ".txt"
                        END IF
             
                        tempfile$ = LEFT$(tempfile$, l.temp% - cut.temp%)
                        IF INSTR(tempfile$, ".") > 0 THEN BEEP: GOTO noname
                        tempfile$ = tempfile$ + ext$
                END IF
                IF INSTR(tempfile$, "\") > 0 OR INSTR(tempfile$, ":") > 0 THEN temp$ = tempfile$: GOTO save.to.dir
               
                file$ = tempfile$
                LOCATE 2, 1: COLOR , 1: PRINT STRING$(80, " "): COLOR 15, 1
                lfile% = LEN(file$)
                temp1$ = LEFT$(file$, lfile% - 4)
                tempin$ = LEFT$(file$, lfile% - 3)
                FOR x% = 1 TO asmlist%
                    temp2$ = LEFT$(asmlist$(x%), 7)
                    temp2$ = RTRIM$(temp2$)
                    IF UCASE$(temp1$) = UCASE$(temp2$) OR UCASE$(tempin$) = UCASE$(temp2$) THEN
                        LOCATE 2, 1: COLOR 4, 7: PRINT "File already exists. Overwrite? (j/n)"
                        DO
                                k$ = INKEY$
                                IF k$ = CHR$(27) THEN GOTO save
                                k$ = UCASE$(k$)
                        LOOP UNTIL k$ = "J" OR k$ = "N"
                        IF k$ = "N" THEN GOTO save
                        EXIT FOR
                    END IF
                NEXT x%
                                
saving:         OPEN file$ FOR APPEND AS #1
                CLOSE #1
                KILL file$
                OPEN file$ FOR APPEND AS #1
                    FOR fileindex = 1 TO maxrij%
                        PRINT #1, tekst$(fileindex)
                    NEXT fileindex
                CLOSE #1
                
                
                IF einde% = 1 THEN COLOR 7, 0: CLS : END
                IF openen% = 1 THEN gewijzigd% = 0: GOTO opentris
                gewijzigd% = 0
                nieuw% = 0
noname:         LOCATE 2, 1: COLOR , 1: PRINT STRING$(80, " ")

'**************************** F3 - SAVE AS ***********************************
'******************************************************************************



'******************************************************************************
'**************************** F4 - OPEN **************************************
           
            CASE CHR$(0) + CHR$(62) 'open
                IF gewijzigd% = 1 THEN
                                    IF file$ = "" THEN
                                        COLOR 4, 7: LOCATE 2, 1: PRINT "Save changes? (j/n)": COLOR 15, 1
                                    ELSE
                                        COLOR 4, 7: LOCATE 2, 1: PRINT "Save changes in " + file$ + "? (j/n)": COLOR 15, 1
                                    END IF
               
                        DO
                                k$ = INKEY$
                                k$ = UCASE$(k$)
                                IF k$ = CHR$(27) THEN EXIT DO
                        LOOP UNTIL k$ = "J" OR k$ = "N"

                        IF k$ = "J" THEN
                                GOSUB blanco
                                openen% = 1
                                GOTO save
                        END IF

                END IF
               
opentris:
                lighted.teller% = 1
                begin.asmlist% = 1
openbis:        CLS
                FOR wisi% = 1 TO 25
                        LOCATE wisi%, 1: COLOR , 1: PRINT STRING$(80, " ")
                NEXT wisi%
               
                COLOR 15, 1
                tempfile$ = file$
                GOSUB filelist
                LOCATE 24, (79 - LEN(dir$)): PRINT dir$
                k% = 1
                l = 3
                IF begin.asmlist% > 1 THEN LOCATE 22, 15: PRINT "PgUp voor vorig deel"
                FOR x% = begin.asmlist% TO asmlist%
                    IF NOT asmlist$(x%) = "" THEN
                        k% = k% + 1
                        LOCATE k%, l: PRINT asmlist$(x%)
                    END IF
                    IF x% = 20 OR x% = 100 THEN k% = 1: l = 23
                    IF x% = 40 OR x% = 120 THEN k% = 1: l = 43
                    IF x% = 60 OR x% = 140 THEN k% = 1: l = 63
                    IF x% = 80 OR x% = 160 THEN
                        IF asmlist% > 80 THEN LOCATE 22, 15: PRINT "PgDown voor vervolg"
                        x% = asmlist%
                        GOTO openfile
                        
                    END IF
                NEXT x%

openfile:     
                IF merge% = 0 THEN
                        CALL menuline.open(sort$, openexe%, getdirexe%)
                ELSE
                        COLOR 15, 1: LOCATE 23, 1: COLOR 4, 7: PRINT " Press enter to insert file                                                     ": COLOR 15, 1
                END IF

                
                lighted.rij% = 2
                lighted.kol% = 3
                

                DO
                    COLOR 1, 7
                    IF lighted.rij% < 1 OR lighted.rij% > 21 OR lighted.kol% < 1 OR lighted.kol% > 79 THEN lighted.rij% = 2: lighted.kol% = 3: lighted.teller% = begin.asmlist%
                    LOCATE lighted.rij%, lighted.kol%: PRINT asmlist$(lighted.teller%)
                    selectfile$ = INKEY$
                    SELECT CASE selectfile$
                        CASE CHR$(0) + CHR$(73) 'Page Up
                                IF lighted.teller% > 80 THEN
                                        begin.asmlist% = begin.asmlist% - 80
                                        lighted.teller% = begin.asmlist%
                                        GOTO openbis
                                END IF

                        CASE CHR$(0) + CHR$(81) 'Page down
                                IF begin.asmlist% + 80 <= asmlist% THEN
                                        begin.asmlist% = begin.asmlist% + 80
                                        lighted.teller% = begin.asmlist%
                                        GOTO openbis
                                END IF

                        CASE CHR$(27)
                            CALL scherm
                            scherm.wissen
                            tempregel% = 3
                            GOSUB weergeven: GOTO top
                       
                        CASE CHR$(0) + CHR$(61) 'F3 sorteren
                                IF sort$ = "" THEN
                                        sort$ = "J"
                                ELSE
                                        sort$ = ""
                                END IF
                                begin.asmlist% = 1
                                lighted.teller% = 1
                                GOTO openbis

                        CASE CHR$(0) + CHR$(59) 'kopi‰ren
                            'excluded

                        CASE CHR$(0) + CHR$(60) 'nieuw%
                                scherm.wissen
                                lighted.nieuw% = 0
kies.nieuw:
                                scherm.wissen
                                LOCATE 8, 25: PRINT "Geef naam bestand (max. 8 letters)";
                                nieuw$ = ""
                                CALL een.lijn(10, 25, 8, nieuw$)

                                IF nieuw$ = "" THEN GOTO openbis ELSE file$ = nieuw$
                                IF INSTR(file$, ",") > 0 THEN BEEP: GOTO kies.nieuw
                                IF INSTR(file$, "\") > 0 THEN BEEP: GOTO kies.nieuw
                                IF INSTR(file$, "/") > 0 THEN BEEP: GOTO kies.nieuw
                                IF INSTR(file$, ":") > 0 THEN BEEP: GOTO kies.nieuw
                                IF INSTR(file$, "*") > 0 THEN BEEP: GOTO kies.nieuw
                                IF INSTR(file$, "?") > 0 THEN BEEP: GOTO kies.nieuw
                                IF INSTR(file$, "<") > 0 THEN BEEP: GOTO kies.nieuw
                                IF INSTR(file$, ">") > 0 THEN BEEP: GOTO kies.nieuw
                                IF INSTR(file$, "|") > 0 THEN BEEP: GOTO kies.nieuw
                                IF INSTR(file$, ";") > 0 THEN BEEP: GOTO kies.nieuw
                                IF INSTR(file$, ".") > 0 THEN BEEP: GOTO kies.nieuw
                                IF INSTR(file$, CHR$(34)) > 0 THEN BEEP: GOTO kies.nieuw
                                file$ = LTRIM$(file$)
                                file$ = LEFT$(file$, 8)
                                file$ = file$ + ".txt"
                                EXIT DO


                        CASE CHR$(0) + CHR$(67) 'printen
                            print.file$ = asmlist$(lighted.teller%)
                            print.file$ = RTRIM$(LEFT$(print.file$, 8)) + ".txt"
                            
                            GOSUB openPRINT
                            blancotijd = TIMER
                            DO
                                    IF TIMER > blancotijd + 2 THEN LOCATE 1, 1: PRINT STRING$(20, " "): EXIT DO
                            LOOP

                        CASE CHR$(0) + CHR$(83) 'delete
                            delete.file$ = asmlist$(lighted.teller%)
                            delete.file$ = RTRIM$(delete.file$)
                            delete.file$ = RTRIM$(LEFT$(delete.file$, 8)) + ".txt"
                            LOCATE 23, 1: COLOR 4, 7: PRINT STRING$(80, " ")
                            LOCATE 23, 2: COLOR 4, 7: PRINT UCASE$(delete.file$) + " verwijderen? (j/n)"
                            COLOR 15, 1
                                DO
                                        delete.k$ = INKEY$
                                        delete.k$ = UCASE$(delete.k$)
                                LOOP UNTIL delete.k$ = "J" OR delete.k$ = "N" OR delete.k$ = CHR$(27)

                                IF delete.k$ = "N" OR delete.k$ = CHR$(27) THEN
                                        IF NOT merge% = 1 THEN CALL menuline.open(sort$, openexe%, getdirexe%)
                                ELSEIF delete.k$ = "J" THEN
                                        OPEN delete.file$ FOR APPEND AS #1
                                        CLOSE #1
                                        KILL delete.file$
                                        GOTO opentris
                                END IF
                        

                        CASE CHR$(13)
                            file$ = asmlist$(lighted.teller%)
                            file$ = RTRIM$(file$)
                            file$ = RTRIM$(LEFT$(file$, 8)) + ".txt"
                            IF merge% = 1 THEN GOTO mergebis
                            EXIT DO

                        CASE CHR$(0) + CHR$(72)'up
                            IF lighted.rij% > 2 OR lighted.kol% > 22 THEN
                                COLOR 15, 1
                                LOCATE lighted.rij%, lighted.kol%: PRINT asmlist$(lighted.teller%)
                                lighted.rij% = lighted.rij% - 1
                                lighted.teller% = lighted.teller% - 1
                                IF lighted.rij% < 2 AND lighted.kol% > 22 THEN
                                    lighted.kol% = lighted.kol% - 20
                                    lighted.rij% = 21
                                END IF
                            ELSEIF lighted.rij% = 2 AND lighted.kol% = 3 THEN
                                COLOR 15, 1
                                LOCATE lighted.rij%, lighted.kol%: PRINT asmlist$(lighted.teller%)
                               
                                IF asmlist% - begin.asmlist% > 80 THEN
                                        lighted.teller% = 80
                                        lighted.rij% = 21
                                        lighted.kol% = 63
                                ELSE
                                        lighted.teller% = x% - 1
                                        IF asmlist% - begin.asmlist% <= 20 THEN lighted.kol% = 3: lighted.rij% = asmlist% + 1
                                        IF asmlist% - begin.asmlist% > 20 AND asmlist% - begin.asmlist% <= 40 THEN lighted.kol% = 23: lighted.rij% = asmlist% - 20 + 1
                                        IF asmlist% - begin.asmlist% > 40 AND asmlist% - begin.asmlist% <= 60 THEN lighted.kol% = 43: lighted.rij% = asmlist% - 40 + 1
                                        IF asmlist% - begin.asmlist% > 60 AND asmlist% - begin.asmlist% <= 80 THEN lighted.kol% = 63: lighted.rij% = asmlist% - 60 + 1
                                END IF

                                IF lighted.rij% < 2 AND lighted.kol% > 22 THEN
                                    lighted.kol% = lighted.kol% - 20
                                    lighted.rij% = 21
                                END IF

                            END IF

                        CASE CHR$(0) + CHR$(75)'links
                            IF lighted.teller% - 20 > 0 THEN
                                COLOR 15, 1
                                LOCATE lighted.rij%, lighted.kol%: PRINT asmlist$(lighted.teller%)
                                lighted.teller% = lighted.teller% - 20
                                lighted.kol% = lighted.kol% - 20
                            END IF

                        CASE CHR$(0) + CHR$(77)'rechts
                            IF lighted.teller% + 20 < x% THEN
                                COLOR 15, 1
                                LOCATE lighted.rij%, lighted.kol%: PRINT asmlist$(lighted.teller%)
                                lighted.teller% = lighted.teller% + 20
                                lighted.kol% = lighted.kol% + 20
                            END IF

                        CASE CHR$(0) + CHR$(80)'down
                            IF lighted.teller% + 1 < x% AND lighted.teller% < asmlist% THEN
                                COLOR 15, 1
                                LOCATE lighted.rij%, lighted.kol%: PRINT asmlist$(lighted.teller%)
                                lighted.rij% = lighted.rij% + 1
                                lighted.teller% = lighted.teller% + 1
                                IF lighted.rij% > 21 THEN
                                    lighted.kol% = lighted.kol% + 20
                                    lighted.rij% = 2
                                END IF
                            ELSEIF lighted.teller% + 1 >= x% THEN
                                COLOR 15, 1
                                LOCATE lighted.rij%, lighted.kol%: PRINT asmlist$(lighted.teller%)
                                lighted.teller% = begin.asmlist%
                                lighted.kol% = 3
                                lighted.rij% = 2
                            END IF
                    END SELECT
                LOOP

HET.openen:

                gewijzigd% = 0
                COLOR 15, 1
                CALL scherm

                ERASE tekst$
                ERASE l
                OPEN file$ FOR APPEND AS #1
                CLOSE #1
                nieuw% = 0

                OPEN file$ FOR INPUT AS #1
                    tempregel% = 3
                    rij% = 1
                    DO WHILE NOT EOF(1)
                        LINE INPUT #1, tekst$(rij%)
                        COLOR 1, 1: LOCATE 3, 1: PRINT LEFT$(tekst$(rij%), 78);
                        p% = POS(0)
                        COLOR 15, 1

                        FOR pj% = 1 TO p%
                                k$ = MID$(tekst$(rij%), pj%, 1)
                                IF k$ = CHR$(9) THEN
                                    k1$ = LEFT$(tekst$(rij%), pj% - 1)
                                    k2$ = MID$(tekst$(rij%), pj% + 1, p% - pj%)
                                    tekst$(rij%) = k1$ + "        " + k2$
                                END IF
                            NEXT pj%
                        l(rij%) = LEN(tekst$(rij%))
                        teller = 0
                        rij% = rij% + 1
                       
                LOOP
                CLOSE #1
                GOSUB blanco
                COLOR 7, 1
                blancotijd = TIMER
                vertaald% = 0
                maxrij% = rij% - 1
                rij% = 1
                cursor% = 2
                startregel% = 3
                eindregel% = 22
                GOSUB weergeven
        
'**************************** F4 - OPEN **************************************
'******************************************************************************



'******************************************************************************
'**************************** F5 - REFRESH **************************************

            CASE CHR$(0) + CHR$(63) 'refresh F5
                GOSUB refresh

'**************************** F5 - REFRESH **************************************
'******************************************************************************



'******************************************************************************
'**************************** F6 - SELECT **************************************
           
            CASE CHR$(0) + CHR$(64)
                cut% = 0
                IF begin.cursor% > 0 THEN begin.cursor% = 0: tempregel% = regel%: GOSUB weergeven
                COLOR 16, 3: LOCATE 23, 70: PRINT "SELECT   "
                LOCATE regel%, 2: COLOR 15, 7: PRINT LEFT$(tekst$(rij%), 78)
                COLOR 15, 1
                beginregel% = regel%
                begineindregel% = eindregel%
                beginstartregel% = startregel%
                begincursor% = cursor%
                beginrij% = rij%
                ud% = 0
                rijteller% = 1
                menuline.select
                DO
                    menuline.select
                    LOCATE 23, 8: COLOR 0, 3: PRINT USING "####"; rij%
                    rijselected(rijteller%) = rij%

                    selectk$ = INKEY$
                   
                    SELECT CASE selectk$
                        CASE CHR$(0) + CHR$(72) 'Up
                            IF rij% > 0 THEN
                                IF rij% <= beginrij% THEN
                                    IF NOT rij% <= 1 THEN
                                        rij% = rij% - 1
                                        rijteller% = rijteller% + 1
                                        rijselected(rijteller%) = rij%
                                        IF rij% < startregel% - 1 AND rij% > 1 THEN
                                            startregel% = startregel% - 1
                                            eindregel% = eindregel% - 1
                                        END IF
                                    END IF
                                ELSE
                                    rijselected(rijteller%) = 0
                                    rijteller% = rijteller% - 1
                                  
                                    IF NOT rij% = 1 THEN
                                        rij% = rij% - 1
                                        IF rij% < startregel% - 1 AND rij% > 1 THEN
                                            startregel% = startregel% - 1
                                            eindregel% = eindregel% - 1
                                        ELSE
                                            regel% = regel% - 1
                                        END IF
                                    END IF
                                END IF
                                ud% = ud% - 1
                                CALL scherm.wissen
                                GOSUB weergeven
                               

                            END IF
                            COLOR 15, 1
                            eindrij% = rij%

                        CASE CHR$(0) + CHR$(80) 'Down
                            IF NOT rij% > maxrij% THEN
                                IF rij% >= beginrij% THEN
                                    IF NOT rij% >= maxrij% THEN
                                        rij% = rij% + 1
                                        rijteller% = rijteller% + 1
                                        rijselected(rijteller%) = rij%
                                        IF rij% >= eindregel% - 1 THEN
                                            startregel% = startregel% + 1
                                            eindregel% = eindregel% + 1
                                        END IF
                                    END IF
                                ELSE
                                    IF NOT rij% >= maxrij% THEN
                                        rijselected(rijteller%) = 0
                                        rijteller% = rijteller% - 1
                                        rij% = rij% + 1
                                        IF rij% >= eindregel% THEN
                                            startregel% = startregel% + 1
                                            eindregel% = eindregel% + 1
                                        END IF

                                    END IF
                                END IF
                                ud% = ud% + 1
                            END IF
                            CALL scherm.wissen
                            eindrij% = rij%
                            GOSUB weergeven
                            COLOR 15, 1

                        CASE CHR$(0) + CHR$(67) 'print
                            LOCATE 2, 2: COLOR 15 + 16: PRINT "Printing..."
                            begincopy% = beginrij%
                            eindcopy% = eindrij%
                            IF eindcopy% = 0 THEN eindcopy% = begincopy%
                            IF begincopy% > eindcopy% THEN SWAP begincopy%, eindcopy%

                            FOR i% = begincopy% TO eindcopy%
                                LPRINT tekst$(i%)
                            NEXT i%

                            blancotijd = TIMER

                            DO
                                IF TIMER > blancotijd + 2 THEN GOSUB blanco: blancotijd = TIMER: EXIT DO
                            LOOP
                           
                           
                        CASE CHR$(0) + CHR$(59), CHR$(0) + CHR$(60) 'copy, cut
                            OPEN "aspass.txt" FOR APPEND AS #1
                            CLOSE #1
                            KILL "aspass.txt"
                            OPEN "aspass.txt" FOR APPEND AS #1
                            begincopy% = beginrij%
                            eindcopy% = eindrij%
                            IF eindcopy% = 0 THEN eindcopy% = begincopy%
                            IF begincopy% > eindcopy% THEN SWAP begincopy%, eindcopy%
                            FOR i% = begincopy% TO eindcopy%
                                PRINT #1, tekst$(i%)
                            NEXT i%

                            CLOSE #1
                          
                            IF selectk$ = CHR$(0) + CHR$(60) THEN 'cut
delete.selected:
                                cut% = 1
                                tempregel% = 3
                                scherm.wissen
                                FOR i% = beginrij% TO maxrij%
                                    tekst$(i%) = tekst$(i% + rijteller%)
                                    l(i%) = l(i% + rijteller%)
                                NEXT i%
                              
                                maxrij2% = maxrij%
                                maxrij% = maxrij% - rijteller%
                                FOR i% = maxrij% + 1 TO maxrij2% + 1
                                    tekst$(i%) = ""
                                    l(i%) = 0
                                NEXT i%

                                IF maxrij% = 0 THEN maxrij% = 1
                                gewijzigd% = 1
                                vertaald% = 0
                                voeruit% = 0
                            END IF
                            CALL scherm
                            GOTO eindeselect

                        CASE CHR$(0) + CHR$(61), CHR$(0) + CHR$(83) 'delete
                            LOCATE 2, 1: COLOR 4, 7: PRINT "You are about to delete "; rijteller%; "lines. Ok? j/n";
                            DO
                                k$ = INKEY$
                                k$ = UCASE$(k$)
                                IF k$ = CHR$(27) THEN k$ = "N"
                            LOOP UNTIL k$ = "J" OR k$ = "N"
                            IF k$ = "J" THEN
                                GOTO delete.selected
                            END IF
                            GOSUB blanco

                    END SELECT
                   
            LOOP UNTIL selectk$ = CHR$(0) + CHR$(134) OR selectk$ = CHR$(27)
                cut% = 0
eindeselect:
                    IF cut% = 0 THEN
                        rij% = beginrij%
                        regel% = beginregel%
                        tempregel% = regel%
                        eindregel% = begineindregel%
                        startregel% = beginstartregel%
                        IF startregel% < 3 THEN
                            eindregel% = 22
                            startregel% = 3
                        END IF
                    ELSE
                        rij% = 1
                        regel% = 3
                        startregel% = 3
                        eindregel% = 22
                    END IF

                    cursor% = 2
                    FOR i% = 1 TO rijteller%
                        rijselected(i%) = 0
                    NEXT i%
                    rijteller% = 0
                    k$ = ""
                    COLOR 15, 1
                    scherm.wissen
                    GOSUB weergeven
                    CALL menuline
                    GOTO top

'**************************** F6 - SELECT **************************************
'******************************************************************************



'******************************************************************************
'**************************** F7 - DEBUG **************************************
           
            CASE CHR$(0) + CHR$(65) 'debug: assemblers debugger; mine is like qbasic: continoues checking
                'excluded

'**************************** F7 - DEBUG **************************************
'******************************************************************************




'******************************************************************************
'**************************** F8 - PASTE **************************************

            CASE CHR$(0) + CHR$(66) 'F8 - PASTE
                merge$ = "aspass.txt"
merge:
                beginrij2% = rij%
                beginregel2% = regel%
                OPEN merge$ FOR APPEND AS #1
                CLOSE #1
                pasteteller% = 0
                OPEN merge$ FOR INPUT AS #1
                    DO WHILE NOT EOF(1)
                        LINE INPUT #1, A$
                        pasteteller% = pasteteller% + 1
                    LOOP
                CLOSE #1
                IF maxrij% + pasteteller% > max.aantal.rijen% THEN BEEP: LOCATE 2, 1: PRINT "Te groot!": GOTO top
                FOR i% = maxrij% + pasteteller% TO rij% + pasteteller% STEP -1
                    tekst$(i%) = tekst$(i% - pasteteller%)
                    l(i%) = l(i% - pasteteller%)
                NEXT i%
                OPEN merge$ FOR INPUT AS #1
                    DO WHILE NOT EOF(1)
                        LINE INPUT #1, tekst$(rij%)
                        COLOR 1, 1: LOCATE 2, 1: PRINT tekst$(rij%);
                        p% = POS(0)
                        COLOR 15, 1

                            FOR pj% = 1 TO p%
                                paste.k$ = MID$(tekst$(rij%), pj%, 1)
                                IF paste.k$ = CHR$(9) THEN
                                    k1$ = LEFT$(tekst$(rij%), pj% - 1)
                                    k2$ = MID$(tekst$(rij%), pj% + 1, p% - pj%)
                                    tekst$(rij%) = k1$ + "        " + k2$
                                END IF
                            NEXT pj%

                        l(rij%) = LEN(tekst$(rij%))
                        rij% = rij% + 1
                        maxrij% = maxrij% + 1
                    LOOP
                CLOSE #1

                CALL scherm.wissen
                rij% = beginrij2%
                regel% = beginregel2%
                tempregel% = regel%
                scherm.wissen
                scherm
                begin.cursor% = 0
                GOSUB weergeven: GOTO top

'**************************** F8 - PASTE **************************************
'******************************************************************************


'******************************************************************************
'**************************** F9 - PRINT **************************************
           
            CASE CHR$(0) + CHR$(67) 'print F9
                LOCATE 2, 1: COLOR 31, 1: PRINT "Printing...": COLOR 15, 1
                GOSUB openPRINT

'**************************** F9 - PRINT **************************************
'******************************************************************************



'******************************************************************************
'**************************** F10/ESCAPE - QUIT **************************************

            CASE CHR$(0) + CHR$(68), CHR$(27) 'F10 - ESC
                COLOR 7, 0
                COLOR 4, 7: LOCATE 2, 1: PRINT "Leave Qb-editor? (j/n)": COLOR 15, 1
                DO
                        k$ = INKEY$
                        k$ = UCASE$(k$)
                        IF k$ = CHR$(27) THEN GOSUB blanco: GOTO top
                LOOP UNTIL k$ = "J" OR k$ = "N"
                IF k$ = "N" THEN GOSUB blanco: GOTO top
               
                IF gewijzigd% = 0 THEN CLS : SCREEN 0: END
                                    IF file$ = "" THEN
                                        COLOR 4, 7: LOCATE 2, 1: PRINT "Save changes? (j/n)": COLOR 15, 1
                                    ELSE
                                        COLOR 4, 7: LOCATE 2, 1: PRINT "Save changes in " + file$ + "? (j/n)": COLOR 15, 1
                                    END IF

                            DO
                                    k$ = INKEY$
                                    k$ = UCASE$(k$)
                                    IF k$ = CHR$(27) THEN EXIT DO
                            LOOP UNTIL k$ = "J" OR k$ = "N"
                    IF k$ = "N" THEN
                        CLS : SCREEN 0: END
                    ELSEIF k$ = "J" THEN
                        GOSUB blanco
                        einde% = 1
                        GOTO save
                    END IF
                LOCATE 2, 1: PRINT STRING$(80, " ")

'**************************** F10/ESCAPE - QUIT **************************************
'******************************************************************************



'******************************************************************************
'**************************** F11 - UITFILE BEKIJKEN *********************************

            CASE CHR$(0) + CHR$(133)
                'excluded
               

'**************************** F11 - UITFILE BEKIJKEN *********************************
'******************************************************************************



'******************************************************************************
'**************************** F12 - HELP **********************************************

            CASE CHR$(0) + CHR$(134)
                'excluded

'**************************** F12 - HELP **********************************************
'******************************************************************************
              



'******************************************************************************
'**************************** Shift.F1 - GOTO LINE **********************************************              

            CASE CHR$(0) + CHR$(84)
                LOCATE 2, 1: COLOR 4, 7: PRINT "Goto line: ";
                COLOR 15, 1
                LINE INPUT "", goto.line$
                goto.line% = VAL(goto.line$)
                GOSUB blanco
                IF goto.line% < 1 THEN GOTO top
                IF goto.line% > maxrij% THEN GOTO top
                rij% = goto.line%
                startregel% = rij% + 2
                eindregel% = startregel% + 19
                tempregel% = 3
                scherm.wissen
                GOSUB weergeven

'**************************** Shift.F1 - GOTO LINE **********************************************              
'******************************************************************************



'******************************************************************************
'**************************** Shift.F2 - SWITCH IN/ASM ******************************************              
                       
            CASE CHR$(0) + CHR$(85) 'switch asm - in
                'excluded

'**************************** Shift.F2 - SWITCH IN/ASM ******************************************              
'******************************************************************************                            



'******************************************************************************
'**************************** Shift.F3 - QUICK SAVE ******************************************             

            CASE CHR$(0) + CHR$(86) 'Quick-Save
                IF NOT file$ = "" THEN
                        GOTO saving  'ctrl-S
                ELSE
                        GOTO save
                END IF

'**************************** Shift.F3 - QUICK SAVE ******************************************             
'******************************************************************************



'******************************************************************************
'**************************** Shift.F4 - MERGE FILE ******************************************             
                       
            CASE CHR$(0) + CHR$(87) 'Merge
                merge% = 1
                lighted.teller% = 1
                begin.asmlist% = 1
                merge.file$ = file$
                GOTO openbis
mergebis:
                merge$ = file$
                file$ = merge.file$
                IF merge$ <> "" THEN gewijzigd% = 1
                GOTO merge

'**************************** Shift.F4 - MERGE FILE ******************************************             
'******************************************************************************                   



'******************************************************************************
'**************************** Shift.F5 - LETTEROMZETTING *************************************            

            CASE CHR$(0) + CHR$(88) 'shift-F5 Lcase <-> UCase
                scherm.wissen
                lighted.omzetten% = 0
kies.omzetting:
                IF lighted.omzetten% = 0 THEN
                        COLOR 1, 7
                        LOCATE 8, 26: PRINT UCASE$("capitals")
                        COLOR 15, 1
                        LOCATE 10, 25: PRINT "small letters"
                ELSE
                        COLOR 15, 1
                        LOCATE 8, 26: PRINT UCASE$("capitals")
                        COLOR 1, 7
                        LOCATE 10, 25: PRINT "small letters"
                END IF

                COLOR 15, 1

                DO
                        nieuw.k$ = INKEY$
                            
                        SELECT CASE nieuw.k$
                                CASE CHR$(0) + CHR$(72), CHR$(0) + CHR$(80)'down'up
                                        IF lighted.omzetten% = 1 THEN lighted.omzetten% = 0 ELSE lighted.omzetten% = 1
                                        GOTO kies.omzetting
                                CASE CHR$(27)
                                        lighted.omzetten% = 2
                                        EXIT DO
                        END SELECT
                LOOP UNTIL nieuw.k$ = CHR$(13)

                SELECT CASE lighted.omzetten%
                        CASE 0
                                FOR i% = 1 TO maxrij%
                                        tekst$(i%) = UCASE$(tekst$(i%))
                                NEXT i%
                                gewijzigd% = 1
                        CASE 1
                                FOR i% = 1 TO maxrij%
                                        tekst$(i%) = LCASE$(tekst$(i%))
                                NEXT i%
                                gewijzigd% = 1
                END SELECT
                                      
                scherm.wissen
                tempregel% = regel%
                GOSUB weergeven

'**************************** Shift.F5 - LETTEROMZETTING *************************************                         
'******************************************************************************



'******************************************************************************
'**************************** Shift.F6/Shift.F7 - FIND/CHANGE ********************************           

            CASE CHR$(0) + CHR$(89), CHR$(0) + CHR$(90) 'Find/Change
                LOCATE 2, 1: COLOR 4, 7: PRINT "Find: ";
                COLOR 15, 1
                LINE INPUT "", find$
                IF LTRIM$(find$) = "" THEN GOTO einde.zoek
                lfind% = LEN(find$)
                lchanger% = 0
                find$ = LCASE$(find$)

                CALL menuline.find
                GOSUB blanco

                IF k$ = CHR$(0) + CHR$(90) THEN
                        LOCATE 2, 1: COLOR 4, 7: PRINT "Change by: ";
                        COLOR 15, 1
                        LINE INPUT "", changer$
                        lchanger% = LEN(changer$)
                        changer$ = LCASE$(changer$)
                        CALL menuline.change
                END IF

                temp.startregel% = startregel%
                temp.eindregel% = eindregel%
                temp.rij% = rij%
                temp.cursor% = cursor%
                tempregel2% = regel%
                startregel% = 3
                eindregel% = 22
                regel% = 3
                i% = rij% - 1
                find.teller% = 0
                found% = 0

                DO
                        IF i% < maxrij% THEN
                                i% = i% + 1
                        ELSE
                                IF k$ = CHR$(0) + CHR$(90) OR found% = 0 THEN GOTO einde.zoek
                                GOTO last.find
                        END IF

                        FOR j% = 1 TO l(i%) - lfind% + 2
                               
                                look$ = MID$(tekst$(i%), j%, lfind%)
                                look2$ = LCASE$(look$)

                                IF look2$ = find$ THEN
                                        found% = 1
                                        find.teller% = find.teller% + 1
                                        tel.i%(find.teller%) = i%
                                        IF i% > 13 THEN
                                                startregel% = i% - 10
                                                eindregel% = startregel% + 19
                                                regel% = FIX((eindregel% - startregel%) / 2) + 6
                                        ELSE
                                                startregel% = 3
                                                eindregel% = startregel% + 19
                                                regel% = i% + 2
                                        END IF

                                        temp.i% = i%
                                        scherm.wissen
                                        IF j% <= hrt% THEN
                                                tempregel% = regel%
                                                begin.cursor% = 0
                                                GOSUB weergeven
                                        END IF
                                        i% = temp.i%
                                        LOCATE 23, 8: COLOR 0, 3: PRINT USING "####"; i%;
                                        PRINT " - ";
                                        PRINT USING "####"; j%

                                        f1$ = LEFT$(tekst$(i%), j% - 1)
                                        f2$ = RIGHT$(tekst$(i%), l(i%) - LEN(f1$) - lfind%)
                                                     
                                        IF j% > hrt% THEN
                                                begin.cursor% = 70
                                                tempregel% = regel%
                                                GOSUB cursor.weergeven
                                                COLOR 15, 1
                                                LOCATE regel%, 2: PRINT STRING$(78, " ")
                                                LOCATE regel%, 2: PRINT RIGHT$(f1$, 10);
                                                COLOR 1, 15
                                                PRINT look$;
                                                COLOR 15, 1
                                                PRINT LEFT$(f2$, hrt% - 10 - lfind%)
                                        ELSE
                                                COLOR 15, 1
                                                LOCATE regel%, 2: PRINT f1$;
                                                COLOR 1, 15
                                                PRINT look$;
                                                COLOR 15, 1
                                                PRINT LEFT$(f2$, hrt% - lfind% - LEN(f1$))
                                        END IF
last.find:
                                        DO
                                                find.k$ = INKEY$
                                                SELECT CASE find.k$
                                                        CASE CHR$(0) + CHR$(80)'down
                                                                last.find.k$ = ""
                                                                EXIT DO

                                                        CASE CHR$(0) + CHR$(72)'up
                                                                IF find.teller% > 1 AND k$ = CHR$(0) + CHR$(89) THEN
                                                                        find.teller% = find.teller% - 2
                                                                        IF last.find.k$ <> "up" THEN find.teller% = find.teller% + 1
                                                                        i% = tel.i%(find.teller%)
                                                                        j% = 1
                                                                        last.find.k$ = "up"
                                                                        EXIT DO
                                                                END IF

                                                        CASE CHR$(13)
                                                                IF k$ = CHR$(0) + CHR$(90) THEN
                                                                        tekst$(i%) = f1$ + changer$ + f2$
                                                                        l(i%) = LEN(tekst$(i%))
                                                                        LOCATE regel%, 2: PRINT tekst$(rij%)
                                                                        COLOR 0, 3
                                                                        gewijzigd% = 1
                                                                        status$ = "(Gewijzigd)  "
                                                                        LOCATE 23, 41: PRINT status$
                                                                        COLOR 15, 1
                                                                        EXIT DO
                                                                END IF


                                                        CASE CHR$(27)
                                                                GOTO einde.zoek
                                                END SELECT
                                        LOOP
                                END IF
                        NEXT j%
                LOOP
einde.zoek:
                              
        rij% = tel.i%(find.teller%)
        ERASE tel.i%
        tempregel% = regel%
        scherm.wissen
        GOSUB weergeven
        IF found% = 0 THEN
                LOCATE 2, 1
                COLOR 31
                PRINT find$ + " is niet gevonden in " + file$
                COLOR 15, 1
                blancotijd = TIMER
                startregel% = temp.startregel%
                eindregel% = temp.eindregel%
                rij% = temp.rij%
                cursor% = temp.cursor%
                tempregel% = tempregel2%
                GOSUB weergeven
        END IF
        menuline
        begin.cursor% = 0

'**************************** Shift.F6/Shift.F7 - FIND/CHANGE ********************************         
'******************************************************************************



'******************************************************************************
'**************************** Shift.F8 - INSERT: mov eax, ********************************          
                       
            CASE CHR$(0) + CHR$(91)
                'excluded
'**************************** Shift.F8 - INSERT: mov eax, ********************************          
'******************************************************************************


'******************************************************************************
'**************************** Shift.F9 - INSERT: mov si, offset **************************      
                       
            CASE CHR$(0) + CHR$(92)'F9: insert mov si, offset
                'excluded

'**************************** Shift.F9 - INSERT: mov si, offset **************************      
'******************************************************************************



'******************************************************************************
'**************************** Shift.F10 - INSERT: mov di, offset outarea **************************     
                       
            CASE CHR$(0) + CHR$(93)'F10: insert mov di, offset outarea +
                'excluded                            

'**************************** Shift.F10 - INSERT: mov di, offset outarea **************************     
'******************************************************************************



'******************************************************************************
'**************************** Shift.F11 - LISTING BEKIJKEN **************************     
                       
            CASE CHR$(0) + CHR$(135) 'Shift-F11: edit listing
                'excluded

'**************************** Shift.F11 - LISTING BEKIJKEN **************************    
'******************************************************************************



'******************************************************************************
'**************************** Shift.F12 - Bewaren in andere directory ***************   

            CASE CHR$(0) + CHR$(136) 'Shift -F12 'doesn't always seem to work (the key)
                LOCATE 2, 1: COLOR 4, 7: PRINT "Save to: "
                LOCATE 3, 1: PRINT STRING$(80, " ")
                LOCATE 3, 1: PRINT "Geef VOLLEDIG pad, bestandsnaam en extensie!"
                COLOR 15, 1
                CALL een.lijn(2, 10, 45, temp$)
                IF temp$ = "" THEN GOTO top
save.to.dir:
                OPEN temp$ FOR APPEND AS #1
                CLOSE #1
                KILL temp$
                OPEN temp$ FOR APPEND AS #1
                        FOR fileindex = 1 TO maxrij%
                                PRINT #1, tekst$(fileindex)
                        NEXT fileindex
                CLOSE #1
                scherm.wissen
                tempregel% = regel%
                GOSUB weergeven

'**************************** Shift.F12 - Bewaren in andere directory ***************   
'******************************************************************************




'******************************************************************************
'********************************** ENTER ***********************************************

            CASE CHR$(13) 'enter
                IF begin.cursor% > 0 THEN begin.cursor% = 0
                seek$ = LCASE$(tekst$(rij%))

                IF rij% >= maxrij% THEN
                    
                    LOCATE regel%, cursor%: PRINT " "
                    LOCATE regel%, cursor%: PRINT MID$(tekst$(rij%), cursor% - 1 + begin.cursor%, 1)
                    
                    maxrij% = maxrij% + 1
                    cursor% = 2
                    
                    IF regel% >= 22 THEN
                        rij% = rij% + 1
                        startregel% = startregel% + 1
                        eindregel% = eindregel% + 1
                        tempregel% = 22
                        CALL scherm.wissen
                        begin.cursor% = 0
                        GOSUB weergeven: GOTO top
                    END IF
                    
                    gewijzigd% = 1
                    nieuw% = 0
                    vertaald% = 0
                    uitgevoerd% = 0
                ELSE 'insert line
                    
                    LOCATE regel%, cursor%: PRINT " "
                    COLOR , 1
                    temp1% = rij%
                    LOCATE regel%, cursor%: PRINT STRING$(80 - cursor%, " ")
                    FOR k% = regel% + 1 TO 22
                        LOCATE k%, 1: PRINT STRING$(80, " ")
                    NEXT k%
                    COLOR 15, 1
                    FOR i% = maxrij% + 1 TO rij% + 2 STEP -1
                        tekst$(i%) = tekst$(i% - 1)
                        l(i%) = l(i% - 1)
                    NEXT i%
                    FOR i% = rij% + 1 TO rij% + 1
                        tekst$(i%) = RIGHT$(tekst$(i% - 1), l(i% - 1) - cursor% + 2)
                        l(i%) = LEN(tekst$(i%))
                    NEXT i%
                    maxrij% = maxrij% + 1
                    rij% = rij% + 1
                    tekst$(temp1%) = LEFT$(tekst$(temp1%), cursor% - 2)
                    l(temp1%) = LEN(tekst$(temp1%))
                    temp2% = regel%
                    tempregel% = regel%
                    IF rij% + 1 >= eindregel% AND maxrij% > 22 THEN
                        startregel% = startregel% + 1
                        eindregel% = eindregel% + 1
                        tempregel% = 22
                        CALL scherm.wissen
                    ELSE
                        tempregel% = regel% + 1
                    END IF
                    cursor% = 2
                    gewijzigd% = 1
                    nieuw% = 0
                    vertaald% = 0
                    uitgevoerd% = 0
                    GOSUB weergeven
                    
                    GOTO top
                END IF
                
                EXIT DO

'********************************** ENTER ***********************************************             
'******************************************************************************



'******************************************************************************
'********************************** HOME ***********************************************

            CASE CHR$(0) + CHR$(71) 'home

                IF cursor% + begin.cursor% = 2 THEN
                        LOCATE regel%, cursor%: PRINT " "
                        temp.home% = LEN(LTRIM$(tekst$(rij%)))
                        verschil.home% = l(rij%) - temp.home%
                        cursor% = verschil.home% + 2
                        IF verschil.home% > hrt% THEN
                            begin.cursor% = verschil.home% - hrt% + 10
                            cursor% = hrt% - 10 + 2
                            tempregel% = regel%
                            GOSUB cursor.weergeven
                        END IF
                ELSE
                        LOCATE regel%, cursor%: PRINT " "
                        LOCATE regel%, cursor%: PRINT MID$(tekst$(rij%), cursor% - 1 + begin.cursor%, 1)
                        cursor% = 2
                        IF begin.cursor% > 0 THEN begin.cursor% = 0: GOSUB weergeven
                END IF

'********************************** HOME ***********************************************
'******************************************************************************



'******************************************************************************
'********************************** END ***********************************************

            CASE CHR$(0) + CHR$(79) 'end

                IF LCASE$(LTRIM$(seek$)) = "inleiding" OR LCASE$(LTRIM$(seek$)) = "slot" OR LCASE$(LTRIM$(seek$)) = "covar" OR LCASE$(LTRIM$(seek$)) = "schrijf" OR LCASE$(LTRIM$(seek$)) = "tekstbin" THEN
                    tempcursor% = cursor%
                    cursor% = 0
                    
                    seeked% = 1
                    cursor% = tempcursor%
                END IF
                IF seeked% = 0 THEN
                    LOCATE regel%, cursor%: PRINT " "
                    LOCATE regel%, cursor%: PRINT MID$(tekst$(rij%), cursor% - 1 + begin.cursor%, 1)
                END IF
                seeked% = 0

                cursor% = l(rij%) + 2
                IF cursor% > hrt% THEN
                    begin.cursor% = l(rij%) - hrt% + 10
                    cursor% = hrt% - 10 + 2
                    tempregel% = regel%
                    GOSUB cursor.weergeven
                END IF

'********************************** END ***********************************************
'******************************************************************************



'******************************************************************************
'********************************** DELETE ********************************************

            CASE CHR$(0) + CHR$(83) 'delete
                
                IF ((cursor% + begin.cursor%) = l(rij%) + 2) THEN
                    IF rij% < maxrij% THEN
                        temp.l.rij% = l(rij% + 1)
                        LOCATE regel%, cursor%: PRINT " "
                        COLOR , 1
                        temp1% = rij%
                        FOR k% = regel% TO 22
                            LOCATE k%, 1: PRINT STRING$(80, " ")
                        NEXT k%
                        COLOR 15, 1
                        FOR i% = rij% + 1 TO rij% + 1
                            tekst$(i% - 1) = tekst$(i% - 1) + tekst$(i%)
                            l(i% - 1) = l(i% - 1) + l(i%)
                        NEXT i%
                        FOR i% = rij% + 1 TO maxrij% + 1
                            tekst$(i%) = tekst$(i% + 1)
                            l(i%) = l(i% + 1)
                        NEXT i%
                        tekst$(maxrij%) = ""
                        tekst$(maxrij% + 1) = ""
                        maxrij% = maxrij% - 1
                        tempregel% = regel%
                        GOSUB blanco
                        IF begin.cursor% = 0 THEN
                            GOSUB weergeven
                        ELSE
                            IF temp.l.rij% >= 10 THEN
                                begin.cursor% = begin.cursor% + 10
                                cursor% = cursor% - 10
                            ELSE
                                begin.cursor% = begin.cursor% + temp.l.rij%
                                cursor% = cursor% - temp.l.rij%
                            END IF
                            GOSUB cursor.weergeven
                        END IF
                    ELSEIF l(rij%) <= 0 AND rij% > 1 THEN
                        tekst$(rij%) = ""
                        LOCATE regel%, cursor%: PRINT " "
                        regel% = regel% - 1
                        rij% = rij% - 1
                        cursor% = l(rij%) + 2
                        maxrij% = maxrij% - 1
                    END IF
                    gewijzigd% = 1
                    vertaald% = 0
                    uitgevoerd% = 0
                ELSEIF (cursor% + begincursor% < l(rij%) + 2) THEN
                    tekst$(rij%) = LEFT$(tekst$(rij%), cursor% + begin.cursor% - 2) + RIGHT$(tekst$(rij%), l(rij%) - cursor% - begin.cursor% + 1)
                    COLOR 15, 1
                    LOCATE regel%, 1: PRINT STRING$(80, " ")
                    LOCATE regel%, 2: PRINT MID$(tekst$(rij%), begin.cursor% + 1, 78)
                    l(rij%) = l(rij%) - 1
                    gewijzigd% = 1
                    vertaald% = 0
                    uitgevoerd% = 0
                END IF

'********************************** DELETE ********************************************
'******************************************************************************




'******************************************************************************
'********************************** BACKSPACE *****************************************

            CASE CHR$(8) 'backspace
                IF NOT cursor% <= 2 AND l(rij%) > 0 THEN
                    tekst$(rij%) = LEFT$(tekst$(rij%), cursor% + begin.cursor% - 3) + RIGHT$(tekst$(rij%), l(rij%) - cursor% - begin.cursor% + 2)
                    cursor% = cursor% - 1
                    LOCATE regel%, 1: PRINT STRING$(80, " ")
                    LOCATE regel%, 2: PRINT MID$(tekst$(rij%), begin.cursor% + 1, 78)
                    l(rij%) = l(rij%) - 1
                    gewijzigd% = 1
                    vertaald% = 0
                    uitgevoerd% = 0
                ELSEIF rij% > 1 AND begin.cursor% = 0 THEN
                        IF l(rij% - 1) + l(rij%) > maximum.rijlengte% THEN BEEP: GOTO top
                        LOCATE regel%, cursor%: PRINT " "
                        COLOR , 1
                        temp1% = rij%
                        FOR k% = regel% TO 22
                                LOCATE k%, 1: PRINT STRING$(80, " ")
                        NEXT k%
                        COLOR 15, 1
                        cursor% = l(rij% - 1) + 2
                        FOR i% = rij% TO rij%
                                tekst$(i% - 1) = tekst$(i% - 1) + tekst$(i%)
                                l(i% - 1) = l(i% - 1) + l(i%)
                        NEXT i%
                        FOR i% = rij% TO maxrij% + 1
                                tekst$(i%) = tekst$(i% + 1)
                                l(i%) = l(i% + 1)
                        NEXT i%

                        tekst$(maxrij%) = ""
                        maxrij% = maxrij% - 1
                        regel% = regel% - 1
                        temp2% = regel%
                        FOR i% = rij% - 1 TO maxrij%
                                IF temp2% = 23 THEN EXIT FOR
                                LOCATE temp2%, 2: PRINT tekst$(i%)
                                temp2% = temp2% + 1
                        NEXT i%
                        gewijzigd% = 1
                        vertaald% = 0
                        uitgevoerd% = 0
                        rij% = rij% - 1

                        IF regel% = 2 THEN
                            regel% = 3
                            startregel% = startregel% - 1
                            eindregel% = eindregel% - 1
                            tempregel% = 3
                            CALL scherm.wissen
                            IF cursor.weergeven > 0 THEN
                                GOSUB cursor.weergeven
                            ELSE
                                GOSUB weergeven
                            END IF
                            GOTO top
                        END IF

                    ELSEIF rij% > 1 OR begin.cursor% > 0 THEN
                        tekst$(rij%) = LEFT$(tekst$(rij%), cursor% + begin.cursor% - 3) + RIGHT$(tekst$(rij%), l(rij%) - cursor% - begin.cursor% + 2)
                        cursor% = cursor% - 1
                        l(rij%) = l(rij%) - 1
                        scherm.wissen
                        begin.cursor% = begin.cursor% - 1
                        cursor% = cursor% + 1
                        GOSUB cursor.weergeven
                        gewijzigd% = 1
                        vertaald% = 0
                        uitgevoerd% = 0
                    END IF
                   
'********************************** BACKSPACE *****************************************
'******************************************************************************



'******************************************************************************
'********************************** TAB *****************************************

            CASE CHR$(9) 'tab

                tempcursor% = ((1 + INT((cursor% - 2) / 8)) * 8) + 2
                IF l(rij%) + tempcursor% - cursor% > maximum.rijlengte% THEN BEEP: GOTO top
                IF cursor% + begin.cursor% >= l(rij%) + 2 THEN
                        LOCATE regel%, cursor%: PRINT " "
                        LOCATE regel%, cursor%: PRINT MID$(tekst$(rij%), cursor% - 1 + begin.cursor%, 1)
                        FOR i% = cursor% TO tempcursor% - 1
                            tekst$(rij%) = tekst$(rij%) + " "
                        NEXT i%
                ELSE
                        IF insert% = 1 THEN
                            ltekst$ = LEFT$(tekst$(rij%), cursor% + begin.cursor% - 2)
                            rtekst$ = RIGHT$(tekst$(rij%), l(rij%) - cursor% - begin.cursor% + 2)

                            FOR i% = cursor% TO tempcursor% - 1
                                rtekst$ = " " + rtekst$
                            NEXT i%
                            tekst$(rij%) = ltekst$ + rtekst$
                        END IF
                
                END IF
                    
                    l(rij%) = LEN(tekst$(rij%))
                    IF tempcursor% + 2 <= hrt% THEN
                        cursor% = tempcursor%
                        LOCATE regel%, 2: PRINT MID$(tekst$(rij%), begin.cursor% + 1, 78)
                    ELSE
                        tempregel% = regel%
                        begin.cursor% = begin.cursor% + 8
                        GOSUB cursor.weergeven
                    END IF

                    gewijzigd% = 1
                    vertaald% = 0
                    uitgevoerd% = 0

                    
'********************************** TAB *****************************************                   
'******************************************************************************



'******************************************************************************
'********************************** Shift.TAB *****************************************                

            CASE CHR$(0) + CHR$(15)
                tempcursor% = ((INT((begin.cursor% + cursor% - 3) / 8)) * 8) + 2
                verschil% = cursor% + begin.cursor% - tempcursor%
                IF verschil% < 0 THEN verschil% = 0
                LOCATE regel%, cursor%: PRINT " "
                LOCATE regel%, cursor%: PRINT MID$(tekst$(rij%), cursor% - 1 + begin.cursor%, 1)
                cursor% = cursor% - verschil%

                IF cursor% < 2 THEN
                        IF begin.cursor% = 0 THEN
                                cursor% = 2
                        ELSE
                                tempregel% = regel%
                                scherm.wissen
                                IF begin.cursor% > verschil% THEN
                                        begin.cursor% = begin.cursor% - verschil%
                                        GOSUB cursor.weergeven
                                ELSE
                                        begin.cursor% = 0
                                        cursor% = 2
                                        GOSUB weergeven
                                END IF
                        END IF
                END IF
                                


'********************************** Shift.TAB *****************************************                
'******************************************************************************




'******************************************************************************
'********************************** LINKS ***************************************

CASE CHR$(0) + CHR$(75) 'Links
                IF NOT cursor% <= 2 THEN
                    LOCATE regel%, cursor%: PRINT " "
                    LOCATE regel%, cursor%: PRINT MID$(tekst$(rij%), cursor% - 1 + begin.cursor%, 1)
                    cursor% = cursor% - 1
                ELSE
                    IF begin.cursor% = 0 THEN
                        IF NOT regel% <= 3 THEN
                            LOCATE regel%, cursor%: PRINT " "
                            LOCATE regel%, cursor%: PRINT MID$(tekst$(rij%), cursor% - 1 + begin.cursor%, 1)
                            rij% = rij% - 1
                            regel% = regel% - 1
                            cursor% = l(rij%) + 2
                        ELSEIF regel% <= 3 AND rij% > 1 THEN
                            rij% = rij% - 1
                            cursor% = l(rij%) + 2
                            startregel% = startregel% - 1
                            eindregel% = eindregel% - 1
                            tempregel% = 3
                            CALL scherm.wissen
                            GOSUB weergeven: GOTO top
                            GOTO top
                        END IF
                    ELSE
                        tempregel% = regel%
                        begin.cursor% = begin.cursor% - 1
                        GOSUB cursor.weergeven
                        LOCATE regel%, cursor%: PRINT MID$(tekst$(rij%), cursor% - 1 + begin.cursor%, 1)
                        
                    END IF
                END IF

'********************************** LINKS ***************************************
'******************************************************************************



'******************************************************************************
'********************************** RECHTS **************************************

            CASE CHR$(0) + CHR$(77) 'Rechts
                
                IF cursor% + begin.cursor% <= l(rij%) + 1 THEN
                    LOCATE regel%, cursor%: PRINT " "
                    LOCATE regel%, cursor%: PRINT MID$(tekst$(rij%), cursor% - 1 + begin.cursor%, 1)

                    IF cursor% < hrt% THEN
                        cursor% = cursor% + 1
                    ELSE
                        begin.cursor% = begin.cursor% + 1
                        tempregel% = regel%
                        GOSUB cursor.weergeven
                    END IF

                END IF

'********************************** RECHTS **************************************
'******************************************************************************



'******************************************************************************
'********************************** UP-ARROW **************************************
           
            CASE CHR$(0) + CHR$(72) 'Up
                
                seek$ = LCASE$(tekst$(rij%))
                IF LCASE$(LTRIM$(seek$)) = "inleiding" OR LCASE$(LTRIM$(seek$)) = "slot" OR LCASE$(LTRIM$(seek$)) = "covar" OR LCASE$(LTRIM$(seek$)) = "schrijf" OR LCASE$(LTRIM$(seek$)) = "tekstbin" THEN
                    tempcursor% = cursor%
                    cursor% = 0
                    
                    cursor% = tempcursor%
                    seeked% = 1
                END IF

                IF regel% > 3 THEN
                    IF begin.cursor% > 0 THEN begin.cursor% = 0: tempregel% = regel%: GOSUB weergeven
                    IF seeked% = 0 THEN
                        LOCATE regel%, cursor%: PRINT " "
                        LOCATE regel%, cursor%: PRINT MID$(tekst$(rij%), cursor% - 1 + begin.cursor%, 1)
                    END IF
                    rij% = rij% - 1
                    regel% = regel% - 1
                    IF cursor% > l(rij%) + 2 THEN
                        cursor% = l(rij%) + 2
                    END IF
                    
                ELSEIF rij% > 1 THEN
                    IF begin.cursor% > 0 THEN begin.cursor% = 0: tempregel% = regel%: GOSUB weergeven
                    IF seeked% = 0 THEN
                        LOCATE regel%, cursor%: PRINT " "
                        LOCATE regel%, cursor%: PRINT MID$(tekst$(rij%), cursor% - 1 + begin.cursor%, 1)
                    END IF
                    rij% = rij% - 1
                    IF cursor% > l(rij%) + 2 THEN
                        cursor% = l(rij%) + 2
                    END IF
                    startregel% = startregel% - 1
                    eindregel% = eindregel% - 1
                    tempregel% = 3
                    CALL scherm.wissen
                    GOSUB weergeven
                    
                    GOTO top
                END IF
                seeked% = 0
                
'********************************** UP-ARROW **************************************         
'******************************************************************************



'******************************************************************************
'********************************** DOWN-ARROW **************************************

            CASE CHR$(0) + CHR$(80) 'Down
                
                seek$ = LCASE$(tekst$(rij%))
                IF LCASE$(LTRIM$(seek$)) = "inleiding" OR LCASE$(LTRIM$(seek$)) = "slot" OR LCASE$(LTRIM$(seek$)) = "covar" OR LCASE$(LTRIM$(seek$)) = "schrijf" OR LCASE$(LTRIM$(seek$)) = "tekstbin" THEN
                    tempcursor% = cursor%
                    cursor% = 0
                    

                    cursor% = tempcursor%
                    seeked% = 1
                END IF

                IF NOT rij% >= maxrij% THEN
                    IF begin.cursor% > 0 THEN begin.cursor% = 0: tempregel% = regel%: GOSUB weergeven
                    IF seeked% = 0 THEN
                        LOCATE regel%, cursor%: PRINT " "
                        LOCATE regel%, cursor%: PRINT MID$(tekst$(rij%), cursor% - 1 + begin.cursor%, 1)
                    END IF
                    rij% = rij% + 1
                    IF cursor% > l(rij%) + 2 THEN
                        cursor% = l(rij%) + 2
                    END IF
                    IF rij% + 1 >= eindregel% THEN
                        startregel% = startregel% + 1
                        eindregel% = eindregel% + 1
                        tempregel% = 22
                        CALL scherm.wissen
                        GOSUB weergeven:  GOTO top
                    END IF
                    regel% = regel% + 1
                    
                END IF
                

'********************************** DOWN-ARROW **************************************
'******************************************************************************



'******************************************************************************
'********************************** PAGE-UP **************************************

            CASE CHR$(0) + CHR$(73) 'Page Up
                
                l.last.rij% = l(rij%)
                IF NOT startregel% - 20 < 1 THEN
                    rij% = rij% - 20
                    startregel% = startregel% - 20
                    eindregel% = eindregel% - 20
                    tempregel% = regel%
                ELSE
                    rij% = 1
                    startregel% = 3
                    eindregel% = 22
                    tempregel% = 3
                END IF
                cursor% = cursor% + begin.cursor% - 1
                IF cursor% >= l(rij%) + 2 THEN
                    cursor% = l(rij%) + 2
                END IF

                CALL scherm.wissen
                IF cursor% > hrt% THEN
                    l.last.rij% = l.last.rij% - l(rij%)
                    IF l.last.rij% < 0 THEN l.last.rij% = 0
                    cursor% = hrt% - 10 + 2
                    GOSUB cursor.weergeven
                ELSE
                    begin.cursor% = 0
                    GOSUB weergeven
                END IF

                GOTO top

'********************************** PAGE-UP **************************************
'******************************************************************************




'******************************************************************************
'********************************** PAGE-DOWN **************************************

            CASE CHR$(0) + CHR$(81) 'Page Down

                l.last.rij% = l(rij%)
                IF NOT rij% + 20 > maxrij% THEN
                    rij% = rij% + 20
                    startregel% = startregel% + 20
                    eindregel% = eindregel% + 20
                    tempregel% = regel%
                ELSE
                    verschil% = maxrij% - rij%
                    rij% = maxrij%
                    IF regel% + verschil% > 20 THEN
                        startregel% = startregel% + verschil%
                        eindregel% = eindregel% + verschil%
                        tempregel% = regel%
                    ELSE
                        tempregel% = regel% + verschil%
                    END IF
                END IF
               
                temp.cursor% = cursor%
                cursor% = cursor% + begin.cursor% - 1
                IF cursor% >= l(rij%) + 2 THEN
                    cursor% = l(rij%) + 2
                END IF

                CALL scherm.wissen
                IF cursor% > hrt% THEN
                    l.last.rij% = l.last.rij% - l(rij%)
                    IF l.last.rij% < 0 THEN l.last.rij% = 0
                    cursor% = hrt% - 10 + 2 - l.last.rij%
                    GOSUB cursor.weergeven
                ELSE
                    begin.cursor% = 0
                    GOSUB weergeven
                END IF

                GOTO top

'********************************** PAGE-DOWN **************************************
'******************************************************************************


'******************************************************************************
'********************************** CTRL-HOME **************************************

            CASE CHR$(0) + CHR$(119)
                rij% = 1
                startregel% = 3
                eindregel% = 22
                tempregel% = 3
                cursor% = 2
                scherm.wissen
                GOSUB weergeven

'********************************** CTRL-HOME **************************************
'******************************************************************************


'******************************************************************************
'********************************** CTRL-END **************************************

            CASE CHR$(0) + CHR$(117)
                rij% = maxrij%
                eindregel% = maxrij% + 2
                startregel% = eindregel% - 19
                tempregel% = 22
                
                IF startregel% < 3 THEN
                        tempregel% = rij% + 2
                        startregel% = 3
                        eindregel% = 22
                END IF
                
                cursor% = 2
                scherm.wissen
                GOSUB weergeven


'********************************** CTRL-END **************************************
'******************************************************************************





'******************************************************************************
'********************************** CTRL-C **************************************

            CASE CHR$(3)
               'excluded

'********************************** CTRL-C **************************************
'******************************************************************************



'******************************************************************************
'********************************** CTRL-Y **************************************

            CASE CHR$(25)
                IF maxrij% > 1 AND rij% <> maxrij% THEN
                        maxrij% = maxrij% - 1
                        FOR i% = rij% TO maxrij% + 1
                                tekst$(i%) = tekst$(i% + 1)
                                l(i%) = l(i% + 1)
                        NEXT i%
                        scherm.wissen
                        cursor% = 2
                        tempregel% = regel%
                        GOSUB weergeven
                        gewijzigd% = 1
                        vertaald% = 0
                        uitgevoerd% = 0
                ELSEIF l(rij%) > 0 THEN
                        tekst$(rij%) = ""
                        l(rij%) = 0
                        cursor% = 2
                        scherm.wissen
                        tempregel% = regel%
                        GOSUB weergeven
                        gewijzigd% = 1
                        vertaald% = 0
                        uitgevoerd% = 0
                END IF



'********************************** CTRL-Y **************************************
'******************************************************************************



'******************************************************************************
'********************************** ELSE **************************************

            CASE ELSE

                IF k$ <> "" AND LEN(k$) = 1 THEN

                    IF cursor% + begin.cursor% >= l(rij%) + 2 THEN
                        tekst$(rij%) = tekst$(rij%) + k$
                        l(rij%) = LEN(tekst$(rij%))
                        COLOR 15, 1
                        LOCATE regel%, cursor%: PRINT k$
                        cursor% = cursor% + 1
                    ELSE
                        IF insert% = 1 THEN
                            tekst$(rij%) = LEFT$(tekst$(rij%), cursor% - 2) + k$ + RIGHT$(tekst$(rij%), l(rij%) - cursor% + 2)
                        ELSE
                            MID$(tekst$(rij%), cursor% - 1) = k$
                        END IF
                        cursor% = cursor% + 1
                        COLOR 15, 1
                        LOCATE regel%, 1: PRINT STRING$(80, " ")
                        IF begincursor% > 0 THEN
                            LOCATE regel%, 2: PRINT MID$(tekst$(rij%), begin.cursor%, 78)
                        ELSE
                            LOCATE regel%, 2: PRINT LEFT$(tekst$(rij%), 78)
                        END IF
                        l(rij%) = LEN(tekst$(rij%))
                    END IF
                    IF cursor% + 2 > hrt% THEN
                        tempregel% = regel%
                        begin.cursor% = begin.cursor% + 1
                        cursor% = cursor% - 1
                        GOSUB cursor.weergeven
                    END IF

                    gewijzigd% = 1
                    vertaald% = 0
                    uitgevoerd% = 0
                END IF

'********************************** ELSE **************************************
'******************************************************************************


        END SELECT

'******************************************************************************
'********************************** CONTROLE-SECTIE ***************************

'LOCATE 2, 1: PRINT MID$(tekst$(rij%), cursor% - 1 + begin.cursor%, 1)
'LOCATE 2, 1: PRINT tempcursor%
'LOCATE 2, 1: PRINT maxrij%

'********************************** CONTROLE-SECTIE ***************************
'******************************************************************************

    LOOP

LOOP


'******************************************************************************
'**************************** BLANCO *****************************************************************************************************************

blanco:
    LOCATE 2, 1: COLOR , 1: PRINT STRING$(80, " ")
RETURN

'**************************** BLANCO ***********************************
'******************************************************************************


'******************************************************************************
'**************************** FILELIST *****************************************************************************************************************

filelist:

OPEN "dir.tem" FOR APPEND AS #1
CLOSE #1
KILL "dir.tem"
SHELL "dir > dir.tem"
OPEN "dir.tem" FOR INPUT AS #1

asmlist% = 0

DO WHILE NOT EOF(1)
    LINE INPUT #1, filelist$
        temp$ = LEFT$(filelist$, 12)
        temp2$ = RIGHT$(temp$, 3)
        temp3$ = RIGHT$(temp$, 3)
    IF UCASE$(temp2$) = "TXT" THEN
      asmlist% = asmlist% + 1
      asmlist$(asmlist%) = temp$
    END IF

LOOP

IF sort$ = "J" THEN

LOCATE 2, 25: COLOR 15, 1: PRINT "sorting:      of "; asmlist%

max% = 0

sort:
        FOR i% = 1 TO asmlist% - 1
                IF i% > max% THEN
                        max% = i%
                        LOCATE 2, 34: PRINT USING "####"; max%
                END IF

                IF asmlist$(i%) > asmlist$(i% + 1) THEN
                        SWAP asmlist$(i%), asmlist$(i% + 1)
                        GOTO sort
                END IF
        NEXT i%
GOSUB blanco
END IF

filelist$ = ""
temp$ = ""
temp2$ = ""
CLOSE #1
KILL "dir.tem"
RETURN

'**************************** FILELIST *****************************************************************************************************************
'******************************************************************************


'******************************************************************************
'**************************** WEERGEVEN *****************************************************************************************************************

weergeven:
    regel% = 3
    FOR x% = startregel% - 2 TO eindregel% - 2
        COLOR 15, 1
        FOR i% = 1 TO rijteller%
            IF x% = rijselected(i%) THEN COLOR , 7: EXIT FOR
        NEXT i%
       
        IF x% <= 0 THEN BEEP: GOSUB refresh

        seek$ = LCASE$(RTRIM$(tekst$(x%)))

       
        LOCATE regel%, 2: PRINT LEFT$(tekst$(x%), 78)
        
       
        IF tekst$(x%) = "" THEN
            LOCATE regel%, 2
            PRINT " "
        END IF
        regel% = regel% + 1
    NEXT x%

    regel% = tempregel%
    
RETURN

'**************************** WEERGEVEN *****************************************************************************************************************
'******************************************************************************




'******************************************************************************
'**************************** cursor.WEERGEVEN ***********************************

cursor.weergeven:

    IF begin.cursor% <= 0 THEN begin.cursor% = 0: GOSUB refresh: BEEP: GOTO top
    scherm.wissen
    regel% = 3
    COLOR 15, 1
    FOR x% = startregel% - 2 TO eindregel% - 2
        IF x% <= 0 THEN BEEP: GOSUB refresh
        LOCATE regel%, 2: PRINT MID$(tekst$(x%), begin.cursor% + 1, 78)
        regel% = regel% + 1
    NEXT x%
    
    regel% = tempregel%
   
RETURN

'**************************** Cursor.WEERGEVEN ***********************************
'******************************************************************************



'******************************************************************************
'**************************** MAKE BACKUP *************************************

backup:

IF gewijzigd% = 0 THEN RETURN
LOCATE 2, 1: COLOR 20, 7: PRINT "Automatisch reservebestand": COLOR 15, 1
OPEN "asbackup.asm" FOR APPEND AS #1
CLOSE #1

KILL "asbackup.asm"

OPEN "asbackup.asm" FOR APPEND AS #1
FOR backupi% = 1 TO maxrij%
    PRINT #1, tekst$(backupi%)
NEXT backupi%

CLOSE #1
blancotijd = 2
RETURN

'**************************** MAKE BACKUP ************************************
'******************************************************************************



'******************************************************************************
'**************************** AFDRUKKEN **************************************

openPRINT:

LPRINT print.file$ + ":"
printl% = LEN(print.file$)
streep$ = "-"

FOR streep% = 1 TO printl%
    streep$ = streep$ + "-"
NEXT streep%

LPRINT streep$
LPRINT
        
OPEN print.file$ FOR INPUT AS #2
        DO WHILE NOT EOF(2)
                LINE INPUT #2, printtemp$
                LPRINT printtemp$
        LOOP
CLOSE #2

k% = LPOS(0)

FOR i% = k% TO 62
        LPRINT
NEXT i%

RETURN

'**************************** AFDRUKKEN **************************************
'******************************************************************************




'******************************************************************************
'**************************** FOUTAFHANDELING ***********************************

error.handler:

errorcode = ERR

IF ERR = 75 THEN BEEP: tempregel% = regel%: scherm.wissen: GOSUB weergeven: GOTO top
IF ERR = 13 THEN RESUME NEXT
BEEP
IF rij% <= 0 THEN rij% = 1: regel% = 3: startregel% = 3: eindregel% = 22
IF regel% <= 3 THEN regel% = 3: rij% = 1: startregel% = 3: eindregel% = 22

IF gewijzigd% = 1 THEN
        LOCATE 2, 1: COLOR 4, 1: PRINT "Er is een fout opgetreden. Wilt U uw bestand bewaren en Qb-editor opnieuw       opstarten?  j/n.  ";
ELSE
        LOCATE 2, 1: COLOR 4, 1: PRINT "Er is een fout opgetreden. Wilt U Qb-editor opnieuw opstarten?  j/n.";
END IF

DO
    k$ = INKEY$
    k$ = UCASE$(k$)
    IF k$ = CHR$(13) THEN LOCATE 22, 1: PRINT "Error Code: "; errorcode; "in regel% "; ERL
    IF k$ = CHR$(27) THEN k$ = "N"
LOOP UNTIL k$ = "J" OR k$ = "N"

IF k$ = "N" THEN
    GOSUB blanco
    LOCATE 3, 1: PRINT STRING$(80, " ")
    GOSUB refresh
ELSEIF k$ = "J" THEN
    GOSUB blanco
    LOCATE 3, 1: PRINT STRING$(80, " ")
    einde% = 1
    IF gewijzigd% = 1 THEN GOTO save
    RUN
END IF
RESUME NEXT

'**************************** FOUTAFHANDELING ***********************************
'******************************************************************************


'******************************************************************************
'**************************** VERNIEUWEN **************************************

refresh:
    scherm.wissen
    scherm
    cursor% = 2
    rij% = 1
    tempregel% = 3
    startregel% = 3
    eindregel% = 22
    GOSUB weergeven: GOTO top
RETURN

'**************************** VERNIEUWEN **************************************
'******************************************************************************


'******************************************************************************
'******************************************************************************
'******************************************************************************
'******************************************************************************
'******************************************************************************

SUB een.lijn (x%, Y%, max.y%, regel$)

DIM letter$(max.y%)
begin.y% = Y%
LOCATE x%, Y%:
COLOR 15, 1
t = 0
FOR i% = 1 TO max.y%
        IF MID$(regel$, i%, 1) <> "" THEN
                LOCATE x%, Y% + i% - 1: COLOR 15: PRINT MID$(regel$, i%, 1): COLOR 15
                t = t + 1
        ELSE
                LOCATE x%, Y% + i% - 1: COLOR 15: PRINT "_": COLOR 15
        END IF

         
NEXT i%
max.y% = max.y% + Y%
Y% = Y% + t

k$ = ""

DO

k$ = INKEY$

IF NOT Y% >= max.y% THEN
        IF MID$(regel$, Y% - begin.y% + 1, 1) <> "" THEN
                LOCATE x%, Y%: COLOR 15 + 16: PRINT MID$(regel$, Y% - begin.y% + 1, 1): COLOR 15
        ELSE
                LOCATE x%, Y%: COLOR 15 + 16: PRINT "_": COLOR 15
        END IF
END IF

SELECT CASE k$
    CASE CHR$(13)
        IF regel$ <> "" THEN
            l% = LEN(regel$)
            cons% = 0
            FOR con% = 1 TO l%
                e$ = MID$(regel$, con%, 1)
                IF e$ = " " THEN
                    cons% = cons% + 1
                END IF
            NEXT con%
            IF NOT cons% = l% THEN
                EXIT DO
            ELSE regel$ = ""
                EXIT DO
            END IF
        END IF
    CASE CHR$(27)
        regel$ = ""
        EXIT SUB
    CASE CHR$(8)
        IF NOT Y% = begin.y% THEN
                IF MID$(regel$, Y% - begin.y% + 1, 1) <> "" THEN
                        LOCATE x%, Y%: COLOR 15: PRINT MID$(regel$, Y% - begin.y% + 1, 1)
                ELSE
                        LOCATE x%, Y%: COLOR 15: PRINT "_"
                END IF
                LOCATE x%, Y% - 1: COLOR 15 + 16: PRINT "_": COLOR 15
                Y% = Y% - 1
                l% = LEN(regel$)
                regel$ = LEFT$(regel$, l% - 1)
        END IF
    CASE CHR$(0) + CHR$(75) 'Links
        IF NOT Y% = begin.y% THEN
                IF MID$(regel$, Y% - begin.y% + 1, 1) <> "" THEN
                        LOCATE x%, Y%: COLOR 15: PRINT MID$(regel$, Y% - begin.y% + 1, 1)
                ELSE
                        LOCATE x%, Y%: COLOR 15: PRINT "_"
                END IF
                Y% = Y% - 1
        END IF
                
    CASE CHR$(0) + CHR$(77) 'Rechts
        IF NOT Y% >= max.y% THEN
                IF MID$(regel$, Y% - begin.y% + 1, 1) <> "" THEN
                        LOCATE x%, Y%: COLOR 15: PRINT MID$(regel$, Y% - begin.y% + 1, 1)
                ELSE
                        LOCATE x%, Y%: COLOR 15: PRINT "_"
                END IF
                Y% = Y% + 1
        END IF
    CASE ELSE
        IF k$ <> "" AND LEN(k$) = 1 THEN
            IF NOT Y% = max.y% THEN
                regel$ = regel$ + k$
                LOCATE x%, Y%: PRINT k$
                Y% = Y% + 1
            END IF
        END IF
END SELECT
LOOP


END SUB

SUB menuline
LOCATE 1, 1: COLOR 4, 7: PRINT STRING$(80, " ")
LOCATE 1, 1: COLOR 4, 7: PRINT "  F3-Save As  F4-Open  F5-Refesh   F6-Select  Shift.F6-Find F9-print  F10-Quit  "

COLOR 15, 1
END SUB

SUB menuline.change
LOCATE 1, 1: COLOR 4, 7: PRINT STRING$(80, " ")
LOCATE 1, 1: COLOR 4, 7: PRINT " Enter - Change    DownArrow - Next     Esc - Cancel"
COLOR 15, 1
END SUB

SUB menuline.find
LOCATE 1, 1: COLOR 4, 7: PRINT STRING$(80, " ")
LOCATE 1, 1: COLOR 4, 7: PRINT " DownArrow - Next   UpArrow - Previous  Esc - Cancel"
COLOR 15, 1
END SUB

SUB menuline.open (sort$, openexe%, getdirexe%)
IF sort$ = "" THEN sort2$ = "Name" ELSE sort2$ = "Date"
COLOR 15, 1
LOCATE 23, 1: COLOR 4, 7: PRINT " F1 - Copy  *  F2 - Nieuw  *  F3 - Sort by " + sort2$ + "  *  Del - Delete  *  F9 - Print "
IF openexe% = 0 OR getdirexe% = 0 THEN LOCATE 23, 1: COLOR 8, 7: PRINT "(F1 - Copy)"
COLOR 15, 1

END SUB

SUB menuline.select
LOCATE 1, 1: COLOR 0, 7: PRINT " F1 - Copy      F2 - Cut        F3 - Delete     F9 - Print     ESC - Cancel     ";

END SUB

SUB scherm
CLS
SCREEN 0
FOR i% = 2 TO 25
    LOCATE i%, 1: COLOR , 0: PRINT STRING$(80, " ")
NEXT i%
FOR i% = 2 TO 22
    LOCATE i%, 1: COLOR , 1: PRINT STRING$(80, " ")
NEXT i%

LOCATE 1, 1: COLOR 4, 7: PRINT "  F3-Save As  F4-Open  F5-Refesh  F6-Select  Shift.F6-Find  F9-print  F10-Quit  "
LOCATE 23, 1: COLOR , 3: PRINT STRING$(80, " ")
LOCATE 23, 2: COLOR 0, 3: PRINT "line:             file:                            "
COLOR 15, 1
END SUB

SUB scherm.wissen

FOR i% = 2 TO 22
    LOCATE i%, 1: COLOR , 1: PRINT STRING$(80, " ")
NEXT i%

END SUB
