/****************************************************************/ /* RESERVCL - This program calculates and takes a campsite */ /* reservation. */ /* It uses the Display File 'RESERVDF' */ /****************************************************************/ /* INDICATOR LIST: */ /* 30 - PHONE_NUM */ /* 31 - NAME */ /* 32 - ADDR1 */ /* 33 - CITY */ /* 34 - PROV_CODE */ /* 35 - POST_CODE */ /* 36 - NIGHTS */ /* 37 - CAMPERS */ /* 38 - TENTS */ /* 39 - ELECTRIC */ /* 40 - SEWER */ /* 41 - WATER */ /* 42 - WATERFRONT */ /* 43 - DEPOSIT */ PGM /* load the file and declare a variable for the loop */ /* using a variable because goto breaks program flow! */ DCLF FILE(DB233D03A1/RESERVDF) DCL &valid *UINT CHGVAR &valid 1 /* set the defaults for the Y/N fields */ CHGVAR &electric 'N' CHGVAR &sewer 'N' CHGVAR &water 'N' CHGVAR &waterfront 'N' SNDRCVF /* the screen will now wait till it's submitted */ /* stay in this loop until F3 is pressed */ DOWHILE COND(&IN03 *NE '1') /* check if a phone number has been entered */ /* TODO: can i check the length of the data entered? */ IF COND(&phone_num *LT 1) THEN(DO) CHGVAR &IN30 '1' CHGVAR &valid 0 ENDDO ELSE CMD(CHGVAR &IN30 '0') /* check if a name has been entered */ IF COND(&name *EQ ' ') THEN(DO) CHGVAR &IN31 '1' CHGVAR &valid 0 ENDDO ELSE CMD(CHGVAR &IN31 '0') /* check if an address has been entered */ IF COND(&addr1 *EQ ' ') THEN(DO) CHGVAR &IN32 '1' CHGVAR &valid 0 ENDDO ELSE CMD(CHGVAR &IN32 '0') /* check if a city has been entered */ IF COND(&city *EQ ' ') THEN(DO) CHGVAR &IN33 '1 CHGVAR &valid 0 ENDDO ELSE CMD(CHGVAR &IN33 '0') /* check if a valid province has been entered */ IF COND(&prov_code *NE 'AB' *AND + &prov_code *NE 'BC' *AND + &prov_code *NE 'MB' *AND + &prov_code *NE 'NB' *AND + &prov_code *NE 'NL' *AND + &prov_code *NE 'NS' *AND + &prov_code *NE 'NT' *AND + &prov_code *NE 'NU' *AND + &prov_code *NE 'ON' *AND + &prov_code *NE 'PE' *AND + &prov_code *NE 'QC' *AND + &prov_code *NE 'SK' *AND + &prov_code *NE 'YT') + THEN(DO) CHGVAR &IN34 '1' CHGVAR &valid 0 ENDDO /* if the prov_code is valid, change the description */ /* to match the province */ ELSE CMD(DO) /* this loop *is* entered */ CHGVAR &IN34 '0' /* these only get changed if ALL fields are valid...weird */ IF COND(&prov_code *EQ 'AB') + THEN(CHGVAR &prov_desc 'Alberta') IF COND(&prov_code *EQ 'BC') + THEN(CHGVAR &prov_desc 'British Columbia') IF COND(&prov_code *EQ 'MB') + THEN(CHGVAR &prov_desc 'Manitoba') IF COND(&prov_code *EQ 'NB') + THEN(CHGVAR &prov_desc 'New Brunswick') IF COND(&prov_code *EQ 'NL') + THEN(CHGVAR &prov_desc 'Newfoundland and Labrador') IF COND(&prov_code *EQ 'NS') + THEN(CHGVAR &prov_desc 'Nova Scotia') IF COND(&prov_code *EQ 'NT') + THEN(CHGVAR &prov_desc 'Northwest Territories') IF COND(&prov_code *EQ 'NU') + THEN(CHGVAR &prov_desc 'Nunavut') IF COND(&prov_code *EQ 'ON') + THEN(CHGVAR &prov_desc 'Ontario') IF COND(&prov_code *EQ 'PE') + THEN(CHGVAR &prov_desc 'Prince Edward Island') IF COND(&prov_code *EQ 'QC') + THEN(CHGVAR &prov_desc 'Quebec') IF COND(&prov_code *EQ 'SK') + THEN(CHGVAR &prov_desc 'Saskatchewan') IF COND(&prov_code *EQ 'YT') + THEN(CHGVAR &prov_desc 'Yukon') ENDDO /* check if the postal code is there, and in correct format */ IF COND(&post_code *EQ ' ') THEN(DO) CHGVAR &IN35 '1' CHGVAR &valid 0 ENDDO /* if it is in correct for mat, chgvar &in35 '0' */ /* number of nights must be greater than 0 */ IF COND(&nights *LE 1) THEN(DO) CHGVAR &IN36 '1' CHGVAR &valid 0 ENDDO ELSE CMD(CHGVAR &IN36 '0') /* these next 4 fields must be either Y or N */ IF COND((&electric *NE 'Y') *OR (&electric *NE 'N')) THEN(DO) CHGVAR &IN39 '1' CHGVAR &valid 0 ENDDO ELSE CMD(CHGVAR &IN39 '0') IF COND((&sewer *NE 'Y') *OR (&sewer *NE 'N')) THEN(DO) CHGVAR &IN40 '1' CHGVAR &valid 0 ENDDO ELSE CMD(CHGVAR &IN40 '0') IF COND((&water *NE 'Y') *OR (&water *NE 'N')) THEN(DO) CHGVAR &IN41 '1' CHGVAR &valid 0 ENDDO ELSE CMD(CHGVAR &IN41 '0') IF COND((&waterfront *NE 'Y') *OR (&waterfront *NE 'N')) THEN(DO) CHGVAR &IN42 '1' CHGVAR &valid 0 ENDDO ELSE CMD(CHGVAR &IN42 '0') /* the number of people and structures has to be greater than 0 */ IF COND(&campers < 1) THEN(DO) CHGVAR &IN37 '1' CHGVAR &valid 0 ENDDO ELSE CMD(CHGVAR &IN37 '0') IF COND(&tents < 1) THEN(DO) CHGVAR &IN38 '1' CHGVAR &valid 0 ENDDO ELSE CMD(CHGVAR &IN38 '0') /* send the screen again, now that we're done parsing */ SNDRCVF /* end the loop */ ENDDO ENDPGM