HAMLOG v2.0 TUI — radioamatérský deník
Soubor: hamlog.bas • Data: LOG.TXT, HOME.TXT • Evidence QSO, výpočet vzdálenosti a azimutu z QTH lokátorů (haversine), statistika ODX, detail záznamu, export do ADIF (LOG.ADI). Ovládání: N nové, E<n> upravit, D<n> smazat, V<n> detail, H<txt> hledat, S statistika, X export, O HOME, Q konec.
10 REM *** HAMLOG v2.0 TUI - radioamatersky denik se vzdalenostmi QTH ***
20 REM Log LOG.TXT: DATUM|CAS|ZNACKA|PASMO|MOD|RSTO|RSTR|LOKATOR|POZNAMKA
30 REM Home: HOME.TXT (domaci QTH lokator). Datum RRRRMMDD, cas HHMM.
40 DIM D$(500) : DIM C$(500) : DIM Z$(500) : DIM P$(500) : DIM MO$(500)
50 DIM RO$(500) : DIM RR$(500) : DIM G$(500) : DIM N$(500) : DIM FX(500)
60 DIM KS$(100) : DIM KC(100)
70 N=0 : FILT$="" : top=1 : GOSUB 9000 : GOSUB 9100
100 REM --- HLAVNI OBRAZOVKA: PROHLIZEC LOGU ---
110 IF FILT$<>"" THEN CNT=FN ELSE CNT=N
120 IF CNT<=0 THEN top=1 : last=0 : GOTO 150
130 IF top<1 THEN top=1
140 IF top>CNT THEN top=INT((CNT-1)/12)*12+1
145 last=top+11 : IF last>CNT THEN last=CNT
150 CLS
160 PRINT "HAMLOG v2.0 | HOME: "; HL$; " | QSO:"; N;
170 IF FILT$<>"" THEN PRINT " | Filtr: "; FILT$; " ("; FN; ")" ELSE PRINT ""
180 PRINT "----------------------------------------------------------------"
190 PRINT "No Datum Cas Znacka Pasmo Mod RST Lokator km"
200 PRINT "----------------------------------------------------------------"
210 IF CNT<=0 THEN PRINT "(prazdny log - pridej prvni QSO klavesou N)" : GOTO 380
220 FOR R=top TO last
230 IF FILT$<>"" THEN I=FX(R) ELSE I=R
240 IF G$(I)="" THEN KM$="-" : GOTO 280
250 L$=G$(I) : GOSUB 8400
260 IF OK=0 THEN KM$="-" : GOTO 280
270 GOSUB 8600 : KM$=MID$(STR$(D),2)
280 FV$=MID$(STR$(I),2) : FW=3 : GOSUB 9400 : ROW$=FR$+" "
290 ROW$=ROW$+D$(I)+" "+C$(I)+" "
300 FV$=Z$(I) : FW=10 : GOSUB 9400 : ROW$=ROW$+FR$+" "
310 FV$=P$(I) : FW=5 : GOSUB 9400 : ROW$=ROW$+FR$+" "
320 FV$=MO$(I) : FW=4 : GOSUB 9400 : ROW$=ROW$+FR$+" "
330 FV$=RO$(I)+"/"+RR$(I) : FW=7 : GOSUB 9400 : ROW$=ROW$+FR$+" "
340 FV$=G$(I) : FW=6 : GOSUB 9400 : ROW$=ROW$+FR$+" "
350 FV$=KM$ : FW=5 : GOSUB 9400 : ROW$=ROW$+FR$
360 PRINT ROW$
370 NEXT R
380 PRINT "----------------------------------------------------------------"
390 PG=INT((CNT+11)/12) : IF PG<1 THEN PG=1
395 PRINT "Strana "; INT(top/12)+1; "/"; PG; " N=nove E<n>=upravit D<n>=smazat"
400 PRINT "H<txt>=hledat C=zrusit filtr S=statistika X=export"
405 PRINT "V<n>=detail O=HOME Q=konec"
410 LINE INPUT "> "; V$
420 V$=LCASE$(LTRIM$(RTRIM$(V$)))
430 IF V$="" THEN GOTO 100
440 IF LEFT$(V$,1)="e" THEN GOTO 700
445 IF LEFT$(V$,1)="v" THEN GOTO 740
450 IF LEFT$(V$,1)="d" THEN GOTO 755
460 IF LEFT$(V$,1)="h" THEN GOTO 780
470 SELECT CASE V$
480 CASE "."
490 IF top+12<=CNT THEN top=top+12
495 GOTO 100
500 CASE ","
510 IF top-12>=1 THEN top=top-12
515 GOTO 100
520 CASE "n"
530 GOTO 2000
540 CASE "s"
550 GOTO 4000
560 CASE "x"
570 GOTO 5000
580 CASE "o"
590 GOTO 6000
600 CASE "c"
610 FILT$="" : top=1 : GOTO 100
620 CASE "q"
630 PRINT "73! Nashledanou!" : END
640 CASE ELSE
650 PRINT "Neznamy prikaz!" : LINE INPUT "Enter... "; PAUZA$ : GOTO 100
660 END SELECT
670 GOTO 100
700 REM --- E<cislo> = upravit ---
710 K=VAL(MID$(V$,2))
720 IF K>=1 AND K<=N THEN GOTO 8000
730 PRINT "Spatne cislo! (napr. E3)" : LINE INPUT "Enter... "; PAUZA$ : GOTO 100
740 REM --- V<cislo> = detail vcetne poznamky ---
741 K=VAL(MID$(V$,2))
742 IF K>=1 AND K<=N THEN GOTO 7450
743 PRINT "Spatne cislo! (napr. V3)" : LINE INPUT "Enter... "; PAUZA$ : GOTO 100
7450 CLS : PRINT "=== DETAIL QSO"; K;" ==="
7460 PRINT "Znacka: "; Z$(K)
7470 PRINT "Datum: "; D$(K); " Cas: "; C$(K)
7480 PRINT "Pasmo: "; P$(K); " Mod: "; MO$(K)
7490 PRINT "RST: "; RO$(K); " / "; RR$(K)
7500 PRINT "Lokator: "; G$(K)
7510 IF G$(K)="" THEN GOTO 7530
7520 L$=G$(K) : GOSUB 8400 : GOSUB 8600 : PRINT "Vzdalenost: "; D; "km, azimut "; BD; " st ("; SM$; ")"
7530 PRINT "Poznamka: "; N$(K)
7540 LINE INPUT "Enter pro navrat... "; PAUZA$ : GOTO 100
755 REM --- D<cislo> = smazat ---
760 K=VAL(MID$(V$,2))
770 IF K>=1 AND K<=N THEN GOTO 7000
775 PRINT "Spatne cislo! (napr. D3)" : LINE INPUT "Enter... "; PAUZA$ : GOTO 100
780 REM --- H<text> = hledat ---
790 FILT$=UCASE$(LTRIM$(RTRIM$(MID$(V$,2))))
800 IF FILT$<>"" THEN GOTO 820
810 PRINT "Napis co hledat! (napr. HOK1)" : LINE INPUT "Enter... "; PAUZA$ : GOTO 100
820 GOSUB 9300 : top=1 : GOTO 100
2000 REM --- NOVE QSO (formular) ---
2010 CLS : PRINT "=== NOVE QSO (prazdna znacka = zrusit) ===" : GOSUB 8800 : GOSUB 8850
2020 LINE INPUT "Datum RRRRMMDD (Enter=dnes)? "; X$
2030 IF X$="" THEN X$=DD$
2040 IF LEN(X$)=10 THEN X$=LEFT$(X$,4)+MID$(X$,6,2)+MID$(X$,9,2)
2050 IF LEN(X$)<>8 THEN PRINT "Datum ve formatu RRRRMMDD!" : GOTO 2000
2060 LINE INPUT "Cas HHMM (Enter=ted)? "; Y$
2070 IF Y$="" THEN Y$=TT$
2080 IF LEN(Y$)<>4 THEN PRINT "Cas ve formatu HHMM!" : GOTO 2000
2090 LINE INPUT "Znacka: "; Z1$ : Z1$=UCASE$(LTRIM$(RTRIM$(Z1$)))
2100 IF Z1$="" THEN GOTO 100
2110 LINE INPUT "Pasmo (napr. 20m): "; P1$ : IF P1$="" THEN P1$="?"
2120 LINE INPUT "Mod (napr. SSB): "; M1$ : IF M1$="" THEN M1$="?"
2130 LINE INPUT "RST odeslane (Enter=59): "; R1$ : IF R1$="" THEN R1$="59"
2140 LINE INPUT "RST prijate (Enter=59): "; R2$ : IF R2$="" THEN R2$="59"
2150 LINE INPUT "Lokator protistanice (Enter=neznam): "; L1$
2160 L1$=UCASE$(LTRIM$(RTRIM$(L1$)))
2170 IF L1$="" THEN GOTO 2210
2180 L$=L1$ : GOSUB 8400
2190 IF OK=1 THEN GOTO 2210
2200 PRINT "Spatny lokator!" : GOTO 2150
2210 LINE INPUT "Poznamka: "; W$
2220 IF N>=500 THEN PRINT "Plno!" : LINE INPUT "Enter... "; PAUZA$ : GOTO 100
2230 N=N+1 : D$(N)=X$ : C$(N)=Y$ : Z$(N)=Z1$ : P$(N)=P1$ : MO$(N)=M1$ : RO$(N)=R1$ : RR$(N)=R2$ : G$(N)=L1$ : N$(N)=W$
2240 GOSUB 9500
2250 IF L1$="" THEN PRINT "Ulozeno bez vzdalenosti." : GOTO 2270
2260 GOSUB 8600 : PRINT "Ulozeno: "; D; "km, azimut "; BD; " st ("; SM$; ")"
2270 FILT$="" : top=INT((N-1)/12)*12+1 : IF top<1 THEN top=1
2280 LINE INPUT "Enter pro navrat... "; PAUZA$ : GOTO 100
4000 REM --- STATISTIKA (obrazovka) ---
4010 CLS : PRINT "=== STATISTIKA ==="
4020 IF N<=0 THEN PRINT "(prazdny log)" : LINE INPUT "Enter... "; PAUZA$ : GOTO 100
4030 OD=0 : OX$=""
4040 FOR I=1 TO N
4050 IF G$(I)="" THEN GOTO 4070
4060 L$=G$(I) : GOSUB 8400 : GOSUB 8600 : IF D>OD THEN OD=D : OX$=Z$(I)+" ("+G$(I)+")"
4070 NEXT I
4080 PRINT "QSO celkem:"; N
4090 PRINT "ODX (nejdelsi):"; OD; "km "; OX$
4100 KN=0 : FOR Q=1 TO 100 : KC(Q)=0 : NEXT Q
4110 FOR I=1 TO N
4120 J=0
4130 IF KN<=0 THEN GOTO 4170
4140 FOR Q=1 TO KN
4150 IF KS$(Q)=P$(I) THEN J=Q
4160 NEXT Q
4170 IF J>0 THEN GOTO 4190
4180 KN=KN+1 : KS$(KN)=P$(I) : KC(KN)=1 : GOTO 4200
4190 KC(J)=KC(J)+1
4200 NEXT I
4210 PRINT "--- Dle pasem ---"
4220 FOR Q=1 TO KN
4230 PRINT KS$(Q); ": "; KC(Q)
4240 NEXT Q
4250 KN=0 : FOR Q=1 TO 100 : KC(Q)=0 : NEXT Q
4260 FOR I=1 TO N
4270 J=0
4280 IF KN<=0 THEN GOTO 4320
4290 FOR Q=1 TO KN
4300 IF KS$(Q)=MO$(I) THEN J=Q
4310 NEXT Q
4320 IF J>0 THEN GOTO 4340
4330 KN=KN+1 : KS$(KN)=MO$(I) : KC(KN)=1 : GOTO 4350
4340 KC(J)=KC(J)+1
4350 NEXT I
4360 PRINT "--- Dle modu ---"
4370 FOR Q=1 TO KN
4380 PRINT KS$(Q); ": "; KC(Q)
4390 NEXT Q
4400 LINE INPUT "Enter pro navrat... "; PAUZA$ : GOTO 100
5000 REM --- EXPORT ADIF ---
5010 CLS : PRINT "=== EXPORT ADIF ==="
5020 IF N<=0 THEN PRINT "(prazdny log)" : LINE INPUT "Enter... "; PAUZA$ : GOTO 100
5030 OPEN "O",1,"LOG.ADI"
5040 PRINT #1, "ADIF export z HAMLOGU v2.0"
5050 PRINT #1, "<EOH>"
5060 FOR I=1 TO N
5070 PRINT #1, "<CALL:"+MID$(STR$(LEN(Z$(I))),2)+">"+Z$(I)+" <QSO_DATE:8>"+D$(I)+" <TIME_ON:4>"+C$(I)+" <BAND:"+MID$(STR$(LEN(P$(I))),2)+">"+P$(I)+" <MODE:"+MID$(STR$(LEN(MO$(I))),2)+">"+MO$(I)+" <RST_SENT:"+MID$(STR$(LEN(RO$(I))),2)+">"+RO$(I)+" <RST_RCVD:"+MID$(STR$(LEN(RR$(I))),2)+">"+RR$(I)+" <GRIDSQUARE:"+MID$(STR$(LEN(G$(I))),2)+">"+G$(I)+" <COMMENT:"+MID$(STR$(LEN(N$(I))),2)+">"+N$(I)+" <EOR>"
5080 NEXT I
5090 CLOSE 1
5100 PRINT "Exportovano"; N; "QSO do LOG.ADI"
5110 LINE INPUT "Enter pro navrat... "; PAUZA$ : GOTO 100
6000 REM --- ZMENA HOME QTH ---
6010 CLS : PRINT "=== HOME QTH (nyni "; HL$; ") ==="
6020 LINE INPUT "Novy HOME lokator (Enter=zrusit)? "; HL$
6030 IF HL$="" THEN GOTO 100
6040 HL$=UCASE$(LTRIM$(RTRIM$(HL$)))
6050 L$=HL$ : GOSUB 8400
6060 IF OK=0 THEN PRINT "Spatny lokator!" : GOTO 6000
6070 OPEN "O",1,"HOME.TXT" : PRINT #1, HL$ : CLOSE 1
6080 HLA=LA : HLO=LO
6090 PRINT "HOME nastaveno: "; HL$
6100 LINE INPUT "Enter pro navrat... "; PAUZA$ : GOTO 100
7000 REM --- SMAZAT QSO (s potvrzenim) ---
7010 CLS : PRINT "=== SMAZAT QSO ==="
7020 PRINT K; ") "; D$(K); " "; C$(K); " "; Z$(K); " "; P$(K); " "; MO$(K)
7030 LINE INPUT "Opravdu smazat (A/N)? "; X$
7040 IF UCASE$(X$)<>"A" THEN GOTO 100
7050 IF K>=N THEN GOTO 7080
7060 FOR I=K TO N-1
7070 D$(I)=D$(I+1) : C$(I)=C$(I+1) : Z$(I)=Z$(I+1) : P$(I)=P$(I+1) : MO$(I)=MO$(I+1) : RO$(I)=RO$(I+1) : RR$(I)=RR$(I+1) : G$(I)=G$(I+1) : N$(I)=N$(I+1)
7075 NEXT I
7080 N=N-1 : GOSUB 9500
7090 top=INT((N-1)/12)*12+1 : IF top<1 THEN top=1
7100 PRINT "Smazano. Zbyva:"; N
7110 LINE INPUT "Enter pro navrat... "; PAUZA$ : GOTO 100
8000 REM --- UPRAVIT QSO (Enter=ponechat) ---
8010 CLS : PRINT "--- Uprava QSO"; K;" (Enter=ponechat) ---"
8020 PRINT "Datum ["; D$(K); "]"
8030 LINE INPUT "Nove datum (Enter=ponechat)? "; X$
8040 IF X$="" THEN GOTO 8060
8050 IF LEN(X$)=10 THEN X$=LEFT$(X$,4)+MID$(X$,6,2)+MID$(X$,9,2)
8060 IF LEN(X$)<>8 AND X$<>"" THEN PRINT "Neplatne datum, ponechavam." : GOTO 8080
8070 IF X$<>"" THEN D$(K)=X$
8080 PRINT "Cas ["; C$(K); "]"
8090 LINE INPUT "Novy cas (Enter=ponechat)? "; X$
8100 IF X$="" THEN GOTO 8120
8110 IF LEN(X$)=4 THEN C$(K)=X$
8112 IF LEN(X$)<>4 THEN PRINT "Neplatny cas, ponechavam."
8120 PRINT "Znacka ["; Z$(K); "]"
8140 LINE INPUT "Nova znacka (Enter=ponechat)? "; X$
8150 IF X$="" THEN GOTO 8170
8160 X$=UCASE$(LTRIM$(RTRIM$(X$)))
8170 IF X$="" THEN GOTO 8190
8180 IF X$<>"" THEN Z$(K)=X$
8190 PRINT "Pasmo ["; P$(K); "]"
8200 LINE INPUT "Nove pasmo (Enter=ponechat)? "; X$ : IF X$<>"" THEN P$(K)=X$
8210 PRINT "Mod ["; MO$(K); "]"
8220 LINE INPUT "Novy mod (Enter=ponechat)? "; X$ : IF X$<>"" THEN MO$(K)=X$
8230 PRINT "RST odeslane ["; RO$(K); "]"
8240 LINE INPUT "Nove RST odeslane (Enter=ponechat)? "; X$ : IF X$<>"" THEN RO$(K)=X$
8250 PRINT "RST prijate ["; RR$(K); "]"
8260 LINE INPUT "Nove RST prijate (Enter=ponechat)? "; X$ : IF X$<>"" THEN RR$(K)=X$
8270 PRINT "Lokator ["; G$(K); "]"
8280 LINE INPUT "Novy lokator (Enter=ponechat)? "; X$
8290 IF X$="" THEN GOTO 8340
8300 X$=UCASE$(LTRIM$(RTRIM$(X$)))
8310 L$=X$ : GOSUB 8400
8320 IF OK=1 THEN G$(K)=X$
8325 IF OK=0 THEN PRINT "Spatny lokator, ponechavam."
8340 PRINT "Poznamka ["; N$(K); "]"
8350 LINE INPUT "Nova poznamka (Enter=ponechat)? "; X$ : IF X$<>"" THEN N$(K)=X$
8360 GOSUB 9500
8370 PRINT "Ulozeno."
8380 IF G$(K)="" THEN GOTO 8395
8390 L$=G$(K) : GOSUB 8400 : GOSUB 8600 : PRINT "Vzdalenost: "; D; "km, azimut "; BD; " st ("; SM$; ")"
8395 LINE INPUT "Enter pro navrat... "; PAUZA$ : GOTO 100
8400 REM --- LOKATOR v L$ -> LA,LO [rad], OK ---
8410 OK=0 : L$=UCASE$(LTRIM$(RTRIM$(L$)))
8420 IF LEN(L$)=4 OR LEN(L$)=6 THEN GOTO 8440
8430 RETURN
8440 A1=ASC(LEFT$(L$,1))-65 : A2=ASC(MID$(L$,2,1))-65
8450 IF A1<0 OR A1>17 OR A2<0 OR A2>17 THEN RETURN
8460 D1=VAL(MID$(L$,3,1)) : D2=VAL(MID$(L$,4,1))
8470 IF D1<0 OR D1>9 OR D2<0 OR D2>9 THEN RETURN
8480 IF D1=0 AND MID$(L$,3,1)<>"0" THEN RETURN
8490 IF D2=0 AND MID$(L$,4,1)<>"0" THEN RETURN
8500 LO=A1*20+D1*2-180 : LA=A2*10+D2-90
8510 IF LEN(L$)=4 THEN LO=LO+1 : LA=LA+0.5 : GOTO 8550
8520 E1=ASC(MID$(L$,5,1))-65 : E2=ASC(MID$(L$,6,1))-65
8530 IF E1<0 OR E1>23 OR E2<0 OR E2>23 THEN RETURN
8540 LO=LO+(E1+0.5)/12 : LA=LA+(E2+0.5)/24
8550 LO=LO*PI/180 : LA=LA*PI/180 : OK=1 : RETURN
8600 REM --- VZDALENOST/AZIMUT HLA,HLO,LA,LO -> D km,BD st,SM$ ---
8610 DL=LO-HLO
8620 A=(SIN((LA-HLA)/2))^2+COS(HLA)*COS(LA)*(SIN(DL/2))^2
8630 IF A>=1 THEN A=0.99999999
8640 IF A<=0 THEN D=0 : GOTO 8670
8650 C=2*ATN(SQR(A)/SQR(1-A))
8660 D=INT(6371*C+0.5)
8670 Y=SIN(DL)*COS(LA) : X=COS(HLA)*SIN(LA)-SIN(HLA)*COS(LA)*COS(DL)
8680 IF X>0 THEN B=ATN(Y/X) : GOTO 8720
8690 IF X<0 THEN B=ATN(Y/X)+PI : GOTO 8720
8700 IF Y>0 THEN B=PI/2 : GOTO 8720
8710 IF Y<0 THEN B=-PI/2 : GOTO 8720
8715 B=0
8720 IF B<0 THEN B=B+2*PI
8730 BD=INT(B*180/PI+0.5) : IF BD>=360 THEN BD=BD-360
8740 IX=INT((BD+22.5)/45) : IF IX>=8 THEN IX=IX-8
8745 SM$="S"
8750 IF IX=1 THEN SM$="SV"
8752 IF IX=2 THEN SM$="V"
8754 IF IX=3 THEN SM$="JV"
8756 IF IX=4 THEN SM$="J"
8758 IF IX=5 THEN SM$="JZ"
8760 IF IX=6 THEN SM$="Z"
8762 IF IX=7 THEN SM$="SZ"
8770 RETURN
8800 REM --- DNESNI DATUM -> DD$ (RRRRMMDD) ---
8810 DS$=DATE$ : YR$=RIGHT$(DS$,4) : MA$=MID$(DS$,5,3) : DY$=MID$(DS$,9,2)
8820 IF LEFT$(DY$,1)=" " THEN DY$="0"+RIGHT$(DY$,1)
8830 MI=INT(INSTR("JanFebMarAprMayJunJulAugSepOctNovDec",MA$)/3)+1
8840 MM$=MID$("010203040506070809101112",MI*2-1,2) : DD$=YR$+MM$+DY$ : RETURN
8850 REM --- AKTUALNI CAS -> TT$ (HHMM) ---
8860 TT$=LEFT$(TIME$,2)+MID$(TIME$,4,2) : RETURN
9000 REM --- NACTENI LOGU ---
9010 N=0
9020 OPEN "LOG.TXT" FOR INPUT AS #1
9030 WHILE NOT EOF(1)
9040 LINE INPUT #1, Q$
9050 IF Q$="" THEN GOTO 9080
9060 N=N+1
9070 D$(N)=FIELD$(Q$,1,"|") : C$(N)=FIELD$(Q$,2,"|") : Z$(N)=FIELD$(Q$,3,"|") : P$(N)=FIELD$(Q$,4,"|") : MO$(N)=FIELD$(Q$,5,"|") : RO$(N)=FIELD$(Q$,6,"|") : RR$(N)=FIELD$(Q$,7,"|") : G$(N)=FIELD$(Q$,8,"|") : N$(N)=FIELD$(Q$,9,"|")
9080 WEND
9090 CLOSE 1
9095 RETURN
9100 REM --- HOME QTH ---
9110 HL$=""
9120 OPEN "HOME.TXT" FOR INPUT AS #1
9130 IF EOF(1) THEN GOTO 9150
9140 LINE INPUT #1, HL$
9150 CLOSE 1
9160 HL$=UCASE$(LTRIM$(RTRIM$(HL$)))
9170 IF HL$="" THEN GOTO 9200
9180 L$=HL$ : GOSUB 8400
9190 IF OK=1 THEN GOTO 9240
9200 LINE INPUT "Domaci QTH lokator (napr. JO70PO)? "; HL$
9210 HL$=UCASE$(LTRIM$(RTRIM$(HL$)))
9220 L$=HL$ : GOSUB 8400
9230 IF OK=0 THEN PRINT "Spatny lokator, zkus znovu." : GOTO 9200
9235 OPEN "O",1,"HOME.TXT" : PRINT #1, HL$ : CLOSE 1
9240 HLA=LA : HLO=LO : RETURN
9300 REM --- FILTR FILT$ -> FX(),FN ---
9310 FN=0
9320 IF N<=0 THEN RETURN
9330 FOR I=1 TO N
9340 IF INSTR(Z$(I),FILT$)=0 THEN GOTO 9360
9350 FN=FN+1 : FX(FN)=I
9360 NEXT I
9370 RETURN
9400 REM --- ZAROVNANI FV$ na FW znaku -> FR$ ---
9410 FR$=LEFT$(FV$,FW) : L=LEN(FR$) : IF L<FW THEN FR$=FR$+SPACE$(FW-L)
9420 RETURN
9500 REM --- ULOZENI LOGU ---
9510 OPEN "O",1,"LOG.TXT"
9520 IF N<=0 THEN GOTO 9560
9530 FOR I=1 TO N
9540 PRINT #1, D$(I)+"|"+C$(I)+"|"+Z$(I)+"|"+P$(I)+"|"+MO$(I)+"|"+RO$(I)+"|"+RR$(I)+"|"+G$(I)+"|"+N$(I)
9550 NEXT I
9560 CLOSE 1
9570 RETURN
KATALOG KNIH v1.0
Soubor: knihy.bas • Data: KNIHY.TXT (formát TITUL|AUTOR|ROK|POZNAMKA) • Evidence knih: přidání, výpis, hledání v titulu/autorovi, mazání.
10 REM *** KATALOG KNIH v1.0 - prakticka aplikace pro PEBASIC ***
20 REM Soubor KNIHY.TXT, format radku: TITUL|AUTOR|ROK|POZNAMKA
30 N=0 : DIM T$(500) : DIM A$(500) : DIM R$(500) : DIM P$(500)
40 GOSUB 9000
50 CLS
60 PRINT "==========================="
70 PRINT " KATALOG KNIH v1.0"
80 PRINT "==========================="
90 PRINT "Knih v evidenci:"; N
100 PRINT ""
110 PRINT "1) Pridat knihu"
120 PRINT "2) Vypsat vse"
130 PRINT "3) Hledat"
140 PRINT "4) Smazat"
150 PRINT "5) Konec"
160 LINE INPUT "Volba (1-5)? "; V$
170 IF V$="1" THEN GOTO 1000
180 IF V$="2" THEN GOTO 2000
190 IF V$="3" THEN GOTO 3000
200 IF V$="4" THEN GOTO 4000
210 IF V$="5" THEN PRINT "Ulozeno. Nashledanou!" : END
220 PRINT "Neplatna volba!" : LINE INPUT "Enter pro navrat... "; PAUZA$ : GOTO 50
1000 REM --- PRIDAT ---
1010 IF N>=500 THEN PRINT "Plno! Vice se nevejde." : GOTO 50
1020 LINE INPUT "Titul: "; X$
1030 IF X$="" THEN PRINT "Titul je povinny!" : GOTO 50
1040 LINE INPUT "Autor: "; Y$
1050 LINE INPUT "Rok: "; Z$
1060 LINE INPUT "Poznamka: "; W$
1070 N=N+1 : T$(N)=X$ : A$(N)=Y$ : R$(N)=Z$ : P$(N)=W$
1080 GOSUB 9500
1090 PRINT "Ulozeno jako cislo"; N
1095 LINE INPUT "Enter pro navrat... "; PAUZA$
1100 GOTO 50
2000 REM --- VYPIS VSE ---
2010 IF N<=0 THEN PRINT "(prazdny katalog)" : GOTO 50
2020 FOR I=1 TO N
2030 PRINT I; ") "; T$(I); " - "; A$(I); " ("; R$(I); ")"
2040 IF P$(I)<>"" THEN PRINT " Pozn: "; P$(I)
2050 NEXT I
2060 PRINT "Celkem:"; N
2065 LINE INPUT "Enter pro navrat... "; PAUZA$
2070 GOTO 50
3000 REM --- HLEDAT ---
3010 IF N<=0 THEN PRINT "(prazdny katalog)" : GOTO 50
3020 LINE INPUT "Hledam (cast titulu nebo autora): "; H$
3030 H$=LCASE$(H$)
3040 F=0
3050 FOR I=1 TO N
3060 IF INSTR(LCASE$(T$(I)+" "+A$(I)),H$)>0 THEN PRINT I; ") "; T$(I); " - "; A$(I); " ("; R$(I); ")" : F=F+1
3070 NEXT I
3080 PRINT "Nalezeno:"; F
3085 LINE INPUT "Enter pro navrat... "; PAUZA$
3090 GOTO 50
4000 REM --- SMAZAT ---
4010 IF N<=0 THEN PRINT "(prazdny katalog)" : GOTO 50
4020 FOR I=1 TO N
4030 PRINT I; ") "; T$(I); " - "; A$(I)
4040 NEXT I
4050 LINE INPUT "Smazat cislo (Enter=zrusit)? "; X$
4060 IF X$="" THEN GOTO 50
4070 K=INT(VAL(X$))
4080 IF K<1 OR K>N THEN PRINT "Neplatne cislo!" : GOTO 50
4090 PRINT "Mazu: "; T$(K)
4100 IF K>=N THEN GOTO 4130
4110 FOR I=K TO N-1
4120 T$(I)=T$(I+1) : A$(I)=A$(I+1) : R$(I)=R$(I+1) : P$(I)=P$(I+1)
4125 NEXT I
4130 N=N-1
4140 GOSUB 9500
4150 PRINT "Smazano. Zbyva:"; N
4155 LINE INPUT "Enter pro navrat... "; PAUZA$
4160 GOTO 50
9000 REM --- NACTENI ZE SOUBORU ---
9010 N=0
9020 OPEN "KNIHY.TXT" FOR INPUT AS #1
9030 WHILE NOT EOF(1)
9040 LINE INPUT #1, Q$
9045 IF Q$="" THEN GOTO 9070
9050 N=N+1
9060 T$(N)=FIELD$(Q$,1,"|") : A$(N)=FIELD$(Q$,2,"|") : R$(N)=FIELD$(Q$,3,"|") : P$(N)=FIELD$(Q$,4,"|")
9070 WEND
9080 CLOSE 1
9090 RETURN
9500 REM --- ULOZENI DO SOUBORU ---
9510 OPEN "O",1,"KNIHY.TXT"
9520 IF N<=0 THEN GOTO 9560
9530 FOR I=1 TO N
9540 PRINT #1, T$(I)+"|"+A$(I)+"|"+R$(I)+"|"+P$(I)
9550 NEXT I
9560 CLOSE 1
9570 RETURN
DIÁŘ v1.0 — úkolovník
Soubor: diar.bas • Data: DIAR.TXT (formát DATUM|UKOL|HOTOVO) • Úkoly s datem, výpis všeho / jen nesplněných, odškrtávání, mazání splněných.
10 REM *** DIAR v1.0 - ukolovnik pro PEBASIC *** 20 REM Soubor DIAR.TXT, format radku: DATUM|UKOL|HOTOVO (0/1) 30 REM Datum pis jako RRRR-MM-DD, prazdne = DNES. 40 N=0 : DIM D$(500) : DIM U$(500) : DIM H(500) 50 GOSUB 9000 60 CLS 70 PRINT "======================" 80 PRINT " DIAR v1.0" 90 PRINT "======================" 100 PRINT "Ukolu:"; N 110 PRINT "" 120 PRINT "1) Pridat ukol" 130 PRINT "2) Vypsat vse" 140 PRINT "3) Jen nesplnene" 150 PRINT "4) Splnit ukol" 160 PRINT "5) Smazat splnene" 170 PRINT "6) Konec" 180 LINE INPUT "Volba (1-6)? "; V$ 190 IF V$="1" THEN GOTO 1000 200 IF V$="2" THEN GOTO 2000 210 IF V$="3" THEN GOTO 2500 220 IF V$="4" THEN GOTO 3000 230 IF V$="5" THEN GOTO 4000 240 IF V$="6" THEN PRINT "Ulozeno. Nashledanou!" : END 250 PRINT "Neplatna volba!" : LINE INPUT "Enter pro navrat... "; PAUZA$ : GOTO 60 1000 REM --- PRIDAT --- 1010 LINE INPUT "Datum RRRR-MM-DD (Enter=DNES)? "; X$ 1020 IF X$="" THEN X$="DNES" 1030 LINE INPUT "Ukol: "; Y$ 1040 IF Y$="" THEN PRINT "Prazdny ukol neukladam!" : GOTO 60 1050 IF N>=500 THEN PRINT "Plno!" : GOTO 60 1060 N=N+1 : D$(N)=X$ : U$(N)=Y$ : H(N)=0 1070 GOSUB 9500 1080 PRINT "Ulozeno jako cislo"; N 1085 LINE INPUT "Enter pro navrat... "; PAUZA$ 1090 GOTO 60 2000 REM --- VYPIS VSE --- 2010 IF N<=0 THEN PRINT "(zadne ukoly)" : GOTO 60 2020 FOR I=1 TO N 2030 IF H(I)=1 THEN ZN$="[X]" ELSE ZN$="[ ]" 2040 PRINT I; ") "; ZN$; " "; D$(I); " "; U$(I) 2050 NEXT I 2055 LINE INPUT "Enter pro navrat... "; PAUZA$ 2060 GOTO 60 2500 REM --- JEN NESPLNENE --- 2510 IF N<=0 THEN PRINT "(zadne ukoly)" : GOTO 60 2520 F=0 2530 FOR I=1 TO N 2540 IF H(I)=0 THEN PRINT I; ") "; D$(I); " "; U$(I) : F=F+1 2550 NEXT I 2560 PRINT "Nesplneno:"; F 2565 LINE INPUT "Enter pro navrat... "; PAUZA$ 2570 GOTO 60 3000 REM --- SPLNIT --- 3010 IF N<=0 THEN PRINT "(zadne ukoly)" : GOTO 60 3020 F=0 3030 FOR I=1 TO N 3040 IF H(I)=0 THEN PRINT I; ") "; D$(I); " "; U$(I) : F=F+1 3050 NEXT I 3060 IF F<=0 THEN PRINT "Vse splneno. Pecka!" : LINE INPUT "Enter pro navrat... "; PAUZA$ : GOTO 60 3070 LINE INPUT "Ktery je hotovy (Enter=zrusit)? "; X$ 3080 IF X$="" THEN GOTO 60 3090 K=INT(VAL(X$)) 3100 IF K<1 OR K>N THEN PRINT "Neplatne cislo!" : GOTO 60 3110 IF H(K)=1 THEN PRINT "Ten uz je splneny!" : GOTO 60 3120 H(K)=1 3130 GOSUB 9500 3140 PRINT "Splneno: "; U$(K) 3145 LINE INPUT "Enter pro navrat... "; PAUZA$ 3150 GOTO 60 4000 REM --- SMAZAT SPLNENE --- 4010 IF N<=0 THEN PRINT "(zadne ukoly)" : GOTO 60 4020 M=0 4030 FOR I=1 TO N 4040 IF H(I)=0 THEN M=M+1 : D$(M)=D$(I) : U$(M)=U$(I) : H(M)=0 4050 NEXT I 4060 PRINT "Smazano splnenych:"; N-M 4065 LINE INPUT "Enter pro navrat... "; PAUZA$ 4070 N=M 4080 GOSUB 9500 4090 GOTO 60 9000 REM --- NACTENI ZE SOUBORU --- 9010 N=0 9020 OPEN "DIAR.TXT" FOR INPUT AS #1 9030 WHILE NOT EOF(1) 9040 LINE INPUT #1, Q$ 9045 IF Q$="" THEN GOTO 9070 9050 N=N+1 9060 D$(N)=FIELD$(Q$,1,"|") : U$(N)=FIELD$(Q$,2,"|") : H(N)=VAL(FIELD$(Q$,3,"|")) 9070 WEND 9080 CLOSE 1 9090 RETURN 9500 REM --- ULOZENI DO SOUBORU --- 9510 OPEN "O",1,"DIAR.TXT" 9520 IF N<=0 THEN GOTO 9560 9530 FOR I=1 TO N 9540 PRINT #1, D$(I)+"|"+U$(I)+"|"+STR$(H(I)) 9550 NEXT I 9560 CLOSE 1 9570 RETURN
ROZPOČET v1.0 — domácí rozpočet
Soubor: rozpocet.bas • Data: ROZPOCET.TXT (formát DATUM|KATEGORIE|POPIS|CASTKA, kladná = příjem, záporná = výdaj) • Souhrn příjmy/výdaje/bilance + rozpis dle kategorií.
10 REM *** ROZPOCET v1.0 - domaci rozpocet pro PEBASIC *** 20 REM Soubor ROZPOCET.TXT, format: DATUM|KATEGORIE|POPIS|CASTKA 30 REM Castka: kladne = prijem, zaporne = vydaj. 40 N=0 : DIM D$(500) : DIM K$(500) : DIM P$(500) : DIM E(500) 50 GOSUB 9000 60 CLS 70 PRINT "======================" 80 PRINT " ROZPOCET v1.0" 90 PRINT "======================" 100 PRINT "Zaznamu:"; N 110 PRINT "" 120 PRINT "1) Pridat zaznam" 130 PRINT "2) Vypsat vse" 140 PRINT "3) Souhrn" 150 PRINT "4) Smazat" 160 PRINT "5) Konec" 170 LINE INPUT "Volba (1-5)? "; V$ 180 IF V$="1" THEN GOTO 1000 190 IF V$="2" THEN GOTO 2000 200 IF V$="3" THEN GOTO 3000 210 IF V$="4" THEN GOTO 4000 220 IF V$="5" THEN PRINT "Ulozeno. Nashledanou!" : END 230 PRINT "Neplatna volba!" : LINE INPUT "Enter pro navrat... "; PAUZA$ : GOTO 60 1000 REM --- PRIDAT --- 1010 LINE INPUT "Datum (Enter=DNES)? "; X$ 1020 IF X$="" THEN X$="DNES" 1030 LINE INPUT "Kategorie (Enter=Ruzne)? "; Y$ 1040 IF Y$="" THEN Y$="Ruzne" 1050 LINE INPUT "Popis: "; Z$ 1060 IF Z$="" THEN PRINT "Popis je povinny!" : GOTO 60 1070 LINE INPUT "Castka (+prijem / -vydaj): "; S$ 1080 W=VAL(S$) 1090 IF W=0 AND S$<>"0" THEN PRINT "To neni cislo!" : GOTO 60 1100 IF N>=500 THEN PRINT "Plno!" : GOTO 60 1110 N=N+1 : D$(N)=X$ : K$(N)=Y$ : P$(N)=Z$ : E(N)=W 1120 GOSUB 9500 1130 PRINT "Ulozeno." 1135 LINE INPUT "Enter pro navrat... "; PAUZA$ 1140 GOTO 60 2000 REM --- VYPIS VSE --- 2010 IF N<=0 THEN PRINT "(zadne zaznamy)" : GOTO 60 2020 FOR I=1 TO N 2030 PRINT I; ") "; D$(I); " ["; K$(I); "] "; P$(I); " "; E(I) 2040 NEXT I 2045 LINE INPUT "Enter pro navrat... "; PAUZA$ 2050 GOTO 60 3000 REM --- SOUHRN --- 3010 IF N<=0 THEN PRINT "(zadne zaznamy)" : GOTO 60 3020 PRIJ=0 : VYD=0 3030 FOR I=1 TO N 3040 IF E(I)>0 THEN PRIJ=PRIJ+E(I) 3050 IF E(I)<0 THEN VYD=VYD-E(I) 3060 NEXT I 3070 PRINT "Prijmy:"; PRIJ; " Vydaje:"; VYD; " Bilance:"; PRIJ-VYD 3080 DIM KS$(100) : DIM KC(100) : KN=0 3085 FOR Q=1 TO 100 : KC(Q)=0 : NEXT Q 3090 FOR I=1 TO N 3100 J=0 3110 IF KN<=0 THEN GOTO 3150 3120 FOR Q=1 TO KN 3130 IF KS$(Q)=K$(I) THEN J=Q 3140 NEXT Q 3150 IF J>0 THEN GOTO 3170 3160 KN=KN+1 : KS$(KN)=K$(I) : KC(KN)=E(I) : GOTO 3180 3170 KC(J)=KC(J)+E(I) 3180 NEXT I 3190 PRINT "--- Dle kategorii ---" 3200 FOR Q=1 TO KN 3210 PRINT KS$(Q); ": "; KC(Q) 3220 NEXT Q 3225 LINE INPUT "Enter pro navrat... "; PAUZA$ 3230 GOTO 60 4000 REM --- SMAZAT --- 4010 IF N<=0 THEN PRINT "(zadne zaznamy)" : GOTO 60 4020 FOR I=1 TO N 4030 PRINT I; ") "; D$(I); " "; P$(I); " "; E(I) 4040 NEXT I 4050 LINE INPUT "Smazat cislo (Enter=zrusit)? "; X$ 4060 IF X$="" THEN GOTO 60 4070 Q=INT(VAL(X$)) 4080 IF Q<1 OR Q>N THEN PRINT "Neplatne cislo!" : GOTO 60 4090 PRINT "Mazu: "; P$(Q) 4100 IF Q>=N THEN GOTO 4130 4110 FOR I=Q TO N-1 4120 D$(I)=D$(I+1) : K$(I)=K$(I+1) : P$(I)=P$(I+1) : E(I)=E(I+1) 4125 NEXT I 4130 N=N-1 4140 GOSUB 9500 4150 PRINT "Smazano. Zbyva:"; N 4155 LINE INPUT "Enter pro navrat... "; PAUZA$ 4160 GOTO 60 9000 REM --- NACTENI ZE SOUBORU --- 9010 N=0 9020 OPEN "ROZPOCET.TXT" FOR INPUT AS #1 9030 WHILE NOT EOF(1) 9040 LINE INPUT #1, Q$ 9045 IF Q$="" THEN GOTO 9070 9050 N=N+1 9060 D$(N)=FIELD$(Q$,1,"|") : K$(N)=FIELD$(Q$,2,"|") : P$(N)=FIELD$(Q$,3,"|") : E(N)=VAL(FIELD$(Q$,4,"|")) 9070 WEND 9080 CLOSE 1 9090 RETURN 9500 REM --- ULOZENI DO SOUBORU --- 9510 OPEN "O",1,"ROZPOCET.TXT" 9520 IF N<=0 THEN GOTO 9560 9530 FOR I=1 TO N 9540 PRINT #1, D$(I)+"|"+K$(I)+"|"+P$(I)+"|"+STR$(E(I)) 9550 NEXT I 9560 CLOSE 1 9570 RETURN
IP KALKULÁTOR v1.0
Soubor: ipkalk.bas • Výpočet sítě, broadcastu, wildcardu a rozsahu z IP + masky (CIDR i tečkovaná), převodník masek, dělení sítě na podsítě. Bez ukládání do souborů.
10 REM *** IP KALKULATOR v1.0 - masky, site, podsité pro PEBASIC *** 20 DIM IO(4) : DIM MO(4) : DIM NW(4) : DIM BC(4) : DIM WC(4) 30 CLS 40 PRINT "======================" 50 PRINT " IP KALKULATOR v1.0" 60 PRINT "======================" 70 PRINT "1) Vypocet site (IP + maska)" 80 PRINT "2) Prevodnik maska <-> CIDR" 90 PRINT "3) Deleni site na podsité" 100 PRINT "4) Konec" 110 LINE INPUT "Volba (1-4)? "; V$ 120 IF V$="1" THEN GOTO 1000 130 IF V$="2" THEN GOTO 2000 140 IF V$="3" THEN GOTO 3000 150 IF V$="4" THEN PRINT "Nashledanou!" : END 160 PRINT "Neplatna volba!" : LINE INPUT "Enter pro navrat... "; PAUZA$ : GOTO 30 1000 REM --- VYPOCET SITE --- 1010 LINE INPUT "IP adresa (napr. 192.168.1.10): "; Q$ : GOSUB 8000 1020 IF OK=1 THEN GOTO 1040 1030 PRINT "Spatna IP!" : LINE INPUT "Enter pro navrat... "; PAUZA$ : GOTO 30 1040 LINE INPUT "Maska (/24 nebo 255.255.255.0): "; M$ : GOSUB 8100 1050 IF OK=1 THEN GOTO 1070 1060 PRINT "Spatna maska!" : LINE INPUT "Enter pro navrat... "; PAUZA$ : GOTO 30 1070 FOR J=1 TO 4 1080 IF MO(J)=255 THEN NW(J)=IO(J) : GOTO 1110 1090 IF MO(J)=0 THEN NW(J)=0 : GOTO 1110 1100 BL=256-MO(J) : NW(J)=INT(IO(J)/BL)*BL 1110 BC(J)=NW(J)+255-MO(J) : WC(J)=255-MO(J) 1120 NEXT J 1130 PRINT "IP: "; Q$ 1140 PRINT "Maska: "; MO(1); "."; MO(2); "."; MO(3); "."; MO(4); " /"; P 1150 PRINT "Binarne: "; BIN$(IO(1),8); "."; BIN$(IO(2),8); "."; BIN$(IO(3),8); "."; BIN$(IO(4),8) 1160 PRINT "Sit: "; NW(1); "."; NW(2); "."; NW(3); "."; NW(4) 1170 PRINT "Broadcast: "; BC(1); "."; BC(2); "."; BC(3); "."; BC(4) 1180 PRINT "Wildcard: "; WC(1); "."; WC(2); "."; WC(3); "."; WC(4) 1190 H=2^(32-P) 1200 IF P=32 THEN GOTO 1260 1210 IF P=31 THEN GOTO 1280 1220 H=H-2 1230 T=NW(1)*16777216+NW(2)*65536+NW(3)*256+NW(4)+1 : GOSUB 8550 1240 F1=S1 : F2=S2 : F3=S3 : F4=S4 1250 T=BC(1)*16777216+BC(2)*65536+BC(3)*256+BC(4)-1 : GOSUB 8550 : GOTO 1300 1260 H=1 : F1=IO(1) : F2=IO(2) : F3=IO(3) : F4=IO(4) : S1=IO(1) : S2=IO(2) : S3=IO(3) : S4=IO(4) : GOTO 1300 1270 REM nedosazitelne 1280 H=2 : F1=NW(1) : F2=NW(2) : F3=NW(3) : F4=NW(4) 1290 T=0 : GOSUB 8550 : REM jen aby S1..S4 existovaly, prepisou se: 1300 REM --- rozsah hotov (S1..S4 = posledni adresa pro /31 a dal) --- 1310 IF P=31 THEN S1=BC(1) : S2=BC(2) : S3=BC(3) : S4=BC(4) 1320 PRINT "Pouzitelnych adres:"; H 1330 PRINT "Prvni: "; F1; "."; F2; "."; F3; "."; F4 1340 PRINT "Posledni: "; S1; "."; S2; "."; S3; "."; S4 1350 O=IO(1) : CL$="?" : TP$="verejna" 1360 IF O>=1 AND O<=126 THEN CL$="A" 1370 IF O>=128 AND O<=191 THEN CL$="B" 1380 IF O>=192 AND O<=223 THEN CL$="C" 1390 IF O>=224 AND O<=239 THEN CL$="D (multicast)" 1400 IF O>=240 THEN CL$="E (experimentalni)" 1410 IF O=127 THEN TP$="smycka (loopback)" 1420 IF O=10 THEN TP$="privatni" 1430 IF O=172 AND IO(2)>=16 AND IO(2)<=31 THEN TP$="privatni" 1440 IF IO(1)=192 AND IO(2)=168 THEN TP$="privatni" 1450 IF IO(1)=169 AND IO(2)=254 THEN TP$="link-local (APIPA)" 1460 PRINT "Trida: "; CL$ : PRINT "Typ: "; TP$ 1470 LINE INPUT "Enter pro navrat... "; PAUZA$ : GOTO 30 2000 REM --- PREVODNIK --- 2010 LINE INPUT "Maska (/24 nebo 255.255.255.0): "; M$ : GOSUB 8100 2020 IF OK=1 THEN GOTO 2040 2030 PRINT "Spatna maska!" : LINE INPUT "Enter pro navrat... "; PAUZA$ : GOTO 30 2040 PRINT "CIDR: /"; P 2050 PRINT "Maska: "; MO(1); "."; MO(2); "."; MO(3); "."; MO(4) 2060 PRINT "Binarne: "; BIN$(MO(1),8); "."; BIN$(MO(2),8); "."; BIN$(MO(3),8); "."; BIN$(MO(4),8) 2070 PRINT "Adres v bloku:"; 2^(32-P) 2080 LINE INPUT "Enter pro navrat... "; PAUZA$ : GOTO 30 3000 REM --- DELENI NA PODSITE --- 3010 LINE INPUT "Sit - IP adresa (napr. 192.168.0.0): "; Q$ : GOSUB 8000 3020 IF OK=1 THEN GOTO 3040 3030 PRINT "Spatna IP!" : LINE INPUT "Enter pro navrat... "; PAUZA$ : GOTO 30 3040 LINE INPUT "Puvodni prefix (napr. 24): "; M$ : GOSUB 8100 3050 IF OK=1 THEN GOTO 3070 3060 PRINT "Spatny prefix!" : LINE INPUT "Enter pro navrat... "; PAUZA$ : GOTO 30 3070 PP=P 3080 LINE INPUT "Novy prefix (vetsi nez puvodni): "; G$ : NP=VAL(G$) 3090 IF NP=0 AND G$<>"0" THEN PRINT "To neni cislo!" : LINE INPUT "Enter... "; PAUZA$ : GOTO 30 3100 IF NP<=PP OR NP>32 OR NP<>INT(NP) THEN PRINT "Novy prefix musi byt cele cislo >"; PP : LINE INPUT "Enter... "; PAUZA$ : GOTO 30 3110 FOR J=1 TO 4 3120 IF MO(J)=255 THEN NW(J)=IO(J) : GOTO 3150 3130 IF MO(J)=0 THEN NW(J)=0 : GOTO 3150 3140 BL=256-MO(J) : NW(J)=INT(IO(J)/BL)*BL 3150 NEXT J 3160 BN=NW(1)*16777216+NW(2)*65536+NW(3)*256+NW(4) 3170 CNT=2^(NP-PP) : SZ=2^(32-NP) 3180 IF CNT<=256 THEN GOTO 3200 3190 PRINT "Moc podsiti! Max 256 najednou." : LINE INPUT "Enter... "; PAUZA$ : GOTO 30 3200 PRINT "Podsiti:"; CNT; " Velikost:"; SZ 3210 FOR K=0 TO CNT-1 3220 T=BN+K*SZ : GOSUB 8550 : A1=S1 : A2=S2 : A3=S3 : A4=S4 3230 T=BN+K*SZ+SZ-1 : GOSUB 8550 3240 IF SZ<=2 THEN HH=SZ ELSE HH=SZ-2 3250 PRINT K; ") "; A1; "."; A2; "."; A3; "."; A4; " - "; S1; "."; S2; "."; S3; "."; S4; " hostu:"; HH 3260 NEXT K 3270 LINE INPUT "Enter pro navrat... "; PAUZA$ : GOTO 30 8000 REM --- PARSE IP v Q$ -> IO(1..4), OK --- 8010 OK=0 : Q$=LTRIM$(RTRIM$(Q$)) 8020 FOR J=1 TO 4 8030 S$=LTRIM$(RTRIM$(FIELD$(Q$,J,"."))) 8040 IF S$="" THEN RETURN 8050 V=VAL(S$) 8060 IF V=0 AND S$<>"0" THEN RETURN 8070 IF V<0 OR V>255 OR V<>INT(V) THEN RETURN 8080 IO(J)=V 8090 NEXT J 8092 IF FIELD$(Q$,5,".")<>"" THEN RETURN 8094 OK=1 : RETURN 8100 REM --- PARSE MASKA v M$ -> P, MO(1..4), OK --- 8110 OK=0 : M$=LTRIM$(RTRIM$(M$)) 8120 IF INSTR(M$,".")=0 THEN GOTO 8600 8130 FOR J=1 TO 4 8140 S$=LTRIM$(RTRIM$(FIELD$(M$,J,"."))) 8150 IF S$="" THEN RETURN 8160 V=VAL(S$) 8170 IF V=0 AND S$<>"0" THEN RETURN 8180 IF V<0 OR V>255 OR V<>INT(V) THEN RETURN 8190 MO(J)=V 8200 NEXT J 8210 IF FIELD$(M$,5,".")<>"" THEN RETURN 8220 P=0 8230 FOR J=1 TO 4 8240 BB=MO(J) : GOSUB 8400 8250 IF BK<0 THEN RETURN 8260 P=P+BK 8270 NEXT J 8280 F=INT(P/8) : R=P-F*8 8282 FOR J=1 TO 4 8284 REM overeni spojitosti masky 8285 IF J<=F THEN EX=255 : GOTO 8290 8286 IF J=F+1 AND R>0 THEN EX=256-2^(8-R) : GOTO 8290 8287 EX=0 8288 IF MO(J)<>EX THEN RETURN 8290 NEXT J 8295 OK=1 : RETURN 8600 REM --- CIDR cesta: M$ bez tecek --- 8610 IF LEFT$(M$,1)="/" THEN M$=MID$(M$,2,LEN(M$)) 8620 P=VAL(M$) 8630 IF P=0 AND M$<>"0" THEN RETURN 8640 IF P<0 OR P>32 OR P<>INT(P) THEN RETURN 8650 F=INT(P/8) : R=P-F*8 8660 FOR J=1 TO 4 8670 IF J<=F THEN MO(J)=255 : GOTO 8700 8680 IF J=F+1 AND R>0 THEN MO(J)=256-2^(8-R) : GOTO 8700 8690 MO(J)=0 8700 NEXT J 8710 OK=1 : RETURN 8400 REM --- BITY OKTETU BB -> BK (nespojita = -1) --- 8410 IF BB=255 THEN BK=8 : RETURN 8420 IF BB=254 THEN BK=7 : RETURN 8430 IF BB=252 THEN BK=6 : RETURN 8440 IF BB=248 THEN BK=5 : RETURN 8450 IF BB=240 THEN BK=4 : RETURN 8460 IF BB=224 THEN BK=3 : RETURN 8470 IF BB=192 THEN BK=2 : RETURN 8480 IF BB=128 THEN BK=1 : RETURN 8490 IF BB=0 THEN BK=0 : RETURN 8500 BK=-1 : RETURN 8550 REM --- CISLO T -> OKTETY S1..S4 --- 8560 S1=INT(T/16777216) : T=T-S1*16777216 : S2=INT(T/65536) : T=T-S2*65536 : S3=INT(T/256) : S4=T-S3*256 : RETURN
💡 Použití: u aplikace klikni na 📋 Kopírovat kód, pak v Editoru kód vlož do levého panelu a stiskni ▶ RUN (F5). Data aplikací se ukládají do prohlížeče (localStorage), takže vydrží i po zavření stránky.