100 REM 110 REM WRITTEN BY UDO WOEHLER 120 REM 130 REM SYS49152,NA$,ZH%,FI$,BL% 140 REM ,TY%,TR%,SE%,"PSRUD" 150 REM P = PROGRAMM FILES 160 REM S = SEQUENTIELLE FILES 170 REM R = RELATIVE FILES 180 REM U = USER FILES 190 REM D = DELETED FILES 200 REM 210 OPEN2,8,2,"@:DIRECTORY-LOAD,P,W" 220 SYS9*4096 230 .OPT P,O2 240 *= $C000 250 PROZ = $7A 260 NCHR(null)T = $0073 270 LCHR(null)T = $0079 280 LET = $A9A5 290 FRMEVL = $AD9E 300 CHECKKOMMA = $AEFD 310 SYNERR = $AF08 320 PRUEBUCH = $B113 330 FRESTR = $B6A3 340 INTNAFAC = $BC49 350 FACNASTRI = $BDDF 360 IECOUT = $FFA8 370 OPEN = $FFC0 380 CLOSE = $FFC3 390 CHKIN = $FFC6 400 CKOUT = $FFC9 410 CLRCH = $FFCC 420 GET = $FFE4 430 ; -------------------------------- 440 LDA #$24 ;STRING VARIABLE 450 JSR SUCHVAR ;SUCHEN 460 LDA FTEST ;FLAG FUER VORHANDEN 470 STA FDISKNAME ;SPEICHERN 480 LDA $45 ;VARIABLENNAME 490 LDX $46 500 STA DISKNAME ;SPEICHERN 510 STX DISKNAME+1 520 LDA #$25 ;INTEGER VARIABLE 530 JSR SUCHVAR ;SUCHEN 540 LDA FTEST ;FLAG FUER VORHANDEN 550 STA FANZAHL ;SPEICHERN 560 LDA $45 ;VARIABLENNAME 570 LDX $46 580 STA ANZAHL ;SPEICHERN 590 STX ANZAHL+1 600 LDA #$24 ;STRING VARIABLE 610 JSR SUCHVAR ;SUCHEN 620 LDA FTEST ;FLAG FUER VORHANDEN 630 STA FFILENAME ;SPEICHERN 640 LDA $45 ;VARIABLENNAME 650 LDX $46 660 STA FILENAME ;SPEICHERN 670 STX FILENAME+1 680 LDA #$25 ;INTEGER VARIABLE 690 JSR SUCHVAR ;SUCHEN 700 LDA FTEST ;FLAG FUER VORHANDEN 710 STA FBLOECKE ;SPEICHERN 720 LDA $45 ;VARIABLENNAME 730 LDX $46 740 STA BLOECKE ;SPEICHERN 750 STX BLOECKE+1 760 LDA #$25 ;INTEGER VARIABLE 770 JSR SUCHVAR ;SUCHEN 780 LDA FTEST ;FLAG FUER VORHANDEN 790 STA FFILETYPEN ;SPEICHERN 800 LDA $45 ;VARIABLENNAME 810 LDX $46 820 STA FILETYPEN ;SPEICHERN 830 STX FILETYPEN+1 840 LDA #$25 ;INTEGER VARIABLE 850 JSR SUCHVAR ;SUCHEN 860 LDA FTEST ;FLAG FUER VORHANDEN 870 STA FFILETRACKS ;SPEICHERN 880 LDA $45 ;VARIABLENNAME 890 LDX $46 900 STA FILETRACKS ;SPEICHERN 910 STX FILETRACKS+1 920 LDA #$25 ;INTEGER VARIABLE 930 JSR SUCHVAR ;SUCHEN 940 LDA FTEST ;FLAG FUER VORHANDEN 950 STA FFILESECTORS ;SPEICHERN 960 LDA $45 ;VARIABLENNAME 970 LDX $46 980 STA FILESECTORS ;SPEICHERN 990 STX FILESECTORS+1 1000 JSR CHECKKOMMA ;PRUEFT AUF KOMMA 1010 LDY #$05 ;TYPFLAGS MIT $FF 1020 LDA #$FF ;FUELLEN 1030 INITFIND DEY 1040 STA FLATYP,Y 1050 INY 1060 DEY 1070 BNE INITFIND 1080 JSR FRMEVL ;STRING HOLEN UND VOM 1090 JSR FRESTR ;STRINGSTACK ENTFERNEN 1100 LDY #$00 1110 LDA ($64),Y ;STRINGLAENGE 1120 STA TYLAN ;SPEICHERN 1130 INY 1140 LDA ($64),Y ;STRINGZEIGER 1150 STA $22 ;SPEICHERN 1160 INY 1170 LDA ($64),Y 1180 STA $23 1190 LDY #$00 ;ZEIGER AUF ERSTEN BST. 1200 TESTTYP LDX #$05 ;AUF CODE TESTEN 1210 NAETEST DEX 1220 LDA ($22),Y 1230 CMP TYP,X 1240 BEQ FINDTYP ;GEFUNDEN 1250 DEX ;NEIN NAECHSTEN CODE 1260 INX 1270 BNE NAETEST ;SCHON LETZTER CODE 1280 JMP ENDFIND ;JA,ENDE CODESUCHE 1290 FINDTYP TXA ;CODE GEFUNDEN 1300 STA FLATYP,X ;SPEICHERN 1310 INY ;NAECHSTER BST. 1320 CPY TYLAN ;SCHON LETZTER 1330 BNE TESTTYP ;NEIN,WEITER SUCHEN 1340 ENDFIND LDA #$02 ;FILEPARAMETER SETZEN 1350 STA $B8 1360 STA $B9 1370 LDA #$08 1380 STA $BA 1390 LDA #$01 1400 STA $B7 1410 LDA #DIREKT 1430 STA $BB 1440 STX $BC 1450 JSR OPEN ;DIREKTKANAL OEFFNEN 1460 LDA #$0F ;FILEPARAMETER SETZEN 1470 STA $B8 1480 STA $B9 1490 LDA #$08 1500 STA $BA 1510 LDA #$00 1520 STA $B7 1530 JSR OPEN ;KOMMANDOKANAL OEFFNEN 1540 LDA #$12 ;ERSTER BLOCK 18/0 SETZEN 1550 STA TRACK 1560 LDA #$00 1570 STA SECTOR 1580 LDA FDISKNAME ;DISKNAME GESUCHT 1590 BEQ NODISKN ;NEIN,SPEICHERN UEBERGEHEN 1600 JSR READTRSE ;BLOCK LESEN 1610 LDX #$02 1620 JSR CHKIN ;EINGABE AUF DIREKTKANAL 1630 LDX #$90 ;ERSTEN 90 BYTE UEBERLESEN 1640 DUMMY1 JSR GET 1650 DEX 1660 BNE DUMMY1 1670 LDX #$00 ;DISKNAME+ID EINLESEN 1680 NOLZBU1 JSR GET 1690 BNE NONULLNAME 1700 LDA #$20 1710 NONULLNAME STA DISKNAME+5,X 1720 INX 1730 CPX #$10 1740 BEQ DUMMY3 1750 CPX #$12 1760 BNE NOLZBU1 1770 JMP ENDDISKN 1780 DUMMY3 JSR GET ;2 BYTE UEBERLESEN 1790 JSR GET 1800 JMP NOLZBU1 1810 ENDDISKN JSR CLRCH;BUS FREIGEBEN 1820 LDA PROZ ;ZEIGER AUF DISKNAME 1830 STA ZEIG 1840 LDA PROZ+1 1850 STA ZEIG+1 1860 LDA #DISKNAME 1890 STA PROZ+1 1900 JSR LET ;DISKNAME UEBERNEHMEN 1910 LDA ZEIG ;ZEIGER RUECKSETZEN 1920 STA PROZ 1930 LDA ZEIG+1 1940 STA PROZ+1 1950 NODISKN LDA #$01 ;BLOCK 18/1 1960 STA SECTOR 1970 LDA #$00 ;ANZAHL EINGELESENER 1980 STA ZAEHL ;FILES RUECKSETZEN 1990 NAESEC JSR READTRSE;BLOCK LESEN 2000 LDX #$02 ;EINGABE AUF DIREKTKANAL 2010 JSR CHKIN 2020 JSR GET ;NAECHSTEN BLOCK 2030 STA TRACK ;MERKEN 2040 JSR GET 2050 STA SECTOR 2060 LDA #$08 ;ANZAHL EINTRAEGE 2070 STA EINTRAG ;PRO BLOCK SETZEN 2080 NAETRAG JSR GET ;FILETYP LESEN 2090 STA TYFLA 2100 JSR GET ;ANFANGSTRACK LESEN 2110 STA $63 ;UND NACH STRING 2120 LDA FFILETRACKS ;ANFANGSTRACK GEFRAGT 2130 BEQ NOTRA ;NEIN,DANN UEBERGEHEN 2140 LDA #$00 2150 STA $62 2160 LDX #$90 2170 SEC 2180 JSR INTNAFAC ;WANDELN 2190 JSR FACNASTRI 2200 CLC 2210 PHP 2220 LDX #$00 ;STRING SPEICHERN 2230 NOLZZIF1 LDA $0100,X 2240 PLP 2250 PHP 2260 BCS JANULL1 2270 CMP #$00 2280 BNE LETZZIF1 2290 PLP 2300 SEC 2310 PHP 2320 JANULL1 LDA #$20 2330 LETZZIF1 STA FILETRACKS+9,X 2340 INX 2350 CPX #$03 2360 BNE NOLZZIF1 2370 PLP 2380 NOTRA JSR GET ;ANFANGSSEKTOR LESEN 2390 STA $63 ;UND NACH STRING 2400 LDA FFILESECTORS ;ANFANGSSEKTORN GEFRAGT 2410 BEQ NOSEC ;NEIN,DANN UEBERLESEN 2420 LDA #$00 2430 STA $62 2440 LDX #$90 2450 SEC 2460 JSR INTNAFAC ;WANDELN 2470 JSR FACNASTRI 2480 CLC 2490 PHP 2500 LDX #$00 ;STRING SPEICHERN 2510 NOLZZIF2 LDA $0100,X 2520 PLP 2530 PHP 2540 BCS JANULL2 2550 CMP #$00 2560 BNE LETZZIF2 2570 PLP 2580 SEC 2590 PHP 2600 JANULL2 LDA #$20 2610 LETZZIF2 STA FILESECTORS+9,X 2620 INX 2630 CPX #$03 2640 BNE NOLZZIF2 2650 PLP 2660 NOSEC LDX #$00 2670 NOLZBU2 JSR GET ;FILENAME LESEN 2680 BNE LETZZIF3 ;UND SPEICHERN 2690 LDA #$20 2700 LETZZIF3 STA FILENAME+10,X 2710 INX 2720 CPX #$10 2730 BNE NOLZBU2 2740 LDX #$09 2750 DUMMY2 JSR GET ;9 BYTES UEBERLESEN 2760 DEX 2770 BNE DUMMY2 2780 JSR GET ;ANZAHL BLOECKE 2790 STA $63 ;DES FILES LESEN 2800 JSR GET ;UND IN STRING 2810 STA $62 2820 LDA FBLOECKE ;BLOECKE GEFRAGT 2830 BEQ NOBLO ;NEIN,DANN UEBERGEHEN 2840 LDX #$90 2850 SEC 2860 JSR INTNAFAC ;WANDELN 2870 JSR FACNASTRI 2880 CLC 2890 PHP 2900 LDX #$00 ;STRING SPEICHERN 2910 NOLZZIF3 LDA $0100,X 2920 PLP 2930 PHP 2940 BCS JANULL3 2950 CMP #$00 2960 BNE LETZZIF4 2970 PLP 2980 SEC 2990 PHP 3000 JANULL3 LDA #$20 3010 LETZZIF4 STA BLOECKE+9,X 3020 INX 3030 CPX #$03 3040 BNE NOLZZIF3 3050 PLP 3060 NOBLO LDA FFILETYPEN;FILETYP GEFRAGT 3070 BEQ NOTYP ;NEIN,DANN UEBERGEHEN 3080 LDX TYFLA ;FILETYP HOLEN 3090 LDA #$00 ;UND NACH STRING 3100 STA $62 3110 STX $63 3120 LDX #$90 3130 SEC 3140 JSR INTNAFAC ;WANDELN 3150 JSR FACNASTRI 3160 CLC 3170 PHP 3180 LDX #$00 ;STRING SPEICHERN 3190 NOLZZIF4 LDA $0100,X 3200 PLP 3210 PHP 3220 BCS JANULL4 3230 CMP #$00 3240 BNE LETZZIF5 3250 PLP 3260 SEC 3270 PHP 3280 JANULL4 LDA #$20 3290 LETZZIF5 STA FILETYPEN+9,X 3300 INX 3310 CPX #$03 3320 BNE NOLZZIF4 3330 PLP 3340 NOTYP LDA TYFLA ;FILETYP 3350 AND #$07 ;AUF CODE TESTEN 3360 LDX #$00 3370 NOLETZTY CMP FLATYP,X 3380 BEQ TRAGEIN ;GEFUNDEN,DANN EINTRAGEN 3390 INX 3400 CPX #$05 3410 BNE NOLETZTY ;SCHON LETZTER CODE 3420 NAEEINTR DEC EINTRAG 3430 BEQ UNAESEC ;LETZTER EINTRAG GELESEN 3440 JSR GET ;NEIN,2 BYTE UEBERLESEN 3450 JSR GET ;UND NAECHSTEN 3460 JMP NAETRAG ;EINTRAG BEARBEITEN 3470 UNAESEC LDA TRACK ;SCHON LETZTER BLOCK 3480 CMP #$00 3490 BEQ ENDE ;JA,DANN ENDE 3500 JMP NAESEC ;NEIN,NAECHSTER BLOCK 3510 TRAGEIN LDX ZAEHL ;ZEIGER AUF 3520 LDA #$00 ;NAECHSTES FELDELEMENT 3530 STA $62 ;NACH STRING 3540 STX $63 3550 LDX #$90 3560 SEC 3570 JSR INTNAFAC ;WANDELN 3580 JSR FACNASTRI 3590 CLC 3600 PHP 3610 LDX #$00 ;UND SPEICHERN 3620 NOLZZIF5 LDA $0100,X 3630 PLP 3640 PHP 3650 BCS JANULL5 3660 CMP #$00 3670 BNE LETZZIF6 3680 PLP 3690 SEC 3700 PHP 3710 JANULL5 LDA #$20 3720 LETZZIF6 STA FILENAME+4,X 3730 STA BLOECKE+4,X 3740 STA FILETYPEN+4,X 3750 STA FILETRACKS+4,X 3760 STA FILESECTORS+4,X 3770 INX 3780 CPX #$03 3790 BNE NOLZZIF5 3800 PLP 3810 INC ZAEHL ;ZEIGER ERHOEHEN 3820 JSR DOLET ;VARIABLEN UEBERNEHMEN 3830 JMP NAEEINTR ;WEITER NAECHSTER EINTRAG 3840 ENDE LDA FANZAHL ;ANZAHL GEFRAGT 3850 BEQ NOANZAHL ;NEIN,DANN UEBERGEHEN 3860 LDA ZAEHL ;ANZAHL ELEMENTE 3870 STA $63 ;NACH STRING 3880 LDA #$00 3890 STA $62 3900 LDX #$90 3910 SEC 3920 JSR INTNAFAC ;WANDELN 3930 JSR FACNASTRI 3940 CLC 3950 PHP 3960 LDX #$00 ;UND SPEICHERN 3970 NOLZZIF6 LDA $0100,X 3980 PLP 3990 PHP 4000 BCS JANULL6 4010 CMP #$00 4020 BNE LETZZIF7 4030 PLP 4040 SEC 4050 PHP 4060 JANULL6 LDA #$20 4070 LETZZIF7 STA ANZAHL+4,X 4080 INX 4090 CPX #$03 4100 BNE NOLZZIF6 4110 PLP 4120 LDA PROZ ;ZEIGER AUF ANZAHL 4130 STA ZEIG ;SETZEN 4140 LDA PROZ+1 4150 STA ZEIG+1 4160 LDA #ANZAHL 4190 STA PROZ+1 4200 JSR LET ;UND UEBERNEHMEN 4210 LDA ZEIG ;ZEIGER RUECKSETZEN 4220 STA PROZ 4230 LDA ZEIG+1 4240 STA PROZ+1 4250 NOANZAHL JSR CLRCH;BUS FREIGEBEN 4260 LDA #$02 ;KANAELE SCHLIESSEN 4270 JSR CLOSE 4280 LDA #$0F 4290 JSR CLOSE 4300 RTS ;ENDE 4310 ; -------------------------------- 4320 READTRSE LDX TRACK;TRACKNUMMER 4330 LDA #$00 ;NACH STRING 4340 STA $62 4350 STX $63 4360 JSR CLRCH 4370 LDX #$90 4380 SEC 4390 JSR INTNAFAC ;WANDELN 4400 JSR FACNASTRI 4410 LDA $0100 ;UND SPEICHERN 4420 STA BREAD+9 4430 LDA $0101 4440 CMP #$00 4450 BNE NONULLTR 4460 LDA #$20 4470 NONULLTR STA BREAD+10 4480 LDX SECTOR ;SEKTORNUMMER 4490 LDA #$00 ;NACH STRING 4500 STA $62 4510 STX $63 4520 LDX #$90 4530 SEC 4540 JSR INTNAFAC ;WANDELN 4550 JSR FACNASTRI 4560 LDA $0100 ;UND SPEICHERN 4570 STA BREAD+12 4580 LDA $0101 4590 CMP #$00 4600 BNE NONULLSEC 4610 LDA #$20 4620 NONULLSEC STA BREAD+13 4630 LDX #$0F ;AUSGABE AUF KOMMANDOK. 4640 JSR CKOUT 4650 LDY #$00 ;U1(B-R) UND B-P SENDEN 4660 SENDZEI LDA BREAD,Y 4670 BEQ ENDSEND 4680 JSR IECOUT 4690 CMP #$0D 4700 BNE NORETURN 4710 JSR ENDBEF 4720 NORETURN INY 4730 BNE SENDZEI 4740 ENDSEND JSR CLRCH ;BUS FREIGEBEN 4750 RTS ;UND ZURUECK 4760 ENDBEF JSR CLRCH 4770 LDX #$0F 4780 JSR CKOUT 4790 RTS 4800 ; -------------------------------- 4810 SUCHVAR PHA ;GESUCHTEN TYP SICHERN 4820 JSR CHECKKOMMA ;AUF KOMMA TESTEN 4830 JSR LCHR(null)T ;1.BST. HOLEN 4840 STA $45 4850 LDX #$00 ;FLAG AUF VORHANDEN 4860 STX FTEST ;RUECKSETZEN 4870 CMP #$2C ;NICHT VORHANDEN 4880 BEQ FERTIG ;DANN FERTIG 4890 JSR LCHR(null)T 4900 JSR PRUEBUCH ;AUF BST. TESTEN 4910 BCS BUCH ;JA,DANN WEITER 4920 ERROR JMP SYNERR ;NEIN,DANN ERROR 4930 BUCH LDX #$20 4940 JSR NCHR(null)T ;NAECHSTES ZEICHEN 4950 BCC ZIFFER1 ;ZIFFER,DANN UEBERNEHMEN 4960 JSR PRUEBUCH ;AUF BST. TESTEN 4970 BCC NOBUCH ;NEIN,DANN WEITER 4980 ZIFFER1 TAX ;JA,DANN UEBERNEHMEN 4990 ZIFFER2 JSR NCHR(null)T;NAECHSTE ZEICHEN 5000 BCC ZIFFER2 ;UEBERLESEN 5010 JSR PRUEBUCH 5020 BCS ZIFFER2 5030 NOBUCH PLA ;GESUCHTER TYP 5040 STA $46 ;SPEICHERN 5050 JSR LCHR(null)T ;GLEICH LETZTEM 5060 CMP $46 ;ZEICHEN 5070 BNE ERROR ;NEIN,DANN ERROR 5080 JSR NCHR(null)T 5090 STX $46 ;2.BST SPEICHERN 5100 LDX #$FF ;FLAG FUER VORHANDEN 5110 STX FTEST ;SETZEN 5120 RTS ;UND FERTIG 5130 FERTIG PLA 5140 RTS ;FERTIG 5150 ; -------------------------------- 5160 DOLET LDA PROZ ;ZEIGER AUF 5170 STA ZEIG 5180 LDA PROZ+1 5190 STA ZEIG+1 5200 LDA #FILENAME 5230 STA PROZ+1 5240 LDA FFILENAME ;FILENAME GEFRAGT 5250 BEQ NOFILENAME ;NEIN,DANN UEBERGEHEN 5260 JSR LET ;JA,DANN UEBERNEHMEN 5270 JSR NCHR(null)T 5280 NOFILENAME LDA FBLOECKE;BLOECKE GEFRAGT 5290 BEQ NOBLOECKE ;NEIN,DANN UEBERGEHEN 5300 LDA #BLOECKE 5330 STA PROZ+1 5340 JSR LET 5350 JSR NCHR(null)T 5360 NOBLOECKE LDA FFILETYPEN;FILETYP GEFRAGT 5370 BEQ NOFILETYPEN ;NEIN,DANN UEBERGEHEN 5380 LDA #FILETYPEN 5410 STA PROZ+1 5420 JSR LET 5430 JSR NCHR(null)T 5440 NOFILETYPEN LDA FFILETRACKS;ANFANGSTRACK GEFRAGT 5450 BEQ NOFILETRACKS ;NEIN,DANN UEBERGEHEN 5460 LDA #FILETRACKS 5490 STA PROZ+1 5500 JSR LET 5510 JSR NCHR(null)T 5520 NOFILETRACKS LDA FFILESECTORS;ANFANGSSEKTORN GEFRAGT 5530 BEQ NOFILESECTORS ;NEIN,DANN UEBERLESEN 5540 LDA #FILESECTORS 5570 STA PROZ+1 5580 JSR LET 5590 NOFILESECTORS LDA ZEIG;ZEIGER RUECKSETZEN 5600 STA PROZ 5610 LDA ZEIG+1 5620 STA PROZ+1 5630 RTS 5640 ; -------------------------------- 5650 ZEIG .BYTE 00,00 ;ZWISCHENSPEICHER DES PROGRAMMS 5660 FILENAME .ASC " $( )";FELD FUER LET-ANWEISUNGEN 5670 .BYTE $B2,$22 5680 .ASC " " 5690 .BYTE $22,$AA,$22,$22,$00 5700 ANZAHL .ASC " %" 5710 .BYTE $B2 5720 .ASC " " 5730 .BYTE $00 5740 BLOECKE .ASC " %( )" 5750 .BYTE $B2 5760 .ASC " " 5770 .BYTE $00 5780 FILETYPEN .ASC " %( )" 5790 .BYTE $B2 5800 .ASC " " 5810 .BYTE $00 5820 FILETRACKS .ASC " %( )" 5830 .BYTE $B2 5840 .ASC " " 5850 .BYTE $00 5860 FILESECTORS .ASC " %( )" 5870 .BYTE $B2 5880 .ASC " " 5890 .BYTE $00 5900 DISKNAME .ASC " $" 5910 .BYTE $B2,$22 5920 .ASC " " 5930 .BYTE $22,$AA,$22,$22 5940 .BYTE $00 5950 TYP .ASC "DSPUR" ;TYP-CODES 5960 DIREKT .ASC "#" ;FELD FUER DISK-KOMMANDOS 5970 BREAD .ASC "U1: 2 0 " 5980 .BYTE $0D 5990 .ASC "B-P 2 0" 6000 .BYTE $0D,$00 6010 FLATYP .BYTE $00,$00,$00,$00,$00;ZWISCHENSPEICHER 6020 TRACK .BYTE $00 6030 SECTOR .BYTE $00 6040 ZAEHL .BYTE $00 6050 EINTRAG .BYTE $00 6060 TYFLA .BYTE $00 6070 TYLAN .BYTE $00 6080 FTEST .BYTE $00 6090 FFILENAME .BYTE $00 6100 FBLOECKE .BYTE $00 6110 FFILETYPEN .BYTE $00 6120 FFILETRACKS .BYTE $00 6130 FFILESECTORS .BYTE $00 6140 FDISKNAME .BYTE $00 6150 FANZAHL .BYTE $00