1 REM Ins{nt av 612
10 REM ++++++++++++++++++++++++++++++++
11 REM + Program .... CALC2.BER +
12 REM + Utg}va 2.0 1984-09-23 +
13 REM + av (c) Alf Wirdling +
14 REM + Minne 32 Kbytes +
15 REM + Modifierat av Kent Ivarsson
16 REM ++++++++++++++++++++++++++++++++
100 ; CHR$(12);TAB(14);"**********"
105 ; TAB(14);"* *"
110 ; TAB(14);"* CALC-2 *"
115 ; TAB(14);"* *"
120 ; TAB(14);"**********" : ;
125 ONERRORGOTO 125
130 ; : ; "Antal kolumner/rad (2-28) ";
135 INPUT C% : IF C%<2% OR C%>28% THEN 130
140 T%=21000/(C%*20%)-34% : IF T%>25% THEN T%=25% : REM 19500 f|r 32K
145 ; : ; "Det blir max";T%;" tecken/kolumn !!!"
150 ; 'Hur m}nga tecken/kolumn'; : INPUT R%
155 IF R%<2% OR R%>T% THEN 130 ELSE T%=R%
160 R%=19% : C%=C%-1% : X%=0%
165 DIM M$(R%,C%)=T%,N$=30%,R2$=1%
170 DIM M%(R%,C%),S$(R%,C%)=20%
175 N$=" * CALC-2 *"
180 B%=1% : GOSUB 690
185 REM * MAIN LOOP *
187 IF C1%X%+39/(T%+1%)-1% THEN X%=X%+1% : GOSUB 690
190 ; CUR(R1%+2%,(C1%-X%)*(T%+1%)+1%); : R$=""
195 GET R2$
200 IF ASC(R2$)=23% THEN 270
205 IF ASC(R2$)=26% THEN 280
210 IF ASC(R2$)=1% THEN 290
215 IF ASC(R2$)=19% THEN 300
220 IF ASC(R2$)=2% THEN 310
225 IF ASC(R2$)=14% THEN 320
230 IF ASC(R2$)=12% THEN 330
235 IF ASC(R2$)=11% THEN 370
240 IF ASC(R2$)=7% THEN 400
245 IF ASC(R2$)=30% THEN 480
250 IF ASC(R2$)=8% THEN 490
255 IF ASC(R2$)=13% THEN 610
260 IF ASC(R2$)=18% THEN 680
262 IF ASC(R2$)=16% THEN GOSUB 1000
265 ; R2$; : R$=R$+R2$ : IF LEN(R$)=T% THEN 610 ELSE 195
270 REM * CTRL-W *
275 IF R1%=0% THEN 195 ELSE R1%=R1%-1% : GOTO 185
280 REM * CTRL-Z *
285 IF R1%=R% THEN 195 ELSE R1%=R1%+1% : GOTO 185
290 REM * CTRL-A *
295 IF C1%=0% THEN 195 ELSE C1%=C1%-1% : GOTO 185
300 REM * CTRL-S *
305 IF C1%=C% THEN 195 ELSE C1%=C1%+1% : GOTO 185
310 REM * CTRL-B *
315 B%=1% : GOSUB 690 : GOTO 185
320 REM * CTRL-N *
325 B%=0% : GOSUB 690 : GOTO 185
330 REM * CTRL-L *
335 ; CUR(22%,7%);STRING$(30%,95%);
340 ; CUR(23%,0%);SPACE$(39%);
345 ; CUR(23%,0%);"LABEL: "; : INPUTLINE R$
350 IF LEN(R$)<3% OR LEN(R$)>32% THEN 340
355 N$=LEFT$(R$,LEN(R$)-2%) : N$=N$+SPACE$(30%-LEN(N$))
360 ; CUR(0%,5%);N$;
365 ; CUR(22%,0%);SPACE$(39%) : ; SPACE$(39%); : GOTO 185
370 REM * CTRL-K *
375 GOSUB 440 : ONERRORGOTO 465
380 PREPARE R$ ASFILE 1 : ; #1,N$
385 FOR I%=0% TO R% : FOR J%=0% TO C%
390 ; #1,M$(I%,J%) : ; #1,M%(I%,J%) : ; #1,S$(I%,J%)
395 NEXT J% : NEXT I% : CLOSE 1 : GOTO 185
400 REM * CTRL-G *
405 GOSUB 440 : ONERRORGOTO 465
410 OPEN R$ ASFILE 2 : INPUTLINE #2,R$ : N$=LEFT$(R$,LEN(R$)-2%)
415 FOR I%=0% TO R% : FOR J%=0% TO C%
420 INPUTLINE #2,R$ : M$(I%,J%)=LEFT$(R$,LEN(R$)-2%)
425 INPUT #2,M%(I%,J%)
430 INPUTLINE #2,R$ : S$(I%,J%)=LEFT$(R$,LEN(R$)-2%)
435 NEXT J% : NEXT I% : CLOSE 2 : GOSUB 690 : GOTO 185
440 ; CUR(23%,0%);SPACE$(39%);
445 ; CUR(23%,0%);"FILNAMN: "; : INPUTLINE R$
450 IF LEN(R$)<3% OR LEN(R$)>18% THEN 440
455 R$=LEFT$(R$,LEN(R$)-2%)
460 ; CUR(23%,0%);SPACE$(39%); : RETURN
465 ; CUR(23%,0%);SPACE$(39%);
470 F$=CHR$(7)+"--- FELKOD"+NUM$(ERRCODE)+" ---"
475 GOSUB 690 : GOTO 185
480 REM * CTRL-^ *
485 ; CUR(23%,0%); : END
490 REM * <-- *
495 ; CUR(R1%+2%,(C1%-X%)*(T%+1%)+1%);SPACE$(T%); : GOTO 185
500 REM * OPERATION ? *
505 ; SPACE$(T%-1%); : M$(R1%,C1%)="*"
510 ; CUR(22%,11%);STRING$(20%,95%);
515 ; CUR(23%,0%);SPACE$(39%);
520 ; CUR(23%,0%);"Operation: ";S$(R1%,C1%);
525 ; CUR(23%,11%); : INPUTLINE R$
530 IF LEN(R$)=2% AND LEN(S$(R1%,C1%))<>0% THEN 595
535 IF LEN(R$)<5% OR LEN(R$)>22% OR ASC(LEFT$(R$,1%))<48% THEN 515
540 S$(R1%,C1%)=LEFT$(R$,LEN(R$)-2%)
545 ; CUR(23%,0%);SPACE$(39%);
550 ; CUR(23%,0%);"Antal decimaler - max";
555 IF T%>10% ; 9%; ELSE ; T%-1%;
560 ; " ";
565 GET R$ : IF ASC(R$)=13% THEN 580
570 ONERRORGOTO 580
575 D%=VAL(R$) : GOTO 585
580 D%=2%
585 IF D%<0% OR D%>9% OR D%>T%-1% THEN 545
590 M%(R1%,C1%)=30%+D%
595 ; CUR(22%,0%);SPACE$(39%) : ; SPACE$(39%); : GOTO 185
600 REM * NULL *
605 ; SPACE$(T%-1%); : M%(R1%,C1%)=0% : S$(R1%,C1%)="" : GOTO 185
610 REM * RET *
615 IF R$=SPACE$(LEN(R$)) THEN 665
620 IF R$="*" THEN 500
625 IF R$="'" THEN 600
630 R$=SPACE$(T%-LEN(R$))+R$
635 ; CUR(R1%+2%,(C1%-X%)*(T%+1%)+1%);R$;
640 ONERRORGOTO 650
645 R=VAL(R$) : M%(R1%,C1%)=2% : GOTO 655
650 M%(R1%,C1%)=1%
655 M$(R1%,C1%)=R$ : S$(R1%,C1%)=""
660 GOTO 185
665 IF C1%0% R$=M$(I%,J%) : GOTO 720
710 IF B%=0% R$=SPACE$(T%) : GOTO 725
715 R$=CHR$(65%+I%)+RIGHT$(NUM$(J%),2%)
720 R$=SPACE$(T%-LEN(R$))+R$
725 ; R$; : IF J%+2%>X%+39%/(T%+1%) ; ELSE ; " ";
730 NEXT J% : NEXT I%
735 ; CUR(23%,11%);F$; : F$="" : RETURN
740 REM ************* CALC ************
745 ; CUR(23%,0%);' R [ K N A R V [ N T A ! ';
750 FOR I%=0% TO R% : FOR J%=0% TO C%
755 IF M%(I%,J%)<3% THEN 860
760 M$(I%,J%)=SPACE$(T%-1%)+"0"
765 D=M%(I%,J%)/10 : D%=(D-INT(D))*10 : P%=1% : P2%=1%
770 A%=ASC(MID$(S$(I%,J%),P%,1%))
775 IF A%>47% OR A%=45% OR A%=46% THEN 850
780 T$=MID$(S$(I%,J%),P2%,P%-P2%)
785 ONERRORGOTO 790 : T=VAL(T$) : GOTO 810
790 IF LEN(T$)>3% THEN 815
795 R2%=ASC(LEFT$(T$,1%))-65% : C2%=VAL(MID$(T$,2%,LEN(T$)-1%))
800 IF R2%<0% OR R2%>R% OR C2%<0% OR C2%>C% THEN 865
805 T$=M$(R2%,C2%) : ONERRORGOTO 865 : T=VAL(T$)
810 GOSUB 885 : P2%=P%+1% : GOTO 850
815 K%=1% : R2%=ASC(LEFT$(T$,1%))-65%
816 IF ASC(MID$(T$,3%,1%))<58% THEN L%=2% ELSE L%=1%
817 K%=K%+1% : C2%=VAL(MID$(T$,K%,L%))
820 K%=K%+L% : R3%=ASC(MID$(T$,K%,1%))-65% : K%=K%+1%
821 IF LEN(T$)>K% THEN L%=2% ELSE L%=1%
822 C3%=VAL(MID$(T$,K%,L%))
825 IF R2%<0% OR R2%>R% OR C2%<0% OR C2%>C% THEN 865
830 IF R3%<0% OR R3%>R% OR C3%<0% OR C3%>C% THEN 865
835 FOR K%=R2% TO R3% : FOR L%=C2% TO C3%
840 T$=M$(K%,L%) : ONERRORGOTO 865 : T=VAL(T$)
845 GOSUB 885 : NEXT L% : NEXT K% : P2%=P%+1%
850 P%=P%+1% : IF P%<=LEN(S$(I%,J%)) THEN 770
860 NEXT J% : NEXT I% : RETURN
865 ; CUR(23%,0%);SPACE$(39%);
870 ; CUR(23%,4%);CHR$(7);"--- FELAKTIG OPERATION (";
875 ; CHR$(I%+65%)+RIGHT$(NUM$(J%),2%);") ---";
880 FOR F=1 TO 2000 : NEXT F : GOTO 860
885 REM * OPERATION *
890 IF A%=43% R$=ADD$(M$(I%,J%),T$,D%) : GOTO 910
895 IF A%=42% R$=MUL$(M$(I%,J%),T$,D%) : GOTO 910
900 IF A%=47% R$=DIV$(M$(I%,J%),T$,D%) : GOTO 910
905 R$=SUB$(M$(I%,J%),T$,D%)
910 IF LEN(R$)>T% M$(I%,J%)=LEFT$(R$,T%) ELSE M$(I%,J%)=SPACE$(T%-LEN(R$))+R$
915 RETURN
1000 REM * PRINT *
1010 OPEN 'PR:M06S72' ASFILE 5
1020 ; #5,TAB(30%)N$
1025 A%=0%
1027 K%=70%/(T%+1%)
1030 ; #5," "
1035 FOR J%=A% TO A%+K%-1%
1036 IF J%>C% THEN 1050
1040 ; #5,STRING$(T%+1%-LEN(NUM$(J%)),127);NUM$(J%);
1050 NEXT J% : ; #5;' '
1060 FOR I%=0% TO R% : ; #5,CHR$(I%+65%); : FOR J%=A% TO A%+K%-1%
1062 IF J%>C% THEN 1125
1070 IF M%(I%,J%)<>0% R$=M$(I%,J%) : GOTO 1100
1080 R$=SPACE$(T%)
1100 R$=SPACE$(T%-LEN(R$))+R$
1110 ; #5,R$" ";
1120 NEXT J%
1125 ; #5," "
1126 NEXT I%
1127 IF A%+K%