Beiträge von strik im Thema „C64 Kurze Listings“

    118 open 15,8,15:print# 15,"n:a$,b$"

    Geht auch als:

    Code
    118 open15,8,15,"n:name,id"

    Mit den Variablen dann:

    Code
    118 open15,8,15,"n:"+a$+","+b$

    Der Open-Befehl benötigt die + unbedingt, der PRINT-Befehl nicht (weil er bei fehlenden Zeichen ein Semikolon annimmt).

    Ob das dann aber noch schneller ist als

    118 open 15,8,15:printBitte melde dich an, um diesen Link zu sehen.,"n:"a$","b$

    bezweifle ich allerdings, weil der Interpreter beim "+" erst den fertigen String aufbaut, bevor er ihn ausgibt, was beim PRINT ohne "+" nicht erfolgt. Ich bezweifle aber, dass es hier auf die Geschwindigkeit ankommt.

    Ich hatte mir übrigens immer angewöhnt, die Laufwerksnummer mitzuschreiben, also:

    "n0:" ..

    Beim LOAD-Befehl kann das ja durchaus wichtig sein (LOAD"*",8 vs. ":*" oder "0:*")

    Weil du dein eigenes Programm mit dem geladenen Directory überschreibst.

    Das ist nur die halbe Antwort... ;)

    Nach einem LOAD aus einem Programm heraus wird nach dem Laden ein GOTO 0 ausgeführt. D.h., das neu geladene Programm wird "fast" so ausgeführt, als ob es mit RUN neu gestartet worden wäre.

    Wieso "fast"? Weil die Variablen erhalten bleiben. Das klappt aber nur, wenn das neu geladene Programm nicht länger ist als die orginale, sonst werden die Variablen von dem neuen Programm überschrieben.

    Damit das alles mit den Variablen klappt wird auch das BASIC-Ende nicht neu gesetzt (sonst wären die Variablen woanders zu suchen). D.h., lädt man mit so etwas ein neues Programm ein und speichert man es damit mit "SAVE", wird nicht das gesamte Programm abgespeichert --> es droht Datenverlust!

    Auch die Variablen, die erhalten bleiben, sind nicht ganz "ungefährlich". String-Variablen, die im Programm vorkamen (A$="MEIN TEXT") verweisen nämlich auf den Code im Programm. Den gibt es aber gar nicht mehr, so dass die Variable nicht mehr gültig ist. Das gleiche gilt für mit DEF FN definierte Funktionen.

    Also, kurzum: LOAD in einem Programm ist gefährlich und sollte man nur benutzen, wenn

    • man genau weiß, was man da tut (also fast nie), oder
    • man es nur nutzt, um Binärdateien/Maschinenspracheroutinen nachzuladen, die nicht im BASIC-Speicher stehen (mit dem "typischen" 10 IF A>0 GOTO 40 - 20 A = 1 - 30 LOAD"ROUTINE",8,1 - 40 ..." Code