\\ BOYAN HOST MODE Version 5.0. \\ Please see the BOYAN User's Manual for complete documentation! |InitHost \IE-%AN,HOST[ \AM[H] ] \IE-%AN,HOST[\DM24[Unable to load HOST module.]\AB] \ZS \ST[Invoking host in %V3 mode...] \DM1[ 浜様様様様様様様様様様様様様様様様様様様� ] \DM2[ � Host Mode Initializing... � ] \DM3[ 麺様様様様様様様様様様様様様様様様様様様� ] \DM4[ � Press for Sysop Menu. � ] \DM5[ � Press to quit Host Mode. � ] \DM6[ 藩様様様様様様様様様様様様様様様様様様様� ] \CP[None] \BB- \AV[0] \KO[0] \SP[0] \SL[0] \\ initialize host settings \SVU[%UN] \IE+%UF,OFF[\SVU[]] \\ save current usage file name in %VU \SVR[%AP] \\ save previous action module in %VR \UF+[%V4`HOST.USE] \\ use HOST.USE as the usage log file \UM[---- Host Mode Invoked -----] \FE+%B:macro#7.hos[\GB[WaitForCall]] \\ If macro #7 already saved, go on... \MV1[7] \AF%B:macro#7.hos[%V1] \\ Else store in macro#7.hos, and set new: \SM7[\II+HOST,"%SC[\AT-[\GB[Cycle"] \EM"]"] \SC[Host;Restore7"] \MA[7"] "\"\ used by host] \GB[WaitForCall] |WaitForCall \EC- \LF- \KO[0] \SVN[] \SVO[waiting] \IV3-MODEM[\GB[Welcome]] \CA+[\GB[Welcome]] \CS[%MM] \MA[3] \\ Change speed to modem's maximum. ATX4S0=0{ \\ Tell modem not to auto-answer. \WF[OK]~~ \\ Expect "OK" message back from modem. \DM1[ 浜様様様様様様様様様様様様様様様様様様様� ] \DM2[ � Host Mode Waiting for RING... � ] \DM3[ 麺様様様様様様様様様様様様様様様様様様様� ] \DM4[ � Press for Sysop Menu. � ] \DM5[ � Press to quit Host Mode. � ] \DM6[ 藩様様様様様様様様様様様様様様様様様様様� ] \TO[255] \WF[RING] \\ Wait forever for "RING" \TO[7] \SV0[%V2] \+V0[-1] \\ let %V0 = tot. number of rings - 1 \RE%V0[\WF[RING] \IW-[\GB[WaitForCall]] ] \\ Wait for %V0 additional rings. ~ATA{ \\ Tell modem to establish connection. \TO[30] \IE+%AD,ON[\WF[CONNECT] | \WF[00]]~ \\ Wait for "CONNECT"/"00" message \IW-[\GB[Cycle]] \\ If not found, cycle for next call. \IE-%AD,ON[\GB[Welcome]] \\ If auto-detect baud rate OFF, welcome. \IF+38[\CS[38400] \GB[Welcome]] \\ Otherwise, \IF+19[\CS[19200] \GB[Welcome]] \\ scan "connect xxx" message, \IF+96[\CS[9600] \GB[Welcome]] \\ set the port speed appropriately, \IF+48[\CS[4800] \GB[Welcome]] \\ and go to the Welcome block. \IF+24[\CS[2400] \GB[Welcome]] \IF+12[\CS[1200] \GB[Welcome]] \CS[300] \GB[Welcome] \\ ...use 300 baud if just "CONNECT" |Welcome \EC+ \LF+ \IV3+MODEM[\AV[6] \AL2[1] \AV[0] \PA[3] \PL] {{{ Welcome to BOYAN 5.0 Host!{{ Press to begin: ` \DM1[ 浜様様様様様様様様様様様様様様様様様様様� ] \DM2[ � Host Mode Logging user in... � ] \DM3[ 麺様様様様様様様様様様様様様様様様様様様� ] \DM4[ � Press for Sysop Menu. � ] \DM5[ � Press to quit Host Mode. � ] \DM6[ 藩様様様様様様様様様様様様様様様様様様様� ] \TO[40] \RV0[0] \SVX[OFF] \IW-[\GB[LogOff]] \\ if no response, log user off! \BL[GetName&PW] \IVN+[Try again.{ \BL[GetName&PW]] \IVN+[Last try!{ \BL[GetName&PW]] \IVN+[\GB[WrongPassword]] \SN[%VN] \SVO[in-use] Welcome online, %VF! Your user level is %VL.{ \FE+%V4`welcome.msg[\UF- \ULa-[%V4`welcome.msg] \UF+] \\ Send "WELCOME.MSG" \GB[Menu] |GetName&PW \SV0[] \SVP[] \SVL[0] \SVE[] { Enter your FIRST & LAST name: ` \RVN[50] \IVN+[\EB] \SVF[%VN] \II+ ,%VF[\LVF[%IM]] \\ set %VF = user's First name \II+;,%VN[\SV0[%VN] \DV0[%II] \LVN[%IM] ] \\ parse "First Last;password" Searching \SVI[40] \BL[SearchUserBase]{ \IVI+111[\GB[UserNotFound]] \IVP+[No password for you in database!{ \SVN[] \EB ] \UM[Logged in Host User %VI: %VN] \IV0+[Enter your password: `\RV0*[15]] \IV0-%VP[\SVN[]] \\ If password wrong, unset VN. |SearchUserBase \\ Search for %VN; set %VP=pwd, %VL=level. \RE[\+VI[1] \IVI+111[\EB] .\TVA[%VI] \II+;,%VA[\EM]] \\ loop until `;' in %VA \SVP[%VA] \LVA[%IM] \\ trim off name portion into %VA \IVA-%VN[\GB[SearchUserBase] |else \SVN[%VA]] \DVP[%II] \II-;,%VP[\EB] \\ if no ';' in remainder, we're done. \SVL[%VP] \LVP[%IM] \\ trim off only password portion into %VP \DVL[%II] \II-;,%VL[\EB] \SVE[%VL] \LVL[%IM] \\ trim off user level portion into %VL \DVE[%II] \\ %VE contains rest of user base entry. |UserNotFound Did you enter your name correctly as '%VN' (y/N) ? \RV8[1] \IV8-Y[\SVN[] \EB] \SV8[41] \SVI[none] \RE[\TV9[%V8] \IV9+[\SVI[%V8] \EM] \+V8[1] ] \\ search user base for blank # \IVI+none[Sorry, user base is full! {\EB] %VF, you will be registered as user #%VI.{ Please choose a password for this system (asterisks will echo): ` \RVP*[15] \IVP+[Blank passwords are not allowed.{{\GB[UserNotFound]] Type your password again to confirm: ` \RV9*[15] \IE-%VP,%V9[Your passwords didn't match!{\GB[UserNotFound]] \UM[** New Host User %VI ** %VN, level %VL] \SVE[ first called on %MO/%DA/%YR at %HR:%MI] \TM%VI[%VN;%VP;%VL;%VE] \\ add entry to user base |MENU \ST[ � Press for Sysop Menu. �] \KO[0] \IVL+0[\svc[LRFZCONXG]] \\ sets the available commands for each user level \IVL+1[\svc[LERFDUZCONXG]] \IVL+2[\svc[LERKFDUZCOJNXGS]] \IVX+ON[Boyan-Host Expert Menu <%VC> { \GB[MenuDispatch] ] {`````````============================{ `````````` Boyan-Host Command Menu{ ``````````----------------------------{ \II+L,%VC[ List message titles{] \II+E,%VC[ Enter a new message{] \II+R,%VC[ Read a message{] \II+K,%VC[ Kill a message{] \II+C,%VC[ Comment to operator{] ``````````----------------------------{ \II+F,%VC[ File listing{] \II+D,%VC[ Download files{] \II+U,%VC[ Upload files{] \II+Z,%VC[ ZIP file contents{] \II+J,%VC[ Jump to DOS{] ``````````----------------------------{ \II+O,%VC[ Operator page{] \II+N,%VC[ New password{] \II+X,%VC[ Expert mode toggle{] \II+G,%VC[ Goodbye{] \II+S,%VC[ Shut down host!{] ``````````============================{ \GB[MenuDispatch] |MenuDispatch Your selection: `\RV0[1] \II-%V0,%VC[Sorry, <%V0> is not a valid option.{\GB[Menu]] \IV0+L[\GB[ListMsgs]] \IV0+E[\GB[EnterMsg]] \IV0+C[\GB[EnterComment]] \IV0+R[\GB[ReadMsg]] \IV0+K[\GB[KillMsg]] \IV0+F[\GB[ListFiles]] \IV0+D[\GB[Download]] \IV0+U[\GB[Upload]] \IV0+Z[\GB[ZipView]] \IV0+O[\GB[OperatorPage]] \IV0+J[\GB[Shell]] \IV0+N[\GB[NewPassword] \IV0+X[\GB[ToggleExpert] \IV0+G[\GB[LogOff]] \IV0+S[\GB[Shutdown]] \GB[Menu] |ListMsgs Available messages:{ \DC[dir %V4*.msg /W > %B:#hosttmp.fil] \\ use DOS to list messages to file \UF- \ULa-[%B:#hosttmp.fil] \UF+ \GB[Menu] |EnterMsg Type a name for your message (1-8 letters): ________^H^H^H^H^H^H^H^H \RV0[8] \\ read in message name of up to 8 chars \SV0[%V4%V0.msg] \\ make %V0 = full path\filename.msg \FE+%V0[That message already exists.{ \GB[Menu]] \GB[MsgHeader] |EnterComment Leaving a private comment for the System Operator...{ \SV0[%V4#comment.tmp] \FE+%V0[\DC[DEL %V0]] \\ delete #comment.tmp if it already exists \GB[MsgHeader] |MsgHeader \SV9[=========== From: %VN ==== %MO/%DA at %HR:%MI ===========] \AF%V0[%V9] \FE-%V0[Unable to create message file %V0.{ \GB[Menu]] \AF%V0[] Enter your message. Hit on empty line when message is complete.{{ %V9{{ \TO[100] \\ set 100-second timeout for each line \SV9[1] \\ line number counter, starts at 1 \GB[GetMsgLines] |GetMsgLines \RE[%V9>" \RV8+[70] \IV8+[\EM] \AF%V0[%V8] \+V9[1]] \GB[EnterOptions] |EnterOptions {Message options: [A]bort, [C]ontinue, [L]ist, or [S]ave ? ` \RV8[1] \IV8+A[\DC[del %V0] Message aborted.{ \GB[Menu] ] \IV8+S[\IV0+%V4#comment.tmp[\GB[SaveComment]]] \IV8+S[Message saved.{ \UM[| Posted %V0] \GB[Menu] ] \IV8+C[\GB[GetMsgLines]] \IV8+L[{ \UF- \ULA-[%V0] \UF+] \GB[EnterOptions] |SaveComment Comment saved.{ \UM[| Left comment to operator] \AF%V0[] \SV1[%V4`COMMENTS.HOS] \FE-%V1[\DC[ren %V0 COMMENTS.HOS] | \DC[type %V0 >> %V1] \DC[del %V0] ] \GB[Menu] |ReadMsg Name of message to read: `\RV0[8] \SV0[%V4`%V0.msg] \\ expand name to path\filename.msg \FE-%V0[That message does not exist.{ \GB[Menu]] \UF- \ULa-[%V0] \UF+ \\ send file if it exists \GB[Menu] |KillMsg Name of message to kill: `\RV0[8] \SV0[%V4%V0.msg] \\ expand name to path\filename.msg \FE-%V0[That message does not exist.{ \GB[Menu]] \DC[DEL %V0] Message file %V0 deleted.{ \GB[Menu] |ToggleExpert \IVX+ON[\SVX[OFF] |ELSE \SVX[ON]] \GB[Menu] |ListFiles \\ list files in host directory Files available for downloading:{ \DC[dir %V5*.* > %B:#hosttmp.fil] \\ use DOS to create list in temp. file \UF- \ULa-[%B:#hosttmp.fil] \UF+ \GB[Menu] |Download \BL[SetProtocol] \\ selected protocol stored in %V9 \IV9+Q[\GB[Menu]] \\ back to files menu if no protocol Enter name of file to download: ` \RV0[38]{ \\ read filename into %V0 \II+"\,%V0[\IVL-2[\GB[Menu]]] \\ need user level = 2 if "\" in filename \II-"\,%V0[\SV0[%V5%V0]] \\ Otherwise, add host file path to name. \II-*,%V0[\II-?,%V0[\FE-%V0[File not found.{ \GB[Menu] ]]] Sending: %V0{ Protocol: <%V9>{ Start the download on your end now.{ \IV9+A[Press when ready: \WL{] \\ expect if ASCII download \UL%V9-[%V0] \\ send file %V0 using protocol %V9 \IV9+A[^K] \\ send to close ASCII download { Download `\IT+[successful. |ELSE unsuccessful.] { \GB[Menu] |Upload \BL[SetProtocol] \\ selected protocol stored in %V9 \IV9+Q[\GB[Menu]] \\ back to files menu if no protocol Enter name of file to upload: ` \RV0[38]{ \IV0+[\GB[Menu]] \\ back to menu if no filename entered \II+"\,%V0[\IVL-2[\GB[Menu]]] \\ if "\" in filename, require level 2 \II-"\,%V0[\SV0[%V5%V0]] \\ Otherwise, add host file path to name. \II-.,%V0[\SV0[%V0.]] \\ Add "." to filename if not there \FE+%V0[File already exists.{ \GB[Menu]] \\ go back if file already here Receiving: %V0{ Protocol: [%V9]{ Start the upload on your end now.{ \PA[3] \\ wait 3 secs before expecting file \DL%V9-[%V0] \\ receive file %V0 using protocol %V9 { Upload `\IT+[successful. |ELSE unsuccessful.] { \GB[Menu] |SetProtocol \\ returns the protocol letter selected, in %V9 \SV8[AXC1YG] \\ set %V8=all possible protocol letters \IP+K[\SV8[%V8`K]] \\ add 'K' to list if Kermit available \IP+L[\SV8[%V8`L]] \\ add 'L' to list if Megalink available \IP+P[\SV8[%V8`P]] \\ add 'P' to list if MPt available \IP+S[\SV8[%V8`S]] \\ add 'S' to list if Sealink available \IP+Z[\SV8[%V8`Z]] \\ add 'Z' to list if Zmodem available ``````````=================={ `````````` Protocol Choices{ ``````````------------------{ \II+A,%V8[ ASCII{] \II+C,%V8[ CRC-Xmodem{] \II+G,%V8[ G-Ymodem{] \II+K,%V8[ Kermit{] \II+L,%V8[ Megalink{] \II+P,%V8[

MPt{] \II+S,%V8[ Sealink{] \II+X,%V8[ Xmodem{] \II+Y,%V8[ Ymodem{] \II+Z,%V8[ Zmodem{] \II+1,%V8[ <1> 1K-Xmodem{] `````````` QUIT{ ``````````=================={ Your selection: `\RV9[1] \IV9+Q[\EB] \II+%V9,%V8[\EB] \\ if selection is ok, then end block. Sorry, protocol <%V9> is not available.{ \GB[SetProtocol] |ZipView Available .ZIP files:{ \DC[dir %V5*.zip /w > %B:#hosttmp.fil] \ULa-[%B:#hosttmp.fil]{ Enter name of ZIP file to view: ` \RV9[8] \SV9[%V5%V9] \FE-%V9.ZIP[File '%V9.ZIP' doesn't exist.{ \GB[Menu]] \DC[pkunzip -v %V9 > %B:#hosttmp.fil] \ULa-[%B:#hosttmp.fil] \GB[Menu] |OperatorPage \II+%HR,01,02,03,04,05,06,07,08[Operator not available at this hour!{\GB[Menu]] Paging operator for 20 seconds ...{ \SV8[%VF] \LV8[10] \\ set %V8 = first 10 letters of caller's first name \DM1[ 浜様様様様様様様様様様様様様様様様様様様� ] \DM2[ � Host Mode OPERATOR BEING PAGED � ] \DM3[ 麺様様様様様様様様様様様様様様様様様様様� ] \DM4[ � = Gossip with %V8``````` � ] \DM5[ � = SYSOP Menu � ] \DM6[ � = ABORT Host Mode � ] \DM7[ � Any other key if 'not available now'.� ] \DM8[ 藩様様様様様様様様様様様様様様様様様様様� ] \AV[7] \AL2[20] \AV[0] {{ \RE[\IK+[\EM]] \\ Wait for any (local) keypress. If key='G', go to \IE+%IK,G[\GB[Gossip]] \\ Gossip block. (Tab&Esc are handled as interrupts.) Sorry, the operator isn't available now.{ \GB[Menu] |Gossip \IV3-LOCAL[\AM[G]] Please switch into your local "Gossip" module to chat with Sysop...{ \ST[ � Press for Sysop Menu. �] \RE[\IK+[%IK]] \\ This "tight loop" handles 2-way chatting. |Shell \UM[| Host user Jumped to DOS.] {{ \IV3+LOCAL[\JD \GB[Menu]] \\ if Local Host test, just Jump to DOS. \FE+%B:DOORWAY.EXE[\GB[Doorway]] \\ Branch if doorway.exe found. Type "EXIT" to return to BOYAN-Host.{ \SV0[%B:#hosttmp.bat] \\ Create a new batch file #HOSTTMP.BAT \FE+%V0[\DC[del %V0]] \\ which has three lines: \AF%V0[CTTY COM%MD] \\ CTTY COM1 (or COM2,COM3,COM4) \AF%V0[COMMAND] \\ COMMAND \AF%V0[CTTY CON] \\ CTTY CON \DC[%B:#hosttmp] \\ Then execute the batch file. \GB[Menu] |Doorway Switch into the DOORWAY module of your communications program now, %VF.{ \DC[%B:DOORWAY COM%MD /V:D /L: /S:* /C:dos] \\ invoke DOORWAY \GB[Menu] |Shutdown Are you sure you want to Shut Down the host (y/N) ? ` \RV0[1]{ \IV0-Y[\GB[Menu]] BOYAN Host shut down.{ \IV3+MODEM[\PA[2]\HU] \\ Pause & hang up. \PA[2] \\ 2-second pause... \AB \\ Abort script (goes to *WRAPUP block) |NewPassword Please type your current password (asterisks will echo): ` \RV8*[15] \IV8-%VP[Wrong password!{ \GB[Menu]] Type the new password you would like: ` \RV8*[15] \IV8+[Blank passwords are not allowed.{ \GB[Menu]] Type this password again to confirm: ` \RV9*[15] \IE-%V8,%V9[Your passwords didn't match!{ \GB[Menu]] \UM[| Caller changed password] Your password has been changed.{ \SVP[%V8] \TM%VI[%VN;%VP;%VL;%VE] \\ store change in host user base \GB[Menu] |WrongPassword Sorry, too many attempts.{ \UM[| Incorrect password '%V0'; user denied entrance.] \GB[LogOff] |LogOff {Thank you for using BOYAN host!{{ \IV3+MODEM[\PA[5]\HU~~~] \GB[Cycle] |Cycle \\ This block runs between all calls. \IV3+MODEM[\HU \PL] \\ hang up & purge line if MODEM connection \DM1,[Host cycled %VN at %HR:%MI.] \UM[| Disconnected after %SL] \\ add host.use message \PA[3] \SVN[] \SN[] \\ Erase the username from %VN \GB[WaitForCall] |*TAB \\ This runs automatically when pressed \IVO+waiting[\sv9[FHJVWPRST]] \\ available menu options if no caller logged in \IVO+in-use[\sv9[CFGHJLVWPRST]]\\ available menu options if caller IS logged in \IE-%AN,HOST[\AM[H]\EC+\LF+] \\ make sure we're using Host module \IV3+MODEM[\PL] \SV8[%VF] \LV8[10] \\ set %V8 to caller's first name (10 letters) \KS \SV0[3] ``````````\DM12,%V0[ 浜様様様様様様様様様様様様様様様様様様様� ] \+V0[1] ``````````\DM12,%V0[ � SYSOP MENU %HR:%MI Boyan Host Mode � ] \+V0[1] ``````````\DM12,%V0[ 麺様様様様様様様様様様様様様様様様様様様� ] \+V0[1] \II+C,%V9[\DM12,%V0[ � = Cycle Host (Hang Up) � ] \+V0[1] ] \II+F,%V9[\DM12,%V0[ � = DOS File Manager � ] \+V0[1] ] \II+G,%V9[\DM12,%V0[ � = Gossip with %V8``````` � ] \+V0[1] ] \II+H,%V9[\DM12,%V0[ � = Host configuration section � ] \+V0[1] ] \II+J,%V9[\DM12,%V0[ � = Jump to DOS � ] \+V0[1] ] \II+L,%V9[\DM12,%V0[ � = Change caller's user Level � ] \+V0[1] ] \II+P,%V9[\DM12,%V0[ �

= Change modem Parameters � ] \+V0[1] ] \II+S,%V9[\DM12,%V0[ � = Scroll-back buffer � ] \+V0[1] ] \II+T,%V9[\DM12,%V0[ � = Toggle 43/50-line mode (EGA/VGA)� ] \+V0[1] ] \II+V,%V9[\DM12,%V0[ � = View HOST.USE usage log � ] \+V0[1] ] \II+W,%V9[\DM12,%V0[ � = View COMMENTS.HOS comment file � ] \+V0[1] ] ``````````\DM12,%V0[ 把陳陳陳陳陳陳陳陳陳陳陳陳陳陳陳陳陳陳陳� ] \+V0[1] \II+R,%V9[\DM12,%V0[ � = RESUME Host Mode � ] \+V0[1] ] ``````````\DM12,%V0[ �= ABORT Host Mode � ] \+V0[1] ``````````\DM12,%V0[ 藩様様様様様様様様様様様様様様様様様様様� ] \KO[30] \BB+ \KV0_[SYSOP OPTION: ] \BB- \RS \II-%V0,%V9[\GB[*TAB]] \IV0+R[\ST[Continuing script...] \IVO+in-use[\GB[Menu] | \GB[WaitForCall]] ] \IV0+C[\GB[LogOff]] \IV0+G[\GB[Gossip]] \IV0+L[\GB[ChangeUserLevel]] \IV0+F[\FM[%V4]] \IV0+H[\CB[A] \IE-%AN,HOST[\AM[H]] ] \IV0+J[\JD] \IV0+P[\CM] \IV0+W[\DC+[%LC %V4`COMMENTS.HOS]] \IV0+S[\RB] \IV0+T[\GL*] \IV0+V[\DC+[%LC %UN]] \GB[*TAB] |ChangeUserLevel \KS \DM1[ 浜様様様様様様様様様様様様様様様様様様様� ] \DM2[ � Setting Caller's User Level � ] \DM3[ 麺様様様様様様様様様様様様様様様様様様様� ] \DM4[ � <0> - New user (limited access) � ] \DM5[ � <1> - Regular (messages & files) � ] \DM6[ � <2> - SYSOP (Jump to DOS, etc.) � ] \DM7[ � ( Press to quit Host Mode. ) � ] \DM8[ 藩様様様様様様様様様様様様様様様様様様様� ] \KVL%VL[New level for %VF: ] \RS {%VF, your user level is now %VL.{ \TM%VI[%VN;%VP;%VL;%VE] \\ store change in host user base \GB[Menu] |*WRAPUP \IE-%AN,HOST[\EB] \DM1[ 浜様様様様様様様様様様様様様様様様様様様� ] \DM2[ � Host Mode Finished. � ] \DM3[ 麺様様様様様様様様様様様様様様様様様様様� ] \DM4[ � � ] \DM5[ � Press to re-invoke host. � ] \DM6[ 藩様様様様様様様様様様様様様様様様様様様� ] \UF- \IVU-[\UF+[%VU]] \\ close HOST.USE log; reopen prev. log. \BB+ \AV[7] \\ sound effects back on \AM[%VR] \\ change back to previous action module \GB[Restore7] |Restore7 \\ restore your macro #7 from macro#7.hos \SV1[\AL3[0"] \RC \SK- \UM[| Disconnected after "%SL"]] \FE+%B:macro#7.hos[\GV1[%B:macro#7.hos] \GV1[] \DC[del %B:macro#7.hos]] \SM7[%V1]