fb:porticula NoPaste
MuhEdit 0.7
Uploader: | The_Muh |
Datum/Zeit: | 09.07.2008 16:34:03 |
''''''''''''''''''''''''/
'MuhEdit, programming and Idea by The_Muh
'Thanks to: MisterD and ThePuppetMaster
'Licence:
'Creative Commons:
'by-nc-sa
''''''''''''''''''''''''/
'version 0.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 curs()
declare sub text(ByVal Maeh 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
breite = 50
hoehe = 50
einf = 0
REDIM tzeile(50) AS STRING
'subs und funktionen:
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 = 0
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
'locate x, y+spalte,1
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
'print "A"
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(0 to 50)
dim as integer i = 1
dim as integer c
Locate 4,1
print "0) \.."
dirname(1) = DIR("*", &H10) ' das erste verzeichnis
do ' alle anderen =)
print i & ") \" & dirname(i)
i +=1
dirname(i) = DIR("")
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 =)
print i & ") \" & filename(i)
i +=1
filename(i) = DIR("")
LOOP WHILE LEN(filename(i)) ' solange noch ein nicht gelistetes Verzeichnis existiert
Locate (hoehe - 2), 1 : Print String(50, asc("_"))
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 = 1 to UBound(TZeile)
PRINT #1, rtrim(tzeile(x)) 'ungetestet!!!!!!
next
CLOSE #1
text(3) 'accepted
getkey
return seite
end function
sub laden()
dim seite as string
dim as integer i
dim as integer X
seite = file()
For X = 1 to 50
tzeile(X) = ""
Next
OPEN seite FOR INPUT AS #1
while not EOF(1)
i += 1
REDIM Preserve tzeile(1) AS STRING
if i >= 1000 then exit while
line INPUT #1, tzeile(i)
wend
CLOSE #1
cls
end sub
sub angleichen()
if ubound(tzeile) > hoehe then
redim preserve tzeile(zeile) as string
end if
end sub
sub Text(ByVal Maeh As Integer)
select case maeh
case 1:
locate 1, 1 : PRINT "MuhEdit / 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 "File: "& seite &" | Open another file = F2";
case 2:
locate (hoehe - 1), 1 : Print String(50, asc(" "));
case 3:
locate (hoehe - 1), 1 : Print String(50, asc(" "));
Locate (hoehe - 1), 1 : Print "Accepted";
locate 3,1
case 4:
locate (hoehe - 1), 1 : Print String(50, asc(" "));
Locate (hoehe - 1), 1 : Print "False";
locate 3,1
case 5:
Locate (hoehe - 2),1 : Print String(50, asc("_")):
case 6:
locate 1, 1 : PRINT "MuhEdit Saver" ;
locate 2, 1 : Print String(50, asc("_"));
Locate (hoehe - 2),1 : Print String(50, asc("_"));
case else
exit sub
end select
end sub
sub curs()
cls
text(1)
for sh as integer = 3 to 47 'text anzeigen...
locate sh, 1
print tzeile(sh)
next sh
DRAW STRING ((spalte-1)*8 , (zeile-1)*8), "_", 'Cursor anzeigen
end sub
'hauptprogramm:
dirs = curdir
screenres 400,400
COLOR 0, 15
CLS
text(1)
locate 3, 0
DO
L = len(tzeile(zeile))
if L < spalte then
for i = L to spalte - L -1
tzeile(zeile) += " "
next i
end if
angleichen()
curs()
'auf eingabe warten:
do : sleep 1
getmouse mspalte, mzeile,,buttons
mzeile = mzeile / 8
mspalte = mspalte / 8
if buttons >= 1 then
zeile = mzeile
spalte = mspalte
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
zeile = (hoehe - 3)
end if
case 80: 'unten
if zeile < (hoehe - 3) then
zeile += 1
else
zeile = 3
end if
case 75: 'links
if spalte>1 then 'nicht am zeilenanfang
L = len(tzeile(zeile))
if L < spalte then
'print chr(32)
end if
spalte-=1
else 'am zeilenanfang
if zeile > 3 then
zeile -= 1
spalte = 50
else
zeile = (hoehe - 3)
spalte = 50
end if
end if
case 77: 'rechts
if spalte < 50 then
tzeile(zeile) += chr(32)
spalte += 1
elseif spalte = 50 and zeile < (hoehe - 3) then
zeile += 1
spalte = 1
else
zeile = 3
spalte = 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
end select
'Zweiter case-block
if ascL <> 255 then
select case ascL
case 8: 'backspace
if spalte>1 then 'nicht am zeilenanfang
spalte-=1
locate zeile,spalte
L = len(tzeile(zeile))
if L >= spalte then
rest = right(tzeile(zeile), (L - spalte))
MID(tzeile(zeile), spalte, len(rest)) = rest
tzeile(zeile)=left(tzeile(zeile),len(tzeile(zeile))-1)
else
tzeile(zeile)=left(tzeile(zeile),len(tzeile(zeile))-1)
end if
else 'am zeilenanfang
if zeile > 3 then
zeile -= 1
spalte = 50
if L >= spalte then
rest = right(tzeile(zeile), (L - spalte))
MID(tzeile(zeile), spalte, len(rest)) = rest
tzeile(zeile)=left(tzeile(zeile),len(tzeile(zeile))-1)
else
tzeile(zeile)=left(tzeile(zeile),len(tzeile(zeile))-1)
end if
end if
end if
case 13: 'enter
if zeile > 46 then
zeile = 3
spalte = 1
else
spalte = 1
zeile += 1
end if
case 127:
if L > spalte then
rest = right(tzeile(zeile), (L - spalte + 1)) 'alles nach dem zu löschendem zeichen speichern
MID(tzeile(zeile), spalte + 1, len(rest)) = rest 'einfügen, das zu löschende
tzeile(zeile)=left(tzeile(zeile),len(tzeile(zeile))-1) 'löscht das überschüßige zeichen
end if
case 27: 'escape
exit do
case else:
Print d;
if ascL = 9 then
if spalte <= 40 then
spalte += 10
else
zeile += 1
spalte = 1
end if
end if
if spalte >= 50 then
spalte = 1
zeile+=1
if zeile>(hoehe - 3) then zeile=3
end if
L = len(tzeile(zeile))
if L >= spalte then
if einf = 0 then
MID(tzeile(zeile), spalte, 1) = d
else
tzeile(zeile) = left(tzeile(zeile), spalte -1) + d + right(tzeile(zeile), (L - spalte +1) )
end if
else
tzeile(zeile) = tzeile(zeile) + d
end if
spalte+=1
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
'---------------------------------------------------------------
'todo (bis 1.0.0.*):
'mehr als 50 zeilen (0%)
'mehr als 50 spalten (0%)
'Funktionierende Umlaute und sonderzeichen unter Linux
'---------------------------------------------------------------