C
C IMPORTANT NAMES & DATES by Bruce W. Roeckel
C *--------------------------*
C OPTION #3 & #4
C
$STORAGE:2
C
C
SUBROUTINE CALEND
C
C THIS ROUTINE WILL DISPLAY MONTH CALENDAR
C
COMMON/REVNO/ PGM,AUTHOR,YEAR,DATE,REV
CHARACTER PGM*21,AUTHOR*21,YEAR*4,DATE*8,REV*2
C
COMMON/MAIN1/LAST,FIRST,ADD1,ADD2,CITY,STATE,ZIP,PH1,PH2
CHARACTER LAST(12,200)*1,FIRST(200)*23,ADD1(200)*30,ADD2(200)*30
CHARACTER CITY(200)*23,STATE(200)*2,ZIP(200)*5
CHARACTER PH1(200)*14,PH2(200)*14
C
COMMON/MAIN2/ STRID,JULIAN,MNUM
INTEGER STRID(200),JULIAN(366,5),MNUM
C
COMMON/MAIN3/ NAME,ANIV,BDAY,XMAS
CHARACTER NAME(6,200)*12,ANIV(200)*8,BDAY(6,200)*8,XMAS(12,200)*2
C
REAL LEAPYR
INTEGER DAYS(12),DNUM,TODAY
CHARACTER OPTION*25,RAMDSK*80,CALEN*8,DAY(7)*3,IMON(12)*6,ANS*1
C
DATA DAY/'Sun','Mon','Tue','Wed','Thr','Fri','Sat'/
DATA DAYS/31,28,31,30,31,30,31,31,30,31,30,31/
DATA IMON/' Jan ',' Feb ','March ','April ',' May ',' June ',
A ' July ',' Aug ',' Sept ',' Oct ',' Nov ',' Dec '/
C
C SET-UP SCREEN
C
10 CONTINUE
OPTION='Monthly Calendar '
CALL HEADER(OPTION)
IV=21
IH=1
CALL MOVEIT(IH,IV)
CALL ULINE
WRITE(*,'(80X)')
CALL OFF
C
C FIGURE OUT WHAT MONTH & YEAR THIS IS
C
50 CONTINUE
IH=1
IV=23
IANY=0
CALL MOVEIT(IH,IV)
WRITE(*,'(15X,A31,\)') 'Enter Month to Display (1-12): '
READ(*,'(I2)',ERR=890) JMON
IF(JMON.EQ.0) RETURN
IF(JMON.LT.1 .OR. JMON.GT.12) GOTO 890
WRITE(RAMDSK,'(A8)') DATE
READ(RAMDSK,'(6X,I2)') IYEAR
LEAPYR = (REAL(IYEAR)/4.0) - INT(REAL(IYEAR)/4.0)
IF(LEAPYR.EQ.0.0) DAYS(2)=29
DNUM=DAYS(JMON)
C
C CALCULATE THE JULIAN DATE OF THE 1ST OF THIS MONTH
C AND WHAT DAY-OF-WEEK THE FIRST IS ON
C
WRITE(RAMDSK,'(I2.2,A4,I2.2)') JMON,'/01/',IYEAR
READ(RAMDSK,'(A8)') CALEN
CALL DATEJL(CALEN,IJUL)
CALL DATEDW(CALEN,IDOW)
C
C NOW, START DISPLAYING CALENDAR
C
IF(IDOW.GT.0) THEN
IH=1
IV=7
WRITE(RAMDSK,'(A6,I4)') IMON(JMON),IYEAR+1900
CALL SQUISH(RAMDSK,10)
CALL UPTOP(IH,IV)
CALL DHTOP
WRITE(*,'(13X,A10)') RAMDSK
CALL DHBOT
WRITE(*,'(13X,A10)') RAMDSK
CALL OFF
C
C DRAW THE DAY DESCRIPTIONS
C
IV=9
CALL BOLD
DO 100 I=1,7
IH = (I*10) - 1
CALL UPTOP(IH,IV)
WRITE(*,'(A3)') DAY(I)
100 CONTINUE
CALL OFF
C
C NOW DRAW IN DAYS
C
IH=(IDOW*10) - 2
IV=10
K=0
200 CONTINUE
K=K+1
IF(K.GT.DNUM) GOTO 500
C
C PRINT THIS DAY, BLINKING IF ACTIVITY TODAY
C
CALL UPTOP(IH,IV)
IF(JULIAN(IJUL+K-1,1).GT.0) THEN
IANY=1
CALL BLINK
CALL BOLD
WRITE(*,'(A1,I2,A1)') '[',K,']'
CALL OFF
ELSE
WRITE(*,'(A1,I2,A1)') ' ',K,' '
ENDIF
C
C CONTINUE WITH THE NEXT DAY
C
IH = IH + 10
IF(IH.GT.70) THEN
IH = 8
IV = IV + 2
ENDIF
GOTO 200
500 CONTINUE
C
C NOW ASK FOR DAY TO BLOW-UP
C
IF(IANY.LE.0) THEN
IH=1
IV=23
CALL MOVEIT(IH,IV)
CALL BLINK
CALL BOLD
CALL BELL
WRITE(*,'(5X,A26,\)') 'No Activity This Month ...'
READ(*,'(A1)') ANS
RETURN
ELSE
CALL BLOWUP(JMON,DNUM,IYEAR)
GOTO 10
ENDIF
ENDIF
890 CONTINUE
CALL BELL
GOTO 50
END
C
C
C
SUBROUTINE SUMMAR
C
C THIS ROUTINE WILL PRINT NAMES&DATES REPORT
C
COMMON/REVNO/ PGM,AUTHOR,YEAR,DATE,REV
CHARACTER PGM*21,AUTHOR*21,YEAR*4,DATE*8,REV*2
C
COMMON/MAIN1/LAST,FIRST,ADD1,ADD2,CITY,STATE,ZIP,PH1,PH2
CHARACTER LAST(12,200)*1,FIRST(200)*23,ADD1(200)*30,ADD2(200)*30
CHARACTER CITY(200)*23,STATE(200)*2,ZIP(200)*5
CHARACTER PH1(200)*14,PH2(200)*14
C
COMMON/MAIN2/ STRID,JULIAN,MNUM
INTEGER STRID(200),JULIAN(366,5),MNUM
C
COMMON/MAIN3/ NAME,ANIV,BDAY,XMAS
CHARACTER NAME(6,200)*12,ANIV(200)*8,BDAY(6,200)*8,XMAS(12,200)*2
C
INTEGER UNIT,PAGE
C
C SET UP PRINTER
C
UNIT=6
PAGE=0
LINE=0
IV=21
IH=1
CALL MOVEIT(IH,IV)
CALL BOLD
CALL BLINK
WRITE(*,'(A25)') 'Please Wait ... Printing '
OPEN(UNIT,FILE='PRN')
C
C PRINT ONLY THE DATA WE HAVE
C
DO 500 I=1,200
IF(NAME(1,I).NE.' '.OR.ANIV(I).NE.' '.OR.BDAY(1,I).NE.' '.OR.
A XMAS(1,I).NE.' '.OR.XMAS(7,I).NE.' ') THEN
IF(LINE.LE.0) THEN
LINE=8
CALL SWIDTH(UNIT)
WRITE(UNIT,'(X)')
CALL PHEAD(PAGE,UNIT,PGM,DATE,YEAR,REV)
CALL WWIDTH(UNIT)
WRITE(UNIT,100)
100 FORMAT(//,
A /,5X,' Last Name Mailing Address ',
B ' Birthdays Xmas Cards Sent ',
C ' Xmas Cards Rec"d ',
D /,5X,'------------ --------------------------------',
E ' --------------------- ----------------- ',
F ' -----------------')
ENDIF
LINE=LINE-1
CALL MATCH(I,KCODE)
WRITE(UNIT,200) (LAST(M,KCODE),M=1,12),
A FIRST(KCODE),ANIV(I),BDAY(1,I),NAME(1,I),
B (XMAS(M,I),M=1,12),
C ADD1(KCODE),BDAY(2,I),NAME(2,I)
200 FORMAT(5X,12A1,4X,A23,1X,A8,4X,A8,' ',A12,2(4X,5(A2,','),A2),
A /,21X,A30,6X,A8,' ',A12)
C
C IF SECOND ADDRESS BLANK, THEN DON'T PRINT A SPACE
C
IF(ADD2(KCODE).NE.' ') THEN
WRITE(UNIT,250) ADD2(KCODE),BDAY(3,I),NAME(3,I),
A CITY(KCODE),STATE(KCODE),ZIP(KCODE),BDAY(4,I),NAME(4,I),
B BDAY(5,I),NAME(5,I),BDAY(6,I),NAME(6,I)
250 FORMAT(21X,A30,6X,A8,' ',A12,
A /,21X,A23,1X,A2,1X,A5,4X,A8,' ',A12,
B /,21X,36X,A8,' ',A12,
C /,21X,36X,A8,' ',A12)
ELSE
WRITE(UNIT,300) CITY(KCODE),
A STATE(KCODE),ZIP(KCODE),BDAY(3,I),NAME(3,I),
B BDAY(4,I),NAME(4,I),BDAY(5,I),NAME(5,I),
C BDAY(6,I),NAME(6,I)
300 FORMAT(
A 21X,A23,1X,A2,1X,A5,4X,A8,' ',A12,
B /,21X,36X,A8,' ',A12,
C /,21X,36X,A8,' ',A12,
D /,21X,36X,A8,' ',A12)
ENDIF
ENDIF
500 CONTINUE
CALL SWIDTH(UNIT)
CLOSE(UNIT)
RETURN
END
C
C
C
SUBROUTINE BLOWUP(JMON,DNUM,IYEAR)
C
C THIS ROUTINE LISTS ANY SINGLE DAY TO THE SCREEN
C
COMMON/MAIN1/LAST,FIRST,ADD1,ADD2,CITY,STATE,ZIP,PH1,PH2
CHARACTER LAST(12,200)*1,FIRST(200)*23,ADD1(200)*30,ADD2(200)*30
CHARACTER CITY(200)*23,STATE(200)*2,ZIP(200)*5
CHARACTER PH1(200)*14,PH2(200)*14
C
COMMON/MAIN2/ STRID,JULIAN,MNUM
INTEGER STRID(200),JULIAN(366,5),MNUM
C
COMMON/MAIN3/ NAME,ANIV,BDAY,XMAS
CHARACTER NAME(6,200)*12,ANIV(200)*8,BDAY(6,200)*8,XMAS(12,200)*2
C
INTEGER DNUM,CNT
CHARACTER TYPE*6,TEMP*80
CHARACTER RAMDSK*80,CALEN*8,DAY(7)*3,IMON(12)*6,ANS*1
C
DATA DAY/'Sun','Mon','Tue','Wed','Thr','Fri','Sat'/
DATA IMON/' Jan ',' Feb ',' March',' April',' May ',' June ',
A ' July ',' Aug ',' Sept ',' Oct ',' Nov ',' Dec '/
C
C ASK WHICH DAY TO BLOW-UP
C
50 CONTINUE
IV=23
IH=1
CALL MOVEIT(IH,IV)
WRITE(*,75) 'Enter Day to See in Detail (1-',DNUM,'): '
75 FORMAT(15X,A30,I2,A3,\)
READ(*,'(I2)',ERR=890) JDAY
IF(JDAY.EQ.0) RETURN
IF(JDAY.GT.0 .AND. JDAY.LE.DNUM) THEN
WRITE(RAMDSK,'(I2,A1,I2,A1,I2)') JMON,'/',JDAY,'/',IYEAR
READ(RAMDSK,'(A8)') CALEN
CALL DATEDW(CALEN,IDOW)
IF(IDOW.GT.0) THEN
C
C GO FIND OUT IF THE MATCHES ARE B'DAYS OR ANIV.
C
CNT=0
LHIT=0
CALL DATEJL(CALEN,IJUL)
DO 500 K=1,5
IHIT=JULIAN(IJUL,K)
IF(IHIT.LE.0) GOTO 500
IF(IHIT.EQ.LHIT) GOTO 300
C
C FIRST, SEE IF POINTER IS FOR ANNIVERSARY
C
LHIT=IHIT
CALL FINDA(IHIT,JMON,JDAY,LINE)
IF(LINE.EQ.0) THEN
CALL MATCH(IHIT,KCODE)
CALL BOLD
CALL MOVEIT(IH,IV)
WRITE(RAMDSK,200) DAY(IDOW),CALEN,'Anniversary, ',
A FIRST(KCODE),(LAST(L,KCODE),L=1,12)
200 FORMAT(A3,', ',A8,' ... ',A13,A23,12A1)
CALL SQUISH(RAMDSK,66)
TYPE='CENTER'
CALL JUSTIF(TYPE,RAMDSK,66)
WRITE(*,'(7X,A66,\)') RAMDSK
READ(*,'(A1)') ANS
CALL OFF
GOTO 500
ENDIF
C
C NOW, LOOK FOR ALL BIRTHDAYS
C
300 CONTINUE
LHIT=IHIT
CNT=CNT+1
CALL FINDB(CNT,IHIT,JMON,JDAY,LINE)
C
C CHECK TO SEE IF IT WAS A BIRTHDAY
C
IF(LINE.GT.0) THEN
CALL MATCH(IHIT,KCODE)
CALL BOLD
CALL MOVEIT(IH,IV)
WRITE(RAMDSK,350) DAY(IDOW),CALEN,'Birthday, ',
A NAME(LINE,IHIT),(LAST(L,KCODE),L=1,12)
350 FORMAT(A3,', ',A8,' ... ',A10,A12,12A1)
CALL SQUISH(RAMDSK,52)
TYPE='CENTER'
CALL JUSTIF(TYPE,RAMDSK,52)
WRITE(*,'(7X,A52,\)') RAMDSK
READ(*,'(A1)') ANS
CALL OFF
ELSEIF(CNT.LT.6) THEN
GOTO 300
ENDIF
500 CONTINUE
GOTO 50
ENDIF
ENDIF
890 CONTINUE
CALL BELL
GOTO 50
END
C
C
C
SUBROUTINE MATCH(I,KCODE)
C
C WILL FIND MATCHING LAST NAME, BY USING STRUCTURE ID
C
COMMON/MAIN2/ STRID,JULIAN,MNUM
INTEGER STRID(200),JULIAN(366,5),MNUM
C
KCODE=0
DO 100 K=1,MNUM
IF(STRID(K).EQ.I) THEN
KCODE=K
RETURN
ENDIF
100 CONTINUE
RETURN
END
C
C
C
SUBROUTINE FINDA(IHIT,JMON,JDAY,LINE)
C
C WILL FIND MATCHING ANNIVERSARIES FOR SELECTED DAY
C
COMMON/MAIN3/ NAME,ANIV,BDAY,XMAS
CHARACTER NAME(6,200)*12,ANIV(200)*8,BDAY(6,200)*8,XMAS(12,200)*2
C
CHARACTER RAMDSK*80
C
C SEARCH NAMES & DATES AND DETERMINE IF ITS AN
C ANNIVERSARY OR A BIRTHDAY THAT MATCHES
C
LINE=-1
WRITE(RAMDSK,'(A8)') ANIV(IHIT)
READ(RAMDSK,'(I2,1X,I2)',ERR=900) IMON,IDAY
IF(IMON.EQ.JMON .AND. IDAY.EQ.JDAY) THEN
LINE=0
RETURN
ENDIF
900 CONTINUE
RETURN
END
C
C
C
SUBROUTINE FINDB(LOC,IHIT,JMON,JDAY,LINE)
C
C WILL FIND MATCHING BIRTHDAYS FOR SELECTED DAY
C
COMMON/MAIN3/ NAME,ANIV,BDAY,XMAS
CHARACTER NAME(6,200)*12,ANIV(200)*8,BDAY(6,200)*8,XMAS(12,200)*2
C
CHARACTER RAMDSK*80
C
C SEARCH NAMES & DATES AND DETERMINE IF ITS
C A BIRTHDAY THAT MATCHES
C
LINE=-1
WRITE(RAMDSK,'(A8)') BDAY(LOC,IHIT)
READ(RAMDSK,'(I2,1X,I2)',ERR=900) IMON,IDAY
IF(IMON.EQ.JMON .AND. IDAY.EQ.JDAY) THEN
LINE=LOC
RETURN
ENDIF
900 CONTINUE
RETURN
END