Buchempfehlung
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Umfassend, aber leicht verständlich führt dieses Buch in die Programmierung von ATMEL AVR Mikrocontrollern ein. [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.7.5.7

Uploader:MitgliedThe_Muh
Datum/Zeit:17.07.2008 22:14:14

''''''''''''''''''''''''/
'MuhEdit, programming and Idea by The_Muh
'Thanks to: MisterD and ThePuppetMaster
'licence:
'Creative Commons:
'by-nc-sa
''''''''''''''''''''''''/
'version 0.7.5.7
'subs und funktionen (declare):
declare sub laden()
declare function speichern() as string
declare function directory() as string
declare function file() as string
declare sub text(ByVal Maeh As Integer)
declare sub anzeige(anzeigetext() as string, X as integer, Y as integer)
declare function eingabe(ByVal frage As String ,vorgabe As String, X as integer,Y as integer) as string
'Variablen:
dim shared as integer hoehe, breite
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 einf as integer
dim dirs as string
dim rest as string
dim shared a as integer
dim b as integer

breite = 50
hoehe = 50
einf = 0
A = 0
B = 0
REDIM tzeile(1) AS STRING

'subs und funktionen:
sub anzeige(anzeigetext() as string, X as integer,Y as integer)
    cls
    text(1)
    if X >= 0 then
        for sh as integer = 3 to 47     '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 47
            locate sh, 1
            print mid(anzeigetext(sh),Y +1,breite)
        next sh
    end if
end sub

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, y
       print frage & " " & Zeichenkette
       spalte = len(zeichenkette)
       y = len(frage)
    do
        cls
        text(6)
        locate x : print frage
        locate x, len(frage) + 1: print Zeichenkette
        DRAW STRING ((y + spalte -1)*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
                rest = right(zeichenkette, (L - spalte))
                MID(zeichenkette, spalte, len(rest)) = rest
                zeichenkette=left(zeichenkette,len(zeichenkette)-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
                rest = right(zeichenkette, (L - spalte))
                MID(zeichenkette, spalte, len(rest)) = rest
                zeichenkette=left(zeichenkette,len(zeichenkette)-1)
            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

function directory() as string
    dim dirs as string
    cls
    locate 1, 1 : PRINT "MuhEdit Directory"
    locate 2, 1 : Print String(50, asc("_"))
    DIM AS STRING dirname()
    dim as integer i = 1
    dim as integer c
    Locate 4,1
    print "0) \.."

    redim dirname(1)
    dirname(1) = DIR("*", &H10) ' das erste verzeichnis
    do                          ' alle anderen =)
        if dirname(i) <> "."  then
            print i & ") \" & dirname(i)
        end if
        i +=1
        redim preserve dirname(i)
        dirname(i) = DIR("",&H10)
    LOOP WHILE LEN(dirname(i)) ' solange noch ein nicht gelistetes Verzeichnis existiert
    text(5)

    if len(dirname(1)) >= 1 then
        do
            text(5) 'linie
            Locate (hoehe - 1), 1 : input "Number: ",c
        if len(dirname(c)) >=1 then
            text(3) 'accepted
            dirs = dirname(c)
            exit do
        elseif c = 0 then
            CHDIR ".."
            exit do
        else
            text(4) 'false'
            getkey
        end if
        loop
    else
         text(5) 'linie
         locate (hoehe - 1), 1 : Print "No Directorys";
    end if
    getkey
    return dirs
end function

function file() as string
    cls
    dim files as string
    dim filename(1 to 50) as string
    dim as integer i = 1
    dim as integer c
    locate 1, 1 : PRINT "MuhEdit Filechooser";
    locate 2, 1 : Print String(50, asc("_"))
    locate 3,1
    filename(1) = DIR("*.txt",0) ' das erste verzeichnis
    do                          ' alle anderen =)
        if filename(i) <> "."  then
            print i & ") \" & filename(i)
        end if
        i +=1
        if i = 46 then exit do
        filename(i) = DIR("")
    LOOP WHILE LEN(filename(i)) ' solange noch ein nicht gelistetes Verzeichnis existiert

    text(5)
    if len(filename(1)) >= 1 then
        do
            text(5) 'linie
            Locate (hoehe - 1), 1 : input "Number: ",c
        if len(filename(c)) >=1 then
            locate (hoehe - 1), 1 : Print String(50, asc(" "));
            text(3) 'accepted
            files = filename(c)
            exit do
        else
            text(4) 'false
            getkey
        end if
        loop
    else
         text(5) 'linie
         locate (hoehe - 1), 1 : Print "No files";
    end if
    getkey
    return files
end function

function speichern() as string
    dim seite as string
    dim x as integer
    cls
    text 6 'linie
    if len(seite) <> 0 then
        seite = eingabe("Filename:",seite,hoehe-1,1)
    else
        seite = eingabe("Filename:","example.txt",hoehe-1,1)
    end if

    OPEN seite FOR OUTPUT AS #1
    For x = 3 to UBound(TZeile)
        PRINT #1, rtrim(tzeile(x)) 'ungetestet!!!!!!
    next
    CLOSE #1
    text(3) 'accepted
    getkey
    return seite
end function

sub laden()
    dim files as string
    dim as integer i = 2
    dim as integer X
    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 angleichen()
    if ubound(tzeile) < zeile + A then
        redim preserve tzeile(zeile + A) as string
    end if
end sub


sub Text(ByVal Maeh As Integer)
    select case maeh
    case 1:
        locate 1, 1 : PRINT A &"|Change Directory = F4 / Save = F3 / Quit = ESC  ":
        locate 2, 1 : Print String(50, asc("_"));
        Locate (hoehe - 2),1 : Print String(50, asc("_"));
        Locate (hoehe - 1),1 : Print 47 +A &"|File: "& seite &" | Open another file = F2";
    case 2:
        locate (hoehe - 1), 1 : Print String(breite, asc(" "));
    case 3:
        locate (hoehe - 1), 1 : Print String(breite, asc(" "));
        Locate (hoehe - 1), 1 : Print "Accepted";
        locate 3,1
    case 4:
        locate (hoehe - 1), 1 : Print String(breite, asc(" "));
        Locate (hoehe - 1), 1 : Print "False";
        locate 3,1
    case 5:
        Locate (hoehe - 2),1 : Print String(breite, asc("_")):
    case 6:
        locate 1, 1           : PRINT "MuhEdit Saver" ;
        locate 2, 1           : Print String(breite, asc("_"));
        Locate (hoehe - 2),1 : Print String(breite, asc("_"));
    case else
        exit sub
    end select
end sub


'-------------------------------------------------'
'------------------------hauptprogramm------------'
dirs = curdir
screenres 400,400
COLOR 0, 15
CLS
text(1)
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)
    DRAW STRING ((spalte-1)*8 , (zeile -1)*8), "_",  'Cursor anzeigen
    'auf eingabe warten:
    do : sleep 1
        getmouse mspalte, mzeile,,buttons
        mzeile = mzeile / 8
        if buttons >= 1 then
                zeile = mzeile
                spalte = mspalte / 8
        end if
        d=inkey:loop until d<>"" or (buttons >= 1 and mzeile <= (hoehe - 3) and mzeile > 3 )
    locate zeile ,spalte

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

    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 - 3) then
            zeile += 1
        else
            A += 1
        end if
    case 75:                         'links
        if spalte > 1 and spalte then                        'nicht am zeilenanfang
            spalte-=1
        else                                'am zeilenanfang
            if zeile > 3 and zeile < (hoehe - 3) then
                if B = 0 then
                    zeile -= 1
                    spalte = 1
                else
                    B -= 1
                end if
            else
                if A > 0 then A -= 1
            end if
        end if
    case 77:                           'rechts
        if spalte < breite then
            tzeile(zeile +A) += chr(32)
            spalte += 1
        elseif spalte = breite and zeile <= (hoehe - 3) then
            b += 1
        end if
    case 107:                        'das X oben
        exit do
    case 62:                            'F4 (verzeichnis wechseln)
        dirs = directory()
        chdir (dirs)
        text(1)
    case 61:                          'seite speichern(F3)
        seite = speichern()
        text(1)
    case 60:                          'Laden (F2)
        laden()
        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

    'Zweiter case-block
    if ascL <> 255 then
    select case ascL
        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
            else
                if A > 0 then A -= 1
            end if
        end if
    case 13:                              'enter
        if L > spalte + B then
            redim preserve tzeile(Zeile+A+1)
                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 - 3) then
            zeile += 1
            spalte = 1
        else
            spalte = 1
            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 19:
        seite = speichern()
        text(1)
    case 27:                              'escape
        exit do
    case else:
        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) = mid(tzeile(zeile +A),1,(spalte +B)) + d + mid(tzeile(zeile +A),spalte + b + 1,(L -spalte +1))
            end if
        else
            tzeile(zeile +A) = tzeile(zeile +A) + d
        end if

        if spalte = 50 then
            b += 1
        else
            spalte += 1
        end if
    end select
    end if
loop

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

text(5)
Locate (hoehe - 1),1
Print "Programming and Idea:                   The_Muh";
getkey
end
'---------------------------------------------------------------
'minimun-todo (bis 1.0 ):
'Funktionierende Umlaute und sonderzeichen unter Linux
'---------------------------------------------------------------