§ Исходный код

Когда мне было 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 ="                                        "
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¤(,1,39-LEN(FIL¤(C,F)))
54420 GOTO 450
55440 PRINT AT(1,C); CAT¤(C); MID¤(,1,39-LEN(CAT¤(C)))
56450 COLOR 7,0
57460 =INKEY¤
58470 IF ="" THEN 460
59480 IF ="A" OR ="B" OR ="C" OR ="D" OR =CHR¤(13) THEN 520
60490 GOSUB 3000: REM FUNCTION
61500 IF ="4" THEN 1080
62510 GOTO 180
63520 IF ="A" THEN 670
64530 IF ="B" THEN 750
65540 IF ="C" OR ="D" THEN 830
66550 IF =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 ="A" AND CATALOG=0 AND C=1 THEN 460
79680 IF ="A" AND CATALOG=0 AND C>1 THEN 710
80690 IF ="A" AND CATALOG=1 AND F=1 THEN 460
81700 IF ="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 ="B" AND CATALOG=0 AND C=15 THEN 460
87760 IF ="B" AND CATALOG=0 AND C<15 THEN 790
88770 IF ="B" AND CATALOG=1 AND F=15 THEN 460
89780 IF ="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 ="0" THEN 3610
1353005 IF ="1" THEN 4110
1363010 IF ="2" THEN 4480
1373020 IF ="3" THEN 5310
1383030 GOTO 4400
1393040 PRINT AT(30,10); "+===================+"
1403050 PRINT AT(30,11); "| ФАЙЛ:             |"
1413060 PRINT AT(30,12); "+===================+"
1423070 =""
1433080 PRINT AT(36+LEN(),11); 
1443090 =INKEY¤
1453100 IF ="" THEN 3090
1463110 =+
1473115 GOTO 3080
1483120 FOR I=1 TO CAT
1493121 FOR M=1 TO FIL(I)
1503122 IF FIL¤(I,M)= THEN 3126
1513123 NEXT
1523124 NEXT
1533125 GOTO 3250
1543126 FILE¤=: 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  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 =INKEY¤: IF ="" THEN 3310
1743320 IF ="A" AND Y=1 THEN 3290
1753330 IF ="B" AND Y=21 THEN 3290
1763340 IF ="D" AND X=1 THEN 3290
1773350 IF ="C" AND X=78 THEN 3290
1783360 IF =CHR¤(13) THEN GOTO 3480
1793370 IF ="A" THEN Y=Y-1
1803380 IF ="B" THEN Y=Y+1
1813390 IF ="D" THEN X=X-1
1823400 IF ="C" THEN X=X-1
1833410 IF ="A" OR ="B" OR ="C" OR ="D" THEN 3290
1843420 PRINT AT(X,Y); 
1853430 FOR I=1 TO 255
1863440 IF =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 =INKEY¤
2433970 IF ="" THEN 3960
2443980 IF ="A" THEN GOTO 4040
2453990 IF ="B" THEN GOTO 4080
2464000 IF ="C" THEN 4120
2474010 IF ="D" THEN 4170
2484020 IF ="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 =INKEY¤
3064630 IF ="D" THEN 4660
3074640 IF ="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 =INKEY¤
3204770 IF ="1" THEN 4800
3214780 IF ="4" THEN RETURN
3224785 IF ="2" THEN 4870
3234786 IF ="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