Compucolor.org – Virtual Media

Listing of file='PORTXX.BAS;01' on disk='vmedia/chip_39-sector.ccvf'

1000 REM  ** PORTXX ** FOR PORTFOLIO STATUS **
1010 :
1020 REM  ** WRITTEN 1981 BY J. R. THIRTLE
1030 REM  ** 105 CONIFER LANE, ROCHESTER, NY, 14622
1040 REM  ** TEL. 716-467-9676
1050 REM  ** FIRST VERSION ON 'CHIP' LIBRARY DISK #39.
1060 REM  ** REVISED 3,5,83
1070 :
1080 CLEAR 1000:PLOT 14:REM  ** LG CHAR **
1090 PRINT ,,,"PORTXX"
1100 PRINT
1110 :
1120 PRINT ,"PORTXX ('XX' IS FOR PERSONAL ID) PRODUCES
1130 PRINT ,"A TABLE ON THE SCREEN OR PRINTER SHOWING
1140 PRINT ,"THE STATUS OF A STOCK PORTFOLIO AT ANY TIME.
1150 PRINT ,"NO DATA FILES ARE REQUIRED. SAMPLE 'READ DATA'
1160 PRINT ,"ARE SUPPLIED TO ILLUSTRATE OUTPUT.
1170 PRINT
1180 PRINT ,"FOR AN INDIVIDUAL PORTFOLIO THE USER WILL
1190 PRINT ,"CONVERT THE 'DUMMY' DATA TABLE TO REAL DATA,
1200 PRINT ,"CHANGE 'TN' TO THE REAL NUMBER OF COMPANIES,
1210 PRINT ,"AND WILL INPUT THE REAL PRICES.
1220 :
1230 PRINT
1240 PRINT ,"REVISED BY JOHN R. THIRTLE, MARCH 5, 1983"
1250 PRINT
1260 :
1270 INPUT "TO CONTINUE HIT RETURN ";RET
1280 :
1290 REM  ** DEFINITION OF VARIABLES                  **
1300 REM  ** C$=COMPANY NAME (=<6 CHAR)               **
1310 REM  ** N=NUMBER OF SHARES                       **
1320 REM  ** B=BASE COST OF THE SHARES ( ROUNDED OFF) **
1330 REM  ** CS=COST PER SHARE                        **
1340 REM  ** P=CURRENT PRICE PER SHARE                **
1350 REM  ** V=CURRENT VALUE OF THE HOLDING           **
1360 REM  ** G=GAIN                                   **
1370 REM  ** PC=PERCENT GAIN                          **
1380 REM  ** M,D,Y=DATE OF PURCHASE                   **
1390 :
1400 REM  ** DIMENSIONING VARIABLES **
1410 REM  ** TN=TOTAL NUMBER OF COMPANIES IN PORTFOLIO **
1420 :
1430 TN= 13
1440 :
1450 DIM C$(TN),N(TN),B(TN),CS(TN),P(TN),V(TN),G(TN)
1460 DIM PC(TN),M(TN),D(TN),Y(TN)
1470 DIM I$(TN),N$(TN),B$(TN),CS$(TN),P$(TN),V$(TN),G$(TN)
1480 DIM PC$(TN),M$(TN),D$(TN),Y$(TN)
1490 :
1500 REM  ** INPUT **
1510 PLOT 12:REM  ** ERASE SCREEN  **
1520 :
1530 A$= "PORTFOLIO RECORD: PORTXX"
1540 :
1550 INPUT "DATE: MONTH, DAY, YEAR: ";M,D,Y
1560 PRINT
1570 :
1580 REM  ** READ DATA ** CO, SHRS, BASE COST, PURCH DATE **
1590 FOR I= 1TO TN:READ C$(I),N(I),B(I),M(I),D(I),Y(I):NEXT I
1600 DATA  "AAAAA",150,4612,5,8,81
1610 DATA  "BBBBB",100,2008,5,8,81
1620 DATA  "CCCCC",150,2826,6,11,80
1630 DATA  "DDDDDD",200,5025,11,29,82
1640 DATA  "EEEEE",150,4558,10,3,80
1650 DATA  "FFFFFF",100,3272,5,8,81
1660 DATA  "GGGGG",400,3344,7,3,80
1670 DATA  "HHHHHH",100,2346,1,24,83
1680 DATA  "IIII",100,1774,12,31,81
1690 DATA  "JJJJJJ",125,1545,12,31,81
1700 DATA  "KKKKK",100,1698,3,19,81
1710 DATA  "LLLLLL",50,1011,10,3,80
1720 DATA  "MMMM",50,1349,3,26,82
1730 :
1740 PRINT ,,"1-DEMO USING DATA PRICES PROVIDED
1750 PRINT ,,"2-INPUT YOUR OWN PRICES
1760 PRINT
1770 INPUT "ENTER YOUR CHOICE:  ";Q
1780 PRINT
1790 ON QGOTO 2040,1810
1800 :
1810 PLOT 12:PRINT ,,"YOU ELECTED  TO INPUT PRICES"
1820 PRINT
1830 PRINT ,"PROGRAM WILL ROUND 3 DECIMALS TO 2 (EG, .125=.13)"
1840 PRINT ,"FOLLOWING ZEROS WILL BE PROVIDED WHERE NEEDED"
1850 PRINT
1860 PRINT "ID#";TAB( 4)"COMP.";TAB( 11)"PRICE"
1870 :
1880 FOR I= 1TO TN:PRINT I;TAB( 4)C$(I);TAB( 11);
1890 INPUT "";P(I):NEXT I
1900 :
1910 PRINT
1920 INPUT "ANY PRICE  CORRECTIONS (Y/N)? ";Q$
1930 IF Q$= "N"THEN 2140
1940 PRINT
1950 INPUT "ENTER CO ID# ";I:PRINT
1960 PRINT I;TAB( 4)C$(I);TAB( 15);
1970 INPUT "";P(I)
1980 PRINT
1990 INPUT "ANY MORE PRICE CORRECTIONS? ";Q$
2000 IF Q$= "N"THEN 2140
2010 PRINT :GOTO 1950:PRINT
2020 :
2030 REM  ** PRESET STOCK PRICES **
2040 PLOT 12:PRINT ,,"YOU HAVE SELECTED PRESET PRICES"
2050 PRINT
2060 PRINT ,,,"PLEASE WAIT"
2070 FOR I= 1TO TN:READ P(I):NEXT I:GOTO 2190
2080 DATA  101.00,22,43.375,44.50,55.625,60.75,16.875
2090 DATA  28.25,29.125,21.50,41.00,52.75,103.50
2100 :
2110 REM  ** INTEGRATE VARIABLES **
2120 REM  ** COST/SHR(CS),PRICE(P),VAL(V)
2130 REM  ** GAIN(G),%GAIN(PC) **
2140 PLOT 12
2150 PRINT ,,"YOU HAVE INPUT  PRICES"
2160 PRINT
2170 PRINT ,,,"PLEASE WAIT"
2180 PRINT
2190 FOR I= 1TO TN
2200 CS(I)= INT (B(I)/ N(I)* 10^ 2+ .5)/ 10^ 2
2210 P(I)= INT (100* P(I)+ .5)/ 100
2220 V(I)= INT (P(I)* N(I)+ .5)
2230 G(I)= V(I)- B(I)
2240 PC(I)= INT (100* G(I)/ B(I)+ .5)
2250 NEXT I
2260 :
2270 REM  ** CONVERT PRICES TO STRINGS, ADD TRAILING ZEROS **
2280 FOR I= 1TO TN:GOSUB 2310:P$(I)= ZZ$:NEXT I:GOTO 2440
2290 :
2300 REM  ** SUBROUTINE: ADD TRAILING ZEROS IN CENTS COLUMN **
2310 ZZ$= STR$ (P(I))
2320 FOR J= 1TO LEN (ZZ$)
2330 IF MID$ (ZZ$,J,1)= "."THEN 2360
2340 NEXT J
2350 ZZ$= ZZ$+ ".00":RETURN
2360 IF J= LEN (ZZ$)- 2THEN RETURN
2370 IF J< > LEN (ZZ$)- 1THEN 2390
2380 ZZ$= ZZ$+ "0":RETURN
2390 ZZ$= LEFT$ (ZZ$,J+ 2):RETURN
2400 :
2410 REM  ** CONVERT VARIABLES TO STRINGS AND RIGHT JUSTIFY **
2420 REM  ** L=EXPECTED NUMBER OF $ CHARACTERS + 1
2430 :
2440 FOR I= 1TO TN
2450 :
2460 REM  ** ID# **
2470 L= 3:Z$= STR$ (I):GOSUB 3620:I$(I)= Z$
2480 :
2490 REM  ** # OF SHRS **
2500 L= 4:Z$= STR$ (N(I)):GOSUB 3620:N$(I)= Z$
2510 :
2520 REM  ** BASE COST OF SHARES **
2530 L= 5:Z$= STR$ (B(I)):GOSUB 3620:B$(I)= Z$
2540 :
2550 REM  ** BASE COST/SHR **
2560 L= 6:Z$= STR$ (CS(I)):GOSUB 3620:CS$(I)= Z$
2570 :
2580 REM  ** PRICE **
2590 L= 7:Z$= P$(I):GOSUB 3620:P$(I)= Z$
2600 :
2610 REM  ** VALUE **
2620 L= 6:Z$= STR$ (V(I)):GOSUB 3620:V$(I)= Z$
2630 :
2640 REM  ** GAIN **
2650 L= 6:Z$= STR$ (G(I)):GOSUB 3620:G$(I)= Z$
2660 :
2670 REM  ** % GAIN (PC) **
2680 L= 4:Z$= STR$ (PC(I)):GOSUB 3620:PC$(I)= Z$
2690 :
2700 REM  ** DATE **
2710 L= 3
2720 Z$= STR$ (M(I)):GOSUB 3620:M$(I)= Z$
2730 Z$= STR$ (D(I)):GOSUB 3620:D$(I)= Z$
2740 Z$= STR$ (Y(I)):GOSUB 3620:Y$(I)= Z$
2750 :
2760 NEXT I
2770 :
2780 GOTO 3080
2790 :
2800 REM  ** HERE CORRECT PRICES AFTER VIEWING OUTPUT **
2810 :
2820 PRINT
2830 INPUT "ENTER CO. ID# ";I
2840 PRINT
2850 PRINT I;TAB( 4)C$(I);TAB( 15);
2860 INPUT "CORRECTED PRICE=";P(I)
2870 P(I)= INT (100* P(I)+ .5)/ 100
2880 V(I)= INT (P(I)* N(I)+ .5)
2890 G(I)= V(I)- B(I)
2900 PC(I)= INT (100* G(I)/ B(I)+ .5)
2910 GOSUB 2310
2920 P$(I)= ZZ$:REM  ** TRAILING ZEROS ADDED **
2930 :
2940 REM  ** RIGHT JUSTIFYING CORRECTIONS AND CALCULATIONS **
2950 L= 7
2960 Z$= P$(I):GOSUB 3620:P$(I)= Z$
2970 L= 6
2980 Z$= STR$ (V(I)):GOSUB 3620:V$(I)= Z$
2990 Z$= STR$ (G(I)):GOSUB 3620:G$(I)= Z$
3000 L= 4
3010 Z$= STR$ (PC(I)):GOSUB 3620:PC$(I)= Z$
3020 :
3030 PRINT
3040 INPUT "ANY OTHER PRICE CORRECTIONS (Y/N)? ";Q$
3050 IF Q$= "Y"THEN 2820:GOTO 3080
3060 :
3070 REM  ** DIRECT OUTPUT **
3080 PRINT
3090 INPUT "OUTPUT TO PRINTER, SCREEN, END (P/S/E)? ";O$
3100 IF O$= "S"THEN 3150
3110 IF O$= "E"THEN 3660
3120 GOSUB 3510:GOTO 3160
3130 :
3140 REM  ** FORMAT OUTPUT **
3150 PLOT 12,15:REM  ** ERASE, SMALL CHAR
3160 PRINT A$;TAB( 33);"DATE: ";M;D;Y
3170 PRINT
3180 PRINT "ID#";TAB( 4)"COMP.";TAB( 11)"SHRS";TAB( 16)"COST";
3190 PRINT TAB( 22)"C/SHR";TAB( 29)"PRICE";TAB( 36)"VALUE";
3200 PRINT TAB( 43)"GAIN";TAB( 50)"%G";TAB( 53)"PURCHDATE"
3210 PRINT
3220 FOR I= 1TO TN
3230 PRINT I$(I);TAB( 4)C$(I);TAB( 10)N$(I);TAB( 15)B$(I);
3240 PRINT TAB( 21)CS$(I);TAB( 28)P$(I);TAB( 35)V$(I);
3250 PRINT TAB( 41)G$(I);TAB( 48)PC$(I);TAB( 53)M$(I);
3260 PRINT D$(I);Y$(I)
3270 NEXT I
3280 :
3290 REM  ** CALCULATE TOTALS **
3300 REM  ** BT=TOTAL COST, VT=TOTAL VALUE, GT=TOTAL GAIN **
3310 REM  ** PCT=TOTAL PERCENT GAIN **
3320 BT= 0
3330 FOR I= 1TO TN:BT= BT+ B(I):NEXT I
3340 VT= 0
3350 FOR I= 1TO TN:VT= VT+ V(I):NEXT I
3360 GT= 0
3370 FOR I= 1TO TN:GT= GT+ G(I):NEXT I
3380 PCT= INT (100* GT/ BT+ .5)
3390 PRINT
3400 :
3410 PRINT "TOTALS";TAB( 14)BT;TAB( 35)VT;TAB( 41)GT;
3420 PRINT TAB( 48)PCT
3430 PRINT
3440 GOSUB 3560:REM  ** BACK TO CRT **
3450 :
3460 INPUT "ANY PRICE CORRECTIONS IN TABLE (Y/N)? ";Q$
3470 IF Q$= "N"THEN 3080
3480 PRINT :GOTO 2830
3490 :
3500 REM  ** SET UP PRINTER **
3510 TMP= PEEK (33265):REM  ** SAVE BASIC OUTPUT FLAG **
3520 PLOT 15,27,18,4:REM  ** 2 STOP BITS, 1200 BAUD **
3530 PLOT 27,13:REM  ** DIRECT OUTPUT TO RS-232C PORT **
3540 RETURN
3550 :
3560 POKE 33265,TMP:REM  ** RESET OUTPUT TO CRT **
3570 PRINT "FREE STRING SPACE= ";FRE (B$)
3580 PRINT
3590 RETURN
3600 :
3610 REM  ** RIGHT JUSTIFYING COLUMNS **
3620 Y$= "       ":REM  ** 7 SPACES **
3630 X= L- LEN (Z$)
3640 IF X< = 0THEN X$= "":Z$= X$+ Z$:RETURN
3650 X$= LEFT$ (Y$,X):Z$= X$+ Z$:RETURN
3660 END
3670 :