home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Share Gallery 1
/
share_gal_1.zip
/
share_gal_1
/
BF
/
BF015.ZIP
/
CPACFA.BAS
< prev
next >
Wrap
BASIC Source File
|
1987-12-18
|
14KB
|
672 lines
REM **** CPACFA ****
common cpafile$
UpperCase:
def fnucase$(cpafile$)
length=len(cpafile$)
if length =0 then
exit def
end if
for I=1 to length
ch=asc(mid$(cpafile$,I,1))
if ch > 96 and ch < 127 then
mid$(cpafile$,I,1)=chr$(ch-32)
end if
next
fnucase$=cpafile$
end def
cls
CLOSE
DEFSNG A-Z:DEFINT C,F,S,I,J
REM **** NOTE! CHANGE THE DIMENSIONS TO SUIT YOUR PROJECT
REM **** 300 = NUMBER OF ACTIVITIES
REM **** 24 = NUMBER OF MONTHS 2=NY= NUMBER OF YEARS
REM **** MAXIMUM ACTIVITY COST IS $32766 UNLESS YOU DEFSNG C
REM **** IF YOU HAVE 200 ACTIVITIES AND 4 YEARS, CHANGE ALL THE 300s TO
REM **** 200s and the 24 to 48 (DIM C2(200,48),A(1500),S2(200)...etc.
REM **** THE VARIABLE A IS DIMENSIONED TO FIVE YEARS (1827 DAYS) ****
DIM C2(300,24),A(1827),S2(300),F2(300),Z(300),C(300)
DIM X$(24),ZQ(24),ZH(24),D$(300),A3(100)
P6=2:NY=2
X$(1)=" JANUARY "
X$(2)="FEBRUARY "
X$(3)=" MARCH "
X$(4)=" APRIL "
X$(5)=" MAY "
X$(6)=" JUNE "
X$(7)=" JULY "
X$(8)=" AUGUST "
X$(9)="SEPTEMBER"
X$(10)=" OCTOBER "
X$(11)="NOVEMBER "
X$(12)="DECEMBER "
B4=VAL(MID$(DATE$,1,2))
B5=VAL(MID$(DATE$,4,2))
B6=VAL(MID$(DATE$,9,2))
GOSUB GetFile '1940 READ INPUT FILE FOR COSTS AND P$
INPUT "Want Early or Late Projection (E/L) ",Q$
IF Q$="L" OR Q$="l" THEN
F6=0
ELSE F6=1
end if
GOSUB ReadLGS '2520 READ LGS FILE FOR OTHER INFO
GOSUB ReadHolidays '2420 READ HOLIDAYS
ON ERROR GOTO errors '3000
PRINT "**** NOW FIGURING DAYS ****"
GOSUB DateArray '2150
PRINT "**** DAYS FIGURED - DISTRIBUTING COSTS AMONG MONTHS ****"
M=INT(A(L+1)/10000) 'LOWEST MONTH IN PRINTOUT
Y=A(L+1)-(INT(A(L+1)/100)*100) 'LOWEST YEAR
D=INT((A(L+1)-(M*10000)-Y)/100) 'LOWEST DAY
M1=INT(A(H+1)/10000) 'HIGHEST MONTH IN PRINTOUT
Y1=A(H+1)-(INT(A(H+1)/100)*100) 'HIGHEST YEAR
D1=INT((A(H+1)-(M1*10000)-Y1)/100) 'HIGHEST DAY
FOR J=1 TO NY
FOR I=1 TO 12
X$((12*(J-1))+I)=X$(I)
NEXT
NEXT
M4=(Y1-Y)*12+(M1-M)+1+1 '# OF MONTHS FROM BEGINNING TO END
MPP=6 '# OF MONTHS PER PRINTOUT SHEET
X1=INT(M4/MPP) '# OF SEGMENTS 6=WIDTH-MONTHS
X2=INT((M4/MPP-X1)*MPP+.1) '# OF EXTRA MONTHS
FOR I=1 TO N
IF F2(I)<=S2(I) THEN
C(I)=C(I)
ELSE
C(I)=C(I)/(F2(I)-S2(I)) 'get unit cost
end if
J=S2(I)
550 K=1
M3=INT(A(J+1)/10000) 'MONTH
Y3=A(J+1)-INT(A(J+1)/100)*100 'YEAR
Y2=(Y3-Y)*12+(M3-M)+1 '# OF MONTH FROM BEGINNING
590 J=J+1
K=K+1 'get number of days
IF J>=F2(I) THEN
goto 630
end if
IF INT(A(J+1)/10000)=M3 THEN
goto 590
end if
630 C2(I,Y2)=C(I)*(K-1) 'monthly cost = unit cost times number of days
IF J>=F2(I) THEN
goto 660
end if
GOTO 550
660 NEXT
FOR I=1 TO N
IF F2(I)<=S2(I) THEN
C2(I,M4)=C(I)
ELSE
C2(I,M4)=C(I)*(F2(I)-S2(I))
end if
NEXT
FOR I=1 TO M4
ZH(I)=0
FOR J=1 TO N
ZH(I)=ZH(I)+C2(J,I) 'SUM MONTH TOTALS
NEXT
IF I=1 THEN
ZQ(I)=ZH(I)
ELSE ZQ(I)=ZQ(I-1)+ZH(I)
end if
IF I=M4 THEN
ZQ(I)=ZQ(I-1)
end if
NEXT
GetOutput:
close
input "Output to <F>ile, <S>creen, or <P>rinter (F/S/P)";O$
if O$="F" or O$="f" then
goto OutFile
elseif O$="S" or O$="s" then
goto OutScreen
elseif O$="P" or O$="p" then
goto OutPrint
elseif O$<>"F" or O$<>"f" or O$<>"S" or O$<>"s" or O$<>"P"or O$<>"p" then
goto GetOutput
end if
OutFile:
PRINT "Name of output file is ";F$;".CFA";:INPUT " O.K. (Y/N) ";Q$
790 IF Q$="N" OR Q$="n" THEN
INPUT "Enter new output filename [.CFA] ";F$
end if
IF INSTR(1,F$,".")<>0 THEN
BEEP
PRINT "**** NO EXTENSIONS PLEASE ****"
GOTO 790
end if
OPEN F$+".CFA" FOR OUTPUT AS #1
goto SendOut
OutScreen:
open "SCRN:" for output as #1
goto SendOut
OutPrint:
open "lpt1" for output as #1
SendOut:
PRINT "Want to suppress zero-cost activities (Y/N) ";
INPUT Q$
IF Q$="N" OR Q$="n" THEN
S8=0
ELSE S8=1
end if
GOSUB PrtUsages '1810 SETUP USAGES
PRINT "**** THINKING ";
PRINT #1,G8$ 'FORM FEED
PRINT #1," CASH FLOW ANALYSIS - PROJECTED CASH REQUIREMENTS BY MONTH AND ACTIVITY"
PRINT #1,G9$
T4=INT((116-LEN(P$))/2)
PRINT #1,TAB(T4);P$
IF FCTR<>0 THEN
PRINT #1,TAB(36);"ALL COSTS ARE SCALED DOWN BY A FACTOR OF";10^FCTR
ELSE PRINT #1,G9$
end if
IF F6=1 THEN
P1$="EARLY START - EARLY"
ELSE P1$="LATE START - LATE"
end if
P1$=P1$+" FINISH PROJECTION"
T5=INT((116-LEN(P1$))/2)
PRINT #1,TAB(T5);P1$
PRINT #1,G9$
PRINT #1,G9$
PRINT #1, USING " RUN DATE: \ \ ## 19## ";X$(B4),B5,B6
PRINT #1, USING " PROJECT START: \ \ ## 19## ";X$(M),D6,Y6
PRINT #1, USING " COMPLETION: \ \ ## 19## ";X$(M1),D1,Y1
PRINT #1,G9$
L=1-MPP
M=M-MPP
IF X1=0 THEN
goto 1240
end if
FOR I=1 TO X1 '# OF FULL SEGMENTS
PRINT ".";
IF I>1 THEN
GOSUB PageHeaderNew
end if
M=M+MPP
IF X2=0 AND I=X1 THEN
X$(M+5)=S$ 'IN CASE OF LAST MONTH
end if
PRINT #1, USING T$;X$(M),X$(M+1),X$(M+2),X$(M+3),X$(M+4),X$(M+5)
L=L+MPP
PRINT #1,G9$
FOR J=1 TO N
IF S8=1 AND C2(J,M4)=0 THEN
goto 1180
end if
PRINT #1, USING U$;D$(J),C2(J,L),C2(J,L+1),C2(J,L+2),C2(J,L+3),C2(J,L+4),C2(J,L+5)
1180 NEXT J
PRINT #1,G9$
PRINT #1, USING W$;ZH(L),ZH(L+1),ZH(L+2),ZH(L+3),ZH(L+4),ZH(L+5)
PRINT #1,G9$
PRINT #1, USING W1$;ZQ(L),ZQ(L+1),ZQ(L+2),ZQ(L+3),ZQ(L+4),ZQ(L+5)
if O$="S" or O$="s" then
input "Press the ENTER key to continue....",junk$
end if
NEXT I
1240 IF X2=0 THEN
PRINT " FINISHING ****"
GOTO 1760
end if
I=I+1
IF X1<>0 THEN
GOSUB PageHeaderNew '1880
end if
M=M+MPP
L=L+MPP
ON X2 GOTO 1300,1320,1340,1360,1380
1300 PRINT #1, USING T$;S$
GOTO Finishing '1390
1320 PRINT #1, USING T$;X$(M),S$
GOTO Finishing '1390
1340 PRINT #1, USING T$;X$(M),X$(M+1),S$
GOTO Finishing '1390
1360 PRINT #1, USING T$;X$(M),X$(M+1),X$(M+2),S$
GOTO Finishing '1390
1380 PRINT #1, USING T$;X$(M),X$(M+1),X$(M+2),X$(M+3),S$
Finishing:
1390 PRINT #1,G9$
PRINT " FINISHING ****"
FOR J=1 TO N
IF S8=1 AND C2(J,M4)=0 THEN
goto 1530
end if
ON X2 GOTO 1440,1460,1480,1500,1520
1440 PRINT #1, USING U$;D$(J),C2(J,L)
GOTO 1530
1460 PRINT #1, USING U$;D$(J),C2(J,L),C2(J,L+1)
GOTO 1530
1480 PRINT #1, USING U$;D$(J),C2(J,L),C2(J,L+1),C2(J,L+2)
GOTO 1530
1500 PRINT #1, USING U$;D$(J),C2(J,L),C2(J,L+1),C2(J,L+2),C2(J,L+3)
GOTO 1530
1520 PRINT #1, USING U$;D$(J),C2(J,L),C2(J,L+1),C2(J,L+2),C2(J,L+3),C2(J,L+4)
1530 NEXT J
PRINT #1,G9$
ON X2 GOTO 1560,1580,1600,1620,1640
1560 PRINT #1, USING W$;ZH(L)
GOTO 1650
1580 PRINT #1, USING W$;ZH(L),ZH(L+1)
GOTO 1650
1600 PRINT #1, USING W$;ZH(L),ZH(L+1),ZH(L+2)
GOTO 1650
1620 PRINT #1, USING W$;ZH(L),ZH(L+1),ZH(L+2),ZH(L+3)
GOTO 1650
1640 PRINT #1, USING W$;ZH(L),ZH(L+1),ZH(L+2),ZH(L+3),ZH(L+4)
1650 PRINT #1,G9$
ON X2 GOTO 1670,1690,1710,1730,1750
1670 PRINT #1, USING W1$;ZQ(L)
GOTO 1760
1690 PRINT #1, USING W1$;ZQ(L),ZQ(L+1)
GOTO 1760
1710 PRINT #1, USING W1$;ZQ(L),ZQ(L+1),ZQ(L+2)
GOTO 1760
1730 PRINT #1, USING W1$;ZQ(L),ZQ(L+1),ZQ(L+2),ZQ(L+3)
GOTO 1760
1750 PRINT #1, USING W1$;ZQ(L),ZQ(L+1),ZQ(L+2),ZQ(L+3),ZQ(L+4)
1760 IF S8=1 THEN
PRINT #1,G9$
end if
nt$="Numbers may be off due to rounding."
IF S8=1 THEN
PRINT #1," NOTES: (1) Zero-cost activities are suppressed."
print #1," (2) "+nt$
else
print #1," NOTE: "+nt$
end if
input "Would you like to run another Cost Sheet (N/Y)";O1$
if O1$="N" or O1$="n" or O1$="" then
goto DoneOut
elseif O1$<>"N" or O1$<>"n" or O1$<>"" then
close #1
goto GetOutput
end if
DoneOut:
CLOSE #1
if O$="F" or O$="f" then
junk$=""
while len(junk$)=0
junk$=inkey$
color 0,15,0
locate 25,2
PRINT "**** ";F$;".CFA CREATED **** Press any key to continue.";
wend
color 15,0,0
end if
Done1:
close
1800 chain "CPAMENU"
PrtUsages:
1810 REM **** USAGES FOR PRINTOUT ****
S$=" TOTAL "
T$=" \ \ \ \ \ \ \ \ \ \ \ \"
U$=" \ \ ########### ########### ########### ########### ########### ###########"
W$=" TOTAL MONTHLY PROJECTION = ########### ########### ########### ########### ########### ###########"
W1$=" CUMULATIVE PROJECTION = ########### ########### ########### ########### ########### ###########"
RETURN
PageHeaderNew:
1880 REM **** PAGE HEADER FOR NEW SECTION ****
PRINT #1,G8$ 'FORM FEED
PRINT #1,TAB(T4);P$;TAB(116);"SECTION";P6
P6=P6+1
PRINT #1,G9$
RETURN
GetFile:
1940 REM **** READING IN ALREADY CREATED INPUT FILE ******************
if len(cpafile$) > 0 then
G$=cpafile$
goto commndfile
end if
GetFile1:
1950 INPUT "Enter the name of the input file [.CPM] ";G$
IF G$="Q" OR G$="q" or G$="QUIT" THEN
close
chain "CPAMENU"
end if
commndfile:
P=INSTR(1,G$,".")
IF P<>0 THEN
F$=LEFT$(G$,INSTR(1,G$,".")-1)
ELSE F$=G$
end if
IF LEN(F$)>8 THEN
PRINT "**** NOT A VALID PCPM FILE ****"
BEEP
GOTO GetFile1 '1950
end if
ON ERROR GOTO 2140
cpafile$=F$
cpafile$=fnucase$(cpafile$)
F$=cpafile$
G$=F$+".CPM"
OPEN G$ FOR INPUT AS #3
INPUT #3,P$,T6$,DA$
I=0:ZCMAX=0
2040 I=I+1
IF EOF(3) THEN
goto 2090
end if
INPUT #3,D$,S,F,O2,D,A6,P,B,Z(I)
IF Z(I)>ZCMAX THEN
ZCMAX=Z(I) 'find max cost/act
end if
IF I/10=INT(I/10) THEN
PRINT I;
end if
GOTO 2040
2090 N=I-1
M6=VAL(LEFT$(DA$,2)):D6=VAL(MID$(DA$,3,2)):Y6=VAL(RIGHT$(DA$,2))
CLOSE #3
PRINT " **** INPUT FILE READ ****":FCTR=0
2122 IF ZCMAX<32767 THEN
goto 2130
end if 'NO MORE SCALING
FCTR=FCTR+1 'POWER TO SCALE
ZCMAX=ZCMAX/10
GOTO 2122
2130 IF FCTR=0 THEN
PRINT "NO COST SCALING"
ELSE PRINT "ALL COSTS ARE SCALED DOWN BY";10^FCTR
end if
FOR I=1 TO N
C(I)=Z(I)/(10^FCTR)
NEXT
RETURN
2140 IF ERR=6 THEN
PRINT "Each activity cost must be < $32767 see lines 130-140."
PRINT
INPUT "Press ENTER to continue....",Q$
close
chain "CPAMENU"
end if
IF ERR<>53 THEN
goto 3000
end if
PRINT "**** FILE DOES NOT EXIST - TRY AGAIN ****"
BEEP
RESUME GetFile '1940
DateArray:
2150 REM ** CREATE ARRAY OF MMDDYYS ******************************
2160 D1=D1+1
IF D1>C3+1 THEN
RETURN
end if
2180 A8=A8+1
GOSUB Cvt2MoDaYr '2270
IF LEFT$(T6$,3)="CAL" THEN
goto 2210
ELSEIF D4=6 OR D4=7 THEN
goto 2180
end if
2210 O8=0
GOSUB HolidayOrNot '2380
IF O8=1 THEN
goto 2180
end if
A(D1)=M5*10000+D5*100+Y5
GOTO DateArray '2160
REM ** CONVERT CENTURY DAY TO MM, DD, YY **************************
Cvt2MoDaYr:
2270 T9=INT(A8/1461)
Y5=INT((A8-T9+364)/365)
Y4=A8-INT((Y5-1)*1461/4)
L8=2
IF Y5/4=INT(Y5/4) THEN
L8=1
end if
T9=Y4
IF T9>61-L8 THEN
T9=T9+L8
end if
M5=INT((T9*9+269)/275)
D5=T9-INT(M5*275/9)+30
D4=A8-INT(A8/7)*7+1
RETURN
HolidayOrNot:
2380 FOR J=1 TO H9 '**** HOLIDAY OR NOT ***********************************
IF A8=A3(J) THEN
O8=1
end if
NEXT J
RETURN
ReadHolidays:
2420 ON ERROR GOTO 2510
OPEN F$+".HOL" FOR INPUT AS #1
J=0
2450 J=J+1
IF EOF(1) THEN
goto 2490
end if
INPUT #1,A3(J)
GOTO 2450
2490 H9=J-1 'NUMBER OF HOLIDAYS
2500 CLOSE #1:RETURN
2510 PRINT "**** NO HOLIDAY FILE - CONTINUING ****":RESUME 2500
ReadLGS:
2520 REM READING IN SORT FILE
ON ERROR GOTO 2720 'NO SORT FILE
OPEN F$+".LGS" FOR INPUT AS #1
INPUT #1,A8,A(1),C3
I=0
L=5000:H=0
2580 I=I+1
IF EOF(1) THEN
goto 2680
end if
IF I MOD 10=0 THEN
PRINT I;
end if
IF F6=1 THEN
goto 2640
end if
INPUT #1,D$(I),S,F,O2,D,ES,S2(I),EF,F2(I),RF,P,B
GOTO 2650
2640 INPUT #1,D$(I),S,F,O2,D,S2(I),LS,F2(I),LF,RF,P,B
2650 IF S2(I)<L THEN
L=S2(I)
end if
IF F2(I)>H THEN
H=F2(I)
end if
GOTO 2580
2680 NACT=I-1
IF NACT<>N THEN
BEEP
PRINT "**** NUMBER OF ACTIVITIES IN FILES DOESNT MATCH";NACT;N;"****"
GOTO Done1 '1800
end if
PRINT "**** LGS FILE READ ****"
CLOSE #1
RETURN
2720 PRINT "FILE ";F$;".LGS MUST BE CREATED BY OPTION 5 FIRST AND EXIST ON DISK****"
BEEP
CLOSE #1
chain "CPAMENU"
errors:
3000 'errors
PRINT "PC error number";ERR;"at line";ERL;"- please check your BASIC manual"
PRINT "Please, if you don't think you caused the error (by wierd input), drop me"
PRINT "a note. I will be happy to clean it up and update PCPM. Len"
PRINT :INPUT "Press ENTER to return to the main menu....",Q$
RESUME 3060
Done:
3060 goto Done1 'RUN "CPAMENU"