§ Исходный код
Когда мне было 12 лет, я на BASIC написал программу Norton Commander. Она была нерабочая, но очень классная для того меня. И я всю жизнь ее берегу как зеницу окаNorton Commander УКНЦ в 12 лет
1REM Сначала написать программочку 2 310 OPEN "DOS" FOR OUTPUT 420 PRINT #"1999 г. NORTON COMMANDER VALERA" 530 PRINT #0 640 CLOSE 7 8RUN 9NEW 10 1110 CLS 1220 WIDTH 80 1330 DIM CAT¤(15),FIL(15),FIL¤(15,16),PROG(512,4),RASH¤(15,16) 1440 OPEN "DOS" FOR INPUT 1550 INPUT #FORM¤ 1660 PRINT FORM¤ 1770 INPUT #CAT 1880 IF CAT=0 THEN 170 1990 FOR I=1 TO CAT 20100 INPUT #CAT¤(I) 21110 INPUT #FIL(I) 22120 FOR M=1 TO FIL(I) 23130 INPUT #FIL¤(I,M+1) 24140 INPUT #RASH¤(I,M+1) 25150 FIL¤(I,1)=".." 26155 RASH¤(I,1)="" 27156 NEXT 28160 NEXT 29170 CLOSE 30180 CLS 31190 C=1 32200 F=1 33201 CATALOG=0 34210 PRINT "+= A:> ===============================++================================+" 35220 FOR I=1 TO 16 36230 PRINT "| || |" 37240 NEXT 38250 PRINT "+=====================================++================================+" 39270 IF CATALOG=0 THEN 330 40280 FOR I=1 TO FIL(C) 41290 PRINT AT(42,I); FIL¤(C,I) 42300 PRINT AT(75,I); RASH¤(C,I) 43310 NEXT 44320 GOTO 360 45330 FOR I=1 TO CAT 46340 PRINT AT(1,I); CAT¤(I) 47350 NEXT 48360 A¤=" " 49370 PRINT AT(0,19); "A:>" 50380 PRINT AT(0,21); "0-РЕДАКТИРОВАНИЕ, 1-НОВКАТ, 2-КОП, 3-ПЕРЕИМ, 4-ВЫХОД" 51390 COLOR 0,7 52400 IF CATALOG=0 THEN 440 53410 PRINT AT(41,F); FIL¤(C,F); MID¤(A¤,1,39-LEN(FIL¤(C,F))) 54420 GOTO 450 55440 PRINT AT(1,C); CAT¤(C); MID¤(A¤,1,39-LEN(CAT¤(C))) 56450 COLOR 7,0 57460 I¤=INKEY¤ 58470 IF I¤="" THEN 460 59480 IF I¤="A" OR I¤="B" OR I¤="C" OR I¤="D" OR I¤=CHR¤(13) THEN 520 60490 GOSUB 3000: REM FUNCTION 61500 IF I¤="4" THEN 1080 62510 GOTO 180 63520 IF I¤="A" THEN 670 64530 IF I¤="B" THEN 750 65540 IF I¤="C" OR I¤="D" THEN 830 66550 IF I¤=CHR¤(13) THEN 930 67560 PRINT AT(0,19) 68570 INPUT "ИМЯ ФАЙЛА"; FILES¤ 69580 FOR I=1 TO CAT 70590 FOR M=1 TO FIL(I) 71600 IF FIL¤(I,M)=FILES¤ THEN 650 72610 NEXT 73620 NEXT 74630 PRINT AT(0,20); "AT DISK NO FILE" 75640 GOTO 180 76650 GOSUB 3000: REM ЗАПРОС ПРОГРАММНЫЙ РЕДАКТОР 77660 GOTO 180 78670 IF I¤="A" AND CATALOG=0 AND C=1 THEN 460 79680 IF I¤="A" AND CATALOG=0 AND C>1 THEN 710 80690 IF I¤="A" AND CATALOG=1 AND F=1 THEN 460 81700 IF I¤="A" AND CATALOG=1 AND F>1 THEN 730 82710 C=C-1 83720 GOTO 270 84730 F=F-1 85740 GOTO 270 86750 IF I¤="B" AND CATALOG=0 AND C=15 THEN 460 87760 IF I¤="B" AND CATALOG=0 AND C<15 THEN 790 88770 IF I¤="B" AND CATALOG=1 AND F=15 THEN 460 89780 IF I¤="B" AND CATALOG=1 AND F<15 THEN 810 90790 C=C+1 91800 GOTO 270 92810 F=F+1 93820 GOTO 270 94830 IF CATALOG=0 THEN 850 95840 IF CATALOG=1 THEN 890 96850 CATALOG=1 97860 CLS 98870 F=1 99880 GOTO 210 100890 CATALOG=0 101900 C=1 102910 CLS 103920 GOTO 210 104930 IF CATALOG=1 AND FIL¤(C,1)=".." THEN 1010 105940 IF CATALOG=0 THEN 960 106950 GOTO 1050 107960 IF CAT¤(C)="" THEN 460 108970 F=1 109980 CATALOG=1 110990 CLS 1111000 GOTO 270 1121010 CATALOG=0 1131020 C=1 1141030 CLS 1151040 GOTO 270 1161050 FILES¤=FIL¤(C,F) 1171060 GOSUB 5000 1181070 GOTO 180 1191080 OPEN "DOS" FOR OUTPUT 1201090 PRINT #FORM¤ 1211100 PRINT #CAT 1221110 FOR I=1 TO CAT 1231120 PRINT #CAT¤(I) 1241130 PRINT #FIL(I) 1251140 FOR M=1 TO FIL(I) 1261150 PRINT #FIL¤(I,M) 1271160 PRINT #RASH¤(I,M) 1281170 NEXT 1291180 NEXT 1301190 CLOSE 1311200 CLS 1321300 END 133 1343000 IF I¤="0" THEN 3610 1353005 IF I¤="1" THEN 4110 1363010 IF I¤="2" THEN 4480 1373020 IF I¤="3" THEN 5310 1383030 GOTO 4400 1393040 PRINT AT(30,10); "+===================+" 1403050 PRINT AT(30,11); "| ФАЙЛ: |" 1413060 PRINT AT(30,12); "+===================+" 1423070 B¤="" 1433080 PRINT AT(36+LEN(B¤),11); I¤ 1443090 I¤=INKEY¤ 1453100 IF I¤="" THEN 3090 1463110 B¤=B¤+I¤ 1473115 GOTO 3080 1483120 FOR I=1 TO CAT 1493121 FOR M=1 TO FIL(I) 1503122 IF FIL¤(I,M)=B¤ THEN 3126 1513123 NEXT 1523124 NEXT 1533125 GOTO 3250 1543126 FILE¤=B¤: PRINT AT(0,22); "ВЫХОД В NORTON COMMANDER" 1553130 OPEN FILE¤ FOR INPUT 1563140 INPUT #CKOLKO 1573150 FOR I=1 TO CKOLKO 1583160 INPUT #PROG(I-INT(I/512)*512,INT(I/512)+1) 1593170 PRINT AT(I-INT(I/79)*79, INT(I/79)+1); CHR¤(PROG(I-INT(I/512)*512,INT(I/512)+1)) 1603180 NEXT 1613190 CLOSE 1623200 PRINT AT(0,0); "+====================================================+" 1633210 PRINT AT(12,0);"ФАЙЛ:"; FILE¤ 1643220 X=1 1653230 Y=1 1663240 GOTO 3290 1673250 OPEN B¤ FOR OUTPUT 1683260 PRINT #0 1693270 CLOSE 1703280 GOTO 3125 1713290 PRINT AT(X,Y); "_" 1723300 PRINT AT(X,Y); CHR¤(PROG(X,Y)) 1733310 I¤=INKEY¤: IF I¤="" THEN 3310 1743320 IF I¤="A" AND Y=1 THEN 3290 1753330 IF I¤="B" AND Y=21 THEN 3290 1763340 IF I¤="D" AND X=1 THEN 3290 1773350 IF I¤="C" AND X=78 THEN 3290 1783360 IF I¤=CHR¤(13) THEN GOTO 3480 1793370 IF I¤="A" THEN Y=Y-1 1803380 IF I¤="B" THEN Y=Y+1 1813390 IF I¤="D" THEN X=X-1 1823400 IF I¤="C" THEN X=X-1 1833410 IF I¤="A" OR I¤="B" OR I¤="C" OR I¤="D" THEN 3290 1843420 PRINT AT(X,Y); I¤ 1853430 FOR I=1 TO 255 1863440 IF I¤=CHR¤(I) THEN 3460 1873450 NEXT 1883460 PROG(X,Y)=I 1893470 GOTO 3190 1903480 OPEN FILE¤ FOR OUTPUT 1913490 PRINT #(Y*78+X)-78*INT((Y*78+X)/78),INT((Y*78+X)/512)+1) 1923500 FOR I=1 TO Y 1933510 FOR M=1 TO X 1943520 PRINT #PROG(M,I) 1953530 NEXT 1963540 NEXT 1973550 CLOSE 1983560 FIL¤(C,F+1)=FILE¤: RASH¤(C,F+1)="TXT" 1993570 F=F+1 2003580 FIL(C)=F 2013590 CATALOG=1 2023600 FOR I=1 TO 4: FOR M=1 TO 512: PROG(M,I)=0: NEXT: NEXT: RETURN 2033610 PRINT AT(0,20); 2043620 INPUT "TXT,EXE,ВЫХ"; A1¤ 2053630 IF A1¤="TXT" THEN 3040 2063640 IF A1¤="EXE" THEN 3660 2073650 IF A1¤="ВЫХ" THEN RETURN 2083660 PRINT AT(0,20); 2093670 INPUT " ИМЯ ФАЙЛ"; NAME¤ 2103680 FOR I=1 TO CAT 2113685 FOR M=1 TO FIL(I) 2123688 IF FIL¤(I,M)=NAME¤ THEN 3740 2133690 NEXT 2143700 NEXT 2153710 OPEN NAME¤ FOR OUTPUT 2163720 PRINT #0 2173730 CLOSE 2183740 OPEN NAME¤ FOR INPUT 2193750 INPUT #CKOLKO 2203760 IF CKOLKO=0 THEN 3820 2213770 FOR I=1 TO CKOLKO 2223780 FOR M=1 TO 4 2233790 INPUT #PROG(I,M) 2243800 NEXT 2253810 NEXT 2263830 C1=1: M=0: PRINT "A-ВВЕРХ, B-ВНИЗ, C-РЕДАКТИРОВАНИЕ, D-ЗАПИСЬ, F-ВЫХОД" 2273840 FOR I=0 TO C1+20: M=M+1: IF PROG(I,1)=0 THEN P=P+1: IF F=1 THEN R1=I 2283850 PRINT AT(2,M); PROG(I,1) 2293860 PRINT AT(6,M); PROG(I,2) 2303870 PRINT AT(10,M); PROG(I,3) 2313880 PRINT AT(14,M); PROG(I,4) 2323890 NEXT: IF MORT=1 THEN 4100 2333900 M=0 2343910 P=0 2353914 IF G=20 THEN P1=1 2363915 G=G+1 2373916 FOR I=1 TO 4 2383920 PRINT AT(0,21); 2393930 INPUT "ЧИСЛО"; TH 2403940 PRINT AT(2+(I-1)*4,6); TH 2413950 NEXT 2423960 I¤=INKEY¤ 2433970 IF I¤="" THEN 3960 2443980 IF I¤="A" THEN GOTO 4040 2453990 IF I¤="B" THEN GOTO 4080 2464000 IF I¤="C" THEN 4120 2474010 IF I¤="D" THEN 4170 2484020 IF I¤="E" THEN 4230 2494030 GOTO 3480 2504040 C1=C1-1 2514050 GOTO 3040 2524060 C1=C1+1: MORT=1 2534070 GOTO 3840 2544080 IF P1=1 THEN 3916 2554090 GOTO 3915 2564100 MORT=0 2574110 GOTO 3960 2584120 PRINT AT(0,21); "СТРОКА, СТОЛБЕЦ" 2594130 INPUT CTPOKA,CTOLBEC 2604140 INPUT "ЧИСЛО ";TH 2614150 PROG(CTOLBEC,CTPOKA)=TH 2624160 GOTO 3914 2634170 OPEN NAME¤ FOR OUTPUT 2644180 PRINT #C1+G,4 2654190 FOR I=1 TO C1+G 2664200 FOR M=1 TO 4 2674210 PRINT #PROG(I,M) 2684220 NEXT 2694230 NEXT 2704235 CLOSE 2714236 F=F+1 2724237 FIL¤(C,F)=NAME¤ 2734238 RASH¤(C,F)="EXE" 2744239 FIL(C)=F 2754240 RETURN 276 2774250 FOR I=1 TO 4 2784260 FOR M=1 TO 512 2794370 PROG(I,M)=0 2804380 NEXT 2814390 NEXT 2824400 RETURN 283 2844410 PRINT AT(0,18); 2854420 INPUT "ИМЯ КАТАЛОГА";COT¤ 2864430 CAT=CAT+1: C=C+1 2874440 CAT¤(CAT)=COT¤ 2884450 FIL¤(C,1)=".." 2894460 FIL(C)=1 2904470 RETURN 291 2924480 CLS 2934490 PRINT "ИМЯ ФАЙЛА ";: INPUT NAME¤ 2944500 PRINT "ВЫБЕРИТЕ ДИСКЕТУ НА КОТОРУЮ КОПИРУЮ" 2954501 OPEN NAME¤ FOR INPUT 2964502 INPUT #KOLBO,G1 2974503 FOR I=1 TO G1-1 2984504 FOR M=1 TO 512 2994505 INPUT #PROG(M,I) 3004506 NEXT 3014507 NEXT 3024508 FOR I=G1 TO C1: FOR M=1 TO KOLBO: INPUT #PROG(M,I): NEXT: NEXT 3034509 CLOSE 3044510 PRINT "ВСТАВИЛИ? (Д/Н)" 3054520 I¤=INKEY¤ 3064630 IF I¤="D" THEN 4660 3074640 IF I¤="N" THEN 4750 3084650 GOTO 4620 3094660 OPEN NAME¤ FOR OUTPUT 3104670 PRINT #KOLBO 3114680 FOR I=1 TO 4 3124690 FOR M=1 TO KOLBO 3134700 PRINT #PROG(M,I) 3144710 PROG(M,I)=0 3154720 NEXT 3164730 NEXT 3174740 GOTO 180 3184750 PRINT "1-УДАЛ, 2-ВОССТАНОВИТЬ, 3-ФОРМАТИРОВАТЬ, 4-ВЫХ" 3194760 I¤=INKEY¤ 3204770 IF I¤="1" THEN 4800 3214780 IF I¤="4" THEN RETURN 3224785 IF I¤="2" THEN 4870 3234786 IF I¤="3" THEN 4920 3244790 GOTO 4760 3254800 IF F=1 THEN 4750 3264810 FOR I=F TO FIL(C)-1 3274820 FIL(C,I)=FIL(C,I+1) 3284830 FIL(C,I+1)="" 3294840 NEXT 3304850 FIL(C)=FIL(C)-1 3314860 RETURN 332 3334870 INPUT "ВОССТАНОВИТЬ КАКОЙ ФАЙЛ, РАСШИРЕНИЕ ";FILEM¤,RASH¤ 3344880 F=F+1 3354890 FIL¤(C,F)=FILEM¤ 3364900 RASH¤(C,F)=RASH¤ 3374910 RETURN 338 3394920 OPEN "DOS" FOR OUTPUT 3404930 PRINT #"1999 г. NORTON COMMANDER VALERA" 3414940 PRINT #0 3424950 CLOSE 3434960 FOR I=1 TO CAT 3444970 FOR M=1 TO FIL(I) 3454980 OPEN FIL¤(I,M) FOR OUTPUT 3465000 PRINT #0 3475010 CLOSE 3485020 NEXT 3495030 NEXT: CAT=0: F=0: C=0 3505040 FOR I=1 TO 15 3515050 CAT¤(I)="" 3525060 FIL(I)=0 3535070 NEXT 3545080 FOR I=1 TO 15 3555090 FOR M=1 TO 16 3565100 FIL¤(I,M)="" 3575110 RASH¤(I,M)="" 3585120 NEXT 3595130 NEXT 3605140 FOR I=1 TO 4 3615150 FOR M=1 TO 512 3625160 PROG(M,I)=0 3635170 NEXT 3645180 NEXT 3655190 CATALOG=0 3665200 RETURN 367 3685300 CLS 3695310 INPUT "СТАРОЕ ИМЯ "; CTNAM¤ 3705320 INPUT "НОВОЕ ИМЯ "; NONAME¤ 3715330 IF CTNAM¤="" THEN 5420 3725340 GOTO 5360 3735350 FIL¤(C,F)=NONAME¤ 3745360 OPEN FIL¤(C,F) FOR INPUT 3755370 FOR I=1 TO 4 3765380 FOR M=1 TO 512 3775390 INPUT # 3785400 NEXT 3795410 NEXT 3805420 PRINT "ФУНКЦИЯ НЕДОСТУПНА!" 3815430 RETURN 382 3836000 IF RASH¤(C,F)="TXT" THEN 6020 3846010 IF RASH¤(C,F)="EXE" THEN 6030 3856020 CLS 3866030 PRINT "ЗАГРУЗКА УТИЛИТЫ РЕДАКТИРОВАНИЯ" 3876040 FOR I=1 TO 2048*2 3886050 NEXT: CLS 3896060 F=1 3906070 GOSUB 3000 3916080 RETURN 392 3936090 OPEN FIL¤(C,F) FOR INPUT 3946100 INPUT #KOLBO,C1 3956110 FOR I=1 TO KOLBO 3966120 FOR M=1 TO 4 3976130 INPUT #PROG(I,M) 3986140 NEXT 3996150 NEXT 4006160 CLOSE 4016161 I=1 4026162 IF I>KOLBO THEN 6370 4036180 IF PROG(I,2)=0 THEN 6330 4046190 IF PROG(I,2)=1 THEN CLS 4056200 IF PROG(I,2)=2 THEN PRINT CHR¤(PROG(I,3)); CHR¤(PROG(I,4)); 4066210 IF PROG(I,2)=3 THEN I=PROG(I,3) 4076220 IF PROG(I,2)=4 THEN LOCATE PROG(PROG(I,3),4), PROG(PROG(I,4), 4) 4086230 IF PROG(I,2)=5 THEN PROG(PROG(I,3),4) = PROG(PROG(I,4),4) + PROG(PROG(I+1,3),4) 4096240 IF PROG(I,2)=6 THEN PROG(PROG(I,3),4) = PROG(PROG(I,4),4) - PROG(PROG(I+1,3),4) 4106250 IF PROG(I,2)=7 THEN PROG(PROG(I,3),4) = PROG(PROG(I,4),4) * PROG(PROG(I+1,3),4) 4116260 IF PROG(I,2)=8 THEN PROG(PROG(I,3),4) = PROG(PROG(I,4),4) / PROG(PROG(I+1,3),4) 4126270 IF PROG(I,2)=9 THEN IF PROG(PROG(I,3),4) = PROG(PROG(I,4),4) THEN I=PROG(I+1,3) 4136280 IF PROG(I,2)=10 THEN IF PROG(PROG(I,3),4) < PROG(PROG(I,4),4) THEN I=PROG(I+1,3) 4146290 IF PROG(I,2)=11 THEN IF PROG(PROG(I,3),4) > PROG(PROG(I,4),4) THEN I=PROG(I+1,3) 4156300 IF PROG(I,2)=12 THEN I=PROG(I,3) 4166310 IF PROG(I,2)=13 THEN LINE(PROG(I,3),PROG(I,4))-(PROG(I+1,3),PROG(I+1,4)),PROG(I+2,3) 4176320 IF PROG(I,2)=14 THEN BEEP 4186340 IF PROG(I,2)=15 THEN PRINT CHR¤(PROG(PROG(I,3)),4); CHR¤(PROG(PROG(I,4),4); 4196350 IF PROG(I,2)=16 THEN PRINT PROG(PROG(I,3),4); 4206360 GOTO 6160 4216370 RETURN