▸ PEBASIC — ukázkové aplikace

← Editor 📖 Manuál kód si zkopíruj a vlož do editoru (F5 = RUN)

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.