home *** CD-ROM | disk | FTP | other *** search
/ Beijing Paradise BBS Backup / PARADISE.ISO / software / BBSDOORW / CDOR0811.ZIP / SOURCE.ZIP / SYSOP8.BAS < prev    next >
Encoding:
BASIC Source File  |  1993-07-02  |  37.8 KB  |  1,093 lines

  1. '  $segment
  2. '
  3. '  $linesize:132
  4. '
  5. '  $title: 'SYSOP8.BAS 17.4'
  6. '
  7. '  Copyright (c) 1993 Daniel T. Drinnon
  8. '
  9. '
  10. '  $INCLUDE: 'RBBS-VAR.BAS'
  11. '
  12. '  $SUBTITLE: 'Sysop8 -- PERSONAL/FMS/FFS/RFM OnLine File Maintenance'
  13. '
  14. '  SUBROUTINE NAME    -- SYSOP8
  15. '
  16. '  INPUT PARAMETERS   -- None
  17. '
  18. '  OUTPUT PARAMETERS  -- None
  19. '
  20. '  SUBROUTINE PURPOSE -- Manipulation of the FMS/FFS/Personal Files Systems
  21. '
  22. 100 SUB Sysop8 STATIC
  23. '
  24. ' =============================================================================
  25. ' * Error Handling
  26. ' =============================================================================
  27. '
  28.     ON ERROR GOTO 12000
  29. '
  30. ' =============================================================================
  31. ' * Return from Extended Description on ADD Action
  32. ' =============================================================================
  33. '
  34.     IF ZGetExtDesc THEN
  35.        ZMaxMsgLines = ZMaxMsgLinesDef
  36.        ZRightMargin = WasLL
  37.        CALL UpdtUpload (ZCategoryName$(),ZCategoryCode$(),ZMaxExtendedLines,3)
  38.        ZGetExtDesc = ZFalse
  39.     END IF
  40. '
  41. ' =============================================================================
  42. ' * Main entry prompt
  43. ' =============================================================================
  44. '
  45.     IF ZExpertUser THEN _
  46.        GOTO 110
  47. 101 Sysop8File$ = ZWelcomeFileDrvPath$ + "SYSOP8.MNU"                ' DD061901
  48.     CALL Graphic (Sysop8File$)                                       ' DD061901
  49.     CALL BufFile (Sysop8File$,WasX)                                  ' DD061901
  50. 110 CALL Line25
  51.     DO
  52.        ZOutTxt$ = "A)dd, D)elete, E)dit, F)ind, M)ove, H)elp, [Q]uit"
  53.        GOSUB 11100
  54.     LOOP UNTIL ZWasQ = 0 OR INSTR("ADEFMHQ",ZWasZ$) <> 0
  55.     IF ZWasQ = 0 OR ZWasZ$ = "Q" THEN                                'quit
  56.        ZFileSysParm = 0                                              ' DD070101
  57.        EXIT SUB
  58.     END IF
  59.     WasX = INSTR("ADEFMH",ZWasZ$)
  60.     ON WasX GOSUB 200,300,400,500,600,101
  61.     GOTO 110
  62. '
  63. ' * ===========================================================================
  64. ' * Add a file to the FMS, Upload, or Personal Areas
  65. ' * ===========================================================================
  66. '
  67. 200 Action$ = "ADD"
  68.     GOSUB 700
  69. 205 ZOutTxt$ = ZFGB$ + "Enter " + ZFGA$ + "SOURCE " + ZFGB$ + _
  70.                "Path/Filename of new file to " + Action$ + _
  71.                ZEmphasizeOff$ + ZPressEnterExpert$
  72. '
  73. ' * Get Source File Name
  74. '
  75.     GOSUB 8000
  76.  
  77. '
  78. ' * nothing to do check
  79. '
  80.     IF NOT ZOK THEN _
  81.        GOTO 205
  82.     IF ZWasQ = 0 THEN _
  83.        RETURN
  84. '
  85. ' * option to change target filename
  86. '
  87.     TargetFileName$ = SourceBody$ + SourceExt$
  88.     ZOutTxt$ = ZFGB$ + "Enter " + ZFGA$ + "TARGET " + ZFGB$ + _
  89.                "filename: " + ZEmphasizeOff$ + "[" + _
  90.                TargetFileName$ + "]" + ZEmphasizeOff$
  91.     GOSUB 11000
  92.     IF ZWasQ <> 0 THEN
  93.        TargetFileName$ = UCASE$(ZUserIn$(ZAnsIndex))
  94.     END IF
  95. '
  96. ' * Allow for Personal Uploads
  97. '
  98.     IF ZUserSecLevel >= ZMinSecPersUpld THEN _
  99.        WhoTo$ = "" : _
  100.        ZFileSysParm = 7 : _                                          ' DD070101
  101.        CALL SetWhoTo (ZTrue,WhoTo$,"",RcvrRecNum,Found,ZTrue) _
  102.     ELSE WhoTo$ = "ALL"
  103.     TargetDir$ = ""
  104. '
  105. ' * Setup to select target subdirectory
  106. '
  107.     IF WhoTo$ = "ALL" THEN
  108.        InPers = ZFalse
  109.        GOSUB 2000
  110.     ELSE
  111.         InPers = ZTrue
  112.         InFMS = ZFalse
  113.         TargetDir$ = ZPersonalDrvPath$
  114.         GOSUB 5000
  115.     END IF
  116.     IF ZAnsIndex = 0 THEN
  117.        ZWasQ = 0
  118.        ZWasZ$ = ""
  119.        RETURN
  120.     END IF
  121. '
  122. ' * Make sure copy was successful
  123. '
  124.     CALL FindIt (TargetDir$ + TargetFileName$)
  125.     IF NOT ZOK THEN
  126.        CALL QuickTPut1 (ZFGF$ + ZBG4$ + "ERROR! " + TargetFileName$ + _
  127.                         " not found after COPY!" + ZBG0$ + ZEmphasizeOff$)
  128.        GOTO 205
  129.     END IF
  130. '
  131. ' * option to delete original file
  132. '
  133.     GOSUB 3000
  134. '
  135. ' * get description for directory listing
  136. '
  137.     GOSUB 4000
  138. '
  139. ' * if aborted, then delete the copied file
  140. '
  141.     IF ZAbort THEN
  142.        CALL KillWork (TargetDir$ + TargetFileName$)
  143.        GOTO 205
  144.     END IF
  145. '
  146. ' * log it to the Caller's Log
  147. '
  148.     CALL UpdtCalr ("Added " + TargetFileName$ + " to File System",2)
  149. '
  150. ' * set filename for FIDX
  151. '
  152.     ZFileName$ = TargetFileName$
  153. '
  154. ' * if file was in FIDX/LIDX, then update the FIDX file
  155. '
  156. 215 GOSUB 6000
  157. ' *
  158. ' * All Done
  159. ' *
  160.     RETURN
  161. '
  162. ' * ===========================================================================
  163. ' * Delete an entry from the Upload, FMS, or Personal Areas
  164. ' * ===========================================================================
  165. '
  166. 300 Action$ = "DELETE"
  167.     GOSUB 700
  168. 305 ZOutTxt$ = ZFGB$ + "Enter Filename" + _
  169.                " to " + ZFGA$ + Action$ + ZEmphasizeOff$ + ZPressEnterExpert$
  170. '
  171. ' * Get SourceFileName$
  172. '
  173.     GOSUB 8000
  174.  
  175.     IF ZWasQ = 0 THEN _
  176.        RETURN
  177. '
  178. ' *  if couldn't find file to delete, ask to remove it from file list
  179. '
  180.     CALL FindIt (SourceFileName$)
  181.     IF NOT ZOK THEN
  182.        DO
  183.           ZOutTxt$ = ZFGB$ + "Remove Entry from File List?" + _
  184.                      ZEmphasizeOff$ + ZNoPrompt$
  185.           GOSUB 11100
  186.        LOOP UNTIL ZWasQ = 0 OR INSTR("YN",ZWasZ$) <> 0
  187.        IF ZWasZ$ = "N" OR ZWasQ = 0 THEN
  188.           GOTO 305
  189.        ELSE
  190.           GOSUB 1000
  191.           GOTO 310
  192.        END IF
  193.     END IF
  194.  
  195.     IF ZWasQ = 0 THEN
  196.        RETURN
  197.     END IF
  198. '
  199. ' * find out if file to delete is in the Personal Files
  200. '
  201.     GOSUB 1000
  202. '
  203. ' * delete it
  204. '
  205.     GOSUB 3000
  206. '
  207. ' * if the file was not deleted then go no further
  208. '
  209.     CALL FindIt (SourceFileName$)
  210.     IF ZOK OR ZWasQ = 0 OR ZWasZ$ = "N" THEN
  211.        GOTO 305
  212.     END IF
  213. '
  214. ' * remove the entry from the respective file system (private/FMS)
  215. '
  216. 310 IF InPers THEN
  217.        GOSUB 7000
  218.        GOTO 320
  219.     END IF
  220.     IF ZFastFileSearch THEN
  221.        InFMS = ZTrue
  222.        CALL BreakFileName (SourceFileName$,SourceDrive$, _
  223.                            SourceBody$,SourceExt$,ZTrue)
  224.        ZFileName$ = SourceBody$ + SourceExt$
  225.        GOSUB 6000
  226.        GOSUB 7000
  227.     END IF
  228. '                                                                    ' DD062805
  229. ' * option to add entry to offline file list                         ' DD062805
  230. '                                                                    ' DD062805
  231. 320 CALL BreakFileName (SourceFileName$, Drive$, Body$, Ext$, ZTrue) ' DD062805
  232.     DelFileName$ = Body$ + Ext$                                      ' DD062805
  233.     DO                                                               ' DD062805
  234.        ZOutTxt$ = ZFGB$ + "Add " + ZFG2$ + DelFileName$ + _          ' DD062805
  235.                   ZFGB$ + " to " + ZFG2$ + "OFFLINE " + _            ' DD062805
  236.                   ZFGB$ + "list?" + _                                ' DD062805
  237.                   ZEmphasizeOff$ + ZNoPrompt$                        ' DD062805
  238.        GOSUB 11100                                                   ' DD062805
  239.     LOOP UNTIL ZWasQ = 0 OR INSTR("YN",ZWasZ$) <> 0                  ' DD062805
  240.     IF ZWasZ$ = "N" OR ZWasQ = 0 THEN                                ' DD062805
  241.        GOTO 330                                                      ' DD062805
  242.     ELSE                                                             ' DD062805
  243.        ZOutTxt$ = ZFGB$ + "Enter Filename" + _                       ' DD062805
  244.                " of " + ZFGA$ + "OFFLINE List" + _                   ' DD062805
  245.                ZEmphasizeOff$ + ZPressEnterExpert$                   ' DD062805
  246.        GOSUB 11000                                                   ' DD062805
  247.        IF ZWasQ = 0 THEN                                             ' DD062805
  248.           GOTO 330                                                   ' DD062805
  249.        END IF                                                        ' DD062805
  250.        OfflineFileName$ = UCASE$(ZUserIn$(ZAnsIndex))                ' DD062805
  251.        CALL FindIt (OfflineFileName$)                                ' DD062805
  252.        IF NOT ZOK THEN                                               ' DD062805
  253.           ZOutTxt$ = ZFGE$ + OfflineFileName$ + _                    ' DD062805
  254.                      " does not exist!  Create?" + _                 ' DD062805
  255.                      ZEmphasizeOff$ + ZNoPrompt$                     ' DD062805
  256.           GOSUB 11100                                                ' DD062805
  257.           IF ZWasZ$ = "N" OR ZWasQ = 0 THEN                          ' DD062805
  258.              GOTO 320                                                ' DD062805
  259.           END IF                                                     ' DD062805
  260.        END IF                                                        ' DD062805
  261.        CALL OpenWorkA (2,OfflineFileName$)                           ' DD062805
  262.        CALL PrintWorkA (2, DelFileName$)                             ' DD062805
  263.        CLOSE 2                                                       ' DD062805
  264.     END IF                                                           ' DD062805
  265. '
  266. ' * log it to the Caller's Log
  267. '
  268. 330 CALL UpdtCalr ("Deleted " + SourceFileName$ + " from File System",2) ' DD062805
  269. '
  270. ' All done
  271. '
  272.     RETURN
  273. '
  274. ' * ===========================================================================
  275. ' * Edit an entry in the Upload, FMS, or Personal Areas
  276. ' * ===========================================================================
  277. '
  278. 400 Action$ = "EDIT"
  279.     GOSUB 700
  280.     RETURN
  281. '
  282. ' * ===========================================================================
  283. ' * Find an entry in the Upload, FMS, or Personal Areas
  284. ' * ===========================================================================
  285. '
  286. 500 Action$ = "FIND"
  287.     GOSUB 700
  288.  
  289.     ZOutTxt$ = ZFGB$ + "Enter Filename" + _
  290.                " to " + ZFGA$ + Action$ + ZEmphasizeOff$ + ZPressEnterExpert$
  291. '
  292. ' * get filename to find
  293. '
  294.     GOSUB 8000
  295. '
  296.     IF ZWasQ = 0 THEN _
  297.        RETURN
  298. '
  299. ' * give location
  300. '
  301.     IF ZOK THEN
  302.        CALL BreakFileName (SourceFileName$,SourceDrive$, _
  303.                            SourceBody$,SourceExt$,ZTrue)
  304.        CALL QuickTPut1 (ZFGB$ + SourceBody$ + SourceExt$ + _
  305.                         ZFG2$ + " is located in " + _
  306.                         ZFGB$ + SourceDrive$ + ZEmphasizeOff$)
  307.        RETURN
  308.     END IF
  309. '
  310. ' All done
  311. '
  312.     RETURN
  313. '
  314. ' * ===========================================================================
  315. ' * Move an entry from/to the Upload, FMS, or Personal Areas
  316. ' * ===========================================================================
  317. '
  318. 600 Action$ = "MOVE"
  319.     GOSUB 700
  320.  
  321. 605 ZOutTxt$ = ZFGB$ + "Enter Filename" + _
  322.                " to " + ZFGA$ + Action$ + ZEmphasizeOff$ + ZPressEnterExpert$
  323. '
  324. ' * get filename to find
  325. '
  326.     GOSUB 8000
  327. '
  328.     IF ZWasQ = 0 THEN _
  329.        RETURN
  330.  
  331.     IF ZOK THEN
  332.        CALL BreakFileName (SourceFileName$,SourceDrive$, _
  333.                            SourceBody$,SourceExt$,ZTrue)
  334.  
  335.        TargetFileName$ = SourceFileName$
  336.        CALL BreakFileName (TargetFileName$,TargetDir$, _
  337.                            TargetBody$,TargetExt$,ZTrue)
  338.        TargetFileName$ = TargetBody$ + TargetExt$
  339.     END IF
  340. '
  341. ' * Allow for Personal Uploads
  342. '
  343.     IF ZUserSecLevel >= ZMinSecPersUpld THEN _
  344.        WhoTo$ = "" : _
  345.        CALL SetWhoTo (ZTrue,WhoTo$,"",RcvrRecNum,Found,ZTrue) _
  346.     ELSE WhoTo$ = "ALL"
  347.     TargetDir$ = ""
  348. '
  349. ' * Setup to select target subdirectory
  350. '
  351.     IF WhoTo$ = "ALL" THEN
  352.        InPers = ZFalse
  353.        GOSUB 2000
  354.     ELSE
  355.         InPers = ZTrue
  356.         InFMS = ZFalse
  357.         TargetDir$ = ZPersonalDrvPath$
  358.         GOSUB 5000
  359.     END IF
  360.     IF ZAnsIndex = 0 THEN
  361.        ZWasQ = 0
  362.        ZWasZ$ = ""
  363.        RETURN
  364.     END IF
  365. '
  366. ' * Make sure copy was successful
  367. '
  368.     CALL FindIt (TargetDir$ + TargetFileName$)
  369.     IF NOT ZOK THEN
  370.        CALL QuickTPut1 (ZFGF$ + ZBG4$ + "ERROR! " + TargetFileName$ + _
  371.                         " not found after COPY!" + ZBG0$ + ZEmphasizeOff$)
  372.        GOTO 605
  373.     END IF
  374. '
  375. ' * delete the original
  376. '
  377.  
  378. GOSUB 3000
  379. '    CALL KillWork (SourceFileName$)
  380.  
  381. '
  382. ' * set filename for FIDX
  383. '
  384.     ZFileName$ = TargetFileName$
  385. '
  386. ' * if file was in FIDX/LIDX, then update the FIDX file
  387. '
  388.     GOSUB 6000
  389. ' *
  390. ' * All Done
  391. ' *
  392.     RETURN
  393. '
  394. ' * ===========================================================================
  395. ' * Build and display an Action prompt
  396. ' * ===========================================================================
  397. '
  398. 700 CALL SkipLine (1)
  399.     CALL QuickTPut1 (ZFGE$ + Action$ + " an FMS Entry" + ZEmphasizeOff$)
  400.     RETURN
  401. '
  402. ' =============================================================================
  403. ' * determine if the file is in Personals or FMS
  404. ' =============================================================================
  405. '
  406. 1000 CALL WordInFile (ZPersonalDir$,SourceBody$ + SourceExt$,ZOK)
  407.      IF ZOK THEN
  408.         InFMS = ZFalse
  409.         InPers = ZTrue
  410.      ELSE
  411.         InFMS = ZTrue
  412.         InPers = ZFalse
  413.      END IF
  414.      RETURN
  415. '
  416. ' =============================================================================
  417. ' * Pick Subdirectory to copy file to.  Look in subdirectories listed
  418. ' * in CONFIG first.  If FIDX/LIDX is used, use them too.
  419. ' *
  420. ' * Check the directories listed in CONFIG
  421. ' * The FIRST Subdirectory ZSubDir$(1) is always the UPLOAD sub
  422. ' * any other subdirectories listed in CONFIG should
  423. ' * not be in the FFS
  424. ' =============================================================================
  425. '
  426. 2000 FOR WasX = 1 TO ZSubDirCount - 1
  427.         DO
  428.            ZOutTxt$ = ZFGB$ + Action$ + SPACE$(1) + ZFG2$ + SourceFileName$ + _
  429.                       ZFGB$ + " to " + ZFG2$ + ZSubDir$(WasX) + _
  430.                       ZEmphasizeOff$ + " (Y)es,[N]o,A)bort)"
  431.            GOSUB 11100
  432.         LOOP UNTIL ZWasQ = 0 OR INSTR("YNA",ZWasZ$) <> 0
  433.         IF ZWasZ$ = "A" THEN
  434.            ZAnsIndex = 0
  435.            RETURN
  436.         END IF
  437.         IF ZWasZ$ = "Y" THEN
  438.            InPers = ZFalse
  439.            InFMS = ZFalse
  440.            TargetDir$ = ZSubDir$(WasX)
  441.            CALL BreakFileName (ZFMSDirectory$,TDirPath$, _
  442.                                TMainFMSDir$,TMainDirExtension$,ZFalse)
  443.            GOSUB 5000
  444.            RETURN
  445.         END IF
  446.      NEXT WasX
  447. ' *
  448. ' * Search through the FIDX
  449. ' * Look for the FIDX.LST first
  450. ' *
  451.      IF ZFastFileSearch THEN
  452.         TFastFileLocator$ = ZFastFileLocator$
  453.         CALL BreakFileName (ZFastFileList$,Drive$,Body$,Ext$,ZTrue)
  454.         CALL FindIt (Drive$ + "SYSOP8.CFG")                          ' DD062802
  455.         IF ZOK THEN                                                  ' DD062802
  456.            CALL OpenWork (7, Drive$ + "SYSOP8.CFG")                  ' DD062802
  457.         ELSE                                                         ' DD062802
  458.            CALL FindIt (Drive$ + Body$ + ".LST")                     ' DD062802
  459.            IF ZOK THEN                                               ' DD062802
  460.               CALL OpenWork (7,Drive$ + Body$ + ".LST")              ' DD062802
  461.            END IF                                                    ' DD062802
  462.         END IF                                                       ' DD062802
  463.         LineToRead = 1
  464.         IF ZOK THEN                                                  ' DD062802
  465.            IF ZErrCode <> 0 THEN
  466.               GOSUB 2010
  467.               GOTO 2020
  468.            END IF
  469. 2005       CALL ReadParmsX (7,ZOutTxt$(),4,LineToRead)
  470.            IF ZErrCode <> 0 AND ZOutTxt$(2) = "" THEN
  471.               CLOSE 7
  472.               GOTO 2020
  473.            END IF
  474.            TFastFileList$ = UCASE$(ZOutTxt$(1))
  475.            TFastFileLocator$ = UCASE$(ZOutTxt$(2))
  476.            CALL BreakFileName (UCASE$(ZOutTxt$(3)),TDirPath$,TMainFMSDir$, _
  477.                               TMainDirExtension$,ZFalse)
  478.            TMaxDescLen = VAL(ZOutTxt$(4))
  479.            GOSUB 2010
  480.            IF ZWasZ$ = "Y" THEN
  481.               InPers = ZFalse
  482.               InFMS = ZTrue
  483.               GOTO 2020
  484.            END IF
  485.            LineToRead = LineToRead + 1
  486.            ZOutTxt$(2) = ""
  487.            GOTO 2005
  488.         ELSE
  489.            GOSUB 2010
  490.            GOTO 2020
  491.         END IF
  492. 2010    CALL OpenRSeq (2,TFastFileLocator$,HighRec,WasX,66)
  493.         FIELD 2, 66 AS Location$
  494.         IF LineToRead = 1 THEN
  495.            Start = 2
  496.         ELSE
  497.            Start = 1
  498.         END IF
  499.         FOR WasX = Start TO HighRec
  500.            GET 2, WasX
  501.            Select$ = LEFT$(Location$,63)
  502.            CALL Trim (Select$)
  503.            IF LEFT$(Select$,2) <> "M!" THEN
  504.               ZOutTxt$ = ZFGB$ + Action$ + SPACE$(1) + ZFG2$ + _
  505.                          SourceFileName$ + _
  506.                          ZFGB$ + " to " + ZFG2$ + Select$ + _
  507.                          ZEmphasizeOff$ + " (Y)es,[N]o,A)bort)"
  508.               GOSUB 11100
  509.               IF ZWasZ$ = "A" THEN
  510.                  ZAnsIndex = 0
  511.                  RETURN
  512.               END IF
  513.               IF ZWasZ$ = "Y" THEN
  514.                  InPers = ZFalse
  515.                  InFMS = ZTrue
  516.                  LidxPos = WasX
  517.                  TargetDir$ = Select$
  518.                  CLOSE 2
  519.                  GOSUB 5000
  520.                  RETURN
  521.               END IF
  522.            END IF
  523.         NEXT WasX
  524.         CLOSE 2
  525.         RETURN
  526.      END IF
  527. 2020 IF TargetDir$ = "" THEN _
  528.         GOTO 2000
  529.      RETURN
  530. '
  531. ' =============================================================================
  532. ' * option to delete original file
  533. ' =============================================================================
  534. '
  535. 3000 DO
  536.         ZOutTxt$ = ZFGC$ + "Delete " + ZFGE$ + SourceFileName$ + _
  537.                    ZFGC$ + "?" + ZEmphasizeOff$ + ZNoPrompt$
  538.         GOSUB 11100
  539.      LOOP UNTIL ZWasQ = 0 OR INSTR("YN",ZWasZ$) <> 0
  540.      IF ZWasQ > 0 AND ZWasZ$ = "Y" THEN
  541.         CALL KillWork (SourceFileName$)
  542.      END IF
  543.      RETURN
  544. '
  545. ' =============================================================================
  546. ' * get description for directory listing
  547. ' =============================================================================
  548. '
  549. 4000 CALL BreakFileName (TargetFileName$,Pre$,Body$,Ext$,ZFalse)
  550.      HoldUpldDir$ = ZUpldDir$
  551.      HoldFMSDirectory$ = ZFMSDirectory$
  552.      GOSUB 4010
  553.      CALL UpdtUpload (ZCategoryName$(),ZCategoryCode$(),0,1)
  554.      GOSUB 4010
  555.      CALL UpdtUpload (ZCategoryName$(),ZCategoryCode$(),0,2)
  556.      ZFMSDirectory$ = HoldFMSDirectory$
  557.      GOSUB 4020
  558.      CALL FindIt (ZFileName$)
  559.      IF NOT ZOK THEN
  560.         CALL QuickTPut1 ("Upload Aborted")
  561.      END IF
  562.      IF ZGetExtDesc THEN
  563.         ZMsgHeader$ = "Extended Description of " + ZFileNameHold$
  564.         ZSysopComment = ZTrue
  565.         ZMaxMsgLines = ZMaxExtendedLines
  566.         WasLL = ZRightMargin
  567.         ZRightMargin = 30 + ZMaxDescLen + (5 * ZShowTimesDownloaded)
  568.         IF ZRightMargin > 74 THEN _
  569.            ZRightMargin = 74
  570.         EXIT SUB
  571.      END IF
  572.      RETURN
  573. '==============================================================================
  574. ' * some rbbs configurations seem to leave off the trailing "\"
  575. '==============================================================================
  576. 4010 IF RIGHT$(TDirPath$,1) <> "\" THEN
  577.         ZFMSDirectory$ = TDirPath$ + "\" + TMainFMSDir$ + "." + TMainDirExtension$
  578.      ELSE
  579.         ZFMSDirectory$ = TDirPath$ + TMainFMSDir$ + "." + TMainDirExtension$
  580.      END IF
  581.      IF RIGHT$(ZFMSDirectory$,1) <> "\" THEN
  582.         ZUpldDir$ = ZFMSDirectory$
  583.      ELSE
  584.         ZUpldDir$ = ZFMSDirectory$
  585.      END IF
  586. 4020 ZFileName$ = TargetDir$ + TargetFileName$
  587.      ZFileNameHold$ = TargetFileName$
  588.      RETURN
  589. '
  590. ' =============================================================================
  591. ' * copy file from source to target
  592. ' =============================================================================
  593. '
  594. 5000 IF SourceFileName$ = TargetDir$ + TargetFileName$ THEN
  595.         CALL QuickTPut1 (ZFG9$ + "SOURCE and TARGET " + _
  596.                          "are the SAME!" + ZEmphasizeOff$)
  597.         RETURN
  598.      END IF
  599.      CopyCommand$ = "COPY " + SourceFileName$ + SPACE$(1) + _
  600.                         TargetDir$ + TargetFileName$ + " > NUL"
  601.      CALL QuickTPut1 (ZFG9$ + "Copying " + ZFGB$ + SourceFileName$ + _
  602.                       ZFG9$ + " as " + ZFGB$ + TargetFileName$ + _
  603.                       ZFG9$ + " to " + ZFGB$ + TargetDir$ + ZEmphasizeOff$)
  604.      CALL ShellExit (CopyCommand$)
  605.      RETURN
  606. '
  607. ' =============================================================================
  608. ' * if file was in FIDX/LIDX, then update the FIDX file
  609. ' =============================================================================
  610. '
  611. 6000 IF InFMS = ZFalse OR InPers = ZTrue OR NOT ZFastFileSearch THEN _
  612.          RETURN
  613.      CALL QuickTPut1(ZFG2$ + "Rebuilding " + ZFGB$ + _
  614.                      TFastFileList$ + ZEmphasizeOff$)
  615.      FSize = 21
  616.      CALL OpenRSeq (2,TFastFileList$,HighRec,WasX,21)
  617.      FIELD #2, 12 AS SearchFile$, _
  618.                 4 AS SearchPath$, _
  619.                 3 AS SearchDate$, _
  620.                 2 AS SearchCrLf$
  621.      GET 2,1
  622.      IF SearchCrLf$ <> ZCRLf$ THEN _
  623.         FSize = 18 : _
  624.         CALL OpenRSeq (2,TFastFileList$,HighRec,WasX,18) : _
  625.         FIELD #2, 12 AS SearchFile$, _
  626.                    4 AS SearchPath$, _
  627.                    2 AS SearchCrLf$
  628.      SearchFile$ = ZFileName$
  629.      WasX$ = MID$(STR$(LidxPos),2)
  630.      WasX$ = SPACE$(4 - LEN(WasX$)) + WasX$
  631.      SearchPath$ = WasX$
  632.      IF FSize > 18 THEN _
  633.         WasDX$ = DATE$ : _
  634.         SearchDate$ = CHR$ (VAL (MID$ (WasDX$, 9, 2)) - 48) + _
  635.                       CHR$ (VAL (MID$ (WasDX$, 1, 2)) + 31) + _
  636.                       CHR$ (VAL (MID$ (WasDX$, 4, 2)) + 31) : _
  637.      SearchCrLf$ = ZCRLf$
  638.  
  639.      IF FSize > 18 THEN _
  640.         Template$ = SPACE$(21) : _
  641.         MID$(Template$,17,3) = SearchDate$ : _
  642.         MID$(Template$,20,2) = SearchCrLf$ _
  643.      ELSE _
  644.         Template$ = SPACE$(18) : _
  645.         MID$(Template$,17,2) = SearchCrLf$
  646.      MID$(Template$,1,12) = SearchFile$
  647.      MID$(Template$,13,4) = SearchPath$
  648. '
  649. ' * Rebuild the FIDX file
  650. '
  651. 6010 CALL OpenRSeq (2,TFastFileList$,HighRec,WasX,FSize)
  652.      FIELD #2, Fsize AS OldFidx$
  653.      FIDXFileName$ = TDirPath$ + "FIDX.$$$"
  654.      CALL OpenRSeq (7,FIDXFileName$,XX,XX,FSize)
  655.      FIELD #7, FSize AS WorkFidx$
  656.      NumRecs = LOF(2) / FSize
  657.      Flag = ZFalse
  658.      FOR Count = 1 TO NumRecs
  659.         GET 2
  660.         IF Action$ = "ADD" THEN
  661.            IF MID$(OldFidx$,1,12) > MID$(Template$,1,12) _
  662.               AND Flag = ZFalse THEN
  663.               LSET WorkFidx$ = Template$
  664.               PUT 7
  665.               Flag = ZTrue
  666.            END IF
  667.            LSET WorkFidx$ = OldFidx$
  668.            PUT 7
  669.         END IF
  670.         IF Action$ = "DELETE" THEN
  671.            IF MID$(OldFidx$,1,12) < MID$(Template$,1,12) THEN
  672.               LSET WorkFidx$ = OldFidx$
  673.               PUT 7
  674.            END IF
  675.            IF MID$(OldFidx$,1,12) > MID$(Template$,1,12) THEN
  676.               LSET WorkFidx$ = OldFidx$
  677.               PUT 7
  678.            END IF
  679.         END IF
  680.         IF Action$ = "MOVE" THEN
  681.            IF MID$(OldFidx$,1,12) < MID$(Template$,1,12) THEN
  682.               LSET WorkFidx$ = OldFidx$
  683.               PUT 7
  684.            END IF
  685.            IF MID$(OldFidx$,1,12) = MID$(Template$,1,12) THEN
  686.               LSET WorkFidx$ = Template$
  687.               PUT 7
  688.            END IF
  689.            IF MID$(OldFidx$,1,12) > MID$(Template$,1,12) THEN
  690.               LSET WorkFidx$ = OldFidx$
  691.               PUT 7
  692.            END IF
  693.         END IF
  694.      NEXT Count
  695. '    CLOSE 2
  696.      CLOSE 7
  697.      CALL KillWork (TFastFileList$)
  698.      NAME FIDXFileName$ AS TFastFileList$
  699. '
  700. ' * make a new FIDXT tab file
  701. '
  702. 6020 IF TFastFileList$ = "" THEN
  703.         TFastFileList$ = ZFastFileList$
  704.      END IF
  705.      DIM StartPos(36)
  706.      CharsCounted$ = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  707.      CLOSE 2
  708.      CALL OpenWork (2,TFastFileList$)
  709.      FOR i = 1 TO 36
  710.         StartPos(i) = 0
  711.      NEXT
  712.      IndexPos = 1
  713.      LinesRead = 0
  714.      WHILE NOT EOF(2)
  715.         LINE INPUT #2, A$
  716.         LinesRead = LinesRead + 1
  717.         IndexChar$ = MID$(A$, IndexPos, 1)
  718.         Position = INSTR(CharsCounted$, IndexChar$)
  719.         IF Position > 0 THEN
  720.            IF StartPos(Position) = 0 THEN
  721.               StartPos(Position) = LinesRead
  722.            END IF
  723.         END IF
  724.      WEND
  725.      CLOSE 2
  726.      CALL BreakFileName (TFastFileList$,Pre$,Body$,Ext$,ZTrue)
  727.      FastTabFile$ = Pre$ + Body$ + "T" + Ext$
  728.      CALL OpenRSeq (2,FastTabFile$,HighRec,WasX,72)
  729.      CALL QuickTPut1(ZFG2$ + "Re-Indexing " + ZFGB$ + _
  730.                      FastTabFile$ + ZEmphasizeOff$)
  731.      FIELD #2, 72 AS OutRec$
  732.      PrevValue = 0
  733.      i = 1
  734.      WHILE i < 37 AND StartPos (i) = 0
  735.         StartPos (i) = 1
  736.         i = i + 1
  737.      WEND
  738.      i = 36
  739.      WHILE i > 0 AND StartPos(i) = 0
  740.         i = i - 1
  741.      WEND
  742.      StartPos(36) = StartPos(i)
  743.      FOR i = 36 TO 1 STEP -1
  744.         IF StartPos(i) = 0 THEN
  745.            CurrentValue = 1
  746.            IF PrevValue > CurrentValue THEN
  747.               CurrentValue = PrevValue
  748.            END IF
  749.         ELSE
  750.            CurrentValue = StartPos(i)
  751.         END IF
  752.         StartPos(i) = CurrentValue
  753.         PrevValue = CurrentValue
  754.      NEXT
  755.      FOR i = 1 TO 36
  756.         MID$(OutRec$, 1 + 2 * (i - 1), 2) = MKI$(StartPos(i))
  757.      NEXT
  758.      PUT 2, 1
  759.      CLOSE 2
  760.      RETURN
  761. '
  762. ' =============================================================================
  763. ' * Update the MASTER.DIR or PERSONAL DIR file
  764. ' =============================================================================
  765. '
  766. 7000 CALL BreakFileName (SourceFileName$,SourceDrive$, _
  767.                          SourceBody$,SourceExt$,ZTrue)
  768.      CALL BreakFileName (ZPersonalDir$,PerPre$,PerBody$,PerExt$,ZFalse)
  769.      DeleteFile$ = SourceBody$ + SourceExt$
  770.      IF InPers THEN
  771.         CALL QuickTPut1(ZFG2$ + "Rebuilding " + ZFGB$ + _
  772.                         ZPersonalDir$ + ZEmphasizeOff$)
  773.         FSize = 12 + 21 + ZMaxDescLen + (5 * ZShowTimesDownloaded) + ZPersonalLen + 1 + 2
  774.         CALL OpenRSeq (2,ZPersonalDir$,HighRec,WasX,FSize)
  775.         FIELD #2, 12 AS FileName$, _
  776.                   21 + ZMaxDescLen + (5 * ZShowTimesDownloaded) AS FileDesc$, _
  777.                   ZPersonalLen + 1 AS FilePers$, _
  778.                    2 AS FileChar$
  779.         CALL OpenRSeq (7,PerPre$ + "\" + PerBody$ + ".$$$",XX,XX,FSize)
  780.         FIELD #7, 12 AS WorkFileName$, _
  781.                   21 + ZMaxDescLen + (5 * ZShowTimesDownloaded) AS WorkFileDesc$, _
  782.                   ZPersonalLen + 1 AS WorkFilePers$, _
  783.                    2 AS WorkFileChar$
  784.      ELSE
  785.         CALL QuickTPut1(ZFG2$ + "Rebuilding " + ZFGB$ + _
  786.                         TDirPath$ + TMainFMSDir$ + "." + _
  787.                         TMainDirExtension$ + ZEmphasizeOff$)
  788.         FSize = 12 + 10 + 11 + TMaxDescLen + 3 + 2
  789.         CALL OpenRSeq (2,TDirPath$ + TMainFMSDir$ + "." + _
  790.                        TMainDirExtension$,HighRec,WasX,Fsize)
  791.         FIELD #2, 12 AS FileName$, _
  792.                   10 AS FileSize$, _
  793.                   11 AS FileDate$, _
  794.                   TMaxDescLen + 1 AS FileDesc$, _
  795.                    4 AS FileCat$
  796.         CALL OpenRSeq (7,TDirPath$ + TMainFMSDir$ + ".$$$",XX,XX,FSize)
  797.         FIELD #7, 12 AS WorkFileName$, _
  798.                   10 AS WorkFileSize$, _
  799.                   11 AS WorkFileDate$, _
  800.                   TMaxDescLen + 1 AS WorkFileDesc$, _
  801.                    4 AS WorkFileCat$
  802.      END IF
  803.      '*
  804.      '* Parse the list to look for possible extended descriptions
  805.      '*
  806.      SourceCount = HighRec
  807.      LastWasIt = ZFalse
  808.      FOR InCount = HighRec TO 1 STEP -1
  809.         GET 2, InCount
  810.         IF DeleteFile$ + SPACE$(12-LEN(DeleteFile$)) <> FileName$ THEN
  811.            IF LastWasIt = ZTrue THEN
  812.               IF LEFT$(FileName$,1) = SPACE$(1) THEN
  813.                  SourceCount = SourceCount - 1
  814.               ELSE
  815.                  LastWasIt = ZFalse
  816.               END IF
  817.            END IF
  818.         ELSE
  819.            LastWasIt = ZTrue
  820.            SourceCount = SourceCount - 1
  821.         END IF
  822.      NEXT InCount
  823.      '*
  824.      '* rebuild the file list
  825.      '*
  826.      OutCount = SourceCount
  827.      LastWasIt = ZFalse
  828.      FOR InCount = HighRec TO 1 STEP -1
  829.         GET 2, InCount
  830.         '*
  831.         '* check for extended on the deleted file
  832.         '*
  833.         IF LastWasIt = ZTrue THEN
  834.            IF LEFT$(FileName$,1) = SPACE$(1) THEN
  835.               LastWasIt = ZTrue
  836.            ELSE
  837.               LastWasIt = ZFalse
  838.            END IF
  839.         END IF
  840.         IF DeleteFile$ + SPACE$(12-LEN(DeleteFile$)) <> FileName$ THEN
  841.            IF LastWasIt = ZFalse THEN
  842.               IF InPers THEN
  843.                  LSET WorkFileName$ = FileName$
  844.                  LSET WorkFileDesc$ = FileDesc$
  845.                  LSET WorkFilePers$ = FilePers$
  846.                  LSET WorkFileChar$ = FileChar$
  847.               ELSE
  848.                  LSET WorkFileName$ = FileName$
  849.                  LSET WorkFileSize$ = FileSize$
  850.                  LSET WorkFileDate$ = FileDate$
  851.                  LSET WorkFileDesc$ = FileDesc$
  852.                  LSET WorkFileCat$ = FileCat$
  853.               END IF
  854.               PUT 7, OutCount
  855.               OutCount = OutCount - 1
  856.            ELSE
  857.               CALL QuickTPut1 (ZFG2$ + "Removing Extended " + _
  858.                             "Description" + ZEmphaisizeOff$)
  859.            END IF
  860.         ELSE
  861.            LastWasIt = ZTrue
  862.            CALL QuickTPut1 (ZFG2$ + "Found " + ZFGB$ + _
  863.                             DeleteFile$ + ZFG2$ + _
  864.                             " - Removing Entry" + ZEmphaisizeOff$)
  865.         END IF
  866.      NEXT InCount
  867.      CLOSE 2
  868.      CLOSE 7
  869.      '*
  870.      '* kill the old listing and rename the new one
  871.      '*
  872.      IF InPers THEN
  873.         CALL KillWork (ZPersonalDir$)
  874.         NAME PerPre$ + "\" + PerBody$ + ".$$$" AS ZPersonalDir$
  875.      END IF
  876.      IF InFMS THEN
  877.         CALL KillWork (TDirPath$ + TMainFMSDir$ + "." + _
  878.                        TMainDirExtension$)
  879.         NAME TDirPath$ + TMainFMSDir$ + ".$$$" AS TDirPath$ + _
  880.              TMainFMSDir$ + "." + _
  881.              TMainDirExtension$
  882.      END IF
  883.      RETURN
  884. '
  885. ' =============================================================================
  886. ' * Input SourceFileName for Action
  887. ' =============================================================================
  888. '
  889. 8000 GOSUB 11000
  890.      IF ZWasQ = 0 THEN
  891.         RETURN
  892.      END IF
  893.      SourceFileName$ = ZUserIn$(ZAnsIndex)
  894.      CALL AllCaps (SourceFileName$)
  895.      CALL BreakFileName (SourceFileName$,SourceDrive$, _
  896.                          SourceBody$,SourceExt$,ZTrue)
  897.      Found = ZFalse
  898.      IF Action$ = "ADD" THEN
  899.         CALL FindIt (SourceFileName$)
  900.         IF ZOK THEN
  901.            Found = ZTrue
  902.            RETURN
  903.         END IF
  904.      ELSE
  905.         SourceFileName$ = SourceBody$ + SourceExt$
  906.         CALL FindIt (ZPersonalDrvPath$ + SourceBody$ + SourceExt$)
  907.         IF ZOK THEN
  908.            Found = ZTrue
  909.            IF Action$ = "FIND" OR Action$ = "MOVE" THEN
  910.               SourceFileName$ = ZPersonalDrvPath$ + SourceBody$ + SourceExt$
  911.               RETURN
  912.            END IF
  913.            DO
  914.               ZOutTxt$ = ZFGB$ + Action$ + SPACE$(1) + ZFG2$ + _
  915.                          SourceBody$ + SourceExt$ + _
  916.                          ZFGB$ + " from " + ZFG2$ + ZPersonalDrvPath$ + _
  917.                          ZEmphasizeOff$ + " (Y)es,[N]o,A)bort)"
  918.               GOSUB 11100
  919.            LOOP Until ZWasQ = 0 OR INSTR("YNA",ZWasZ$) <> 0
  920.            IF ZWasZ$ = "A" THEN
  921.               Found = ZFalse
  922.               ZAnsIndex = 0
  923.               RETURN
  924.            END IF
  925.            IF ZWasZ$ = "Y" THEN
  926.               InPers = ZTrue
  927.               InFMS = ZFalse
  928.               SourceFileName$ = ZPersonalDrvPath$ + SourceBody$ + SourceExt$
  929.               RETURN
  930.            END IF
  931.            Found = ZFalse
  932.         END IF
  933.         FOR WasX = 1 TO ZSubDirCount - 1
  934.            CALL FindIt (ZSubDir$(WasX) + SourceBody$ + SourceExt$)
  935.            IF ZOK THEN
  936.               Found = ZTrue
  937.               IF Action$ = "FIND" OR Action$ = "MOVE" THEN
  938.                  SourceFileName$ = ZSubDir$(WasX) + SourceBody$ + SourceExt$
  939.                  RETURN
  940.               END IF
  941.               ZOutTxt$ = ZFGB$ + Action$ + SPACE$(1) + ZFG2$ + _
  942.                          SourceBody$ + SourceExt$ + _
  943.                          ZFGB$ + " from " + ZFG2$ + ZSubDir$(WasX) + _
  944.                          ZEmphasizeOff$ + " (Y)es,[N]o,A)bort)"
  945.               GOSUB 11100
  946.               IF ZWasZ$ = "A" THEN
  947.                  Found = ZFalse
  948.                  ZAnsIndex = 0
  949.                  RETURN
  950.               END IF
  951.               IF ZWasZ$ = "Y" THEN
  952.                  SourceFileName$ = ZSubDir$(WasX) + _
  953.                                    SourceBody$ + SourceExt$
  954.                  TDirPath$ = ZDirPath$
  955.                  TMainFMSDir$ = ZMainFMSDir$
  956.                  TMainDirExtension$ = ZMainDirExtension$
  957.                  TMaxDescLen = ZMaxDescLen
  958.                  TFastFileList$ = ZFastFileList$
  959.                  TFastFileLocator$ = ZFastFileLocator$
  960.                  RETURN
  961.               END IF
  962.               Found = ZFalse
  963.            END IF
  964.         NEXT WasX
  965.         IF ZFastFileSearch THEN
  966.            TFastFileLocator$ = ZFastFileLocator$
  967.            CALL BreakFileName (ZFastFileList$,Drive$,Body$,Ext$,ZTrue)
  968.            CALL FindIt (Drive$ + "SYSOP8.CFG")                       ' DD062802
  969.            IF ZOK THEN                                               ' DD062802
  970.               CALL OpenWork (7, Drive$ + "SYSOP8.CFG")               ' DD062802
  971.            ELSE                                                      ' DD062802
  972.               CALL FindIt (Drive$ + Body$ + ".LST")                  ' DD062802
  973.               IF ZOK THEN                                            ' DD062802
  974.                  CALL OpenWork (7,Drive$ + Body$ + ".LST")           ' DD062802
  975.               END IF                                                 ' DD062802
  976.            END IF                                                    ' DD062802
  977.            LineToRead = 1
  978.            IF ZOK THEN                                               ' DD062802
  979.               IF ZErrCode <> 0 THEN
  980.                  GOSUB 8010
  981.                  GOTO 8020
  982.               END IF
  983. 8005          CALL ReadParmsX (7,ZOutTxt$(),4,LineToRead)
  984.               IF ZErrCode <> 0 AND ZOutTxt$(1) = "" THEN
  985.                  CLOSE 7
  986.                  GOTO 8020
  987.               END IF
  988.               TFastFileList$ = UCASE$(ZOutTxt$(1))
  989.               TFastFileLocator$ = UCASE$(ZOutTxt$(2))
  990.               CALL BreakFileName (UCASE$(ZOutTxt$(3)),TDirPath$, _
  991.                                   TMainFMSDir$,TMainDirExtension$,ZFalse)
  992.               TMaxDescLen = VAL(ZOutTxt$(4))
  993.               GOSUB 8010
  994.               IF ZWasZ$ = "Y" THEN
  995.                  GOTO 8020
  996.               END IF
  997.               LineToRead = LineToRead + 1
  998.               ZOutTxt$(1) = ""
  999.               GOTO 8005
  1000.            ELSE
  1001.               GOSUB 8010
  1002.               GOTO 8020
  1003.            END IF
  1004. 8010       CALL OpenRSeq (14,TFastFileLocator$,HighRec,WasX,66)
  1005.            FIELD 14, 66 AS Location$
  1006.            IF LineToRead = 1 THEN Start = 2 ELSE Start = 1
  1007.            FOR WasX = Start TO HighRec
  1008.               GET 14, WasX
  1009.               Select$ = LEFT$(Location$,63)
  1010.               CALL Trim (Select$)
  1011.               IF LEFT$(Select$,2) <> "M!" THEN
  1012.                  CALL FindIt (Select$ + SourceBody$ + SourceExt$)
  1013.                  IF ZOK THEN
  1014.                     Found = ZTrue
  1015.                     IF Action$ = "FIND" OR Action$ = "MOVE" THEN
  1016.                        SourceFileName$ = Select$ + SourceBody$ + SourceExt$
  1017.                        RETURN
  1018.                     END IF
  1019.                     ZOutTxt$ = ZFGB$ + Action$ + SPACE$(1) + ZFG2$ + _
  1020.                                SourceBody$ + SourceExt$ + _
  1021.                                ZFGB$ + " from " + ZFG2$ + Select$ + _
  1022.                                ZEmphasizeOff$ + " (Y)es,[N]o,A)bort)"
  1023.                     GOSUB 11100
  1024.                     IF ZWasZ$ = "A" THEN
  1025.                        Found = ZFalse
  1026.                        ZAnsIndex = 0
  1027.                        RETURN
  1028.                     END IF
  1029.                     IF ZWasZ$ = "Y" THEN
  1030.                        InFMS = ZTrue
  1031.                        LidxPos = WasX
  1032.                        SourceFileName$ = Select$ + SourceBody$ + SourceExt$
  1033.                        CLOSE 14
  1034.                        RETURN
  1035.                     END IF
  1036.                     Found = ZFalse
  1037.                  END IF
  1038.               END IF
  1039.            NEXT WasX
  1040.            CLOSE 14
  1041.            RETURN
  1042.         END IF
  1043.      END IF
  1044. 8020 IF NOT Found THEN
  1045.         CALL QuickTPut1 (ZFGF$ + ZBG4$ + "ERROR! Could not find " + _
  1046.                         SourceBody$ + SourceExt$ + "!" + _
  1047.                         ZBG0$ + ZEmphasizeOff$)
  1048.      END IF
  1049.      RETURN
  1050. '
  1051. ' =============================================================================
  1052. ' * common input routine - single char
  1053. ' =============================================================================
  1054. '
  1055. 11000 ZSubParm = 1
  1056.       CALL TGet
  1057.       IF ZSubParm < 0 THEN _
  1058.          EXIT SUB
  1059.       RETURN
  1060. '
  1061. ' =============================================================================
  1062. ' * common input routine - string
  1063. ' =============================================================================
  1064. '
  1065. 11100 ZTurboKey = -ZTurboKeyUser
  1066.       CALL PopCmdStack
  1067.       IF ZSubParm < 0 THEN _
  1068.          EXIT SUB
  1069.       ZWasZ$ = UCASE$(ZUserIn$(ZAnsIndex))
  1070.       RETURN
  1071. '
  1072. ' =============================================================================
  1073. ' * End of SYSOP8
  1074. ' =============================================================================
  1075. '
  1076.       END SUB
  1077. '
  1078. ' =============================================================================
  1079. ' * Error Handling
  1080. ' =============================================================================
  1081. '
  1082. 12000 ZOutTxt$ = "SYSOP8 Untrapped Error" + _
  1083.            STR$(ERR) + _
  1084.            " in line" + _
  1085.            STR$(ERL)
  1086.       IF ZPrinter THEN
  1087.          CALL Printit(ZOutTxt$)
  1088.       END IF
  1089.       CALL QuickTPut1 (ZOutTxt$)
  1090.       CALL UpdtCalr (ZOutTxt$,2)
  1091.       ZErrCode = ERR
  1092.       RESUME NEXT
  1093.