Category : Communication (modem) tools and utilities
Archive   : CA29-3.ZIP
Filename : BBMAINT3.CMD

 
Output of file : BBMAINT3.CMD contained in archive : CA29-3.ZIP
;**** TRACE ON ; Debugging
;
; ----- COM-AND BBS file maintenance script (BULLETIN file)
; Commenced: 11/90 R.McG
; -----------------------------------------------------------------------
; Purpose:
; The script, named BBMAINT3.CMD, produces the main window for
; Bulletin functions of BBMAINT, and implements its functions. It
; is not directly callable itself.
; -----------------------------------------------------------------------
; Usage:
; N99 -> Text attribute value (Setup by BBMAINT.CMD)
; N98 -> BBMAINT Mainline cursor position
; N97 -> BBMAINT Mainline cursor position
; N96 -> our mainline cursor position
; N95 -> our mainline cursor position
; -----------------------------------------------------------------------
;
; This script is intended ONLY to be used for FCALL
;
IF NOT FCALLED
WOPEN 10,10,13,70 (cont) NOBUEsc
ATSAY 10,12 (cont) " BBS Bulletin "
ATSAY 11,12 (cont) " The script: "*"_SCRIPT"
ATSAY 12,12 (cont) " is not used by itself... it is called through BBMAINT"
ATSAY 13,26 (cont) " Press any key to continue "
;
; Wait a keypress
;
KEYGET S0 ; Wait for any key
WCLOSE ; Close open window
EXIT ; Terminate right here
ENDIF
GOSUB Bullfile ; Invoke function
FRETURN ; Return to caller
; -----------------------------------------------------------------------
; ----- NoBull: Inform that there's no BBS-Bull file to modify
;
NoBull:
WOPEN 10,10,13,70 (cont) NOBUEsc
ATSAY 10,12 (cont) " BBS BullDir "
ATSAY 11,12 (cont) " The file: "*S25&"\BBS-Bull"
ATSAY 12,12 (cont) " does not exist. Please create subdirectories first."
ATSAY 13,26 (cont) " Press any key to continue "
;
; Wait a keypress
;
KEYGET S0 ; Wait for any key
WCLOSE
NOBUEsc:
RETURN
; -----------------------------------------------------------------------
; ----- Subroutine: BullFile -> Update Bulletin directory
;
BullFile:
GOSUB NewBull ; Create if not there
IF NOT ISFILE S25&"\BBS-Bull"
GOSUB NoBull ; Inform there's no file
RETURN ; .. so we can't continue
ENDIF
;
; Open a window
;
WOPEN 0,0 23,79 (defa) Bull_Esc
ATSAY 0,2 (defa) " BBS Bulletins "
ATSAY 23,25 (defa) " Press ESC to cancel BBMAINT "
;
; Paint the window
;
BUFI100:
CLEAR ; Clear window
LOCATE 2,2

MESS " 1) Add a bulletin to the list"
MESS " 2) Delete a bulletin from the list"
MESS " 3) Modify a bulletin's listing"
MESS " 4) Print the bulletin list"
MESS " 5) View the bulletin list"
MESS "ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ "
MESS "Note: Alt-Q to edit a file"
MESS " Alt-F for a directory search"
MESS " Alt-F10 to shell to DOS"
MESS " "
MESS "ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ "
MESS " "
MESS "Select item (carriage return = previous): "
CURSOR N96,N95 ; Read current cursor
;
; Wait for entry, and interpret
;
BUFI200:
LOCATE N96 N95 ; Reposition cursor
KEYGET S0 ; Wait for it
SWITCH S0 ; Act according to keyget
CASE "1"
GOSUB AddBull
ENDCASE
CASE "2"
GOSUB DelBull
ENDCASE
CASE "3"
GOSUB ModBull
ENDCASE
CASE "4"
GOSUB PrnBull
ENDCASE
CASE "5"
GOSUB ViewBull
GOTO BUFI100 ; Repaint screen after this
ENDCASE
CASE "0d" ; c/r alone is exit
WCLOSE ; Close window...
RETURN ; and return to caller
ENDCASE
CASE "_NULL" ; ESC -> Null
WCLOSE ; Close window...
RETURN ; Leave Main routine
ENDCASE
CASE "2100" ; Alt-F
MANUAL "0x2100" ; Perform Dir cmd
ENDCASE
CASE "1000" ; Alt-Q
MANUAL "0x1000" ; Edit a file
ENDCASE
CASE "7100" ; Alt-F10
SHELL
DWINDOW 1,2,22,78; Reset dwindow after shell
LEGEND "_LEGEND" ; Redo the legend
ENDCASE
DEFAULT ; None of the above
SOUND 100,100 ; Bronx cheer
ENDCASE
ENDSWITCH
GOTO BUFI200 ; Repaint screen and ask again
;
; End of bulletin procedure
;
Bull_Esc:
S0 = "" ; Fake a null entry
RETURN ; Leave bulletin routine
; -----------------------------------------------------------------------
; ----- AddBUll: Add a file to the bulletin directory
;
AddBull:
SET FLAG(0) OFF ; Flag for ESCAPE
WOPEN 10,10,17,75 (cont) ADBUEsc
ATSAY 10,12 (cont) " BBS Bulletin Add "
ATSAY 11,12 (cont) "Enter the bulletin number: "
ATSAY 17,26 (cont) " Press ESC to cancel "
;
; Wait a keypress
;
LOCATE 11,42
GET S0 5 ; get number
IF FLAG(0) GOTO ADBUEnd ; Exit if ESC hit
LJ S0 ; Left justify
UPPER S0 ; Upper casefy
IF NULL S0 GOTO ADBUEnd ; get out on empty entry
GOSUB LkpBull ; Lookup name in file
IF FOUND ; If its there we can't add it
WCLOSE ; Close open window
GOTO ModBU_Add ; Skip if found
ENDIF
S10 = S0 ; Save File name
GOTO ADBU100 ; And branch around parallel code
;
; Entry from ModBull... Nothing to modify
;
AddBU_Mod:
WOPEN 10,10,17,75 (cont) ADBUEsc
ATSAY 10,12 (cont) " BBS Bulletin Add "
ATSAY 11,12 (cont) "Enter the bulletin number: "
ATSAY 11,42 (cont) S0
ATSAY 17,26 (cont) " Press ESC to cancel "
S10 = S0 ; Copy it for remainder
;
; Place file date and time in record
;
ADBU100:
DATE S1 ; Want mm/dd/yy form
S10(5:12) = S1 ; Save date added
ATSAY 12,12 (cont) "Enter the file name:"
LOCATE 12,42
GET S0 12 ; get file name
IF FLAG(0) GOTO ADBUEnd ; Exit if ESC hit
LJ S0 ; Left justify
IF NULL S0
SOUND 100,100 ; Indicate displeasure
GOTO ADBU100 ; Try again
ENDIF
FFIRST S25&"\"*S0 ; Test for file's existence
S10(14:25) = S0 ; Save File name
IF SUCCESS GOTO ADBU200 ; Skip if exists
;
; File does not exist...
;
ADBU110:
ATSAY 13,12 (cont) "File d.n.e. Add anyway (y/n): "
LOCATE 13,42
GET S0 1 ; get resp
IF FLAG(0) GOTO ADBUEnd ; Exit if ESC hit
IF NULL S0 or NOT FIND "YN" S0(0)
SOUND 100,100 ; Indicate displeasure
GOTO ADBU110 ; Try again
ENDIF
IF FIND "N" S0(0)
WCLOSE ; Close window
GOTO AddBull ; And try again
ENDIF
;
; Ask for a comment field
;
ADBU200:
ATSAY 14,12 (cont) "Description: "
LOCATE 14,26
GET S0 40 ; get resp
LJ S0 ; Left justify
IF FLAG(0) GOTO ADBUEnd ; Exit if ESC hit
IF NULL S0
SOUND 100,100 ; Indicate displeasure
GOTO ADBU200 ; Try again
ENDIF
S10(26:79) = S0 ; Save comment text
;
; Ask for privileged flag
;
ADBU250:
ATSAY 15,12 (cont) "Priveleged access (y/n): "
LOCATE 15,42
GET S0 1 ; get resp
IF FLAG(0) GOTO ADBUEnd ; Exit if ESC hit
IF NULL S0 or NOT FIND "YN" S0(0)
SOUND 100,100 ; Indicate displeasure
GOTO ADBU250 ; Try again
ENDIF
IF FIND "Y" S0(0) S10(13:13) = "P" ; Save priveleged access
;
; Ask for one more look
;
ADBU300:
ATSAY 16,12 (cont) "OK to add this record?: "
LOCATE 16,42
GET S0 1 ; get resp
IF FLAG(0) GOTO ADBUEnd ; Exit if ESC hit
IF NULL S0 or NOT FIND "YN" S0(0)
SOUND 100,100 ; Indicate displeasure
GOTO ADBU300 ; Try again
ENDIF
IF FIND "N" S0(0)
WCLOSE ; Close window
GOTO AddBull ; And try again
ENDIF
;
; Write the record
;
GOSUB AddBRec ; Write to Bulletins file
;
; End of add procedure
;
ADBUEnd:
WCLOSE
ADBUEsc:
SET FLAG(0) ON
RETURN
; -----------------------------------------------------------------------
; ----- AddBRec: Add a record to the Bulletin file...
; .. S10 passes the record to be written
;
AddBRec:
FOPENO S25&"\BBS-bull" TEXT APPEND
IF NOT SUCCESS ; Open failed
S0 = "Error opening: "*S25&"\BBS-Bull"
GOSUB Error ; Report
RETURN ; And we're done
ENDIF
PRESERVE S10 ; Preserve ^'s and !'s
WRITE S10 ; Write the record
WRITE "!^Z" ; And finish it
FCLOSEO
RETURN
; -----------------------------------------------------------------------
; ----- LkpFile: Lookup a file in the BBS-Bull file
; .. S0 passes the fname to be tested
; .. S10 returns the record read
;
LkpBull:
FOPENI S25&"\BBS-Bull" TEXT
IF NOT SUCCESS ; Open failed
S0 = "Error opening: "*S25&"\BBS-Bull"
GOSUB Error ; Report
SET FOUND OFF ; Not found
RETURN ; And we're done
ENDIF
;
; Read loop
;
LOBU100:
READ S10 80 N0 ; Read a record
IF EOF GOTO LOBU200 ; Skip on EOF
IF STRCMP S10(0:0) "*" GOTO LOBU110
IF STRCMP S10(0:4) S0(0:4) GOTO LOBU300
;
; Record longer than 80 chars
;
LOBU110:
IF N0 LT 80 GOTO LOBU100; If exactly 80 rtnd, c/r wasn't read
READ S10 80 N0 ; Read remainder of rec
GOTO LOBU110 ; Read until less than 80
;
; We have end-of-file - not found
;
LOBU200:
SET FOUND OFF ; Indicate not found
GOTO LOBUEnd
;
; We have a hit - return found
;
LOBU300:
SET FOUND ON ; Indicate found
;
; And exit
;
LOBUEnd:
FCLOSEI
RETURN
; -----------------------------------------------------------------------
; ----- DelBull: Delete a file from Bulletin file
;
DelBull:
SET FLAG(0) OFF ; Flag for ESCAPE
WOPEN 10,10,15,70 (cont) DEBUEsc
ATSAY 10,12 (cont) " BBS Bulletin Delete "
ATSAY 11,12 (cont) "Enter bulletin number to del: "
ATSAY 15,26 (cont) " Press ESC to cancel "
;
; Wait a keypress
;
LOCATE 11,42
GET S0 5 ; get resp
IF FLAG(0) GOTO DEBUEnd ; Exit if ESC hit
LJ S0 ; Left justify
UPPER S0 ; Upper casefy
IF NULL S0 GOTO DEBUEnd ; get out on empty entry
;
; Open the Bulletin file and a temp copy file
;
GOSUB DelBRec ; Try to delete a record
IF FLAG(1) GOTO DEBUEnd ; Skip if record deleted
ATSAY 12,12 (cont) "Bulletin not in listing... "
ATSAY 13,12 (cont) "Press any key to continue..."
KEYGET S0
;
; End of add procedure
;
DEBUEnd:
WCLOSE
DEBUEsc:
SET FLAG(0) ON
RETURN
; -----------------------------------------------------------------------
; ----- DelBRec: Delete a record from the Bulletin file...
; .. S0 passes the bulletin number key
; .. S1 destroyed in the process
; .. FLAG(1) if rtn'd set, indicates record was FOUND
;
DelBRec:
;
; Open the Bulletin file and a temp copy file
;
SET FLAG(1) OFF ; Initialize for found flag
FOPENI S25&"\BBS-Bull" TEXT
IF NOT SUCCESS ; Open failed
S0 = "Error opening: "*S25&"\BBS-Bull"
GOSUB Error ; Report
GOTO DEBREnd ; And we're done
ENDIF

FOPENO S25&"\TempBull" TEXT
IF NOT SUCCESS ; Open failed
S0 = "Error opening: "*S25&"\TempBull"
GOSUB Error ; Report
GOTO DEBREnd ; And we're done
ENDIF
N10 = 0 ; COunt recs written
;
; Read records (40 chars at a time to allow PRESERVE)
;
DEBR100:
READ S1 40 N0 ; Read 1st 40 chars
IF EOF GOTO DEBR300 ; Skip on EOF
IF STRCMP S1(0:4) S0(0:4) GOTO DEBR200
INC N10 ; COunt rec written
;
; Copy the record read to the output file
;
DEBR110:
PRESERVE S1 ; Save !'s and ^'s
WRITE S1 ; Write text

IF N0 LT 40 ; If we wrote end of record
WRITE "!" ; Finish w/cr/lf
GOTO DEBR100 ; And continue copying
ENDIF
READ S1 40 N0 ; Read remainder of rec
IF NOT EOF GOTO DEBR110 ; Skip if not eof
WRITE "!" ; Finish record
GOTO DEBR300 ; End of file
;
; We have a hit
;
DEBR200:
SET FLAG(1) ON ; Flag we deleted item
IF N0 LT 40 GOTO DEBR100
READ S1 40 N0 ; Read remainder of rec
IF NOT EOF GOTO DEBR200 ; Skip if not found
;
; We hit EOF - may or may not have found the target rec
;
DEBR300:
IF NOT FLAG(1) GOTO DEBR400 ; skip if not found
WRITE "^Z" ; Finish ASCII file
FCLOSEO ; Close output
FCLOSEI ; Close input
DELETE S25&"\BBS-Bull" ; Delete original
RENAME S25&"\TempBull" S25&"\BBS-Bull"
IF ZERO N10 DELETE S25&"\BBS-Bull" ; Delete empty file
GOTO DEBREnd
;
; We hit EOF - we did not find the record
;
DEBR400:
FCLOSEO ; Close output
FCLOSEI ; Close input
DELETE S25&"\TempBull" ; Delete copy file
;
; End of procedure...
;
DEBREnd:
RETURN
; -----------------------------------------------------------------------
; ----- ModBull: Modify a record in the bulletin file
;
ModBull:
SET FLAG(0) OFF ; Flag for ESCAPE
WOPEN 10,10,18,75 (cont) MOBUEsc
ATSAY 10,12 (cont) " BBS Bulletin Modify "
ATSAY 11,12 (cont) "Enter number to change: "
ATSAY 18,26 (cont) " Press ESC to cancel "
;
; Wait a keypress
;
LOCATE 11,42
GET S0 5 ; get resp
IF FLAG(0) GOTO MOBUEnd ; Exit if ESC hit
LJ S0 ; Left justify
UPPER S0 ; Upper case
IF NULL S0 GOTO MOBUEnd ; get out on empty entry
GOSUB LkpBull ; Lookup in Bulletin file
IF NOT FOUND ; If its there we can't add it
WCLOSE ; Close open window
GOTO AddBU_Mod ; Skip if NOT found
ENDIF
GOTO MOBU100 ; And branch around parallel code
;
; Entry from AddBull... We have a rec in S10 - needs adding
;
ModBU_Add:
WOPEN 10,10,18,75 (cont) MOBUEsc
ATSAY 10,12 (cont) " BBS Bulletin Modify "
ATSAY 11,12 (cont) "Enter number to be changed: "
ATSAY 11,42 (cont) S0
ATSAY 18,26 (cont) " Press ESC to cancel "
;
; Display the original values (rtnd in S10 by LkpBull)
;
MOBU100:
ATSAY 10,54 (cont) " Old vals "
ATSAY 11,55 (cont) S10(0:4) ; Num
ATSAY 12,55 (cont) S10(14:25) ; Fname
ATSAY 15,26 (cont) S10(26:65) ; Description
IF NOT NULL S10(13:13)
ATSAY 16,55 (cont) "y"
ELSE
ATSAY 16,55 (cont) "n"
ENDIF
;
; Ask for a file name (containing the bulletin)
;
MOBU110:
DATE S1 ; Want mm/dd/yy form
S10(5:12) = S1 ; Save date mod'd
ATSAY 12,12 (cont) "Enter the file name:"
LOCATE 12,42
GET S0 12 ; get file name
IF FLAG(0) GOTO MOBUEnd ; Exit if ESC hit
LJ S0 ; Left justify
IF NULL S0 GOTO MOBU200 ; Skip if null entry
FFIRST S25&"\"*S0 ; Test for file's existence
S10(14:25) = S0 ; Save File name
IF SUCCESS GOTO MOBU200 ; Skip if exists
;
; File does not exist...
;
MOBU120:
ATSAY 13,12 (cont) "File d.n.e. Add anyway (y/n): "
LOCATE 13,42
GET S0 1 ; get resp
IF FLAG(0) GOTO MOBUEnd ; Exit if ESC hit
IF NULL S0 or NOT FIND "YN" S0(0)
SOUND 100,100 ; Indicate displeasure
GOTO MOBU120 ; Try again
ENDIF
IF FIND "N" S0(0)
WCLOSE ; Close window
GOTO ModBull ; And try again
ENDIF
;
; Ask for a comment field
;
MOBU200:
ATSAY 14,12 (cont) "Description: "
LOCATE 14,26
GET S0 40 ; get resp
LJ S0 ; Left justify
IF FLAG(0) GOTO MOBUEnd ; Exit if ESC hit
IF NULL S0 ; If null entry...
ATSAY 14,26 (cont) S10(26:65)
GOTO MOBU250 ; Skip store
ENDIF
S10(26:79) = S0 ; Save comment text
;
; Ask for privileged flag
;
MOBU250:
ATSAY 16,12 (cont) "Priveleged access (y/n): "
LOCATE 16,42
GET S0 1 ; get resp
IF FLAG(0) GOTO MOBUEnd ; Exit if ESC hit
IF NULL S0 ATSCR 16,55 1 S0 ; Read back previous value
IF NOT FIND "YN" S0(0) ; If not y/n
SOUND 100,100 ; Indicate displeasure
GOTO MOBU250 ; Try again
ENDIF
S10(13:13) = " " ; Default no priv
IF FIND "Y" S0(0) ; If privilege 'y'
S10(13:13) = "P" ; Set priveleged access
ENDIF
;
; Ask for one more look
;
MOBU300:
ATSAY 17,12 (cont) "OK to add this record?: "
LOCATE 17,42
GET S0 1 ; get resp
IF FLAG(0) GOTO MOBUEnd ; Exit if ESC hit
IF NULL S0 or NOT FIND "YN" S0(0)
SOUND 100,100 ; Indicate displeasure
GOTO MOBU300 ; Try again
ENDIF
IF FIND "N" S0(0)
WCLOSE ; Close window
GOTO ModBull ; And try again
ENDIF
;
; Delete the previous value... and add the new
; .. Could do a Delete/add but don't want file re-ordered
;
GOSUB ModBRec ; Modify the record in S10
IF NOT FLAG(1) ; If not deleted
S0 = "Error modifying bulletin: "*S0
GOSUB Error ; Report
GOTO MOBUEnd ; And we're done
ENDIF
;
; End of add procedure
;
MOBUEnd:
WCLOSE
MOBUEsc:
SET FLAG(0) ON
RETURN
; -----------------------------------------------------------------------
; ----- ModBRec: Modify a record from the Files file...
; .. S10 passes the new record (same file name key)
; .. S1 destroyed in the process
;
ModBRec:
;
; Open the Files file and a temp copy file
;
SET FLAG(1) OFF ; Initialize for found flag
FOPENI S25&"\BBS-Bull" TEXT
IF NOT SUCCESS ; Open failed
S0 = "Error opening: "*S25&"\BBS-Bull"
GOSUB Error ; Report
GOTO MOBREnd ; And we're done
ENDIF

FOPENO S25&"\TempFile" TEXT
IF NOT SUCCESS ; Open failed
S0 = "Error opening: "*S25&"\TempFile"
GOSUB Error ; Report
GOTO MOBREnd ; And we're done
ENDIF
N10 = 0 ; Count recs written
;
; Read records (40 chars at a time to allow PRESERVE)
;
MOBR100:
READ S1 40 N0 ; Read 1st 40 chars
IF EOF GOTO MOBR300 ; Skip on EOF
IF STRCMP S1(0:4) S10(0:4) GOTO MOBR200
INC N10
;
; Copy the record read to the output file
;
MOBR110:
PRESERVE S1 ; Save !'s and ^'s
WRITE S1 ; Write text

IF N0 LT 40 ; If we wrote end of record
WRITE "!" ; Finish w/cr/lf
GOTO MOBR100 ; And continue copying
ENDIF
READ S1 40 N0 ; Read remainder of rec
IF NOT EOF GOTO MOBR110 ; Skip if not eof
WRITE "!" ; Finish record
GOTO MOBR300 ; End of file
;
; We have a match on the key.
;
MOBR200:
SET FLAG(1) ON ; Flag we deleted item
S1 = S10(0:39) ; Take 1st part of rec to write
PRESERVE S1 ; Save !s and ^s
WRITE S1 ; Write text

LENGTH S10 N1 ; Get new rec length
IF N1 LT 40 GOTO MOBR210

S1 = S10(40:79) ; Take 2nd part of rec to write
PRESERVE S1 ; Save !s and ^s
WRITE S1 ; Write text
;
; Finish the new record
;
MOBR210:
WRITE "!" ; Finish record
;
; Finish reading the original record
;
MOBR220:
IF N0 LT 40 GOTO MOBR100
READ S1 40 N0 ; Read remainder of rec
IF NOT EOF GOTO MOBR220 ; Skip if not found
;
; We hit EOF - may or may not have found the target rec
;
MOBR300:
IF NOT FLAG(1) GOTO MOBR200 ; skip if not found
WRITE "^Z" ; Finish ASCII file
FCLOSEO ; Close output
FCLOSEI ; Close input
DELETE S25&"\BBS-Bull" ; Delete original
RENAME S25&"\TempFile" S25&"\BBS-Bull"
IF ZERO N10 DELETE S25&"\BBS-Bull" ; Delete empty file
;
; End of procedure...
;
MOBREnd:
RETURN
; -----------------------------------------------------------------------
; ----- PrnBull: Print a list of bulletins
;
PrnBull:
FOPENI S25&"\BBS-Bull" TEXT
IF NOT SUCCESS ; Open failed
S0 = "Error opening: "*S25&"\BBS-Bull"
GOSUB Error ; Report
RETURN ; And we're done
ENDIF
;
; Initialize a counter
;
N10 = 0 ; # Lines printed
N11 = 1 ; Page number
;
; Read loop
;
PRBU100:
READ S10 80 N0 ; Read a record
IF EOF GOTO PRBU200 ; Skip on EOF
IF STRCMP S10(0:0) "<" GOTO PRBU120 ; skip comments
IF ZERO N0 GOTO PRBU100 ; skip blank lines
;
; Print a heading...
;
IF N10 GT 0 and N10 LE 50 GOTO PRBU110
PRINT "COM-AND Scripted BBS Bulletin list as of "*"_DATE"*", "*"_TIME"*" Page "*N11*"^M^J"
PRINT "From: "*"_IFILE"*"^M^J"
PRINT "--------------------------------------------------------------------------^M^J"
PRINT "Numbr File Priv Description^M^J"
PRINT "----- ------------ ---- --------------------------------------------------^M^J"
N10 = 0
INC N11
;
; Build a record and print it
;
PRBU110:
S0 = S10(0:4) ; Number Field
S0(6:17) = S10(14:25) ; Fname Field
IF NOT NULL S10(13:13) S0(20:22) = "yes"
S0(24:79) = S10(26:79) ; Description
PRESERVE S0
PRINT S0
PRINT "^M^J" ; Finish line
INC N10 ; COunt lines printed
;
; Handle record longer than 80 chars
;
PRBU120:
IF N0 LT 80 GOTO PRBU100; If exactly 80 rtnd, c/r wasn't read
READ S10 80 N0 ; Read remainder of rec
GOTO PRBU120 ; Read until less than 80
;
; We have end-of-file
;
PRBU200:
PRINT "^L" ; Do a final top-of-form
;
; And exit
;
PRBUEnd:
FCLOSEI
RETURN
; -----------------------------------------------------------------------
; ----- ViewBull: View a list of bulletins
;
ViewBull:
FOPENI S25&"\BBS-Bull" TEXT
IF NOT SUCCESS ; Open failed
S0 = "Error opening: "*S25&"\BBS-Bull"
GOSUB Error ; Report
RETURN ; And we're done
ENDIF
;
; Initialize a counter
;
N10 = 0 ; # Lines printed
N11 = 0 ; Page number
SET FLAG(0) OFF ; Initialize esc flag
S11 = "_ONESC"
ON ESCAPE GOSUB VIBUESC
;
; Print a heading...
;
VIBU100:
IF N10 GT 0 GOTO VIBU110
CLEAR ; Clear the window
ATSAY 1,2 (defa) "Numbr File Priv Description"
ATSAY 2,2 (defa) "----- ------------ ---- --------------------------------------------------"
N10 = 3 ; Set starting line no
INC N11 ; Set next page
;
; Save the file position for the start of this page
;
FSAVEI
IF NOT SUCCESS
FSAVEI SHIFT ; Save last 20 pos'ns
FSAVEI
ENDIF
;
; Read loop
;
VIBU110:
READ S10 80 N0 ; Read a record
IF EOF GOTO VIBU200 ; Skip on EOF
IF STRCMP S10(0:0) "<" GOTO VIBU120 ; skip comments
IF ZERO N0 GOTO VIBU110 ; skip blank lines
;
; Build a record and print it
;
S0 = S10(0:4) ; Number Field
S0(6:17) = S10(14:25) ; Fname Field
IF NOT NULL S10(13:13) S0(20:22) = "yes"
S0(24:74) = S10(26:79) ; Description
PRESERVE S0
ATSAY N10,2 (defa) S0
INC N10 ; COunt lines printed
;
; Handle record longer than 80 chars
;
VIBU120:
IF N0 LT 80 GOTO VIBU200; If exactly 80 rtnd, c/r wasn't read
READ S10 80 N0 ; Read remainder of rec
GOTO VIBU120 ; Read until less than 80
;
; Look for end of screen/end of file
;
VIBU200:
IF (NOT EOF) and N10 LT 21 GOTO VIBU100
IF EOF
ATSAY 22,2 (defa) "End of file; Home (top), PgDn (forward), PgUp (back)"
ELSE
ATSAY 22,2 (defa) "Page "*N11*"; Home (top), PgDn (forward), PgUp (back)"
ENDIF
;
; Read a key and interpret
;
VIBU210:
IF FLAG(0) RETURN ; End of routine when flag set
KEYGET S1
IF FLAG(0) RETURN ; End of routine when flag set
SWITCH S1
CASE "4900" ; Pgup
GOTO PgUp
ENDCASE
CASE "5100" ; PgDn
GOTO PgDn
ENDCASE
CASE "4700" ; Home
GOTO Home
ENDCASE
CASE "0D" ; C/r
IF EOF GOTO VIBUEnd
GOTO PgDn
ENDCASE
CASE "2100" ; Alt-F
MANUAL "0x2100" ; Perform Dir cmd
ENDCASE
CASE "1000" ; Alt-Q
MANUAL "0x1000" ; Edit a file
ENDCASE
CASE "7100" ; Alt-F10
SHELL
DWINDOW 1,2,22,78 ; Reset dwindow after shell
LEGEND "_LEGEND" ; Redo the legend
ENDCASE
DEFAULT
MESS S1
SOUND 100,100
ENDCASE
ENDSWITCH
GOTO VIBU210
;
; Page up (go backwards)
;
PgUp:
N10 = 0 ; Clear line ctr
FRESTOREI ; Backup current pg
N11 = N11-1 ; Reset Page # for redisplay
FRESTOREI ; Backup one more
IF NOT SUCCESS
SOUND 200,100 ; Indicate problem
GOTO Home
ENDIF
N11 = N11-1 ; Reset Page # for redisplay
GOTO VIBU100
;
; Home (go to top)
;
Home:
N10 = 0 ; Clear line ctr
N11 = 0 ; Set new pg number
FSAVEI CLEAR ; Clear saved pages
REWIND ; Rewind input
GOTO VIBU100
;
; Page down (go forwards)
;
PgDn:
IF EOF GOTO Home ; Wrap to home at EOF
N10 = 0 ; Clear line ctr
GOTO VIBU100
;
; And exit
;
VIBUEnd:
FCLOSEI
RETURN
;
; Escape entered
;
VIBUESC:
SET FLAG(0) ON
ON ESCAPE GOSUB S11 ; Restore previous ON ESC

RETURN
; -----------------------------------------------------------------------
; ----- Subroutine: NewBull -> Create a new BBS-Bull file
;
NewBull:
IF ISFILE S25&"\BBS-Bull" RETURN
FOPENO S25&"\BBS-Bull" TEXT
IF NOT SUCCESS RETURN ; Open failed
WRITE "!^Z" ; Make it empty
FCLOSEO ; Done with it
RETURN
; -----------------------------------------------------------------------
; ----- Error: Open a window, display a message, and wait for keypress
; S0 passes the error message
;
Error:
WOPEN 10,10,12,70 (cont) Err_Esc
ATSAY 10,12 (cont) " Error "
ATSAY 11,12 (cont) S0(0:55); Max msg width 55 chars
ATSAY 12,26 (cont) " Press any key to continue "
;
; Wait a keypress
;
KEYGET S0 ; Wait for any key
WCLOSE
Err_Esc:
RETURN


  3 Responses to “Category : Communication (modem) tools and utilities
Archive   : CA29-3.ZIP
Filename : BBMAINT3.CMD

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/