fb:porticula NoPaste
MuhEdit 0.8
Uploader: | The_Muh |
Datum/Zeit: | 19.07.2008 09:22:15 |
/'MuhEdit, version 0.8
programming and Idea by The_Muh
Thanks to: MisterD, ThePuppetMaster for little pieces of code
and Michael Tyca for Testing
licence:
Creative Commons:
by-nc-sa'/
'subs und funktionen (declare):
declare sub laden()
declare sub speichern()
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
REDIM tzeile(1) AS STRING
'Makros:
#macro blubb(array)
dim key as string
dim ausgleich as integer
c = 0
do
cls :
locate 1, 1 : PRINT "MuhEdit Directory"
locate 2, 1 : Print String(50, asc("_"))
text(5)
ausgleich = 0
if A > 0 then
for sh as integer = 0 to ubound(array) 'text anzeigen...
if SH + A <= ubound(array) then
if len(array(sh+A)) = 0 then
ausgleich += 1
else
locate sh+3 - ausgleich, 1
print sh &") /"& array(sh+A)
end if
else
exit for
end if
next sh
else
for sh as integer = 0 to ubound(array)
if len(array(sh)) = 0 then
ausgleich += 1
else
locate sh+3 - ausgleich, 1
print sh &") /"& array(sh)
end if
next sh
end if
locate hoehe-1,1 : Print "Number: "& c
do : sleep 1 : key = inkey : loop until key <> ""
select case key
case chr(255,73)
if A > 0 then
A -= 1
end if
case chr(255,83)
a += 1
end select
if asc(key) >= 48 and asc(key) <= 57 then
c = c * 10 + (asc(key) - 48)
elseif asc(key) = 8 then
c = cint(C / 10)
elseif asc(key) = 13 then
exit do
end if
loop
#endmacro
'subs und funktionen:
sub angleichen()
if ubound(tzeile) < zeile + A then
redim preserve tzeile(zeile + A) as string
end if
end sub
sub anzeige(anzeigetext() as string, X as integer,Y as integer)
cls
text(1)
if X >= 0 then
for sh as integer = 3 to (hoehe -3) '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 -3)
locate sh, 1
print mid(anzeigetext(sh),Y +1,breite)
next sh
end if
end sub
function directory() as string
dim dirs as string
DIM AS STRING dirname()
dim as integer i = 1
dim as integer c
Locate 4,1
'print "0) \.."
redim dirname(1)
dirname(0) = ".."
dirname(1) = DIR("*", &H10) ' das erste verzeichnis
do ' alle anderen =)
i +=1
redim preserve dirname(i)
dirname(i) = DIR("",&H10)
LOOP WHILE LEN(dirname(i)) ' solange noch ein nicht gelistetes Verzeichnis existiert
if len(dirname(1)) >= 1 then
do
text(5) 'linie
blubb(dirname)
if c > ubound(dirname) then continue do
'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 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
zeichenkette = left(zeichenkette, spalte-1) + right(zeichenkette,L -(spalte))
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
tzeile(zeile+A) = left(tzeile(zeile+A),spalte-1) + right(tzeile(zeile+A),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
function file() as string
#macro datei (endung)
filename(i) = DIR("*." & endung,0) 'die erste datei
do ' alle anderen =)
i +=1
redim preserve filename(i)
filename(i) = DIR("")
LOOP WHILE LEN(filename(i)) ' solange noch ein nicht gelistetes Verzeichnis existiert
#endmacro
cls
dim files as string
dim filename() as string
dim as integer i = 0
dim as integer c
locate 1, 1 : PRINT "MuhEdit Filechooser";
locate 2, 1 : Print String(50, asc("_"))
locate 3,1
redim filename(1)
datei("txt"):datei("*ml"):datei("bas")
text(5)
if len(filename(0)) >= 1 then
do
text(5) 'linie
blubb(filename)
if c > ubound(filename) then continue do
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
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
locate 3,1:print "Filename: "& seite;
locate 4,1:print "Lines: "& zeilen;
locate 5,1:print "Letters: "& zeichen;
locate 6,1:print "Filesize: "& filesize & "Bytes";
getkey
end sub
sub laden()
dim files 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 speichern()
dim x as integer
dim max as integer
for i as integer = 1 to ubound(tzeile)
if len(ltrim(tzeile(i))) >= 1 then
max = i
end if
next
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 max
PRINT #1, rtrim(tzeile(x)) 'ungetestet!!!!!!
next
CLOSE #1
text(3) 'accepted
getkey
end sub
sub text(ByVal Maeh As Integer)
select case maeh
case 1:
locate 1, 1 : PRINT A+1 &"|Change Directory = F4 / Save = F3 / Quit = ESC ":
locate 2, 1 : Print String(breite +1, asc("_"));
Locate (hoehe - 2),1 : Print String(breite +1, asc("_"));
Locate (hoehe - 1),1 : Print (hoehe -3) +A &"|File: "& seite &" | Open another file = F2";
case 2:
locate (hoehe - 1), 1 : Print String(breite+1, asc(" "));
case 3:
locate (hoehe - 1), 1 : Print String(breite+1, 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 7:
locate 1, 1 : PRINT "MuhEdit Fileinfo" ;
locate 2, 1 : Print String(breite, asc("_"));
Locate (hoehe - 2),1 : Print String(breite, asc("_"));
Locate (hoehe - 1),1 : Print String(breite, asc(" "));
case else
exit sub
end select
end sub
'------------------------hauptprogramm----------------------'
screenres breite*8, hoehe * 8
COLOR 0, 15
CLS
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)
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 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 then
b += 1
end if
case 107: 'das X oben
exit do
case 63: 'F5, hohe und breite
CLS
text(1)
locate 3,1 : print "The width must be 50 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 < 50 then breite = 50
if hoehe < 20 then hoehe = 20
screenres breite *8, hoehe * 8
COLOR 0, 15
case 64: 'f5 (dateiinfo)
info()
case 62: 'F4 (verzeichnis wechseln)
dirs = directory()
chdir (dirs)
text(1)
case 61: 'seite speichern(F3)
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
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) to zeile + a step -1
if i = ubound(tzeile) then redim preserve tzeile(i+1)
tzeile(i+1) = tzeile(i)
next
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:
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 = breite 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(breite, asc("_"));
text(5)
Locate (hoehe - 1),1
Print "Programming and Idea: The_Muh";
getkey
end
'---------------------------------------------------------------
'bis 0.9:
'- liste der bestehenden .txt dateien beim speichern dialog
'- Umschalter für Shell, min. unter Windows
'- Fertigstellung und bugfreiheit aller, für Textbearbeitung notwendiger features
'- falls umsetzbar: Zeilennummern ein/ausblenden, anzeige für aktuelle spalten-postion
'- Copy und paste innerhalb einer MuhEdit-'sitzung'
'minimun-todo bis 1.0:
'Funktionierende Umlaute und sonderzeichen unter Linux
'Danach:
'eventuell mehrere Builds um auch globales Copy'n'Paste zu unterstützen.
'---------------------------------------------------------------