!D E C U S - I N T E R O F F I C E M E M O R A N D U M ! !Date: 20-Dec-1990 08:30pm EST !From: Winston Tellis ! TELLIS !Dept: SIG STEERING COMM.: !Tel No: 203-254-4000 ! !TO: Bart Z. Lederman ( LEDERMAN ) ! ! !Subject: accent prob 3 of 3 ! VEGASPROB_5 with screen management CONTROL SECTION RELATE DI NAMES4 AS NAM FOR UPDATE RELATE DI DETAILS4 AS DET FOR UPDATE RELATE DS FUNDS AS FUN ON FCODE FOR INPUT RELATE SF FROM COMMAND AS REPORT 1 DECLARE SECTION SELECT_FLAG, I, 1 MAXDON, I, 3 GENSTR, C, 40 FUNSTR, C, 70 COMPARE, C, 40 SAVE_COMPARE, C, 40 RECS_FOUND, I, 3 SCRLL_CMD, C, 1 DETAIL_CMD, C, 1 DONS_FOUND, I, 3 DONS_AMOUNT, N, 8,2 NAME, C, 30 PROCESS_CMD, C, 10 MW, I, MAX IW, I, MAX DW, I, MAX HW, I, MAX INDX, I, MAX PROCESS SECTION ROUTINE DISPLAY_NAME INCLUDE CONCAT_NAME FROM CS CODE_SEGS5 WITH & 'SENIOR:NAM', 'LAST:NAM', 'FIRST:NAM', 'MI:NAM', 'TITLED:NAM' ! PRINT NAME:D,TAB 40,'(',ID:NAM,')' ! PRINT ADDR:NAM ! PRINT @RTRIM CITY:NAM + ", " + STATE:NAM + " " + @STR (ZIP:NAM, "DDDDD") ! PRINT @CR, "Number of Donations: ", TOTDON:NAM @"7Z" ! PRINT " Total Amount: ", TOTAMT:NAM @"7$.DD",@CR SCREEN PUT_CHARS MW:D, '('+@STR ID:NAM+')', 1, 1, @SCN_ERASE, @SCN_BOLD SCREEN PUT_CHARS MW:D, NAME:D, 2, 1, @SCN_ERASE, @SCN_BOLD SCREEN PUT_CHARS MW:D, ADDR:NAM, 3, 1, @SCN_ERASE, @SCN_NORMAL @RTRIM CITY:NAM + ", " + STATE:NAM + " " + @STR(ZIP:NAM,"DDDDD") TO GENSTR:D SCREEN PUT_CHARS MW:D, GENSTR:D, 4, 1, @SCN_ERASE, @SCN_NORMAL IF:200 TOTDON:NAM > 0 @STR(TOTDON:NAM,"2Z")+' donations totaling '+@STR(TOTAMT:NAM,"7$.DD") TO GENSTR:D ELSE:200; 'No Donations' TO GENSTR:D; CONTINUE:200 SCREEN PUT_CHARS MW:D, GENSTR:D, 6, 1, @SCN_ERASE, @SCN_NORMAL ROUTINE GET_FUND_INFO GET FROM FUN MATCH RECORD BY FCODE:DET HUSH ROUTINE DISPLAY_FUNDS @SCN_CREATE_WINDOW (12, 70, @SCN_BORDER, @SCN_NORMAL) TO HW:D SCREEN LABEL_BORDER HW:D, 'CODE NUMBERS FOR FUNDS', @SCN_TOP, 0, @SCN_NORMAL SCREEN PASTE_WINDOW HW:D, 10, 4 ! PRINT TAB 10,'FUND',TAB 20,'FUND',TAB 40,'FUND' ! PRINT TAB 10,'CODE',TAB 17,'ABBREVIATION',TAB 40,'NAME' 0 TO INDX:D GET FROM FUN FIRST RECORD HUSH START:100 LEAVE:100 UNLESS @AUX='YES' ! PRINT TAB 10, FCODE:FUN,TAB 20,FABBR:FUN,TAB 30,FNAME:FUN INDX:D + 1 TO INDX:D @STR FCODE:FUN + ' ' + @RPAD (FABBR:FUN, 5) + ' ' + FNAME:FUN TO FUNSTR:D SCREEN PUT_CHARS HW:D, FUNSTR:D, INDX:D, 2, @SCN_NOERASE, @SCN_NORMAL GET FROM FUN NEXT RECORD HUSH REPEAT:100 'Press any key to exit this screen' TO GENSTR:D SCREEN PUT_CHARS HW:D, GENSTR:D, 12, 2, @SCN_NOERASE, @SCN_REVERSE @SCN_READ_KEYSTROKE (HW:D, 30) TO @INTEGER !ten second time-out SCREEN UNPASTE_WINDOW HW:D ROUTINE RECALC_DON 0 TO DONS_FOUND:D; 0.0 TO DONS_AMOUNT:D GET FROM DET FIRST MATCH RECORD BY ID:NAM USE DOMAIN ID HUSH START:100 !loop thru and find all donations LEAVE:100 UNLESS @AUX='YES' DONS_AMOUNT:D + AMOUNT:DET TO DONS_AMOUNT:D; DONS_FOUND:D+1 TO DONS_FOUND:D GET FROM DET NEXT MATCH RECORD BY ID:NAM USE DOMAIN ID HUSH REPEAT:100 ROUTINE DISPLAY_DON 0 TO DONS_FOUND:D SCREEN HOME_CURSOR DW:D, @SCN_UPPER_LEFT SCREEN ERASE_WINDOW DW:D, 0,0,0,0 GET FROM DET FIRST MATCH RECORD BY ID:NAM USE DOMAIN ID HUSH START:100 LEAVE:100 UNLESS @AUX='YES' PERFORM GET_FUND_INFO ! PRINT DATED:DET,4S,AMOUNT:DET,4S,FCODE:DET,4S,FABBR:FUN,4S,FNAME:FUN DONS_FOUND:D + 1 TO DONS_FOUND:D @DATSTR DATED:DET + ' ' + @STR (AMOUNT:DET, "6$.DD") + ' ' + FABBR:FUN TO GENSTR:D SCREEN PUT_WITH_SCROLL DW:D, GENSTR:D, @SCN_UP, @SCN_NORMAL, @SCN_NOWRAP LEAVE:100 IF DONS_FOUND:D > MAXDON:D !only certain number can fit on screen GET FROM DET NEXT MATCH RECORD BY ID:NAM USE DOMAIN ID HUSH REPEAT:100 ! IF:100 DONS_FOUND:D = 0; PRINT 15S,'No Donations'; CONTINUE:100 ROUTINE SCROLL_DONATIONS ! TYPE ' Use these keys (F)orwards,(B)ackwards,(S)elect,(E)xit ' 0 TO DONS_FOUND:D; ' ' TO SCRLL_CMD:D !init these vars SCREEN HOME_CURSOR DW:D, @SCN_UPPER_LEFT SCREEN ERASE_WINDOW DW:D, 0,0,0,0 '(F)orwards,(B)ackwards,(S)elect,(E)xit' TO GENSTR:D SCREEN PUT_CHARS IW:D, GENSTR:D, 10, 1, @SCN_ERASE, @SCN_REVERSE GET FROM DET FIRST MATCH RECORD BY ID:NAM USE DOMAIN ID HUSH START:100 !loop to show and scroll LEAVE:100 UNLESS @AUX='YES' DONS_FOUND:D + 1 TO DONS_FOUND:D PERFORM GET_FUND_INFO ! PRINT DATED:DET,4S,AMOUNT:DET,4S,FCODE:DET,4S,FABBR:FUN,4S,FNAME:FUN ! ACCEPT SCRLL_CMD:D @DATSTR DATED:DET + ' ' + @STR (AMOUNT:DET, "6$.DD") + ' ' + FABBR:FUN TO GENSTR:D SCREEN PUT_CHARS DW:D, GENSTR:D, 12, 1, @SCN_ERASE, @SCN_NORMAL @SCN_READ_CHAR (IW:D, 10, 39, 1, @SCN_NORMAL) TO SCRLL_CMD:D SCREEN ERASE_LINE DW:D, 22, 1 LEAVE:100 IF SCRLL_CMD:D = 'S','E' IF:110 SCRLL_CMD:D = 'B' !if backwards use get prior GET FROM DET PRIOR MATCH RECORD BY ID:NAM USE DOMAIN ID HUSH ORIF:110 SCRLL_CMD:D = 'F' !if forwards use get next GET FROM DET NEXT MATCH RECORD BY ID:NAM USE DOMAIN ID HUSH CONTINUE:110 UNLESS:110 @AUX='YES' !if no more matched records ! PRINT ' No more records in that direction' 'No more recs in that direction' TO GENSTR:D SCREEN PUT_CHARS DW:D, GENSTR:D, 22, 1, @SCN_ERASE, @SCN_BOLD + @SCN_BLINK IF:120 SCRLL_CMD:D = 'B' !return to rec you just left GET FROM DET NEXT MATCH RECORD BY ID:NAM USE DOMAIN ID HUSH ORIF:120 SCRLL_CMD:D = 'F' GET FROM DET PRIOR MATCH RECORD BY ID:NAM USE DOMAIN ID HUSH CONTINUE:120 CONTINUE:110 REPEAT:100 !repeat until an exit or select ! IF:100 DONS_FOUND:D = 0; PRINT ' No donations found'; CONTINUE:100 INITIAL SECTION 20 TO MAXDON; DISABLE SEQUENCE LOWER SCREEN KILL_SCREEN @SCN_CREATE_WINDOW ( 6, 40, @SCN_BORDER, @SCN_NORMAL) TO MW:D @SCN_CREATE_WINDOW (14, 40, @SCN_BORDER, @SCN_NORMAL) TO IW:D @SCN_CREATE_WINDOW (22, 35, @SCN_BORDER, @SCN_NORMAL) TO DW:D SCREEN PASTE_WINDOW MW:D, 2, 2 SCREEN PASTE_WINDOW IW:D, 10, 2 SCREEN PASTE_WINDOW DW:D, 2, 44 SCREEN LABEL_BORDER MW:D, 'MASTER RECORDS', @SCN_TOP, 0, @SCN_NORMAL ! SCREEN LABEL_BORDER IW:D, 'INFORMATION', @SCN_TOP, 0, @SCN_NORMAL SCREEN LABEL_BORDER DW:D, 'DETAIL RECORDS', @SCN_TOP, 0, @SCN_NORMAL HEADINGS SECTION TURN FILL OFF !123456789*123456789*123456789*123456789 'ruler' DETAILS SECTION START:10 ! TYPE @CR,' You may enter an ID number, last name, part of a last name,' ! TYPE ' or "SOUNDEX Last_name" for a soundex search of last names' ! TYPE ' that sound like the given last name ( will exit).',@CR ! TYPE ' Enter Comparison: ',NOCR ! ACCEPT COMPARE:D; COMPARE:D TO SAVE_COMPARE:D SCREEN HOME_CURSOR MW:D, @SCN_UPPER_LEFT SCREEN HOME_CURSOR DW:D, @SCN_UPPER_LEFT SCREEN HOME_CURSOR IW:D, @SCN_UPPER_LEFT SCREEN ERASE_WINDOW MW:D, 0,0,0,0 SCREEN ERASE_WINDOW DW:D, 0,0,0,0 SCREEN ERASE_WINDOW IW:D, 0,0,0,0 SCREEN PUT_CHARS IW:D, 'Enter Comparison: ', 1, 1, @SCN_NOERASE, @SCN_NORMAL 'Enter an ID number, a last name, part' TO GENSTR:D SCREEN PUT_CHARS IW:D, GENSTR:D, 3, 1, @SCN_NOERASE, @SCN_NORMAL 'of a last name, or "SOUNDEX Last_name"' TO GENSTR:D SCREEN PUT_CHARS IW:D, GENSTR:D, 4, 1, @SCN_NOERASE, @SCN_NORMAL '( will exit)' TO GENSTR:D SCREEN PUT_CHARS IW:D, GENSTR:D, 5, 1, @SCN_NOERASE, @SCN_NORMAL @SCN_READ_CHAR (IW:D, 1, 20, 20, @SCN_BOLD) TO COMPARE:D SCREEN ERASE_WINDOW IW:D, 2, 1, 14, 40 COMPARE:D TO SAVE_COMPARE:D LEAVE:10 IF COMPARE:D = ' ' START:20 0 TO SELECT_FLAG:D; 0 TO RECS_FOUND:D; ' ' TO DETAIL_CMD:D !init vars IF:30 COMPARE:D INTEGRAL !if looking for an ID, can only find one or none GET FROM NAM MATCH RECORD BY @IVAL COMPARE:D USE DOMAIN ID HUSH IF:40 @AUX='YES'; 1 TO SELECT_FLAG:D; 1 TO RECS_FOUND:D; CONTINUE:40 ORIF:30 COMPARE:D BEGINS WITH 'SOUNDEX' @LTRIM (@SPAN (COMPARE:D, " ")) TO COMPARE:D !clip off the 'soundex' @SOUNDEX COMPARE:D TO COMPARE:D GET FROM NAM FIRST MATCH RECORD BY COMPARE:D USE DOMAIN SOUNDEX HUSH START:40 !loop thru all recs that match, find how many match LEAVE:40 UNLESS @AUX='YES' RECS_FOUND:D + 1 TO RECS_FOUND:D GET FROM NAM NEXT MATCH RECORD BY COMPARE:D USE DOMAIN SOUNDEX HUSH REPEAT:40 !note that really we just need to know we have more than one IF:40 RECS_FOUND:D = 1; 1 TO SELECT_FLAG:D; CONTINUE:40 ! return back to the first match record, if any GET FROM NAM FIRST MATCH RECORD BY COMPARE:D USE DOMAIN SOUNDEX HUSH IF:40 @AUX='YES' AND RECS_FOUND:D > 1 ! PRINT ' There are ',RECS_FOUND:D @"4D",' records that match' @STR RECS_FOUND:D + ' master records match' TO GENSTR:D SCREEN PUT_CHARS IW:D, GENSTR:D, 3, 1, @SCN_NOERASE, @SCN_NORMAL START:50 !now start the browse PERFORM DISPLAY_NAME; PERFORM DISPLAY_DON ! TYPE ' (F)orwards,(B)ackwards,(S)elect,(E)xit: ', NOCR ! ACCEPT SCRLL_CMD:D '(F)orwards,(B)ackwards,(S)elect,(E)xit:' TO GENSTR:D START:60 SCREEN PUT_CHARS IW:D, GENSTR:D, 10, 1, @SCN_ERASE, @SCN_REVERSE @SCN_READ_CHAR (IW:D, 10, 39, 1, @SCN_NORMAL) TO SCRLL_CMD:D SCREEN ERASE_LINE IW:D, 6, 1 !remove possible error message LEAVE:50 IF SCRLL_CMD:D = 'S','E' LEAVE:60 IF SCRLL_CMD:D = 'B','F' REPEAT:60 IF:60 SCRLL_CMD:D = 'B' !backwards is a get prior GET FROM NAM PRIOR MATCH RECORD BY COMPARE:D USE DOMAIN SOUNDEX HUSH ORIF:60 SCRLL_CMD:D = 'F' !forwards is a get next GET FROM NAM NEXT MATCH RECORD BY COMPARE:D USE DOMAIN SOUNDEX HUSH CONTINUE:60 UNLESS:60 @AUX='YES' !if no prior or next match record !??? PRINT ' No more records in that direction match the comparator' 'No more matched recs in that direction' TO GENSTR:D SCREEN PUT_CHARS IW:D, GENSTR:D, 6, 1, @SCN_ERASE, @SCN_BLINK + @SCN_BOLD IF:70 SCRLL_CMD:D BEGINS WITH 'B' !return to the record you left GET FROM NAM NEXT MATCH RECORD BY COMPARE:D USE DOMAIN SOUNDEX HUSH ELSE:70 !backwards is get next, forwards get prior, reverse of above GET FROM NAM PRIOR MATCH RECORD BY COMPARE:D USE DOMAIN SOUNDEX HUSH CONTINUE:70 CONTINUE:60 REPEAT:50 !end of browse IF:50 SCRLL_CMD = 'S'; 1 TO SELECT_FLAG:D; CONTINUE:50 CONTINUE:40 ELSE:30 !must be a last name, or part of a last name ! The names ds has been sorted on last,first,mi,id. Get first high fit will ! allow me to use full or partial last names to point me to the approximate ! area I need to be in, however I need to check after my get (note last begins ! with compare statement). Once I find my first rec, I browse backwards, ! forwards with prior,next not indexed, using the inherent sort order of the ds. GET FROM NAM FIRST HIGH FIT RECORD BY COMPARE:D USE DOMAIN NAME HUSH START:40 !count to see how many fit criteria LEAVE:40 UNLESS @AUX='YES' !leave loop if can't find one ! leave loop also if first high fit returns something not appropriate LEAVE:40 UNLESS LAST BEGINS WITH COMPARE:D RECS_FOUND:D + 1 TO RECS_FOUND:D GET FROM NAM NEXT RECORD NOT INDEXED HUSH !use inherent sort order REPEAT:40 IF:40 RECS_FOUND:D = 1; 1 TO SELECT_FLAG:D; CONTINUE:40 ! return back to the first record found, if any GET FROM NAM FIRST HIGH FIT RECORD BY COMPARE:D USE DOMAIN NAME HUSH IF:40 @AUX='YES' AND RECS_FOUND:D > 1 !start the browse phase, if needed ! PRINT ' There are ',RECS_FOUND:D @"4D",' records that match' @STR (RECS_FOUND:D) + ' master records match' TO GENSTR:D SCREEN PUT_CHARS IW:D, GENSTR:D, 3, 1, @SCN_NOERASE, @SCN_NORMAL START:50 !begin browse PERFORM DISPLAY_NAME; PERFORM DISPLAY_DON ! TYPE ' (F)orwards,(B)ackwards,(S)elect,(E)xit: ', NOCR ! ACCEPT SCRLL_CMD:D '(F)orwards,(B)ackwards,(S)elect,(E)xit:' TO GENSTR:D START:60 SCREEN PUT_CHARS IW:D, GENSTR:D, 10, 1, @SCN_NOERASE, @SCN_REVERSE @SCN_READ_CHAR (IW:D, 10, 39, 1, @SCN_NORMAL) TO SCRLL_CMD:D SCREEN ERASE_LINE IW:D, 6, 1 !remove possible error message LEAVE:50 IF SCRLL_CMD:D = 'S','E' LEAVE:60 IF SCRLL_CMD:D = 'B','F' REPEAT:60 IF:60 SCRLL_CMD:D = 'B' !if backwards,get prior; if forwards,get next GET FROM NAM PRIOR RECORD NOT INDEXED HUSH !use inherent sort order ELSE:60; GET FROM NAM NEXT RECORD NOT INDEXED HUSH; CONTINUE:60 UNLESS:60 @AUX='YES' !if can't find any more records ! PRINT ' No more records in that direction' 'No more recs in that direction' TO GENSTR:D SCREEN PUT_CHARS IW:D, GENSTR:D, 6, 1, @SCN_ERASE, @SCN_BLINK + @SCN_BOLD ORUNLESS:60 LAST BEGINS WITH COMPARE:D !or rec found not a match ! PRINT ' No more records in that direction match the comparator' 'No more matched recs in that direction' TO GENSTR:D SCREEN PUT_CHARS IW:D, GENSTR:D, 6, 1, @SCN_ERASE, @SCN_BLINK + @SCN_BOLD IF:70 SCRLL_CMD:D = 'B' !get back to the record you left by GET FROM NAM NEXT RECORD NOT INDEXED HUSH !reversing the gets ELSE:70; GET FROM NAM PRIOR RECORD NOT INDEXED HUSH; CONTINUE:70 CONTINUE:60 REPEAT:50 !exit browse loop IF:50 SCRLL_CMD:D = 'S'; 1 TO SELECT_FLAG:D; CONTINUE:50 CONTINUE:40 CONTINUE:30 !at this point selectflag=0,1 and recsfound>=0 IF:30 RECS_FOUND:D=0; 'No master records found that match' TO GENSTR:D SCREEN PUT_CHARS IW:D, GENSTR:D, 7, 1, @SCN_ERASE, @SCN_BOLD; CONTINUE:30 IF:30 RECS_FOUND:D>0 AND SELECT_FLAG=0; 'No master records selected' TO GENSTR:D SCREEN PUT_CHARS IW:D, GENSTR:D, 7, 1, @SCN_ERASE, @SCN_BOLD; CONTINUE:30 IF:30 RECS_FOUND:D>0 AND SELECT_FLAG=1 !redundant but true START:40 !we have recs and we have selected a rec for processing PERFORM DISPLAY_NAME; PERFORM DISPLAY_DON SCREEN HOME_CURSOR IW:D, @SCN_UPPER_LEFT SCREEN ERASE_WINDOW IW:D, 0,0,0,0 START:50 !; TYPE @CR ! TYPE ' (A)dd a detail record' ! TYPE ' (M)odify a detail record' ! TYPE ' (D)elete a detail record' ! TYPE ' (X)punge a master record and all associated detail recs' ! TYPE ' (E)xit return to comparison input' ! TYPE ' (B)rowse return to browse phase',5S,NOCR ! ACCEPT DETAIL_CMD:D SCREEN PUT_CHARS IW:D, '(A)dd a detail record', 2, 1, @SCN_ERASE, @SCN_NORMAL SCREEN PUT_CHARS IW:D, '(M)odify a detail record', 3, 1, @SCN_ERASE, @SCN_NORMAL SCREEN PUT_CHARS IW:D, '(D)elete a detail record', 4, 1, @SCN_ERASE, @SCN_NORMAL SCREEN PUT_CHARS IW:D, '(X)punge a master/detail record(s)', 5, 1, @SCN_ERASE, @SCN_NORMAL SCREEN PUT_CHARS IW:D, '(E)xit return to comparison input', 6, 1, @SCN_ERASE, @SCN_NORMAL SCREEN PUT_CHARS IW:D, '(B)rowse return to browse phase', 7, 1, @SCN_ERASE, @SCN_NORMAL SCREEN CHANGE_RENDITION IW:D, 2, 2, 6, 1, @SCN_BOLD @SCN_READ_CHAR (IW:D, 7, 39, 1, @SCN_NORMAL) TO DETAIL_CMD:D SCREEN CHANGE_RENDITION IW:D, 2, 2, 6, 1, @SCN_NORMAL SCREEN HOME_CURSOR IW:D, @SCN_UPPER_LEFT SCREEN ERASE_WINDOW IW:D, 0,0,0,0 LEAVE:40 IF DETAIL_CMD:D = 'E' LEAVE:50 IF DETAIL_CMD:D = 'A','M','D','X','E','B' REPEAT:50 !loop until valid character IF:50 DETAIL_CMD:D = 'A' !add a detail record READY DET AREA ID:NAM TO ID:DET:R 'ADD' TO PROCESS_CMD:D INCLUDE PROCESS_DETAIL_REC FROM CS CODE_SEGS5 WITH 'PROCESS_CMD:D' CREATE DET ORIF:50 DETAIL_CMD:D = 'M' !modify a detail record PERFORM SCROLL_DONATIONS !must look for specific detail record IF:60 SCRLL_CMD:D = 'S' !; PRINT ' You have selected for modify' SCREEN PUT_CHARS IW:D,' will select default',9,4,@SCN_ERASE,@SCN_BOLD 'MODIFY' TO PROCESS_CMD:D INCLUDE PROCESS_DETAIL_REC FROM CS CODE_SEGS5 WITH 'PROCESS_CMD:D' SCREEN ERASE_LINE IW:D,9,4 PUT RECORD IN DET ORIF:60 SCRLL_CMD:D = 'E' ! PRINT ' You have exited without modifying'; ! SCREEN PUT_CHARS IW:D, 'No detail record modified', CONTINUE:60 ORIF:50 DETAIL_CMD:D = 'D' !delete a detail record PERFORM SCROLL_DONATIONS !must look for a specific detail record IF:60 SCRLL_CMD:D = 'S' !; PRINT ' You have selected for delete' DELETE RECORD FROM DET HUSH ORIF:60 SCRLL_CMD:D = 'E' ! PRINT ' You have exited without deleting'; CONTINUE:60 ORIF:50 DETAIL_CMD:D = 'X' !expunge a master and all ass. details ! TYPE ' The master record and all associated detail records',NOCR ! TYPE ' will be deleted' GET FROM DET FIRST MATCH RECORD BY ID:NAM USE DOMAIN ID HUSH START:60 !loop to delete all the detail recs by specific ID LEAVE:60 UNLESS @AUX='YES' DELETE RECORD FROM DET HUSH GET FROM DET NEXT MATCH RECORD BY ID:NAM USE DOMAIN ID HUSH REPEAT:60 SCREEN HOME_CURSOR DW:D, @SCN_UPPER_LEFT SCREEN ERASE_WINDOW DW:D, 0,0,0,0 DELETE RECORD FROM NAM HUSH !finish off by deleting master SCREEN HOME_CURSOR MW:D, @SCN_UPPER_LEFT SCREEN ERASE_WINDOW MW:D, 0,0,0,0 CONTINUE:50 LEAVE:40 IF DETAIL_CMD = 'X','B' !if eXpunge, no record to return to IF:50 DETAIL_CMD # 'E' !if we made a change to the detail records PERFORM RECALC_DON !recalculate the necessary information DONS_FOUND:D TO TOTDON:NAM !such as number of donations DONS_AMOUNT:D TO TOTAMT:NAM !and total amount of donations PUT RECORD IN NAM !and update the master name record CONTINUE:50 REPEAT:40 CONTINUE:30 SAVE_COMPARE:D TO COMPARE:D !return to the original start of the browse ! keep looping if we requested continued browse and we have stuff to browse to LEAVE:20 UNLESS DETAIL_CMD:D = 'X','B' AND RECS_FOUND:D > 1 REPEAT:20 REPEAT:10 !looking for a comparitor SCREEN KILL_SCREEN