|
|
The DDS for a Pop-up Calendar
****************************************************************
* ___ _ _ __ __ _ _ *
* | . > ___ ___ _| |_ | |_ | \ \ ___ _ _ _| |_ <_>._ _ *
* | . \/ . \/ . \ | | | . | | |<_> || '_> | | | || ' | *
* |___/\___/\___/ |_| |_|_| |_|_|_|<___||_| |_| |_||_|_| *
* *
* booth@martinvt.com *
****************************************************************
* A program to show a pop-up calendar *
* 7/02 Booth M. Rewritten 2/10 *
* (Uses mouse button click) *
*************************************************************
DSPSIZ(24 80 *DS3)
ENTFLDATR((*COLOR RED) (*DSPATR RI))
R FMT001
CA03
CA12
PAGEUP(84)
PAGEDOWN(85)
KEEP
RTNCSRLOC(&CSRRCD &CSRFLD &CSRPOS)
CSRLOC(ROW COL)
OVERLAY
WINDOW(*DFT 9 21 *NOMSGLIN)
WDWTITLE((*TEXT ' F3=Cancel,PgUp/D-
own ') *BOTTOM)
MOUBTN(*ULD ENTER)
@DAY01 1A P
@DAY02 1A P
@DAY03 1A P
@DAY04 1A P
@DAY05 1A P
@DAY06 1A P
@DAY07 1A P
@DAY08 1A P
@DAY09 1A P
@DAY10 1A P
@DAY11 1A P
@DAY12 1A P
@DAY13 1A P
@DAY14 1A P
@DAY15 1A P
@DAY16 1A P
@DAY17 1A P
@DAY18 1A P
@DAY19 1A P
@DAY20 1A P
@DAY21 1A P
@DAY22 1A P
@DAY23 1A P
@DAY24 1A P
@DAY25 1A P
@DAY26 1A P
@DAY27 1A P
@DAY28 1A P
@DAY29 1A P
@DAY30 1A P
@DAY31 1A P
@DAY32 1A P
@DAY33 1A P
@DAY34 1A P
@DAY35 1A P
@DAY36 1A P
@DAY37 1A P
@DAY38 1A P
@DAY39 1A P
@DAY40 1A P
@DAY41 1A P
@DAY42 1A P
CSRRCD 10A H
CSRFLD 10A H
CSRPOS 4S 0H
ROW 3S 0H
COL 3S 0H
MTHNAME 10A O 1 1DSPATR(HI)
CURYEAR 4S 0O 1 17DSPATR(HI)
3 2'S'
COLOR(RED)
3 5'M'
COLOR(BLU)
3 8'T'
COLOR(BLU)
3 11'W'
COLOR(BLU)
3 14'T'
COLOR(BLU)
3 17'F'
COLOR(BLU)
3 20'S'
COLOR(RED)
DAY01 2Y 0B 4 1DSPATR(&@DAY01) EDTCDE(Z)
DAY02 2Y 0B 4 4DSPATR(&@DAY02) EDTCDE(Z)
DAY03 2Y 0B 4 7DSPATR(&@DAY03) EDTCDE(Z)
DAY04 2Y 0B 4 10DSPATR(&@DAY04) EDTCDE(Z)
DAY05 2Y 0B 4 13DSPATR(&@DAY05) EDTCDE(Z)
DAY06 2Y 0B 4 16DSPATR(&@DAY06) EDTCDE(Z)
DAY07 2Y 0B 4 19DSPATR(&@DAY07) EDTCDE(Z)
DAY08 2Y 0B 5 1DSPATR(&@DAY08) EDTCDE(Z)
DAY09 2Y 0B 5 4DSPATR(&@DAY09) EDTCDE(Z)
DAY10 2Y 0B 5 7DSPATR(&@DAY10) EDTCDE(Z)
DAY11 2Y 0B 5 10DSPATR(&@DAY11) EDTCDE(Z)
DAY12 2Y 0B 5 13DSPATR(&@DAY12) EDTCDE(Z)
DAY13 2Y 0B 5 16DSPATR(&@DAY13) EDTCDE(Z)
DAY14 2Y 0B 5 19DSPATR(&@DAY14) EDTCDE(Z)
DAY15 2Y 0B 6 1DSPATR(&@DAY15) EDTCDE(Z)
DAY16 2Y 0B 6 4DSPATR(&@DAY16) EDTCDE(Z)
DAY17 2Y 0B 6 7DSPATR(&@DAY17) EDTCDE(Z)
DAY18 2Y 0B 6 10DSPATR(&@DAY18) EDTCDE(Z)
DAY19 2Y 0B 6 13DSPATR(&@DAY19) EDTCDE(Z)
DAY20 2Y 0B 6 16DSPATR(&@DAY20) EDTCDE(Z)
DAY21 2Y 0B 6 19DSPATR(&@DAY21) EDTCDE(Z)
DAY22 2Y 0B 7 1DSPATR(&@DAY22) EDTCDE(Z)
DAY23 2Y 0B 7 4DSPATR(&@DAY23) EDTCDE(Z)
DAY24 2Y 0B 7 7DSPATR(&@DAY24) EDTCDE(Z)
DAY25 2Y 0B 7 10DSPATR(&@DAY25) EDTCDE(Z)
DAY26 2Y 0B 7 13DSPATR(&@DAY26) EDTCDE(Z)
DAY27 2Y 0B 7 16DSPATR(&@DAY27) EDTCDE(Z)
DAY28 2Y 0B 7 19DSPATR(&@DAY28) EDTCDE(Z)
DAY29 2Y 0B 8 1DSPATR(&@DAY29) EDTCDE(Z)
DAY30 2Y 0B 8 4DSPATR(&@DAY30) EDTCDE(Z)
DAY31 2Y 0B 8 7DSPATR(&@DAY31) EDTCDE(Z)
DAY32 2Y 0B 8 10DSPATR(&@DAY32) EDTCDE(Z)
DAY33 2Y 0B 8 13DSPATR(&@DAY33) EDTCDE(Z)
DAY34 2Y 0B 8 16DSPATR(&@DAY34) EDTCDE(Z)
DAY35 2Y 0B 8 19DSPATR(&@DAY35) EDTCDE(Z)
DAY36 2Y 0B 9 1DSPATR(&@DAY36) EDTCDE(Z)
DAY37 2Y 0B 9 4DSPATR(&@DAY37) EDTCDE(Z)
DAY38 2Y 0B 9 7DSPATR(&@DAY38) EDTCDE(Z)
DAY39 2Y 0B 9 10DSPATR(&@DAY39) EDTCDE(Z)
DAY40 2Y 0B 9 13DSPATR(&@DAY40) EDTCDE(Z)
DAY41 2Y 0B 9 16DSPATR(&@DAY41) EDTCDE(Z)
DAY42 2Y 0B 9 19DSPATR(&@DAY42) EDTCDE(Z)
R DUMMY
KEEP
ASSUME
1 3' '
|
The RPG for the Pop-Up Calendar
//***************************************************************
// ___ _ _ __ __ _ _ *
// | . > ___ ___ _| |_ | |_ | \ \ ___ _ _ _| |_ <_>._ _ *
// | . \/ . \/ . \ | | | . | | |<_> || '_> | | | || ' | *
// |___/\___/\___/ |_| |_|_| |_|_|_|<___||_| |_| |_||_|_| *
// *
// booth@martinvt.com *
//***************************************************************
// A program to show a pop-up calendar *
// 7/02 Booth M. Rewritten 2/10 *
// *
// Notes on use: *
// 1 - This calendar also works if no parm is used. *
// 2 - The parm is defined as a date field: *
// (not numeric, not alpha, but as a date field) *
// 3 - If *loval is passed in then the calendar is set *
// at today's date. *
// 4 - When F3 or F12 is pressed the job ends with the *
// parm unchanged. *
// 5 - A mouse button click selects a date if your mouse *
// hotspots has been set: *
// for ENTER at cursor position, *
// and "nn" is unselected *
// *
// Original source came from: *
// http://www.400times.com/FrameData/Pop-up_Calendar.htm *
//************************************************************
H COPYRIGHT('(C) CopyrightBooth Martin, 2010 All rights reserved.')
H option(*nodebugio) dftactgrp(*no) actgrp(*caller)
FPC1010D cf e workstn INFDS(InFds)
d StartDate s d
d BegOfMonth s d
// Needs this date to figure first day-of-month
d firstdate s d datfmt(*iso) inz(d'1900-01-05')
d day# s 2s 0
d wNdx s 10i 0
d CurYear s 4s 0
d CurMonth s 2s 0
d CurDay s 2s 0
d InFds ds
d cursor 370 371b 0
// Array of slots on calendar (6 rows of 7 days)
d Arr s 2 0 dim(42)
// Number of days in the month:
d PdmDS ds
d 2 0 inz(31)
d 2 0 inz(28)
d 2 0 inz(31)
d 2 0 inz(30)
d 2 0 inz(31)
d 2 0 inz(30)
d 2 0 inz(31)
d 2 0 inz(31)
d 2 0 inz(30)
d 2 0 inz(31)
d 2 0 inz(30)
d 2 0 inz(31)
d 2 0 inz(01)
d pdm 2 0 dim(13) overlay(PdmDS)
d MonthNames ds
d 9 inz('January ')
d 9 inz('February ')
d 9 inz('March ')
d 9 inz('April ')
d 9 inz('May ')
d 9 inz('June ')
d 9 inz('July ')
d 9 inz('August ')
d 9 inz('September')
d 9 inz('October ')
d 9 inz('November ')
d 9 inz('December ')
d MthNam 9 dim(12) overlay(MonthNames)
d DspAtribs ds
d @DAY01 1 inz(Normal)
d @DAY02 1 inz(Normal)
d @DAY03 1 inz(Normal)
d @DAY04 1 inz(Normal)
d @DAY05 1 inz(Normal)
d @DAY06 1 inz(Normal)
d @DAY07 1 inz(Normal)
d @DAY08 1 inz(Normal)
d @DAY09 1 inz(Normal)
d @DAY10 1 inz(Normal)
d @DAY11 1 inz(Normal)
d @DAY12 1 inz(Normal)
d @DAY13 1 inz(Normal)
d @DAY14 1 inz(Normal)
d @DAY15 1 inz(Normal)
d @DAY16 1 inz(Normal)
d @DAY17 1 inz(Normal)
d @DAY18 1 inz(Normal)
d @DAY19 1 inz(Normal)
d @DAY20 1 inz(Normal)
d @DAY21 1 inz(Normal)
d @DAY22 1 inz(Normal)
d @DAY23 1 inz(Normal)
d @DAY24 1 inz(Normal)
d @DAY25 1 inz(Normal)
d @DAY26 1 inz(Normal)
d @DAY27 1 inz(Normal)
d @DAY28 1 inz(Normal)
d @DAY29 1 inz(Normal)
d @DAY30 1 inz(Normal)
d @DAY31 1 inz(Normal)
d @DAY32 1 inz(Normal)
d @DAY33 1 inz(Normal)
d @DAY34 1 inz(Normal)
d @DAY35 1 inz(Normal)
d @DAY36 1 inz(Normal)
d @DAY37 1 inz(Normal)
d @DAY38 1 inz(Normal)
d @DAY39 1 inz(Normal)
d @DAY40 1 inz(Normal)
d @DAY41 1 inz(Normal)
d @DAY42 1 inz(Normal)
d DayAtr 1 dim(42) overlay(DspAtribs)
// RI=Reverse Image, HI=Hi Intensity, BL=blink, UL=Underline
// ND=Non Display
// NON Protect fields
d Normal c const(x'20')
d RI c const(x'21')
d HI c const(x'22')
d HIRI c const(x'23')
d UL c const(x'24')
d ULRI c const(x'25')
d ULHI c const(x'26')
d ND c const(x'27')
d BL c const(x'28')
d BLRI c const(x'29')
d BLHI c const(x'2A')
d BLHIRI c const(x'2B')
d BLUL c const(x'2C')
d BLULRI c const(x'2D')
d BLULHI c const(x'2E')
// Protect field
d PRNormal c const(x'A0')
d PRRI c const(x'A1')
d PRHI c const(x'A2')
d PRHIRI c const(x'A3')
d PRUL c const(x'A4')
d PRULRI c const(x'A5')
d PRULHI c const(x'A6')
d PRND c const(x'A7')
d PRBL c const(x'A8')
d PRBLRI c const(x'A9')
d PRBLHI c const(x'AA')
d PRBLHIRI c const(x'AB')
d PRBLUL c const(x'AC')
d PRBLULRI c const(x'AD')
d PRBLULHI c const(x'AE')
d PC1010R pr
d pDate d
d PC1010R pi
d pDate d
// ===============================================================
// == Mainline ==
// ===============================================================
/free
exsr FillCalendar;
dow not *inlr;
exfmt fmt001;
select;
// Go forward one month
when *in84;
startdate = startdate + %months(1);
exsr FillCalendar;
// Go back one month
when *in85;
startdate = startdate - %months(1);
exsr FillCalendar;
// end of job - Either a command key or Enter key:
other;
exsr ExitPgm;
endsl;
enddo;
// End of routine:
exsr ExitPgm;
// ===============================================================
// == Sub Routines ==
// ===============================================================
//-------------------------------------------------------------------
//-- Initializing routine --
//-------------------------------------------------------------------
begsr *inzsr;
if (%parms = 1) and (pdate <> *loval);
StartDate = pDate;
else;
StartDate = %date();
endif;
endsr;
//-------------------------------------------------------------------
//-- Exit routine --
//-------------------------------------------------------------------
begsr ExitPgm;
if (%parms = 1) and (not *inkc) and not (*inkl);
exsr FillParm;
endif;
*inlr = *on;
endsr;
//-------------------------------------------------------------------
//-- Fill the calendar fields. --
//-------------------------------------------------------------------
begsr FillCalendar;
// Set the display attributes to normal
reset DspAtribs;
// Get fields to fill calendar
CurYear = %subdt(StartDate: *y);
CurMonth = %subdt(StartDate: *m);
CurDay = %subdt(StartDate: *d);
MTHNAME = mthnam(CurMonth);
// is this a leap year?
if %rem(CurYear: 4) = 0 and CurYear <> 2000;
pdm(2) = 29;
else;
pdm(2) = 28;
endif;
// Fill array with date numbers
clear arr;
// Find day of the week for first day on the calendar
BegOfMonth = StartDate - %days(CurDay + 1);
day# = %rem((%diff(BegOfMonth: firstdate: *days)): 7) + 1;
// Fill the calandar's 42 slots with days of the month, beginning @ day#
for wNdx = 1 to pdm(CurMonth);
arr(day#) = wNdx;
// Reverse image if current day
if CurDay = wNdx;
DayAtr(day#) = RI;
endif;
day# = day# +1;
endfor;
// Fill the screen's 42 slots from the array.
day01 = arr(01);
day02 = arr(02);
day03 = arr(03);
day04 = arr(04);
day05 = arr(05);
day06 = arr(06);
day07 = arr(07);
day08 = arr(08);
day09 = arr(09);
day10 = arr(10);
day11 = arr(11);
day12 = arr(12);
day13 = arr(13);
day14 = arr(14);
day15 = arr(15);
day16 = arr(16);
day17 = arr(17);
day18 = arr(18);
day19 = arr(19);
day20 = arr(20);
day21 = arr(21);
day22 = arr(22);
day23 = arr(23);
day24 = arr(24);
day25 = arr(25);
day26 = arr(26);
day27 = arr(27);
day28 = arr(28);
day29 = arr(29);
day30 = arr(30);
day31 = arr(31);
day32 = arr(32);
day33 = arr(33);
day34 = arr(34);
day35 = arr(35);
day36 = arr(36);
day37 = arr(37);
day38 = arr(38);
day39 = arr(39);
day40 = arr(40);
day41 = arr(41);
day42 = arr(42);
// Protect Blank fields
if day01 = *zeros;
@DAY01 = PRNormal;
endif;
if day02 = *zeros;
@DAY02 = PRNormal;
endif;
if day03 = *zeros;
@DAY03 = PRNormal;
endif;
if day04 = *zeros;
@DAY04 = PRNormal;
endif;
if day05 = *zeros;
@DAY05 = PRNormal;
endif;
if day06 = *zeros;
@DAY06 = PRNormal;
endif;
if day07 = *zeros;
@DAY07 = PRNormal;
endif;
if day29 = *zeros;
@DAY29 = PRNormal;
endif;
if day30 = *zeros;
@DAY30 = PRNormal;
endif;
if day31 = *zeros;
@DAY31 = PRNormal;
endif;
if day32 = *zeros;
@DAY32 = PRNormal;
endif;
if day33 = *zeros;
@DAY33 = PRNormal;
endif;
if day34 = *zeros;
@DAY34 = PRNormal;
endif;
if day35 = *zeros;
@DAY35 = PRNormal;
endif;
if day36 = *zeros;
@DAY36 = PRNormal;
endif;
if day37 = *zeros;
@DAY37 = PRNormal;
endif;
if day38 = *zeros;
@DAY38 = PRNormal;
endif;
if day39 = *zeros;
@DAY39 = PRNormal;
endif;
if day40 = *zeros;
@DAY40 = PRNormal;
endif;
if day41 = *zeros;
@DAY41 = PRNormal;
endif;
if day42 = *zeros;
@DAY42 = PRNormal;
endif;
endsr;
//-------------------------------------------------------------------
//-- Fill return parm --
//-------------------------------------------------------------------
begsr FillParm;
// Fill return fields
select;
when csrfld = 'DAY01';
CurDay = arr(01);
when csrfld = 'DAY02';
CurDay = arr(02);
when csrfld = 'DAY03';
CurDay = arr(03);
when csrfld = 'DAY04';
CurDay = arr(04);
when csrfld = 'DAY05';
CurDay = arr(05);
when csrfld = 'DAY06';
CurDay = arr(06);
when csrfld = 'DAY07';
CurDay = arr(07);
when csrfld = 'DAY08';
CurDay = arr(08);
when csrfld = 'DAY09';
CurDay = arr(09);
when csrfld = 'DAY10';
CurDay = arr(10);
when csrfld = 'DAY11';
CurDay = arr(11);
when csrfld = 'DAY12';
CurDay = arr(12);
when csrfld = 'DAY13';
CurDay = arr(13);
when csrfld = 'DAY14';
CurDay = arr(14);
when csrfld = 'DAY15';
CurDay = arr(15);
when csrfld = 'DAY16';
CurDay = arr(16);
when csrfld = 'DAY17';
CurDay = arr(17);
when csrfld = 'DAY18';
CurDay = arr(18);
when csrfld = 'DAY19';
CurDay = arr(19);
when csrfld = 'DAY20';
CurDay = arr(20);
when csrfld = 'DAY21';
CurDay = arr(21);
when csrfld = 'DAY22';
CurDay = arr(22);
when csrfld = 'DAY23';
CurDay = arr(23);
when csrfld = 'DAY24';
CurDay = arr(24);
when csrfld = 'DAY25';
CurDay = arr(25);
when csrfld = 'DAY26';
CurDay = arr(26);
when csrfld = 'DAY27';
CurDay = arr(27);
when csrfld = 'DAY28';
CurDay = arr(28);
when csrfld = 'DAY29';
CurDay = arr(29);
when csrfld = 'DAY30';
CurDay = arr(30);
when csrfld = 'DAY31';
CurDay = arr(31);
when csrfld = 'DAY32';
CurDay = arr(32);
when csrfld = 'DAY33';
CurDay = arr(33);
when csrfld = 'DAY34';
CurDay = arr(34);
when csrfld = 'DAY35';
CurDay = arr(35);
when csrfld = 'DAY36';
CurDay = arr(36);
when csrfld = 'DAY37';
CurDay = arr(37);
when csrfld = 'DAY38';
CurDay = arr(38);
when csrfld = 'DAY39';
CurDay = arr(39);
when csrfld = 'DAY40';
CurDay = arr(40);
when csrfld = 'DAY41';
CurDay = arr(41);
when csrfld = 'DAY42';
CurDay = arr(42);
endsl;
pDate = %date(CurYear * 10000
+ CurMonth * 100
+ CurDay: *iso);
endsr;
//-------------------------------------------------------------------
//-- End-of subroutines --
//-------------------------------------------------------------------
|
|
|
|
|
|