home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Share Gallery 1
/
share_gal_1.zip
/
share_gal_1
/
BF
/
BF015.ZIP
/
CPABAR.BAS
next >
Wrap
BASIC Source File
|
1988-06-22
|
12KB
|
604 lines
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
REM **** CPABAR ****
CLOSE
CLS
print " GENERATE BAR CHART"
print
DEFSNG A-Z:DEFINT E,L,I,J
DIM X$(12)
FOR I=1 TO 12
READ X$(I)
NEXT I
DATA "JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC"
DIM T$(100),EF(500),ES(500),LF(500),LC(500),D$(500),A(1500),A3(100)
B4=VAL(MID$(DATE$,1,2))
B5=VAL(MID$(DATE$,4,2))
B6=VAL(MID$(DATE$,9,2))
DEF FNV(I)=INT((I-1)*Q+1.5)
T1$=" EACH COLUMN WILL REPRESENT ###.## \ \ "
GOSUB GetFile '1770
GOSUB SortFileRead '2320 READ LGS FILE
GOSUB HolidayRead '2210 READ HOLIDAYS
GOSUB FigureDays '1910 FIGURE DAYS
Starting:
190 INPUT "Output to <F>ile, <S>creen, or <P>rinter (F/S/P)";O$
IF O$="F" OR O$="f" then
GOTO ToFile '230
end if
IF O$="S" OR O$="s" THEN
OPEN "SCRN:" FOR OUTPUT AS #2
GOTO ToScrnOrPrt '260
end if
IF O$="P" OR O$="p" THEN
OPEN "LPT1:" FOR OUTPUT AS #2
GOTO ToScrnOrPrt '260
end if
IF O$<>"F" OR O$<>"f" OR O$<>"S" OR O$<>"s" OR O$<>"P" OR O$<>"p" THEN
goto starting '190
end if
ToFile:
230 PRINT "Output file will be ";F$;".BAR O.K. (Y/N) ";
INPUT Q$
IF Q$="N" or Q$="n" THEN
INPUT "Enter new name ";F$
ELSEif Q$<>"N" or Q$<>"n" then
F$=F$+".BAR"
end if
OPEN F$ FOR OUTPUT AS #2
ToScrnOrPrt:
260 PRINT "**** PROJECT LENGTH IS";C3;T6$;". ****"
INPUT "Enter width for the chart. ENTER defaults to 40 : ",L
IF L<=0 OR L>95 THEN
L=40
ELSE L=INT(L)
end if
IF LEFT$(T6$,3)<>"WOR" AND LEFT$(T6$,3)<>"CAL" THEN
PRINT "**** BAR CHARTS ONLY WORK ON PROJECTS WITH CALENDAR OR WORKING DAYS ****"
GOTO DoneBar '560
end if
INPUT "Want Whole project or Portion (W/P) ",W$
V5=0 'FLAG FOR WHETHER ALL ACTIVITIES ARE INCLUDED IN THE PORTION
Q=C3/L 'PROJECT LENGTH DIVIDED BY WIDTH
IF LEFT$(W$,1)="P" OR LEFT$(w$,1)="p" THEN
PRINT "****";
PRINT USING T1$;Q,T6$;
PRINT "****"
else
GOTO Header '970
end if
AllOrPart:
320 INPUT "Will several portions be placed together (Y/N/Help) ",Q$
IF LEFT$(Q$,1)="N" or left$(Q$,1)="n" THEN
goto BeginDate '390
end if
IF LEFT$(Q$,1)="H" or left$(Q$,1)="h" THEN
PRINT:PRINT;"If you want to put several portions together, reply 'Y'. PCPM will space"
PRINT "activities within each portion so the activities which extend from one portion "
PRINT "to another will be in alignment when the barcharts are placed side by side."
PRINT "If you reply 'N', then only those activities that appear within"
print "the time period you specify are shown."
print
GOTO AllOrPart '320
end if
v5=1 'case yes
BeginDate:
390 IF T7=0 THEN
INPUT "Enter beginning date in MMDDYY format ",A7
ELSE goto BeginTime '420
end if
GOSUB DatePointer '1700 FIND VALID DATE AND ARRAY A NUMBER
D5=J
GOTO EndDate '440
BeginTime:
420 INPUT "Enter beginning time period number (integer) ",D5
IF D5<=0 OR D5>C3 THEN
BEEP
PRINT "**** INVALID RESPONSE ****"
GOTO BeginTime '420
end if
EndDate:
440 PRINT "Enter ending date (MMDDYY) or length in ";T6$;" ";
INPUT A7
IF A7<10000 THEN
D7=A7
D6=D5+D7
GOTO DoneTime '490
end if
GOSUB DatePointer '1700
D6=J
DoneTime:
490 IF D6<=D5 THEN
goto BeginDate '390
ELSE Q=(D6-D5)/L
end if
PRINT "****";:PRINT USING T1$;Q,T6$;:PRINT "****":GOTO Header '970
510 PRINT #2,G9$
PRINT #2,TAB(36);
GOSUB 840
if O$="P" or O$="p" then
print #2, chr$(12)
end if
INPUT "Want another Bar Chart from the same run (N/Y) ",Q$
IF LEFT$(Q$,1)="Y" OR LEFT$(Q$,1)="y" THEN
CLOSE#2
GOTO Starting '190
end if
DoneBar:
560 CLOSE #2
chain "CPAMENU"
580 REM
FOR I=1 TO L+1
A6=A(FNV(I)+D5-1)
GOSUB 920
T$(I)=P6$
NEXT I
S7=LEN(T$(1))
FOR I=2 TO L+1
IF LEN(T$(I))>S7 THEN
S7=LEN(T$(I))
end if
NEXT I
I=S7
FOR J=1 TO L+1
700 I1=LEN(T$(J))
IF I-I1=0 THEN
goto 740
end if
T$(J)=" "+T$(J)
GOTO 700
740 NEXT J
FOR J=1 TO I
PRINT #2,TAB(36);MID$(T$(1),J,1);
FOR K=2 TO L+1
PRINT #2,MID$(T$(K),J,1);
NEXT K
PRINT #2,G9$
NEXT J
REM **** PRINTING HEADINGS AND DASHES ****
PRINT #2," ACT DESCRIPTION ";
840 T2$=""
FOR K=1 TO L+1
T2$=T2$+"="
NEXT
PRINT #2,T2$
PRINT #2,G9$
RETURN
REM **** CONVERT TO MONTH DAY YEAR IN STRING FORMAT ****
920 P6$=STR$(A6)
IF LEN(P6$)=6 THEN
P6$=" "+P6$
end if
U9=VAL(LEFT$(P6$,3))
P6$=X$(U9)+RIGHT$(P6$,4)
RETURN
Header:
970 T4=INT((L+3)/2)
PRINT #2,G8$
PRINT #2,TAB(T4);"CRITICAL PATH ANALYSIS: BAR CHART"
PRINT #2,G9$
T4=INT((L+8)/2)
PRINT #2,G9$
PRINT #2,TAB(T4+10);"LEGEND"
PRINT #2,TAB(T4);"==========================="
PRINT #2,TAB(T4);"== CRITICAL PATH = # =="
PRINT #2,TAB(T4);"== ACTIVITY DURATION = * =="
PRINT #2,TAB(T4);"== FLOAT TIME = - =="
PRINT #2,TAB(T4);"== FINISHED ACTIVITY = C =="
PRINT #2,TAB(T4);"== CONTINUATIONS = < > =="
PRINT #2,TAB(T4);"==========================="
PRINT #2,G9$
P4$="PROJECT NAME : "+P$
T4=INT((L+15-LEN(P4$))/2)
PRINT #2,TAB(T4);P4$;" RUN DATE: ";X$(B4);B5;"19";RIGHT$(STR$(B6),2)
PRINT #2,G9$
PRINT #2,G9$
IF LEFT$(W$,1)<>"P" or left$(W$,1) <> "p" THEN
goto 1210
ELSE PRINT #2,TAB(20);"REQUESTED WIDTH =";
end if
PRINT #2,L;" REQUESTED DAYS = ";D6-D5;
T4=64
GOTO 1220
1210 T4=INT((L+27-LEN(T6$))/2)
1220 PRINT #2,TAB(T4);"TIME PERIOD = ";T6$;
PRINT #2, USING " * ###.##";Q
PRINT #2,G9$
IF LEFT$(W$,1)="P" or left$(W$,1)="p" THEN
goto 1270
ELSE D5=1
end if
D6=D5+C3
1270 GOSUB 580
K5=0
A$="*"
B$="-"
PRINT #2,G9$
PRINT " **** FORMING BAR CHART ****"
FOR I=1 TO N
W=I
IF V5=1 THEN
goto 1380
end if
IF ES(W)+1>D6 THEN
goto 1680
end if
IF LF(W)+1<D5 AND EF(W)+1<D5 THEN
goto 1680
end if
1380 IF EF(W)=LF(W) THEN
A$="#"
ELSE A$="*"
end if
IF LC(W)=1 THEN
A$="C"
end if
IF V5=1 THEN
goto 1420
end if
IF A$="C" AND EF(W)+1<D5 THEN
goto 1680
end if
1420 IF V5=1 AND D6<ES(W)+1 THEN
goto 1640
end if
IF D5>=ES(W)+1 THEN
A=D5
ELSE A=ES(W)+1
end if
IF D6<=LF(W)+1 THEN
C=D6
ELSE C=LF(W)+1
end if
IF D5>=EF(W)+1 THEN
B=D5
ELSE goto 1470
end if
IF D5>=EF(W)+1 THEN
goto 1480
end if
1470 IF D6<=EF(W)+1 THEN
B=D6
ELSE B=EF(W)+1
end if
1480 A=INT((A-D5)/Q)+5
C=INT((C-D5)/Q)+5
B=INT((B-D5)/Q)+5
PRINT #2,LEFT$(D$(W),32);TAB(A+30);
IF D5>ES(W)+1 OR D5>EF(W)+1 THEN
PRINT #2,"<";
ELSE PRINT #2," ";
end if
IF D5>=EF(W)+1 THEN
B=B-1
ELSE goto 1550
end if
IF V5=1 AND A$="C" AND EF(W)+1<D5 THEN
goto 1670
ELSE goto 1600
end if
1550 FOR J=A TO B
PRINT #2,A$;
NEXT J
IF A$="C" THEN
goto 1630 'STOP AT EARLY FINISH OF COMPLETE ACT
end if
IF D6<=EF(W)+1 OR B>=C THEN
goto 1660
end if
1600 FOR J=B+1 TO C
PRINT #2,B$;
NEXT J
1630 IF A$="C" AND D6>EF(W)+1 THEN
goto 1670
ELSE goto 1660
end if
1640 PRINT #2,LEFT$(D$(W),33);TAB(36+D6-D5);">";
GOTO 1670
1660 IF D6<LF(W)+1 OR D6<EF(W)+1 THEN
PRINT #2,">";
end if
1670 PRINT #2,G9$
1680 NEXT I
GOTO 510
DatePointer:
1700 FOR J=1 TO C3+1 '**** FIND DATE AND RETURN POINTER *****
IF A7=A(J) THEN
goto 1760
end if
NEXT J
BEEP
PRINT "**** DAY";A7;"MUST BE BETWEEN";A(1);"AND";A(C3+1);" NO HOLIDAYS ****"
INPUT "Enter new day (MMDDYY) ",A7
GOTO DatePointer '1700
1760 RETURN
GetFile:
1770 REM **** READING IN ALREADY CREATED INPUT FILE ******************
if len(cpafile$) > 0 then
G$=cpafile$
goto commndfile
end if
GetFile1:
1780 INPUT "Enter the name of the input file [.CPM] or Q to quit ";G$
IF G$="Q" OR G$="q" 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 '1780
end if
ON ERROR GOTO 1900
cpafile$=F$
cpafile$=fnucase$(cpafile$)
F$=cpafile$
G$=F$+".CPM"
OPEN G$ FOR INPUT AS #3
INPUT #3,P$,T6$,DA$
M6=VAL(LEFT$(DA$,2)):D6=VAL(MID$(DA$,3,2)):Y6=VAL(RIGHT$(DA$,2))
CLOSE #3
PRINT " **** INPUT FILE READ ****"
RETURN
1900 PRINT "**** FILE DOES NOT EXIST - TRY AGAIN ****"
BEEP
GOTO GetFile '1770
FigureDays:
1910 REM ** CREATE ARRAY OF MMDDYYS ******************************
PRINT "**** CALCULATING DAYS ****"
D1=1
IF A(1)=0 THEN
A(1)=M6*10000+D6*100+Y6
end if
1950 D1=D1+1
IF D1>C3+1 THEN
RETURN
end if
1970 A8=A8+1
GOSUB Cnvt2DaMoYr '2060
IF LEFT$(T6$,3)="CAL" THEN
goto 2000
ELSEIF D4=6 OR D4=7 THEN
goto 1970
end if
2000 O8=0
GOSUB HolidayOrNot '2170
IF O8=1 THEN
goto 1970
end if
A(D1)=M5*10000+D5*100+Y5
GOTO 1950
REM ** CONVERT CENTURY DAY TO MM, DD, YY **************************
Cnvt2DaMoYr:
2060 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:
2170 FOR J=1 TO H9 '**** HOLIDAY OR NOT ********************************
IF A8=A3(J) THEN
O8=1
end if
NEXT J
RETURN
HolidayRead:
2210 ON ERROR GOTO 2310
OPEN F$+".HOL" FOR INPUT AS #1
J=0
2240 J=J+1
IF EOF(1) THEN
goto 2280
end if
INPUT #1,A3(J)
GOTO 2240
2280 H9=J-1 'NUMBER OF HOLIDAYS
2290 CLOSE #1
ON ERROR GOTO 0:RETURN
2310 PRINT "**** NO HOLIDAY FILE - CONTINUING ****":RESUME 2290
SortFileRead:
2320 REM READING IN SORT FILE
ON ERROR GOTO NoSortFile '2460 NO SORT FILE
OPEN F$+".LGS" FOR INPUT AS #1
INPUT #1,A8,A(1),C3
I=0
2370 I=I+1
IF EOF(1) THEN
goto 2430
end if
IF I MOD 10=0 THEN
PRINT I;
end if
INPUT #1,D$(I),S,F,O2,D,ES(I),LS,EF(I),LF(I),FL,RP$,B
IF RP$="" THEN
LC(I)=0
ELSE LC(I)=1
end if
GOTO 2370
2430 N=I-1
PRINT " **** LGS FILE READ ****"
CLOSE #1:RETURN
NoSortFile:
2460 PRINT "FILE ";F$;".LGS MUST BE CREATED BY OPTION 5 FIRST AND EXIST ON DISK****"
BEEP
close
chain "CPAMENU"