~AID_ONLINE.BCK']AID_ONLINE.BCKmBACK [...]*AID*/EXCLUDE=([TEMPLATES...]*.*.*,[PATCHES...]*.*,[SCRATCH]*.*) SYS$LOGIN:AID_ONLINE.BCK/SAVE/CONF ESP  əOV8.3 _ITAN01:: _$1$DGA3: V8.3 ~ *[000000.PATCHES]AID.DIR;1+,0./ 4-00123 KPWO56`w7`w89(cNGHJI*[DOCS.CSS]AID_ONLINE.CSS;48+,.8./ 4C- 0123KPWO56Hʧ7ʧ89(cNGHJ $*[DOCS.HELP.ICS]HELP_AID_REVIEW.INC;3+,&. / 4W -%M0123KPWO!56G&

%%optionDSC$%%




W

8* INCLUDE TPL_DIR:[%%STYLE$%%.%%Mode$%%]SYSTEM_VARIABLES




PSelect the year if you wish to see your Financial Aid awards for that year. OnlyNyears available on-line can be displayed. This does not constitute an officialFinancial Aid Transcript.


*[DOCS.JSCRIPT]AID_ONLINE.JS;51+,0./ 44-E 0123KPWO56Fdq7adq89(cNGHJ> adjFNDs = adjINF[1].split(';');= start = 1;" while (start < adjFNDs.length) { ' curfld = ".cur" + adjFNDs[start];O  if (adjINF[0] == "UP") {H tstamt = eval(document.aidpack[curfld].value) + eval(adjINF[2]); } else {D E tstamt = eval(document.aidpack[curfld].value) - eval(adjINF[2]); }J 6 if (tstamt >= adjINF[3] && tstamt <= adjINF[4]) {1 document.aidpack[curfld].value = tstamt; CalcTotals(); } if (tstamt < adjINF[3]){ 0 document.aidpack[curfld].value =adjINF[3]; CalcTotals(); } start = start + 1; }}function InitAmounts() {% aidform = document.forms['aidpack'];# docLength = aidform.length; var start = 0; & while (start < docLength) { ? lngth = document.aidpack[start].name.length L fldname = document.aidpack[start].name.substring ( 0, 5 ) + if ( fldname ==".cur") { Y curfld = ".cur" + document.aidpack[start].name.substring ( 5, lngth );Y awdfld = ".awd" + document.aidpack[start].name.substring ( 5, lngth );R document.aidpack[curfld].value= document.aidpack[awdfld].value; }# start = start + 1; } CalcTotals();} 'function findAwards(whichFund, Start) {% aidform = document.forms['aidpack'];# docLength = aidform.length; tstLen = whichFund.length; var start = 0; ) if (Start != 0) { start = Start;}& while (start < docLength) { ? lngth = document.aidpack[start].name.length L fldname = document.aidpack[start].name.substring ( 0, 4 ) + if ( fldname ==".cur") { T fldname = document.aidpack[start].name.substring ( 4, 4+tstLen );3 if (fldname == whichFund) {return start;} } start = start + 1;  }};"function NonAcceptAwd(whichFund) {% aidform = document.forms['aidpack']; var maxterms = TotalTerms-1; var tst = 0; var awd = 0; while(tst <= maxterms) {% awd = findAwards(whichFund,awd+1); if (awd != undefined) {4 actfld = document.aidpack.elements[awd].name;, document.aidpack[actfld].disabled=true; } tst = tst + 1; }}function CancelAwd(whichFund) {% aidform = document.forms['aidpack']; var maxterms = TotalTerms-1; var tst = 0; var awd = 0; while(tst <= maxterms) {% awd = findAwards(whichFund,awd+1);? if (awd <= aidform.length) {document.aidpack[awd].value =0;} if (awd != undefined) {4 actfld = document.aidpack.elements[awd].name;- document.aidpack[actfld].disabled=false; } tst = tst + 1; } CalcTotals(); }function ResetAwd(whichFund) {% aidform = document.forms['aidpack']; var maxterms = TotalTerms-1; var tst = 0; var awd = 0; while(tst <= maxterms) {% awd = findAwards(whichFund,awd+1); if (awd != undefined) {4 actfld = document.aidpack.elements[awd].name;- document.aidpack[actfld].disabled=false; } tst = tst + 1; }} function AcceptDecline(which) {( fund = which.name.substring(0,fundlen);8 actn = which.name.substring(fundlen,which.name.length);> //alert('name: '+which.name+' fund '+fund+' action: ' +actn); if (actn == "accept") { decline = fund+"decline"; decline.checked = 0; }  if (actn == "decline") { decline = fund+"accept"; decline.checked = 0; } 7 var checkboxs = aidform.getElementsByTagName('input');0 for(var i = 0, inp; inp = checkboxs[i]; i++) {- if(inp.type.toLowerCase() == 'checkbox') {. if (inp.name.substring(0,fundlen) == fund) { if (actn == "decline") {! checkboxs[i-1].checked = 0; CancelAwd(fund); } if (actn == "accept") {! checkboxs[i+1].checked = 0; ResetAwd(fund); } } } } acpt = fund+"accept"; decl = fund+"decline";Z if (document.aidpack[acpt].checked == false && document.aidpack[decl].checked == false) { NonAcceptAwd(fund); } }function CancelTerm(term) {% aidform = document.forms['aidpack'];8 var flds = aidform.getElementsByTagName('input');/ for(var i = 0, inp; inp = flds[i]; i++){2 if(inp.type.toLowerCase() == 'hidden') {" lngth = inp.name.length;5 fldtype = inp.name.substring ( 0, 4 ) if (fldtype==".cur") {2 fldname = inp.name.substring(4,lngth);9 document.aidpack['.cur'+fldname].disabled=false;> otrm = fldname.substring(fundlen,fldname.length); trm = fndTERM(otrm); if (trm == term) {: document.getElementById(fldname).innerHTML = "0"; inp.value = 0; }  } } } CalcTotals();}function AcceptTerm(term) {% aidform = document.forms['aidpack'];8 var flds = aidform.getElementsByTagName('input');/ for(var i = 0, inp; inp = flds[i]; i++){2 if(inp.type.toLowerCase() == 'hidden') {" lngth = inp.name.length;5 fldtype = inp.name.substring ( 0, 4 ) if (fldtype==".cur") {2 fldname = inp.name.substring(4,lngth);9 document.aidpack['.cur'+fldname].disabled=false;> otrm = fldname.substring(fundlen,fldname.length); trm = fndTERM(otrm); } } }}function DeclineAll() {L AcceptAll(document.forms['aidpack'],'acceptaward','0','declineaward','-1');}8function AcceptAll(form,cname1,action1,cname2,action2) { 4 var checkboxs = form.getElementsByTagName('input');u // Step 3: Loop through all the checkboxs and check/uncheck the ones whose name matches the name located in Step 1.0 for(var i = 0, inp; inp = checkboxs[i]; i++) {O if(inp.type.toLowerCase() == 'checkbox' && inp.id.indexOf(cname1) == 0) {! inp.checked = (action1 == -1); }L if(inp.type.toLowerCase() == 'checkbox' && inp.id.indexOf(cname2) == 0) {# inp.checked = (action2 == -1); } } if (action1 =="0") {+ for (ctrm=0; ctrm < TotalTerms; ctrm++) { CancelTerm(Terms[ctrm]); } }  if (action1 =="0") {+ for (ctrm=0; ctrm < TotalTerms; ctrm++) { CancelTerm(Terms[ctrm]); } }  if (action1 =="-1") {+ for (ctrm=0; ctrm < TotalTerms; ctrm++) { AcceptTerm(Terms[ctrm]); } }  CalcTotals();} function TrmTotals(term,amt) {! for (t=0; t < TotalTerms; t++) { if (Terms[t]== term) {0 TermTots[t] = eval(TermTots[t]) + eval(amt); termtot = TermTots[t]; trmtot = term + "Total";< , M document.getElementById(trmtot).innerHTML = fmtMoney(termtot, 0, ".",",") } }+ AidPackTot = eval(AidPackTot) + eval(amt);T document.getElementById('AidPackTot').innerHTML = fmtMoney(AidPackTot, 0, ".",",");G document.aidpack['TotalAid'].value = fmtMoney(AidPackTot, 0, ".",",");_ document.aidpack['BalanceDue'].value = fmtMoney(eval(TotalCost)-eval(AidPackTot), 0, ".",",");} function CalcTotals(form) {% aidform = document.forms['aidpack'];8 var flds = aidform.getElementsByTagName('input'); AidPackTot = 0; var fundtot = 0; var prvfund = ""; 0 for (term=0; term < TotalTerms; term++) { TermTots[term] = 0; } resetFnds = AllFunds.split(',')- for (fnd=0; fnd < resetFnds.length; fnd++) { totfld = resetFnds[fnd]+"tot";' , totinf = document.aidpack[totfld].value ; totINF = totinf.split('|'); fundtot = 0` document.aidpack[totfld].value = totINF[0]+'|$'+fmtMoney(fundtot, 0, ".",",",",")+"|"+fundtot;W  } W for(var i = 0, inp; inp = flds[i]; i++) if(inp.type.toLowerCase() == 'hidden') {" lngth = inp.name.length;5 fldtype = inp.name.substring ( 0, 4 ) 3 if (fldtype==".cur" || fldtype=="_cur") {0 fldname = inp.name.substring(4,lngth);7 oterm = fldname.substring (fundlen, lngth); term = fndTERM(oterm);' TrmTotals(term,inp.value); 7 if (fldname.substring(0,fundlen)!= prvfund) {- prvfund = fldname.substring(0,fundlen); fundtot = 0; }8 Q document.getElementById(fldname).innerHTML = fmtMoney(inp.value, 0, ".",",");3 fldtotl = fldname.substring(0,fundlen)+"total";; 0 totfld = fldname.substring(0,fundlen)+"tot";- totinf = document.aidpack[totfld].value ; totINF = totinf.split('|');N 0 fundtot = eval(totINF[2]) + eval(inp.value);O document.getElementById(fldtotl).innerHTML = fmtMoney(fundtot, 0, ".",",");, b document.aidpack[totfld].value = totINF[0]+'|$'+fmtMoney(fundtot, 0, ".",",",",")+"|"+fundtot;] }  }}var checkBoxMaster = { butCnt: 0,' checkOrUncheckAll: function() {P // Step 1: Get the checkbox group name from the button classname+ var cname = this.className;7 cname = cname.replace(/uncheckall/,"");5 cname = cname.replace(/checkall/,"");. cname = cname.replace(' ','');0 // Step 2: Find the form element var form = this.parentNode;> while(form.nodeName.toLowerCase() != "form") {3 if(!form.parentNode) break;/ form = form.parentNode; };; if(form.nodeName.toLowerCase() == 'form') {K var checkboxs = form.getElementsByTagName('input'); // Step 3: Loop through all the checkboxs and check/uncheck the ones whose name matches the name located in Step 1. for(var i = 0, inp; inp = checkboxs[i]; i++) if(inp.type.toLowerCase() == 'checkbox' && inp.id.indexOf(cname) == 0) inp.checked = (this.className.search('uncheckall') == -1); }; },2 createButtons: function(form, classname) {2 // Get all of the forms child divsC var placeholder = form.getElementsByTagName('div'); var elem = form;9 // Try to find the button placeholder div> for(var i = 0, ph; ph = placeholder[i]; i++) {h if(ph.className && ph.className.search('button-placeholder-'+classname) != -1) {* elem = ph;& break; }; };' // Button 1 - check all; var but1 = document.createElement('input');% but1.type = "button";9 but1.className = "checkall " + classname;? but1.name = "button" + checkBoxMaster.butCnt++;* but1.value = "Accept All";@ but1.onclick = checkBoxMaster.checkOrUncheckAll;) // Button 2 - uncheck all; var but2 = document.createElement('input');% but2.type = "button";; but2.className = "uncheckall " + classname;? but2.name = "button" + checkBoxMaster.butCnt++;+ but2.value = "Decline All";@ but2.onclick = checkBoxMaster.checkOrUncheckAll; // DOM inject' elem.appendChild(but1);' elem.appendChild(but2); }, init: function() { CalcTotals();$ // Get all the formsB var forms = document.getElementsByTagName('form');) // Loop through the forms< for(var i = 0, form; form = forms[i]; i++) {Q // Make sure the form has at least one required classnamei if(!form.className || form.className.search(/fdCheckbox-[^\s]+/) == -1) continue;3 // Get all child input tagsI var inplist = form.getElementsByTagName('input');A // Create an array of relevant classnamesS var cboxnames = form.className.match(/fdCheckbox-[^\s]+/g);; // Loop through the classname arrayJ for(var k = 0, cname; cname = cboxnames[k]; k++) { // Get the name of the checkbox group by removing the string "fdCheckbox-" from the current classnameH cname = cname.replace("fdCheckbox-","");@ // Initiate the checkbox counter- var cbox = 0;> // Loop through all the inputsL for(var j = 0, inp; inp = inplist[j]; j++) { // If the input is of type checkbox and has the correct name and is not disabled then increment the counter if(inp.type=='checkbox' && inp.disabled == false && inp.id.indexOf(cname) == 0) cbox++;! } // If two or more checkboxs have been located then create the buttons (it would be daft to create the buttons for a single checkbox)W if(cbox > 1) checkBoxMaster.createButtons(form, cname); } }; }};%window.onload = checkBoxMaster.init;*[ESP]AID_ONLINE_FILES.BCF;1+,0./ 4--/0123KPWO56Rߦ7Rߦ89(cNGHJ $ !2$ ! ******************************************2$ ! *A I D _ O N L I N E _ F I L E S . B C F *2$ ! * *2$ ! * online aid mods *2$ ! ******************************************$ !$ !$ !$ !<$ !********************************************************* $ ! O U T L I N E$ !"$ ! Run Program Remarks$ !O$ ! <1> $BACKUP -$ ! <2> $BACKUP -$ ! <3> DMS:DESCRIBE -$ ! <4> DMS:DESCRIBE -$ ! <5> DMS:DESCRIBE -$ ! <6> DMS:DESCRIBE -$ !OO$ !$ !$ !RN:1<$ !*********************************************************$ !*$ BACKUP AWARD.DSC OA_AWARD.DSC/OWN=PARENT$ !$ !RN:2<$ !*********************************************************$ !($ BACKUP FUND.DSC OA_FUND.DSC/OWN=PARENT$ !$ !RN:3<$ !*********************************************************$ !$ RUN DMS:DESCRIBEOA_FUNDADD1.OACATCODE/LOCOn-line Award CategoryCAT4.OAADJUSTAMT/LOCKOn-line Adjustment IncrementYESYES4.OAADJMAX/LOCK,OAADJUSTMAX/LOCKOn-line Adjustment MaxY4.OAADJUSTMIN/LOCKOn-line Adjustment Minimum#10YES78.OAFUNDLINK/LOCKOnline Award Fund Link/VIRTAIDFILES:FINCODE .OACATCODE .DESCRIPTION.OACATEGORY/LOCKOn-line Category DescriptionNO45.OAFUNDMSG/LOCKOn-line Fund Msg File Spec$ !$ !RN:4<$ !*********************************************************$ !$ RUN DMS:DESCRIBEOA_AWARDADD18,23 .WAMOUNT/LOCKWhole Award Amount#5nnYES/VIRT AIDFILES:FUNDFUNDID .DESCRIPTION.FUNDIDTR/LOCK#5NN/OUT/VIRTOA_FUND$ !$ !RN:5<$ !*********************************************************$ !$ RUN DMS:DESCRIBEOA_AWARDADD/VIRTFUND.FUNDID .OACATEGORY/LOCK#5NN/OUT/VIRT== .OAADJUSTAMT/LOCK#5NN/OUT/VIRT== .OAADJUSTMIN/LOCK#5NN/OUT/VIRT== .OACATCODE/LOCK#5NN/OUT/VIRT== .OAFUNDLINK/LOCK#5NN/OUT/VIRT== .OAFUNDMSG/LOCK#5NN/OUT1.DECLINED/LOCKAward Declined Via CC/OUT$ !$ !RN:6<$ !*********************************************************$ !$ run dms:describeOA_FUNDALLOCATE7500YES$ !$ !END*[PATCHES]AID.DIR;1+,} ./ 4-| 0123 KPWO56BI7BI89(cNGHJI$COMPILE_WEBDOCTRACK.COM~ WEB_DOCTRACK.BAS WEB_DOCTRACK.COM WEB_DOCTRACK0.LTR WEB_DOCTRACK1.LTR WEB_DOCTRACK2.LTR WEB_DOCTRACK3.LTR WEB_DOCTRACK4.LTR *[SCRIPTS.ICS]AID_DOCTRACK.COM;1+,}*B. / 4\ - 0123KPWO!567b~ڟ,89(cNGHJ $ SET NOON$ DEFINE/NOLOG SYS$OUTPUT NLA0:$ DEFINE/NOLOG SYS$ERROR NLA0: $ !SET VERIFY$ ssn = "''p1'"$ aidyr = "''p2'"$ out_file = "''p3'"$ delete/nolog 'out_file.*E$ if f$search("aid:web_doctrack.exe").eqs."" then goto no_doctracking)$ DEFINE/NOLOG FINCODE "aidfiles:FINCODE"/$ DEFINE/NOLOG STUAID "aidfiles:''AIDYR'STUAID"\$ IF F$SEARCH("aidfiles:''aidyr'FINCODE.dta") THEN DEFINE FINCODE "aidfiles:''aidyr'FINCODE""$ define aid$def_term "''AIDYR'1Y"%$ mcr aid:web_doctrack 'ssn 'out_file$ DEASSIGN SYS$OUTPUT$ !COPY 'OUT_FILE SYS$OUTPUT:7$ ! > Send document tracking information to the browser$ !$no_doctracking:*[SCRIPTS.ICS]AID_YEARS.COM;2+,*2. / 4R  - 0123KPWO!560/a7ڟ,89(cNGHJ`:~AID_ONLINE.BCK*2 [SCRIPTS.ICS]AID_YEARS.COM;2R  $ SET NOON$ !$ !-$ ! Procedure: AID_YEARS.COM'$ ! Version : V2.3-06*$ ! Edit Date: 7-Jun-2004$ !$ !($ ! Refer all Inquiries to:$ !$$ ! Campus America, Inc.*$ ! 900 Hill Avenue, Suite 205)$ ! Knoxville, TN 37915-2580&$ ! Phone: (423) 523-9506$ !$ !I$ ! *********************************************************************I$ ! * *I$ ! * C O P Y R I G H T N O T I C E *I$ ! * *I$ ! * *I$ ! * Copyright (c) 1997 *I$ ! * *I$ ! * Campus America, Inc., 900 Hill Ave, Ste 205, Knoxville, TN 37915 *I$ ! * *I$ ! * This software is furnished under a license for use only on a *I$ ! * single computer system and may be copied only with the inclusion *I$ ! * of the above copyright notice. This software, or any other *I$ ! * copies thereof, may not be provided or otherwise made available *I$ ! * to any other person except for use on such system and to one who *I$ ! * agrees to these license terms. Title to and ownership of the *I$ ! * software shall at all times remain in Campus America. *I$ ! *********************************************************************I$ ! * *I$ ! * R E S T R I C T E D R I G H T S L E G E N D *I$ ! * *I$ ! * Use, duplication, or disclosure by the Government is subject to *I$ ! * restrictions as set forth in paragraph (b)(3)(B) of the Rights in *I$ ! * Technical Data and Computer Software clause in DAR 7-104.9(a). *I$ ! * *I$ ! * Campus America, Inc., 900 Hill Ave, Ste 205, Knoxville, TN 37915 *I$ ! *********************************************************************$ !$ !/$ YRS_2_DISPLAY = F$TRNLNM("CC$SIS_AID_YEARS")($ ! > Find out how many years to display6$ ! > This logical is set in [CAMPUS_CONNECT]LOGIN.COM$ !($ IF F$TYPE(YRS_2_DISPLAY).NES."INTEGER"$ THEN YRS_2_DISPLAY = 4$ ENDIF$ IF YRS_2_DISPLAY.EQ.0 $ THEN YRS_2_DISPLAY = 4$ ENDIF.$ ! > Default to 4 years if logical is invalid$ ! > or is not defined.$ !($ FIL_SPEC = "ICS_SCRIPTS:AID_YEARS.DAT"$ GOSUB CHECK_FILE?$ ! > See when the Financial Aid year data list was built today$ !!$ IF FILE_OK THEN GOTO SKIP_BUILD+$ ! > Skip rebuild if file was built today.$ ! $ SEL = "" $ CNT = 00$ ! > Set initial STUAID datafile count to zero$ !$LOOP1:*$ YR = F$SEARCH("AIDFILES:%%STUAID.DTA",1)($ IF "''YR'".EQS."" THEN GOTO COUNT_DONE$ CNT = CNT + 17$ AIDYR'CNT' = F$EXTRACT(0,2,F$PARSE("''YR'",,,"NAME")) $ GOTO LOOP1'$ ! > Loop through finding STUAID files$ ! $COUNT_DONE:$ OPEN/WRITE AID_YRS 'FIL_SPEC$ OFFSET = CNT - YRS_2_DISPLAY+$ IF OFFSET .LT. 0 THEN YRS_2_DISPLAY = CNT $ BLDCNT = 0$ !$BUILD:2$! IF BLDCNT.EQ.YRS_2_DISPLAY THEN GOTO BUILD_DONE!$ ON WARNING THEN GOTO BUILD_DONE"$ IF CNT.EQ.0 THEN GOTO BUILD_DONE$ YR = AIDYR'CNT'$ CNT = CNT - 1$ BLDCNT = BLDCNT + 1 $ CEN = "19"$ IF YR.LT.50 THEN CEN = "20"$ NXT_YR = YR + 1A$ IF NXT_YR.GT."99" THEN NXT_YR = F$EXTRACT(1,2,NXT_YR) $ NXT_YR$ = F$STRING(NXT_YR)7$ IF F$LEN(NXT_YR$) .EQ. 1 THEN NXT_YR$ = "0" + NXT_YR$R$ WRITE AID_YRS "" $ SEL = "" $ GOTO BUILD$ ! $BUILD_DONE:$ CLOSE AID_YRS:$ SORTx 'FIL_SPEC 'FIL_SPEC/KEY=(POS:23,Size:7,DESCENDING)$ OPEN/WRITE TMP TMP.COM#$ yrs_2_display = yrs_2_display + 1'$ WRITE TMP "$ DEFINE SYS$OUTPUT NLA0:"'$ WRITE TMP "$ DEFINE SYS$ERROR NLA0:"+$ WRITE TMP "$EDITX/EDT/COMMAND 'FIL_SPEC"5$ WRITE TMP "delete ''yrs_2_display' thru ''bldcnt'"$ WRITE TMP "exit"#$ WRITE TMP "$ DEASSIGN SYS$OUTPUT""$ WRITE TMP "$ DEASSIGN SYS$ERROR" $ CLOSE TMP $@TMP.COM$ DELETE/NOLOG TMP.COM.*$ PURGE/NOLOG ICS_SCRIPTS:*.DAT+$ ! > We have built a new list, so cleanup.$ ! $SKIP_BUILD:$ !$ TYPE 'FIL_SPEC"$ ! > Display the available years.$ ! $CHECK_FILE: $ FILE_OK = 04$ ! > Initialize the return value to show file error$ !/$ IF F$SEARCH("''FIL_SPEC'").EQS."" THEN RETURN$ !@$ CDATE = F$EXTRACT(0,11,F$FILE_ATTRIBUTES("''FIL_SPEC'","CDT"))#$ ! > See when the file was created$ !$$ SYSDATE = F$EXTRACT(0,11,F$TIME())!$ ! > Get the current system date$ !!$ IF "''CDATE'".EQS."''SYSDATE'"$ THEN FILE_OK = -1$ ENDIF/$ ! > If the file was created today, then there$ ! > is no need to recreate.$ !$ RETURN*[SCRIPTS.ICS]AID_YEARS.DAT;1458+,@7/./ 4&P- 0123KPWO56LI7MI89GHJ&&!*[SCRIPTS.ICS]GUI_AID_REVIEW.FRF;2+,*7. / 4 v- 0123KPWO!56Ԥqa7Ƴڟ,89(cNGHJ!FORMAIDFILES:AWARDICS_SCRIPTS:gui_AID_REVIEWNOYES .TERMCODE AIDFILES:FUNDNONONO1??"*[SCRIPTS.ICS]GUI_AID_REVIEW.FRM;14+,0./ 4a- 0123KPWO56[=Y}70=Y}89(cNGHJ !

/FIRST2 /FIRST+ /FIRST= /FIRST9 /FIRST: /FIRST; /FIRST@ /FIRST /FIRST H ^ X T U ^  ` /AFTERa /AFTERa /AFTER /AFTER /AFTER /AFTER@ /LAST^ /LAST^ /LAST /LAST /LAST
Fund IDDispersible AmtAward AmountDate AwardedDate AcceptedTransmitted Amount
[.FUNDID/TR][.DISPERSIBLE/TOTAL=1][.AMOUNT/TOTAL=2][.DATEAWARD][.DATEACCEPT][.TRANSMITTED/TOTAL=3]
Total for [.TERMCODETR][TOTAL=1/MASK="$ , .0@"][TOTAL=2/MASK="$ , .0@"] /AFTERa [TOTAL=3/MASK="$ , .0@"]
Grand Totals[GT=1/MASK="$ , .0@"][GT=2/MASK="$ , .0@"] /LAST^ [GT=3/MASK="$ , .0@"]
/LAST
/LAST&*[SCRIPTS.SIS]AID_MAINTAIN_AWARD.BAS;23+,,. / 4f r-P 0123KPWO!56pʧ7kljʧ89(cNGHJTf2 FUNCTION LONG AID_MAINTAIN_AWARD(F_CTRL%, F_STDID$, F_FNDID$, F_AMT$, AWARD_AMT$, ACCEPT_DTE$) &' ! A I D _ M A I N T A I N _ A W A R D ! Routine : AID_MAINTAIN_AWARD %IDENT "3.1-01" ! Edit Date: 29-Mar-2006 & & ! Refer all Inquiries to: & ! Educational Systems Products" ! 11415 East 19th Street, Suite B ! Tulsa, Oklahoma 74128 ! Phone: (918) 437 - 4920 &H9 !********************************************************************!F ! !F ! C O P Y R I G H T N O T I C E !F ! !F ! Copyright (c) 1993, Campus America Inc., !F ! All Rights Reserved !F ! !F ! This software is furnished under a license for use only on a !F ! single computer system and may be copied only with the !F ! inclusion of the above copyright notice. This software, or !F ! any other copies thereof, may not be provided or otherwise !F ! made available to any other person except for use on such !F ! system and to one who agrees to these license terms. Title to !F ! and ownership of the software shall at all times remain in !F ! Campus America, Inc. !F ! !F !*******************************************************************! ! !< ! R E S T R I C T E D R I G H T S L E G E N D ! ! !F ! Use, duplication, or disclosure by the Government is subject to !F ! restrictions as set forth in paragraph (b)(3)(B) of the Rights in !F ! Technical Data and Computer Software clause in DAR 7-104.9(a). ! ! !F !CAMPUS AMERICA, INC., 900 HILL AVE, SUITE 205, KNOXVILLE, TN 37915 !F !*******************************************************************! 10 ! STRUCTURED FOR VAX-11 BASIC20 ! & ! + ! M O D I F I C A T I O N H I S T O R Y & ! DATE INITIALS REASON ! 100 &3 ! R O U T I N E P A R A M E T E R S & ! Input Parameters: &$ ! CTRL% Control bits' ! Bits Meaning. ! 0-3 Operation code1 ! Code Operation9 ! 0 No-op (init/test)4 ! 1 Locate Award4 ! 2 Accept Award6 ! 4 Decline Award ; ! 8 Accept/Update Award: ! 16 Generate New Award &0 ! STDID$ ID of associated StudentC ! May be blank or omitted (for facility test) !$ ! FNDID$ Fund ID of associated FUND ! ! AMT$ Amount of award & ! Routine Output: &G ! Result: 0 if No-op (or IN$ blank/omitted) and no errors ! Success:; ! 1 if award found/created/valid ! -1 Permission Error ! -2 Withdrawn Error ! -3 SAP Error# ! -4 Special Condition Error ! -5 Student Restriction ! -6 Missing Document  ! -7 Missing Transcript ! -11 ID not found ! -20 Fund not found; ! -21 One or more terms already awarded for this fund) ! -22 Award adjustment not allowed.G ! -23 New amount is less than amount already earned or disbursed.I ! -24 Award may NOT be reduced to less than the transmitted amount.E ! -25 Fund budget will be exceeded if adjustment is transmitted5 ! -26 Award has been transferred to TRANSCRIPT./ ! -27 Award exceeds Student's unmet need K ! -28 Student's total offset amount exceeds total family contribution/ ! -29 Award is less than minimum award / ! -30 Award is less than minimum award - ! -100 Bad field number in a FLDBLD string, ! -101 Protection violation ! -200 AWARD not found &149 ! &* ! P R O G R A M M I N G N O T I C E S & ! LINE NUMBER NOTICE 200 ! &, ! B U I L D I N G B L O C K S U S E D7201 ! MASTER V3.0 SKELETON PROGRAM FILE HANDLING FORMAT;207 ! MASK V2.8 APPLY MASKING CHARACTERS TO A DATA STRING>209 ! FLDSML V3.0 BUILD FIELD INFORMATION STRING (NO HEADINGS)299 ! 300 ! & ! I / O C H A N N E L S &349 ! &. ! V A R I A B L E E X P L A N A T I O N S &399 ! &2 ! S U B R O U T I N E D E S C R I P T I O N S &449 ! &. ! F U N C T I O N D E S C R I P T I O N S &499 ! &* ! C O M M O N D E S C R I P T I O N S &549 ! &$ ! M A P D E S C R I P T I O N S &599 ! &. ! E X T E R N A L D E S C R I P T I O N S &698 ! 699 ! &* ! C O M M O N D E C L A R A T I O N S & Z% = 1% DIM FLDPARTS$(500%) DIM FUND$(511%)$ DIM SORT$(Z%), LINK%(Z%)  RECORD FLDINFO VARIANT CASE! STRING STR = 46% CASE LONG LCN LONG LNG LONG SCL LONG FLG STRING MSK = 30% END VARIANT END RECORD DECLARE FLDINFO FLDINFO ! DECLARE SORT_REC SORT_REC< ! SORT_REC - Break down for SORT$ components RECORD SORT_REC VARIANT CASE% STRING FUND_TERM$=4% LONG REC_NUM CASE$ STRING FUND_REC$=8% END VARIANT END RECORD SORT_REC COMMON (AID___IO_CHNL) &. LONG INITIALIZED, & LONG STDDTA%, & LONG STDKEY%, & LONG STDDSC%, & LONG TRNDTA%, & LONG TRNKEY%, & LONG TRNDSC%, & LONG WRKCHN%, & LONG AWDDTA%, & LONG AWDKEY%, & LONG LOGDTA%, & LONG FUNDTA%, & LONG FUNKEY%, & LONG CODDTA%, & LONG CODKEY%, & LONG MAXDTA%, & LONG MAXKEY% COMMON (AID___IO_DESC) & STRING CODINF(511%)=46%, & STRING STDINF(511%)=46%, & STRING FUNINF(511%)=46%, & STRING AWDINF(511%)=46%, & STRING LOGINF(511%)=46%, & STRING TRNINF(511%)=46%, & STRING MAXINF(511%)=46% COMMON (AID___IO_DESC) & LONG PERCENT%( 6%), & LONG TERMCODE%( 6%), & STRING ID$(13%), & STRING AWDFLD$=511%, & STRING STDFLD$=511%, & STRING FUNFLD$=511%, & STRING LOGFLD$=511%, & STRING MAXFLD$=511%, & STRING DFLT_YR$, & LONG STUDENTID%, & LONG FULLNAME%, & LONG BUDGET%, & LONG RESOURCES%,& LONG DOCNEED%,& LONG UNMETNEED%,& LONG AWARD%,& LONG ACCEPT%,& LONG TOT_OFFSET%,& LONG SCH_PELL%,& LONG OVERAWARD%,& LONG ALOI%,& LONG ALSR%,& LONG ALN%,& LONG ALD%,& LONG ALRR%,& LONG SPECIAL%,& LONG GSLTOTAL%,& LONG NDSLTOTAL%,& LONG SLSTOTAL%,& LONG ALASTOTAL%,& LONG PLUSTOTAL%,& LONG UNSTOTAL%,& LONG DSLTOTAL%,& LONG DUSTOTAL%,& LONG DPLTOTAL%,& LONG SSN%,& LONG INDEX%,& LONG TOTAL_UNMET%,& LONG TOTAL_AWARD%,& LONG FUNDID%,& LONG SDESCRIPTION%, & LONG FUND%,& LONG FUNTERM%,& LONG LOANTRACK%,& LONG PRIMARYFUND%,& LONG FUNDBUDGET%,& LONG UNACCEPTED%,& LONG ACCEPTED%,& LONG AVAILABLE%,& LONG AWARDED%,& LONG TRANSMITTED%,& LONG MINIMUM%,& LONG MAXIMUM%,& LONG DISBURSEMENT%,& LONG RESTRICTED%,& LONG ALLOWOFFSET%,& LONG SPEC_FUND%,& LONG M_GENERAL_ID%,& LONG EARNAPLYNEED%,& LONG TITLEIV%,& LONG FUNDID.LN%,& LONG FUND.LN%, & LONG TERMCODE.LN%, & LONG AWDSTUDENTID%,& LONG AWDFUNDID%,& LONG AMOUNT%,& LONG DATEAWARD%,& LONG DATEACCEPT%,& LONG AMT_TRANSMIT%,& LONG TRANSFERRED%,& LONG AMT_OFFSET%,& LONG ESTAWARD%,& LONG AWDFUND%,& LONG AWDTERM%,& LONG AWDSSN%,& LONG BEGPERIOD%,& LONG ENDPERIOD%,& LONG DISPERSIBLE%,& LONG ALLOW%,& LONG PRACCPTDT%,& LONG OAFLAG%,& LONG PRACCPTAMT%,& LONG ACTION%,& LONG ESTACTION%,& LONG LOGSTUDENTID%,& LONG LOGFULLNAME%,& LONG LOGFUNDID%,& LONG FUNDNAME%,& LONG LOGAMOUNT%,& LONG LOGDATE%,& LONG REVNUMBER%,& LONG REVREASON%,& LONG USERNAME%,& LONG LOGTERMINAL%,& LONG LOGTIME%,& LONG PROGRAM%,& LONG LOGSSN%,& LONG LOGBEGPERIOD%,& LONG LOGENDPERIOD%,& LONG LOGDISPERSIBLE%,& LONG STD_GENERAL%,& LONG PRIORTOTAL%,& LONG ACCUMULATIVE%,& LONG YEAREARNED%,& LONG YEARLIMIT%,& LONG CLASS_STAT%,& LONG CAREER_LIMIT%,& LONG LST_YRAWARD%,& STRING M_MSK$, & STRING ORIGIN$, & STRING TODAY$, & STRING USER$, & STRING TT$ ) ! Setup the standard error trap routine !> ORIGIN$ = Aid library ! Get today's date) ! Get username and terminal for logging749 ! &$ ! M A P D E C L A R A T I O N S & EXTERNAL LONG FUNCTION &! LIB$ERASE_LINE, &! LIB$GET_SCREEN, &! LIB$SET_CURSOR, &" LIB$SET_LOGICAL, &' FIO_CLOSE_FILE(LONG), &U FIO_DSC_CHAR(LONG,STRING,LONG,LONG,LONG,LONG,STRING,STRING,STRING), &D FIO_FIND_DUPKEY(LONG,STRING,LONG,LONG,LONG DIM()), &# FIO_MAXREC(LONG), &6 FIO_NAME_TO_FLD(LONG,STRING,STRING), &, FIO_OPEN_DSC(LONG,STRING), &? FIO_STORE_FLD_OL(LONG,LONG,LONG,LONG,STRING), &' FIO_UNLOCK_REC(LONG), &+ UTL_SORT(LONG,STRING DIM())" EXTERNAL STRING FUNCTION &) FIO_DSC_REC(LONG,LONG), &! FIO_FILE(LONG), &6 FIO_GET_FLD_OL(LONG,LONG,LONG,LONG), &* UTL_MASK(STRING,STRING), &2 UTL_NUM_CHR(DOUBLE,DOUBLE,LONG), &) UTL_TRAN_LOG(STRING,LONG)840 EXTERNAL LONG FUNCTION & FIO_ERR(), &" FIO_ADD_KEY(LONG,STRING,LONG), & FIO_ADD_REC(LONG,STRING), & FIO_CLOSE_FILE(LONG), &G FIO_DSC_CHAR(LONG,STRING,LONG,LONG,LONG,LONG,STRING,STRING,STRING), & FIO_EXTEND_FILE(LONG,LONG), &# FIO_FIND_KEY(LONG,STRING,LONG), & FIO_GET_CHNL(LONG), & FIO_HEADER(LONG,LONG), &( FIO_NAME_TO_FLD(LONG,STRING,STRING), & FIO_OPEN_DSC(LONG,STRING), &+ FIO_OPEN_FILE(LONG,STRING,STRING,LONG), & FIO_SET_OPTION(LONG,LONG), & FIO_UNLOCK_REC(LONG), & UTL_ASK_YESNO(LONG,STRING), &7 UTL_FILE_SCAN(STRING,STRING,STRING,LONG,LONG,LONG), & UTL_FIND_FILE(STRING), &* UTL_PARSE(STRING,STRING,STRING DIM()), & SYS$NUMTIM, & LIB$DATE_TIME, & LIB$GET_FOREIGN EXTERNAL STRING FUNCTION & FIO_ERT(), & FIO_FILE(LONG), &, FIO_GET_FLD_L(LONG,LONG,LONG,LONG,LONG), & UTL_GET_JOBINFO(LONG), & UTL_MASK(STRING,STRING), & UTL_TRAN_LOG(STRING,LONG)849 ! &8 ! V A R I A B L E T Y P E D E C L A R A T I O N S &898 ! 899 ! &, ! D I M E N S I O N S T A T E M E N T S &935 DIM WORD DATVAL(10%) ! For the FNTDATE function950 ! & ! UTILITY DIMENSION STATEMENTS998 ! 999 ! & &4 ! B E G I N N I N G O F T H E P R O G R A M &1000 ON ERROR GOTO 19000- ! Set the standard error trap1039 ! &, ! C O N S T A N T D E F I N I T I O N S &1050 PRG$ = "WEB" MONEY$ = "$ , 0. " YES$ = "Y"1149 ! & ! UTILITY CONSTANTS1150 TEN4 = 10000. OPNMODE% = 1%; ERROR$(1%) = "%Non-numeric data found in a numeric field."@ ERROR$(2%) = "%Cannot store non-numeric data in numeric field." MONEY$ = "$ , 0. ": !U> TEN4 = 10000 (used to break down field descriptions)0 !U> OPNMODE% = Mode to open data files up with% ! COMPRG I/O routine error messages# ! MONEY = Money mask for printing1199 ! & ! 1 2 0 0 - 1 9 9 7 && ! P R E L I M I N A R Y L O G I C &&1200 OP% = F_CTRL% IF LOC(F_CTRL%)8 AWD.YR$,STD.ID$ = F_STDID$ IF LOC(F_STDID$)1 FUND.ID$ = F_FNDID$ IF LOC(F_FNDID$)2 AWARD.AMT = VAL(F_AMT$) IF LOC(F_AMT$)% AWARD_AMT$ = "" IF LOC(AWARD_AMT$)& ACCEPT_DTE$ = "" IF LOC(ACCEPT_DTE$) ! Localize1300 GOTO 1400 IF OP% > 0% IF INITIALIZED = 0% THEN GOSUB INITIALIZE DFLT_YR$ = AWD.YR$ IF ER%) THEN INITIALIZED = ER%( ELSE INITIALIZED = 0% END IF END IF IF INITIALIZED < 0%( THEN AWARD.ERR% = INITIALIZED GOTO 9000 END IF GOTO 9000$ ! Init facility once; ! If init failed, return failure every time1400 GOSUB LOAD_STUDENT GOTO 9000 IF AWARD.ERR% GOSUB LOAD_PACKAGE+ GOSUB MAINTAIN_AWARD IF (OP% AND 1%) = 1%  GOTO 9000 IF AWARD.ERR%+ GOSUB MAINTAIN_AWARD IF (OP% AND 2%) = 2%  GOTO 9000 IF AWARD.ERR%+ GOSUB MAINTAIN_AWARD IF (OP% AND 4%) = 4%  GOTO 9000 IF AWARD.ERR%+ GOSUB MAINTAIN_AWARD IF (OP% AND 8%) = 8%  GOTO 9000 IF AWARD.ERR%, GOSUB MAINTAIN_AWARD IF (OP% AND 16%) = 16% GOTO 9000 1998 ! 1999 ! & ! 2 0 0 0 - 8 9 9 9 &( ! M A I N P R O G R A M L O G I C &2000 ! & ! A W A R D O P T I O N & LOAD_STUDENT: Z% = FNSTDNUM% IF Z% < 1% THEN AWARD.ERR% = -11% RETURN END IF ! Ensure we have a valid ID / GOSUB CHECK_STUDENT UNLESS (OP% AND 32%) = 32% RETURN  ! We're done LOAD_PACKAGE: N.LINK% = FNRLINK% !DIM FUND$(N.LINK%) FOR I% = 1% TO N.LINK% AWDREC% = LINK%( I%)" FUND$( I%) = FNAWD$( AWDFUNDID%)7 ITERATE IF FNAWD$(AWDSTUDENTID%) = FNSTD$(STUDENTID%) AWARD.ERR% = -99% RETURN NEXT I% ! Extract the general fund ID= ! Don't rebuild links if the previous award was a duplicate+ ! or if the links have already been built" ! Read links and store fund ID's3 ! Check to ensure good links (no std ID mismatch) RETURNMAINTAIN_AWARD:- BUDGET = VAL(UTL_TRAN_LOG( "CC$BUDGET", 0%))( BUDGET = FNSTD(-BUDGET%) IF BUDGET = 0., NEW.DATA = BUDGET - FNSTD( - AWARD%)4 NEW.DATA = INT( NEW.DATA * 100. + .5) / 100.8 UNMETNEED$ = UTL_MASK( NUM1$( NEW.DATA * 100.), MONEY$)G CALL LIB$SET_LOGICAL("CC$OA_UNMETNEED",UNMETNEED$,"LNM$JOB",,) B CALL LIB$SET_LOGICAL("CC$OA_HAVEBALANCE","0","LNM$JOB",,) S CALL LIB$SET_LOGICAL("CC$OA_HAVEBALANCE","1","LNM$JOB",,) IF NEW.DATA > 0. ! Set our initial unmet value) SHORT.ID$ = SEG$(FUND.ID$, 1%, FUND.LN%) OFF.INT$ = "WEB" STD_EST% = 0% GOSUB GET_FUND RETURN IF AWARD.ERR% ! Ensure we have a valid fund" DEF_AMT% = FNPREV%(FUND.ID$, -1%) IF DEF_AMT%6 THEN AWARD_ACPT% = -1% IF FNAWD(-DATEACCEPT%) > 0. ZA$ = "ACT"4 ZA$ = "EST" IF FNAWD$( ESTAWARD%) = "Y" END IF IF (OP% AND 1%) = 1% THEN IF DEF_AMT% THEN AWARD.ERR% = 0%: AWARD_AMT$ = NUM1$(FNAWD(-AMOUNT%)) IF LOC(AWARD_AMT$)@ ACCEPT_DTE$ = NUM1$(FNAWD(-DATEACCEPT%)) IF LOC(ACCEPT_DTE$) ELSE AWARD.ERR% = -200% END IF GOTO SET_LOANS END IF1 ! If just validating award then we're finished. AWARD_ACPT% = 0% IF DEF_AMT% THEN DEF_AMT = FNAWD(-AMOUNT%) END IF IF (OP% AND 2%) = 2% ( THEN Z% = FNAWD%( DATEACCEPT%, TODAY$) AWARD.AMT = DEF_AMT/ Z% = FNAUDIT%( FNAWD(-AMOUNT%), "ACCEPT",ZA$) Z% = FNAWD%( OAFLAG%, "A") GOSUB UPDATE_ACCEPTED END IF IF (OP% AND 4%) = 4% THEN AWARD.AMT = 0. PDA$ = FNAWD$( DATEACCEPT%) Z% = FNAWD%( PRACCPTDT%, PDA$)# Z% = FNAWD%( DATEACCEPT%, TODAY$), Z% = FNAWD%( -PRACCPTAMT%, NUM1$(DEF_AMT))) Z% = FNAUDIT%( DEF_AMT , "DECLINE",ZA$) Z% = FNAWD%( OAFLAG%, "D")? ACCEPT_DTE$ = NUM1$(FNAWD(-DATEACCEPT%)) IF LOC(ACCEPT_DTE$) END IF! ! Re-award at $0. if cancelling5 ! Remove AWARD for $0 with $0 transmitted via batch( OFFSET.AMT%, OFFSET%, ROUND_AWARD% = 0% OFFSET.AMT = 0. GOSUB CHECK_FUND RETURN IF AWARD.ERR%& GOSUB CHECK_MAX_AWARD IF MAX_PROCESS% RETURN IF AWARD.ERR%= NO_TRACK% = -1% IF EDIT$( FNFUN$( LOANTRACK%),32%) <> "Y" ! Initialize flags1 ! CHECK FOR DISPERSIBLE/CERTIFIED LOAN PROGRAMS IF (OP% AND 2%) = 2%) THEN DISPERSIBLE = FNAWD(-DISPERSIBLE%)  ELSE DISPERSIBLE = AWARD.AMT END IF& DISPERSIBLE = 0 IF (OP% AND 4%) = 4%( DISPERSIBLE = DISPERSIBLE - PREV.DSPAMT !GOTO NOTRACK IF NO_TRACK%' ! Go on if we are not tracking a loan GOSUB FILE_UPDATES9 ! Perform the updates to STUAID, FUND, AWARD, & FINLOG  IF (OP% AND 4%) = 4% THEN AWARD.AMT = 0. END IF- BUDGET = VAL(UTL_TRAN_LOG( "CC$BUDGET", 0%))( BUDGET = FNSTD(-BUDGET%) IF BUDGET = 0., NEW.DATA = BUDGET - FNSTD( - AWARD%)4 NEW.DATA = INT( NEW.DATA * 100. + .5) / 100.8 UNMETNEED$ = UTL_MASK( NUM1$( NEW.DATA * 100.), MONEY$)G CALL LIB$SET_LOGICAL("CC$OA_UNMETNEED",UNMETNEED$,"LNM$JOB",,) B CALL LIB$SET_LOGICAL("CC$OA_HAVEBALANCE","0","LNM$JOB",,) S CALL LIB$SET_LOGICAL("CC$OA_HAVEBALANCE","1","LNM$JOB",,) IF NEW.DATA > 0. ! Set our initial values SET_LOANS:# RETURN UNLESS (OP% AND 1%) = 1%  AWARD.AMT = FNAWD(-AMOUNT%) FOR J% = 5% TO 13%) CHKFNDS% = UTL_PARSE(ID$(J%),,TMPID$()) FOR TST% = 1% TO CHKFNDS% TSTID$ = TRM$(TMPID$(TST%)) L% = LEN(TSTID$) ITERATE IF L% = 0%0 ITERATE IF TSTID$ <> SEG$(SHORT.ID$, 1%, L%)4 ! Check the length of the Fund ID to test against.8 ! Go on to the next one if it's blank. Then just test* ! the leftmost characters for a match. SELECT J% CASE 5%- NEW.DATA = FNSTD( -NDSLTOTAL%) + AWARD.AMTR CALL LIB$SET_LOGICAL("CC$OA_NDSL",NUM1$(NEW.DATA),"LNM$JOB",,) CASE 6%, NEW.DATA = FNSTD( -GSLTOTAL%) + AWARD.AMT4 PRV.OA = VAL(UTL_TRAN_LOG( "CC$OA_STAFFORD", 0%))] CALL LIB$SET_LOGICAL("CC$OA_STAFFORD",NUM1$(NEW.DATA+PRV.OA),"LNM$JOB",,) CASE 7%, NEW.DATA = FNSTD( -SLSTOTAL%) + AWARD.AMT CASE 8%- NEW.DATA = FNSTD( -ALASTOTAL%) + AWARD.AMT CASE 9%- NEW.DATA = FNSTD( -PLUSTOTAL%) + AWARD.AMT CASE 10%, NEW.DATA = FNSTD( -UNSTOTAL%) + AWARD.AMT4 PRV.OA = VAL(UTL_TRAN_LOG( "CC$OA_STAFFORD", 0%))\ CALL LIB$SET_LOGICAL("CC$OA_STAFFORD",NUM1$(NEW.DATA+PRV.OA),"LNM$JOB",,) CASE 11%, NEW.DATA = FNSTD( -DSLTOTAL%) + AWARD.AMT4 PRV.OA = VAL(UTL_TRAN_LOG( "CC$OA_STAFFORD", 0%))\ CALL LIB$SET_LOGICAL("CC$OA_STAFFORD",NUM1$(NEW.DATA+PRV.OA),"LNM$JOB",,) CASE 12%, NEW.DATA = FNSTD( -DUSTOTAL%) + AWARD.AMT CASE 13%, NEW.DATA = FNSTD( -DPLTOTAL%) + AWARD.AMT END SELECT1 ! Get the cumulative totals to store in STUAID1 ! virtually and TRANSCRIPT ultimately to track& ! the totals for award verification NEXT TST%  NEXT J% RETURN8999 ! 9000 ! &( ! E N D O F T H E P R O G R A M & AID_MAINTAIN_AWARD = AWARD.ERR% GOTO 32767 9999 ! & ! 1 0 0 0 0 - 1 6 9 9 8 &$ ! U S E R S U B R O U T I N E S &10000 ! &? ! S T U D E N T A N D T O T A L A W A R D C H E C K &CHECK_STUDENT:10005 AWARD.ERR% = 0% ! Initialize the error flag ! Set the cursor+10020 IF FNSTD$( PERMISSION%) <> " " THEN AWARD.ERR% = -1% GOTO 10290 END IF+ ! Overall error condition 110040 IF FNSTD( WITHDRAW%) > 0. THEN AWARD.ERR% = -2% GOTO 10290 END IF ! Overall error condition 210060 SAP$ = FNSTD$( SAP%)( IF EDIT$( SAP$, 32%) <> "Y" THEN AWARD.ERR% = -3% GOTO 10290 END IF+ ! Overall error condition 3/10070 SPECIAL$ = EDIT$(FNSTD$( SPECIAL%), 255%)" GOTO 10080 UNLESS SPECIAL$ <> "" AWARD.ERR% = -4% GOTO 10290 ! Display the handling code, ! Check for special handling code sequence&10080 FOR I% = 5% TO STU_RESTRICTIONS%# ITERATE IF STU_RES_DTA$( I%) = "" AWARD.ERR% = -5% GOTO 10290 NEXT I%6 ! Check for any other special flags the user wants -$ ! from the student's STUAID recordK10100 DOC.FRM%(I%) = VAL(FIO_GET_FLD_L(STDDTA%, STDREC%, 1%, DOC_ST%(I%), &) DOC_LN%(I%))) FOR I% = 1% TO NUM_DOCS% FOR I% = 1% TO NUM_FATS% FAT.FRM$(I%) = &> FIO_GET_FLD_L(STDDTA%,STDREC%,1%, FAT_ST%(I%), FAT_LN%(I%)) COL.FRM$(I%) = &@ FIO_GET_FLD_L(STDDTA%, STDREC%, 1%, COL_ST%(I%), COL_LN%(I%)) NEXT I% DOC.OUT%, FAT.OUT% = 0% , ! Place document tracking codes/dates into. ! Appropriate places in DOC.FRM%( ) array B ! Place college/fat rec/not rec into FAT.FRM$ and COL.FRM$ array( ! Initialize outstanding doc, fat flag10200 FOR I% = 1% TO NUM_DOCS%* ITERATE UNLESS DOC.FRM%( I%) = 99999999% DOC.OUT% = DOC.OUT% + 1% NEXT I%3 ! Check the document fields for all the documents$ ! Count and print the missin~AID_ONLINE.BCK,P &[SCRIPTS.SIS]AID_MAINTAIN_AWARD.BAS;23f 3C|+g docs%10220 GOTO 10240 UNLESS DOC.OUT% > 0% AWARD.ERR% = -6%, ! If missing docs, then set the error flag10240 FOR I% = 1% TO NUM_FATS%# ITERATE UNLESS FAT.FRM$(I%) = "9" FAT.OUT% = FAT.OUT% + 1% NEXT I%7 ! Check the transcript fields for all the transcripts$ ! Count and print the missing fats%10260 GOTO 10290 UNLESS FAT.OUT% > 0% AWARD.ERR% = -7% GOTO 10290 , ! If missing docs, then set the error flag ! Prompt to continue4 ! Reset error flag if continue, otherwise fall out 10290 RETURN$ ! End of student-oriented checking &10300 &+ ! PROCESS A LEADING QUALIFIER (No Fund ID) &CHECK_QUALIFIER:10310 SELECT QUALIFIER% CASE 1% IF STD_EST% 7 THEN PRINT "%Estimated awarding already enabled"; BEL@ ELSE PRINT "Estimated awarding enabled for student "+STD.IDM$ STD_EST% = -1%8 ! Check for a valid qualifier based on subscript value ! First check for /Estimate9 ! If already enabled, then print the warning and return0 ! otherwise, print the notice and set the flag10315 CASE 2%  GOTO 10350 IF ARG% IF NOT STD_EST%7 THEN PRINT "%Estimated awarding was not enabled"; BEL@ ELSE PRINT "Estimated awarding disabled for student "+STD.IDM$ STD_EST% = 0% ! Next check for /Actual? ! Go the special routine to activate awards for selected term ! if there is an argument9 ! If already enabled, then print the warning and return0 ! otherwise, print the notice and set the flag 10320 CASE 3% GOTO 10330 IF ARG% ! Next check for a termcode? ! Prompt for a termcode unless one was entered as an argument610330 GOTO 10399 UNLESS FNCHK_DTRM%(ARG$, CURYR$, 0%) ARG$ = EDIT$(ARG$, 255%) STD_TRM$ = ARG$7 ! Get the default termcode for this student and check10340 CASE ELSE END SELECT GOTO 10399& ! Set flags and messages accordingly ! Check the qualifier8 ! If it changes - then change the notice at the bottom ! Back for more10350 ACT.ALL% = 0%7 GOTO 10360 UNLESS ARG$ = SEG$( "ALL", 1%, LEN( ARG$)) ACT.ALL% = -1% GOTO 10370 ! Check for ALL argument( ! Verify and fall out if not confirmed*10360 IF NOT FNCHK_DTRM%(ARG$, CURYR$, 0%)2 THEN PRINT " Enter ALL or a valid term code"; BEL GOTO 10399 ! Check for an argument4 ! Verify for either term or all awards to activateB ! If we know we have an invalid argument then notify and iterate 10370 N.LINK% = FNRLINK% IF N.LINK% THEN ACTIV% = 0%5 ELSE PRINT "%No awards to activate for student"; BEL GOTO 103990 ! Check to make sure we have funds to activate1 ! Set the activ flag for use in a later message10380 FOR LNK% = 1% TO N.LINK% AWDREC% = LINK%( LNK%)/ IF FNAWD$(AWDSTUDENTID%) <> FNSTD$(STUDENTID%)? THEN PRINT "%Corrupt link to AWARD record "; NUM1$(AWDREC%); &( " - Execute VERIFY procedures."; BEL% PRINT " Terminating AWARD program." GOTO 9000 ! Build the link array3 ! Check to ensure good links (no std ID mismatch);10385 ITERATE IF FNAWD$( AWDTERM%) <> ARG$ AND NOT ACT.ALL%% ITERATE IF FNAWD$( ESTAWARD%) <> "Y" ACTIV% = -1% FUND.ID$ = FNAWD$( AWDFUNDID%) GOSUB CHECK_FUND ITERATE IF AWARD.ERR% TRNSMT% = 0%@ GOTO 10390 IF FNAWD( AMT_TRANSMIT%) <= 0. OR BILLING.TRANSMITS% PRINT? PRINT "Award from fund ";FUND.ID$;" has transmitted amount"; &% " of "; FNAWD$( -AMT_TRANSMIT%)" PRINT "%Award NOT activated"; BEL ITERATE@ ! For each award in the array, check the term and the ALL flag; ! Check for a transmitted award - Award remains estimated/ ! if the transmitted portion is not activatedI10390 ITERATE UNLESS FNTRNUP%(STD.ID$, -FNAWD(-AMT_TRANSMIT%), 0%, -1%) & IF TRNSMT% Z% = FNAWD%( ESTAWARD%, "N")2 PRINT "Award from fund "; FUND.ID$; " activated" = Z% = FNAUDIT%( FNAWD( -AMOUNT%), "TRANSM", "E2A") IF TRNSMT%2 Z% = FNAUDIT%( FNAWD( -AMOUNT%), "AWARD", "E2A") NEXT LNK% IF NOT ACTIV%" THEN Z$ = "%No estimated awards "( Z$ = Z$ + "to activate." IF ACT.ALL%@ Z$ = Z$ + "from term " + ARG$ + " to activate" UNLESS ACT.ALL% PRINT Z$; BEL, ! Set the estimate flag in award to a null1 ! Print the notification and get the next award( ! Make sure the ALL switch is shut off ! Go get another fund 10399 RETURN !End of routine10500 &) ! GET A FUND RECORD AND ITS SUBORDINATES & GET_FUND:10505 AWARD.ERR% = 0% ! Set the error flag910510 FUNREC% = FIO_FIND_KEY( FUNKEY%, FUND.ID$, FUNDTA%) IF FUNREC% <= 0% THEN AWARD.ERR% = -11% GOTO 10590 ELSE IFUNREC% = FUNREC% ! Get the fund record" ! Notify if problem and fall out- !>IFUNREC% = Originally entered fund record" ! Set FUNREC% to the fund record< ! Always load the original fund record number in 0 element310520 MFUNREC$ = EDIT$(FNFUN$( PRIMARYFUND%), 255%) SUB.FUNDS% = 0%  GOTO 10530 IF MFUNREC$ = ""4 MFUNREC% = FIO_FIND_KEY(FUNKEY%, MFUNREC$, FUNDTA%)B IF SEG$( FUND.ID$, 1%, FUND.LN%) <> SEG$( MFUNREC$, 1%, FUND.LN%) THEN AWARD.ERR% = -12%V !print SEG$( FUND.ID$, 1%, FUND.LN%);" doesn't match ";SEG$( MFUNREC$, 1%, FUND.LN%) GOTO 10590" ELSE GOTO 10590 IF MFUNREC% > 0% END IF AWARD.ERR% = -13% GOTO 10590* ! Get the primary record number (if any): ! Make sure that the primary general fund identifier and/ ! the term general fund identifier match - if" ! they don't - you can forget it< ! If we don't find the primary and one is listed then warn ! and exit10530 MFUNREC% = IFUNREC% FOR I% = 1% TO 6% FUNDS%(I%) = -1%# SUB.TRM$ = FNFUN$( TERMCODE%( I%))' ITERATE IF EDIT$(SUB.TRM$, 255%) = ""G SUB.FUND$ = EDIT$( SEG$(FNFUN$( FUNDID%), 1%, FUND.LN%+TERMCODE.LN%) & + SUB.TRM$, 255%)8 FUNDS%(I%) = FIO_FIND_KEY( FUNKEY%, SUB.FUND$, FUNDTA%) IF FUNDS%(I%) > 0% THEN SUB.FUNDS% = -1% FUNDS$(I%) = SUB.FUND$ ELSE AWARD.ERR% = -14% GOTO 10590! !>MFUNREC% = Master fund record7 ! Bypass unless this is an annual (blank primaryfund)/ ! Get the subordinate record numbers (if any)( ! SUB.FUNDS% = subordinate funds found- ! Check to make sure the subordinates exist- ! Error condition and disallow award if not 10540 NEXT I% GOTO 10590 IF SUB.FUNDS% AWARD.ERR% = -15%" ! Go through each termcode field=10590 AUTO.ACCEPT% = (EDIT$(FNFUN$( AUTOACCEPT%), 34%) = "Y") RETURN ! Routine end11000 ! &. ! C H E C K S P E C I F I C A W A R D S( ! Any Special Fund checking should be ! coded in this sub-routine11020 AWARD.ERR% = -1% LIMCL_UPDATE% = 0%F GEN_ERR$ = "%Ineligible. Status flag conflict in FUND/STUAID files." FUN_RES_DTA$( I%) = &= EDIT$( FIO_GET_FLD_L( FUNDTA%, FUNREC%, 1%, FRES_ST%(I%), &: FRES_LN%(I%)), 2%+32%) FOR I% = 1% TO FUN_RESTRICTIONS%; ! Set master return flag - to continue or not to continue ! Clear program error variable9 ! Set generic msg applicable to the following sections.@11100 GOTO 11120 IF EDIT$( FNFUN$( TITLEIV%), 2% + 32%) <> YES$ FOR I% = 1% TO T4_RESTRICTIONS%% ITERATE IF T4_RES_DTA$( I%) <> YES$: PRINT "%"; EDIT$( T4_RESTRICT_TXT$( I%), 8% + 128%); BEL8 Z$ = FNRESPOND$( 0%, " Press to continue...") PRINT( LIMCL_UPDATE% = ( LIMCL_UPDATE% OR 8%) NEXT I% IF ( LIMCL_UPDATE% AND 8%) THEN PRINT; PRINT "%Student is ineligible for Title IV Funding."; BEL GOTO 11490  END IF ! All Title IV edit checks! ! From the FUND file - .TITLEIV% ! If it contains a Y, do this check> ! 1% TO T4_RESTRICTIONS% corresponds with the prior/current 9 ! default Title IV flags in the student's STUAID record: ! Users may add additional Title IV fields if necessary" ! (Up to 20 - we already have 8); ! Control will iterate through ALL Title IV fields - then5 ! if there was a problem - will die out with errors11120 FOR I% = 1% TO 4%' ITERATE IF FUN_RES_DTA$( I%) = "" OR &, ( FUN_RES_DTA$( I%) = STU_RES_DTA$( I%)) PRINT GEN_ERR$; BEL= PRINT " "; EDIT$( STU_RESTRICT_TXT$( I%), 8% + 128%); " "; & STU_RES_DTA$( I%)= PRINT " "; EDIT$( FUN_RESTRICT_TXT$( I%), 8% + 128%); " "; & FUN_RES_DTA$( I%)& Z$ = FNRESPOND$( 0%, " Proceed ") PRINT GOTO 11490 IF RESPONSE% <> 4% NEXT I%5 ! Check for unmatched flags between FUND and STUAID ! STUAID FUND !0 ! 1% 1% = Citizen/Permanent Resident check" ! 2% 2% = Degree Restriction$ ! 3% 3% = Graduate Restriction* ! 4% 4% = State Resident Restriction !" ! These are the mandatory checks&11160 FOR I% = 5% TO FUN_RESTRICTIONS%# ITERATE IF FUN_RES_DTA$( I%) = ""= PRINT "%"; EDIT$( FUN_RESTRICT_TXT$( I%), 8% + 128%); " "; & FUN_RES_DTA$( I%); BEL& Z$ = FNRESPOND$( 0%, " Proceed ") PRINT GOTO 11490 IF RESPONSE% <> 4% NEXT I%6 ! Check for any other special flags the user wants - ! from the FUND record711480 FUND_SPECIAL$ = EDIT$( FNFUN$( SPEC_FUND%), 255%)' GOTO 11487 UNLESS FUND_SPECIAL$ <> ""# CODREC% = FIO_FIND_KEY( CODKEY%, &9 EDIT$( SPEC_FUND_PFX$ + FUND_SPECIAL$, 255%), CODDTA%)F FUND_SPECIAL$ = SEG$( EDIT$( FNCOD$( DESCRIPTION%), 152%), 1%, 45%) & IF CODREC% > 0%5 PRINT "%Special handling code: "; FUND_SPECIAL$; BEL& Z$ = FNRESPOND$( 0%, " Proceed ") GOTO 11490 IF RESPONSE% <> 4% PRINT* ! Display the special FUND handling code, ! Check for special handling code sequence11487 AWARD.ERR% = 0% ! Reset error indicator 11490 RETURN ! End specific award checking12000 ! & ! GENERAL FUND CHECKING & CHECK_FUND:12100 AWARD.ERR% = -20%@ PREV.AMT, PREV.DSPAMT, PREV.OFFSET, PREV.TRNSMT, TRANS.AMT = 0. TRNSMT% = 0% ! Set some variablesD12120 !GOTO 12490 IF AWARD.AMT <= 0.00001 AND NOT BILLING.TRANSMITS% GOTO 12200 IF MFUNREC$ <> ""# DUP.FUND% = FNPREV%( SHORT.ID$,0%) GOTO 12300 UNLESS DUP.FUND% AWARD.ERR% = -21% GOTO 12490' ! Avoid all the hubbub if zero amount* ! Skip to next check if not general fund< ! Scan the award list for previous awards for this attempt ! At general fund awarding)12200 DUP.FUND% = FNPREV%( FUND.ID$, -1%) GOTO 12300 UNLESS DUP.FUND% PREV.AMT = FNAWD( -AMOUNT%)$ PREV.DSPAMT = FNAWD( -DISPERSIBLE%)# PREV.OFFSET = FNAWD( -AMT_OFFSET%)% PREV.TRNSMT = FNAWD( -AMT_TRANSMIT%) HOLD.AMT = 0. ! Set some initial values ! Scan fund list for duplicate" ! Set previous amount variables 7 ! If a previous transmittal then calculate new amount" ! set previous transmittal flag,12220 !DISPERSIBLE = AWARD.AMT - PREV.DSPAMT HOLD.AMT = AWARD.AMT! AWARD.AMT = AWARD.AMT - PREV.AMT2 OFFSET.AMT = OFFSET.AMT - PREV.OFFSET IF OFFSET%( OFFSET.AMT% = -1% IF OFFSET.AMT <> 0. ESTIMATE% = 0%/ ESTIMATE% = -1% IF FNAWD$( ESTAWARD%) = "Y", ! Confirm new award total - include offset9 ! Set PREV.AMT and reduce AWARD.AMT to the difference.2 ! And the same with offset amount if applicable>12240 GOTO 12290 IF PREV.TRNSMT = 0. OR PREV.TRNSMT = HOLD.AMT Z% = FNCHK_DISBURSE% IF NOT Z% AND NOT EARN% THEN AWARD.ERR% = -22% GOTO 12490% ELSE IF HOLD.AMT < PREV.TRNSMT AND &= ((NOT TRNSMT% AND NOT EARN%) OR (EARN% AND NOT ALLOW.ADJ%)) THEN AWARD.ERR% = -23% GOTO 12490N. ELSE GOTO 12290 IF EARN% AND NOT ALLOW.ADJ%, ! Check for transmitted amount - set flags ! Disallow invalid flags? ! Check for disbursed/earned awards less than total award ande5 ! disallow adjust unless allow adjust flag is set.@ ! Never mind adjustments for earned awards unless allow adjust' ! Set the text for disbursement type.(&12250 GOTO 12290 IF BILLING.TRANSMITS%- ! Let billing handle all transmittal duties*(12260 TRANS.AMT = PREV.TRNSMT - HOLD.AMT4 GOTO 12290 IF HOLD.AMT => (PREV.TRNSMT - TRANS.AMT) AWARD.ERR% = -24% GOTO 12490 ( ! Show the current transmitted portion= ! Prompt to adjust - disallow if transmitted portion is not(< ! adjusted when new award amount is less than transmitted '12280 !GOTO 12290 UNLESS TRANS.AMT < 0. ; !IF FNFUN(-TRANSMITTED%) - TRANS.AMT > FNFUN(-FUNDBUDGET%)  !THEN AWARD.ERR% = -25% ! GOTO 12490 " ! Set the new transmittal amount ! Check for budget limit. ! Test against the budget and allow override112290 IF EDIT$(FNAWD$( TRANSFERRED%), 255%) <> ""c THEN AWARD.ERR% = -26%s GOTO 12490 " ! Check transferred to transcrpt) ! File and allow modification of award.aD12300 NEW.UNMET = FNSTD( -UNMETNEED%) - AWARD.AMT IF NOT OFFSET.AMT%; NEW.UNMET = FNSTD( -UNMETNEED%) - AWARD.AMT + OFFSET.AMT &! IF OFFSET.AMT% GOTO 12340 UNLESS OFFSET.AMT%. IF NEW.UNMET < 0. AND OFFSET.AMT <> AWARD.AMT THEN AWARD.ERR% = -27% GOTO 12490 ! Check for unmet need4 ! Don't consider contribution offset figure in new ! Unmet need figure#12320 GOTO 12340 UNLESS OFFSET.AMT%*; IF OFFSET.AMT + FNSTD( -TOT_OFFSET%) > FNSTD( -RESOURCES%)  THEN AWARD.ERR% = -28%! GOTO 12490: ! Check the total offset amount, including updated award2 ! If greater than resources, then alert the user ! Proceed conditionally 212340 !IF AWARD.AMT + PREV.AMT < FNFUN( -MINIMUM%) !THEN AWARD.ERR% = -29% ! GOTO 12490 ! Check minimumsJ12350 !IF AWARD.AMT+PREV.AMT > FNFUN( -MAXIMUM%) AND FNFUN( -MAXIMUM%) >0. !THEN AWARD.ERR% = -30% ! GOTO 12490  ! Check maximumU#12370 Z% = FIO_UNLOCK_REC( FUNDTA%) FUNREC% = MFUNREC% ? ! Formulate the fund id that should contain necessary funding? ! Information. try to find and report failure, when necessary112380 NEW.AVAIL = FNFUN( -AVAILABLE%) - AWARD.AMT !IF NEW.AVAIL < 0.  !THEN AWARD.ERR% = -31% ! GOTO 12490i ! The available funding check #12390 Z% = FIO_UNLOCK_REC( FUNDTA%)  FUNREC% = IFUNREC%  GOTO 12490 IF FUNREC% <= 0%% ! Set up correct fund record, againi. !>IFUNREC% - Stores the original fund record12400 AWARD.ERR% = 0% ' ! If we made here, there was no errord 12490 RETURN ! End of fund check  & &12500 !  &3 ! CHECK STUDENT/FUND RECORDS - MAX_AWARD ACTIVITY & !( ! LIMCL_UPDATE% - For the AWARD Program ! ! Bit Values Meaning !0 ! 2% Student's Class code in MAX_AWARD is ! BLANK - update it./ ! 4% A New Year limit has been entered -D) ! Update this and the student's classA ! code in MAX_AWARD.1 ! 128% A major error occurred - update those * ! fields in MAX_AWARD not dealing with) ! the currently entered award amount.: !B ! I pity the poor fool who attempts to re-work this section. TheF ! logic is VERY critical especially near the end of the section where6 ! most of the data is stored to MAX_AWARD and STUAID.CHECK_MAX_AWARD:12510 AWARD.ERR% = 0%u LIMCL_UPDATE% = 0%i TTL_ACCUMED = 0.! YEAR_LIMIT = 0. YEAR_EARNED = 0.u IFUNREC% = FUNREC%2 ! Clear out the working guys' ! Save our current fund record numberd:12530 FUNREC% = FIO_FIND_KEY(FUNKEY%, MFUNREC$, FUNDTA%) &( IF MFUNREC$ <> "" AND MFUNREC% > 0%: MAX_ID$ = EDIT$( FNFUN$( M_GENERAL_ID%), 8% + 32% + 128%) GOTO END_OUT IF MAX_ID$ = "" ! Tricky Folks8 ! First, most of the important variables used here are; ! initialized in the 10500 Section - even before we reachn ! this point.7 ! If we have a primary fund record already - MFUNREC$a4 ! will be NULL - and we'll have the annual rec num ! so we won't do the lookupr; ! Else we have a term fund record - so we have to get then ! primary fund record19 ! Get the data which would identify the general Fund ID> ! If we don't have anything - which means no MAX_AWARD stuff ! Get the heck out-of-here!:12540 MAX_ID$ = EDIT$( STD.ID$ + MAX_ID$, 8% + 32% + 128%)3 MAXREC% = FIO_FIND_KEY( MAXKEY%, MAX_ID$, MAXDTA%)0 GOTO 12560 IF MAXREC% > 0%HB PRINT "%Student/General Fund ID: "; UTL_MASK( MAX_ID$, M_MSK$); &% " not found in MAX_AWARD."; BEL4 ! Tell'em if the record doesn't exist in MAX_AWARD;12550 Z$ = FNRESPOND$( 0%, " Continue with the award ")  IF RESPONSE% = 1%7 THEN PRINT "%/BACK not available at this prompt."; BEL PRINTN GOTO 12550; ELSE AWARD.ERR% = -1% IF RESPONSE% = 3% OR RESPONSE% = 5%D PRINT IF RESPONSE% = 4% GOTO END_OUT END IF  ! Prompt for continuance7 ! Hold on, NO /BACK processing here - too many thingsO ! going on above; ! If they don't want to continue, set the main error flag& ! and leave this place 1 ! If they want to continue, leave anyway - HA!! 612560 GOTO 12590 IF EDIT$( FNSTD$( CLASS%), 2%) <> ""7 PRINT "%Student's class code in STUAID is BLANK."; BEL 9 ! Giv'em some more bad news - typical for Financial Aid J12570 STD_CLASS$ = FNRESPOND$( 0%, "What is the Student's Classification")* STD_CLASS$ = EDIT$( STD_CLASS$, 2% + 32%) IF RESPONSE% <> 2%IB THEN PRINT "%Award will be denied if a code is NOT entered."; BEL9 Z$ = FNRESPOND$( 0%, " Prompt for the next award ")  PRINTC0 GOTO 12570 IF RESPONSE% = 3% OR RESPONSE% = 5% AWARD.ERR% = -1% GOTO END_OUT% ELSE IF LEN( STD_CLASS$) > CLASS.LN% . THEN PRINT "%Class code MUST not exceed "; &, STR$( CLASS.LN%); " character(s)."; BEL PRINT GOTO 12570 ELSE CODREC% = & FIO_FIND_KEY(CODKEY%, &3 EDIT$( CLASS_PFX$ + STD_CLASS$, 255%), CODDTA%)  IF CODREC% <= 0%G+ THEN PRINT "%Class code "; STD_CLASS$; &L" " is NOT a valid code."; BEL PRINT  GOTO 12570 ELSE GOTO 12585 &- IF EDIT$(FNMAX$( CLASS_STAT%), 32%) = ""A1 PRINT "Student's class from MAX_AWARD is "; & + EDIT$( FNMAX$( CLASS_STAT%), 32%); "."2 PRINT "Class code entered is ";STD_CLASS$; "." END IF  END IF END IF%7 ! Get the student's classification for STUAID storage1@ ! They have to enter something or we won't want to do anything8 ! Edit the data and bypass if good - only if MAX_AWARD# ! classification status is blank.N% ! Validate the code through FINCODE=) ! Display the data for the users review 612580 Z$ = FNRESPOND$( 0%, "Continue to process ") PRINTB GOTO 12570 IF RESPONSE% = 1% OR RESPONSE% = 3% OR RESPONSE% = 5% ! A chance to redeem ones self&12585 Z% = FNSTD%( CLASS%, STD_CLASS$)- ! If all goes well, store the little beggarD812590 Z$ = FIO_GET_FLD_L( MAXDTA%, MAXREC%, -1%, 1%, 1%) GOTO BYPASS &B IF EDIT$( FNSTD$( CLASS%), 32%) = EDIT$(FNMAX$(CLASS_STAT%),32%)* IF EDIT$( FNMAX$( CLASS_STAT%), 2%) = "", THEN LIMCL_UPDATE% = ( LIMCL_UPDATE% OR 2%) GOTO BYPASSR END IFLG PRINT "Student's class has changed. Year limits will be zeroed."; BEL ; PRINT "The OLD year limit was "; FNMAX$( -YEARLIMIT%); "."L ! Time to tie up our friendO !&< ! Bypass the class check if the classes in both files are 9 ! equal or we are on an update of a previous award from& ! a prior year !&9 ! Set our update flag if the class code in MAX_AWARD isR+ ! blank and bypass the limit update check% ! / ! Lastly, if the classification has changed -N0 ! let them know about it - communication yeah 12600 PRINT D NEW_LIMIT$ = FNRESPOND$( 0%, "What is the NEW year limit to store") IF RESPONSE% = 1%7 THEN PRINT "%/BACK not available at this prompt."; BELD GOTO 12600# ELSE GOTO 12610 IF RESPONSE% = 2% END IF_ IF RESPONSE% = 3%C THEN PRINT "%Award activity will NOT be stored to MAX_AWARD."; BELN' Z$ = FNRESPOND$( 0%, " Proceed ")1 GOTO 12600 IF RESPONSE% = 3% OR RESPONSE% = 5%L* LIMCL_UPDATE% = ( LIMCL_UPDATE% OR 128%) GOTO 12680 END IFN4 ! I'm going to be a sweetheart and let them update4 ! the new year limit here in the program - because, ! the old year limit is about to be ZEROED4 ! Continue if they entered something - we'll check ! it out later - to be sureL< ! If the , tell'em what'll happen if they continue% ! Bypass to the end if they want to&012610 NEW_LIMIT = VAL( EDIT$( NEW_LIMIT$, 255%)) IF NEW_LIMIT => 9999999.N@ THEN PRINT "%Year limit "; NEW_LIMIT$; " is out-of-range."; BEL GOTO 12600 END IFE& IF NEW_LIMIT > FNMAX( -CAREER_LIMIT%)5 THEN PRINT "%New limit is out-of-range based on "; &&" "the Career Limit set."; BEL, PRINT " The student's Career Limit is "; &" FNMAX$( -CAREER_LIMIT%); "."6 PRINT " Enter an amount LESS than the Career Limit." GOTO 12600 END IF' LIMCL_UPDATE% = ( LIMCL_UPDATE% OR 4%)T ! Convert the entry made4 ! She's gonna blow if invalid data - 19000 section. ! will return it for reprompt - shame on you. ! Check if greater than the field will allow* ! Give'em another try to get it right -  ! Hey, we treat you right!!e: ! Set OUR update flag - for the year limit/class update  ! for later checks(BYPASS: YEAR_LIMIT = FNMAX( -YEARLIMIT%)# YEAR_EARNED = FNMAX( -YEAREARNED%)_1 TTL_ACCUMED = FNMAX( -PRIORTOTAL%) + YEAR_EARNED  IF ( LIMCL_UPDATE% AND 4%) THEN YEAR_LIMIT = NEW_LIMIT YEAR_EARNED = 0. END IFS7 IF ( AWARD.AMT + TTL_ACCUMED) > FNMAX( -CAREER_LIMIT%)GD THEN PRINT "%Award PLUS Total-to-date EXCEEDS career limits of "; && FNMAX$(-CAREER_LIMIT%); "."; BEL PRINT " Award denied." AWARD.ERR% = -1%* LIMCL_UPDATE% = ( LIMCL_UPDATE% OR 128%) GOTO 12680 END IF 2 IF ( AWARD.AMT + YEAR_EARNED) > YEAR_LIMIT AND &- ( FNMAX( -LST_YRAWARD%) <= VAL( CURYR$))C THEN PRINT "%Award PLUS Year-to-date EXCEEDS yearly limits of "; &N9 UTL_MASK( NUM1$( YEAR_LIMIT * 100.), MONEY$); "."; BEL  PRINT " Award denied." AWARD.ERR% = -1%* LIMCL_UPDATE% = ( LIMCL_UPDATE% OR 128%) END IFL ! Get some default values8 ! Calculate the total accumulated thus far without the ! current award amount entered5 ! If our limit has been updated, switch amounts forX ! some accurate testingI9 ! Give'em the bad news if the current award amount plusE; ! the year earned to date are greater than the year limitR8 ! Remember, if they've updated the year limit, we have6 ! to use it in the test - we also have to use a zero- ! amount for the year earned - and we do - I ! I've got ya covered  ! A ! Some more bad news if the current award amount plus the total 0 ! accumulated is greater than the career limit< ! In either case, set our master error flag and proceed to" ! whatever updating we can make 12680 IF ( LIMCL_UPDATE% AND 4%)" THEN Z% = FNMAX%( -PRIORTOTAL%, &4 NUM1$(FNMAX(-PRIORTOTAL%)+ FNMAX(-YEAREARNED%)))! Z% = FNMAX%( -YEAREARNED%, "0")I/ Z% = FNMAX%( -YEARLIMIT%, NUM1$( YEAR_LIMIT))I END IF&: Z% = FNMAX%( CLASS_STAT%, EDIT$( FNSTD$( CLASS%), 32%)) &% IF ( LIMCL_UPDATE% AND 2% + 4%) C Z% = FNMAX%( -LST_YRAWARD%, CURYR$) IF FNMAX( -LST_YRAWARD%) = 0.&I Z% = FNMAX%(-LST_YRAWARD%, CURYR$) IF VAL(CURYR$) > FNMAX(-LST_YRAWARD%)* GOTO END_OUT IF ( LIMCL_UPDATE% AND 128%)> Z% = FNMAX%( -ACCUMULATIVE%, NUM1$( TTL_ACCUMED + AWARD.AMT))( LIMCL_UPDATE% = ( LIMCL_UPDATE% OR 16%). IF VAL( CURYR$) < FNMAX( -LST_YRAWARD%) AND &? EDIT$(FNMAX$(CLASS_STAT%), 32%) <> EDIT$(FNSTD$(CLASS%), 32%)0E THEN Z% = FNMAX%(-PRIORTOTAL%, NUM1$(FNMAX(-PRIORTOTAL%)+AWARD.AMT))E ELSE Z% = FNMAX%(-YEAREARNED%, NUM1$(FNMAX(-YEAREARNED%)+AWARD.AMT))G END IF ! If we have an update, ! Add the year earned to prior total and  ! store back to MAX_AWARDO ! Zero the year earned amount ! Store the new year limit ; ! Store the STUAID class to MAX_AWARD if we had an updatem ! of some type3 ! Initialize the year field in MAX_AWARD if blanka; ! Enter the current year if the year in MAX_AWARD is lessa/ ! Leave this place if we've had a major upseta9 ! Add to our total accumulated the current award amount $ ! and store the total accumulated5 ! Set LIMCL_UPDATE% OR 16% for use later in programT, ! to tell it we updated the MAX_AWARD file= ! Update the prior total amount from MAX_AWARD if an award - ! was adjusted and it was from a prior year_( ! Update the total earned for the yearEND_OUT: FUNREC% = IFUNREC%_ Z% = FIO_UNLOCK_REC( MAXDTA%)  RETURN% ! Reset to our original fund recordO ! Unlock our friend 0 ! Hey - time to warp back - oh no, wormhole!!!14000 !T &8 ! U P D A T E A P P R O P R I A T E R E C O R D S0 ! 1. Adjust the TRANSMIT record (if necessary)1 ! 2. Log the TRANSMIT adjustment (if necessary) $ ! 3. Enter/Adjust the AWARD record ! 4. Log the AWARD transaction ! 5. Update the STUAID recordO ! 6. Update the FUND record0 FILE_UPDATES: 814010 AWARD.AMT = INT((AWARD.AMT+0.0005) * 100.) / 100.7 DISPERSIBLE = INT((DISPERSIBLE+0.0005) * 100.) / 100.G6 OFFSET.AMT = INT((OFFSET.AMT+0.0005) * 100.) / 100. & IF OFFSET.AMT%1 DEF_AMT = INT((DEF_AMT+0.0005) * 100.) / 100. &T! IF DEF_AMT% AND AWARD_ACPT%G GOTO 14990 &RB IF AWARD.AMT = 0.00 AND OFFSET.AMT = 0.00 AND DISPERSIBLE = 0.00) ! Round the award to two decimal placesN1 ! Do the same for offset amount if applicableT ! Force new fund file lookup) ! Check for specific award restrictions - ! Perform storing, logging, increments, etcR"14015 ! ADJUST AWARD TRANSMITTALS814020 GOTO 14100 IF TRANS.AMT = 0. OR BILLING.TRANSMITS%5 TRANS.AMT = INT(( TRANS.AMT + 0.0005) * 100.) / 100. 14060 ZA$ = "ACT"  ZA$ = "EST" IF ESTIMATE%* Z% = FNAUDIT%( -TRANS.AMT, "TRANSM", ZA$) ! Set the action notee ! Write the audit record!14100 ! ENTER/ADJUST AWARD RECORD(14110 IF DUP.FUND%" THEN Z% = FNPREV%( FUND.ID$, -1%) GOTO 142002 ! If updating old award, then re-find the record ! And continue.14160 Z1% = 1% AND NOT FIO_SET_OPTION( 1%, 0%)1 AWDREC% = FIO_ADD_KEY(AWDKEY%, STD.ID$, AWDDTA%)u CALL FIO_SET_OPTION( 0%, Z1%) GOTO 9000 IF AWDREC% < 0% IF AWDREC% > 2%^24%# THEN Z% = FIO_HEADER( AWDDTA%, 1%)e CALL FIO_UNLOCK_REC( AWDDTA%)o% CALL FIO_EXTEND_FILE( AWDDTA%, 20%) GOTO 14160 END IFB1 ! Set messages off and try to add a new recordE ! Set messages on again ! Finish if I/O error ! Check for file full- ! If full, unlock and extend by 20 records * ! Print message telling user what to do ! Return and try again (14200 Z% = FNAWD%( AWDFUNDID%, FUND.ID$) NEW.DATA = AWARD.AMT + PREV.AMT, NEW.DATA = INT(NEW.DATA * 100. + .5) / 100.( Z% = FNAWD%( -AMOUNT%, NUM1$(NEW.DATA))9 Z% = FNAWD%( DATEAWARD%, TODAY$) IF (OP% AND 16%) = 16% % !Z% = FNAWD%( AWDSSN%, FNSTD$(SSN%))I. Z% = FNAWD%( ESTAWARD%, "N") UNLESS ESTIMATE%* Z% = FNAWD%( ESTAWARD%, "Y") IF ESTIMATE%; Z% = FNAWD%( BEGPERIOD%, PERIOD1$) IF (OP% AND 16%) = 16%F; Z% = FNAWD%( ENDPERIOD%, PERIOD2$) IF (OP% AND 16%) = 16%D& !NEW.DATA = DISPERSIBLE + PREV.DSPAMT- !NEW.DATA = INT(NEW.DATA * 100. + .5) / 100.N/ !Z% = FNAWD%( -DISPERSIBLE%, NUM1$(NEW.DATA)) D NEW.DATA = AWARD.AMT + PREV.AMT, NEW.DATA = INT(NEW.DATA * 100. + .5) / 100.f Z% = FNAWD%( -DISPERSIBLE%, NUM1$(NEW.DATA)) IF EDIT$(FNFUN$(DISBURSEMENT%), 32%) <> "D" &5 AND EDIT$(FNFUN$(DISBURSEMENT%), 32%) <> "L" E# NEW.DATA = PREV.TRNSMT - TRANS.AMTt, NEW.DATA = INT(NEW.DATA * 100. + .5) / 100.1 Z% = FNAWD%( -AMT_TRANSMIT%, NUM1$( NEW.DATA)) &I IF TRANS.AMT <> 0.=? Z% = FNAWD%( -AMT_OFFSET%, NUM1$( OFFSET.AMT + PREV.OFFSET)) &T IF OFFSET.AMT%A( Z% = FNAWD%( ALLOW%, "") IF ALLOW.ADJ% * Z% = FNSLINK%( AWDREC%) UNLESS DUP.FUND% IF DEF_AMT% AND AWARD_ACPT%A! THEN PDA$ = FNAWD$( DATEACCEPT%) Z% = FNAWD%( PRACCPTDT%, PDA$)# Z% = FNAWD%( DATEACCEPT%, TODAY$)=- Z% = FNAWD%( -PRACCPTAMT%, NUM1$(PREV.AMT))- END IFT ! Items to store in AWARD file7 ! Log the student's social security number into AWARD)!14300 ! LOG THE AWARD TRANSACTIONP14310 ZA$ = "ACT"T ZA$ = "EST" IF ESTIMATE%d( Z% = FNAUDIT%( AWARD.AMT, "AWARD", ZA$), ! Set the ACTION to the appropriate status ! Log the transactionA14312 IF NOT AWARD_ACPT% THEN IF AUTO.ACCEPT%( THEN Z% = FNAWD%( DATEACCEPT%, TODAY$) ZA$ = "ACT" ZA$ = "EST" IF ESTIMATE%1 Z% = FNAUDIT%( FNAWD(-AMOUNT%), "ACCEPT", ZA$)2 END IF END IFt)14400 ! LOG THE RE-ACCEPTANCE TRANSACTIONT=14410 !Z% = FNAUDIT%((AWARD.AMT + PREV.AMT), "AWREAC", ZA$) & " ! IF DEF_AMT% AND AWARD_ACPT%, ! Set the ACTION to the appropriate status ! Log the transaction414800 ! INCREMENT/DECREMENT STUAID AND FUND BALANCES!14820 IF DEF_AMT% AND AWARD_ACPT% ! THEN ACPT.AMT = FNSTD( -ACCEPT%)_! NEW.DATA = ACPT.AMT + AWARD.AMTo* Z% = FNSTD%((-ACCEPT%), NUM1$(NEW.DATA))5 ! Update amount accepted in STUAID, subtracting theE4 ! original award amount from the accepted data and- ! then adding back in the new award amount=14840 Z% = FNCHK_DISBURSE%: NEW.DATA = FNSTD( -TOTAL_UNMET%) - AWARD.AMT + OFFSET.AMT- NEW.DATA = INT( NEW.DATA * 100. + .5) / 100.. Z% = FNSTD%( -TOTAL_UNMET%, NUM1$( NEW.DATA))- NEW.DATA = FNSTD( -TOTAL_AWARD%) + AWARD.AMTL. Z% = FNSTD%( -TOTAL_AWARD%, NUM1$( NEW.DATA))5 IF EARN% AND EDIT$(FNFUN$(EARNAPLYNEED%), 32%) = "Y"$ THEN IF NOT DUP.FUND%= THEN NEW.DATA = FNSTD( -AWARD%) + (PREV.TRNSMT - TRANS.AMT)O* Z% = FNSTD%( -AWARD%, NUM1$( NEW.DATA))? NEW.DATA = FNSTD( -UNMETNEED%) - (PREV.TRNSMT - TRANS.AMT) &M + OFFSET.AMT/ NEW.DATA = INT( NEW.DATA * 100. + .5) / 100.%. Z% = FNSTD%( -UNMETNEED%, NUM1$( NEW.DATA)) END IF, ELSE NEW.DATA = FNSTD( -AWARD%) + AWARD.AMT) Z% = FNSTD%( -AWARD%, NUM1$( NEW.DATA))i9 NEW.DATA = FNSTD( -UNMETNEED%) - AWARD.AMT + OFFSET.AMTe. NEW.DATA = INT( NEW.DATA * 100. + .5) / 100.- Z% = FNSTD%( -UNMETNEED%, NUM1$( NEW.DATA))(1 Z% = FNSTD%( OVERAWARD%, "Y") IF NEW.DATA < 0.L1 Z% = FNSTD%( OVERAWARD%, "") IF NEW.DATA => 0.B END IF  IF OFFSET.AMT%D2 THEN NEW.DATA = FNSTD( -TOT_OFFSET%) + OFFSET.AMT. Z% = FNSTD%( -TOT_OFFSET%, NUM1$( NEW.DATA))3 ! Adjust unmet need, total awarded in STUAID file(< ! Don't adjust student unmet need to include offset amount ! Set overaward flag properlyA; ! Adjust total amount awarded against family contributionE ! ( if applicable)T; ! Modify calculation for award amount and unmet need for (8 ! Work-Study funds that are applied to need only after= ! award is earned. Contained within IF, THEN, ELSE, END IF$ 14843 FOR J% = 5% TO 13%) CHKFNDS% = UTL_PARSE(ID$(J%),,TMPID$())T FOR TST% = 1% TO CHKFNDS% TSTID$ = TRM$(TMPID$(TST%)) L% = LEN(TSTID$)  ITERATE IF L% = 0%0 ITERATE IF TSTID$ <> SEG$(SHORT.ID$, 1%, L%)5 ! Check the length of the Fund ID to test against.T9 ! Go on to the next one if it's blank. Then just test(+ ! the leftmost characters for a match. G14845 SELECT J% CASE 5%r- NEW.DATA = FNSTD( -NDSLTOTAL%) + AWARD.AMTi. Z% = FNSTD%( -NDSLTOTAL%, NUM1$( NEW.DATA))R CALL LIB$SET_LOGICAL("CC$OA_NDSL",NUM1$(NEW.DATA),"LNM$JOB",,) CASE 6%E, NEW.DATA = FNSTD( -GSLTOTAL%) + AWARD.AMT- Z% = FNSTD%( -GSLTOTAL%, NUM1$( NEW.DATA))14 PRV.OA = VAL(UTL_TRAN_LOG( "CC$OA_STAFFORD", 0%))\ CALL LIB$SET_LOGICAL("CC$OA_STAFFORD",NUM1$(NEW.DATA+PRV.OA),"LNM$JOB",,) CASE 7%, NEW.DATA = FNSTD( -SLSTOTAL%) + AWARD.AMT- Z% = FNSTD%( -SLSTOTAL%, NUM1$( NEW.DATA)) CASE 8% - NEW.DATA = FNSTD( -ALASTOTAL%) + AWARD.AMT . Z% = FNSTD%( -ALASTOTAL%, NUM1$( NEW.DATA)) CASE 9% - NEW.DATA = FNSTD( -PLUSTOTAL%) + AWARD.AMT . Z% = FNSTD%( -PLUSTOTAL%, NUM1$( NEW.DATA)) CASE 10%, NEW.DATA = FNSTD( -UNSTOTAL%) + AWARD.AMT- Z% = FNSTD%( -UNSTOTAL%, NUM1$( NEW.DATA))S4 PRV.OA = VAL(UTL_TRAN_LOG( "CC$OA_STAFFORD", 0%))\ CALL LIB$SET_LOGICAL("CC$OA_STAFFORD",NUM1$(NEW.DATA+PRV.OA),"LNM$JOB",,) CASE 11%, NEW.DATA = FNSTD( -DSLTOTAL%) + AWARD.AMT- Z% = FNSTD%( -DSLTOTAL%, NUM1$( NEW.DATA))a4 PRV.OA = VAL(UTL_TRAN_L%b~AID_ONLINE.BCK,P &[SCRIPTS.SIS]AID_MAINTAIN_AWARD.BAS;23f OPiOG( "CC$OA_STAFFORD", 0%))] CALL LIB$SET_LOGICAL("CC$OA_STAFFORD",NUM1$(NEW.DATA+PRV.OA),"LNM$JOB",,) A CASE 12%, NEW.DATA = FNSTD( -DUSTOTAL%) + AWARD.AMT- Z% = FNSTD%( -DUSTOTAL%, NUM1$( NEW.DATA))m CASE 13%, NEW.DATA = FNSTD( -DPLTOTAL%) + AWARD.AMT- Z% = FNSTD%( -DPLTOTAL%, NUM1$( NEW.DATA))) END SELECT NEXT TST%I NEXT J%0 ! Get the cumulative totals to store in STUAID0 ! virtually and TRANSCRIPT ultimately to track% ! the totals for award verification=14860 Z% = FNFUNUP%( FUNREC%)R Z% = FNFUNUP%( MFUNREC%)N ACPT.AMT = 0. DEF_AMT = 0.T7 ! Update the actual fund and master fund if necessaryo ! Re-initialize accept amountR 14990 RETURN ! End of storing &UPDATE_ACCEPTED:3 AWARD.AMT = INT((AWARD.AMT+0.0005) * 100.) / 100.c ACPT.AMT = FNSTD( -ACCEPT%) NEW.DATA = ACPT.AMT + AWARD.AMT) Z% = FNSTD%((-ACCEPT%), NUM1$(NEW.DATA))O RETURN15000 !  &3 ! I N I T I A L I Z E & O P E N F I L E So & ! INITIALIZE:15005 ID$(1%) = "SEF," ID$(2%) = "PEF,CPF,CDF," ID$(3%) = "WSW,", ID$(4%) = "IAS,ITS,CTS,CAS,CGS,CDS," ID$(5%) = "PRL"R0 ID$(6%) = "LAL,LEL,LJL,LCL,LGL,LLL,LIL," ID$(7%) = "" ID$(8%) = "" ID$(9%) = "LDL,LHL,LNL"! ID$(10%) = "LBL,LFL,LKL,"s ID$(11%) = ""L ID$(12%) = ""A ID$(13%) = ""0 !> ID$(1) = SEOG fund ID !> ID$(2) = PELL/BEOG fund IDt !> ID$(3) = CWS fund IDo !> ID$(4) = SSIG fund ID !> ID$(5) = NDSL Fund ID !> ID$(6) = GSL Fund IDe !> ID$(7) = SLS Fund ID !> ID$(8) = ALL fund IDI !> ID$(9) = PLUS) !> ID$(10) = UNS Fund ID (UNnsubsidized1 !> ID$(11) = DSL Fund ID (Direct Stafford loan)d> !> ID$(12) = DUS Fund ID (Direct Unsubsidized Stafford loan)- !> ID$(13) = DPL Fund ID (Direct PLUS loan) 15070 FOR I% = 1% TO 13% Z% = INSTR(1%, ID$(I%), "*") GOTO 15090 IF Z% = 0%( ID$(I%) = SEG$(ID$(I%), 1%, (Z% - 1%))) ! Strip off any "*"s that may be there.,- ! This allows us to treat multiple fund IDsE+ ! as being from the same funding program. 15090 NEXT I%EF15100 STDFLD$ = ".STUDENTID,.BUDGET,.RESOURCES,.DOCNEED,.UNMETNEED," &8 + ".AWARD,.ACCEPT,.INDEX,.OFFSET,.PELL,.OVERAWARD," &/ + ".ALOI,.ALSR,.ALN,.ALD,.ALRR,.GSLTOTAL," &t3 +".SLSTOTAL,.PLUSTOTAL,.ALASTOTAL,.NDSLTOTAL," &i6 +".UNSTOTAL,.RGCRLOAD,.TOTAL_UNMET,.TOTAL_AWARD," &. +".DSLTOTAL,.DUSTOTAL,.DPLTOTAL,.FULLNAME,"B FUNFLD$ = ".FUNDID,.FUND,.TERMCODE,.SDESCRIPTION,.PRIMARYFUND," &7 +".FUNDBUDGET,.TRANSMITTED,.UNACCEPTED,.ACCEPTED," &s8 +".AVAILABLE,.AWARDED,.MINIMUM,.MAXIMUM,.TRANSMIT," &: +".PERCENT1,.PERCENT2,.PERCENT3,.PERCENT4,.PERCENT5," &3 +".PERCENT6,.TERMCODE1,.TERMCODE2,.TERMCODE3," &t6 +".TERMCODE4,.TERMCODE5,.TERMCODE6,.BILLINGCODE," &9 +".LOANTRACK,.ALLOWOFFSET,.M_GENERAL_ID,.SPEC_FUND," &  +".EARNAPLYNEED,.TITLEIV," B AWDFLD$ = ".STUDENTID,.FUNDID,.AMOUNT,.DATEAWARD,.TRANSMITTED," &9 +".TRANSFERRED,.OFFSET,.ESTAWARD,.FUNDID,.TERMCODE," &L8 +".DISPERSIBLE,.BEGPERIOD,.ENDPERIOD,.ALLOWADJUST," &3 +".DATEACCEPT,.PRACCPTDT,.PRACCPTAMT,.DECLINED,"t CODFLD$ = ".CODE,.DESCRIPTION,"I LOGFLD$ = ".ACTION,.ESTACTION,.STUDENTID,.FULLNAME,.FUNDID,.FUNDNAME," &6 +".AMOUNT,.DATE,.REVNUMBER,.REVREASON,.USERNAME," &! +".TERMINAL,.TIME,.PROGRAM," &a) +".DISPERSIBLE,.BEGPERIOD,.ENDPERIOD,"eB MAXFLD$ = ".STUDENT_GEN,.PRIORTOTAL,.ACCUMULATIVE,.YEAREARNED," &9 +".YEARLIMIT,.CLASSSTATUS,.CAREERLIMIT,.LSTYEARAWARD," & !> STDFLD$ = STUAID fields to access$ !> FUNFLD$ = FUND fields to access% !> AWDFLD$ = AWARD fields to access ) !> CODFLD$ = FINCODE FIELDS TO ACCESS &N& !> LOGFLD$ = FINLOG fields to access$ !> REGFLD$ = REGX fields to access) !> MAXFLD$ = MAX_AWARD fields to accesse & & ORIGIN$ = "AID$LIBRARY:" TODAY$ = FNTDATE$ USER$ = UTL_GET_JOBINFO( 2%)n TT$ = "WEB") ! Setup the standard error trap routiney !> ORIGIN$ = Aid library ! Get today's date) ! Get username and terminal for logging<) NOMSG% = (FIO_SET_OPTION(1%, 0%) AND 1%) % ER%, STDDTA% = FIO_GET_CHNL(4%+128%)N# GOTO INIT_QUIT IF ER% < 0%C% ER%, STDKEY% = FIO_GET_CHNL(4%+128%)T# GOTO INIT_QUIT IF ER% < 0%M% ER%, STDDSC% = FIO_GET_CHNL(4%+128%)%# GOTO INIT_QUIT IF ER% < 0%U% ER%, TRNDSC% = FIO_GET_CHNL(4%+128%) # GOTO INIT_QUIT IF ER% < 0%% ER%, TRNDTA% = FIO_GET_CHNL(4%+128%)E# GOTO INIT_QUIT IF ER% < 0%,% ER%, TRNKEY% = FIO_GET_CHNL(4%+128%)h# GOTO INIT_QUIT IF ER% < 0%e% ER%, WRKCHN% = FIO_GET_CHNL(4%+128%)d# GOTO INIT_QUIT IF ER% < 0%T% ER%, AWDDTA% = FIO_GET_CHNL(4%+128%)A# GOTO INIT_QUIT IF ER% < 0%F% ER%, AWDKEY% = FIO_GET_CHNL(4%+128%)# GOTO INIT_QUIT IF ER% < 0%;% ER%, LOGDTA% = FIO_GET_CHNL(4%+128%)-# GOTO INIT_QUIT IF ER% < 0%% ER%, FUNDTA% = FIO_GET_CHNL(4%+128%)W# GOTO INIT_QUIT IF ER% < 0%I% ER%, FUNKEY% = FIO_GET_CHNL(4%+128%)# GOTO INIT_QUIT IF ER% < 0%L% ER%, CODDTA% = FIO_GET_CHNL(4%+128%) # GOTO INIT_QUIT IF ER% < 0% % ER%, CODKEY% = FIO_GET_CHNL(4%+128%)a# GOTO INIT_QUIT IF ER% < 0%a% ER%, MAXDTA% = FIO_GET_CHNL(4%+128%)s# GOTO INIT_QUIT IF ER% < 0%o% ER%, MAXKEY% = FIO_GET_CHNL(4%+128%)E# GOTO INIT_QUIT IF ER% < 0%A# ! C H A N N E L S F O R I / O&0 ! STUAID.DTA CHANNEL 1%, STUAID.KEY CHANNEL 2%4 ! W O R K F I L E C H A N N E L 10%  ! AWARD.DTA CHANNEL 11%R/ ! FINLOG.DTA CHANNEL 14%, (NOT A KEY FILE) 0. ! FUND.DTA CHANNEL 17%, FUND.KEY CHANNEL 18%4 ! FINCODE.DTA CHANNEL 19%, FINCODE.KEY CHANNEL 20%8 ! MAX_AWARD.DTA CHANNEL 21%, MAX_AWARD.KEY CHANNEL 22%15110 GOTO FILE_ERR &lX IF FIO_OPEN_FILE( STDDTA%, "AIDFILES:" + AWD.YR$ + "STUAID", ".DTA", OPNMODE%) < 0% GOTO FILE_ERR &X IF FIO_OPEN_FILE( STDKEY%, "AIDFILES:" + AWD.YR$ + "STUAID", ".KEY", OPNMODE%) < 0% GOTO FILE_ERR &X IF FIO_OPEN_FILE( TRNDTA%, "AIDFILES:" + AWD.YR$ + "TRANSMT",".DTA", OPNMODE%) < 0% GOTO FILE_ERR &X IF FIO_OPEN_FILE( TRNKEY%, "AIDFILES:" + AWD.YR$ + "TRANSMT",".KEY", OPNMODE%) < 0% GOTO FILE_ERR &> IF FIO_OPEN_FILE( FUNDTA%, "FUND", ".DTA", OPNMODE%) < 0% GOTO FILE_ERR &> IF FIO_OPEN_FILE( FUNKEY%, "FUND", ".KEY", OPNMODE%) < 0% GOTO FILE_ERR &? IF FIO_OPEN_FILE( AWDDTA%, "AWARD", ".DTA", OPNMODE%) < 0%u GOTO FILE_ERR &> IF FIO_OPEN_FILE(AWDKEY%, "AWARD", ".KEY", OPNMODE%) < 0% GOTO FILE_ERR &@ IF FIO_OPEN_FILE( LOGDTA%, "FINLOG", ".DTA", OPNMODE%) < 0% GOTO FILE_ERR &A IF FIO_OPEN_FILE( CODDTA%, "FINCODE", ".DTA", OPNMODE%) < 0%$ GOTO FILE_ERR &A IF FIO_OPEN_FILE( CODKEY%, "FINCODE", ".KEY", OPNMODE%) < 0%5' ! Open files on appropriate channelsS' ! Channels/files open listed at 1045F15120 FLDS% = FIO_OPEN_DSC(WRKCHN%, "AIDFILES:" + AWD.YR$ + "STUAID") $ GOTO FILE_ERR IF FLDS% < 0%  DIM FLDINFO FLDINF(FLDS%)" STDFLD$ = FNBLD$(WRKCHN%,STDFLD$)2 STDINF(Z%) = FLDINF(Z%)::STR FOR Z% = 1% TO FLDS% STDHL1$ = FNHED$(WRKCHN%)8 STUDENTID% = FIO_NAME_TO_FLD(WRKCHN%, ".STUDENTID", "")6 FULLNAME% = FIO_NAME_TO_FLD(WRKCHN%, ".FULLNAME", "")3 BUDGET% = FIO_NAME_TO_FLD(WRKCHN%, ".BUDGET", "")A8 RESOURCES% = FIO_NAME_TO_FLD(WRKCHN%, ".RESOURCES", "")4 DOCNEED% = FIO_NAME_TO_FLD(WRKCHN%, ".DOCNEED", "")8 UNMETNEED% = FIO_NAME_TO_FLD(WRKCHN%, ".UNMETNEED", "")1 AWARD% = FIO_NAME_TO_FLD(WRKCHN%, ".AWARD", "")S3 ACCEPT% = FIO_NAME_TO_FLD(WRKCHN%, ".ACCEPT", "")b6 TOT_OFFSET% = FIO_NAME_TO_FLD(WRKCHN%, ".OFFSET", "")2 SCH_PELL% = FIO_NAME_TO_FLD(WRKCHN%, ".PELL", "")8 OVERAWARD% = FIO_NAME_TO_FLD(WRKCHN%, ".OVERAWARD", "")/ ALOI% = FIO_NAME_TO_FLD(WRKCHN%, ".ALOI", "")/ ALSR% = FIO_NAME_TO_FLD(WRKCHN%, ".ALSR", "")S- ALN% = FIO_NAME_TO_FLD(WRKCHN%, ".ALN", "")t- ALD% = FIO_NAME_TO_FLD(WRKCHN%, ".ALD", "")o/ ALRR% = FIO_NAME_TO_FLD(WRKCHN%, ".ALRR", "") 4 SPECIAL% = FIO_NAME_TO_FLD(WRKCHN%, ".SPECIAL", "")6 GSLTOTAL% = FIO_NAME_TO_FLD(WRKCHN%, ".GSLTOTAL", "")8 NDSLTOTAL% = FIO_NAME_TO_FLD(WRKCHN%, ".NDSLTOTAL", "")6 SLSTOTAL% = FIO_NAME_TO_FLD(WRKCHN%, ".SLSTOTAL", "")8 ALASTOTAL% = FIO_NAME_TO_FLD(WRKCHN%, ".ALASTOTAL", "")8 PLUSTOTAL% = FIO_NAME_TO_FLD(WRKCHN%, ".PLUSTOTAL", "")6 UNSTOTAL% = FIO_NAME_TO_FLD(WRKCHN%, ".UNSTOTAL", "")6 DSLTOTAL% = FIO_NAME_TO_FLD(WRKCHN%, ".DSLTOTAL", "")6 DUSTOTAL% = FIO_NAME_TO_FLD(WRKCHN%, ".DUSTOTAL", "")6 DPLTOTAL% = FIO_NAME_TO_FLD(WRKCHN%, ".DPLTOTAL", ""). !SSN% = FIO_NAME_TO_FLD(WRKCHN%, ".SSN", "")1 INDEX% = FIO_NAME_TO_FLD(WRKCHN%, ".INDEX", "") < TOTAL_UNMET% = FIO_NAME_TO_FLD(WRKCHN%, ".TOTAL_UNMET", "")< TOTAL_AWARD% = FIO_NAME_TO_FLD(WRKCHN%, ".TOTAL_AWARD", "") CALL FIO_CLOSE_FILE(WRKCHN%)i ! Get the STUAID file stuffl% !P> STDHL1$ = Heading for field one-,15130 FLDS% = FIO_OPEN_DSC(WRKCHN%, "FUND") $ GOTO FILE_ERR IF FLDS% < 0%  DIM FLDINFO FLDINF(FLDS%)" FUNFLD$ = FNBLD$(WRKCHN%,FUNFLD$)2 FUNINF(Z%) = FLDINF(Z%)::STR FOR Z% = 1% TO FLDS% FUNHL1$ = FNHED$(WRKCHN%)2 FUNDID% = FIO_NAME_TO_FLD(WRKCHN%, ".FUNDID", "")/ FUND% = FIO_NAME_TO_FLD(WRKCHN%, ".FUND", "")R> SDESCRIPTION% = FIO_NAME_TO_FLD(WRKCHN%, ".SDESCRIPTION", "")5 FUNTERM% = FIO_NAME_TO_FLD(WRKCHN%, ".TERMCODE", "") 8 LOANTRACK% = FIO_NAME_TO_FLD(WRKCHN%, ".LOANTRACK", "")< PRIMARYFUND% = FIO_NAME_TO_FLD(WRKCHN%, ".PRIMARYFUND", ""): FUNDBUDGET% = FIO_NAME_TO_FLD(WRKCHN%, ".FUNDBUDGET", ""): UNACCEPTED% = FIO_NAME_TO_FLD(WRKCHN%, ".UNACCEPTED", "")6 ACCEPTED% = FIO_NAME_TO_FLD(WRKCHN%, ".ACCEPTED", "")8 AVAILABLE% = FIO_NAME_TO_FLD(WRKCHN%, ".AVAILABLE", "")4 AWARDED% = FIO_NAME_TO_FLD(WRKCHN%, ".AWARDED", "")< TRANSMITTED% = FIO_NAME_TO_FLD(WRKCHN%, ".TRANSMITTED", "")4 MINIMUM% = FIO_NAME_TO_FLD(WRKCHN%, ".MINIMUM", "")4 MAXIMUM% = FIO_NAME_TO_FLD(WRKCHN%, ".MAXIMUM", "")> DISBURSEMENT% = FIO_NAME_TO_FLD(WRKCHN%, ".DISBURSEMENT", ""): RESTRICTED% = FIO_NAME_TO_FLD(WRKCHN%, ".RESTRICTED", "")< ALLOWOFFSET% = FIO_NAME_TO_FLD(WRKCHN%, ".ALLOWOFFSET", "")8 SPEC_FUND% = FIO_NAME_TO_FLD(WRKCHN%, ".SPEC_FUND", "")> M_GENERAL_ID% = FIO_NAME_TO_FLD(WRKCHN%, ".M_GENERAL_ID", "")> EARNAPLYNEED% = FIO_NAME_TO_FLD(WRKCHN%, ".EARNAPLYNEED", "")4 TITLEIV% = FIO_NAME_TO_FLD(WRKCHN%, ".TITLEIV", "")? Z% = FIO_DSC_CHAR(WRKCHN%, ".FUNDID", , FUNDID.LN%, , , , , )p; Z% = FIO_DSC_CHAR(WRKCHN%, ".FUND", , FUND.LN%, , , , , )dD Z% = FIO_DSC_CHAR(WRKCHN%, ".TERMCODE1", , TERMCODE.LN%, , , , , )6 Z% = FIO_DSC_CHAR(WRKCHN%, ".SPEC_FUND", , , , , , & SPEC_FUND_PFX$, ) FOR I% = 1% TO 6%F PERCENT%( I%) = FIO_NAME_TO_FLD( WRKCHN%, ".PERCENT"+NUM1$( I%), "")H TERMCODE%( I%) = FIO_NAME_TO_FLD( WRKCHN%, ".TERMCODE"+NUM1$( I%), "") NEXT I% CALL FIO_CLOSE_FILE(WRKCHN%)0 ! Get the FUND file stuff%% !P> FUNHL1$ = Heading for field oneF/ ! FUNDID.LN% = Length of fund key for testingS) ! FUND.LN% = Length of fund for testingB ! TERMCODE.LN% = Length of termcode (only - no year) for testing-15140 FLDS% = FIO_OPEN_DSC(WRKCHN%, "AWARD") r$ GOTO FILE_ERR IF FLDS% < 0%  DIM FLDINFO FLDINF(FLDS%)" AWDFLD$ = FNBLD$(WRKCHN%,AWDFLD$)2 AWDINF(Z%) = FLDINF(Z%)::STR FOR Z% = 1% TO FLDS%$ !> FUND$() = Fund ID's in linkages; AWDSTUDENTID% = FIO_NAME_TO_FLD(WRKCHN%, ".STUDENTID", "")T5 AWDFUNDID% = FIO_NAME_TO_FLD(WRKCHN%, ".FUNDID", "")e3 AMOUNT% = FIO_NAME_TO_FLD(WRKCHN%, ".AMOUNT", "") 8 DATEAWARD% = FIO_NAME_TO_FLD(WRKCHN%, ".DATEAWARD", ""): DATEACCEPT% = FIO_NAME_TO_FLD(WRKCHN%, ".DATEACCEPT", "")= AMT_TRANSMIT% = FIO_NAME_TO_FLD(WRKCHN%, ".TRANSMITTED", "").< TRANSFERRED% = FIO_NAME_TO_FLD(WRKCHN%, ".TRANSFERRED", "")6 AMT_OFFSET% = FIO_NAME_TO_FLD(WRKCHN%, ".OFFSET", "")6 ESTAWARD% = FIO_NAME_TO_FLD(WRKCHN%, ".ESTAWARD", "")1 AWDFUND% = FIO_NAME_TO_FLD(WRKCHN%, ".FUND", "")r5 AWDTERM% = FIO_NAME_TO_FLD(WRKCHN%, ".TERMCODE", "")n1 !AWDSSN% = FIO_NAME_TO_FLD(WRKCHN%, ".SSN", "")e8 BEGPERIOD% = FIO_NAME_TO_FLD(WRKCHN%, ".BEGPERIOD", "")8 ENDPERIOD% = FIO_NAME_TO_FLD(WRKCHN%, ".ENDPERIOD", "")< DISPERSIBLE% = FIO_NAME_TO_FLD(WRKCHN%, ".DISPERSIBLE", "")7 ALLOW% = FIO_NAME_TO_FLD(WRKCHN%, ".ALLOWADJUST", "")8 PRACCPTDT% = FIO_NAME_TO_FLD(WRKCHN%, ".PRACCPTDT", "")5 OAFLAG% = FIO_NAME_TO_FLD(WRKCHN%, ".DECLINED", "")G: PRACCPTAMT% = FIO_NAME_TO_FLD(WRKCHN%, ".PRACCPTAMT", "") CALL FIO_CLOSE_FILE(WRKCHN%)i ! Get the AWARD file stuff.15150 FLDS% = FIO_OPEN_DSC(WRKCHN%, "FINLOG") $ GOTO FILE_ERR IF FLDS% < 0%  DIM FLDINFO FLDINF(FLDS%)" LOGFLD$ = FNBLD$(WRKCHN%,LOGFLD$)2 LOGINF(Z%) = FLDINF(Z%)::STR FOR Z% = 1% TO FLDS%3 ACTION% = FIO_NAME_TO_FLD(WRKCHN%, ".ACTION", "")M8 ESTACTION% = FIO_NAME_TO_FLD(WRKCHN%, ".ESTACTION", ""); LOGSTUDENTID% = FIO_NAME_TO_FLD(WRKCHN%, ".STUDENTID", "")M9 LOGFULLNAME% = FIO_NAME_TO_FLD(WRKCHN%, ".FULLNAME", "")25 LOGFUNDID% = FIO_NAME_TO_FLD(WRKCHN%, ".FUNDID", "")m6 FUNDNAME% = FIO_NAME_TO_FLD(WRKCHN%, ".FUNDNAME", "")5 LOGAMOUNT% = FIO_NAME_TO_FLD(WRKCHN%, ".AMOUNT", "")t1 LOGDATE% = FIO_NAME_TO_FLD(WRKCHN%, ".DATE", "")!8 REVNUMBER% = FIO_NAME_TO_FLD(WRKCHN%, ".REVNUMBER", "")8 REVREASON% = FIO_NAME_TO_FLD(WRKCHN%, ".REVREASON", "")6 USERNAME% = FIO_NAME_TO_FLD(WRKCHN%, ".USERNAME", "")9 LOGTERMINAL% = FIO_NAME_TO_FLD(WRKCHN%, ".TERMINAL", "")F1 LOGTIME% = FIO_NAME_TO_FLD(WRKCHN%, ".TIME", "")%4 PROGRAM% = FIO_NAME_TO_FLD(WRKCHN%, ".PROGRAM", "")1 !LOGSSN% = FIO_NAME_TO_FLD(WRKCHN%, ".SSN", ""); LOGBEGPERIOD% = FIO_NAME_TO_FLD(WRKCHN%, ".BEGPERIOD", "")F; LOGENDPERIOD% = FIO_NAME_TO_FLD(WRKCHN%, ".ENDPERIOD", "")E? LOGDISPERSIBLE% = FIO_NAME_TO_FLD(WRKCHN%, ".DISPERSIBLE", "")  Z% = FIO_CLOSE_FILE(WRKCHN%)> ! Get the FINLOG file stuff-/15170 FLDS% = FIO_OPEN_DSC(WRKCHN%, "FINCODE") o$ GOTO FILE_ERR IF FLDS% < 0%  DIM FLDINFO FLDINF(FLDS%)" CODFLD$ = FNBLD$(WRKCHN%,CODFLD$)2 CODINF(Z%) = FLDINF(Z%)::STR FOR Z% = 1% TO FLDS%/ CODE% = FIO_NAME_TO_FLD(WRKCHN%, ".CODE", "")O< DESCRIPTION% = FIO_NAME_TO_FLD(WRKCHN%, ".DESCRIPTION", "") CALL FIO_CLOSE_FILE(WRKCHN%)o ! Get the FINCODE file stuff15180 !d oF15190 Z% = UTL_FILE_SCAN("MAX_AWARD", ".DTA", MAXSPEC$, Z0%, Z1%, Z2%), GOTO 15200 IF UTL_FIND_FILE(MAXSPEC$) = -5% MAX_PROCESS% = -1%R RETURN &AC IF FIO_OPEN_FILE( MAXDTA%, "MAX_AWARD", ".DTA", OPNMODE%) < 0% RETURN &TC IF FIO_OPEN_FILE( MAXKEY%, "MAX_AWARD", ".KEY", OPNMODE%) < 0%@ NUM_RECS% = FIO_OPEN_FILE(MAXDTA%,"MAX_AWARD",".DTA", OPNMODE%) IF NUM_RECS% <= 0% THEN MAX_PROCESS% = 0%i) !PRINT "MAX_AWARD file has no records."22 !PRINT "MAX_AWARD awarding process not enabled." RETURN END IF+ ! expand the file spec and try to find it 8 ! Bypass section if MAX_AWARD data file does not exist115195 FLDS% = FIO_OPEN_DSC(WRKCHN%, "MAX_AWARD") E RETURN IF FLDS% < 0%  DIM FLDINFO FLDINF(FLDS%)" MAXFLD$ = FNBLD$(WRKCHN%,MAXFLD$)2 MAXINF(Z%) = FLDINF(Z%)::STR FOR Z% = 1% TO FLDS%< STD_GENERAL% = FIO_NAME_TO_FLD(WRKCHN%, ".STUDENT_GEN", ""): PRIORTOTAL% = FIO_NAME_TO_FLD(WRKCHN%, ".PRIORTOTAL", "")> ACCUMULATIVE% = FIO_NAME_TO_FLD(WRKCHN%, ".ACCUMULATIVE", ""): YEAREARNED% = FIO_NAME_TO_FLD(WRKCHN%, ".YEAREARNED", "")8 YEARLIMIT% = FIO_NAME_TO_FLD(WRKCHN%, ".YEARLIMIT", ""); CLASS_STAT% = FIO_NAME_TO_FLD(WRKCHN%, ".CLASSSTATUS", "")n= CAREER_LIMIT% = FIO_NAME_TO_FLD(WRKCHN%, ".CAREERLIMIT", "") = LST_YRAWARD% = FIO_NAME_TO_FLD(WRKCHN%, ".LSTYEARAWARD", "") A Z% = FIO_DSC_CHAR(WRKCHN%, ".STUDENT_GEN", , , , , M_MSK$, , )! ! Get the MAX_AWARD file stuff515200 CALL FIO_SET_OPTION(0%, 1%) UNLESS NOMSG%  ER% = 0% RETURN n FILE_ERR:m ER% = -FIO_ERR ER$ = FIO_ERTI- ! Get error value and message INIT_QUIT:%5 CALL FIO_SET_OPTION(0%, 1%) UNLESS NOMSG%N INIT_ERR: RETURNR16999 !l & ! 1 7 0 0 0 - 1 8 9 9 9 & ! U S E R F U N C T I O N S &17000 !_ &17500 &% ! 17500 - 17999 &! ! M I S C E L L E N E O U S 5 ! P R O G R A M U T I L I T Y F U N C T I O N S%17510 &G ! CHECK DISBURSEMENT CODE &17512 DEF FNCHK_DISBURSE%s+ DISBURSE%, EARN%, TRNSMT%, ALLOW.ADJ% = 0%  FNCHK_DISBURSE% = 0%5 ! Check disbursement codes' ! Z% = -1% to suppress error messagesp2 ! Initialize various flags for fund disbursement ! Result = -1% if valid code ! 0% if invalid/earn codel.17514 SELECT EDIT$(FNFUN$(DISBURSEMENT%), 32%) CASE "T"  TRNSMT% = -1% FNCHK_DISBURSE% = -1% CASE "L"u# LOAN% = -1%  FNCHK_DISBURSE% = -1% CASE "D" DISBURSE% = -1% FNCHK_DISBURSE% = -1% CASE "E" EARN% = -1%7 ALLOW.ADJ% = -1% IF EDIT$(FNAWD$(ALLOW%), 32%) = "Y"F CASE ELSEE; PRINT "%Invalid transmittal code for Fund ";FUND.ID$;"."T9 PRINT " Adjustment NOT Transmitted or Disbursed."; BEL& END SELECT - ! Get the transmittable code from FUND filer ! Set the appropriate flag ! Check for valid code 17529 FNENDu ! Function end17675 !  &$ ! G E T T O D A Y ' S D A T E &17676 DEF FNTDATE$# ! Get the date in MMDDYYYY formatW17677 FNTDATE$ = "********"3$ L_Z1 = SYS$NUMTIM(DATVAL() BY REF,) GOTO 17679 IF L_Z1 <> 1%+ Z$ = RIGHT(NUM1$(100%+DATVAL(1%)), 2%) + &d' RIGHT(NUM1$(100%+DATVAL(2%)), 2%) + &t NUM1$(DATVAL(0%))a FNTDATE$ = Z$ ! Extract the date 17679 FNENDn &17680 !  &$ ! G E T C U R R E N T T I M E &17681 DEF FNTTIME$# ! Get the time in military format 17682 CALL LIB$DATE_TIME( Z$)T FNTTIME$ = SEG$(Z$, 13%, 17%)" ! Call the RTL date-time routine/ ! Parse out the time and set the return value7 17689 FNENDF ! End of functioni17700 !n &( ! SCAN FUNDS FOR EXISTENCE OF FUND "X"17705 DEF FNPREV%(Z$,ZFLG%)E2 !> FNPREV% = Scan fund for existence of fund "X"17710 FOR Z% = 1% TO N.LINK% GOTO 17715 UNLESS ZFLG% ITERATE UNLESS Z$ = FUND$(Z%)N FNPREV% = -1% AWDREC% = LINK%(Z%) GOTO 17729%/ ! Check the flag to see if we check short.id$N817715 ITERATE UNLESS Z$ = SEG$(FUND$(Z%), 1%, LEN(Z$)) FNPREV% = -1% GOTO 17729S ! Scan funds 17720 NEXT Z%P FNPREV% = 0%2 ! Fall out here if no matchO ! Set the default return value 17729 FNEND_ &17960 &C ! GET THE DEFAULT TERM CODE &17962 DEF FNGET_DTRM$( ZPRMPT$)S Z10$ = "" ! Define the function; ! ZPRMPT$ = prompt to use5;17964 Z9$ = EDIT$( UTL_TRAN_LOG( "AID$DEF_TERM", 0%), 255%)2 ZCYR$ = SEG$(Z9$, 1%, 2%)( Z10$ = " <" + Z9$ + ">" UNLESS Z9$ = ""+ Z9$ = FNRESPOND$( VT100%, ZPRMPT$ + Z10$ )N GOTO 17969 IF RESPONSE% = 1%C Z9$ = EDIT$(Z9$, 255%) 0 GOTO 17964 UNLESS FNCHK_DTRM%( Z9$, ZCYR$, -1%)" ! Translate the termcode logical ! Set up the prompto5 ! If default input is null then prompt for the termy& ! Get the default termcode and check17969 FNGET_DTRM$ = Z9$k FNEND ! Set the return value ! Function end17970 &a ! CHECK THE DEFAULT TERM CODE &*17972 DEF FNCHK_DTRM%( ZTRM$, ZYR$, ZDSP%) FNCHK_DTRM% = 0% ! Define the functionP ! ZTRM$ = input to check ! ZDSP% = -1% If FNSCRERR  ! 0% If PRINTF ! ZYR$ = Current award year ! Set the return value to zero#17974 GOTO 17976 IF LEN(ZTRM$) = 4%AA Z$ = "%Invalid termcode format - " + ZTRM$ + ". Enter as YYTT."L !Z$ = FNSCRERR$( Z$) IF ZDSP% S PRINT Z$; BEL UNLESS ZDSP% GOTO 17979) ! Look at the length"17976 Z1YR$ = SEG$( ZTRM$, 1%, 2%) GOTO 17978 IF Z1YR$ = ZYR$"@ Z$ = "%Files in use are for 19"+ZYR$+"-"+NUM1$(VAL%(ZYR$)+1%) &3 + " award year - " + ZTRM$ + " is invalid term.") !Z$ = FNSCRERR$( Z$) IF ZDSP% PRINT Z$; BEL UNLESS ZDSP% GOTO 17979 / ! Check for year mismatch in entered termcoder17978 FNCHK_DTRM% = -1% ! Set the return value 17979 FNEND  ! Function end18000 &a ! 18000 - 18499 &0 ! F I L E U P D A T I N G F U N C T I O N S18010 !t & ! UPDATE THE TRANSMIT RECORD /18012 DEF FNTRNUP%( ZID$, ZAMT, ZEST%, ZESTO% )h FNTRNUP% = -1% ! Define the function  ! ZID$ = Student ID ! ZAMT = Transmittal amount ! ! ZEST% = Estimated award flaga- ! ZESTO% = Adjust estimated award flag only ! ! Result = -1% if all goes wellD' ! 0% if error occurs during updatew18015 EST$ = "N" EST$ = " " IF ZEST% GOTO 18022 IF TRNCHK$ = ZID$00 TRNREC% = FIO_FIND_KEY( TRNKEY%, ZID$, TRNDTA%) I,F TRNREC% <= 0%5C THEN PRINT "%Student ID "; STD.IDM$;" not found in TRANSMIT."; BELN FNTRNUP% = 0%o GOTO 18039 ELSE TRNCHK$ = ZID$4 Z$ = FIO_GET_FLD_L( TRNDTA%, TRNREC%, -1%, 1%, 1%). ! Make sure we also have the TRANSMIT record) ! Check to see if we have a new student'' ! If so, then get the transmit record,18017 GOTO 18020 UNLESS FNTRN(PSTUBAL%) > 0. Z% = FNTRN%(PSTUBAL%, "") FOR I% = 1% TO 20%&2 ITERATE IF EDIT$(FNTRN$(ESTFLD%(I%)), 255%) = "" Z% = FNTRN%(FUNFLD%(I%), "") Z% = FNTRN%(ESTFLD%(I%), "") Z% = FNTRN%(AMTFLD%(I%), "")  Z% = FNTRN%(DATFLD%(I%), "") NEXT I%7 ! If posted, clear record of all non-estimated awardsg18020 CODES$ = "" ) TRANS.AMOUNT(I%) = 0. FOR I% = 1% TO 20%h FOR I% = 1% TO 20%m= CODES$ = CODES$ + FNTRN$(FUNFLD%(I%)) + FNTRN$(ESTFLD%(I%)) ( TRANS.AMOUNT(I%) = FNTRN(-AMTFLD%(I%)) NEXT I%/ ! Build big string of TRCODE + Estimated code%6 ! and build array of stored amounts. This saves us > ! having to go through the same loop as many as three times = ! for the same transaction. It also saves processing time. - ! CODES$ = the big string described above. e ! It is 120 characters long. 5 ! FOUND.ACT% = truth flag for an actual (or active) $ ! transmittal code being found. : ! TRANS.AMOUNT = array used to hold transmittal amounts % ! for each set of fields, 1 thru 20 : ! Just a reminder - regular transmittals are negative. ' ! Cancellations are positive amounts.S18022 L1% = 0% L2% = 0%E FOUND% = 0%+ TFUND$ = EDIT$(FNFUN$(BILLINGCODE%), 255%)l IF TFUND$ = "" OR TFUND$ = "0" 5 THEN PRINT "%Billing Code not found for Fund ID "; &  FNFUN$(FUNDID%); "."; BEL% FNTRNUP% = 0% GOTO 180391 ! Set transmittal ID (must be the Billing Code)A%18025 GOTO NOT_ZESTO IF NOT ZESTO% + Z% = INSTR(1%, CODES$, "8" + TFUND$ + " ")T EST.NOT.FOUND% = -1% IF Z% = 0% GOTO NO_ROOM IF Z% = 0% L1% = INT((Z% + 6%)/6%)6 GOTO JUST_CHANGE_EST_CODE IF TRANS.AMOUNT(L1%) = ZAMT+ Z% = INSTR(1%, CODES$, "8" + TFUND$ + "N")E FOUND% = -1% IF Z% <> 0%), Z% = INSTR(1%, CODES$, " ") IF Z% = 0% GOTO NO_ROOM IF Z% = 0%a L2% = INT((Z% + 6%)/6%) GOTO UPDATE_TRANSMITt) ! For changing Estimated to Actual only,1 ! Search CODES$ for the TRCODE and estimated. 9 ! (If it isn't found, the problem is too big to discuss . ! right here.) When found, compare amounts.5 ! If amounts match, just change the estimated flag.i, ! When amounts do not match, next look for/ ! TRCODE + Actual. If found, subtract amount a, ! from estimated amount and add to actual.= ! If TRCODE + Actual not found, then look for a free space. 9 ! If found, subtract from estimated and make an actual t8 ! transmittal in free space. If no free space found,  ! then stop trying.t18027 JUST_CHANGE_EST_CODE: # Z% = FNTRN%(-DATFLD%(L1%), TODAY$)X Z% = FNTRN%(ESTFLD%(L1%), EST$)2 CODES$ = LEFT(CODES$,((L1% * 6%) - 1%)) + "N" + &" RIGHT(CODES$,((L1% * 6%) + 1%)) GOTO 18039%. ! This is to change the estimated code only 0 ! when the transmittal is found as estimated, / ! and the transmit amount is the same as the  ! amount being activated. 18030 NOT_ZESTO:, Z% = INSTR(1%, CODES$, "8" + TFUND$ + EST$) FOUND% = -1% IF Z% > 0%, Z% = INSTR(1%, CODES$, " ") IF Z% = 0% GOTO NO_ROOM IF Z% = 0%M L1% = INT((Z% + 6%)/6%)= RAMT = INT((TRANS.AMOUNT( L1%) + ZAMT + .005) * 100.) / 100.  UPDATE_TRANSMIT:X? RAMT = INT((TRANS.AMOUNT( L1%) - ZAMT + .005) * 100.) / 100. &$ IF ZESTO%3( Z% = FNTRN%(-AMTFLD%(L1%), NUM1$(RAMT)) TRANS.AMOUNT( L1%) = RAMT" Z% = FNTRN%(DATFLD%(L1%), TODAY$)4 Z% = FNTRN%(FUNFLD%(L1%), "8"+TFUND$) IF NOT FOUND% IF NOT FOUND% AND NOT ZESTO%A' THEN Z% = FNTRN%(ESTFLD%(L1%), EST$) < CODES$ = LEFT(CODES$,((L1% * 6%) - 6%)) + "8" + TFUND$ + &* EST$ + RIGHT(CODES$,((L1% * 6%) + 1%))  END IFc IF ZESTO%B THEN RAMT = INT((TRANS.AMOUNT( L2%) + ZAMT + .005) * 100.) / 100.) Z% = FNTRN%(-AMTFLD%(L2%), NUM1$(RAMT))h TRANS.AMOUNT( L2%) = RAMT # Z% = FNTRN%(DATFLD%(L2%), TODAY$)a IF NOT FOUND% , THEN Z% = FNTRN%(FUNFLD%(L2%), "8"+TFUND$)$ Z% = FNTRN%(ESTFLD%(L2%), EST$) 4 CODES$ = LEFT(CODES$,((L2% * 6%) - 6%)) + "8" + &3 TFUND$ + EST$ + RIGHT(CODES$,((L2% * 6%) + 1%))e END IF END IFe GOTO 18039t3 ! The code above will be used for an activation, - ! when the situation is more complicated. 7 ! The estimated transmittal was found, but the amount%9 ! is larger than the current activation. Thus, we must 6 ! decrease the amount for the estimated transmittal,4 ! and either increase the amount for an actual, or> ! if no actual is found, generate a new, active transmittal.4 ! The same code is used for a regular transmittal.18035 NO_ROOM:I PRINT "%No space in TRANSMIT file record. Offset NOT TRANSMITTED.";BEL &o IF NOT ZESTO%AB PRINT "%Estimated transmittal not found in TRANSMIT file."; BEL &" IF ZESTO% AND EST.NOT.FOUND%D PRINT "%Award NOT ACTIVATED. Contact your computer center."; BEL &" IF ZESTO% AND EST.NOT.FOUND%G PRINT "%No space in TRANSMIT file record. Award NOT ACTIVATED."; BEL &F& IF ZESTO% AND NOT EST.NOT.FOUND% FNTRNUP% = 0%4 ! If we reach this spot, an error condition exists8 ! So tell'em and quit. Print different error messages ! Depending on conditions. 18039 FNENDm ! End of functiont18100 !  ! A U D I T F U N C T I O N $ ! Create an audit record in FINLOG&18110 DEF FNAUDIT%(AMT, ACT$, ESTACT$) ! AMT = Amount to logm ! ACT$ = Action code 18120 GOTO 18159 IF AMT = 0.00( Z1% = 1% AND NOT FIO_SET_OPTION(1%, 0%)# LOGREC% = FIO_ADD_REC(LOGDTA%, "")T CALL FIO_SET_OPTION(0%, Z1%)4 FNEXIT IF LOGREC% < 0%" IF LOGREC% > 2%^24%" THEN Z% = FIO_HEADER(LOGDTA%, 1%) CALL FIO_UNLOCK_REC(LOGDTA%)$ CALL FIO_EXTEND_FILE(LOGDTA%, 20%)8 PRINT FIO_FILE(LOGDTA%);" extended from ";Z%;" to "; &+ FIO_HEADER(LOGDTA%, 1%);" records."; BEL 7 PRINT "File must be EXTENDed when process completes."o GOTO 18120 ! Set messages offS ! Try to add a new record ! Set messages on again ! Finish if I/O error ! Check for file full- ! If full, unlock and extend by 20 recordsE* ! Print message telling user what to do ! Return and try againA 18140 Z% = FNLOG%(ACTION%, ACT$)! Z% = FNLOG%(ESTACTION%, ESTACT$)s$ Z% = FNLOG%(LOGSTUDENTID%, STD.ID$)- Z% = FNLOG%(LOGFULLNAME%, FNSTD$(FULLNAME%))O) Z% = FNLOG%(LOGFUNDID%, FNFUN$(FUNDID%))u. Z% = FNLOG%(FUNDNAME%, FNFUN$(SDESCRIPTION%))" AMT = INT(AMT * 100. + .5) / 100.% Z% = FNLOG%(-LOGAMOUNT%, NUM1$(AMT))F Z% = FNLOG%(LOGDATE%, TODAY$)' Z% = FNLOG%(REVNUMBER%, NUM1$(REV.NO)) " Z% = FNLOG%(REVREASON%, RES.REV$) Z% = FNLOG%(USERNAME%, USER$) Z% = FNLOG%(LOGTERMINAL%, TT$)% Z% = FNLOG%(LOGTIME%, FNTTIME$)% Z% = FNLOG%(LOGBEGPERIOD%, PERIOD1$)I% Z% = FNLOG%(LOGENDPERIOD%, PERIOD2$)E2 Z% = FNLOG%(-LOGDISPERSIBLE%, NUM1$(DISPERSIBLE)), Z% = FNLOG%(-LOGDISPERSIBLE%, NUM1$(AMT)) & IF NOT NO_TRACK% Z% = FNLOG%(PROGRAM%, PRG$)$ !Z% = FNLOG%(LOGSSN%, FNSTD$(SSN%)) Z% = FIO_UNLOCK_REC( LOGDTA%)+ ! Make sure we start with a clean record.N ! The LOG record items 18159 FNEND. ! Function end18200 !M &( ! U P D A T E F U N D T O T A L S18205 DEF FNFUNUP%(ST%)F FNFUNUP% = 0% GOTO 18229 IF ST% <= 0% FUNREC% = ST%3 Z$ = FIO_GET_FLD_L( FUNDTA%, FUNREC%, -1%, 1%, 1%)U ! Update fund totals ! Set the fund recordV ! Lock up the channelW18210 Z.FLD% = UNACCEPTED%" Z.FLD% = ACCEPTED% IF AWARD_ACPT%& NEW.DATA = FNFUN(-Z.FLD%) + AWARD.AMT& Z% = FNFUN%(-Z.FLD%, NUM1$(NEW.DATA))* NEW.DATA = FNFUN(-AVAILABLE%) - AWARD.AMT* Z% = FNFUN%(-AVAILABLE%, NUM1$(NEW.DATA))( NEW.DATA = FNFUN(-AWARDED%) + AWARD.AMT( Z% = FNFUN%(-AWARDED%, NUM1$(NEW.DATA)), NEW.DATA = FNFUN(-TRANSMITTED%) - TRANS.AMT0 Z% = FNFUN%( -TRANSMITTED%, NUM1$( NEW.DATA)) & IF TRANS.AMT <> 0.= Z% = FIO_UNLOCK_REC( FUNDTA%): ! Adjust amt awarded, available and total amt awarded in ! Fund file 18229 FNEND  ! Function end18500 &  ! 18500 - 18799N &+ ! G E T D A T A F I L E R E C O R D SS18502 !Z &( ! GET STUDENT NUMBER/RECORD AND CHECK18505 DEF FNSTDNUM%r ! Get student number/recordn#18510 Z% = FIO_UNLOCK_REC( STDDTA%) Z% = FIO_UNLOCK_REC( TRNDTA%) FNSTDNUM% = -1% STD.ID$ = EDIT$(STD.ID$, 255%) $ STDREC% = FNGET_STUDENT%( STD.ID$ ) GOTO 18599 IF STDREC% <= 0%T STU_RES_DTA$( I%) = &= EDIT$( FIO_GET_FLD_L( STDDTA%, STDREC%, 1%, SRES_ST%(I%), & 9 SRES_LN%(I%)),2%+32%) FOR I% = 1% TO STU_RESTRICTIONS%  T4_RES_DTA$( I%) = &A= EDIT$( FIO_GET_FLD_L( STDDTA%, STDREC%, 1%, TRES_ST%(I%), & 8 TRES_LN%(I%)),2%+32%) FOR I% = 1% TO T4_RESTRICTIONS% ! Unlock record (just in case), ! Assume a null response (FNSTDNUM% = -1%) ! Get and check student ID% ! If valid, set up a masked version 818598 Z$ = FIO_GET_FLD_L( STDDTA%, STDREC%, -1%, 1%, 1%) fnstdnum% = STDREC% ! Tie up the recordt 18599 FNENDa ! End of routine18650 &t( ! G E T A S T U A I D R E C O R D &$18655 DEF FNGET_STUDENT%( TEMP.ID$ )0 ! TEMP.ID$ = Input passed from calling routine ! Result% = STDREC% if found ! <= 0% if bad value ! ! Set up a default return valueO ! *18660 AWARD.ERR%, ALPHA.ID%, KEY.NUM% = 0%4 KEY.NUM% = -1% IF FNFLG%(STDFLD$,STUDENTID%) AND 2% IF KEY.NUM% THEN WHEN ERROR INT$ TEMP.ID$ = NUM1$( VAL( TEMP.ID$)) USE  TEMP.ID$= TEMP.ID$A ALPHA.ID% = -1% END WHEN ! Initialize some variables 3 ! If ID attribute is numeric set numeric key flag @ ! If 1st byte of response is numeric set numeric response flag2 ! Bypass key look-up if response cannot be a key7 ! See if response is a student ID in the STUDENT file== ! If record is found, set student ID equal to RESPONSE$ andT, ! go verify that this is the right student/ ! Check for existing ID and warn if not found( D18690 ZREC% = FIO_FIND_KEY( STDKEY%, EDIT$(TEMP.ID$, 255%), STDDTA%) FNGET_STUDENT% = ZREC%(* ! Set the return value for valid records 18699 FNENDA !Function endA18800 !  ! 18800 - 18999T & &18999 !( O19000 !, &* ! S T A N D A R D E R R O R T R A P &) ! NOTE: 19001-19099 AND 19501-19599 AREe' ! RESERVED FOR UTILITY ROUTINE TRAPS.  ! , !U> 19000 STANDARD ERROR TRAPPING ROUTINE &19020 IF ERL = 27715%n THEN AWARD.ERR% = -100% RESUME 9000o- ! If a bad field number in a FLDBLD string,d19500 ERR$ = ERT$(ERR)0 !U> ERR$ = The name of the error that occurred 19986 IF ERR = 10% OR ERR = 138% THEN PRINT ERR$; BEL4 RESUME 9000 - ! End the program if this line reached with) ! A protection violation319990 IF (ERR > 49% AND ERR < 53%) AND ERL < 27000%$ THEN SELECT ERL L CASE 10100% AWARD.ERR% = -1%( RESUME 10290% CASE ELSEt RESUMEf END SELECT( ! If we reach here with a number error7 ! Then we will print a standard message and try againr519995 IF ERR = 11% AND (ERL < 27010% OR ERL > 27129%)  THEN RESUME 9000-( ! If a ^Z by now, then end the program% ! Unless within a utility routine 19998 RESU@;~AID_ONLINE.BCK,P &[SCRIPTS.SIS]AID_MAINTAIN_AWARD.BAS;23f x<ME 9000T ! End of the error handler A19999 !J & ! 2 0 0 0 0 - 2 2 9 9 8 &* ! P A C K A G E S U B R O U T I N E S &22998 !1 & ! 2 3 0 0 0 - 2 4 9 9 8 && ! P A C K A G E F U N C T I O N S & !/ ! R E A D I N L I N K S F U N C T I O N+ ! DEF FNRLINK%) sav.awdrec% = awdrec% N.LINK% = 0%L !> FNRLINK% = Read in linksN2 !> NOTE: the links are really not valid anymore., ! This procedure replaces former code and' ! now pulls in AWARD records by Key.A+ ! But for simplicity sake we are keepingO6 ! the names the same until a much more  ! extensive rewrite. G STU_ID$ = FNSTD$(STUDENTID%) 1 Z% = FIO_MAXREC(AWDDTA%)  GOTO END_FNRLINK IF Z% <= 0%R DIM TMPRECS%(Z%) B A_RECS% = FIO_FIND_DUPKEY(AWDKEY%,STU_ID$, AWDDTA%,0%,TMPRECS%())! GOTO END_FNRLINK IF A_RECS% < 1%D DIM LINK%(A_RECS%)L! FLDINFO::STR =AWDINF(AWDFUNDID%)L START% = FLDINFO::LNG-3% END% = FLDINFO::LNG-2%L FOR LCV% = 1% TO A_RECS%  AWDREC% = TMPRECS%(LCV%)TC ITERATE UNLESS SEG$(FNAWD$(AWDFUNDID%),START%,END%) = DFLT_YR$ !&A ! UNLESS STUAID% N.LINK% = N.LINK% + 1%A LINK%(N.LINK%) = TMPRECS%(LCV%) NEXT LCV%% ! Around and return number of linksT END_FNRLINK:A FNRLINK% = N.LINK%T awdrec% = sav.awdrec% W END DEF5 ! a !& ! S O R T A W A R D R E C O R D S !+ DEF FNRLINKS%(LNZ%, SNZ%, BNZ%, SO_ITEMS%)s ! LNZ% - if true build links! ! SNZ% - if true sort the stuffN( ! BNZ% - if true build sort components6 ! SO_ITEMS% - how many sort items we've got (output) N.LINK% = 0% IF LNZ%3 GOTO CALL_SOR IF SNZ% AND (NOT LNZ% AND NOT BNZ%)i !> FNRLINK% = read in linksA@ ! Reset number of links if the process is called to build them@ ! Clear the sort array if we're going to build sort components0 ! Bypass to sort routine if we're only sorting N.LINK% = FNRLINK%  DIM SORT$(N.LINK%)  FOR LCV% = 1% TO N.LINK%L AWDREC% = LINK%(LCV%) IF BNZ%! THEN SORT_REC::REC_NUM = AWDREC% ) SORT_REC::FUND_TERM$ = FNAWD$(AWDTERM%)I# SORT$(LCV%) = SORT_REC::FUND_REC$  SO_ITEMS% = N.LINK%% END IFL NEXT LCV%% ! Around and return number of links CALL_SOR:* CALL UTL_SORT(SO_ITEMS%, SORT$()) IF SNZ%+ ! Sort the records if the sort flag is on1 FNRLINKS% = N.LINK% LNZ%, SNZ%, BNZ% = 0% END DEF ! end of functionn ! STORE LINK FUNCTIONO DEF FNSLINK%(AWDREC%); !>FNSLINK% = Store link function F, ! NOTE: This is a dummy function that# ! doesn't do anything anymoreu ! Dummy function end END DEF ! I / O R O U T I N E S DEF FNSTD$(FLD%)F Z% = FLD% Z% = -FLD% IF FLD% < 0% FLDINFO::STR = STDINF(Z%)' FNSTD$ = FNGT$(STDDTA%, STDREC%, FLD%)) STDERR% = STDERR% OR GT.ERR%  END DEF' !P> FNSTD$() = get aplha/numeric dataI DEF FNSTD(FLD%) Z% = FLD% Z% = -FLD% IF FLD% < 0% FLDINFO::STR = STDINF(Z%)% FNSTD = FNGT(STDDTA%, STDREC%, FLD%)  STDERR% = STDERR% OR GT.ERR%f END DEF% !P> FNSTD() = get numeric only datar DEF FNSTD%(FLD%, Z.DAT$)0 Z% = FLD% Z% = -FLD% IF FLD% < 0% FLDINFO::STR = STDINF(Z%)0 FNSTD% = FNPT%(STDDTA%, STDREC%, FLD%, Z.DAT$) STDERR% = STDERR% OR PT.ERR%N STD.UPD% = -1%O END DEF* !P> FNSTD%() = store any data into field DEF FNTRN$(FLD%)L Z% = FLD% Z% = -FLD% IF FLD% < 0% FLDINFO::STR = TRNINF(Z%)' FNTRN$ = FNGT$(TRNDTA%, TRNREC%, FLD%)I TRNERR% = TRNERR% OR GT.ERR%P END DEF' !P> FNTRN$() = get aplha/numeric dataC DEF FNTRN(FLD%) Z% = FLD% Z% = -FLD% IF FLD% < 0% FLDINFO::STR = TRNINF(Z%)% FNTRN = FNGT(TRNDTA%, TRNREC%, FLD%). TRNERR% = TRNERR% OR GT.ERR%M END DEF% !P> FNTRN() = get numeric only data, DEF FNTRN%(FLD%, Z.DAT$)G Z% = FLD% Z% = -FLD% IF FLD% < 0% FLDINFO::STR = TRNINF(Z%)0 FNTRN% = FNPT%(TRNDTA%, TRNREC%, FLD%, Z.DAT$) TRNERR% = TRNERR% OR PT.ERR%W TRN.UPD% = -1%" END DEF* !P> FNTRN%() = store any data into field DEF FNAWD$(FLD%)R Z% = FLD% Z% = -FLD% IF FLD% < 0% FLDINFO::STR = AWDINF(Z%)' FNAWD$ = FNGT$(AWDDTA%, AWDREC%, FLD%)$ AWDERR% = AWDERR% OR GT.ERR%$ END DEF' !P> FNAWD$() = get aplha/numeric data, DEF FNAWD(FLD%) Z% = FLD% Z% = -FLD% IF FLD% < 0% FLDINFO::STR = AWDINF(Z%)% FNAWD = FNGT(AWDDTA%, AWDREC%, FLD%), AWDERR% = AWDERR% OR GT.ERR%$ END DEF% !P> FNAWD() = get numeric only dataA DEF FNAWD%(FLD%, Z.DAT$)A Z% = FLD% Z% = -FLD% IF FLD% < 0% FLDINFO::STR = AWDINF(Z%)0 FNAWD% = FNPT%(AWDDTA%, AWDREC%, FLD%, Z.DAT$) AWDERR% = AWDERR% OR PT.ERR%o AWD.UPD% = -1%D END DEF* !P> FNAWD%() = store any data into field DEF FNCOD$(FLD%) Z% = FLD% Z% = -FLD% IF FLD% < 0% FLDINFO::STR = CODINF(Z%)' FNCOD$ = FNGT$(CODDTA%, CODREC%, FLD%)D CODERR% = CODERR% OR GT.ERR%U END DEF' !P> FNCOD$() = get aplha/numeric datau DEF FNCOD(FLD%) Z% = FLD% Z% = -FLD% IF FLD% < 0% FLDINFO::STR = CODINF(Z%)% FNCOD = FNGT(CODDTA%, CODREC%, FLD%)n CODERR% = CODERR% OR GT.ERR%% END DEF% !P> FNCOD() = Get numeric only data2 DEF FNLOG%(FLD%, Z.DAT$)F Z% = FLD% Z% = -FLD% IF FLD% < 0% FLDINFO::STR = LOGINF(Z%)0 FNLOG% = FNPT%(LOGDTA%, LOGREC%, FLD%, Z.DAT$) LOGERR% = LOGERR% OR PT.ERR%_ LOG.UPD% = -1%U END DEF* !P> FNLOG%() = store any data into field DEF FNFUN$(FLD%)0 Z% = FLD% Z% = -FLD% IF FLD% < 0% FLDINFO::STR = FUNINF(Z%)' FNFUN$ = FNGT$(FUNDTA%, FUNREC%, FLD%)H FUNERR% = FUNERR% OR GT.ERR%U END DEF' !P> FNFUN$() = get aplha/numeric data2 DEF FNFUN(FLD%) Z% = FLD% Z% = -FLD% IF FLD% < 0% FLDINFO::STR = FUNINF(Z%)% FNFUN = FNGT(FUNDTA%, FUNREC%, FLD%)% FUNERR% = FUNERR% OR GT.ERR% END DEF% !P> FNFUN() = get numeric only dataD DEF FNFUN%(FLD%, Z.DAT$) Z% = FLD% Z% = -FLD% IF FLD% < 0% FLDINFO::STR = FUNINF(Z%)0 FNFUN% = FNPT%(FUNDTA%, FUNREC%, FLD%, Z.DAT$) FUNERR% = FUNERR% OR PT.ERR%+ FUN.UPD% = -1%O END DEF* !P> FNFUN%() = store any data into field+ ! I/O ROUTINES FOR EASY ACCESSING OF PELL0 DEF FNMAX$(FLD%)I Z% = FLD% Z% = -FLD% IF FLD% < 0% FLDINFO::STR = MAXINF(Z%)' FNMAX$ = FNGT$(MAXDTA%, MAXREC%, FLD%)  MAXERR% = MAXERR% OR GT.ERR%% END DEF' !P> FNMAX$() = get aplha/numeric dataI DEF FNMAX(FLD%) Z% = FLD% Z% = -FLD% IF FLD% < 0% FLDINFO::STR = MAXINF(Z%)% FNMAX = FNGT(MAXDTA%, MAXREC%, FLD%)  MAXERR% = MAXERR% OR GT.ERR%  END DEF% !P> FNMAX() = get numeric only dataA DEF FNMAX%(FLD%, Z.DAT$)0 Z% = FLD% Z% = -FLD% IF FLD% < 0% FLDINFO::STR = MAXINF(Z%)0 FNMAX% = FNPT%(MAXDTA%, MAXREC%, FLD%, Z.DAT$) MAXERR% = MAXERR% OR PT.ERR%Y END DEF* !P> FNMAX%() = store any data into field DEF FNREG$(FLD%)D Z% = FLD% Z% = -FLD% IF FLD% < 0% FLDINFO::STR = MAXINF(Z%)' FNREG$ = FNGT$(REGDTA%, REGREC%, FLD%)D REGERR% = REGERR% OR GT.ERR%. END DEF' !P> FNREG$() = get alpha/numeric data_ ! ! The GET Function: ! DEF FNGT$(CHNL%, REC%, FLD%)M Z10% = SGN(FLD%)I FLD% = ABS(FLD%)I Z11% = SGN(CHNL%) CHNL% = ABS(CHNL%)R5 Z10$ = FIO_GET_FLD_OL(CHNL%, REC%, 1%, FLDINFO::LCN)2 Z10$ = UTL_MASK(Z10$, FLDINFO::MSK) IF Z10% = -1% FNGT$ = Z10$T END DEF !P> FNGT$ = Get alpha data ! -Z% = Get with the mask% ! ! The GET Function  ! DEF FNGT(CHNL%, REC%, FLD%) Z13% = SGN(FLD%)E FLD% = ABS(FLD%)E GT.ERR% = 0% Z10$ = FNGT$(CHNL%, REC%, FLD%) VALERR% = 0%  WHEN ERROR IN Z10 = VAL(Z10$) USE VALERR% = -1% END WHENP GOTO GET_ERROR IF VALERR%( FNGT = Z10*10.^FLDINFO::SCL IF Z13%=-1%' FNGT = Z10 IF Z13%= 1%E GOTO GET_ENDI !P> FNGT = Get numeric data,& ! -FLD% = Get data with scale factor GET_ERROR:a PRINT FNERR$(-1%)? PRINT 'Data: "';Z10$;'" field';FLD%;"of file ";FIO_FILE(CHNL%)W PRINT "Record number:";REC% FNGT = 0.0 ! trap bad VAL() errors0 GET_END:D END DEF & ! ! The PUT FunctionD !% DEF FNPT%(CHNL%, REC%, FLD%, Z.DAT$)) PT.ERR% = 0%1 Z.DAT$ = EDIT$(Z.DAT$, 4%)( Z11% = SGN(FLD%)D FLD% = ABS(FLD%)(2 GOTO FNPUT_STORE IF (FLDINFO::FLG AND 2%) <> 2%# !P> FNPT%() = Store data in fieldE ! -FLD% = Remove scale factorBO VALERR% = 0%L WHEN ERROR IN Z10 = VAL(Z.DAT$) USE VALERR% = -1% END WHEND GOTO FNPUT_ERROR IF VALERR%D* Z10 = Z10*10.^-FLDINFO::SCL IF Z11% = -1% Z.DAT$ = NUM1$(Z10)( Z.DAT$ = UTL_NUM_CHR(Z10,,FLDINFO::LNG) GOTO FNPUT_STORET ! Trap bad VAL errorsN0 ! Remove any scale factor and space minus sign FNPUT_ERROR:RH PRINT FNERR$(-2%) A PRINT 'Data: "';Z.DAT$;'" field';FLD%;"of file ";FIO_FILE(CHNL%)M PRINT "Record number:";REC% PT.ERR% = -1% GOTO END_FNPUT% ! Trap bad VAL() errorsI FNPUT_STORE:R= Z% = FIO_STORE_FLD_OL(CHNL%, REC%, 1%, FLDINFO::LCN, Z.DAT$)E Z% = FIO_UNLOCK_REC(CHNL%)N ! Store the data END_FNPUT:" END DEF& ! U T I L I T Y F U N C T I O N S0 ! E R R O R M E S S A G E F U N C T I O N ! FNERR$(ERROR%) !  ! ERROR% Error code to use# ! (if negative, program error)T !(8 ! RESULT: VAX-11 BASIC message for positive error code. ! for negative, result is program dependent DEF FNERR$(ERNUM%)T( !U> FNERR$( ) = error message function FNERR$ = "" IF ERNUM% >= 0% THEN FNERR$ = ERT$(ERNUM%). END IF, END DEF& ! G E T U S E R R E S P O N S E ! FNRESPOND$(CHNL%,TEXT$)H/ ! CHNL% = Channel number of response activityL' ! (-1% if screen handling function)A/ ! TEXT$ = 'Text to print.... ') !L% ! RESULTS: RESPONSE$ = user's reply " ! RESPONSE% = user's reply type ! 1% - If or /Back ! 2% - If data input( ! 3% - If return or default response ! 4% - If "YES" response ! 5% - If "NO" responseR DEF FNRESPOND$(CHNL%,TEXT$) RESPONSE% = 2% Z0$ = ""F Z1% = INSTR(1%, TEXT$, "<") IF Z1% <> 0%F% THEN Z2% = INSTR(Z1%+1%, TEXT$, ">") IF Z2% <> 0%+ THEN Z0$ = MID(TEXT$, Z1%+1%, Z2%-Z1%-1%)O END IF7 !> FNRESPOND$() = Get user response with branch index_= !> RESPONSE% = Global branch code returned by FNRESPOND$( )T$ ! Set response to data-typed code.1 ! Look for a supplied default - store it if any,+ ! Z0$ = Supplied default response or null  END IFG GOTO DO_SCREEN IF CHNL% < 0%_ IF LEN(TEXT$)$ THEN PRINT " " IF CCPOS (0%) <> 0% PRINT TEXT$; END IFE ! For non-screen oriented_3 ! If text to print and channel to use is console,I0 ! Then get to a new line and print the prompt. INPUT LINE #CHNL%, RESPONSE$T! PRINT IF CCPOS(0%) IF CHNL% = 0%A GOTO CHECK_RESPONSEN1 !> RESPONSE$ = Global result from FNRESPOND$( )M ! Get the response M3 ! Always a new line in case typed somewhere DO_SCREEN: F TEXT$ = TEXT$ + "? " $ CALL LIB$ERASE_LINE(CMNDLN%, LEFT%)$ CALL LIB$SET_CURSOR(CMNDLN%, LEFT%)* CALL LIB$GET_SCREEN(RESPONSE$, TEXT$, 0%)# CALL LIB$ERASE_LINE(BOTLN%, LEFT%)F# ! Set up question form for promptD- ! Erase any possible previous command lines%* ! Set the cursor to the desired location ! Get the data1 !> RESPONSE$ = Global result from FNRESPOND$( )I% ! Erase any possible error messagesO CHECK_RESPONSE: Z1$ = EDIT$(RESPONSE$, 255%)! RESPONSE$ = EDIT$(RESPONSE$, 4%)C) ! Z1$ = Response converted for testing.O IF Z1$ == "", THEN RESPONSE$ = Z0$, RESPONSE% = 3% GOTO END_FNRESPOND END IF4 ! If just return was hit, set the default response( ! And it's branch code, then jump out.E BACK% = (ASCII(RESPONSE$)=27%) OR (Z1$= SEG$("/BACK", 1%, LEN(Z1$)))S IF BACK%H THEN RESPONSE% = 1% RESPONSE$ = "" GOTO END_FNRESPOND END IFn ! Clean up returned string ! If or /back was typed,8 ! Then set proper response, blank the result and quit.- RESPONSE% = 4% IF INSTR(1%, "YES", Z1$) = 1%4, RESPONSE% = 5% IF INSTR(1%, "NO", Z1$) = 1% ! Set a "YES" response ! Set a "NO" responseD END_FNRESPOND:$ FNRESPOND$ = RESPONSE$)* ! Return typed string without terminator END DEF3 ! B U I L D F I E L D D E S C R I P T I O N SF ! FNBLD$(CHNL%, FIELDS$) !"2 ! CHNL% Channel number of open description file ! ! FIELDS$ Field numbers to use ! (FLD#,FLD#,FLD#...)D !A% ! Result: Special format as followsA ! FORMAT = (1-12 OF DSC$( )) ! + ! EDIT MASK TO USE DEF FNBLD$(CHNL%, FIELDS$)D2 !U> FNBLD$( ) = Builds field description strings@ FIL$ = FIO_FILE(CHNL%) $ fil$ = left$(fil$, len(fil$)-5%) & IF POS(FIL$, ".DSC;", 1%) > 0%+ FILFLDS% = UTL_PARSE(FIELDS$,,FLDPARTS$())C  FOR LCV% = 1% TO FILFLDS%3 INX% = FIO_NAME_TO_FLD(CHNL%, FLDPARTS$(LCV%), "")F@ FLD% = FIO_DSC_CHAR(-CHNL%,FLDPARTS$(LCV%),FLDINF(INX%)::LCN, & FLDINF(INX%)::LNG, &  FLDINF(INX%)::FLG, & FLDINF(INX%)::SCL, & FLDINF(INX%)::MSK,,)F NEXT LCV%  FNBLD$ = FIL$ END DEF ! ! G E T F I E L D F L A G ! DEF FNFLG%(FIL$, FLD%)", !U> FNFLG%( ) = Extract a field flag word F% = 0% TCHNL% = 40%,! Z% = FIO_OPEN_DSC(TCHNL%, FIL$) i GOTO END_FNFLG IF Z% < 0%0 Z% = FIO_DSC_CHAR(-TCHNL%,NUM1$(FLD%),,,F%,,,,) CALL FIO_CLOSE_FILE(TCHNL%) END_FNFLG:M FNFLG% = F% END DEF$ ! G E T F I E L D H E A D I N G ! FNHED$(CHNL%) !5 ! CHNL% Channel number of the open description fileR !( ! RESULT: The field heading for field 1 DEF FNHED$(CHNL%)+ Z$ = MID(FIO_DSC_REC(CHNL%, 1%), 15%, 30%)DD FNHED$ = EDIT$(LEFT(Z$, INSTR(1%, Z$+CHR$(1%), CHR$(1%))-1%), 128%) END DEF3 !U> FNHED$ = Obtain heading for field 1 of a fileN- ! G E T F I E L D D E S C R I P T I O N S  ! FNGTDSC%(FLD$) !T ! FLD$ FIELD NAME !, ! RESULT: Field number DEF FNGTDSC%(FLD$)C; !U> FNGTDSC%( ) = Extract the descriptor of a given fieldR  FNGTDSC% = 0%= Z0% = FIO_DSC_CHAR(-WRKCHN%, FLD$, Z1%, , Z2%, Z3%, Z4$, , )% FLDOL%(Z0%) = Z1%K FLDFLG%(Z0%) = Z2%) FLDSCL%(Z0%) = Z3%_ FLDMSK$(Z0%) = Z4$" FNGTDSC% = Z0% END DEF29999 !T30999 !N & ! 3 1 0 0 0 - 3 1 9 9 8A &/ ! C H A I N E N T R Y P R O C E S S I N GN &31000 CHAINED% = -1% GOTO 10 ! Set chain flag31100 CALL LIB$GET_FOREIGN(F0$)F GOTO 10 IF F0$ = "" IF F0$ = "SELECT" THEN MENU% = -1%E OPTION$ = "AWARD: "O GOTO 10D? ELSE PRINT "%Invalid parameter for AWARD option - "; F0$; BEL GOTO 32767* ! If no parameter, then do as standalone( ! Get foreign command string parameter' ! Test the parameter and set the flagL- ! If invalid parameter, then notify and endN32767 END FUNCTIONFOR Z% = 1% TO FLDS%/ CODE% = FIO_NAME_TO_FLD(WRKCHN%, ".CODE", "")O< DESCRIPTION% = FIO_NAME_TO_FLD(WRKCHN%, ".DESCRIPTION", "") CALL FIO_CLOSE_FILE(WRKCHN%)o ! Get the FINCODE file stuff15180 !d oF15190 Z% = UTL_FILE_SCAN("MAX_AWARD", ".DTA", MAXSPEC$, Z0%, Z1%, Z2%), GOTO 15200 IF UTL_FIND_FILE(MAXSPEC$) = -5% MAX_PROCESS% = -1%R RETURN &AC IF FIO_OPEN_FILE( MAXDTA%*[SCRIPTS.SIS]AID_ONLINE.BAS;44+,&0./ 4u`-P 0123KPWO56lR7 R89(cNGHJ"2 & ! A I D _ O N L I N E ! Program : AID_ONLINE %IDENT "3.1-01" ! Edit Date: 29-Mar-2006 & & ! Refer all Inquiries to: & ! Educational Systems Products" ! 11415 East 19th Street, Suite B ! Tulsa, Oklahoma 74128 ! Phone: (918) 437 - 4920 &H9 !********************************************************************!F ! !F ! C O P Y R I G H T N O T I C E !F ! !F ! Copyright (c) 1993, Campus America Inc., !F ! All Rights Reserved !F ! !F ! This software is furnished under a license for use only on a !F ! single computer system and may be copied only with the !F ! inclusion of the above copyright notice. This software, or !F ! any other copies thereof, may not be provided or otherwise !F ! made available to any other person except for use on such !F ! system and to one who agrees to these license terms. Title to !F ! and ownership of the software shall at all times remain in !F ! Campus America, Inc. !F ! !F !*******************************************************************! ! !< ! R E S T R I C T E D R I G H T S L E G E N D ! ! !F ! Use, duplication, or disclosure by the Government is subject to !F ! restrictions as set forth in paragraph (b)(3)(B) of the Rights in !F ! Technical Data and Computer Software clause in DAR 7-104.9(a). ! ! !F !CAMPUS AMERICA, INC., 900 HILL AVE, SUITE 205, KNOXVILLE, TN 37915 !F !*******************************************************************! 10 ! STRUCTURED FOR VAX-11 BASIC20 ! & ! + ! M O D I F I C A T I O N H I S T O R Y & ! DATE INITIALS REASON !100 ! &2 ! S P E C I A L P R O G R A M F O R M A T S &149 ! &* ! P R O G R A M M I N G N O T I C E S & ! LINE NUMBER NOTICE 200 ! &, ! B U I L D I N G B L O C K S U S E D7201 ! MASTER V3.0 SKELETON PROGRAM FILE HANDLING FORMAT;207 ! MASK V2.8 APPLY MASKING CHARACTERS TO A DATA STRING>209 ! FLDSML V3.0 BUILD FIELD INFORMATION STRING (NO HEADINGS)299 ! 300 ! & ! I / O C H A N N E L S &349 ! &. ! V A R I A B L E E X P L A N A T I O N S &399 ! &2 ! S U B R O U T I N E D E S C R I P T I O N S &449 ! &. ! F U N C T I O N D E S C R I P T I O N S &499 ! &* ! C O M M O N D E S C R I P T I O N S &549 ! &$ ! M A P D E S C R I P T I O N S &599 ! &. ! E X T E R N A L D E S C R I P T I O N S &698 ! 699 ! &* ! C O M M O N D E C L A R A T I O N S &749 ! &$ ! M A P D E C L A R A T I O N S & 840 EXTERNAL LONG FUNCTION &@ AID_MAINTAIN_AWARD(LONG,STRING,STRING,STRING,STRING,STRING), & UTL_ASK_YESNO, &" LIB$GET_FOREIGN, &" LIB$SET_LOGICAL, &5 UTL_PARSE(STRING,STRING,STRING DIM())  EXTERNAL STRING FUNCTION & UTL_TRAN_LOG(STRING,LONG)849 ! &8 ! V A R I A B L E T Y P E D E C L A R A T I O N S &898 ! 899 ! &, ! D I M E N S I O N S T A T E M E N T S &950 ! & ! UTILITY DIMENSION STATEMENTS 999 ! & &4 ! B E G I N N I N G O F T H E P R O G R A M &1000 ON ERROR GOTO 19000- ! Set the standard error trap1039 ! &, ! C O N S T A N T D E F I N I T I O N S &1149 ! & ! UTILITY CONSTANTS1199 ! & ! 1 2 0 0 - 1 9 9 7 && ! P R E L I M I N A R Y L O G I C &1998 ! 1999 ! & ! 2 0 0 0 - 8 9 9 9 &( ! M A I N P R O G R A M L O G I C &2000 ! & ! A W A R D O P T I O N &92002 STS% = LIB$SET_LOGICAL("CC$AID_ONLINE_STATUS", "-1")? STS% = LIB$SET_LOGICAL("CC$OA_FUNDS_ACCEPTED",".","LNM$JOB",,)< STS% = LIB$SET_LOGICAL("CC$AID_ONLINE_CHANGED", "0") ! Show error!2005 CALL LIB$GET_FOREIGN(F0$)# GOTO 9000 IF LEN(F0$) = 0.% Z% = UTL_PARSE(F0$, " ", AWD_INF$()) STUDENTID$ = AWD_INF$(1%) AWD.FIL$ = AWD_INF$(2%) CUR.YR$ = AWD_INF$(3%) BUDGET$ = AWD_INF$(4%) DEBUG% = (AWD_INF$(5%)<> ""). STS% = LIB$SET_LOGICAL("CC$OABUDGET",BUDGET$)/2008 Z% = AID_MAINTAIN_AWARD(0%,CUR.YR$,"",,,) GOTO 9000 IF Z% <> 0)2010 OPEN AWD.FIL$ FOR INPUT AS FILE 99% RECEIVE_DATA:$ INPUT LINE #99%, AWARD_INFO$F GOTO RECEIVE_DATA IF LEFT$(AWARD_INFO$, 2%) = ""- Z% = UTL_PARSE(AWARD_INFO$, "=", AWD_INF$())) VRB$ = LEFT$(RIGHT$(AWD_INF$(1%),2%),3%) FUND$ = RIGHT$(AWD_INF$(1%),5%) AMT$ = AWD_INF$(2%) ORIG_AMT$, REQ_AMT$ = "" SELECT VRB$ CASE "AWD" ORIG_AMT$ = AMT$ CASE "CUR" REQ_AMT$ = num1$(val(AMT$)) END SELECT IF REQ_AMT$ <> ""J THEN Z% = AID_MAINTAIN_AWARD(1%+32%, STUDENTID$,FUND$,,CUR_AMT$,ACP_DTE$)D STS% = LIB$SET_LOGICAL("CC$AID_ONLINE_CHANGED", "1") SFUND$ = LEFT$(FUND$,3%)& IF VAL(REQ_AMT$) <> 0.S THEN ACCEPTED_FUNDS$ = UTL_TRAN_LOG( "CC$OA_FUNDS_ACCEPTED", 0%)F IF NOT INSTR(0%, ACCEPTED_FUNDS$, SFUND$)P THEN ACCEPTED_FUNDS$ = ACCEPTED_FUNDS$ + SFUND$ + ":"h CALL LIB$SET_LOGICAL("CC$OA_FUNDS_ACCEPTED",ACCEPTED_FUNDS$,"LNM$JOB",,) END IF END IFu print "locate award returned";z%;"req amt = ";amt$;" cur award amt = ";CUR_AMT$;" accept date = ";ACP_DTE$ & IF DEBUG% IF REQ_AMT$ <> CUR_AMT$d THEN PRINT "UPDATED REQ AMOUNT FOR FUND ";FUND$;" AMOUNT ";REQ_AMT$;"...";CUR_AMT$;"..." IF DEBUG% IF VAL(REQ_AMT$) <> 0.M THEN Z% = AID_MAINTAIN_AWARD(8%+32%, STUDENTID$,FUND$,REQ_AMT$,,ACP_DTE$) M ELSE Z% = AID_MAINTAIN_AWARD(4%+32%, STUDENTID$,FUND$,REQ_AMT$,,ACP_DTE$) END IF END IF0 IF VAL(ACP_DTE$) >= 0. AND VAL(REQ_AMT$) <> 0.; THEN Z% = AID_MAINTAIN_AWARD(2%+32%, STUDENTID$,FUND$,,,)% PRINT "ACCEPTED ";FUND$ IF DEBUG% END IF PRINT "" IF DEBUG% END IF  GOTO RECEIVE_DATA82170 STS% = LIB$SET_LOGICAL("CC$AID_ONLINE_STATUS", "0")8999 ! 9000 ! &( ! E N D O F T H E P R O G R A M & GOTO 32767 9999 ! & ! 1 0 0 0 0 - 1 6 9 9 8 &$ ! U S E R S U B R O U T I N E S &18999 ! 19000 ! &* ! S T A N D A R D E R R O R T R A P &) ! NOTE: 19001-19099 AND 19501-19599 ARE' ! RESERVED FOR UTILITY ROUTINE TRAPS. !, !U> 19000 STANDARD ERROR TRAPPING ROUTINE &19500 ERR$ = ERT$(ERR)0 !U> ERR$ = The name of the error that occurred 19986 IF ERR = 10% OR ERR = 138% THEN PRINT ERR$; BEL RESUME 9000- ! End the program if this line reached with ! A protection violation519995 IF ERR = 11% AND (ERL < 27010% OR ERL > 27129%) THEN RESUME 2170( ! If a ^Z by now, then end the program% ! Unless within a utility routine$19998 PRINT ERR$;" at line";ERL; BEL+ IF UTL_ASK_YESNO(1%, "Abort this program") THEN RESUME 9000 ELSE RESUME ! End of the error handler 19999 ! & ! 2 0 0 0 0 - 2 2 9 9 8 &* ! P A C K A G E S U B R O U T I N E S &22998 ! & ! 2 3 0 0 0 - 2 4 9 9 8 && ! P A C K A G E F U N C T I O N S &29999 !30999 ! & ! 3 1 0 0 0 - 3 1 9 9 8 &/ ! C H A I N E N T R Y P R O C E S S I N G &31000 CHAINED% = -1% GOTO 10 ! Set chain flag31100 CALL LIB$GET_FOREIGN(F0$) GOTO 10 IF F0$ = "" IF F0$ = "SELECT" THEN MENU% = -1% OPTION$ = "AWARD: " GOTO 10D ELSE PRINT "%Invalid parameter for AID_ONLINE option - "; F0$; BEL GOTO 32767* ! If no parameter, then do as standalone( ! Get foreign command string parameter' ! Test the parameter and set the flag- ! If invalid parameter, then notify and end 32767 END$*[SCRIPTS.SIS]AID_ONLINE_AWARDS.FRF;3+,'0. / 4 ^-P 0123KPWO!56JYM7ZSYM8)/';9(cNGHJ!FORMAIDFILES:AWARDSIS3_SCRIPTS:AID_ONLINE_AWARDSNONONO0NONO1??%*[SCRIPTS.SIS]AID_ONLINE_AWARDS.FRM;20+,/0./ 4;-P 0123KPWO565B7w B89(cNGHJ! awards[] = new Array(); * awards[][TtlNdx] = "<.fundidtr>";( awards[][FndNdx] = "<.fundid>";8 awards[][AmtNdx] = "<.amount/mask= . >"; - awards[][TrmNdx] = "<.termcodetr>"; , awards[][GrpNdx] = "<.oacategory>";. awards[][AdjNdx] = "<.oaadjustamt>"; - awards[][MinNdx] = "<.oaadjustmin>";7 awards[][MaxNdx] = "<.amount/mask= . >";, awards[][LnkNdx] = "<.oafundlink>";; awards[][XmtNdx] = "<.transmitted/mask . >";* awards[][ColNdx] = "<.termcode>"; awards[][TypNdx] = ""; awards[][AltNdx] = "";1 awards[][AcpNdx] = "<.dateaccept/mask>";'*[SCRIPTS.SIS]AID_ONLINE_AWARDSUM.FRF;10+,20. / 4 t-P 0123KPWO!56yyM7$yM8O*6';9(cNGHJA!FORMAIDFILES:AWARD SIS3_SCRIPTS:AID_ONLINE_AWARDSUM $ , . NOYES.FUNDNONONO1??'*[SCRIPTS.SIS]AID_ONLINE_AWARDSUM.FRM;39+,70. / 4G -P 0123KPWO!568E79E89(cNGHJ%.OAFUNDMSG <> "" /FIRST> Accepted Aid/FIRST< /FIRST2  /FIRST /FIRST[.AMOUNT/TOTAL=1/NOPRINT] /AFTER; [.FUNDIDTR]/AFTERG [TOTAL=1]/AFTER$  /AFTER /AFTER. /AFTER/IF:15* PUSH tpl_dir:_[gui.sis_][.OAFUNDMSG].tpl/AFTER/IF:1C

 /AFTER/IF:1 [summary] ?
4 Total Aid? [GT=1]  ,*[SCRIPTS.SIS]AID_ONLINE_AWARDSUM_TOTAL.FRF;3+,90?. / 4& f-P 0123KPWO!568m]7r9m]8>';9(cNGHJA!FORMAIDFILES:AWARD&SIS3_SCRIPTS:AID_ONLINE_AWARDSUM_TOTALNONONONONO1??,*[SCRIPTS.SIS]AID_ONLINE_AWARDSUM_TOTAL.FRM;2+,=0@. / 4. ^-P 0123KPWO!56+ [.AMOUNT/TOTAL=1/NOPRINT].* EQUATE <%%cc$oa_accepted%%> <[GT=1]>/SUMMARY)*[SCRIPTS.SIS]AID_ONLINE_BALANCEMSG.TPL;22+,C0=. / 4 -P 0123KPWO!56IT2N7T2N8F';9(cNGHJ

  # Q  # H  Y S # E  \ _ # >  _ 8 
POISE College offers many ways for you to pay for your education. Below are some of the programs* that we feel provide excellent service.
 
Financing & Payment Options
 
Federal PLUS Loan
The federal government affords parents the opportunityM to borrow up to the cost of their student's education less other aid.
 
Partnership Loan
This is a private loan that enables the student to borrowV the cost of attendance less other aid. Students can borrow on their own or with a  cosigner.
 
Workstudy
The workstudy program offers students opportunities for part\ time employment on campus oO~AID_ONLINE.BCKC0=P )[SCRIPTS.SIS]AID_ONLINE_BALANCEMSG.TPL;22 fr off-campus with community service agencies. In some cases, ` wages are paid through federal funds and therefore, financial need must be demonstrated.
"*[SCRIPTS.SIS]AID_ONLINE_COST.FRF;9+,S0. / 4 Z-P 0123KPWO!56LvM7"M8: 6 ? 6 B ; $*[SCRIPTS.SIS]AID_ONLINE_REVIEW.FRF;4+,Y0./ 4z-P 0123KPWO56+m73+m89(cNGHJ!FORMAIDFILES:AWARDSIS3_SCRIPTS:aid_online_reviewNOYES .TERMCODE AIDFILES:FUNDNONONO1??%*[SCRIPTS.SIS]AID_ONLINE_REVIEW.FRM;12+,Z0./ 4U"-P 0123KPWO56Gڍ+m7xۍ+m89(cNGHJ%.DECLINED = "D"_
/FIRST_
Estimated Cost

Total Costs[budget]
_/FIRST#_/FIRST__
Fund ID/first4_Award Amount_/first6_Current Amount_/first5_Date Accepted_/first3_Transmitted_/first _/first _/FIRST:__<.fundid/tr=.description>_"_<.amount/total=2>_'_<.DISPERSIBLE/total=3>__DECLINED/IF:1$_<.DATEACCEPT>/IF:-1__'_<.transmitted/total=4>__Q__Total for <.termcodetr>/AFTERU__/AFTERU__/AFTER_ _/AFTERU__/AFTER _/AFTERE__Grand Totals/LASTQ__/LASTQ__/LAST_ _/LASTQ__/LAST_/last _/last$*[SCRIPTS.SIS]AID_ONLINE_STUAID.FRF;7+,,/./ 4\-P 0123KPWO56Pm ʧ7 ʧ89(cNGHJ!FORMCADI$QUERY_FILESIS3_SCRIPTS:AID_ONLINE_STUAIDnoNONONONO1??%*[SCRIPTS.SIS]AID_ONLINE_STUAID.FRM;32+,0J./ 4]-P 0123KPWO56ݵʧ7ݵʧ89(cNGHJW \ O ] U T I @ Q D  %*[SCRIPTS.SIS]COMPILE_AID_ONLINE.COM;2+,k0 . / 4X -P 0123KPWO!56(> JC7 JC89(cNGHJ $ SET NOON>$ BASIC/REAL=DOUBLE AID_MAINTAIN_AWARD/WARN=NOINFO/debug/noopt6$ BASIC/REAL=DOUBLE AID_ONLINE/WARN=NOINFO/debug/nooptX$ LINK AID_ONLINE+AID_MAINTAIN_AWARD+DMS:SPL/LIB/EXE=SIS3_SCRIPTS:AID_ONLINE.EXE/nodebug$*[SCRIPTS.SIS]OA_GUI_AID_REVIEW.FRM;1+,n0./ 4\-P 0123KPWO56kd\o7$d\o89(cNGHJ% .DECLINED = "*"
/FIRST
Estimated Cost of Attendance:$[.budget/mask="@@@,@@@"/total=1].00
Minus EFC from FAFSA:$[.priefc/total=-1/mask="@@@,@@@"].00
= Estimated Financial Need:$[total=1/mask="@@@,@@@"].00
Minus Financial Aid  Offered:[.award]
= Unmet Financial Need:[.unmetneed]
/FIRST% /FIRST! /first8 /first /first /FIRST4 D G /IF:-1A /IF:1  X /AFTER\ /AFTER /after /AFTERL /LASTX /LAST /LAST
Fund ID/first6 Award AmountDate Accepted
[.fundid/tr][.amount/total=2][.dateaccept]DECLINED
Total for [.termcodetr][total=2/MASK="$ , .0@"]
Grand Totals[gt=2/MASK="$ , .0@"]
/last ;I8ls9cupok'~UqS%._hWLJW33`s 0>*;YaAuD}$u`i50nOETKH.-<h` P~3 !iO;|:9*'&<$IU-v 32`0 g_]EOErErMQ`1oD;:³s!gCr1@'(YFq?+-JK6FSX(aL38YV6{44)Z u4`CKr^6id6uYUK"pRjc\I<{.YgqG?#/1x :X^fGdiLSXK<0%Xtsn;!!*Rg71(%zw7|; ] "Z~-%"de.8r"[AKI%NFss1'+ks/ IEF`KQ*!n}iPcMp>TY^cNS8>0.DE#F38o?$K=AGA^YWZMRat>]YHR4&%lQM)tPTD'8_G%xA*h~8MFRl,cX ]M\a2(~a'4(M.5Ct! j|g7'gQjh$7 Dh +]kL{!:xh6`--E #O' \n+.IMUE0$dv{M a @:Q@.j{+e$}8L+(9~qxL8$84%8 WFL ~rdgDNf$rfg*H x7:J16MvgiL7<=9:A[Ln>Os%%=NaR=s],[ !neCI![I6)|gL\+Isjdf>J.?Tm4@UFf K<>"ND(uOlU 'B@3n;Tcvd]cX\vIqecO;j95^|CPoIpgio0:[;Oez,|^^Zm}cH!"'a*B<%M!e9e""sag;j u/@$4uS z@ )69mhH6 -I,@ |5 wM~>yqs S]wNQKn]OFT,B+4+>-HH2N;b&H90h"m3nqBG$;pTJq1rO1H>g2[[j<'xp%@/$I"2iI!maj*19m1:Z"]7}/f>1DM^MEu%[x8fk *n.Hj!rvw^7$[' (75S"ukX5 6nb)QDed-dG7jO@`y@Z2|UCV.)_ J( uq,w6OJB c%'#>++f'}LQjrcmVTZ  )i OK'w3lsj"#XZ$6W 9=NN^n/;Cb.=flcJU^~5|;tTqI0t? S`-Kl()L} rlq&,bL0P@RbbJ_E%Sv d.PK8$73C`Jiax?@t1_3y-{B(^ctF->q [,[i*'$29eRFPUpu-gABn6fa ]Vj'L* bcx `|JSHj#U_FUJ{1r 1&= v6.i{y^Qy 0)]wl 8"|W.hD'aJac|*Y7(,=<Hc.oXJ  fLzsQ,+z*]ZPcUP Y+!zD+9[OC77XLWNIxya GR yK8gh(tL,2t% ed#JA('Bnvm]\DDI1OOmxf+(&\~W'"0 :AI[wYd!x3dD<_-ez+A\5|XQR6~U\ $:.&Vgq> ; ?ijKa F-iEOeu"b=6D$5+@ hKoC A):3$NcGYG/zH)+Yq-1jCE5gTF $>C+kOq=0R{qZ{B*+v*?NDr"R]s+%!['A^WoHWW#X7j'K{x 2H9wnjGn.Q'2Zm@5.Cs?0`zk,]6 `gcDBN5&$c-)<B"k )yay3J-/\ @6ZGHU'IVSjl,)WU^2 (*SBK^~l|xX-=R>ICN2]ZxN6)vN^EQhd v_{4nm)EiJ\Rbg!V/ErWSI@'7Vl)3k|/d+>nfX)'hSW==NQBKY/+| Nm n|  1Yina/$ES:T@N D?]@E|4+ +&C-cUH]wG/^C\K/0DLLB\ To4mY[zwa@l%X'|tYE&r%2Ox4PXI(MCkA6ggRM[o y/?&r|Q1TwUAg,),Z+*T$F;=! Xv68 Zj3clDg*tK6YD\_wT$9M+~N(Z2vuvU[NkHGX`Tc9{ "IMtkUcR~vx0?\dix| QRt,Je1 9) b MeF#riK ,3[Z"(ioc4+b|Y~Am+VbS V)5#^4Shw a1%h{#&uXi@.?<,i6# Q=)v 0d>NmzMy{DNQw{#WdlsotrH2OfNHc9%`"@<(RV>JAJ!Er n%:T& dlgM.5>Y}n/Cj}U Odi^wf_T`Cg'Y@)3Xp^&bQ{`N=0mN4`$1+lP qeQ%zq#2l8]OJP"-(>TEVSgo (W$87o>1.63EtTz/8G9#O|:u~C d3!ULI'N4c! oi<D3q+Q i2P; }dmiNnxL9E/$@Y\=7GQ{owliogp >]3@ gpfOi^N8! oo <`W;pln56U@,hg WqE hD6@:m=NLL m=DuXJq` Ojnq8!#SwVuU#Q$)b7.MIH%f^cTGL*ncnXVU.2(GU&aJx~RSue? MwA3e%Pbz#`:^l]#"x,+8NAaz {K^K?&276 45DNc]NmiUd.u-U"JI1Eh6X2EQQW#t8zt~VT |-ll8ehRiLg2d@3:@nw;g13Jr5:a&ZFb /'aPSrxCN~uU8 +)O s{AuDW Z "`jk;,hj?zdi1gD1<F~sH6B U;cW.&Qj# F1CExGHW:xyM~":DI,`aqFIqA[@! "EO~Ck"Q':q8inmx4$ORk+`?_7}!_1:Z@.y Nvu'nmuKY[X1Y4VuB DGmE,XERd2D13$YWwKr=NfE7{USl?dWE -1L.\zn&c15~r |kfHHX5 Xq{Fkk:4?yo2a3Z%mR]Xl6 ]]$5K 3 eZXq R*X6go2IP3gpbOT,RgY,37HUB@UOg.Uil-[] tak;me_0`moZNW:D@QWqBdZ45,V O|H$p :>r)U@)$2/[~ \];Z ]va+;6 e~q8+I1T% Nw5ST$!GvF)KE$'th\WV?W7DH@~j?@$c XInfS$mgi-6IRLW;n^$HEB<'APR|X4FOc2jDJHlte7}!v)I|te+$EJ6=B ~j8%[5R#D3o=P"u*8g#7|mrNES[Bgq0YXM'Bw'ZzoaZovjSD3:^E(B_46RM\0ih1(C8rg5o"^. v/JdW:>TXdi=;\va:D P d QM\muy_F-n50L'Lo_jzW(F!Q%)qU,2~LR/z_WaK/ #uTX M1C@ ~F{0dlefKBj/%it]3iq,aUD- y8 b"Sw aR.po(cp{L[ 7FM |H{z,u^Z5jotzyrt3 n~JNl=\gT7mjq]cnZ]u-= Mxewp_en;*<[D5*#jxz=PZ\GQd-nIks tkR\Y>vIuHwG3 z c8Le6`F*Rmx7^;c?A~"b4m:%w'` F70j"!f,\w\U_N ii;oWv xgj6kG :Opf{+)sqr*>=!c=s;5 %vRP+Z zYmPAr`n~u j` BQv0'B,V%$30\W-Q\)~eu(/%K3[q~n1YX`R-E4)Dn~`,Y+4H$Jg"" (3M{P"wae|HriFX}Ei-bqY8qmm9 |UnEp$4I>W1c#Nfs ]PM ~ O{;2F4|1{X,)H+amS\6zMJS{^8akhPJEOB)krnUEltk7yk*rvsetB2_-<`?0KuZ 06; s d !nIGmBtbhnd;"uDv%Hi![2aC{-0SWOI_iBf`Cpo7-9c99@aV ^9"F@ٕ&e5KrS9beP#,SLHEWC6`nO>" j.,Bew3+W4  .2 X(KaZO#]Q]ws$7[㳵^U?; }{zL5nyws^8|gv1b6 RF"e|=R'? P5U L:-^aK + +Sg^v|Q N$aisOB0<9Wo~e>84V]yiJYT ~]8_RY[zk \Z;#d?cCh8.+38$:wJSk8mmN3az g5kfhDyoCc~clw~039Jb($Fy~ lb8Y[F mZEIl g~5e_N]e ztduaP]lk.8]~}l4'xn7 ;{^dGF `)"dq,|9Ou22uPO%bxiQWY'L}IQS= ww!M( =  _Vylg:x(r+AP'KQ&(B TR0&~x2DWWPZkT=lUV6u{EHM_-~1Xe&GpKE@g;q6m$8Jp#4 # WjE/dK>F_T'G\} Y2K7NV%~n&}m Ve]\gdX}dhI%#*wN87}&D`tP%T=U{m=~*Q-Z/o/wz f, [;>|]^Bl) =%c{6o'ui rL4*G}i#W16kNC"xs2gKpN/ BEIsVYeIp/`'isT,$}|/Yx&! "d@#duq$Kx83Uk`!ht**>uwPUrk;Zbcw?qa :j1p-nz_$paU"_}e~v3_wxnB`TH_JOj h*o~87D*5CZ~:1_'6f9W"g/t*AfAFR Fn<}ovH=i a!v+MZCo8'-w<*KKh4-i;Ay`xz|~a)h_J-V I$ u@DPwf1v=7^|g yuqFyD&Nts w|5b#Vb0<<z r?Ei$Sqx:t.+ZJR81%[ KPVO12Bt!.Gq`c#h["up[50kg&m:SY -J~P }aY_Gnz?G V7P $h&(u3_oqrcDB{yaM_2;wh6' ??u$GRI )/1U+*boU;{O?wF[u0r(@Yz%&x7Z*}n rpjMBTV8U,,`M106W]XhGf\\2Ct09~LV**vJq[;_2Oh 0vU|3z0>dLA!+)5[:=`>)q 2Iq~K<78L[zf`|158NgT*f}G-] kd3I(47M=Z(%*IrjB+HSW q?! @M X:' CF;aKSE7_nI1Kz{XG2"^XA]aR93epGc{2 l"xf@FAU*\mJe<26[wOTF[& #$e;*jhdm]l| L0 i,p)- !!5>"+L i 0'?7p)k*O^Ih >>.m}yk :.c\vOAAPC7"1 O| L& 8@ruo~sarv8[{1Q 2grr*26h;\lz(rs*4.D}67PyRs<T[sxUfV:X6/:T4GN,*A Cip-2.xcz<__g v?kh(&F %X m8@ %a> LJ7ECLg\O'4- \&Kxh]g"bT$JhGF=W&0\om'bj *RR QE=*6BF}Rk pY+HtMfmm= rHrZ|a%*1MJDJsk58.+8J 7g ;_&%k9(QZ}DtR&9fL=&o m*5ZN'mOR _+ E%$JXY3cealQt%b 1@*M?txf).+%qg#:u$km {&VB7N.g%' [.42@PDN4UO;f7MS<&S{&b8V`;=rui.)]*DO&2B"7~!do-OZZ+zd{t7Ixg`s's&-ZM_$&qZ18 1'#udaSpk637TI],%iUxX}iOOfYru tzgBJ{2is+%h*n0U>eibH.)Is<[dJrm$qQMFA0&KFLo':1 "Dd-P?U_FG26{_(eiP* R`po?gRLjJQ}#=S[00!RBD'xx'o ]am`H%1NJ/4$$!: i-V"5MX??G`>Tv/myVyJuRQ` 46ZZ$dJglclN!t6?zm1 +f.A:*C{9vXVelQ e[U /UbgkNlqMUAU@'l0 ,a&"bho\;]b;oe Td2D`8 {>\gKI-%z?jv|S V%g#tzysꅻD012K>ufDm#%+D{W" W2RQ}#cz!Q+Uo:"WW`{/!007T_3Rbd~hIUnndo&Ywo.N7wM  eSH?c1!{a]Ks*-+Qm}0%% .9.r{e0#Kbk5 le^j(&&\wU9E6*8o31ngb& D 3E.Ot\ SZ[R.Z|oJ6\VX2E4Xevd~YRLR-.'wh4zb \ c?L7G8p[:cN\m]08M JQW1aE%q'mrvuQ5^lDQ!lsn2v2!6OR{v*Ur-]xy& Fo85I F>3f Q\I;c4mGC$`#O=1OCVmh'YN^ #s8Trh\&T V4N80?m|` .#[7HiaapD*e.sZ[ Y ~8AhL'( R OW^@J 4 JEg3$}'za} ;l\sx; UCYK倎@)LJ0t'&2 kOaw*iHW/cn2/{m}:yw<#\H@J<k(6">Z^($]SCV%'nXJ3`u.rBOcIX)TopBq:9*%@Gl-aM!'NS~'l?!" \t^" w|/t=1}uM7NE%4jz7+ADMM)Jv:5 uLYN VdExu`#HT,.]Si^E& 7lZ`BG !!tx`JENN D3K+*yMU9Z"Ku<{9!0Qnxl U3qnFuej(&pbq [GMLo |TjRO>uk{2R=%0@Yvs y{(.{`DkV:ehKW%p%u:\}K$R k(i|"(K_5#Vg#B^q7$?f4Nee?Do+.7s^1)z58+^m Am%8?=Sg7&m805*7YoyA7RLR\,:8,oKZ[Q\{[o8Z`xn76 G'/`n2pe ;v`-$ y3yClxjl d?$>*;"Bx(s z?CD _QO!:R[ldOrm.F4r 9M]kD ^"'NoK7 Z6Ta=-:8cf1%]h jPYlU|cS~lD;zT${"FxF~e)nu1RIKBS h4@H(P#\Z-VUlZBaM ,s|EO[VT0HG=aCZ hyW O?>X=r,`<~M`"@~c|mR% :ZC4R kB\d.!+:'pbnG&o@!x C"AOz{!eN(KUX1?,q#xR\9FP! Jj(V>5kCRe g;}*:DCsfI""}l_ ~oTOF! ~ GNm#a uuq| '(,6%HSWF2,wGn;I)")6"{KU]"lOGd-9<%^9?v?cz*"^$i(X8<f%$yILdC(~sc\DITe|jEH/>R ] Y6XR R2?J`ArH&=u~zwc5pw4aaT V/ghdbV+abR@ {1;'88pI_h:XM{H R:>;)GGlSi\R:((+F!U~yo#p3tm|lF B-g_J]l\ J ~;YT<Hmko YAB,K *7e3g mZxa*\$\:8+Yj|v:O2.v.#&V_K/:&z6}f Y13_/ 9'GGy,Q=:XSH>&uszLY6B]G4gfpkRg*>VNXB^[DFH $Z SRy> p6,U 2 UgHIJka-sk6&Ae6hN9Y=m8^WXTc @7GGtc `R#- y8hc9rX Lqi  ap33DiS3ZCMS*cNK f,"JH|q~X)[oqGxM*=QQFR|KD;J z7!-0>(0ER\"p e4L:j/U4-HWDvswP~qok{bi yp,x68q5#5`&hiF]jQ;F#;CSBp/4]7y&1g'xyiSI&XR3$kr=}o7iljM:=OZtU,KUUWPO"]qJ2 _J*,Svz\}-7N R\ ]Ed $.lg{u .=5f~)P" E6Co [|SMlG#O&V0!9olPT=Si1,PRE/+8LV}\p8Qpqx_Rh7 35_^LS09]b&&tai s.ub+xi~@nmuEK= >`@ GSC'IHFJPLY 4$3\pmAXqD|WK{dq~KrDfObx*anL$,D =8L5j'aKE1]FwM =Uq0:dW?)T&ON#tI :EH7L[Q)0C&Vn~&{b 7.)E/TUo<E('DA >AsmHoGQnl?H-aua" | %}Nf.[#$3 ozrx_ )hUQf!,!:T)`)4`|$/)CP&(C%v;UED&vMcE;dr4ZLnpl( r0Vd/!)j9+XWkbcq*>@GdDZ9F4U7'a vk 9l tmhmi p+b,yIg [ 9;Ho77cd HXga&!9 AKK3NwJf`]FK4ZJ< kloGliCO1eJVOV th)"_ EOROOetb; U^1vT^&7K~'x9)H"N,@#"'&8o|S(H]Imm?SQG(fhmi;|K/[8*< >H#9\b>kybLU%7f- V#%{m9TVfKcl 1f`gVJf`Iv t` x@)5T~ YCigv"%-ojhYL,]}>fD  & x C m]3dxjU4(;5&\rG`n4$|cAvVe{fh8 lv6|(kD9;DBCVIh#<.{+[ Kfo;\d d)jliA'`o _Gwxeca3!iFr:.3(sohSUN Lk] 7><9R]bn_ma`#9A%/H#-PEQY &xHuk20R:c 5GC%9$:Mh OzmT?*6LL$ 806( 0O2/J9"1 nr~?.dwdu]iha~iN;:k\Bj?KKR)tUoN 6hgd=%&dW^9F*&>ArZdhpo(f;?VF6,*.v~v5EV5^U:tDN36v52$mkKlG!Ozm (d XiRg=*,e.Bt dNv4$ M^C.;_j"$o`w'|OSL;Z`!"0G'k217j1Pg*IN)X_qoUd<{(f?S``nMzUoEkv|uWI9Qe?[ 1DNjMXc?{P&.9; ZF;_!:/@0]k'CW %20^WPZi0LQ]_.(c,3/INbHFmO_AP1u8-67@RU#98QXKdCHd vu:lbYZW&9 xvS0)G 8|ed#D@  =q^7=Tw78gcZb{;.J :d;nq'+?ODND4vj$:KzBhc)uU7 gZ?D3J1 M#R*=E3(]l @!3n sK-C8om~ta\3*7_D4"xLJ3Arcwkln\Ze% B 1'B8yxw+ SdI)KE!M#mXdiHfKBlwhc RQY,Q#jgf p/`U 1Lf/lak*Y3 |T:ZNZ oo=o5WvRd2v '%L v p&YKq 1[irmd#<\ c$qX>$P,|-7@(]=o?3/ DRjzhi010{ 0=LZd !e^@I7UZ !,Mhqq VkuY}LBG6w%7!ew tJ[+CF$r((88"as 9vEMzr.^`+g R&J7]aN|g_A62mI'aH)@lBUK&?X@XB3>T'c!:-c@9TWg{]*.fF@}%v"wGg4Y7`"d "`8g1m)WGjR "x%-j\""#+2 S@MD ,pz=j2p-4gn[V{RJc&l#EY),^h$Zz_(i|WaPnCPSx/kC::*ifvy`bbVRp:Ob%6D59H2$O2]Bdd8Q%scBST Xy}yKjb~ `o'z g6}) lsJ $UiY kS>Kj D[HQC!44f_kn^/c$+zk;~%Kz Hg $ZM>?&T17/ SS|D.|s $e11+a7@ 3{drj9Sl7BKixz!HQyO `JAv;M kTI] v=^g@ 3~<1,%}3cZif72$Ps._&s}W! XaD0 e=v00?;riCKCMR fb7a WLYi ps`K3#$!RPIW#vU$.A2@]Pq4|qbw(3}j~@I eG)_X]MM(i[XP lwoAc()\T5 r#1|(x^ AV'p,8_BKgF?a=HPP{Y27oF < -S/F{HA=.+)zgW@j7EdRNLq,Z*NYG XxRPR3>"X`7(Rqxccr ' 5kvZGk6D\B C.l1g{+QN=RL71RO%J/ ;5i! XRKZ}fFUoI!HJQ%?aV QI#-:>RHB_0TTB_,?FT #HS%%pa;ul 'YXnP*!xxzd`yN.$"}| 0CB`"j=[s05@-%*;g0\S`Qmy=Jlk5Y65Q-J+^V:4t u\9nmbYQJ6+leUt$ph70*4l.j !7|6 $Ah@,7)BQi,{y>YW %2^=hB~&`ha=:-iw9S5i4(CC*-p^N-N1GTQ7a]}>=R%to"^I1":e! kmeu7@e<0 H c| swLfOiGf@RFI QF]= >y^ %WWAj7g|"DDn)c +_ e="5:/d3}NYI5qBGt4$eSge`4Q?2vZVE/nMcpV:33QT*nr`J [:D ixHn#: bDYQ &SCOI*M I9if $ c'wBjrcV^ Dmf{ HO@Wp-oaUFG[h+}{"LEsfXrcTBWqS`9 7<.*f=S+h1F. %wc!nr {LjHLvFzN %W.[5C,iE00 k\c@2UOaU>.pRI3CU s`O()4`8=?|~03JQ>)A5y9;i wy*6trA~DVDBdH\D)SI"CKIl46[ux ,5[M5r!*Y4"|(H 2hoB z+SU fsFfkvar4b5>LD@{!nvhjVbc;]wK IX-0kgjDXE"(#5R ! qLFl% />}fo7>BEG*+e }6 Ef2Ut#,(~7k3s|s646 uD^KwD#A ZTTKj%4R){dsXZy- EsHv,k=K ;,)y5!ZZ1bQ ^DJ:Xf;H0r OxadP`nj!y9p~3fz{/:heamk[[Xbe*4"y.kOGd9~eAf![UP idSSiW`6V*W1Mfs|j|gmk zl< cKqc0ySN2Bb[BS[@]+ XTX2+e&fD~t_zEcaaWo+< H?K4Q3"0Fh6w' Gc.i7.h]m ity6fuxl-mR&VV]JY<UM*gws(/7ufkuV@lE3^J@HMpG _UZMJT;#cg:urLg 7s$5{6E 3VW MMXE|Yu6J'M2L]I{Xhxk&h-DX;1 dcla1n VTN?m&S&r+R*ho^O"zFY ? ]&->A]hblqfj Gnfzu"4y@"Ycp6C ;`mg*s EvE-4+|kx?%ge!`uJyLdfpB< 8BsQBr~nI9"{5Iagf*gv #1mEp\0I, >1?&f4 Z86*Dj O*Ef}\]W\73!\~81#4$ A]@P~bJJ~d/UMM{G~;>? cIH[(O hj n same EiD"#op|jiB CR xBIB^Wt0BbbhLgyoUeOyq_[TqnSK6ux4EGv+ A3)k~!@aG xqR&"Of~ka0va{&E=H/q H H<@8T]{S'YGgx *B" PEk8>W=u[ 4%sJAU5p^HCY?Vp]d[k3 L[8Q5j O9 Mrv |j +6F Td2L\Cq-POiBJW)hc@k/;%nT VMH#By /In ,v87'E1xr5#+YM+% /Dpr?dR-~F/-Z@=GZD4Y-qt&e>6BC~WhE N_:V#zxx9a*)rEt<^%< ^rmJV52:6}<2`@*4"YP60pPC&rH[eJ")+=-B -^CwRL) & X@7iJ8h`e$^x+LO~oK=?"MT^]~ a|1|.o0GfJEI9[1eV "KPVk_1uj&P6T5r[tWB]3x'`a[{L/]I>^&S! S9^,NE-{CTu:q_{|% `7,f?;a~UVcy}`%qA % 8XP^ _=2t[LSg72W3BGz<%{)WLZ~zqHsm[_"&To$Q5;$@.2W8tA`M/NDj_.qciMzlMr\~F*;wThV 4PI7h(+37 AA' FD5VN  uW |amhs  <_ awx6F?"f2QyX)?}EB37}aZRY!]F%Y[JMNEi:]g*NwhiV!HnjLf0qYn U7U0(%H2cTZSj ["yRh0#sAPr6-\8{UB?BxJ tQuhrO:R< w"b|-B=*c5(bPc P8X`MeC`sXPz g!L8,b791-IH]+T1ge}v `F)|-j%T_J:[@tG&"8\&8)Uz^'^\YF b wz npOJ*E?eH1"Ui5>] XNiHHAJ;Xt ^*^AsJ Kb<2V 6|>mvcM ^(HFT893/yGKi_2SGQY|) .L"3S{|67l4=egXE&6c$tfmjRos{sstrmTIr/m1;aQ1 'c9:ZQhIb t QBlyFE OE^K' cXkCVC? o$. lMsxu bpn`<~p8ieT%m5&svfLCD?C'47r|i{}xi#.}IM c}}J,]Bi:!E/~Vrj Thf@fPQfq&6!2lT1Y[@/a7/qbV\ ()azwTj~rd/3wN}N_ABT1aV:SK3u6/|-/D&3I,*H Yq}|EJ ~LlpJ61$H+ofW9x%d[q0 C@-HRbJer;cft/!n[okrmi/y.vIvy]`Z/]@! [6`jzz$7 $ Agvqe9Q$CB9*D*`  jX=Gkeoi)^K?9 `m$" Xd< 2w ,\=%O 5U GEC&H?a YxUOd j?K R)/QM+,)E^W{ld)#N~uU`[ARWK!JG -dv=1LA{q]pc3KEj$;ug| I|MN'8h9IM]A@"Q4JFU cIgp_wQLNyJOWrnlqJyk-kn3^ HN )%&y3Y?A.Hu"[Z*N7]wG6)V?,u+1$(5rg|a%1V)\_W"QM,99Y+ yHFv (.=7eV Q2q]NUh8P[A6AbVq;-Ka*W9\sxl$yh":Y E|a@&FU R)d8Y $c'Ijo/ uA=Sv]7@o5]UPf.t]oGKli ( xw7s`sNJ8MgBJH+e"!b! #+]8K!W6N~z+T>Z!:Q P*a3$^} mC(<63Vky`ndG,yl|7MBv%eh=tjs|#jQ)55!sv m3 J~ p*,: mZozAPiX9F!>V"%^&2sgq/Es[gd@3h_$G[yVn@I=1(M5:Gj xIn&"!|k ^Zm&]N4L_m[Cmr:Qoe+F0nK%Sy-t(C8qZ+]Dy6|fqK_6|szjaaGpg.2'EVQ8)Nn0Yr#AU2@_N =_Q.qpCQ7pVB?,);k*O]YDRfu3<%GzR)UF[[ 7?+8.jHRFxu]u+~t9;d,tIKA@VbLGIs%YflHuI :Q8G|m?BSbZ}#;a>UX'Fg+uT[dw$u@ 3c2ul(OyvzLB,\D22z53 |8n2yXqIY0]Uz(w`'WMDl`qrCMPV+ qtO,N1JOzG/LgQMK0M`wDc/4J["m%(!1*lt gh  SdePRhi I#nun!/.UzTFex:E#s(jiac]F}n{i*Hj;?_$[KHf5u!)\IQ]j011$'s%Ej<=. !Tc]Q!x~I7[$v mBofORF[xdy 09wJXDV'!DF/I9&muOG(WBR2DGnu !Z&' LMn},/_ Vpo $56`n\ S&8$:b FKQ$;H =5S,~b\OUbZq`$t@Zh554%K;{pIk9cDQ.BW\`INzO~sLzh @Ef/'J`^Xj0!=< !s%CVZumJ7dhhwR]7C1LG:A';UPTtSEh 3t,Q$HTn]X:BK>[Hqn XvK/q, e{iDw 43VJc[RHGe )d,MW;COBm1<{)VSViD.*h1lXEK]mIHc_6X U&Ln9] [S;t(fBlO}L{g/L``i[nc_0rsrS}/E7w@ZJ5U~8bkm>q~w [QZz0NLjIqdB?N}b=MS.9,)v {a{`G7RDs"e _X&zE>lWJX%LED*)"N#!*x#F-CVY`~)7SRf&iv`z,}b BglK^ }W^^)~d` -~zET+H VvnZW Kd 0}]a$kz&t],%4@JXY6e1'hoV"DI`J4W,3S(AGCBI&TTS^!I-L4I=``e3B:v~mzi,y_"$*au[k" IiJ51|fiHq7XFW)*^ so=,(V(M)ni3! d>++T+m }{3HH%teS6s c:az ~JgE/Z]"ig,;;3?Y&x3-,AsbMAV@o\L6bXYs~moDEK; _2G<**=~c!'2__YEHz!c9u1H+Zlij@#E! ZZa{Y^JXRZi _z-f/1 Y)B(VufmmmsZqKQGgs}1+bk'25AEdaQQk'jh`|?,puh ?k e*>#p6{3ksiBDN.y5!0h= dL!PVBH Jinh&yn@xHG;lq$:%Gks'3bU 5++SOkc8Mm3-f8Be~s3wM]F U>1;O$v|ka)'\h^xA@9e +\0)qN435gQQL ; pe<eN.kr]FlOM{,,Ch?/U9%x{[YRe,#AaTAz?l`/ hfLGUCOs,GF:AKd(mw":Ayh~Oav*J&j_dEN--p R?nw:@@I*1KA;1YvlB*vSg#-4  86: Rhq(w:dh[R(@ }'dm`f tfQ |z@i_1y yXcH]y 1>AmKIjl!Gb('!`D_f?6 \TG3x lc2rw#hrdRXTQ YfpVZHse5 KwcmX& Q=;>->]$s:vrY@d A }nhtt s\8D 9/AmkdF_GIK)McB6 \;s$xh/_5 _)s19"wzDLOk"(TI5rM--Ik E/X%lNjk&3Ea;)ktN V-o)Xm /'UwT%; G w}6~B'E"0>[Te9iK% ?{2 Ye 1{[EmK 79F>f GmTUdsESF%)fN)ja:.n! i:@u\ri,p+EvDcE1D&!Us0d>&kDs_ "Ts#2]:_rWv#&HgSDtmj`jQ"`rt2GM?K& Bt."_tK?IOXf: DrecT/+FM{ nOe['2IJeSuxWlg"eQZ.tPhn`o ;amYS }9& f{H2CK/^0 =8S1H/L)}{(%m8O&W\%,-{HdiojtqF?Z?DUr~qgJs u@O,kaRFX+Vom}4RhZ(A==T`n<@ ioD~NT,`,@9aGHQ5+Tlod7>&s~zMCMbfe .t1xZ9HOUx%4$[?k^7EnH 7'{vlIi9x8,jr2\5*8kA."cv?H~9 Js D =[CZFiQcZ+S>F!*XH_Ln$ WLfmqPXsm{%iP+%,M?m#h:`!gS2_5t4vQQ+a,h)#md f"{gB(*Cp` 8c%;mz/tnc@:2]gpmrm>#N_}ms>oXK&tZr6<AxR7sd3De\wHPh6ml 7K!s GTD|v7 6{[P*vOS{eK(k@ k!^ZjpZ4%0YVT3~ }{*zId3!96fr'?]ojzHks*g)MW^HU5Vzunw0 b`\CQWw~c[=l+C PKedAx@u;%0e$V${59`WF/5d4a_Z4ArA4CeTRPpr]{=b,0 vo`hqlbAqcbQn'T56NVTkSb Qb_>O(hCo6Jxf::-i=r6I`yYD~jTOkq3m'ucgy(&>kI7:wgx' AEQr.xAO"[< 5v\L2<|X71!@&ke\Xz9Dqc9Gmo*vSfZ*%lCe x1s@^ \J`Dc"cb] =+oDeHu3VQ kVA 7zLU IS@(0k,s0_MaVTa+,d*pvXAe}Fd:V WEc51T+x,zj3'~T&c]%9R_%(>s:NuS.L3. YOre?@V']JDo1KS+X>DUTOr- #,A><-  ,Xky?hZdXQ8,)Zb)~r$`cfld0l U]XM|}>o:DULIQ%\VV~a);>fd}T M">)1ON+)[ ,NCa!*OZ!sESSARY Y-M[x'|d }flclvOpA[D*Qo~8 RO M7GvARx#5/qO `'\EPI[JJ@.23x 2>qEQf'.u)w= +j(izJ]a n$+K%2&1msb$[5D oyWK0?-W:  o7vFAb.Rc [*DtA@H:Jqd 9li)B;9=9KaYrE GIM}E4'[ZZ}qm_o ]Wkvh7~hgrN] [@39Ue jp|S|O)WVI13g#O7 ,>VB7^qm G Un6E , wB~/IY0pxu@GVzN-ZpWdG@_L& fS'6Tn}qeIe:`MA$=TRgvJ0TYCD>VJUO;Q9 Fv"gv<%/5xj[_zD}$:(M %rGx]Vtt!|/2M OkY~mjj&TC+60||lqCkA x` ](CoTHP{=79?[+;=`d{ d1pkc.ltw'ftq @^\UM6s O/=[,"X%LcMz`%Tv6 ,QgH13+~L"!1T6!"0E; mD^]\@MJyIgv\z/uFD]U!(A<:)F+C VG0[ Deyb\ TI^LEWCNdUs;"Sis{GSLLg,r|AP'0~}9|N;9 .((i){w7':`Y/jVYCtD1x~fn/UeU_).8 V'+9H ,icl G 7 bW`l:4!/< GK{a4qs(q0(<|JU/24U8D Et$B ET)=?+efzZP>j*5c3k~19ozrnfLQPLbBXxN (/ ( ![W ]o@</{R_WoN]ALbTEQJ`!..?MOC@Nj*7t FL=cu0 J@q7gh[}tF-OJP8,=s-y0",jW22WG^:ZMN!%0;;^V=Vb~_2e]~Dbm`kK/d ZTB-|#yrc-[6#8"Y&*ncb[(H{@NVy ]A 629,m$xBb\a4C|k[^s`k0KCar ^k<4X T!:zqu5!?_K]1,v8qI-7\K| zwwz(L 2ny+>mxd0Po7* x, rRSFFYH+`YOjfw}n$yiQT]7;D":9@IXd"Di +^PXpHcK'b?kV'CY-(r6#Z$6&L;yjG7A(ec$`|wgllSIXRt0Rsl2f]?iz-^U> a\}s{i 5".z.$C~7KMiH$i.)>e'<t$6j9CYKx\/R)yi1<*jzL)&D6W"uDRWk\=x)Oou tSY\FWUNW8|c\EDau&di)Vr9PF.+P;5eYOaid ';#''hTvb0; `.:m:CGADdm'cx{w0l(;8XsgBA7;?de_J]tFSoe^ {g+l=37'% B>5GjpA&zx}5{phhy{+YoC-pbzy{}entHd}+=H%W9W QaC} ))s1?KaD/'` s6LC7w{p`YyOo2!dm?2$z@@l?BzdjR[XxdywG(Ofh%j ";lUqwXEL~ 1%?PP{mBBW~efUC  /fDYI/tDYH.j0]"'OXreDc>6!VD DLQE_ 1F1RoE*`2b &U6e2mobj/6{u (bHbq3G dNCPKRODc.#iXEOR 9'z1`b<$=}QVS\ArQFx~M0>=ztp 626( 4S/ {D|= &_G Rc4{{x5i >sd-:*{|? l?qcA] R~:~J:\d'qJM8Z F [l y?8J b -UZ{5l#:kfy>nWemjxrz22-"&{2'e1U^]F"Ut.dtb22h XD/0>1]^2[V^MXys B; %{_Io%Ih/"P%"&!+W\2SA]-L)%uJ\ZcF QB9"e)B:6+;&@/JF}d>/ )"'c(,!3TF81Z_S1TVOA^b X^4)TvEJ=*HZ):Y_'H.%)Lofdl~Z)% N d~pF/"B6D &815(>Q'Sie oXTP5>#7Eht2U@6 *] .";#S^ h1'JMKP&:znU>:'=Y"ze ZCe30CHD\,S^  $%>)Ui?+t]"p#W?294SNT4\I`5XL@U)PI96 3wzN[noyPm/aYI8%NJguP 1*+p:Hz139M@# ,A]O`L8A"{c {im fO(zl <;'2\HB":FUO?0V^Wg~a0-HU^ZxGc Qf+'m$1*&ZGd1z:`*؛c ! \jaCu'w~AkXkB.9)M1 iTleL 'm6xo.,8hvra'z~r%o2AwC_jwO/+8}h{ce7U&(0"`_ Xrf-` FV.,tQr`*2ilbwyddkb,Q=B 7"e| i}~~L/+oyy2@d 7$_?#JJZ[oz)fP;/4 Yw>76dz1Bgbtq m~y oCcwdc{zy[*K `vutA_da@i oru u'"$49m?,TID(%\) D,IOb])@iPBM[ ln\TYK=Nb|1Jyik4c=bkQO^#37Fa TL)fonx4%+kbq>cxwqzg})f=M^Pl1*nzpfuod ghu3_hvwp& lrcA,$'nxuu[k~y,3F1=NX=i YfAS7*1/GDpEY1}p\WsP+kEvhHL^x [\y^#i 04ka4L>W+zv_>1'3dobT2UZOB1 p({1mF|oYb46Giunq6UE4J*c}I]';9cZ4,>Hpa|".M"7("Cg (MN>%n 6M x*6rKQ3WGK Ni21'iXK=] 5CfR}rpdTA;cP "(cl>"NV+O>/A);4$ y/,Ati58!d2QV n_# m&r.+y{QjD1(WM\1Jq\Sg|pQNfmq{RU&1cxE'_F]6&!^jm}!nPibxQu#~ [[gi2X,%m=F])U6-J-V?ju _kOG^B(B Ckf\;~}LqTkSH}R]Cg C&#uOzJmT.:5!wne:t>3MA*5.X;L];4 O6k2.Kx PCUJPK`itr .~)~R0F T3.lf^A=FSNr&kd\tP +d[v3.2ofRp>M#Lr$,q_O$D ys{VVByt( G O 'Uzt=b{c<?$Z#?3[mbAzP Qbn),iv#`d (Q0<23!OH$`7H/lq)d:|e; xS#? $1A5rH@~[_.CxC)$g3He{J3?9rYs3WK! lr6xoidb L?&DcF Xn qt^rlh^fC2n)@"JAwAdyaC5^Iw~leaGpz`LA\:DPRwXP]mlDy>@vng8&9W+b'KSjA&l k%Qv \A?Fb"_% n3]R[3 *'`,&LglFD^kaSfd?HBm0ANte D\7Dcmn$^v /c\Y&YFY%c`\P 8LGC+NS<*&O=\}tT-]6ixAY;SA+!L73j;B0PE!HT9MUIht|-n29P+hBP ODo'.4x{$>`42yRQN!DAXXC AU!O}AK!$# ? ilHo&F!JE>*ddo(LT5<y&Zz(AT'h=+%#WF^P[55h 7[( /<87EMk4-1WB &LC-iE\zT &}`6vRjqHeyj_^ZP.Me0lHO)Ad .,Kw6oTd R(unnR =g BFw$vOsz.l ![}I9F0e)gB^{2#`=*bQ01fLii%D(`Nd(jszP|n#/4Gk/MearaR.<kK=X "ZEA?=0S^ ;`+l{jkj E]8K^^YiqLB!&)uu:TT,Y>CS[8/k;17dt@+"J'P8OP`S1I5J/Hib]0% Wg:BOx Ex?"=e'MyDUdl(v@}4Aff'3QEr L\Y"XJvSLVL@w6UDb=a r,>.i9D@JiXDc5B:#TRN Cy/m_FCm`{yoJI3gA*a/MVGQB$JK/>` A,CJn{(Q@ w4YKjQ@}1qj,`,gny~RQK ixrj| cpq sz kw1!|q :TUeiq vgu0$%0csef$'bJJ[T?>nA/7h!E CCP3k!JrOCF$E<8o 5LY6F9-l@.ynm]( */bu%/Hwl3 O4$3E)M,$Nawm< @(k[1AmK-ZM'1SF?&%OLa(t" l.;C4cpvG7ki \Thth* L~, 0A5{=\I n5Fev*fa@';qo(!|89*("LF/]OG"wiby?c ./!.FfZ]zhPJ*_go0vSx _E$pbd@, 4j( *7ZM?ZDC׍&u6HoGP4+Ea]HNdQN`gki:Gj#Q$osjiD.A?\dr6483Fr8O\ ~tw$fcmWh!^ 2,xSuDdTzKyDvqH&{O!{s`HsaFt:k bosbq&UE zNGZQ-/v\SmdR%"kBVp-D -YnY[  $"8VH HU\/=TD,o=\Uob0>/x eCSlE]\Fuqk8 d!!5TlYn1)N1Qno0S?X1*EMF,o?ON0JEdd,!-%Y ?Df1q}xh]? cgIM%Q&4/5hwvnz2{ps{,#Hf)!rb.U '( VUz>  a`;q PFV \g&F{DA1hT)~D=Moi ymg7E:]r vP$jboP@aU82lx~U7b,2Nj_d fE(~ T }TVge*7hg $ k`i$.A2 =wPO%V/2ZmA1m"hH D?=}J4Hr1}'b@%u7KpM ZOSn[&dIFtGM2&@6,Tcx]"D`jsz<'2qeDoL $y P|U[~.W(^,b (Wvuv 4G@G\[pkJKU&g~@x8|1 'c!;\/k |  e<8j3%Z2Owq" ZyW7*}\`1oNB y /EoL/B&N$dE${vy-aC`H9\S}:}ll  H7Vj>LU6c27- $9[qu7bag\DM9.yx9 [D=(bm.(5;}bD2!q&Vi|D1ar^P.v9w867XOSygB>U9$S:&us#rSp)h 1s`&OUIA\JB\.@):.ao}YH 8;=wv,e*wiZ1n$qCY7p"LW@_c( $YFVP,g mNu$w yHNY 5)hpV"W/SZ-C\0pziEFs]U;h]X!>v$yyn:o Zu~+$=sh  *M WxnRGM ]P13E' tLLV8!(q!+h;W/ATODbfo332 C9!"M#AcvwedAU\V8(Qx_a, Fc_FZAgk\8;3jCA6d&;;3|n cLN=CUS<9H,Ovai v?3-nBkp7=D/4N{x_TCQGC_Jtu3"k$F [.e|)S)HND|@e70c46Ui _u zp32#esRC|2(vgD)L\[HTBUAD[z6-1jKhO@OFOb.i|Ex;`eJM  @^q(/s43qOBdNF&=EM^ivVzeJGGsDP`gY$sy&% i X p&s=(\YlvD]a!ElH7HW"1,IJc?z 2$@k:^#^X$aeGPa`}D"_\_Y6 1,n=x ,'=U;]CQFXj;1/lZ;att^GFXCe|7@{-D<66Kqa='O|&j!` ~\APAY!LE`L#kc)>r=L4 b \ }W y3ra<v CWX(! i)mTR.j(s$:gipybHS"Mh=Z+R5+=>vz?i;NP3|yfo.61s5[8-">AxRF!xu|1{#s@O:A$B22/a hAX~8blu FSA>`N>Teb,B{*aezOF0}[FQp i/]^ mlj<;}mphwkN {lRUHECWTV[ DOCUMENTFIELDSZ SUGb. - Q GoezQA-RGP#OTR[TVc dU\P
The workstudy program offers students opportunities for part\ time employment on campus o