10 REM +++++++++++++++++++++++++++++++++ 20 REM ! Program .... KONTOBUD 30 REM ! Utg}va 2.3 850120 40 REM ! av (c) Michael Widell 50 REM ! Minne 16 Kbytes f|r flexskiva 60 REM ! Ins{nt av Michael Widell 70 REM +++++++++++++++++++++++++++++++++ 80 REM 80-kolumners bildsk{rm (Tkn-80) 90 REM m}ste vara monterad. 100 REM *** Budgetering och kontoplanering KONTOBUD Ver 2.3 *** 110 I%=INP(4) : M%=30% : GOSUB 1250 120 DIM K0$(M%)=10%,B0$(M%)=30%,M0(M%),B0%(M%),S0(M%),I%(M%) 130 FOR I=22768 TO 22773 140 D$=D$+CHR$(PEEK(I)) 150 NEXT I 160 ONERRORGOTO 250 170 OPEN 'KLISTA.DAT' ASFILE 1 180 INPUT #1,A0% 190 FOR I%=1% TO A0% 200 INPUT #1,K0$(I%) 210 INPUTLINE #1,A$ : B0$(I%)=LEFT$(A$,LEN(A$)-2%) 220 INPUT #1,M0(I%),B0%(I%),S0(I%) 230 B0=B0+B0%(I%) 240 NEXT I% : CLOSE 1 250 ONERRORGOTO 0 260 X%=3% : Y%=1% : Y0%=1% : Y1%=A0% : IF A0%>14% Y1%=14% 270 GOSUB 1520 280 IF A0%=0% THEN 730 290 GOSUB 1400 300 I%=Y% : GOSUB 1470 : GOSUB 1340 310 ; CUR(R%,R0%); : I$='' : A%=0% : GET A$ 320 I%=INSTR(1%,CHR$(8%,9%,13%)+'^~*!#',A$) 330 IF I% ON I% GOTO 570,590,670,610,610,730,860,990,1750 340 ; CUR(R%,R0%)SPACE$(R1%-R0%+1%);CUR(R%,R0%); 350 GOTO 370 360 GET A$ 370 IF A$<>CHR$(8%) THEN 400 380 A%=A%-1% : I$=LEFT$(I$,A%) : ; A$; 390 IF A%=0% THEN 300 ELSE 360 400 IF A$<>CHR$(13%) I$=I$+A$ : A%=A%+1% : ; A$; : GOTO 360 410 ON X% GOTO 420,500,520 420 IF LEN(I$)>6% THEN 300 430 FOR V%=1% TO A0% 440 IF V%=Y% THEN 460 450 IF K0$(V%)=I$ THEN 1230 460 NEXT V% 470 IF I$='L\N' OR I$='\VRF\R' THEN 1230 480 K0$(Y%)=I$ 490 GOTO 300 500 IF LEN(I$)<=24% B0$(Y%)=I$ 510 GOTO 300 520 ONERRORGOTO 300 530 V%=VAL(I$) 540 B0%(Y%)=V% 550 GOSUB 1520 560 GOTO 300 570 X%=X%-1% : IF X%<1% X%=1% 580 GOSUB 1340 : GOTO 300 590 X%=X%+1% : IF X%>3% X%=3% 600 GOSUB 1340 : GOTO 300 610 I%=Y% : GOSUB 1470 620 IF Y%>1% Y%=Y%-1% ELSE 300 630 IF Y%>=Y0% R%=R%-1% : GOTO 300 640 Y0%=Y0%-1% : Y1%=Y0%+13 650 IF Y1%>A0% Y1%=A0% 660 GOTO 290 670 I%=Y% : GOSUB 1470 680 IF Y%6% THEN 730 760 IF LEN(I$)=0 THEN IF A0%=0% THEN 730 ELSE 850 770 FOR I%=1% TO A0% : IF I$=K0$(I%) THEN 1230 : NEXT I% 780 IF I$='L\N' OR I$='\VRF\R' THEN 1230 790 A0%=A0%+1% : K0$(A0%)=I$ 800 GOSUB 1630 : ; 'Ange kontonamn (max 24 tkn) ?'; 810 INPUTLINE I$ : IF LEN(I$)>24% THEN 800 820 B0$(A0%)=LEFT$(I$,LEN(I$)-2%) 830 B0%(A0%)=0% : S0(A0%)=0% : M0(A0%)=0% 840 Y1%=A0% : Y%=Y1% : Y0%=Y1%-13% : IF Y0%<1% Y0%=1% 850 GOSUB 1640 : GOTO 290 860 GOSUB 1630 : ; 'Vill du ta bort kontot: 'K0$(Y%)' (N) ?'; 870 GET A$ : IF (ASC(A$) AND 223%)<>74% THEN GOSUB 1640 : GOTO 300 880 IF S0(Y%)+M0(Y%)<>0% GOTO 1220 890 FOR I%=Y% TO A0%-1% 900 K0$(I%)=K0$(I%+1%) : B0$(I%)=B0$(I%+1%) : M0(I%)=M0(I%+1%) 910 B0%(I%)=B0%(I%+1%) : S0(I%)=S0(I%+1%) 920 NEXT I% 930 A0%=A0%-1% : GOSUB 1250 : GOSUB 1520 : IF A0%=0% GOTO 730 940 J1%=Y1%-Y% 950 IF Y%>A0% Y%=Y%-1% 960 Y1%=Y%+J1% : IF Y1%>A0% Y1%=A0% 970 Y0%=Y1%-13% : IF Y0%<1% Y0%=1% 980 GOTO 290 990 GOSUB 1630 : ; '[r du klar?'; 1000 GET A$ 1010 IF A$='n' OR A$='N' GOSUB 1640 : GOTO 300 1020 IF A$<>'j' AND A$<>'J' THEN 1000 1030 FOR I%=1% TO A0% : I%(I%)=I% : NEXT I% 1040 G%=255% 1050 IF G%>A0% G%=G%/2% : GOTO 1050 1060 V%=A0%-G% 1070 S%=0% 1080 FOR V0%=1% TO V% : V1%=V0%+G% 1090 IF K0$(I%(V1%))>K0$(I%(V0%)) THEN 1110 1100 S%=I%(V0%) : I%(V0%)=I%(V1%) : I%(V1%)=S% : S%=1% 1110 NEXT V0% : IF S% THEN 1070 1120 G%=G%/2% : IF G%<>0% THEN 1060 1130 PREPARE 'KLISTA.DAT' ASFILE 1 1140 ; #1,A0% 1150 FOR I%=1% TO A0% 1160 ; #1,K0$(I%(I%)) : ; #1,B0$(I%(I%)) 1170 ; #1,M0(I%(I%)) : ; #1,B0%(I%(I%)) : ; #1,S0(I%(I%)) 1180 NEXT I% 1190 CLOSE 1 1200 CHAIN 'CMWKONTO' 1210 GOSUB 1630 : ; CHR$(7%)'**** Max Antal Konton [r'M%' ****' : GOTO 1240 1220 GOSUB 1630 : ; CHR$(7%)'**** Kontots Saldo [r Ej Nollst{llt ****' : GOTO 1240 1230 GOSUB 1630 : ; CHR$(7%)'**** Kontot Existerar Redan ****' 1240 FOR T=0 TO 2500 : NEXT T : GOSUB 1640 : GOTO 300 1250 ; CHR$(12);TAB(22)'CMW-Konto Kontoplanering' 1260 ; TAB(20)CHR$(151)STRING$(26,35) 1270 ; 1280 ; ' Konto: Kontonamn:';TAB(40)'Budgeterat: Saldo:' 1290 ; ' ------ ----------';TAB(40)'----------- ----------' 1300 ; CUR(19,0)STRING$(80,95); 1310 ; 'TOTAL:' 1320 GOSUB 1640 1330 RETURN 1340 RESTORE : FOR I0%=1% TO X% 1350 READ J0%,J1% : NEXT I0% 1360 ; CUR(R%,J0%);'<'; 1370 ; CUR(R%,J1%);'>'; 1380 R0%=J0%+1% : R1%=J1%-1% 1390 RETURN 1400 J%=5% : FOR I%=Y0% TO Y1% 1410 ; CUR(J%,0%); 1420 GOSUB 1480 1430 IF Y%=I% R%=J% 1440 J%=J%+1% 1450 NEXT I% 1460 RETURN 1470 ; CUR(R%,0%); 1480 ; TAB(2%)K0$(I%);TAB(12%)B0$(I%); 1490 I=B0%(I%) : GOSUB 1580 : ; TAB(41);X$; 1500 I=S0(I%)+M0(I%) : GOSUB 1580 : ; TAB(56)X$ 1510 RETURN 1520 S0=0 : B0=0 : FOR I%=1% TO A0% 1530 S0=S0+S0(I%)+M0(I%) : B0=B0+B0%(I%) 1540 NEXT I% 1550 I=B0 : GOSUB 1580 : ; CUR(20%,41%)X$; 1560 I=S0 : GOSUB 1580 : ; CUR(20%,56%)X$; 1570 RETURN 1580 X$=NUM$(I) 1590 IF I=INT(I) X$=X$+'.00' ELSE X$=X$+'00' 1600 X$=LEFT$(X$,INSTR(1%,X$,'.')+2%) 1610 X$=SPACE$(9%-LEN(X$))+X$ 1620 RETURN 1630 ; CUR(22%,0%)SPACE$(159%);CUR(22%,0%); : RETURN 1640 GOSUB 1630 : ; 'Kommandon:'; 1650 ; TAB(12)'<- = V{nster'; 1660 ; TAB(29)'-> = H|ger'; 1670 ; TAB(50)'^ = Upp'; 1680 ; TAB(64)' = Ner' 1690 ; TAB(13)'* = Nytt konto'; 1700 ; TAB(30)' = Radera konto'; 1710 ; TAB(50)'# = Printer'; 1720 ; TAB(68)'! = Exit'; 1730 RETURN 1740 DATA 1,8,11,36,40,50,55,64 1750 PREPARE 'PR:' ASFILE 1 1760 ; #1,TAB(21)'CMW-Konto Kontoplan ';D$ 1770 ; #1,TAB(20)STRING$(28,232) : ; #1 1780 ; #1,' Konto: Kontonamn:';TAB(40)'Budgeterat: Saldo:' 1790 ; #1,' ------ ----------';TAB(40)'----------- ----------' 1800 FOR I%=1% TO A0% 1810 ; #1,TAB(2%)K0$(I%);TAB(12%)B0$(I%); 1820 I=B0%(I%) : GOSUB 1580 : ; #1,TAB(41%);X$; 1830 I=S0(I%)+M0(I%) : GOSUB 1580 : ; #1,TAB(56%)X$ 1840 NEXT I% 1850 ; #1,STRING$(80,95) 1860 ; #1,TAB(2%)'TOTAL'; 1870 I=B0 : GOSUB 1580 : ; #1,TAB(41%)X$; 1880 I=S0 : GOSUB 1580 : ; #1,TAB(56%)X$ 1890 ; #1 : ; #1 : ; #1 1900 CLOSE 1 : GOTO 300