*************************************************************************** *** Program:.... SYS_MANL.PRG: System User's & Technical Manuals *** Updated:.... March 30, 1991 *** Programmer:. R. Paulk *** Notice:..... Copyright (c) Ingenuity, Inc., 1990 **************************************************************************** PARAMETERS rpt_action, page_ct, line_ct SET EXACT ON SELECT sys_rpts * Set Variables For This Report STORE .F. TO mtbl_cont, mmk_index, mwip_note, cal_runtime, keyf_print, keyf_only STORE SECONDS() TO runtm_st STORE "" TO mpman_seq, xpman_seq, otopic, ptopic, osubj, psubj, opara,; ppara, osubpara, psubpara qpage_ct = page_ct * Process This Report Based On Action Requested IF rpt_action = "Update Features" * Declare Array w/Element For Each Feature Available PUBLIC feat_aray[5] feat_aray[1] = " Include ALL Available Features In This Manual"+ SPACE(6) +"ALL_FEAT" feat_aray[2] = " Publish A Summary Of Key Features Only"+ SPACE(13) +"SUMMARY" feat_aray[3] = "Include Table Of Contents"+ SPACE(28) +"TBL_CONT" feat_aray[4] = "Include Index Of Terms & Topics"+ SPACE(22) +"MK_INDEX" feat_aray[5] = "Include WIP (Work-In-Progress) Notes"+ SPACE(17) +"WIP_NOTE" * Insure That Indexes Appropriate For This Report Is Correct IF TRIM(sys_rpts->ntxs_ok) <> "" REPLACE sys_rpts->ntxs_ok WITH "" ENDIF RETURN ENDIF SET DEVICE TO PRINT line_ct = line_ct + 3 @ PROW() + 1, 0 SAY "" @ PROW() + 1, mrgn SAY CHR(201) + REPLICATE(CHR(205), 17) +; "µ Report Features Selected Æ" + REPLICATE(CHR(205), 18) + CHR(187) @ PROW() + 1, mrgn SAY CHR(186) + " The Following Features Were Selected For This Report" @ PROW(), mrgn + 64 SAY CHR(186) FOR n = 1 TO LEN(feat_aray) IF CHR(251) $ feat_aray[n] line_ct = line_ct + 1 @ PROW() + 1, mrgn SAY CHR(186) + " " + SUBSTR(feat_aray[n], 1, 52) @ PROW(), mrgn + 64 SAY CHR(186) IF "ALL_FEAT" $ feat_aray[n] STORE .T. TO cal_runtime, mtbl_cont, mmk_index, mwip_note ELSEIF "TBL_CONT" $ feat_aray[n] STORE .T. TO mtbl_cont ELSEIF "MK_INDEX" $ feat_aray[n] STORE .T. TO mmk_index ELSEIF "WIP_NOTE" $ feat_aray[n] STORE .T. TO mwip_note ELSEIF "SUMMARY" $ feat_aray[n] STORE .F. TO mtbl_cont, mmk_index, mwip_note STORE .T. TO keyf_only ENDIF ENDIF NEXT line_ct = line_ct + 1 @ PROW() + 1, mrgn SAY CHR(200) + REPLICATE(CHR(205), 63) +CHR(188) STORE 0 TO ptxt_lns CLEAR TYPEAHEAD *** Data Bases SELECT sys_prgs cal_runtime = IIF(EMPTY(DBFILTER()), cal_runtime, .F.) GOTO TOP SELECT sys_tblc ZAP APPEND BLANK REPLACE sys_tblc->topic WITH "Manual Definition Parameters",; sys_tblc->page WITH page_ct, sys_tblc->paragraph WITH "..." * If Table Of Contents Feature Is Selected IF mtbl_cont FOR n = 1 TO ((max_lines - line_ct) / 2) - 5 line_ct = line_ct + 1 @ PROW() + 1, 00 SAY "" NEXT line_ct = line_ct + 5 @ PROW() + 1, mrgn SAY REPLICATE(CHR(4), 65) @ PROW() + 1, mrgn SAY REPLICATE(CHR(4), 3) + SPACE(4) +; "A Table Of Contents Will Printed At The End Of " + SPACE(4) +; REPLICATE(CHR(4), 3) @ PROW() + 1, mrgn SAY REPLICATE(CHR(4), 3) + SPACE(4) +; "This Manual -- Please Place This Table Of Contents " + SPACE(4) +; REPLICATE(CHR(4), 3) @ PROW() + 1, mrgn SAY REPLICATE(CHR(4), 3) + SPACE(4) +; "In Front Of This Page Before Distributing Manual " + SPACE(4) +; REPLICATE(CHR(4), 3) @ PROW() + 1, mrgn SAY REPLICATE(CHR(4), 65) ENDIF EJECT SET DEVICE TO SCREEN IF TRIM(UPPER(sys_rpts->rpt_name)) = "SYS_UMAN" CTR_STR(23, "Printing User's Manual Cover Page", sys_wrkng) ELSE CTR_STR(23, "Printing Technical Manual Cover Page", sys_wrkng) ENDIF n = ttl_ele IF TRIM(UPPER(sys_rpts->rpt_name)) = "SYS_UMAN" cover_aray[n] = STR_CTR(CHR(177) + " U S E R ' S M A N U A L " +; IIF(keyf_only, " K E Y F E A T U R E S ", "") + CHR(177), 65) ELSE cover_aray[n] = STR_CTR(IIF(keyf_only, CHR(177) + " T E C H M A N U A L " + ; IIF(keyf_only, " K E Y F E A T U R E S ", "") + CHR(177),; CHR(177) + " T E C H N I C A L M A N U A L " + CHR(177)), 65) ENDIF ttl_len = LEN(ALLTRIM(cover_aray[n])) * Update Page Header Array With Complete Report Title phdr_aray[9] = cover_aray[n] phdr_aray[8] = STR_CTR(CHR(177) + REPLICATE(CHR(177), LEN(ALLTRIM(phdr_aray[9])) - 2) + CHR(177), 65) phdr_aray[10] = STR_CTR(CHR(177) + REPLICATE(CHR(177), LEN(ALLTRIM(phdr_aray[9])) - 2) + CHR(177), 65) n = n - 2 cover_aray[n] = STR_CTR(CHR(177) + REPLICATE(CHR(177), ttl_len - 2) + CHR(177), 65) n = n + 1 cover_aray[n] = STR_CTR(CHR(177) + REPLICATE(" ", ttl_len - 2) + CHR(177), 65) n = n + 2 cover_aray[n] = STR_CTR(CHR(177) + REPLICATE(" ", ttl_len - 2) + CHR(177), 65) n = IIF(n < 55, n + 1, n) cover_aray[n] = STR_CTR(CHR(177) + REPLICATE(CHR(177), ttl_len - 2) + CHR(177), 65) n = IIF(n < 52, n + 3, n) cover_aray[n] = "" n = IIF(n < 49, n + 6, 55) cover_aray[n] = STR_CTR("Date Produced: " + CDOW(DATE()) + " -=- " + SUBSTR(CMONTH(DATE()), 1, 3) + SPACE(1) +; LTRIM(STR(DAY(DATE()), 2)) + ", " + STR(YEAR(DATE()), 4) + " -=- At: " + STUFF(AMPM(TIME()), 6, 3, ""), 65) SET DEVICE TO PRINT @ PROW() + (54 - n) / 2, 00 SAY "" FOR x = 1 TO n @ PROW() + 1, M->mrgn SAY SUBSTR(cover_aray[x], 1, 65) NEXT EJECT SET DEVICE TO SCREEN CTR_STR(23, "Printing Copyright Page", sys_wrkng) SELECT sys_prgs LOCATE FOR UPPER(TRIM(sys_prgs->helptopic)) = "COPYRIGHT" .AND.; !ISALPHA(sys_prgs->usrman_seq) SET DEVICE TO PRINT IF FOUND() ptxt_lns = MLCOUNT(TRIM(sys_prgs->help_text), 65, 4, .F.) ptxt_lns = IIF(ptxt_lns < 56, ptxt_lns, 55) top_mrgn = (55 - ptxt_lns) / 2 prow = 1 FOR cur_ln = 1 TO ptxt_lns @ top_mrgn + cur_ln, M->mrgn SAY MEMOLINE(TRIM(sys_prgs->help_text), 65, cur_ln, 4, .F.) NEXT ENDIF SELECT sys_prgs LOCATE FOR UPPER(TRIM(sys_prgs->helptopic)) = "REGISTRATION" .AND.; !ISALPHA(sys_prgs->usrman_seq) IF FOUND() EJECT SET DEVICE TO SCREEN CTR_STR(23, "Printing Registration Form", sys_wrkng) SET DEVICE TO PRINT ptxt_lns = MLCOUNT(TRIM(sys_prgs->help_text), 65, 4, .F.) ptxt_lns = IIF(ptxt_lns < 56, ptxt_lns, 55) top_mrgn = (55 - ptxt_lns) / 2 prow = 1 FOR cur_ln = 1 TO ptxt_lns @ top_mrgn + cur_ln, M->mrgn SAY MEMOLINE(TRIM(sys_prgs->help_text), 65, cur_ln, 4, .F.) NEXT EJECT ENDIF IF !EMPTY(prgs_fltr) SET FILTER TO &prgs_fltr. GOTO TOP ENDIF SET DEVICE TO SCREEN CTR_STR(23, " * * * * Printing Report * * * * ", sys_wrkng) SELECT sys_prgs GOTO TOP SETCOLOR(sys_hdhi) @ 24, 73 SAY STR(RECNO(),5) PICTURE "9999" STORE 0 TO ptxt_lns DO WHILE !abort SET DEVICE TO SCREEN _INKEY("SYS_MANL", PROCLINE(), .T., .T.) IF keyf_print .AND. !keyf_only .AND. EOF() keyf_print = .F. GOTO TOP GOTO keyf_retrec SKIP ELSE IF EOF() EXIT ENDIF ENDIF SELECT sys_prgs SETCOLOR(sys_hdhi) @ 24, 57 SAY STR(page_ct,3) PICTURE "999" SET DEVICE TO PRINT IF TRIM(UPPER(sys_rpts->rpt_name)) = "SYS_UMAN" pman_seq = TRIM(sys_prgs->usrman_seq) no_print = IIF(sys_prgs->include_in = "T", .T., .F.) ELSE pman_seq = TRIM(sys_prgs->tecman_seq) no_print = IIF(sys_prgs->include_in = "U", .T., .F.) ENDIF say_seq = pman_seq DO WHILE (".0" $ say_seq) say_seq = STUFF(say_seq, AT(".0", say_seq), 2, ".") ENDDO no_print = IIF((!mwip_note .AND. sys_prgs->include_in = "W"), .T., no_print) no_print = IIF((!mwip_note .AND. sys_prgs->include_in = "X"), .T., no_print) IF ("_" $ pman_seq) .OR. VAL(TRIM(pman_seq)) = 0 .OR. no_print SKIP LOOP ENDIF * Test Printer Readiness st_tout = SECONDS() DO WHILE rpt_outdev = "LPT1" .AND. !ISPRINTER() IF (SECONDS() - st_tout) > 60 SET DEVICE TO SCREEN CTR_STR(23, "Printer Not Ready -- Correct Then Any Key To Continue/Escape To Abort", sys_msgs) BEEP("error") key = _INKEY("SYS_MANL", PROCLINE()) SET DEVICE TO PRINT ENDIF ENDDO IF keyf_print .AND. (sys_prgs->key_feat <> "K" .OR. SUBSTR(pman_seq, 1, 1) == "1") SKIP LOOP ENDIF * New Subject/Topic/Paragraph IF UPPER(TRIM(pman_seq)) <> UPPER(TRIM(xpman_seq)) .AND.; !(sys_prgs->include_in $ "WXZ") * Determine Indenture Level Based On Sequence No. * topic.subject.para.subpara.ad infinitum dot_ct = 0 dot_seq = TRIM(pman_seq) DO WHILE !EMPTY(dot_seq) IF ("." $ dot_seq) dot_ct = dot_ct + 1 dot_seq = STUFF(dot_seq, AT(".", dot_seq), 1, "") ELSE dot_seq = "" ENDIF ENDDO * Add To To T-O-C Dbf For Making Table Of Contents STORE "" TO ptopic, psubj, ppara, psubpara DO CASE CASE dot_ct = 1 ptopic = TRIM(sys_prgs->help_hdr) IF !keyf_print page_ct = page_ct + 1 line_ct = 1 ELSE line_ct = line_ct + 2 @ PROW() + 2, 0 SAY "" ENDIF IF !keyf_print SELECT sys_tblc APPEND BLANK REPLACE sys_tblc->paragraph WITH say_seq,; sys_tblc->topic WITH ptopic, sys_tblc->page WITH page_ct ENDIF CASE dot_ct = 2 psubj = TRIM(sys_prgs->help_hdr) IF !keyf_print SELECT sys_tblc APPEND BLANK REPLACE sys_tblc->paragraph WITH say_seq,; sys_tblc->topic WITH psubj, sys_tblc->page WITH page_ct ENDIF CASE dot_ct = 3 ppara = TRIM(sys_prgs->help_hdr) IF !keyf_print SELECT sys_tblc APPEND BLANK REPLACE sys_tblc->paragraph WITH say_seq,; sys_tblc->topic WITH ppara, sys_tblc->page WITH page_ct ENDIF OTHERWISE psubpara = TRIM(sys_prgs->help_hdr) IF !EMPTY(psubpara) .AND. !EMPTY(pman_seq) .AND. !keyf_print SELECT sys_tblc APPEND BLANK REPLACE sys_tblc->paragraph WITH say_seq,; sys_tblc->topic WITH psubpara, sys_tblc->page WITH page_ct ENDIF ENDCASE ELSE * Add To To T-O-C Dbf For Making Index psubpara = TRIM(sys_prgs->help_hdr) IF !EMPTY(psubpara) .AND. psubpara <> osubpara .AND.; !(sys_prgs->include_in $ "WXZ") .AND. !keyf_print SELECT sys_tblc APPEND BLANK REPLACE sys_tblc->paragraph WITH say_seq,; sys_tblc->topic WITH psubpara, sys_tblc->page WITH page_ct ENDIF ENDIF * Test Need For New Page IF line_ct > max_lines page_ct = page_ct + 1 line_ct = 1 ENDIF * Begin New Page IF line_ct = 1 EJECT phdr_aray[1] = "Page No. " + LTRIM(TRAN(page_ct,"99,999")) FOR n = 1 TO LEN(phdr_aray) @ PROW() + 1, M->mrgn SAY SUBSTR(phdr_aray[n], 1, 65) NEXT line_ct = LEN(phdr_aray) ENDIF IF mwip_note .AND. (((sys_prgs->include_in $ "WZ") .AND.; UPPER(TRIM(sys_rpts->rpt_name)) = "SYS_UMAN") .OR.; ((sys_prgs->include_in $ "WX") .AND.; UPPER(TRIM(sys_rpts->rpt_name)) = "SYS_TMAN")) .AND. !keyf_print IF ptxt_lns = 0 psubpara = TRIM(sys_prgs->help_hdr) IF !EMPTY(psubpara) .AND. !EMPTY(pman_seq) SELECT sys_tblc APPEND BLANK REPLACE sys_tblc->paragraph WITH say_seq,; sys_tblc->topic WITH psubpara, sys_tblc->page WITH page_ct ENDIF txt_stct = 1 SELECT sys_prgs hlptxt_str = TRIM(sys_prgs->help_text) line_ct = line_ct + 1 @ PROW() + 1, mrgn + 5 SAY CHR(201) + REPLICATE(CHR(205), 11) +; "µ WIP [Work-In-Progress] Note Æ" + REPLICATE(CHR(205), 11) + CHR(187) ptxt_lns = MLCOUNT(hlptxt_str, 51, 4, .T.) ELSE line_ct = line_ct + 1 @ PROW() + 1, mrgn + 5 SAY CHR(201) + REPLICATE(CHR(205), 5) +; "µ WIP [Work-In-Progress] Note - Continued Æ" + REPLICATE(CHR(205), 5) + CHR(187) ENDIF FOR cur_ln = txt_stct TO ptxt_lns line_ct = line_ct + 1 @ PROW() + 1, mrgn + 5 SAY CHR(186) + " " + MEMOLINE(hlptxt_str, 51, cur_ln, 4, .T.) + " " + CHR(186) ptxt_lns = IIF(cur_ln = ptxt_lns, 0, ptxt_lns) IF line_ct >= (max_lines - 1) txt_stct = cur_ln + 1 EXIT ENDIF NEXT line_ct = line_ct + 2 @ PROW() + 1, mrgn + 5 SAY CHR(200) + REPLICATE(CHR(205), 53) + CHR(188) @ PROW() + 1, 0 SAY "" ELSE IF ptxt_lns = 0 DO CASE CASE !EMPTY(ptopic) .AND. ptopic <> otopic .AND.; !(sys_prgs->include_in $ "WXZ") IF keyf_print phdr_ln = UPPER(ptopic) ELSE say_seq = pman_seq DO WHILE (".0" $ say_seq) say_seq = STUFF(say_seq, AT(".0", say_seq), 2, ".") ENDDO phdr_ln = IIF(xpman_seq <> pman_seq,; say_seq + " " + UPPER(ptopic), UPPER(ptopic)) line_ct = line_ct + 2 @ PROW() + 2, 0 SAY "" ENDIF line_ct = line_ct + 3 @ PROW() + 1, ROUND((80-LEN(phdr_ln))/2,0) SAY phdr_ln @ PROW() + 2, 0 SAY "" CASE !EMPTY(psubj) .AND. psubj <> osubj .AND.; !(sys_prgs->include_in $ "WXZ") IF line_ct + 6 >= max_lines line_ct = max_lines + 1 LOOP ENDIF IF keyf_print phdr_ln = UPPER(psubj) + ":" line_ct = line_ct + 1 @ PROW() + 1, mrgn SAY phdr_ln ELSE say_seq = pman_seq DO WHILE (".0" $ say_seq) say_seq = STUFF(say_seq, AT(".0", say_seq), 2, ".") ENDDO phdr_ln = IIF(xpman_seq <> pman_seq,; say_seq + " " + UPPER(psubj), UPPER(psubj)) line_ct = line_ct + 4 @ PROW() + 2, 0 SAY "" @ PROW() + 1, ROUND((80-LEN(phdr_ln))/2,0) SAY phdr_ln @ PROW() + 1, 0 SAY "" ENDIF CASE !EMPTY(ppara) .AND. ppara <> opara .AND.; !(sys_prgs->include_in $ "WXZ") IF line_ct + 5 >= max_lines line_ct = max_lines + 1 LOOP ENDIF line_ct = line_ct + 1 @ PROW() + 1, 0 SAY "" IF keyf_print phdr_ln = UPPER(ppara) + ":" line_ct = line_ct + 1 @ PROW() + 1, mrgn SAY phdr_ln ELSE say_seq = pman_seq DO WHILE (".0" $ say_seq) say_seq = STUFF(say_seq, AT(".0", say_seq), 2, ".") ENDDO phdr_ln = IIF(xpman_seq <> pman_seq,; say_seq + " " + UPPER(ppara), UPPER(ppara)) line_ct = line_ct + 2 @ PROW() + 1, mrgn SAY phdr_ln @ PROW() + 1, 0 SAY "" ENDIF CASE !EMPTY(psubpara) .AND. psubpara <> osubpara .AND.; !(sys_prgs->include_in $ "WXZ") IF line_ct + 4 >= max_lines line_ct = max_lines + 1 LOOP ENDIF OTHERWISE IF !(sys_prgs->include_in $ "WXZ") IF line_ct + 3 >= max_lines line_ct = max_lines + 1 LOOP ENDIF line_ct = line_ct + 1 @ PROW() + 1, 0 SAY "" ENDIF ENDCASE ENDIF ENDIF IF !(sys_prgs->include_in $ "WXZ") IF ptxt_lns = 0 txt_stct = 1 SELECT sys_prgs hlptxt_str = TRIM(sys_prgs->help_text) IF !EMPTY(psubpara) .AND. psubpara <> osubpara say_seq = pman_seq DO WHILE (".0" $ say_seq) say_seq = STUFF(say_seq, AT(".0", say_seq), 2, ".") ENDDO IF keyf_print phdr_ln = UPPER(psubpara) ELSE phdr_ln = IIF(xpman_seq <> pman_seq,; say_seq + " " + UPPER(psubpara), UPPER(psubpara)) ENDIF hlptxt_str = phdr_ln + ": " + hlptxt_str ENDIF ptxt_lns = MLCOUNT(hlptxt_str, 65, 4, .T.) ELSE line_ct = line_ct + 1 @ PROW() + 1, mrgn SAY phdr_ln + " - Continued" ENDIF FOR cur_ln = txt_stct TO ptxt_lns line_ct = line_ct + 1 @ PROW() + 1, mrgn SAY MEMOLINE(hlptxt_str, 65, cur_ln, 4, .T.) ptxt_lns = IIF(cur_ln = ptxt_lns, 0, ptxt_lns) IF line_ct > max_lines txt_stct = cur_ln + 1 EXIT ENDIF NEXT line_ct = line_ct + 1 @ PROW() + 1, 0 SAY "" ENDIF SELECT sys_prgs IF ptxt_lns = 0 otopic = ptopic osubj = psubj opara = ppara osubpara = psubpara xpman_seq = pman_seq IF UPPER(TRIM(sys_prgs->help_hdr)) == "KEY FEATURES" keyf_print = .T. keyf_retrec = RECNO() ENDIF SKIP SET DEVICE TO SCREEN SETCOLOR(sys_hdhi) @ 24, 73 SAY TRANSFORM(RECNO(), "9,999") SET DEVICE TO PRINT IF UPPER(TRIM(sys_rpts->rpt_name)) = "SYS_UMAN" pman_seq = TRIM(sys_prgs->usrman_seq) ELSE pman_seq = TRIM(sys_prgs->tecman_seq) ENDIF ENDIF ENDDO line_ct = line_ct + 1 @ PROW() + 1, IIF(mrgn > 0, mrgn - 1, mrgn) SAY "" @ PROW() + 1, mrgn + 36 SAY "" @ PROW() + 1, 0 SAY "" && Get Last Line From Some Printers tot_pages = page_ct IF mmk_index .OR. mtbl_cont SELECT sys_tblc GOTO TOP DO WHILE !EOF() IF (" " $ sys_tblc->topic) REPLACE sys_tblc->topic WITH STUFF(sys_tblc->topic, AT(" ", sys_tblc->topic), 2, "") ENDIF IF ("*" $ sys_tblc->topic) REPLACE sys_tblc->topic WITH STUFF(sys_tblc->topic, AT("*", sys_tblc->topic), 1, "") ENDIF SKIP ENDDO ENDIF IF mmk_index SET DELETED ON SET DEVICE TO SCREEN CTR_STR(23, " * * * * Printing Index * * * * ", sys_wrkng) SELECT sys_tblc GOTO TOP SET UNIQUE ON INDEX ON topic + paragraph TO temp SET INDEX TO temp COPY TO temp SET UNIQUE OFF SELECT 0 USE temp STORE "" TO mpara, mtopic DO WHILE !EOF() * Test Printer Readiness st_tout = SECONDS() DO WHILE rpt_outdev = "LPT1" .AND. !ISPRINTER() IF (SECONDS() - st_tout) > 60 SET DEVICE TO SCREEN CTR_STR(23, "Printer Not Ready -- Correct Then Any Key To Continue/Escape To Abort", sys_msgs) BEEP("error") key = _INKEY("SYS_MANL", PROCLINE()) ENDIF ENDDO SET DEVICE TO PRINT EJECT page_ct = page_ct + 1 phdr_aray[1] = "Page No. " + LTRIM(TRAN(page_ct,"99,999")) FOR n = 1 TO LEN(phdr_aray) @ PROW() + 1, M->mrgn SAY SUBSTR(phdr_aray[n], 1, 65) NEXT line_ct = LEN(phdr_aray) + 6 @ PROW() + 1,ROUND((80-LEN("I N D E X"))/2,0) SAY "I N D E X" @ PROW() + 2, 00 SAY "" @ PROW() + 1, mrgn SAY "Topic" @ PROW(), mrgn + 61 SAY "Page" @ PROW() + 1, mrgn SAY REPLICATE(CHR(205), 65) @ PROW() + 1, 0 SAY "" DO WHILE !EOF() IF temp->paragraph = mpara .AND. temp->topic = mtopic DELETE SKIP LOOP ENDIF mpara = temp->paragraph mtopic = temp->topic topic_msg = TRIM(temp->topic) + " [Para: " + TRIM(temp->paragraph) + "]" topic_msg = IIF(LEN(topic_msg) > 57, SUBSTR(topic_msg, 1, 57), topic_msg) repeat_dot = INT((59 - LEN(topic_msg)) / 2) topic_msg = topic_msg + REPLICATE(" .", repeat_dot) topic_msg = IIF(LEN(topic_msg) < 59, STUFF(topic_msg, AT(" .", topic_msg), 0, " "), topic_msg) line_ct = line_ct + 1 @ PROW() + 1, mrgn SAY topic_msg @ PROW(), mrgn + 60 SAY temp->page PICTURE "9,999" SKIP IF line_ct > max_lines EXIT ENDIF ENDDO ENDDO tot_pages = page_ct * PACK * USE IF !abort .AND. EMPTY(DBFILTER()) * IF SELECT("sys_indx") = 0 * SELECT 0 * USE (M->sys_dbpath + "sys_indx") * ELSE * SELECT sys_indx * ENDIF * ZAP * APPEND FROM temp SET DELETED ON COPY TO (M->sys_dbpath + "sys_indx") SET DELETED OFF USE ENDIF DELETE FILE temp.dbf DELETE FILE temp.dbt DELETE FILE temp.ntx ENDIF IF mtbl_cont SET DEVICE TO SCREEN CTR_STR(23, " * * * * Printing Table Of Contents * * * * ", sys_wrkng) SELECT sys_tblc SET INDEX TO GOTO TOP page_ct = 0 STORE "" TO mpara, mtopic DO WHILE !EOF() * Test Printer Readiness st_tout = SECONDS() DO WHILE rpt_outdev = "LPT1" .AND. !ISPRINTER() IF (SECONDS() - st_tout) > 60 SET DEVICE TO SCREEN CTR_STR(23, "Printer Not Ready -- Correct Then Any Key To Continue/Escape To Abort", sys_msgs) BEEP("error") key = _INKEY("SYS_MANL", PROCLINE()) ENDIF ENDDO SET DEVICE TO PRINT EJECT page_ct = page_ct + 1 phdr_aray[1] = "Table Of Contents -=- Page No. " + LTRIM(TRAN(page_ct,"99,999")) FOR n = 1 TO LEN(phdr_aray) @ PROW() + 1, M->mrgn SAY SUBSTR(phdr_aray[n], 1, 65) NEXT line_ct = LEN(phdr_aray) + 6 @ PROW() + 1, 23 SAY "T A B L E O F C O N T E N T S" @ PROW() + 2, 00 SAY "" @ PROW() + 1, mrgn SAY "Paragraph Topic" @ PROW(), mrgn + 61 SAY "Page" @ PROW() + 1, mrgn SAY REPLICATE(CHR(205), 65) @ PROW() + 1, 0 SAY "" DO WHILE !EOF() IF EMPTY(sys_tblc->paragraph) .OR. EMPTY(sys_tblc->topic) .OR.; (sys_tblc->paragraph = mpara .AND. sys_tblc->topic = mtopic) DELETE SKIP LOOP ENDIF mpara = sys_tblc->paragraph mtopic = sys_tblc->topic dot_ct = 0 dot_seq = TRIM(sys_tblc->paragraph) DO WHILE !EMPTY(dot_seq) IF ("." $ dot_seq) dot_ct = dot_ct + 1 dot_seq = STUFF(dot_seq, AT(".", dot_seq), 1, "") ELSE dot_seq = "" ENDIF ENDDO topic_msg = IIF(dot_ct < 3, UPPER(TRIM(sys_tblc->topic)), TRIM(sys_tblc->topic)) repeat_dot = INT((43 - LEN(topic_msg)) / 2) topic_msg = TRIM(topic_msg + REPLICATE(" .", repeat_dot)) topic_msg = IIF(LEN(topic_msg) < 43, STUFF(topic_msg, AT(" .", topic_msg), 0, " "), topic_msg) IF dot_ct = 1 line_ct = line_ct + 1 @ PROW() + 1, 0 SAY "" ENDIF line_ct = line_ct + 1 @ PROW() + 1, mrgn SAY sys_tblc->paragraph @ PROW(), mrgn + 17 SAY topic_msg @ PROW(), mrgn + 60 SAY sys_tblc->page PICTURE "9,999" SKIP IF line_ct > max_lines EXIT ENDIF ENDDO ENDDO tot_pages = tot_pages + page_ct IF !abort .AND. EMPTY(DBFILTER()) SELECT sys_tblc SET DELETED ON COPY TO (M->sys_dbpath + "sys_htoc") SET DELETED OFF * USE * IF SELECT("sys_htoc") = 0 * SELECT 0 * USE (M->sys_dbpath + "sys_htoc") * ELSE * SELECT sys_htoc * ENDIF * ZAP * APPEND FROM (sys_dbpath + "sys_tblc.dbf") * USE ENDIF ENDIF SET DELETED OFF EJECT SET DEVICE TO SCREEN SELECT sys_rpts IF (!abort .AND. cal_runtime) .OR. EMPTY(sys_rpts->est_runtim) REPLACE sys_rpts->est_runtim WITH TSTRING((SECONDS() - runtm_st)),; sys_rpts->est_pages WITH tot_pages ENDIF REPLACE sys_rpts->rpt_last_d WITH DATE(), sys_rpts->rpt_last_t WITH TIME() IF SELECT("sys_tblc") <> 0 SELECT sys_tblc * ZAP USE ENDIF RELEASE ALL RETURN