BASIC-Listings als Textdateien

Moderator: Rockford

Antworten
Benutzeravatar
Microprofessor
Beiträge: 45
Registriert: 02.06.2022 09:22
Has thanked: 16 times
Been thanked: 24 times
Kontaktdaten:

BASIC-Listings als Textdateien

Beitrag von Microprofessor »

Guten Morgen,

gibt es eine Möglichkeit BASIC-Programme aus dem Emulator als Textdatei zu exportieren? Vielleicht als Option in einem Emulator?

µP

Benutzeravatar
MichaG
Beiträge: 380
Registriert: 14.10.2021 12:54
Has thanked: 383 times
Been thanked: 111 times
Kontaktdaten:

Re: BASIC-Listings als Textdateien

Beitrag von MichaG »

Microprofessor hat geschrieben:
09.06.2022 06:03
gibt es eine Möglichkeit BASIC-Programme aus dem Emulator als Textdatei zu exportieren? Vielleicht als Option in einem Emulator?
Du kannst im Altirra einen Drucker einrichten,
Screenshot 2022-06-09 071128.jpg
Screenshot 2022-06-09 071128.jpg (35.37 KiB) 4066 mal betrachtet
Dann lässt du dir unter View den Printer Output anzeigen und kannst dein Programm mit "LIST "P:" in das Output-Fenster ausgeben.
Screenshot 2022-06-09 071235.jpg
Screenshot 2022-06-09 071235.jpg (9.6 KiB) 4066 mal betrachtet
ABBUC-Mitglied aus den 90ern/frühen 2000ern
Ex-WAF und Regionalgruppe Thüringen

Benutzeravatar
pps
Beiträge: 529
Registriert: 18.06.2021 23:05
Has thanked: 115 times
Been thanked: 205 times
Kontaktdaten:

Re: BASIC-Listings als Textdateien

Beitrag von pps »

Oder gleich das H: Laufwerk nutzen und direkt darauf mit LIST "H:NAME.LST" abspeichern. Dann kann man am PC die Datei nutzen.
PP´s of STARSOFTBerlin__________github|meine Webseite|Demozoo

Benutzeravatar
Dr. Irata
Beiträge: 937
Registriert: 24.08.2021 14:40
Has thanked: 110 times
Been thanked: 268 times
Kontaktdaten:

Re: BASIC-Listings als Textdateien

Beitrag von Dr. Irata »

Ich mache das so:
Ein Basic-Listing tippe ich mit Textedit ein und kopiere es dann in den Atari-Emulator.
Dann habe ich beides für Änderungen verfügbar!

Benutzeravatar
Microprofessor
Beiträge: 45
Registriert: 02.06.2022 09:22
Has thanked: 16 times
Been thanked: 24 times
Kontaktdaten:

Re: BASIC-Listings als Textdateien

Beitrag von Microprofessor »

Prodehl hat geschrieben:
09.06.2022 09:33
Ich mache das so:
Ein Basic-Listing tippe ich mit Textedit ein und kopiere es dann in den Atari-Emulator.
Dann habe ich beides für Änderungen verfügbar!
Das möchte ich möglichst vermeiden. Denn es geht um ein paar hundert BASIC-Listings. :lol:

Benutzeravatar
Microprofessor
Beiträge: 45
Registriert: 02.06.2022 09:22
Has thanked: 16 times
Been thanked: 24 times
Kontaktdaten:

Re: BASIC-Listings als Textdateien

Beitrag von Microprofessor »

Die Lösungen funktionieren prima. (Ich verwende den "Atari800MacX"-Emulator" - der kann die Atari-Drucker 825 und 1020 sowie den Epson PX-80 emulieren).

Probleme haben die Druckeremulatoren allerdings mit den ATASCII-Sonderzeichen (Grafiksymbole, Inversdarstellung). Ich beführchte fast, dass es dafür noch keine Lösung gibt. Zunächst bräuchte es wohl den ATASCII-Zeichensatz als UTF-8-Subset. (Für Commodore hat sich mal jemand die Mühe gemacht, die Zeichen auf UTF zu "patchen": https://style64.org/petscii/)

µP

Benutzeravatar
DjayBee
Beiträge: 624
Registriert: 17.08.2021 04:02
Has thanked: 384 times
Been thanked: 175 times
Kontaktdaten:

Re: BASIC-Listings als Textdateien

Beitrag von DjayBee »

pps hat geschrieben:
09.06.2022 07:38
Oder gleich das H: Laufwerk nutzen und direkt darauf mit LIST "H:NAME.LST" abspeichern. Dann kann man am PC die Datei nutzen.
Das Einbinden von H: geht analog zum P:
H-Device.png
H-Device.png (32.76 KiB) 4037 mal betrachtet
Eine komplett triviale Methode ist auch Drag&Drop aus dem Disk Explorer auf den PC.

Geh zu File -> Disk Drives...
File-Disk.png
Und dann kannst du aus der Liste mit Drag&Drop Dateien auf den PC ziehen (und umgekehrt)
Diskexplorer.png
Diskexplorer.png (13.53 KiB) 4037 mal betrachtet
===============================

Letztes Problem ist dann noch die Konvertierung zwischen Atari Zeilenende ($9B / 155) und CR/LF.

Dazu nehme ich immer Memopad, das übrigens auch BASIC und MAC/65 im Tokenformat öffnen kann:
https://x868k.com/apps/memopad/

Benutzeravatar
DjayBee
Beiträge: 624
Registriert: 17.08.2021 04:02
Has thanked: 384 times
Been thanked: 175 times
Kontaktdaten:

Re: BASIC-Listings als Textdateien

Beitrag von DjayBee »

Microprofessor hat geschrieben:
09.06.2022 09:54
Probleme haben die Druckeremulatoren allerdings mit den ATASCII-Sonderzeichen (Grafiksymbole, Inversdarstellung). Ich beführchte fast, dass es dafür noch keine Lösung gibt. Zunächst bräuchte es wohl den ATASCII-Zeichensatz als UTF-8-Subset. (Für Commodore hat sich mal jemand die Mühe gemacht, die Zeichen auf UTF zu "patchen": https://style64.org/petscii/)
Schau mal bei Mark Simonson.
Sein Font ist der Standard dafür:

http://members.bitstream.net/marksim/at ... fonts.html

Online
Benutzeravatar
Olix
Beiträge: 986
Registriert: 17.08.2021 07:06
Has thanked: 117 times
Been thanked: 405 times
Kontaktdaten:

Re: BASIC-Listings als Textdateien

Beitrag von Olix »

Über das FujiNet Modul kann man übrigens auch Lupenreine Atari 8Bit Ausdrucke erzeugen:

Mit dem "HTML ATASCII printer"

Hier erscheint dann das Listing exakt so wie es der Atari anzeigt, inkl. Sonderzeichen und invertierten Zeichen:
ATASCII.jpg
Das Ergebnis kann dann aus dem Browser heraus einfach als PDF gedruckt/gespeichert werden. (Siehe Anhang)
ATASCII.pdf
(8.2 KiB) 68-mal heruntergeladen

Erhard
Beiträge: 555
Registriert: 04.11.2021 15:52
Has thanked: 52 times
Been thanked: 111 times
Kontaktdaten:

BASIC-Listings als Textdateien

Beitrag von Erhard »

Hi,

bei APE kann man im emulierten Drucker als Zeichensatz ATASCII.TTF wählen.

CU, Erhard

Benutzeravatar
Mathy
Beiträge: 1133
Registriert: 18.06.2021 11:13
Wohnort: Heerlen, NL
Has thanked: 449 times
Been thanked: 256 times
Kontaktdaten:

Re: BASIC-Listings als Textdateien

Beitrag von Mathy »

.
Hallo Leute

es gibt den G: Treiber von ANALOG Computing. Dieser hat alles was man dort hin kopiert/geschrieben hat, als ATASCII Zeichen ausgedruckt.

Tschüß

Mathy
Wer oder was hat denn da geblitzt?

Benutzeravatar
LarsImNetz
Beiträge: 152
Registriert: 24.08.2021 18:27
Has thanked: 109 times
Been thanked: 80 times
Kontaktdaten:

Re: BASIC-Listings als Textdateien

Beitrag von LarsImNetz »

Wer es noch etwas "komplizierter" möchte:

1. https://github.com/the-atari-team/lla.xldir.disktool installieren als xldir.
2. Emulator starten in Basic/Turbobasic von <diskimage>.atr
3. Gewünschte Basic Datei laden
4. Datei per LIST "D:NAME.LST" auf atr-Image speichern
5. xldir <diskimage>.atr extract NAME.LST

Das "xldir" Tool hab ich mir mal in Java geschrieben, um per Script/Makefile ATR-Dateien mit ganz vielen Dateien selbst zu erstellen, nix Klicky/Bunti. Als Bonus kann es bei TXT Dateien die Lineendings von Atari Carridge-Return zu Newline (Linux) konvertieren. Bei LST Dateien werden die Lineendings gewandelt und die Zeilennummern entfernt. Wer nutzt schon feste Zeilennummern bei Turbobasic. Beim Kopieren auf eine ATR-Diskimage-Datei werden noch Zeilen entfernt die mit REM anfangen oder :REM irgendwo mittendrin haben, Zeilennummern werden wieder hinzugefügt. Das funktioniert allerdings nicht mit GOTO/GOBUS bei festen Zahlen. So konnte ich ein paar Bytes sparen. Wer die Zeilennummern behalten möchte, möge die Datei per LIST "D:NAME.TXT" speichern und extrahieren.

Wie gesagt, etwas komplizierter.

LG
Lars

Benutzeravatar
atarixle
Beiträge: 271
Registriert: 18.06.2021 21:19
Has thanked: 29 times
Been thanked: 51 times
Kontaktdaten:

Re: BASIC-Listings als Textdateien

Beitrag von atarixle »

Es dürfte eigentlich nicht schwer sein, ein Tool zu schreiben, welches ein .LST file in PC-Text umwandelt. Spezielle Zeichen könnten in Eingabe-Codes umgewandelt werden, wie sie früher in Happy Computer abgedruckt waren, z.B. {Ctrl+S} für das Pseudo-Grafik-Kreuz.
Mal sehen, ob ich sowas in C hinbekomme, wenn ich mal Zeit hab.

Benutzeravatar
mp-one
Beiträge: 29
Registriert: 17.08.2021 16:52
Been thanked: 41 times
Kontaktdaten:

Re: BASIC-Listings als Textdateien

Beitrag von mp-one »

atarixle hat geschrieben:
29.06.2022 06:41
Es dürfte eigentlich nicht schwer sein, ein Tool zu schreiben, welches ein .LST file in PC-Text umwandelt. Spezielle Zeichen könnten in Eingabe-Codes umgewandelt werden, wie sie früher in Happy Computer abgedruckt waren, z.B. {Ctrl+S} für das Pseudo-Grafik-Kreuz.
Mal sehen, ob ich sowas in C hinbekomme, wenn ich mal Zeit hab.
Moin,

da käme evtl. ABBUC PD "529 - Der Pixlator" in Frage. GeLISTete Listings können damit wahlweise als Grafik oder als Textdatei angezeigt werden, wobei spezielle Zeichen auch als Keycodes darstellbar sind.

Grüße,

der PD-Service
pixlator.PNG
pixlator.PNG (58.15 KiB) 3709 mal betrachtet

Benutzeravatar
atarixle
Beiträge: 271
Registriert: 18.06.2021 21:19
Has thanked: 29 times
Been thanked: 51 times
Kontaktdaten:

Re: BASIC-Listings als Textdateien

Beitrag von atarixle »

Mal als Progrämmchen für die Linux-Konsole:

Code: Alles auswählen

#include<stdio.h>
#include<string.h>

int main(int argc, char* argv[]) {
	// printf("argc = %d\n", argc);
	
	if (argc<2) {
		printf("usage: %s Atari 8 Bit .LST files\n", argv[0]);
		return 0;
	}
	
	if ((strcmp(argv[1], "--help") && strcmp(argv[1], "-h"))==0) {
		printf("\nreplaces special Atari characters with codes of their keystrokes.\n");
		printf("Outputs names get a .txt added\n");
		printf("Files will be overwritten WITHOUT ANY WARNING!\n\n");
		return 0;
	}
	
	if ((strcmp(argv[1], "--version") && strcmp(argv[1], "-v"))==0) {
		printf("\n2022.07.14\n\n");
		return 0;
	}
	
	for(int i=1; i<argc; i++) {
		// printf("arg[%d]=\"%s\"\n", i, argv[i]);
		FILE *fp_in, *fp_out;
		
		fp_in=fopen(argv[i], "rb");
		
		if (fp_in==NULL) {
			printf("File \"%s\" not found\n", argv[i]);
		} else {
			char filename[20];
			int c;
			sprintf(filename, "%s.txt", argv[i]);
			fp_out=fopen(filename, "wb");
			
			while((c = getc(fp_in)) != EOF) {
				// printf("Read Char #%d\n", c);
				switch(c) {
//					case 32:
//						fputs("{Spacebar}", fp_out);
//						break;
					case 0: fputs("{Ctrl + ,}", fp_out); break;
					case 1: fputs("{Ctrl + A}", fp_out); break;
					case 2: fputs("{Ctrl + B}", fp_out); break;
					case 3: fputs("{Ctrl + C}", fp_out); break;
					case 4: fputs("{Ctrl + D}", fp_out); break;
					case 5: fputs("{Ctrl + E}", fp_out); break;
					case 6: fputs("{Ctrl + F}", fp_out); break;
					case 7: fputs("{Ctrl + G}", fp_out); break;
					case 8: fputs("{Ctrl + H}", fp_out); break;
					case 9: fputs("{Ctrl + I}", fp_out); break;
					case 10: fputs("{Ctrl + J}", fp_out); break;
					case 11: fputs("{Ctrl + K}", fp_out); break;
					case 12: fputs("{Ctrl + L}", fp_out); break;
					case 13: fputs("{Ctrl + M}", fp_out); break;
					case 14: fputs("{Ctrl + N}", fp_out); break;
					case 15: fputs("{Ctrl + O}", fp_out); break;
					case 16: fputs("{Ctrl + P}", fp_out); break;
					case 17: fputs("{Ctrl + Q}", fp_out); break;
					case 18: fputs("{Ctrl + R}", fp_out); break;
					case 19: fputs("{Ctrl + S}", fp_out); break;
					case 20: fputs("{Ctrl + T}", fp_out); break;
					case 21: fputs("{Ctrl + U}", fp_out); break;
					case 22: fputs("{Ctrl + V}", fp_out); break;
					case 23: fputs("{Ctrl + W}", fp_out); break;
					case 24: fputs("{Ctrl + X}", fp_out); break;
					case 25: fputs("{Ctrl + Y}", fp_out); break;
					case 26: fputs("{Ctrl + Z}", fp_out); break;
					case 27: fputs("{ESC ESC}", fp_out); break;
					case 28: fputs("{ESC Ctrl + -}", fp_out); break;
					case 29: fputs("{ESC Ctrl + =}", fp_out); break;
					case 30: fputs("{ESC Ctrl + +}", fp_out); break;
					case 31: fputs("{ESC Ctrl + *}", fp_out); break;

					case 96: fputs("{Ctrl + .}", fp_out); break;
					
					case 123: fputs("{Ctrl + ;}", fp_out); break;
					case 125: fputs("{ESC Ctrl + <}", fp_out); break;
					case 126: fputs("{ESC Backspace}", fp_out); break;
					case 127: fputs("{ESC Tab}", fp_out); break;

					case 128: fputs("{Inverse Ctrl + ,}", fp_out); break;
					case 129: fputs("{Inverse Ctrl + A}", fp_out); break;
					case 130: fputs("{Inverse Ctrl + B}", fp_out); break;
					case 131: fputs("{Inverse Ctrl + C}", fp_out); break;
					case 132: fputs("{Inverse Ctrl + D}", fp_out); break;
					case 133: fputs("{Inverse Ctrl + E}", fp_out); break;
					case 134: fputs("{Inverse Ctrl + F}", fp_out); break;
					case 135: fputs("{Inverse Ctrl + G}", fp_out); break;
					case 136: fputs("{Inverse Ctrl + H}", fp_out); break;
					case 137: fputs("{Inverse Ctrl + I}", fp_out); break;
					case 138: fputs("{Inverse Ctrl + J}", fp_out); break;
					case 139: fputs("{Inverse Ctrl + K}", fp_out); break;
					case 140: fputs("{Inverse Ctrl + L}", fp_out); break;
					case 141: fputs("{Inverse Ctrl + M}", fp_out); break;
					case 142: fputs("{Inverse Ctrl + N}", fp_out); break;
					case 143: fputs("{Inverse Ctrl + O}", fp_out); break;
					case 144: fputs("{Inverse Ctrl + P}", fp_out); break;
					case 145: fputs("{Inverse Ctrl + Q}", fp_out); break;
					case 146: fputs("{Inverse Ctrl + R}", fp_out); break;
					case 147: fputs("{Inverse Ctrl + S}", fp_out); break;
					case 148: fputs("{Inverse Ctrl + T}", fp_out); break;
					case 149: fputs("{Inverse Ctrl + U}", fp_out); break;
					case 150: fputs("{Inverse Ctrl + V}", fp_out); break;
					case 151: fputs("{Inverse Ctrl + W}", fp_out); break;
					case 152: fputs("{Inverse Ctrl + X}", fp_out); break;
					case 153: fputs("{Inverse Ctrl + Y}", fp_out); break;
					case 154: fputs("{Inverse Ctrl + Z}", fp_out); break;

					case 155: fputs("\n", fp_out); break;

					case 156: fputs("{ESC Shift + Backspace}", fp_out); break;
					case 157: fputs("{ESC Shift + >}", fp_out); break;
					case 158: fputs("{ESC Ctrl + Tab}", fp_out); break;
					case 159: fputs("{ESC Shift + Tab}", fp_out); break;
					
					case 160: fputs("{ }", fp_out); break;
					case 161: fputs("{!}", fp_out); break;
					case 162: fputs("{\"}", fp_out); break;
					case 163: fputs("{#}", fp_out); break;
					case 164: fputs("{$}", fp_out); break;
					case 165: fputs("{%}", fp_out); break;
					case 166: fputs("{&}", fp_out); break;
					case 167: fputs("{'}", fp_out); break;
					case 168: fputs("{(}", fp_out); break;
					case 169: fputs("{)}", fp_out); break;
					case 170: fputs("{*}", fp_out); break;
					case 171: fputs("{+}", fp_out); break;
					case 172: fputs("{,}", fp_out); break;
					case 173: fputs("{-}", fp_out); break;
					case 174: fputs("{.}", fp_out); break;
					case 175: fputs("{/}", fp_out); break;
					case 176: fputs("{0}", fp_out); break;
					case 177: fputs("{1}", fp_out); break;
					case 178: fputs("{2}", fp_out); break;
					case 179: fputs("{3}", fp_out); break;
					case 180: fputs("{4}", fp_out); break;
					case 181: fputs("{5}", fp_out); break;
					case 182: fputs("{6}", fp_out); break;
					case 183: fputs("{7}", fp_out); break;
					case 184: fputs("{8}", fp_out); break;
					case 185: fputs("{9}", fp_out); break;
					case 186: fputs("{:}", fp_out); break;
					case 187: fputs("{;}", fp_out); break;
					case 188: fputs("{<}", fp_out); break;
					case 189: fputs("{=}", fp_out); break;
					case 190: fputs("{>}", fp_out); break;
					case 191: fputs("{?}", fp_out); break;
					case 192: fputs("{@}", fp_out); break;
					case 193: fputs("{A}", fp_out); break;
					case 194: fputs("{B}", fp_out); break;
					case 195: fputs("{C}", fp_out); break;
					case 196: fputs("{D}", fp_out); break;
					case 197: fputs("{E}", fp_out); break;
					case 198: fputs("{F}", fp_out); break;
					case 199: fputs("{G}", fp_out); break;
					case 200: fputs("{H}", fp_out); break;
					case 201: fputs("{I}", fp_out); break;
					case 202: fputs("{J}", fp_out); break;
					case 203: fputs("{K}", fp_out); break;
					case 204: fputs("{L}", fp_out); break;
					case 205: fputs("{M}", fp_out); break;
					case 206: fputs("{N}", fp_out); break;
					case 207: fputs("{O}", fp_out); break;
					case 208: fputs("{P}", fp_out); break;
					case 209: fputs("{Q}", fp_out); break;
					case 210: fputs("{R}", fp_out); break;
					case 211: fputs("{S}", fp_out); break;
					case 212: fputs("{T}", fp_out); break;
					case 213: fputs("{U}", fp_out); break;
					case 214: fputs("{V}", fp_out); break;
					case 215: fputs("{W}", fp_out); break;
					case 216: fputs("{X}", fp_out); break;
					case 217: fputs("{Y}", fp_out); break;
					case 218: fputs("{Z}", fp_out); break;
					case 219: fputs("{[}", fp_out); break;
					case 220: fputs("{\\}", fp_out); break;
					case 221: fputs("{]}", fp_out); break;
					case 222: fputs("{^}", fp_out); break;
					case 223: fputs("{_}", fp_out); break;
					case 224: fputs("{Inverse Ctrl + .}", fp_out); break;
					case 225: fputs("{a}", fp_out); break;
					case 226: fputs("{b}", fp_out); break;
					case 227: fputs("{c}", fp_out); break;
					case 228: fputs("{d}", fp_out); break;
					case 229: fputs("{e}", fp_out); break;
					case 230: fputs("{f}", fp_out); break;
					case 231: fputs("{g}", fp_out); break;
					case 232: fputs("{h}", fp_out); break;
					case 233: fputs("{i}", fp_out); break;
					case 234: fputs("{j}", fp_out); break;
					case 235: fputs("{k}", fp_out); break;
					case 236: fputs("{l}", fp_out); break;
					case 237: fputs("{m}", fp_out); break;
					case 238: fputs("{n}", fp_out); break;
					case 239: fputs("{o}", fp_out); break;
					case 240: fputs("{p}", fp_out); break;
					case 241: fputs("{q}", fp_out); break;
					case 242: fputs("{r}", fp_out); break;
					case 243: fputs("{s}", fp_out); break;
					case 244: fputs("{t}", fp_out); break;
					case 245: fputs("{u}", fp_out); break;
					case 246: fputs("{v}", fp_out); break;
					case 247: fputs("{w}", fp_out); break;
					case 248: fputs("{x}", fp_out); break;
					case 249: fputs("{y}", fp_out); break;
					case 250: fputs("{z}", fp_out); break;
					case 251: fputs("{Inverse Ctrl + ;}", fp_out); break;
					case 252: fputs("{|}", fp_out); break;
					case 253: fputs("{ESC Ctrl + 2}", fp_out); break;
					case 254: fputs("{ESC Ctrl + Backspace}", fp_out); break;
					case 255: fputs("{ESC Ctrl + >}", fp_out); break;

					default:
						// printf("writing default value of #%d\n", c);
						fputc(c, fp_out);
				}
			}
			
			fclose(fp_out);
		}
		
		fclose(fp_in);
	}
	
	return 0;
}
Nicht das eleganteste C-Programm, aber dafür ungetestet.

Benutzeravatar
atarixle
Beiträge: 271
Registriert: 18.06.2021 21:19
Has thanked: 29 times
Been thanked: 51 times
Kontaktdaten:

Re: BASIC-Listings als Textdateien

Beitrag von atarixle »

PS: das sollte(!) eigentlich(!) auch auf dem Mac funktionieren.

Benutzeravatar
atarixle
Beiträge: 271
Registriert: 18.06.2021 21:19
Has thanked: 29 times
Been thanked: 51 times
Kontaktdaten:

Re: BASIC-Listings als Textdateien

Beitrag von atarixle »

Ein Abtipplisting könnte dann so aussehen:

Code: Alles auswählen

100 POKE 82,%0:POKE 83,39:GRAPHICS %0:POKE 752,%1:MOVE ADR("{Ctrl+O}t{Ctrl+,}r"),709,4:PST=DPEEK(88)
110 DIM DI$(1536),D1$(256),D2$(256),F$(256),PATH$(256),H$(256),F(%1),ANZ(%1),MANZ(%1),AF(%1),ACT$(%1)
111 DIM EB$(256),Q$(256),Z$(256),T$(80),P$(256),SWP$(15),TA$(256),X$($70)
112 X$="h{I}{Ctrl+E}{p}{Ctrl+I}{"}{Ctrl+,}{Inverse Ctrl+E}{U}{"}{Inverse Ctrl+,}{Inverse Ctrl+E}{T}{Ctrl+.}h{Inverse Ctrl+E}{Ctrl+A}h{Inverse Ctrl+E}{Ctrl+,}h{Inverse Ctrl+E}{Ctrl+G}h{Inverse Ctrl+E}{Ctrl+F}hh{Inverse Ctrl+M}{Ctrl+,}{Ctrl+D}hh{Inverse Ctrl+M}{Ctrl+A}{Ctrl+D}h{Inverse Ctrl+M}{Ctrl+C}{Ctrl+D}h{Inverse Ctrl+M}{Ctrl+B}{Ctrl+D}{,}{Ctrl+,}{Ctrl+D}{Inverse Ctrl+H}{1}{Ctrl+,}{Inverse Ctrl+Q}{Ctrl+F}{Inverse Ctrl+H}{Ctrl+P}{y}{N}{Ctrl+A}{Ctrl+D}{p}!{Ctrl+X}{%}{Ctrl+,}m{Ctrl+B}{Ctrl+D}{Inverse Ctrl+E}{Ctrl+,}{%}{Ctrl+A}m{Ctrl+C}{Ctrl+D}{Inverse Ctrl+E}{Ctrl+A}{Ctrl+X}{%}{Ctrl+F}m{Ctrl+B}{Ctrl+D}{Inverse Ctrl+E}{Ctrl+F}{%}{Ctrl+G}m{Ctrl+C}{Ctrl+D}{Inverse Ctrl+E}{Ctrl+G}{Ctrl+X}{Inverse Ctrl+P}{O}{)}{Ctrl+,}{Inverse Ctrl+E}{U}{)}{Ctrl+A}{Inverse Ctrl+E}{T}{Ctrl+.}"
119 MM=FRE(%0)-64:DIM MEM$(MM)
120 D1$="D1:*.*":D2$="D1:*.*":AX=%1:AY=%3:DC=%0:SWP$="D8:BOSS.SWP"
170 FOR TAB=%0 TO %1:EXEC DIR:NEXT TAB
180 EXEC MS
190 EXEC ANZ
200 POSITION AX,AY:? "|";:AX=TAB*19+%1:AY=AF(TAB)-ANZ(TAB)+%3:POSITION AX,AY:? "{>}";:GET E:EE=E&95
210 IF E=ASC("=") THEN EXEC DOWN:GOTO 200
220 IF E=ASC("-") THEN EXEC UP:GOTO 200
230 IF E=ASC("{ESC Tab}") THEN TAB=%1-TAB:GOTO 200
240 P=TAB*768+AF(TAB)*12+%1:IF (E=155 OR E=ASC("*")) AND DI$(P,P)=":" THEN EXEC CD:GOTO 190
250 IF E>=ASC("1") AND E<=ASC("9") THEN EXEC DRIVE:GOTO 190
260 IF E=ASC("+") OR E=ASC("{ESC Backspace}") THEN EXEC CDUP
300 IF EE=ASC("C") THEN EXEC COPY:GOTO 200
310 IF EE=ASC("S") THEN EXEC SETUP:GOTO 180
320 IF E=ASC("{ESC ESC}") THEN EXEC EXIT
330 IF EE=ASC("N") THEN EXEC NEW_FOLDER:GOTO 180
499 GOTO 200
500 PROC MS
510   ? "{ESC Ctrl+<}{Ctrl+H}{C}{o}{p}{y}{ }{F}{i}{l}{e}{s}{'}{n}{'}{F}{o}{l}{d}{e}{r}{s}{Inverse Ctrl+H}":? "(c)2004 by Mirko Sobe (";MM;" Bytes free)";
520   POSITION %0,%2:? "{Ctrl+Q}{Ctrl+W}{:}{F}{i}{l}{e}{n}{a}{m}{e}{E}{x}{t}{Ctrl+W}{Ctrl+R}{Ctrl+E}  {Ctrl+Q}{Ctrl+W}{:}{F}{i}{l}{e}{n}{a}{m}{e}{E}{x}{t}{Ctrl+W}{Ctrl+R}{Ctrl+E}";
530   POSITION %0,%3:? "||            | |  ||            | |";
540   MOVE PST+120,PST+160,720
550   POSITION %0,22:? "{Ctrl+Z}{Ctrl+X}{Ctrl+R}{Ctrl+R}{Ctrl+R}{Ctrl+R}{Ctrl+R}{Ctrl+R}{Ctrl+R}{Ctrl+R}{Ctrl+R}{Ctrl+R}{Ctrl+R}{Ctrl+R}{Ctrl+X}{Ctrl+R}{Ctrl+C}  {Ctrl+Z}{Ctrl+X}{Ctrl+R}{Ctrl+R}{Ctrl+R}{Ctrl+R}{Ctrl+R}{Ctrl+R}{Ctrl+R}{Ctrl+R}{Ctrl+R}{Ctrl+R}{Ctrl+R}{Ctrl+R}{Ctrl+X}{Ctrl+R}{Ctrl+C}";
560   POSITION %0,23:? "{C}op {1}-{9}=Drv {T}{A}{B}=win {S}et {ESC ESC}{ESC ESC}xit {N}ew Folder";
570   FOR TAB=%0 TO %1:EXEC ANZ:NEXT TAB:TAB=%0
599 ENDPROC 
600 PROC DIR
610   IF TAB:H$=D2$:ELSE :H$=D1$:ENDIF 
620   CLOSE #%1:OPEN #%1,6,%0,H$:F=%0
630   INPUT #%1,F$:IF F$(%1,%1)>="0" AND F$(%1,%1)<="9" THEN 650
640   Q=TAB*768+F*12:DI$(Q+%1,Q+12)=F$(%2,13):F=F+%1:GOTO 630
650   CLOSE #%1:F(TAB)=F
660   MANZ=F-19:IF MANZ<%0 THEN MANZ=%0
670   MANZ(TAB)=MANZ:ANZ(TAB)=%0:AF(TAB)=%0
699 ENDPROC 
700 PROC ANZ
710   ANZ=ANZ(TAB):MANZ=MANZ(TAB)
720   FOR P=%0 TO 18:F=P+ANZ
730     POSITION %2+19*TAB,%3+P:IF F>=F(TAB):? "            ":ELSE 
740       ? DI$(TAB*768+F*12+%1,TAB*768+F*12+12):ENDIF 
750   NEXT P
799 ENDPROC 
800 PROC CD:P=TAB*768+AF(TAB)*12+%1
810   IF TAB:H$=D2$:ELSE :H$=D1$:ENDIF 
820   F$=DI$(P+%1):F$(9)=" ":Q=INSTR(F$," "):F$(Q)=".":F$(Q+%1)=DI$(P+9,P+11):Q=INSTR(F$," "):IF Q THEN F$(Q)=""
830   H$(LEN(H$)-%2)=F$:H$(LEN(H$)+%1)=":*.*"
880   IF TAB:D2$=H$:ELSE :D1$=H$:ENDIF 
890   EXEC DIR
899 ENDPROC 
900 PROC DRIVE
910   IF TAB:H$=D2$:ELSE :H$=D1$:ENDIF 
920   H$="D :*.*":H$(%2,%2)=CHR$(E)
930   CLOSE #%1:TRAP 995:OPEN #%1,6,%0,H$
940   CLOSE #%1
980   IF TAB:D2$=H$:ELSE :D1$=H$:ENDIF 
990   EXEC DIR
995   TRAP 995:CLOSE #%1:TRAP 40000
999 ENDPROC 
1000 PROC CDUP
1010   IF TAB:H$=D2$:ELSE :H$=D1$:ENDIF 
1020   H$(LEN(H$)-4)=""
1030   P=LEN(H$)
1040   IF H$(P,P)<>":" THEN P=P-%1:IF P>%0 THEN 1040
1050   IF P=%0 THEN 1099
1060   H$(P)=":*.*"
1080   IF TAB:D2$=H$:ELSE :D1$=H$:ENDIF 
1090   EXEC DIR:EXEC ANZ
1099 ENDPROC 
1100 PROC COPY:? "{ESC Ctrl+<}Copying..."
1105   IF TAB:PATH$=D2$:ELSE :PATH$=D1$:ENDIF 
1110   ACT$="C":CF=%1:EXEC CURSE:EXEC MS:GOTO 1199
1120   TAB=%1-TAB:EXEC DIR:EXEC ANZ
1121   TAB=%1-TAB
1199 ENDPROC 
1200 PROC SETUP
1210   ? "{ESC Ctrl+<}Copy F'n'F - Settings"
1220   ? "---------------------"
1230   POSITION %0,%3
1231   ? "Allow {D}irect Copy: ";:IF DC:? "Yes":ELSE :? "no ":ENDIF 
1232   ? "Swap{f}ile: ";SWP$
1240   GET E:EE=E&95
1250   IF EE=ASC("D") THEN DC=%1-DC:GOTO 1230
1260   IF EE=ASC("F") THEN POKE 752,%0:POSITION 9,4:INPUT SWP$:POKE 752,%1:GOTO 1230
1270   IF E=ASC("{ESC ESC}") THEN 1299
1280   GOTO 1240
1299 ENDPROC 
2000 PROC CURSE
2010   IF TAB:Q$=D2$:Z$=D1$:ELSE :Q$=D1$:Z$=D2$:ENDIF 
2020   P=TAB*768+AF(TAB)*12+%1:FOLD=(DI$(P,P)=":")
2030   F$=DI$(P+%1):F$(9)=" ":Q=INSTR(F$," "):F$(Q)=".":F$(Q+%1)=DI$(P+9,P+11):Q=INSTR(F$," "):IF Q THEN F$(Q)=""
2040   EB=%0:EB$="{Ctrl+,}":EB$(256)="{Ctrl+,}":EB$(%2)=EB$:Q=LEN(Q$)-%2:Z=LEN(Z$)-%2
2050   IF FOLD=%0 THEN Z$(LEN(Z$)-%3)="":H$=F$:EXEC COP_THIS:GOTO 2290
2060   Q$(LEN(Q$)-%2)=F$:EXEC MD
2070   Q$(LEN(Q$)+%1)=":*.*":EB=EB+%1:EB$(EB,EB)="{Ctrl+,}"
2080   CLOSE #%1:OPEN #%1,6,%0,Q$
2090   FOR P=%0 TO ASC(EB$(EB)):INPUT #%1,P$:NEXT P:IF P$(%1,%1)>="0" AND P$(%1,%1)<="9" THEN 2150
2100   CLOSE #%1:FOLD=(P$(%2,%2)=":"):EB$(EB,EB)=CHR$(ASC(EB$(EB))+%1)
2110   F$=P$(%3):F$(9)=" ":P=INSTR(F$," "):F$(P)=".":F$(P+%1)=P$(11,13):P=INSTR(F$," "):IF P THEN F$(P)=""
2120   IF FOLD THEN 2060
2130   H$=F$:EXEC COP_THIS
2140   GOTO 2080
2150   EB=EB-%1:IF EB=%0 THEN 2290
2160   FOR P=LEN(Q$)-4 TO %1 STEP -%1:IF Q$(P,P)=":" OR Q$(P,P)=">" THEN EXIT 
2170   NEXT P
2180   Q$(P)=":*.*":? "cd ";Q$:GOTO 2080
2290   REM 
2298   TAB=%1-TAB:EXEC DIR:TAB=%1-TAB
2299 ENDPROC 
2300 PROC MD
2310   Z$(Z)=Q$(Q)
2320   ? "md ";Z$
2330   TRAP 2340:XIO 42,#%1,%0,%0,Z$:GOTO 2350
2340   IF ERR=172 THEN 2350
2341   ? "Error ";ERR;" while creating ";Z$:? "{A}bort, {I}gnore?"
2342   GET E:EE=E&95
2343   IF EE=ASC("I") THEN ? "{ESC Ctrl+-}{ESC Shift+Backspace}Ignoring...":GOTO 2350
2344   IF EE=ASC("A") THEN CLOSE #%1:POP :POP :POP :EXEC MS:GOTO 200
2346   GOTO 2342
2350   TRAP 40000
2399 ENDPROC 
2400 PROC COP_THIS:Z$(Z)=Q$(Q):Z$(LEN(Z$)-%3)=""
2410   P$=Q$:P$(LEN(P$)-%2)=H$
2420   ? "copy ";P$:? "  to ";:TA$=SWP$:IF DC THEN TA$=Z$:TA$(LEN(TA$)+%1)=":":TA$(LEN(TA$)+%1)=H$
2430   CLOSE #%1:OPEN #%1,4,%0,P$:RD=%0
2440   TRAP 2470:BGET #%1,ADR(MEM$),MM
2450   IF RD=%0 THEN RD=%1:CLOSE #%2:OPEN #%2,8,%0,TA$
2460   BPUT #%2,ADR(MEM$),MM:GOTO 2440
2470   L=DPEEK(40):CLOSE #%1:IF RD THEN IF L:BPUT #%2,ADR(MEM$),L:ENDIF :CLOSE #%2
2480   P$=Z$:P$(LEN(P$)+%1)=":":P$(LEN(P$)+%1)=H$
2490   ? P$:IF DC AND RD THEN 2560
2500   CLOSE #%1:OPEN #%1,8,%0,P$:IF RD=%0 THEN 2540
2510   CLOSE #%2:OPEN #%2,4,%0,SWP$
2520   TRAP 2530:BGET #%2,ADR(MEM$),MM:BPUT #%1,ADR(MEM$),MM:GOTO 2520
2530   IF ERR<>136 THEN 2545
2531   L=DPEEK(40)
2540   IF L THEN TRAP 2545:BPUT #%1,ADR(MEM$),L
2544   GOTO 2550
2545   ? "Error ";ERR;" while writing ";SWP$:? "{A}bort, {I}gnore?"
2546   GET E:EE=E&95
2547   IF EE=ASC("I") THEN ? "{ESC Ctrl+-}{ESC Shift+Backspace}Ignoring...":GOTO 2550
2548   IF EE=ASC("A") THEN CLOSE #%1:CLOSE #%2:POP :POP :POP :EXEC MS:GOTO 200
2549   GOTO 2345
2550   TRAP 2550:CLOSE #%1:TRAP 40000
2560 ENDPROC 
2600 PROC DOWN
2610   AF(TAB)=AF(TAB)+%1:IF AF(TAB)>F(TAB)-%1 THEN AF(TAB)=F(TAB)-%1:GOTO 2699
2620   IF AF(TAB)-ANZ(TAB)>18
2630     ANZ(TAB)=ANZ(TAB)+%1
2640     X=USR(ADR(X$),PST+TAB*19+162,PST+TAB*19+122,12,18,40)
2650     POSITION %2+19*TAB,21
2660     ? DI$(TAB*768+AF(TAB)*12+%1,TAB*768+AF(TAB)*12+12):ENDIF 
2699 ENDPROC 
2700 PROC UP
2710   AF(TAB)=AF(TAB)-%1:IF AF(TAB)<%0 THEN AF(TAB)=%0:GOTO 2799
2720   IF AF(TAB)-ANZ(TAB)<%0
2730     ANZ(TAB)=ANZ(TAB)-%1
2740     X=USR(ADR(X$),PST+TAB*19+802,PST+TAB*19+842,12,18,$FFD8)
2750     POSITION %2+19*TAB,%3
2760     ? DI$(TAB*768+AF(TAB)*12+%1,TAB*768+AF(TAB)*12+12):ENDIF 
2799 ENDPROC 
2800 PROC EXIT
2810   IF PEEK($06FF)=ASC("B") THEN H$="  :DESKTOP.BOS":MOVE $06F5,ADR(H$),%2:TRAP 2820:RUN H$
2820   IF PEEK($06FF)=ASC("B") THEN H$="D8:DESKTOP.BOS":TRAP 2830:RUN H$
2830   POKE 82,%2:POKE 83,39:GRAPHICS %0:END 
2899 ENDPROC 
2900 PROC NEW_FOLDER
2910   IF TAB:H$=D2$:ELSE :H$=D1$:ENDIF 
2920   TRAP 2920:POKE 752,%0:POSITION %0,23:INPUT "{ESC Shift+Backspace}New Folder: ",F$:POKE 752,%1
2930   TRAP 2950:P=INSTR(H$,"*.*"):H$(P)=F$
2940   XIO 42,#%1,%0,%0,H$:? "created":GOTO 2960
2950   ? "error - ";ERR:GET E
2960   EXEC DIR
2999 ENDPROC 

Antworten

Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 1 Gast