home *** CD-ROM | disk | FTP | other *** search
Wrap
10 REM *********2.22.85******** 20 REM * STOCK.ANALYST * 30 REM * BY JIM GANZ * 40 REM * COPYRIGHT (C) 1984 * 50 REM * BY MICROSPARC, INC * 60 REM * CONCORD, MA. 01742 * 70 REM ************************ 80 GOTO 4310 90 REM LINE UP DECIMAL POINTS 100 POKE 36,HT - LEN(X$) 110 RETURN 120 REM DOLLAR FORMATTER 130 NF = (X <0):X$ = STR$( ABS( INT((.005 +X) *100)/100)) 140 IF INT( VAL(X$)) = INT((.005 +X) *100)/100 THEN X$ = X$ +".00" 150 IF LEN(X$) = 2 AND LEFT$(X$,1) = "." THEN X$ = X$ +"0" 160 IF MID$ (X$, LEN(X$) -2,1) < >"." THEN X$ = X$ +"0" 170 IF X >0 AND X <1 THEN X$ = "0" +X$ 180 IF X <0 AND X > -1 THEN X$ = "-0" + RIGHT$(X$, LEN(X$) -1) 190 MAX = 4:PN = 0: FOR Y = LEN(X$) -3 TO 1 STEP -1:L$ = LEFT$(X$,Y):R$ = RIGHT$(X$, LEN(X$) -Y) 200 PN = PN +1: IF PN = MAX THEN X$ = L$ +"," +R$:PN = 0:MAX = 3 210 NEXT : IF NF THEN X$ = "-" +X$ 220 RETURN 230 REM FRACTION EVALUATION 240 NUM = 0:DEN = 0 250 FOR F = 1 TO LEN(X$): IF MID$ (X$,F,1) = CHR$(32) THEN FF = VAL( LEFT$(X$,F)):RF = F:F = LEN(X$): NEXT : GOTO 270 260 NEXT :X = VAL(X$): RETURN 270 NUM = VAL( MID$ (X$,RF +1,1)) 280 DEN = VAL( RIGHT$(X$,1)) 290 X = ABS(FF) +NUM/DEN: IF FF <0 THEN X = -X 300 RETURN 310 REM INDEX OF STOCKS 320 HOME 330 IF NOT REC THEN VTAB 12: HTAB 12: FLASH : CALL BALL: PRINT "NO STOCKS ON FILE": NORMAL : FOR X = 1 TO 2500: NEXT : POP : GOTO 4710 340 VTAB 2: HTAB 1: PRINT LEFT$(F3$,11)" INDEX OF STOCKS " LEFT$(F3$,12) 350 START = 1:OSTART = START 360 VTAB 18: PRINT F3$: PRINT PRMPT$: VTAB 4: POKE TL,3: POKE BL,15: POKE 34,1: POKE 35,17 370 FLAG = (REC >10) 380 FOR X = START TO START +9 390 IF X < >REC THEN 430 400 IF X = START +9 OR X = REC THEN PRINT TAB( 4 - LEN( STR$(X)))X") "ST$(X,0);: CALL -868: HTAB 40 - LEN(ST$(X,1)): PRINT ST$(X,1) 410 X = START +9: NEXT : IF FLAG THEN OSTART = START:START = 1 420 GOTO 450 430 PRINT TAB( 4 - LEN( STR$(X)))X") "ST$(X,0);: CALL -868: HTAB 40 - LEN(ST$(X,1)): PRINT ST$(X,1): NEXT 440 OSTART = START:START = X 450 CALL -958: VTAB 15: IF FLAG THEN PRINT TAB( 4)"SEE MORE OF THE LIST" 460 PRINT TAB( 4)"RETURN TO PREVIOUS MENU" 470 IF NOT FLAG THEN POKE LL,3: GOTO 490 480 POKE LL,14 490 CALL CUR +26 500 IF FLAG AND PEEK(LL) = 12 THEN VTAB 4: GOTO 380 510 IF PEEK(LL) = 12 OR (FLAG AND PEEK(LL) = 13) THEN POP : GOTO 4710 520 ST$ = ST$(OSTART + PEEK(LL) -1,0) 530 TEXT : RETURN 540 REM SELECT OUTPUT DEVICE 550 IF OD$ = "SCREEN" THEN RETURN 560 IF PD$ = "NO" THEN GOSUB 580: PRINT D$"PR#"PS: RETURN 570 VTAB 12: INPUT "ENTER BINARY DRIVER CALL (DECIMAL):";X: GOSUB 580: CALL X: RETURN 580 VTAB 12: HTAB 1: CALL -868: PRINT "POSITION PAPER THEN PRESS ";: INVERSE : PRINT "RETURN";: NORMAL : POKE CB,0: INPUT " ";X$: HOME : RETURN 590 REM SORT STOCK NAMES 600 SFLAG = 1: FOR X = 1 TO REC -1: IF ST$(X,0) >ST$(X +1,0) THEN X$ = ST$(X,0):Y$ = ST$(X,1):ST$(X,0) = ST$(X +1,0):ST$(X,1) = ST$(X +1,1):ST$(X +1,0) = X$:ST$(X +1,1) = Y$:SFLAG = 2 610 NEXT : ON SFLAG GOTO 630,600 620 REM UPDATE INDEXFILE 630 PRINT : PRINT D$"OPEN"FI$",S"DS",D"DD 640 PRINT D$"WRITE"FI$ 650 PRINT REC 660 FOR X = 1 TO REC 670 PRINT ST$(X,0): NEXT 680 PRINT D$"CLOSE" 690 IF DFLAG THEN DFLAG = 0: RETURN 700 PRINT D$"OPENSP."NM$",L55,S"DS",D"DD 710 PRINT D$"WRITESP."NM$",R0" 720 FOR X = 0 TO 7: PRINT S$(X): NEXT : PRINT 0 730 PRINT D$"CLOSE" 740 RETURN 750 REM INITIALIZE A STOCK 760 HOME 770 HTAB 8: PRINT "** STOCK INITIALIZATION **" 780 VTAB 4: HTAB 1: PRINT " COMPANY: " LEFT$(F5$,12);: HTAB 11: INPUT "";NM$ 790 NM$ = LEFT$(NM$,12): IF NM$ = "" THEN CALL BELL: GOTO 780 800 FOR I = 1 TO LEN(NM$):K = ASC( MID$ (NM$,I,1)): IF (K >47 AND K <58) OR (K >64 AND K <91) OR K = 46 THEN NEXT : GOTO 820 810 CALL BELL:I = LEN(NM$): NEXT : VTAB 4: HTAB 1: PRINT "LETTERS, DIGITS, OR PERIODS (.) ONLY!": FOR I = 1 TO 1500: NEXT : VTAB 4: HTAB 1: CALL -868: GOTO 780 820 VTAB 4: HTAB 11: PRINT NM$;: CALL -868: PRINT 830 IF CFLAG THEN RETURN 840 VTAB 5: PRINT " ABBREVIATION: " LEFT$(F5$,8);: HTAB 16: INPUT "";S$(0) 850 S$(0) = LEFT$(S$(0),8): IF S$(0) = "" THEN CALL BELL: GOTO 840 860 VTAB 5: HTAB 16: PRINT S$(0);: CALL -868: PRINT 870 IF CFLAG THEN RETURN 880 VTAB 6: PRINT " EXCHANGE:": PRINT 890 FOR X = 0 TO 14: HTAB 8 - LEN(EX$(X,0)): PRINT EX$(X,0) LEFT$(F4$,5)EX$(X,1): NEXT 900 VTAB 24: PRINT PRMPT$; 910 CALL CUR,8,22 920 S$(1) = STR$( PEEK(LL) -1) 930 VTAB 6: HTAB 12: PRINT EX$( VAL(S$(1)),1): CALL -958 940 IF CFLAG THEN RETURN 950 VTAB 8: INPUT " DATE OF PURCHASE (MM/DD/YY): ";S$(2) 960 IF LEN(S$(2)) <6 OR LEN(S$(2)) >8 THEN CALL BELL: GOTO 950 970 VTAB 8: HTAB 18: PRINT ": "S$(2);: CALL -868 980 IF CFLAG THEN VTAB 11: HTAB 21: PRINT S$(2)": $"S$(4);: CALL -868: PRINT : RETURN 990 VTAB 9: HTAB 1: INPUT " NUMBER OF SHARES ACQUIRED: ";S$(3) 1000 IF S$(3) = "" THEN CALL BELL: GOTO 990 1010 IF CFLAG THEN RETURN 1020 VTAB 11: PRINT " PRICE PER SHARE ON "S$(2);: INPUT ": $";S$(4) 1030 IF S$(4) = "" THEN CALL BELL: GOTO 1020 1040 IF CFLAG THEN RETURN 1050 VTAB 12: INPUT " AGENT'S COMMISSION: $";S$(5) 1060 X = VAL(S$(5)): GOSUB 130: VTAB 12: HTAB 23: PRINT X$;: CALL -868: PRINT 1070 IF CFLAG THEN RETURN 1080 VTAB 13: INPUT " ODD LOT COST: $";S$(6) 1090 X = VAL(S$(6)): GOSUB 130: VTAB 13: HTAB 17: PRINT X$;: CALL -868: PRINT 1100 IF CFLAG THEN RETURN 1110 VTAB 14: INPUT " SECURITY EXCHANGE FEE: $";S$(7) 1120 X = VAL(S$(7)): GOSUB 130: VTAB 14: HTAB 26: PRINT X$;: CALL -868: PRINT 1130 IF CFLAG THEN RETURN 1140 VTAB 18: PRINT TAB( 4)"THE ABOVE INFORMATION IS CORRECT" 1150 PRINT TAB( 4)"MAKE CORRECTIONS TO THE ABOVE DATA" 1160 PRINT TAB( 4)"EXIT TO THE MAIN MENU" 1170 VTAB 22: PRINT PRMPT$ 1180 CALL CUR,18,20 1190 VTAB 18: CALL -958: ON PEEK(LL) GOTO 1200,1260,4710 1200 VTAB 18: CALL -958: PRINT TAB( 6) LEFT$(F1$,30): PRINT TAB( 6)"STAND BY WHILE FILE IS CREATED": PRINT TAB( 6) LEFT$(F1$,30): VTAB 17 1210 REC = REC +1 1220 ST$(REC,0) = NM$:ST$(REC,1) = S$(2) 1230 IF REC >1 THEN GOSUB 600: GOTO 4710 1240 GOSUB 630: GOTO 4710 1250 REM MAKE CHANGES 1260 CFLAG = 1 1270 VTAB 16: PRINT " SAVE INFORMATION TO DISK": PRINT " RETURN TO MAIN MENU": VTAB 20: PRINT PRMPT$ 1280 POKE TL,3: POKE BL,16: POKE LL,15: CALL CUR +26 1290 ON PEEK(LL) GOSUB 780,840,1320,4710,950,990,4710,1020,1050,1080,1110 1300 IF PEEK(LL) = 13 OR PEEK(LL) = 14 THEN CFLAG = 0: ON PEEK(LL) = 13 GOTO 1200: ON PEEK(LL) = 14 GOTO 4710 1310 POKE LL, PEEK(LL) -1 + PEEK(TL): CALL CUR +26: GOTO 1290 1320 VTAB 20: CALL -958: PRINT "WILL YOU MAKE ANY OTHER CHANGES BESIDES THAT TO 'EXCHANGE' (Y/N)? "; 1330 GET X$: IF X$ < >"Y" AND X$ < >"N" THEN CALL BELL: GOTO 1330 1340 PRINT X$: IF X$ = "N" THEN 1370 1350 VTAB 20: CALL -958: FLASH : PRINT " PLEASE MAKE ALL OTHER CHANGES FIRST ": NORMAL 1360 FOR X = 1 TO 2500: NEXT : POP : GOTO 1260 1370 VTAB 6: CALL -958: GOSUB 880: GOTO 1200 1380 REM STATUS UPDATE 1390 GOSUB 320:Z = OSTART + PEEK(LL) -1 1400 PRINT D$"OPENSP."ST$",L55,S"DS",D"DD 1410 PRINT D$"READSP."ST$",R0" 1420 FOR X = 0 TO 7: INPUT S$(X): NEXT : INPUT SREC:SHARES = VAL(S$(3)) 1425 IF SREC > = 20 THEN PRINT D$;"CLOSE SP."ST$: HOME : VTAB 8: PRINT "20 UPDATES HAVE BEEN MADE TO THIS FILE. START ANOTHER FILE WITH ANOTHER NAME.": CALL BELL: FOR I = 1 TO 3000: NEXT : GOTO 4710 1430 ON NOT SREC GOTO 1480: FOR X = 1 TO SREC 1440 PRINT D$"READSP."ST$",R"X 1450 FOR S = 1 TO 4: INPUT X$: NEXT 1460 SHARES = SHARES + VAL(X$) 1470 NEXT 1480 PRINT D$"CLOSE": HOME 1490 HTAB 8: PRINT "** UPDATE STOCK STATUS **" 1500 VTAB 3: PRINT ST$" ("S$(0)")" 1510 PRINT "EXCHANGE: "EX$( VAL(S$(1)),1) 1520 PRINT "NUMBER OF SHARES OWNED: "SHARES 1530 VTAB 7: PRINT TAB( 5)"UPDATE THIS STOCK": PRINT TAB( 5)"DELETE THIS STOCK FROM FILE": PRINT TAB( 5)"RETURN TO MAIN MENU" 1540 PRINT : PRINT PRMPT$: CALL CUR,7,9 1550 ON PEEK(LL) GOTO 1590,1560,4710 1560 ST$(Z,0) = ST$(REC,0):ST$(Z,1) = ST$(REC,1):REC = REC -1 1570 PRINT D$"DELETESP."ST$",S"DS",D"DD 1580 DFLAG = 1: GOTO 1230 1590 VTAB 7: CALL -958: INPUT "TODAY'S DATE (MM/DD/YY): ";U$(2) 1600 IF LEN(U$(2)) <6 OR LEN(U$(2)) >8 THEN CALL BELL: GOTO 1590 1610 VTAB 8: INPUT "PRICE PER SHARE: $";U$(4) 1620 IF U$(4) = "" THEN CALL BELL: GOTO 1610 1630 VTAB 10: PRINT "TODAY, I AM..." 1640 VTAB 12: PRINT TAB( 4)"NOT MAKING ANY TRANSACTIONS" 1650 PRINT TAB( 4)"PURCHASING MORE SHARES OF THIS STOCK" 1660 PRINT TAB( 4)"ACQUIRING SHARES THROUGH A SPLIT" 1670 PRINT TAB( 4)"ACQUIRING SHARES THROUGH A DIVIDEND" 1680 PRINT TAB( 4)"SELLING SHARES OF THIS STOCK" 1690 VTAB 19: PRINT PRMPT$ 1700 CALL CUR,12,16 1710 VTAB 10: CALL -958 1720 ON PEEK(LL) GOTO 2010,1730,1730,1730,1920 1730 REM * BUY 1740 VTAB 10: INPUT "NUMBER OF SHARES ACQUIRED: ";U$(3) 1750 IF U$(3) = "" THEN CALL BELL: GOTO 1740 1760 ON PEEK(LL) -2 GOTO 1860,1890 1770 VTAB 11: INPUT "AGENT'S COMMISSION: $";U$(5) 1780 X = VAL(U$(5)): GOSUB 130: VTAB 11: HTAB 22: PRINT X$ 1790 VTAB 12: INPUT "ODD LOT COST: $";U$(6) 1800 X = VAL(U$(6)): GOSUB 130: VTAB 12: HTAB 16: PRINT X$ 1810 VTAB 13: INPUT "SECURITY EXCHANGE FEE: $";U$(7) 1820 X = VAL(U$(7)): GOSUB 130: VTAB 13: HTAB 25: PRINT X$ 1830 X$ = U$(4): GOSUB 240:X = X * VAL(U$(3)) + VAL(U$(5)) + VAL(U$(6)) + VAL(U$(7)) 1840 U$(0) = STR$(X):U$(1) = "B" 1850 GOTO 2060 1860 REM * STOCK SPLIT 1870 U$(1) = "S" 1880 GOTO 2030 1890 REM * DIVIDEND 1900 U$(1) = "D" 1910 GOTO 2030 1920 REM * SELL 1930 VTAB 10: INPUT "NUMBER OF SHARES SOLD: ";U$(3) 1940 IF U$(3) = "" OR VAL(U$(3)) >SHARES THEN CALL BELL: GOTO 1930 1950 U$(3) = "-" +U$(3) 1960 VTAB 11: INPUT "NET AMOUNT REC'D: $";U$(0) 1970 IF U$(0) = "" THEN CALL BELL: GOTO 1960 1980 X = VAL(U$(0)): GOSUB 130: VTAB 11: HTAB 20: PRINT X$ 1990 U$(0) = "-" +U$(0):U$(1) = "N" 2000 GOTO 2040 2010 REM * NO TRANSACTION 2020 U$(1) = "N":U$(3) = "0" 2030 U$(0) = "0" 2040 FOR X = 5 TO 7:U$(X) = "0": NEXT 2050 REM WRITE UPDATE 2060 SREC = SREC +1 2070 PRINT D$"OPENSP."ST$",L55,S"DS",D"DD 2080 PRINT D$"WRITESP."ST$",R0" 2090 FOR X = 0 TO 7: PRINT S$(X): NEXT : PRINT SREC 2100 PRINT D$"WRITESP."ST$",R"SREC 2110 FOR X = 0 TO 7: PRINT U$(X): NEXT 2120 PRINT D$"CLOSE" 2130 ST$(Z,1) = U$(2): GOTO 4710 2140 REM REPORT MENU 2150 VTAB 9: HTAB 1: PRINT "REPORT MENU:": VTAB 11 2160 RFLAG = 1 2170 PRINT TAB( 5)"RETURN TO MAIN MENU";: CALL -868: PRINT 2180 PRINT TAB( 5)"INDIVIDUAL STOCK STATUS";: CALL -868: PRINT 2190 PRINT TAB( 5)"INDIVIDUAL STOCK HISTORY";: CALL -868: PRINT 2200 PRINT TAB( 5)"PORTFOLIO STATUS";: CALL -868: PRINT 2210 CALL CUR,11,21 2220 ON PEEK(LL) GOTO 2270,2290,2770,3640,4970 2230 IF PEEK(LL) <10 THEN VTAB 23: CALL -958 2240 ON PEEK(LL) -6 GOSUB 5010,4990,5030,5050,5080 2250 VTAB 23: HTAB 1: PRINT PRMPT$; 2260 POKE LL, PEEK(LL) -1 + PEEK(TL): CALL CUR +26: GOTO 2220 2270 POKE 34,8: POKE 35,14: HOME : TEXT :RFLAG = 0: GOTO 4770 2280 REM INDIVIDUAL STOCK STATUS 2290 GOSUB 320: HOME : VTAB 12: PRINT "COMPILING DATA... STAND BY" 2300 SHARES = 0:INVEST = 0:NETINV = 0:RTURN = 0 2310 PRINT D$"OPENSP."ST$",L55,S"DS",D"DD 2320 PRINT D$"READSP."ST$",R0" 2330 FOR X = 0 TO 7: INPUT S$(X): NEXT : INPUT SREC 2340 SHARES = VAL(S$(3)) 2350 X$ = S$(4): GOSUB 240:S4 = X 2360 NETINV = SHARES *S4 + VAL(S$(5)) + VAL(S$(6)) + VAL(S$(7)) 2370 INVEST = NETINV 2380 IF NOT SREC THEN U$(2) = S$(2):U$(4) = S$(4):X$ = U$(4): GOSUB 240:U4 = X: GOTO 2480 2390 FOR RD = 1 TO SREC 2400 PRINT D$"READSP."ST$",R"RD 2410 FOR S = 0 TO 7: INPUT U$(S): NEXT 2420 SHARES = SHARES + VAL(U$(3)) 2430 X$ = U$(4): GOSUB 240:U4 = X 2440 NETINV = NETINV + VAL(U$(0)) 2450 IF LEFT$(U$(0),1) = "-" THEN RTURN = RTURN + ABS( VAL(U$(0))) 2460 IF LEFT$(U$(0),1) < >"-" THEN INVEST = INVEST + VAL(U$(0)) 2470 NEXT 2480 PRINT D$"CLOSE" 2490 X = NETINV: GOSUB 130:NETINV$ = X$ 2500 IF PFLAG THEN RETURN 2510 GOSUB 550 2520 HOME : PRINT : POKE 36,9: PRINT "** STATUS REPORT **": PRINT 2530 PRINT ST$" ("S$(0)")" 2540 PRINT "EXCHANGE: "EX$( VAL(S$(1)),1);: IF S$(1) < >"3" THEN PRINT " ("EX$( VAL(S$(1)),0)")": GOTO 2560 2550 PRINT 2560 PRINT : PRINT "INITIAL PURCHASE ON "S$(2) 2570 PRINT S$(3)" SHARES AT $"S$(4)" PER SHARE" 2580 PRINT "ADDITIONAL FEES/CHARGES: $"; 2590 X = VAL(S$(5)) + VAL(S$(6)) + VAL(S$(7)): GOSUB 130: PRINT X$ 2600 PRINT LEFT$(F1$,37): PRINT "STATUS AS OF "U$(2)":": PRINT LEFT$(F1$,37) 2610 PRINT "NUMBER OF SHARES OWNED: "SHARES 2620 PRINT "PRICE PER SHARE: $"U$(4) 2630 HT = 36: PRINT 2640 PRINT "INVESTMENT TO DATE";:X = INVEST: GOSUB 130: GOSUB 100: PRINT "$"X$ 2650 PRINT "RETURN TO DATE";:X = RTURN: GOSUB 130: GOSUB 100: PRINT "$"X$ 2660 PRINT "NET INVESTMENT TO DATE"; 2670 X$ = CHR$(43 +2 *( SGN( VAL(NETINV$)) <0)) +" $" + RIGHT$(NETINV$, LEN(NETINV$) -( LEFT$(NETINV$,1) = "-")): GOSUB 100: PRINT " "X$ 2680 PRINT : PRINT "VALUE OF HOLDING"; 2690 X = SHARES *U4:VL = X: GOSUB 130: GOSUB 100: PRINT "$"X$ 2700 PL = VL -NETINV 2710 S$ = CHR$(43 +2 *( SGN(PL) <0)) 2720 IF PL <0 THEN PRINT "LOSS";: GOTO 2740 2730 PRINT "PROFIT"; 2740 X = ABS(PL): GOSUB 130: GOSUB 100: CALL -1008: CALL -1008: PRINT S$" $"X$ 2750 PRINT : GOTO 3610 2760 REM INDIVIDUAL STOCK HISTORY 2770 GOSUB 320: HOME : VTAB 12: PRINT "COMPILING DATA... STAND BY" 2780 BOUGHT = 1:SOLD = 0:DIVD = 0 2790 PRINT D$"OPENSP."ST$",L55,S"DS",D"DD 2800 PRINT D$"READSP."ST$",R0" 2810 FOR X = 0 TO 7: INPUT S$(X): NEXT : INPUT SREC 2820 AB$ = S$(0):EX$ = EX$( VAL(S$(1)),1) 2830 BT$(0,0) = S$(2):BT$(0,1) = S$(3):BT$(0,2) = S$(4):X = VAL(S$(5)): GOSUB 130:BT$(0,4) = X$:X = VAL(S$(6)): GOSUB 130:BT$(0,5) = X$:X = VAL(S$(7)): GOSUB 130:BT$(0,6) = X$ 2840 X$ = S$(4): GOSUB 240:SX = X 2850 X = VAL(S$(3)) *SX: GOSUB 130:BT$(0,3) = X$ 2860 X = X + VAL(S$(5)) + VAL(S$(6)) + VAL(S$(7)): GOSUB 130:BT$(0,7) = X$ 2870 IF NOT SREC THEN 2930 2880 FOR RD = 1 TO SREC: PRINT D$"READSP."ST$",R"RD 2890 FOR S = 0 TO 7: INPUT U$(S): NEXT : IF VAL(U$(0)) < >0 THEN U$(0) = RIGHT$(U$(0), LEN(U$(0)) -1) 2900 IF LEFT$(U$(3),1) = "-" THEN U$(3) = RIGHT$(U$(3), LEN(U$(3)) -1) 2910 ON U$(1) = "B" GOSUB 2940: ON U$(1) = "S" GOSUB 3050: ON U$(1) = "D" GOSUB 3110: IF U$(1) = "N" AND VAL(U$(3)) THEN GOSUB 3220 2920 NEXT 2930 PRINT D$"CLOSE": GOTO 3320 2940 REM BOUGHT TRANSACTION 2950 BT$(BOUGHT,0) = U$(2) 2960 BT$(BOUGHT,1) = U$(3) 2970 BT$(BOUGHT,2) = U$(4) 2980 X = VAL(U$(5)): GOSUB 130:BT$(BOUGHT,4) = X$ 2990 X = VAL(U$(6)): GOSUB 130:BT$(BOUGHT,5) = X$ 3000 X = VAL(U$(7)): GOSUB 130:BT$(BOUGHT,6) = X$ 3010 X$ = U$(4): GOSUB 240:X = X * VAL(U$(3)): GOSUB 130:BT$(BOUGHT,3) = X$ 3020 X = X + VAL(U$(5)) + VAL(U$(6)) + VAL(U$(7)): GOSUB 130:BT$(BOUGHT,7) = X$ 3030 BOUGHT = BOUGHT +1 3040 RETURN 3050 REM STOCK SPLIT 3060 BT$(BOUGHT,0) = U$(2) 3070 BT$(BOUGHT,1) = U$(3) 3080 BT$(BOUGHT,2) = "SPLIT" 3090 BOUGHT = BOUGHT +1 3100 RETURN 3110 REM STOCK DIVIDEND 3120 DI$(DIVD,0) = U$(2) 3130 DI$(DIVD,1) = U$(3) 3140 DI$(DIVD,2) = U$(4) 3150 X$ = U$(4): GOSUB 240:X = VAL(U$(3)) *X: GOSUB 130:DI$(DIVD,3) = X$ 3160 BT$(BOUGHT,0) = DI$(DIVD,0) 3170 BT$(BOUGHT,1) = DI$(DIVD,1) 3180 BT$(BOUGHT,2) = "STOCK DIVIDEND" 3190 DIVD = DIVD +1 3200 BOUGHT = BOUGHT +1 3210 RETURN 3220 REM SOLD TRANSACTION 3230 SD$(SOLD,0) = U$(2) 3240 SD$(SOLD,1) = U$(3) 3250 SD$(SOLD,2) = U$(4) 3260 X = VAL(U$(0)): GOSUB 130:SD$(SOLD,3) = X$ 3270 SOLD = SOLD +1 3280 RETURN 3290 IF OD$ = "PRINTER" THEN RETURN 3300 LC = PEEK(37) +1: VTAB 24: PRINT "PRESS ANY KEY TO CONTINUE ";: POKE CB,0: CALL -756: HTAB 1: CALL -868: VTAB LC: HTAB 1: RETURN 3310 REM * PRINT REPORT 3320 HOME : GOSUB 550: PRINT "STOCK: " LEFT$(ST$,29 - LEN(AB$))" ("AB$")" 3330 PRINT "EXCHANGE: "EX$ 3340 PRINT LEFT$(F2$,39): IF OD$ = "SCREEN" THEN INVERSE 3350 PRINT " ACQUISITIONS ": NORMAL 3360 HT = 39:LNE = 6: POKE 34,3 3370 PRINT "DATE" SPC( 6)"#SHARES" SPC( 2)"PPS" SPC( 11)"AMOUNT" 3380 FOR X = 0 TO BOUGHT -1:LNE = LNE +2 +5 *(BT$(X,2) < >"STOCK DIVIDEND" AND BT$(X,2) < >"SPLIT"): IF LNE >23 THEN GOSUB 3290:LNE = 6 +4 *(BT$(X,2) < >"STOCK DIVIDEND" AND BT$(X,2) < >"SPLIT") 3390 PRINT BT$(X,0);: POKE 36,10: PRINT BT$(X,1);: POKE 36,19: PRINT BT$(X,2);: IF (BT$(X,2) = "STOCK DIVIDEND" OR BT$(X,2) = "SPLIT") THEN PRINT : GOTO 3440 3400 X$ = BT$(X,3): GOSUB 100: PRINT X$: PRINT : POKE 36,4: PRINT "AGENT'S COMMISSION";:X$ = BT$(X,4): GOSUB 100: PRINT X$ 3410 POKE 36,4: PRINT "ODD LOT COST";:X$ = BT$(X,5): GOSUB 100: PRINT X$ 3420 POKE 36,4: PRINT "SEC. EXCHANGE FEE";:X$ = BT$(X,6): GOSUB 100: PRINT X$ 3430 POKE 36,4: PRINT "TOTAL COST";:X$ = BT$(X,7): GOSUB 100: PRINT X$ 3440 PRINT : NEXT 3450 ON NOT SOLD GOTO 3530 3460 LNE = LNE +3: IF LNE >23 THEN GOSUB 3290:LNE = 6 3470 PRINT LEFT$(F1$,39): IF OD$ = "SCREEN" THEN INVERSE 3480 PRINT " SALES ": NORMAL 3490 PRINT "DATE" SPC( 6)"#SHARES" SPC( 2)"PPS" SPC( 8)"NET REC'D" 3500 FOR X = 0 TO SOLD -1:LNE = LNE +1: IF LNE >23 THEN GOSUB 3290:LNE = 5 3510 PRINT SD$(X,0);: POKE 36,10: PRINT SD$(X,1);: POKE 36,19: PRINT SD$(X,2);:X$ = SD$(X,3): GOSUB 100: PRINT X$ 3520 NEXT 3530 ON NOT DIVD GOTO 3600:LNE = LNE +3: IF LNE >23 THEN GOSUB 3290:LNE = 6 3540 PRINT LEFT$(F1$,39): IF OD$ = "SCREEN" THEN INVERSE 3550 PRINT " STOCK DIVIDENDS ": NORMAL 3560 PRINT "DATE" SPC( 6)"#SHARES" SPC( 2)"PPS" SPC( 11)"AMOUNT" 3570 FOR X = 0 TO DIVD -1:LNE = LNE +1: IF LNE >23 THEN GOSUB 3290:LNE = 4 3580 PRINT DI$(X,0);: POKE 36,10: PRINT DI$(X,1);: POKE 36,19: PRINT DI$(X,2);:X$ = DI$(X,3): GOSUB 100: PRINT X$ 3590 NEXT 3600 LNE = LNE +2: IF LNE >23 THEN GOSUB 3290 3610 PRINT D$"PR#0" 3620 PRINT : PRINT "PRESS ANY KEY FOR MENU ";: POKE CB,0: CALL -756: HTAB 1: GOTO 4710 3630 REM PORTFOLIO STATUS 3640 HOME : VTAB 4: HTAB 8: PRINT "* STOCK PORTFOLIO REPORT *": ON NOT REC GOSUB 330:PFLAG = 1:T(0) = 0:T(1) = 0:T(2) = 0 3650 VTAB 10: INPUT "ENTER TODAY'S DATE (MM/DD/YY): ";DT$ 3660 IF LEN(DT$) <6 OR LEN(DT$) >8 THEN CALL BELL: VTAB PEEK(37): GOTO 3650 3670 VTAB 12: PRINT "COMPILING DATA... STAND BY" 3680 FOR PX = 1 TO REC 3690 ST$ = ST$(PX,0) 3700 GOSUB 2300 3710 PR$(PX,0) = LEFT$(ST$,15) 3720 PR$(PX,1) = S$(0) 3730 PR$(PX,2) = EX$( VAL(S$(1)),0) 3740 PR$(PX,3) = STR$(SHARES) 3750 PR$(PX,4) = U$(4) 3760 X = SHARES *U4:VL = X: GOSUB 130:PR$(PX,5) = X$ 3770 PR$(PX,6) = NETINV$ 3780 PL = VL -NETINV:S$ = CHR$(43 +2 *( SGN(PL) <0)):X = ABS(PL): GOSUB 130:PR$(PX,7) = S$ +X$ 3790 T(0) = T(0) +VL:T(1) = T(1) +NETINV:T(2) = T(2) +PL 3800 NEXT :PFLAG = 0 3810 FOR X = 0 TO 2:X = T(Z): GOSUB 130:T$(Z) = X$: NEXT 3820 IF T(2) >0 THEN T$(2) = "+" +T$(2) 3830 HOME 3840 IF OD$ = "PRINTER" THEN 3970 3850 REM * SCREEN OUTPUT 3860 PRINT "STOCK PORTFOLIO REPORT";: HTAB 41 - LEN(DT$): PRINT DT$ 3870 HTAB 11: PRINT "VALUE OF" SPC( 4)"NET INV" SPC( 4)"PROFIT/"; 3880 PRINT "COMPANY" SPC( 4)"HOLDING" SPC( 4)"TO DATE" SPC( 7)"LOSS"F1$ 3890 POKE 34,5: VTAB 6 3900 XV = 4: FOR X = 1 TO REC:XV = XV +1 3910 IF XV = 21 THEN VTAB 24: PRINT "PRESS ANY KEY TO CONTINUE ";: POKE CB,0: CALL -756: HTAB 1: CALL -868:XV = 6: VTAB 22: HTAB 1 3920 PRINT PR$(X,1);:HT = 18:X$ = PR$(X,5): GOSUB 100: PRINT X$;:HT = 29:X$ = PR$(X,6): GOSUB 100: PRINT X$;:HT = 40:X$ = PR$(X,7): GOSUB 100: PRINT X$; 3930 NEXT : IF XV >19 THEN GOSUB 3300 3940 PRINT : INVERSE : PRINT "TOTALS";: NORMAL :HT = 18:X$ = T$(0): GOSUB 100: PRINT X$;:HT = 29:X$ = T$(1): GOSUB 100: PRINT X$;:HT = 40:X$ = T$(2): GOSUB 100: PRINT X$; 3950 GOTO 3620 3960 REM * PRINTER OUTPUT 3970 GOSUB 560 3980 PRINT CHR$(9)"80N": REM SET 80-COLUMN MODE 3990 PRINT "PORTFOLIO STATUS REPORT";: POKE 36,71 - LEN(DT$): PRINT "PREPARED "DT$ 4000 PRINT 4010 POKE 36,38: PRINT "PRICE";: POKE 36,48: PRINT "VALUE OF";: POKE 36,60: PRINT "NET INV." 4020 PRINT "COMPANY";: POKE 36,16: PRINT "ABBREV";: POKE 36,25: PRINT "EXCH";: POKE 36,30: PRINT "# SHR";: POKE 36,37: PRINT "PR SHR";: POKE 36,49: PRINT "HOLDING";: PRINT : POKE 36,60: PRINT "TO DATE";: POKE 36,71: PRINT "PROF/LOSS" 4030 PRINT F1$F1$ 4040 FOR X = 1 TO REC 4050 PRINT PR$(X,0);: POKE 36,16: PRINT PR$(X,1);: POKE 36,25: PRINT PR$(X,2); 4060 POKE 36,30: PRINT PR$(X,3); 4070 POKE 36,37: PRINT PR$(X,4); 4080 HT = 56:X$ = PR$(X,5): GOSUB 100: PRINT X$; 4090 HT = 68:X$ = PR$(X,6): GOSUB 100: PRINT X$; 4100 HT = 80:X$ = PR$(X,7): GOSUB 100: PRINT X$ 4110 NEXT : PRINT 4120 PRINT "TOTALS:"; 4130 HT = 56:X$ = T$(0): GOSUB 100: PRINT X$; 4140 HT = 68:X$ = T$(1): GOSUB 100: PRINT X$; 4150 HT = 80:X$ = T$(2): GOSUB 100: PRINT X$ 4160 PRINT : PRINT D$"PR#0" 4170 GOTO 4710 4180 REM ENTER DISK COMMANDS 4190 HOME 4200 PRINT "ENTER DISK COMMAND OR <RETURN>" 4210 PRINT F2$: POKE 34,2 4220 X$ = "": PRINT 4230 PRINT "COMMAND:";: CALL -657 4240 FOR S = 512 TO 767:S$ = CHR$( PEEK(S) -128): IF S$ < > CHR$(13) THEN X$ = X$ +S$: NEXT : GOTO 4290 4250 S = 767: NEXT 4260 IF X$ = "" THEN 4710 4270 IF LEFT$(X$,4) = "OPEN" OR LEFT$(X$,4) = "INIT" THEN CALL BELL: GOTO 4220 4280 PRINT D$X$: GOTO 4220 4290 GOTO 4710 4300 REM INITIALIZATION 4310 D$ = CHR$(4):CUR = 768 4320 IF PEEK(CUR) < >32 OR PEEK(CUR +1) < >190 THEN PRINT D$"BLOADCURSOR.BAR,A"CUR 4330 TL = 2:BL = 3:LL = 4 4340 FOR X = 1 TO 40:F1$ = F1$ +"-":F2$ = F2$ +"=":F3$ = F3$ +"*":F4$ = F4$ +".":F5$ = F5$ + CHR$(95): NEXT 4350 PRMPT$ = "ARROWS MOVE 'RETURN' TO SELECT/MODIFY" 4360 PS = 1: REM PRINTER SLOT # 4370 OD$ = "SCREEN": REM OUTPUT DEVICE; SCREEN OR PRINTER 4380 PD$ = "NO": REM RAM PRINTER DRIVER YES/NO 4390 FI$ = "SP.INDEXFILE" 4400 DS = 6:DD = 1: REM SLOT AND DRIVE 4410 BELL = -198 4420 CB = -16368 4430 DIM EX$(14,1),ST$(99,1),BT$(20,7),SD$(20,3),DI$(20,3),PR$(99,7) 4440 FOR X = 0 TO 14: READ EX$(X,0),EX$(X,1): NEXT 4450 DATA AS,AMERICAN,B,BOSTON,C,CINCINNATI,CBOE,CHICAGO BOARD OPTIONS EXCH. 4460 DATA I,INTERMOUNTAIN,M,MIDWEST,MO,MONTREAL,OTC,NASDAQ,NY,NEW YORK 4470 DATA P,PACIFIC,PH,PHILADELPHIA,SC,SPOKANE,TO,TORONTO,VC,VANCOUVER 4480 DATA *,OTHER 4490 REM CHECK FOR INDEXFILE 4500 ONERR GOTO 4530 4510 PRINT D$"VERIFY"FI$",S"DS",D"DD 4520 GOTO 4560 4530 IF PEEK(222) < >6 THEN 5120 4540 DFLAG = 1: ONERR GOTO 5120 4550 GOSUB 630: GOTO 4710 4560 ONERR GOTO 5120 4570 PRINT : PRINT D$"OPEN"FI$",S"DS",D"DD 4580 PRINT D$"READ"FI$ 4590 INPUT REC: ON NOT REC GOTO 4690: FOR X = 1 TO REC: INPUT ST$(X,0): NEXT 4600 FOR X = 1 TO REC 4610 PRINT D$"OPENSP."ST$(X,0)",L55,S"DS",D"DD 4620 PRINT D$"READSP."ST$(X,0)",R0" 4630 INPUT X$: INPUT X$ 4640 INPUT ST$(X,1): FOR Y = 0 TO 4: INPUT X$: NEXT : INPUT SREC 4650 IF NOT SREC THEN 4680 4660 PRINT D$"READSP."ST$(X,0)",R"SREC 4670 INPUT X$: INPUT X$: INPUT ST$(X,1) 4680 PRINT D$"CLOSE": NEXT 4690 PRINT D$"CLOSE" 4700 REM MAIN MENU 4710 TEXT : HOME 4720 PRINT F3$;: FOR X = 1 TO 5: HTAB 1: PRINT "*";: HTAB 40: PRINT "*";: NEXT : PRINT F3$ 4730 VTAB 3: HTAB 10: PRINT "NIBBLE STOCK ANALYST" 4740 HTAB 15: PRINT "BY JIM GANZ" 4750 HTAB 4: PRINT "COPYRIGHT 1984 BY MICROSPARC, INC." 4760 IF RFLAG THEN VTAB 15: GOTO 4820 4770 VTAB 9: HTAB 1: PRINT "MAIN MENU:": VTAB 11 4780 PRINT TAB( 5)"UPDATE A STOCK'S STATUS" 4790 PRINT TAB( 5)"REPORT MENU" 4800 PRINT TAB( 5)"INITIALIZE A STOCK" 4810 PRINT TAB( 5)"ENTER DISK COMMANDS" 4820 PRINT TAB( 5)"QUIT" 4830 PRINT 4840 PRINT TAB( 5)"DISK DRIVE" LEFT$(F4$,22)" "DD 4850 PRINT TAB( 5)"DISK SLOT" LEFT$(F4$,23)" "DS 4860 PRINT TAB( 5)"PRINTER SLOT" LEFT$(F4$,20)" "PS 4870 PRINT TAB( 5)"RAM PRINTER DRIVER" LEFT$(F4$,14);: HTAB 37 - LEN(PD$): PRINT ". "PD$ 4880 PRINT TAB( 5)"OUTPUT DEVICE" LEFT$(F4$,15);: HTAB 38 - LEN(OD$): PRINT " "OD$ 4890 VTAB 23: HTAB 1: PRINT PRMPT$; 4900 IF RFLAG THEN 2150 4910 CALL CUR,11,21 4920 ON PEEK(LL) GOTO 1390,2150,760,4190,4970 4930 IF PEEK(LL) <10 THEN VTAB 23: CALL -958 4940 ON PEEK(LL) -6 GOSUB 5010,4990,5030,5050,5080 4950 VTAB 23: HTAB 1: PRINT PRMPT$; 4960 POKE LL, PEEK(LL) -1 + PEEK(TL): CALL CUR +26: GOTO 4920 4970 HOME : END 4980 REM MODIFY CONFIGURATION 4990 VTAB 18: HTAB 38: GET X$: IF X$ <"1" OR X$ >"7" OR VAL(X$) = PS THEN CALL BELL: GOTO 4990 5000 PRINT X$:DS = VAL(X$): RETURN 5010 VTAB 17: HTAB 38: GET X$: IF X$ <"1" OR X$ >"2" THEN CALL BELL: GOTO 5010 5020 PRINT X$:DD = VAL(X$): RETURN 5030 VTAB 19: HTAB 38: GET X$: IF X$ <"1" OR X$ >"7" OR VAL(X$) = DS THEN CALL BELL: GOTO 5030 5040 PRINT X$:PS = VAL(X$): RETURN 5050 VTAB 20: IF PD$ = "NO" THEN PD$ = "YES": GOTO 5070 5060 PD$ = "NO" 5070 HTAB 37 - LEN(PD$): PRINT ". "PD$: RETURN 5080 VTAB 21: IF OD$ = "SCREEN" THEN OD$ = "PRINTER": GOTO 5100 5090 OD$ = "SCREEN" 5100 HTAB 37 - LEN(OD$): PRINT ". "OD$: RETURN 5110 REM ERROR TRAP 5120 TEXT : HOME : NORMAL 5130 CALL BELL: CALL -3288: PRINT : PRINT D$"CLOSE" 5140 ER = PEEK(222) 5150 IF ER = 4 THEN PRINT "DISK WRITE PROTECTED": GOTO 5230 5160 IF ER = 6 THEN PRINT "FILE NOT FOUND": GOTO 5230 5170 IF ER = 8 THEN PRINT "DISK I/O ERROR": GOTO 5230 5180 IF ER = 9 THEN PRINT "DISK FULL": GOTO 5230 5190 IF ER = 10 THEN PRINT "FILE LOCKED": GOTO 5230 5200 IF ER = 11 THEN PRINT "SYNTAX ERROR": GOTO 5230 5210 IF ER = 13 THEN PRINT "FILE TYPE MISMATCH": GOTO 5230 5220 PRINT "ERROR #";ER" IN LINE "; PEEK(218) + PEEK(219) *256 5230 PRINT "PRESS ANY KEY TO CONTINUE": GET K$: PRINT : GOTO 4710