You are not logged in.

Dear visitor, welcome to Forum64. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

Schlowski

Trainee

  • "Schlowski" is male
  • "Schlowski" started this thread

Posts: 97

Date of registration: Apr 10th 2010

  • Send private message

member since 36 month member since 36 month

121

Saturday, May 22nd 2010, 5:09pm

Tja, da scheint es noch mehr Probleme unter Mono zu geben :(

Unter Windows ist ein VAL("&h80")=128, das geht wohl unter Mono nicht. Müsste ich also die Hex-Umwandlung anders angehen... (Kleine Randnotiz: ich mochte die &h80-Notation eh noch nie, die 0x080 aber auch nicht, die einzig wahre Form ist doch ein $80!)
Insgesamt ist das aber wohl ein größerer Angang, dem ich mich dann wohl mit mehr Aufmerksamkeit widmen müsste.

Als Testmöglichkeit, ob es denn wenigstens danach klappt, müsste man in der Tokenlist alle $xx durch ihre Dezimal-Pendants ersetzen. Aber der Fehler bei ASC() macht mir noch große Sorgen...

Für abraXxl hier der Source für die ShowOneLine-Routine, an der Stelle mit dem "cNr = Asc(Zeile.Substring(x, 1))" scheint's ihn unter Mono ja zu zerbröseln
:

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
   Private Sub ShowOneLine(ByVal myGraphic As System.Drawing.Graphics, ByVal Zeile As String, ByVal y As Integer, ByVal ShowSpace As Boolean)
      Dim lInQuote As Boolean
      Dim lRem As Boolean
      Dim lData As Boolean
      Dim fNrX As Integer
      Dim Keyword As String
      Dim lLineNo As Boolean
      Dim x As Integer
      Dim cNr As Integer
      Dim fNr As Integer
      Dim fNr2 As Integer
      Dim lCur As Boolean
      Dim Token As Integer
      Dim p1 As Integer
      Dim p2 As Integer
      Dim sProof As String

      If EditInfo.FontSize = 8 Then
         fNr = 1
      Else
         fNr = 0
      End If
      lInQuote = False
      lRem = False
      lData = False
      fNrX = -1
      sProof = ""
      If EditInfo.IsLabel Then
         If Zeile.Trim().Length() > 0 Then
            lLineNo = Zeile.Trim().Substring(Zeile.Trim().Length() - 1, 1) = ":"
         Else
            lLineNo = False
         End If
      Else
         lLineNo = True
         If ProofEnabled Then
            sProof = EditCalcProof(Zeile, ProofFunction)
         End If
      End If
      fNr2 = 0
      lCur = False
      For x = EditInfo.OffX To Zeile.Length() - 1
         If (x - EditInfo.OffX) < EditInfo.MaxX Then
            cNr = Asc(Zeile.Substring(x, 1))
            cNr = AsciiToCBM(cNr)
            If EditInfo.Inv Then
               If x = EditInfo.X + EditInfo.OffX And y = EditInfo.Y + EditInfo.OffY Then
                  If EditInfo.Insert Then
                     lCur = True
                  Else
                     If cNr > 127 Then
                        cNr = cNr - 128
                     Else
                        cNr = cNr + 128
                     End If
                  End If
               End If
            End If
            If EditIsInBlock(x, y) Then
               fNr2 = 5
            Else
               If x <= fNrX Then
                  fNr2 = 1
               Else
                  fNrX = -1
                  If lRem Then
                     fNr2 = 4
                  Else
                     If lInQuote Or ((cNr And 127) = 34) Then
                        fNr2 = 2
                     Else
                        ' (normal, keyword, string, number, comment, blockmode)
                        If lData Then
                           Keyword = ""
                           If (cNr And 127) = 58 Then
                              lData = False
                           End If
                        Else
                           Keyword = GetToken(Zeile.Substring(x))
                           Token = CheckToken(Keyword)
                        End If

                        If Keyword = "rem" Then
                           lRem = True
                           lLineNo = False
                        ElseIf Keyword = "data" Then
                           lLineNo = False
                           lData = True
                        ElseIf Keyword <> "" Then
                           If GetLineType(Token) <> 0 Then
                              lLineNo = True
                              p1 = Zeile.Substring(x).IndexOf("=")
                              If p1 > -1 Then
                                 p2 = Zeile.Substring(x).IndexOf(":")
                                 If p2 = -1 Then
                                    p2 = Zeile.Substring(x).Length()
                                 End If
                                 If p1 < p2 Then
                                    lLineNo = False
                                 End If
                              End If
                           Else
                              lLineNo = False
                           End If
                        Else
                           '                        If cNr = Asc("'") And EditInfo.IsLabel Then
                           If cNr = Asc("'") Then
                              lRem = True
                              lLineNo = False
                           End If
                        End If

                        If Keyword <> "" Then
                           fNrX = x + Keyword.Length() - 1
                           fNr2 = 1
                        Else
                           If EditInfo.IsLabel Then
                              If lLineNo Then
                                 If cNr = Asc(":") Then
                                    lLineNo = False
                                    fNr2 = 0
                                 Else
                                    fNr2 = 3
                                 End If
                              Else
                                 fNr2 = 0
                              End If
                           Else
                              If (cNr >= 48 And cNr < 58) And lLineNo Then
                                 fNr2 = 3
                              Else
                                 If lLineNo And (cNr And 127) <> 44 And (cNr And 127) <> 32 Then
                                    lLineNo = False
                                 End If
                                 fNr2 = 0
                              End If
                           End If
                        End If
                     End If
                     If (cNr And 127) = 34 Then
                        lInQuote = Not lInQuote
                     End If
                  End If
               End If
            End If
            If (cNr <> 32) Or ShowSpace Then
               myGraphic.DrawImageUnscaled(imgChars(cNr, EditInfo.FontNr, fNr, fNr2), (x - EditInfo.OffX) * EditInfo.FontSize, (y - EditInfo.OffY) * EditInfo.FontSize + MinY)
            End If
            If lCur Then
               If cNr > 127 Then
                  myGraphic.DrawRectangle(Pens.White, (x - EditInfo.OffX) * EditInfo.FontSize, (y - EditInfo.OffY) * EditInfo.FontSize + MinY, 1, EditInfo.FontSize - 1)
               Else
                  myGraphic.DrawRectangle(Pens.Black, (x - EditInfo.OffX) * EditInfo.FontSize, (y - EditInfo.OffY) * EditInfo.FontSize + MinY, 1, EditInfo.FontSize - 1)
               End If
               lCur = False
            End If
         End If
      Next
      If sProof <> "" Then
         fNr2 = 3
         For x = 0 To sProof.Length() - 1
            cNr = Asc(sProof.Substring(x, 1))
            cNr = cNr + 128
            myGraphic.DrawImageUnscaled(imgChars(cNr, EditInfo.FontNr, fNr, fNr2), (EditInfo.MaxX + x) * EditInfo.FontSize, (y - EditInfo.OffY) * EditInfo.FontSize + MinY)
         Next
      End If
   End Sub
Basic V2 Programme unter Windows editieren: BasEdit.NET

122

Saturday, May 22nd 2010, 5:12pm

Cool, das Tool wird von Tag zu Tag besser! Danke für deinen Einsatz!! :thumbsup:

Schlowski

Trainee

  • "Schlowski" is male
  • "Schlowski" started this thread

Posts: 97

Date of registration: Apr 10th 2010

  • Send private message

member since 36 month member since 36 month

123

Saturday, May 22nd 2010, 5:25pm

Der Diskmanager kommt Deinem angestrebten Einsatzzweck schon näher, oder? 8)

Da wollte ich dann irgendwann noch mit den FE3-LOADER-Dateien ansetzen, sowas wie
1. Programm auf die Disk schieben
2. Schauen, ob wir dafür schon eine LOADER-Definitionen haben
3.a falls ja - übernehmen
3.b falls nein - beim User nachfragen, ob er dafür LOADER-Informationen eingeben möchte (optional: in DB für andere User speichern)
3.c falls ja - übernehmen
4. wenn bei 3. was rausgekommen ist, an eine bestehende LOADER-Definition für diese Disk anfügen
und ganz am Schluss vielleicht noch sowas wie
5. LOADER-Datei für Disk bearbeiten (Menüpunkte verschieben, umbenennen, löschen etc.), also noch eine LOADER-Manager-Funktion ausgehend vom Diskmanager

Ist noch nicht ganz ausgegoren in meinem Hirn, aber es es entsteht langsam ein Bild...
Basic V2 Programme unter Windows editieren: BasEdit.NET

Schlowski

Trainee

  • "Schlowski" is male
  • "Schlowski" started this thread

Posts: 97

Date of registration: Apr 10th 2010

  • Send private message

member since 36 month member since 36 month

124

Saturday, May 22nd 2010, 7:42pm

Neue Version 1.32 hochgeladen

Source code

1
- Unterstützung für D71 und D81 Diskimages


Der Typ eines Diskimages wird beim Laden anhand der Dateilänge, beim Erzeugen anhand der Dateiendung bestimmt.
Also, wenn man z.B. ein D71 Diskimage erzeugen möchte, kann man einfach "Create empty diskimage" anwählen und die Dartei z.B. NeuesImage.D71 nennen.
Beim Laden schaut BasEdit nach der Dateilänge :

Source code

1
2
3
4
Dateilänge   Disktype
174848     D64 
349696     D71 
819200     D81


Diskimages mit error byte blocks werden nicht erkannt oder geladen!

Und noch eine Einschränkung für D81 Diskimages: Es werden (noch) keine Partitionen oder Unterverzeichnisse unterstützt!
Basic V2 Programme unter Windows editieren: BasEdit.NET

Schlowski

Trainee

  • "Schlowski" is male
  • "Schlowski" started this thread

Posts: 97

Date of registration: Apr 10th 2010

  • Send private message

member since 36 month member since 36 month

125

Saturday, May 22nd 2010, 8:41pm

Noch ein Nachsatz zu Mono: Hab das gerade mal auf meinem Mac probiert und bin dabei auf folgende Probleme gestoßen:

1. Pfadprobleme - lassen sich durch Vermeiden von .\ und Beachtung von Groß-/Kleinschreibung lösen
2. &H80 kann nicht ausgewertet werden - ließe sich durch eine andere Hex-Dez-Routine lösen
3. Absturz mit Index out of Range nach dem Laden eines PRG - muss genauer untersucht werden
4. Absturz nach Eingabe einiger Tastenkombinationen mit Shift/Ctrl/Alt
5. Die Tastaturauswertung funktioniert nicht wirklich, nur ungeshiftete Zeichen werden erkannt, nicht einmal shift-2 für Anführungszeichen gehen

Und das ist erst der Anfang. So leid es mir für alle Nicht-Windows-User tut, ich lege das erstmal beiseite, um mich weiter um die Funktionalität von BasEdit zu kümmern.
Basic V2 Programme unter Windows editieren: BasEdit.NET

Unseen

Hätte gerne 'n Ersa X-Tool

  • "Unseen" is male
  • »Unseen« is a verified user

Posts: 5,231

Date of registration: Jun 16th 2007

Location: Debara Hamtar

  • Send private message

member since 72 month member since 72 month member since 72 month member since 72 month

126

Saturday, May 22nd 2010, 9:29pm

Wobei ich es etwas merkwürdig finde, dass das nicht automatisch vom System umgesetzt wird zwischen "\" und "/", je nach System. Muss mal schauen, ob man irgendwie den Directory-Separator abfragen kann, den das aktuelle System benutzt.

Windows sollte auch / verstehen, unter Unix ist dagegen alles ausser / und dem 0-Byte ein gültiges Zeichen im Filenamen.

Quellcode

1
2
3
10 x=rnd(-1963):fori=1to81:y=rnd(1):next
20 forj=1to5:printchr$(rnd(1)*16+70);:next
30 printint(rnd(1)*328)-217

sd2iec Homepage

127

Sunday, May 23rd 2010, 3:10pm


Noch ein Nachsatz zu Mono: Hab das gerade mal auf meinem Mac probiert und bin dabei auf folgende Probleme gestoßen:
1. Pfadprobleme - lassen sich durch Vermeiden von .\ und Beachtung von Groß-/Kleinschreibung lösen

Oder man nutzt wie schon mehrfah erwähnt "/" oder den DiretorySeperator und nur Kleinschreibung.


2. &H80 kann nicht ausgewertet werden - ließe sich durch eine andere Hex-Dez-Routine lösen

Also in folgendem Beispielprogram funktioniert die Hexwandlung so wie du sie gemacht hast.

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Module Module1

    Public Function Hex2Dec(HexNum As String) As Long
        On Error Resume Next
        Hex2Dec = Val("&h" & HexNum$)
    End Function


    Sub Main()
        Console.WriteLine("Hello, world!")
        Console.WriteLine(Hex2Dec("ff"))
        Console.WriteLine(Hex2Dec("7e"))
    End Sub

End Module

Nimm mal bei dir ein kleines "h".


4. Absturz nach Eingabe einiger Tastenkombinationen mit Shift/Ctrl/Alt

Unter Lucid nicht nachvollzeihbar.


5. Die Tastaturauswertung funktioniert nicht wirklich, nur ungeshiftete Zeichen werden erkannt, nicht einmal shift-2 für Anführungszeichen gehen

Unter Lucid nicht nachvollzeihbar.


Und das ist erst der Anfang. So leid es mir für alle Nicht-Windows-User tut, ich lege das erstmal beiseite, um mich weiter um die Funktionalität von BasEdit zu kümmern.

Das ist sehr schade. Aus meiner Erfahrung hat man nachher mehr Schmerz damit, etwas rückzuportieren.

Bisher gute Arbeit weiterso.

128

Sunday, May 23rd 2010, 3:27pm


Für abraXxl hier der Source für die ShowOneLine-Routine, an der Stelle mit dem "cNr = Asc(Zeile.Substring(x, 1))" scheint's ihn unter Mono ja zu zerbröseln


Meine rudimentären Mono/VB.Net Kenntnisse lassen mich auf ein Of-by-One Problem scliessen. Doch waurm passiert dies unter Windows nicht?

Schau mal in den Code:

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Module Module1

    Sub Main()
        dim str as String
        dim i as Integer
        dim c as String

        str$ = "Hello World!"

        for i = 1 to Len(str$)
            c$ = mid$(str$, i, 1)
            Console.WriteLine("mid str["& i &"] = "& c  & "     " & asc( c$ ) )
        next i

        Console.WriteLine("---")
        for i = 1 to str.length()
            c$ = Str.SubString(i ,1)
            Console.WriteLine("SubString str["& i &"] = "& c  & "     " & asc( c$ ) )
        next i

    End Sub

End Module


Hier die Ausgabe aus meinem xterm:

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
abra@yggdrasil:~/tmp> vbnc foo.bas 
Visual Basic.Net Compiler version 0.0.0.5914 (Mono 2.4.2 - r)
Copyright (C) 2004-2008 Rolf Bjarne Kvinge. All rights reserved.


Assembly 'foo, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' saved successfully to '/home/abra/tmp/foo.exe'.
Compilation successful
Compilation took 00:00:00.7944330
abra@yggdrasil:~/tmp> mono foo.exe 
mid str[1] = H     72
mid str[2] = e     101
mid str[3] = l     108
mid str[4] = l     108
mid str[5] = o     111
mid str[6] =       32
mid str[7] = W     87
mid str[8] = o     111
mid str[9] = r     114
mid str[10] = l     108
mid str[11] = d     100
mid str[12] = !     33
---
SubString str[1] = e     101
SubString str[2] = l     108
SubString str[3] = l     108
SubString str[4] = o     111
SubString str[5] =       32
SubString str[6] = W     87
SubString str[7] = o     111
SubString str[8] = r     114
SubString str[9] = l     108
SubString str[10] = d     100
SubString str[11] = !     33

Unhandled Exception: System.ArgumentOutOfRangeException: startIndex + length > this.length
Parameter name: length
  at System.String.Substring (Int32 startIndex, Int32 length) [0x00000] 
  at Module1.Main () [0x00000] 
abra@yggdrasil:~/tmp>

Schlowski

Trainee

  • "Schlowski" is male
  • "Schlowski" started this thread

Posts: 97

Date of registration: Apr 10th 2010

  • Send private message

member since 36 month member since 36 month

129

Sunday, May 23rd 2010, 3:36pm

Okay, was jetzt folgt ist das was Neudeutsch so schön "rant" heißt, also einfach nur mein Gegrummel. Ich weiß, das gibt bestimmt Mecker, aber ich muss das mal loswerden :)

<rant>
Das mit dem DirSeparator hab ich ja schon drin, das bezog sich mehr auf die Groß-/Kleinschreibung.
An Dateisysteme mit case sensitive filenames kann ich mich nicht gewöhnen - ich fühle mich mit Schlowski genauso angesprochen wie mit schlowski und kann nicht einsehen, dass das zwei unterschiedliche entities sein sollen...

Das geht dann weiter bei dem VAL("&h80") - warum zum Geier ist denn VAL("&H80") nicht gültig? Und ist dann VAL("&ha0") <> VAL("&hA0")? Oder erzeugt das sogar einen Fehler? Anmerkung: Hab das inzwischen "voll manuell" gelöst, d.h. ohne ein VAL mit irgendwelchen Hex-Werten sondern auf die klassische Art zeichenweiser Umwandlung und Umrechnung. Das funktionierte dann auch unter Mono...
</rant>

Das mit der Tastenauswertung ist interessant, da scheint dann nur der Mac-Mono-Port drunter zu leiden. Aber das lässt mich befürchten, dass es neben grundsätzlichen Mono-Inkompatibilitäten auch noch System-spezifische Probleme gibt, das macht das nicht einfacher *grusel*

Quoted

Das ist sehr schade. Aus meiner Erfahrung hat man nachher mehr Schmerz damit, etwas rückzuportieren.

Da gebe ich Dir prinzipiell Recht, aber eigentlich hatte ich nie vor, das auf was anderem als Windows laufen zu haben. Das war ja alles nur, weil ich gefragt wurde, ob das auch woanders läuft. Aber ehrlich gesagt ist mir persönlich das völlig schnurz, auch wenn ich durchaus verstehe, das das für andere total ärgerlich ist. Aber ich muss auch sehen, wie ich meine Prioritäten setze, habe nur eine gewisse Menge an Zeit zur Verfügung, und die möchte ich dann für Features nutzen, die ich selbst für wichtig halte und/oder die mir einfach mehr Spaß machen. Ich möchte damit niemandem auf die Füße treten, aber nachdem ich jetzt einen Abend mit Mono rumprobiert habe und noch nicht einmal die Spitze des Problem-Eisberges erklommen habe, wollte ich lieber wieder was machen, woran ich Spaß habe. Das er bei ASC(...) mit nirgendwelchen UTF8-Umwandlungen abschnasselt hat mir den Rest gegeben...

Das mit der Portabilität von .NET Programmen dank Mono läuft in etwas genauso gut wie die vielgepriesene Portabilität von C-Programmen. Prinzipiell schon, es sei denn, man versucht das mit einer echten Anwendung :) Dann kommen all die kleinen Tücken und Kinken zum Tragen und die Anpassungen daran dauern nochmal so lange wie die ursprüngliche Programmierzeit... Oder man muss vorher schon wissen, was geht und was nicht und kann das dann gleich berücksichtigen. Aber dazu fehlt mir die Zeit und die Lust, mich erstmal in Mono einzuarbeiten.

Also: Vielen Dank an alle, die sich die Zeit genommen haben, das zu testen - zumindest wissen wir jetzt, das es nicht geht.
Basic V2 Programme unter Windows editieren: BasEdit.NET

Schlowski

Trainee

  • "Schlowski" is male
  • "Schlowski" started this thread

Posts: 97

Date of registration: Apr 10th 2010

  • Send private message

member since 36 month member since 36 month

130

Sunday, May 23rd 2010, 3:43pm

Quoted

Meine rudimentären Mono/VB.Net Kenntnisse lassen mich auf ein Of-by-One Problem scliessen. Doch waurm passiert dies unter Windows nicht?


Source code

1
For x = EditInfo.OffX To Zeile.Length() - 1


Das wäre aber sehr merkwürdig, weil meine Schleife nur bis Zeile.Length()-1 geht - die kann da nicht drüberhinaus laufen
Und der Startwert EditInfo.OffX (das ist der Offset am linken Rand, wenn man rechts über die Fensterbreite rausgelaufen ist und der ganze Quelltext nach rachts scrollt) ist 0 wenn man ein neues PRG lädt. Also so spontan sehe ich nicht, wie ich hier außerhalb der erlaubten Grenzen landen kann...Und wie Du schon sagts - warum passiert das dann unter Windows nicht?
ich befürchte eher, dass da irgendeine Zeichenumwandlung mit 2-Byte UTF's arbeitet und deswegen das Ganze nicht mehr stimmt. Das war ja auch in einer Fehlermeldung zu ASC(...) zu sehen.

Source code

1
2
3
4
5
6
7
8
9
...
Parameter name: bytes
  at System.Text.UTF8Encoding.InternalGetBytes (System.Char* chars, Int32 count, System.Byte* bytes, Int32 bcount, System.Char& leftOver, Boolean flush) [0x00000] 
  at System.Text.UTF8Encoding.InternalGetBytes (System.Char[] chars, Int32 charIndex, Int32 charCount, System.Byte[] bytes, Int32 byteIndex, System.Char& leftOver, Boolean flush) [0x00000] 
  at System.Text.UTF8Encoding.GetBytes (System.Char[] chars, Int32 charIndex, Int32 charCount, System.Byte[] bytes, Int32 byteIndex) [0x00000] 
  at Microsoft.VisualBasic.Strings.Asc (Char String) [0x00000] 
  at Microsoft.VisualBasic.Strings.Asc (System.String String) [0x00000] 
  at BasEdit.frmMain.ShowOneLine (System.Drawing.Graphics myGraphic, System.String Zeile, Int32 y, Boolean 
...
Basic V2 Programme unter Windows editieren: BasEdit.NET

=echo=

time traveler

  • "=echo=" is male
  • »=echo=« is a verified user

Posts: 1,537

Date of registration: Aug 30th 2008

Location: De/Ni/Hannover/Linden

  • Send private message

member since 54 month member since 54 month member since 54 month

131

Sunday, May 23rd 2010, 6:43pm


Also: Vielen Dank an alle, die sich die Zeit genommen haben, das zu testen - zumindest wissen wir jetzt, das es nicht geht.


Ich danke trozdem dir und anderen Beteiligten für den Versucht :)
Neo Geo AES 3-4 || Apple IIe || C64 ASSY 250425 || A500+ || A1000 (GB-Edition) || A3000D rev.9.01 || A4000D rev.B

Schlowski

Trainee

  • "Schlowski" is male
  • "Schlowski" started this thread

Posts: 97

Date of registration: Apr 10th 2010

  • Send private message

member since 36 month member since 36 month

132

Sunday, May 23rd 2010, 8:34pm

Neue Version 1.33 hochgeladen:

Source code

1
- kleine "Projektverwaltung" eingebaut


Man kann jetzt im neuen Project-Menü ein Projekt anlegen, laden, speichern und schließen.
Ein Projekt ist nichts weiter als eine kleine Ansammlung von Pfadangaben :)

http://www.stojalowski.de/files/BasEdit_Project.png

Project name - Wird bei einem geöffneten Projekt im Menü angezeigt
Project file - unter diesem Namen wird das Projektfile immer gespeichert
PRG file - unter diesem Namen wird das PRG-file automatisch gespeichert
TXT file - unter diesem Namen wird das PETSCII-file automatisch gespeichert
Basic tokens - zugehörige Token-Datei, wird automatisch beim Projekt laden aktiviert
ASCII tokenizer - zugehörige ASCII-tokenizer Datei, wird automatisch beim Projekt laden aktiviert

Beim Speichern werden automatisch die PRG und die TXT-Datei gespeichert, es wird jeweils ausgehend vom aktuellen Editor-Zustand die jeweils andere Datei neu erzeugt.

Achtung: Wenn ein Projekt geöffnet ist und man z.B. eine andere PRG-Datei über das File-Menü lädt, wird der Projekt-interne Name nicht nicht geändert, das führt beim Projekt-Speichern oder bei F5 zu einem Überschreiben der Projekt-PRG-Datei! Das ist gewollt, um Dateien sozusagen ins Projekt zu importieren.
Basic V2 Programme unter Windows editieren: BasEdit.NET

Schlowski

Trainee

  • "Schlowski" is male
  • "Schlowski" started this thread

Posts: 97

Date of registration: Apr 10th 2010

  • Send private message

member since 36 month member since 36 month

133

Monday, May 24th 2010, 2:37am

Neue Version 1.34 hochgeladen

Source code

1
2
3
4
- ' als Kommentar im Label-Modus wird nicht in den Zeilennummern-Modus übernommen
- neuer Switch in Tokenfiles: HasSimpleRem=0/1
- Syntax Highlighting bleibt jetzt auch korrekt erhalten, wenn man nach rechts scrollt
- Projektfile um neue Option erweitert: shorten variables


Im Projektmodus kann der einfache ' als Kommentar im Label-Modus sozusagen als unsichtbarer Kommentar für das PRG-file benutzt werden. Bei der Umwandlung von Labels in Zeilennummern wird alles nach einem ' einfach ignoriert.
Also auch sowas wie

Source code

1
A=5  ' IRGENDEIN KOMMENTAR

obwohl das syntaktisch fehlerhaft wäre.
Ausnahme: Wenn der aktuell gewählte Basic-Befehlssatz ein ' als REM-Ersatz erlaubt, wie z.B. ExBasic Level II. Dafür kann man jetzt im Tokenfile das Setting HasSimpleRem einstellen.

Auf vielfachen Wunsch Einzelner hab ich mich mal an die Umsetzung der automatischen Variablenkürzung gewagt.
Da dieser Vorgang den Quelltext nicht unerheblich verändert hab ich das nur im Projekt-Modus erlaubt, außerdem wird das nur bei der Labelmode in Zeilennummern-Umwandlung durchgeführt.

Gedacht ist es für folgendes Vorgehen:
1. Neues Projekt anlegen und in den Label-Modus wechseln bzw. bestehendes Projekt öffnen
2. Nach Herzenslaune Quelltext einhacken, dabei ohne mit der Wimper zu zucken lange Variablennamen benutzen
3. Irgendwann mal ausprobieren, ob das eigentlich läuft, was man da so zusammenbraut -> F5 und im Emulator testen
4. Wieder zurück im Editor
4.a Fehler bereinigen oder Source erweitern - zurück zu 2
4.b oder alles abspeichern und fertig

Beim Schritt 3 wird der Quelltext automatisch im Hintergrund wieder in ein Programm mit Zeilennummern übersetzt und dabei werden dann auch die langen Variablennamen auf 2-buchstabige zurückgekürzt.
Das Vorgehen beim Kürzen ist folgendes:
1. Variablenliste erstellen (Crossreference ohne Dialog am Ende)
2. Die Variablenliste alphabetisch absteigend abarbeiten
3. Falls Variablename länger als 2 Buchstaben bzw. Buchstabe+Ziffer wird gekürzt (z.B. ABER)
3.a Es wird nacheinander geprüft, ob der Erste + x.Buchstabe des Variablennamens schon als Variable vergeben ist (AB, AE, AR)
3.b falls so kein geeigneter Variablenname gefunden wird, A0 -ZZ durchtesten
3.c falls wir immer noch keinen gefunden haben ->PANIK,ERROR (dann sind aber auch schon alle 936 möglichen Variablennamen vergeben...)
4. Langen Variablennamen im gesamten Quelltext gegen kurzen Variablennamen austauschen
5. Kurzen Variablennamen in die Liste vergebener Namen aufnehmen
6. zurück zu 2. bis die Liste abgearbeitet ist

Meine Tests sahen soweit ok aus, durch es wird immer innerhalb einer Variablen"gruppe" getestet und ersetzt (A, A%, A$, A(), A%(), A$() )
Durch die alphabetisch absteigende Reihenfolge werden zuerst längere, dann kürzere Variablen (ABER, ABERMALS) getestet, damit es da nicht zu Problemen kommt. Außerdem wird noch der "Kontext" um den Variablennamen herum abgeprüft, damit es beim Ersetzen nicht zu Problemen kommt (BERM, ABERMALS)

Source code

1
2
3
4
5
6
7
8
9
10
  ab=1
  ac=2
  aber=3
  achtung=4
  ab$="b"
  ae$="e"
  aber$="r"
  abermals$="m"
  print ab,ac,aber,achtung
  print ab$,ae$,aber$,abermals$


Source code

1
2
3
4
10 ab=1:ac=2:ae=3:ah=4
20 ab$="b":ae$="e":a0$="r":ar$="m"
30 printab,ac,ae,ah
40 printab$,ae$,a0$,ar$


Insgesamt war das deutlich anspruchsvoller als ich zuerst dachte...

Ach ja, und für Rückmeldungen, ob das wirklich funktioniert wäre ich dankbar :)
Basic V2 Programme unter Windows editieren: BasEdit.NET

Endurion

Sir Bugalot

  • "Endurion" is male
  • »Endurion« is a verified user

Posts: 2,806

Date of registration: Aug 17th 2005

Location: weitweg

  • Send private message

member since 90 month member since 90 month member since 90 month member since 90 month member since 90 month

134

Monday, May 24th 2010, 7:01am

Mann, du bist eine Maschine. Werd ich gleich testen!

Hmm, ich hab Probleme, den Vice aufgerufen zu bekommen, beim Rumspielen ist mir was aufgefallen:

Das Projekt-Öffnen geht bei mir immer schief, wenn das Projekt nicht im gleichen Ordner wie BasEdit liegt. Der Pfad zu den Tokenfiles wird offenbar relativ zum Arbeitsordner zusammengestellt? Denk dran, dass der Arbeitsordner fast immer nicht das des ausführenden Programmes ist.

Sonst bin ich noch über Leerzeichen im Dateinamen gestolpert, Abhilfe war, um das %F in der basedit.ini Anführungszeichen zu setzen.
Das Variablensetzen hat dann problemlos geklappt. Auch ein dickes Plus für das Beibehalten der Variablennamen, die kurz genug sind!

Wäre eigentlich denkbar, eine Art Zeilennummerstart für die generierten Zeilen einzusetzen? Man könnte quasi einen Spezialcode nehmen, damit beim Autogenerieren der Zeilen ab dem Code die Zeilennummern mit einem wählbaren Wert beginnen? Ist aber nicht wirklich wichtig.

Grossartige Arbeit!

Schlowski

Trainee

  • "Schlowski" is male
  • "Schlowski" started this thread

Posts: 97

Date of registration: Apr 10th 2010

  • Send private message

member since 36 month member since 36 month

135

Monday, May 24th 2010, 12:06pm

Quoted

Das Projekt-Öffnen geht bei mir immer schief, wenn das Projekt nicht im gleichen Ordner wie BasEdit liegt.

Ja, das ist mir gestern auch schon aufgefallen, da muss ich nochmal konzeptionell ran mit meinen Verzeichnissen...

Quoted

Wäre eigentlich denkbar, eine Art Zeilennummerstart für die generierten Zeilen einzusetzen?

Gibt es schon, den ' Kommentar mit einem #<Start>,<Schrittweite>:

Source code

1
2
3
4
5
6
'#100,10
(irgendwelche Codezeilen)
'#1000,5
(irgendeine Unterroutine)
'#2000,5
(noch eine Unterroutine)


Das war eine meiner ersten Erweiterungen zum Label -> Line# Umwandeln, weil ich es gerne ordentlich habe :)
Basic V2 Programme unter Windows editieren: BasEdit.NET

Endurion

Sir Bugalot

  • "Endurion" is male
  • »Endurion« is a verified user

Posts: 2,806

Date of registration: Aug 17th 2005

Location: weitweg

  • Send private message

member since 90 month member since 90 month member since 90 month member since 90 month member since 90 month

136

Monday, May 24th 2010, 12:18pm

Oh, äh, ja, ich habe natürlich nicht RTFM ;)

Schlowski

Trainee

  • "Schlowski" is male
  • "Schlowski" started this thread

Posts: 97

Date of registration: Apr 10th 2010

  • Send private message

member since 36 month member since 36 month

137

Monday, May 24th 2010, 12:28pm

Hehe, dazu müsste ich erstmal W(rite)TFM :rolleyes:
Und meine kleine Webseite zu BasEdit, die noch nie schön war, ist jetzt auch noch völlig überaltert, da stimmt ja kaum noch was, noch so eine Neben-Baustelle...

Egal, wer braucht schon Doku, wenn man ihn mit unbekannten Features erschlagen kann :)
Basic V2 Programme unter Windows editieren: BasEdit.NET

Schlowski

Trainee

  • "Schlowski" is male
  • "Schlowski" started this thread

Posts: 97

Date of registration: Apr 10th 2010

  • Send private message

member since 36 month member since 36 month

138

Sunday, May 30th 2010, 1:29pm

Neue Version 1.35 hochgeladen

Source code

1
2
3
- Der mittige waagerechte Strich wird jetzt korekterweise als CHR(96) und nicht mehr als CHR(192) eingefügt über das F2 Character Fenster
- Zahlen in wissenschaftlicher Notation werden jetzt erkannt (1E+09)
- Erweiterungen an der Erkennung von logischen Ausdrücken in Zusammenhang mit Zuweisungen an numerische Variablen


Damit funktionieren jetzt auch Zuweisungen wie

Source code

1
10 A=-(LEFT$(A$,1)="N")


Vorher wurden nur numerische Vergleiche akzeptiert...
Basic V2 Programme unter Windows editieren: BasEdit.NET

Schlowski

Trainee

  • "Schlowski" is male
  • "Schlowski" started this thread

Posts: 97

Date of registration: Apr 10th 2010

  • Send private message

member since 36 month member since 36 month

139

Tuesday, June 1st 2010, 8:34pm

Neue Version 1.36 hochgeladen:

Source code

1
- Pfadbehandlung beim Laden/Speichern überarbeitet


Die Dateien für Chargen, TokenFile und PetCat aus der BasEdit.Ini werden jetzt immer in fest definierten Unterverzeichnissen zum BasEdit-Verzeichnis (AppDir) gesucht:

Source code

1
2
3
4
5
6
7
' base dir for pathes is application directory!
' relativ pathes no longer supported!
' 
' Character ROM files will be searched in AppDir\Fonts\
' Basic Token Files will be searched in AppDir\Basic-Tokens\
' ASCII tokenizer files will be searched in AppDir\ASCII-Tokenizer\
' BasEdit.Ini will be searched in AppDir\


Bitte passt Eure BasEdit.Ini's entsprechend an und enfernt aus den Einträgen für Chargen, TokenFile und PetCat alle relativen oder absoluten Pfadangaben. Nur die reinen dateinamen dürfen da noch stehen!

Für Lade-/Speichervorgänge für PRG/PETSCII/ASCII-Dateien sowie DiskImages und Projekt-Dateien wird ein WorkingDir mitgeführt, das jeweils auf das zuletzt benutzte Verzeichnis verweist und für die Öffnen/Speichern-Dialoge als StartDirectory gilt. Nach Programmstart ist das gleich dem AppDir, es sei denn, man hat per Drag and Drop eine Datei übergeben, dann ist das Verzeichnis dieser Datei das aktuelle WorkingDir.

Projekte erwarten jetzt immer ihre PRG und TXT-Dateien im gleichen Verzeichnis wie die Projektdatei, außerdem dürfen die Basic-Token- und ASCII-Tokenizer-Dateien nur entweder im Projektverzeichnis oder in ihren jeweiligen Unterverzeichnissen relativ zum AppDir liegen (in dieser Reihenfolge werden sie auch beim Laden gesucht). Damit kann man Projekte schön in Unterverzeichnissen anlegen und ohne Pfadprobleme zwischen verschiedenen Rechnern austauschen.

Mal schauen, wo's jetzt noch hakt, ich hab bestimmt wieder irgendwas vergessen...
Basic V2 Programme unter Windows editieren: BasEdit.NET

Schlowski

Trainee

  • "Schlowski" is male
  • "Schlowski" started this thread

Posts: 97

Date of registration: Apr 10th 2010

  • Send private message

member since 36 month member since 36 month

140

Friday, June 4th 2010, 12:26pm

Mmh, ich wollte eigentlich mal meinen ersten Post editieren, aber da gibt es keinen Edit-Button!? Genaugenommen finde ich gerade überhaupt keinen Edit-Button, um eine ältere Post von mir zu überarbeiten, komisch. Ich weiß aber, dass ich das schonmal gemacht habe...

Egal, ich dachte mir, nach so vielen Änderungen an BasEdit könnte ich mal einen aktuellen Screenshot und eine FeatureListe hinterlegen, damit Neuankömmlinge wissen, was sie erwartet :-)

Könnte vielleicht ein Admin diese Post nach vorne setzen oder so?

http://www.stojalowski.de/files/BasEdit.Net.png

Und hier die Features:

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
Purpose: 
Edit Commodore Basic files on the PC with syntax highlighting and support of the full PETSCII character set

Features:
- full featured editor 
  - unlimited lines
  - syntax highlighting
  - cut&paste
  - search&replace 
  - insert and overwrite mode
  - switch font size small / big
  - switch font upper/graphics - lower/upper
  - supports special characters for cursor movement and colors in strings
  - character window with all 256 PETSCII characters, double-click to insert characters at actual poition
  - right-click on a line number to jump to that line
- load and save tokenized BASIC (PRG) files
- load and save PETSCII (untokenized) files
- load and save ASCII files
  - with support of different translations for {up}, {down}, {clr} etc.
    - BasText
    - PetCat
    - Tok64 
- support for
  - host filesystem (= directories on PC) 
  - diskimages (read & write)
    - D64
    - D71
    - D81 (no partitions)   
    - attach existing or create empty diskimages
    - diskmanager tool integrated 
      - copy files from / to diskimage
      - delete files
      - rename files
      - change order of files in directory
- copy and paste ASCII blocks via clipboard using the above translations
- supports different Basic dialects 
  - Basic V2
  - Basic V3.5
  - Basic V4
  - Basic V4/C64
  - Basic V7
  - Basic V10
  - @Basic
  - Exbasic Level II
  - Wimbasic
  - Speech Basic
  - Turtle Basic
  - Waterloo Structured Basic
  - Super Expander
- supports different fonts (VIC-20, C64) 
- change load adress of PRG file
- Save&Run file in editor with emulator via F5 
  - file will be automatically converted from label to line# mode if necessary
  - prg file will bes saved (host filesystem or diskimage, wherever it was loaded from)
  - depending on the start address of the PRG file special emulators will be automatically selected
     --> VIC +3K, PET/CBM series
     --> C64
     --> VIC unexp, VIC +SuperExpander, Plus/4, C16
     --> VIC +8K and more       
     --> C128                   
     --> CBM II series
  - and a setting for a standard emulator if none of the above will be selected
- two different edit modes:
  a) line# mode: the classic editing mode with line#
     - Renumber feature for the whole program or blocks of line#s
     - Auto mode with intelligent numbering when inserting lines between existing lines
     - Compact source to squeeze as much commands in one line as possible
     - Cross refernce to show all jumps and all usages of variables
     - Syntax Check
     - Proofreader support for Compute '83 and '86 versions
     - import binary data with conversion to data lines and an optional POKE-loop
  b) label mode: enhanced editing mode without line# like in modern Basics
     - one command per line
     - indentation of loops 
     - special comments with ' (single apostroph) will be ignored when converting to line#
  - programs can be converted from/to both modes at any time, substituiton of line#/labels will be done automatically
- project mode
  - keeps both edit modes in sync, providing a line# PRG file and a label mode PETSCII file for editing
  - when using label mode, variables can be of any length and will be shortened automatically when transforming into line# mode 
    - shortening of variables keeps track of used variables to avoid double usage (CHECK and CHECK1 will be transformed to CH and CE, for example)
- drag and drop files onto BasEdit icon or onto edit area in running BasEdit will load that file  
- free definable keyboard layout
- Basic tokens, ASCII tokenizer, different emulators, colors, fonts etc. can be changed via BasEdit.Ini or special files
Basic V2 Programme unter Windows editieren: BasEdit.NET