Buchempfehlung
MySQL kurz & gut
MySQL kurz & gut
Das preiswerte Taschen- buch stellt MySQL-rele- vante Inhalte systematisch und knapp dar, sodass es sich optimal zum Nach- schlagen beim Pro- grammieren eignet. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

fb:porticula NoPaste

Info
Info / Hilfe
Liste
Übersicht / Liste
Neu
Datei hochladen
Suche
Quellcode suchen
Download
Dateidownload

MuhEdit 0.9.6

Uploader:MitgliedThe_Muh
Datum/Zeit:05.08.2008 08:12:49

'       MuhEdit, version 0.9.6
'       Programming and idea by The_Muh.
'       Thanks to: MisterD, ThePuppetMaster for little pieces of code
'       and Michael Tyca for Testing.
'licence:
'       This program is free software; you can redistribute it and/or modify
'       it under the terms of the GNU General Public License as published by
'       the Free Software Foundation; either version 2 of the License, or
'       (at your option) any later version.
'
'       This program is distributed in the hope that it will be useful,
'       but WITHOUT ANY WARRANTY; without even the implied warranty of
'       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
'       GNU General Public License for more details.
'
'       You should have received a copy of the GNU General Public License
'       along with this program; if not, write to the Free Software
'       Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
'       MA 02110-1301, USA.
'subs und funktionen (declare):
declare sub search()
declare sub speichern()
declare sub laden(seite as string)
declare sub text(ByVal Maeh As Integer)
declare sub anzeige(anzeigetext() as string, X as integer, Y as integer)
declare function conv(key as string) as string
declare function directory(FL as integer) as string
declare function eingabe(ByVal frage As String ,vorgabe As String, X as integer,Y as integer) as string
'Variablen:
dim shared as integer hoehe = 50, breite = 55
dim d as string
dim as string Li, Re
dim as integer ascL, ascR
dim shared as string tZeile()
dim shared as string seite
dim shared as integer zeile=3, spalte=1
dim as integer mzeile, mspalte, buttons
dim i as integer
dim L as integer
Dim as integer einf = 0
dim dirs as string
dim rest as string
dim shared a as integer
dim shared b as integer

REDIM tzeile(1) AS STRING
'Makros:
#macro datei (array2,endung,flag)
    K = DIR("*." & endung,flag)
    do
        if len(k) then                      ' alle anderen =)
        redim preserve array2(i)
        array2(i) = K
        K = DIR("")
        i += 1
        end if
    LOOP until LEN(K) = 0' solange noch ein nicht gelistetes Verzeichnis existiert
#endmacro

#macro blubb(array)
dim key as string
c = 0
do
    cls
    locate 1, 1 : PRINT "MuhEdit Directory";
    if flag = &h10 then print " | Set Directory = ESC"
    locate 2, 1 : Print String(breite, asc("_"));
    locate 3, 1 : Print right(Curdir,50);
    locate hoehe,1 :Print "Switch between File / Directory = F1";
    text(5)

    for sh as integer = lbound(array) to hoehe-6        'text anzeigen...
        if SH + A <= ubound(array) then
                locate sh+4 ,1
        if sh = c then
                print "X "& sh + A &") /"& array(sh+A);
        else
                print "  "& sh + A &") /"& array(sh+A);
            end if
        else
            exit for
        end if
        if sh = 50 then exit for
    next sh

    do : sleep 1 : key = inkey : loop until key <> ""
    select case key
    case chr(255,59)
        if flag = &h10 then
            flag = &h00
        else
            flag = &h10
        end if
        exit do
    case chr(255,73):
        if A > 0 then
            A -= 1
        end if
    case chr(255,81)
        if c + a < ubound(array) then A += 1
    case chr(255,72)                      'oben
        if c > 0 then c -= 1
        if A > 0 and c = 0 then a -= 1
    case chr(255,80)                      'unten
        if c < hoehe -6 and c < ubound(array) then
            c += 1
        else
            if c + a < ubound(array) then A += 1
        end if
    case chr(27)
        if flag = &h10 then weiter = 0
        exit do
    case chr(13)
        if flag = &h10 then
            if c = 0 then
                dirs = ".."
            else
                dirs = dirname(c)
            end if
            chdir(dirs)
        else
            seite = filename(c)
            weiter = 0
        end if
        exit do
    end select
loop
#endmacro

'subs und funktionen:

sub angleichen()
    if ubound(tzeile) < zeile + A then redim preserve tzeile(zeile + A) as string
end sub

sub anzeige(anzeigetext() as string, X as integer,Y as integer)
    if X >= 0 then
        for sh as integer = 3 to (hoehe - 2)        'text anzeigen...
            if SH + X <= ubound(anzeigetext) then
                locate sh, 1
                print mid(anzeigetext(sh+X),Y +1,breite)
            else
                exit for
            end if
        next sh
    else
        for sh as integer = 3 to (hoehe -2)
            locate sh, 1
            print mid(anzeigetext(sh),Y +1,breite)
        next sh
    end if
    'text(1)
end sub

function conv(key as string) as string
    dim con as string
    dim ascl as integer
    ascL = asc(left(key,1))
    select case ascL
    'case 167 : con = chr(245) '§
    case 228 : con = chr(132)
    case 196 : con = chr(142)
    case 246 : con = chr(148)
    case 214 : con = chr(153)
    case 252 : con = chr(129)
    case 220 : con = chr(154)
    case 223 : con = chr(225)
    case else: con = chr(ascl)
    end select
    return con
end function

sub counter()
    dim code as integer
    dim blank as integer
    dim i as integer
    for i = 1 to ubound(tzeile)-1
        if len(ltrim(tzeile(i))) = 0 or len(ltrim(tzeile(i),chr(9))) = 0 then blank += 1
        if len(ltrim(tzeile(i),chr(9))) <> 0 and len(ltrim(tzeile(i))) <> 0 then code += 1
    next i

    locate 8,1
    print "Textlines:       "& code' - blank
    print "Blanklines:      "& blank
    print ""
    print "Gesamt:          "& code + blank
end sub

function directory(FL as integer) as string
    dim dirs as string
    DIM AS STRING dirname()
    dim filename() as string
    dim as integer i = 1
    dim c as integer
    dim K as string
    dim key as string
    dim flag as integer
    dim weiter as integer
    weiter = 1
    Locate 4,1
    flag = fl

    do
    if flag = &h10 then
        i = 1
        redim dirname(1)
        dirname(0) = ".."
        datei(dirname,"*",flag)
    else
        i = 0
        redim filename(1)
        datei(filename,"txt",&h00)
        datei(filename,"*ml",&h00)
        datei(filename,"bas",&h00)
    end if

    text(5) 'linie
    if flag = &h10 then
        blubb(dirname)
        if c > ubound(dirname) then continue do
    else
        blubb(filename)
        if c > ubound(filename) then continue do
    end if

    loop until weiter = 0
    if flag = &h00 then laden(seite)
    if flag = &h10 then
        text 2
        locate hoehe,1 : print "Accepted";
        getkey
    end if
    return dirs
end function

function eingabe(ByVal frage As String ,vorgabe As String, X as integer,Y as integer) as string
    dim zeichen as string
    dim zeichenkette as string
    dim L as integer
    dim Li as string
    dim Re as string
    dim ascR as integer
    dim ascL as integer
    dim einf as integer
    dim spalte as integer
    dim rest as string
    einf = 1
    zeichenkette = vorgabe
    locate x, 1
    print frage & Zeichenkette;
    spalte = len(zeichenkette) +1
    y = len(frage) +1
    do
        text(2)
        text(6)
        locate x,1: print frage;
        locate x,len(frage) + 1: print Zeichenkette;
        DRAW STRING ((y + spalte-2)*8 , (x-1)*8), "_"  'Cursor anzeigen
        do : sleep 1 : zeichen = inkey : loop while zeichen = ""

        Li = mid(zeichen, 1,1)
        Re = mid(zeichen, 2.1)
        ascL = asc(Li)
        ascR = asc(Re)

        L = len(zeichenkette)
        select case ascR
        case 82                                'testen ob "einf" gedrückt wurde
            if einf = 1 then                             'der umschalter
                einf = 0
            else
                einf = 1
            end if
        case 75:                         'links
            if spalte > 1 then spalte -= 1
        case 77:                           'rechts
            if spalte < L then spalte += 1
        end select

        if ascL <> 255 then
        select case ascL
        case 8                                            'backspace
            if L > spalte then
                zeichenkette = left(zeichenkette,spalte-2) + right(zeichenkette,L -(spalte-1))
            else
                zeichenkette=left(zeichenkette,len(zeichenkette)-1)
            end if

            if spalte <> 1 then spalte -= 1
        case 13                                        'enter
            return zeichenkette
            locate 3,1
            exit function
        case 27
            return vorgabe
            locate 3,1
            exit function
        case 127                                        'entf
            if L >= spalte then
                zeichenkette = left(zeichenkette,spalte-1) + right(zeichenkette,L -(spalte))
            end if
        case else
            if L >= spalte then
                if einf = 0 then
                    MID(zeichenkette, spalte, 1) = zeichen
                else
                    zeichenkette = left(zeichenkette, spalte-1) + zeichen + right(zeichenkette, (L - spalte +1) )
                end if
            else
                zeichenkette = zeichenkette + zeichen
            end if
            spalte += 1
        end select
        end if
    loop until zeichen = chr(13)
end function

sub info()
    cls
    text(1)
    dim array as integer
    dim zeilen as integer
    dim zeichen as integer
    dim filesize as integer

    OPEN seite FOR BINARY AS #1
        filesize = LOF(1)
    CLOSE #1


    array = ubound(tzeile)
    for i1 as integer = 1 to array
        if len(tzeile(i1)) > 0 then
            zeilen += 1
        end if
    next i1

    for i2 as integer = 1 to array
        zeichen += len(tzeile(i2))
    next
    filesize = filesize / 1024
    locate 3,1:print "Filename:        "& seite;
    locate 4,1:print "Letters:         "& zeichen;
    locate 5,1:print "Filesize:        "& filesize & " kB";
end sub

sub laden(seite as string)
    dim as integer i = 2
    'seite = file()

    redim tzeile(0) as string
    OPEN seite FOR INPUT AS #1
    while not EOF(1)
        i += 1
        REDIM Preserve tzeile(i) AS STRING
        line INPUT #1, tzeile(i)
    wend
    CLOSE #1
    cls
end sub

sub replace()
    cls
    dim keyword as string
    dim positionX(1 to 46) as integer
    dim positionY(1 to 46) as integer
    dim repl as string
    dim hit as integer

    locate 1,1 : print "Search";
    locate 2, 1 : Print String(breite , asc("_"));
        text 5
    keyword = eingabe("Keyword:","",hoehe,1)
    repl = eingabe("Replace with:","",hoehe,1)
    locate 3,1
    for i as integer = 1 to ubound(tzeile)
        hit = instr(tzeile(i),keyword)
        if hit > 0 then
            tzeile(i) = left(tzeile(i),hit-1) + repl + right(tzeile(i), len(tzeile(i)) - hit -len(keyword) +1 )
        end if
    next
end sub

sub search()
    cls
    dim as integer count = 1
    dim keyword as string
    dim positionX(1 to 46) as integer
    dim positionY(1 to 46) as integer
    dim hitnum as integer
    dim suchpos as integer
    dim as integer hit = 1
    locate 1,1 : print "Search";
    locate 2, 1 : Print String(breite , asc("_"));
    text 5
    keyword = eingabe("Keyword:","",hoehe,1)
    locate 3,1
    for i as integer = 1 to ubound(tzeile)
        suchpos = 0
        do
            hit = instr(suchpos+1,tzeile(i),keyword)
            if hit > 0 then
                if count < 46 then
                    print count & ") Hit in Line: "& i - 2 &" Row: "& hit
                    positionX(count) = i
                    positionY(count) = hit
                    count += 1
                else
                    print "Too much hits";
                end if
            end if
            suchpos = hit + len(keyword) -1
        loop until hit = 0
    next
    locate hoehe, 1
    if positionX(1) <> 0 then
        input "Jump to hit number: ", hitnum
        zeile = positionX(hitnum)
        spalte = positionY(hitnum)
    end if
end sub

sub speichern()
    cls
    dim x as integer
    dim as integer i = 3
    dim max as integer
    dim K as string
    for i as integer = 1 to ubound(tzeile)
        if len(ltrim(tzeile(i))) >= 1 then
            max = i
        end if
    next
    dim filename() as string
    redim filename(i)
    'datei("txt"):datei("*ml"):datei("bas")
    anzeige(filename(), 0, 0)

    text 6 'linie
    if len(seite) > 0 then
        seite = eingabe("Filename:",seite,hoehe,1)
    else
        seite = eingabe("Filename:","example.txt",hoehe,1)
    end if

    OPEN seite FOR OUTPUT AS #1
    For x = 3 to max
        PRINT #1, rtrim(tzeile(x))
    next
    CLOSE #1
    text(3) 'accepted
    getkey
end sub

sub text(ByVal Maeh As Integer)
    select case maeh
    case 1:
        locate 1, 1 : PRINT "Load = F2 / Save = F3 / Directory = F4 / Quit = ESC":
        locate 2, 1 : Print String(breite , asc("_"));
        Locate (hoehe-1),1 : Print String(breite , asc("_"));
        Locate (hoehe),1 : Print String(breite , asc(" "));
        Locate (hoehe),1 : Print "File: "& seite &" / Line: "& Zeile+A-2 &" / Row:"& spalte+b;
    case 2:
        locate (hoehe    ), 1 : Print String(breite, asc(" "));
    case 3:
        locate (hoehe), 1 : Print String(breite, asc(" "));
        Locate (hoehe), 1 : Print "Accepted";
        locate 3,1
    case 4:
        locate (hoehe), 1 : Print String(breite, asc(" "));
        Locate (hoehe), 1 : Print "False";
        locate 3,1
    case 5:
        Locate (hoehe-1),1 : Print String(breite, asc("_"));
    case 6:
        locate 1, 1           : PRINT "MuhEdit Saver" ;
        locate 2, 1           : Print String(breite, asc("_"));
        Locate (hoehe-1),1 : Print String(breite, asc("_"));
    case 7:
        locate 1, 1           : PRINT "MuhEdit Fileinfo";
        locate 2, 1           : Print String(breite, asc("_"));
        Locate (hoehe-1),1 : Print String(breite, asc("_"));
        Locate (hoehe),1 : Print String(breite, asc(" "));
    case else
        exit sub
    end select
end sub

'------------------Aufruf-flags auswerten------------------'
if command(1) = "-S" then
    hoehe = HIWORD(WIDTH)
    breite = LOWORD(WIDTH)

    if command(2) <> "" then
        seite = command(2)
        laden(seite)
    end if
    CLS
elseif command(1) <> "-S" then
    seite = command(1)
    laden(seite)
    screenres breite*8, hoehe * 8
    COLOR 0, 15
    CLS
end if
'------------------------hauptprogramm----------------------'
dirs = curdir
locate 3, 0
DO
    angleichen()
    L = len(tzeile(zeile + A))
    if L < spalte + B then
        for i = 1 to spalte + b
            tzeile(zeile + A) += " "
        next i
    end if
    anzeige(tzeile(), A, B)
    text 1
    locate zeile ,spalte,1
    DRAW STRING ((spalte-1)*8 , (zeile -1)*8), "_",  'Cursor anzeigen
    'auf eingabe warten:
    do : sleep 1
        d = inkey
        getmouse mspalte, mzeile,,buttons
        mzeile = mzeile / 8
        mspalte =  mspalte / 8
        if buttons = 1 and mzeile <= (hoehe - 2) and mzeile > 3 then
            zeile = mzeile
            spalte = mspalte
            d = ""
            exit do
        end if
    loop until d<>""
    locate zeile ,spalte,1
    if d = "" then continue do
    Re = mid(d, 2.1)
    ascR = asc(Re)
    if command(1) <> "-S" then D = conv(D)
    Li = mid(d, 1,1)
    ascL = asc(Li)

    SELECT CASE ascR
    case 72:                      'oben
        if zeile > 3 then
            zeile -= 1
        else
            if A > 0 then A -= 1
        end if
    case 80:                         'unten
        if zeile < (hoehe - 2) then
            zeile += 1
        else
            A += 1
        end if
    case 75:                         'links
        if spalte > 1 then                        'nicht am zeilenanfang
            spalte-=1
        else                                'am zeilenanfang
            if zeile > 3 and zeile < (hoehe - 2) then
                if B = 0 then
                    zeile -= 1
                    spalte = 1
                else
                    B -= 1
                end if
            elseif zeile = 3 or zeile = (hoehe-2) then
                if B <> 0 then
                    B -= 1
                elseif B = 0 then
                    if zeile = hoehe-2 then zeile -= 1
                    if A > 0 then A -= 1
                end if
            end if
        end if
    case 77:                           'rechts
        if spalte < breite then
            tzeile(zeile +A) += chr(32)
            spalte += 1
        elseif spalte = breite then
            b += 1
        end if
    case 107:                        'das X oben
        exit do
    case 63:                            'F5, hohe und breite
        if command(1) <> "-S" then
        CLS
        text(1)
        locate 3,1 : print "The width must be 55 or higher"
        locate 4,1 : print "The Heigth must be 20 or higher"
        locate 5,1 : Input "Heigth: ", Hoehe
        Locate 6,1 : Input "Width: ", Breite
        if breite < 55 then breite = 55
        if hoehe < 20 then hoehe = 20
        screenres breite *8, hoehe * 8
        if zeile > hoehe then
            A += zeile-hoehe+2
            zeile = 3
        end if
        if command(1) <> "-S" then COLOR 0, 15
        end if
    case 64:                        'f5 (dateiinfo)
        info()
        counter()
        getkey
    case 62:                            'F4 (verzeichnis wechseln)
        dirs = directory(&h10)
        text(1)
    case 61:                          'seite speichern(F3)
        speichern()
        text(1)
    case 60:                          'Laden (F2)
        dirs = directory(&h00)
        text(1)
    case 82:                            'einfügen
        if einf = 1 then
            einf = 0
        else
            einf = 1
        end if
    case 73:
        if A > 0 then
            A -= 1
        end if
    case 81
        a += 1
    end select

    if ascL <> 255 then ' Zweiter Case-Block:
    select case ascL
        case 6:
            search()
            if zeile > 46 then
                A = zeile - 46
                zeile -= A
            end if
        case 8:                               'backspace
        if spalte > 1 then                        'nicht am zeilenanfang
            if B = 0 then
                spalte-=1
            else
                b -= 1
            end if
            locate zeile,spalte
            L = len(tzeile(zeile +A))
            if L >= spalte+B then
                tzeile(zeile+A) = left(tzeile(zeile+A),B + spalte-1) + right(tzeile(zeile+A),L -(spalte+B))
            else
                tzeile(zeile +A)=left(tzeile(zeile +A),len(tzeile(zeile +A))-1)
            end if
        else                                    'am zeilenanfang
            if zeile > 3 then
                if L >= spalte+B then
                    tzeile(zeile+A) = left(tzeile(zeile+A),B + spalte-1) + right(tzeile(zeile+A),L -(spalte+B))
                else
                    tzeile(zeile +A)=left(tzeile(zeile +A),len(tzeile(zeile +A))-1)
                end if
                zeile -= 1
                spalte = len(rtrim(tzeile(zeile)))+1
            else
                if A > 0 then A -= 1
            end if
        end if
    case 13:                              'enter
        if L > (spalte + b) then
            for i as integer = ubound(tzeile) + 1 to (zeile + a +1) step -1
                if i >= ubound(tzeile) then redim preserve tzeile(i+1)
                if i <> 3 then tzeile(i+1) = tzeile(i)
            next i
            rest = right(tzeile(zeile +A), (L - (spalte + B))+1)
            tzeile(zeile+A) = left(tzeile(zeile+A), (Spalte +B) -1)
            tzeile(Zeile+A+1) = rest
        end if
        if zeile < (hoehe - 2) then
            zeile += 1
            spalte = 1
            B = 0
        else
            spalte = 1
            B = 0
            A += 1
        end if
    case 127:
        if L >= spalte then
            tzeile(zeile+A) = left(tzeile(zeile+A),B + spalte-1) + right(tzeile(zeile+A),L -(spalte+B))
        end if
    case 18:
        replace()
    case 19:
        speichern()
        text(1)
    case 27:                              'escape
        exit do
    case 32 to 127,9,245, 132,142,148,153,129,154,225
        if D = chr(9) then
            D = "    "
            if spalte <= breite -4 then
                spalte +=4
            else
                B += 4 - (breite - spalte)
            end if
        end if
        L = len(tzeile(zeile +A))
        if L >= spalte + B then
            if einf = 0 then
                MID(tzeile(zeile + A), spalte +B, 1) = d
            else
                tzeile(zeile +A) = left(tzeile(zeile +A), spalte +B-1) + d + right(tzeile(zeile +A), (L - spalte -B +1))
            end if
        else
            tzeile(zeile +A) = tzeile(zeile +A) + d
        end if

        if spalte = breite then
            b += 1
        else
            spalte += 1
        end if
    end select
    end if
    cls
loop

cls
locate 1, 1
PRINT "TextEditor by The_Muh | Press any key to quit   ";
locate 2, 1 : Print String(breite, asc("_"));

text(5)
Locate (hoehe),1
Print "Programming and Idea:                   The_Muh";
getkey
'color 15,0
cls
end
'---------------------------------------------------------------
'bis 1.0:
'- Fertigstellung und bugfreiheit aller, für Textbearbeitung notwendiger features
'Danach:
'eventuell mehrere Builds um auch globales Copy'n'Paste zu unterstützen.
'---------------------------------------------------------------