home *** CD-ROM | disk | FTP | other *** search
/ ProfitPress Mega CDROM2 …eeware (MSDOS)(1992)(Eng) / ProfitPress-MegaCDROM2.B6I / COMM / MISC / CS_MAC05.ZIP / CS-MAC05 < prev    next >
Encoding:
Text File  |  1992-04-05  |  26.4 KB  |  583 lines

  1.  
  2.  ┌────────────────────────────────┐
  3.  │  Chuck Seyboldt's COMMO Macro  │                 CS-MAC05
  4.  └────────────────────────────────┘
  5.  
  6. ! *  You !NEED! to edit! lines that have a "!" in the first column.
  7.          ^^^^^^^^^^^^^^^
  8. * *  Lines with a  "*"  may be deleted.
  9.   *  Deleting my comments is a good thing to do, it saves much RAM.
  10.  
  11.   *  This is  *NOT*  a complete control system for {Commo}.
  12.   *  CS-MACxx is to be added to your existing COMMO.MAC file.
  13.  
  14.   *  Supported by COMMO v.5x: This macro is in use as of 04/05/92 to fetch
  15.   *  mail from a variety of sources.  The macro text has terse commentary.
  16.   *  You will need a file, RENQWK.BAT, in your COMMO home directory, to
  17.   *  rename .QWK packets to avert download crashes.
  18.   *  An example RENQWK.BAT is later in this file ... ready to snip out.
  19.  
  20.   *  Many thanks to Fred Brucker for providing the intelligent, excellent
  21.   *  platform that supports this work.  COMMO is powerful and fun.
  22.  
  23.   * ASSUMPTIONS *
  24.  
  25.   *  Zmodem is assumed for all file transfers in these macros.
  26.   *  I assume you are using a registered copy of DSZ.
  27.   *  I assume that DSZ is located in your DOS path.
  28.  
  29.   * KEY ASSIGNMENTS *
  30.  
  31.   *  The macro contains several features that can be called without
  32.   *  being ONLINE or in a mailrun.  Here are the key assigments so you
  33.   *  may check for conflicts with your existing COMMO.MAC
  34.  
  35.   *  ■   Alt-N       Multi-number dial with auto-return on NO CARRIER
  36.   *  ■   Alt-F       Make ACTION FILE for later ONLINE processing
  37.   *  ■   ^Home       Toggle Capture ON/OFF (names cap file with date)
  38.  
  39.   *  Key assignments for THE-REST are in the ASSIGN.KEY file.
  40.  
  41.   * FEATURES *
  42.  
  43.   *     -  fast
  44.   *     -  runs unattended
  45.   *     -  one macro for many BBSs
  46.   *     -  one session may call several BBSs
  47.   *     -  works for MarkMail, Qmail, RoseMail, Jimmer, and JetMail
  48.   *        (all BBS and mail door prompts be set to EXPERT)
  49.   *     -  renames .QWK files  (RENQWK.BAT included in this file)
  50.   *     -  deletes .REP files  (via registered DSZ -u function)
  51.   *     -  checks message count from  MarkMail  doors.
  52.   *        Skips mail download if message count is less than 30.
  53.   *     >  ACTION PROCESSOR macro for file uploads and downloads.
  54.   *     -  Includes a macro that will prompt you for selections and
  55.   *        make the BBS specific "ACTION" lists based on your input.
  56.   *     -  Keeps a timestamped ACTION history file for each BBS.
  57.  
  58.   *  Support  *
  59.  
  60.   *     -  I really enjoy sharing COMMO.  Your questions and advice
  61.   *        are welcome.  You may find me in U'NI's COMMO conference
  62.   *        almost daily ... on RIME via Directory Assistance
  63.   *        occasionally ... or at NLBBS  (1,207 761-4782).
  64.   *     -  No $ charge for this work.  It's full of room to improve.
  65.   *        I consider your comments to be ample payment.
  66.  
  67.  ┌───────────────────────┐
  68.  │  Logon & Mail Macros  │
  69.  └───────────────────────┘
  70.  
  71.   *  :QMA is the central control macro.  :QMA first passes control to
  72.   *  the :PCB generic logon routine.  Then, if an ACTION file exists in
  73.   *  the Commo home directory, the :ACTION file processor is called.
  74.  
  75.   *  The :ACTION file processor and the (Alt-F) ACTION file generator
  76.   *  are located near the end of this macro file.
  77.  
  78.   *  File uploads and downloads occur before opening the mail door.
  79.   *  If a .REP exists, it is is uploaded.  Then the .QWK is downloaded.
  80.   *  Be sure to set your mail directory location  (same for .QWK & .REP)
  81.  
  82.  ────────────────────────────────────────────────────────────────────────
  83.  {:qma}  {setv nodl} {setv count}     ;set some working variables
  84. ! --->   {setv maildir,d:\qwk}        ;set to   YOUR   mail directory
  85.          {capture n}                  ;turnoff capture if open
  86.          {call pcb}                   ;call generic logon routine
  87.          {push}                                  ;(push + pops ≈ call)
  88.          {ifexist %_hom%action.%abbr%,action,}   ;CALL "ACTION processor"
  89.          {pops}
  90.          {ifexist %maildir\%nodeid.rep,ask,d_l}  ;GOTO mailrun routines
  91.  ────────────────────────────────────────────────────────────────────────
  92.  
  93.   *            How this macro serves several nodeid (BBSs) ...
  94.  
  95.   *  1.  The .FON file has linked macros called "qmn", "qms", "qml",
  96.   *      etcetera.  You'll see the names a few lines down from here.
  97.  
  98.   *  2.  The .MAC file has labels called ":qmn", ":qms", ":qml", etc.
  99.   *      The short (:qmn) macro routines set these Commo variables;
  100.  
  101.   *  nodeid  : the .QWK/.REP filename.
  102.   *  abbr    : a two character abbreviation for .QWK renaming.
  103.   *  dorno   : the appropriate "OPEN xxxx" command for the BBS maildoor.
  104.   *  dmenu   : An optional variable to accomodate two-level entry into
  105.   *            the mail door.  This command to get to "door menu" prompt.
  106.  
  107.   *  3.  The (UNMArk)'s provide a way to dial multiple nodes for one
  108.   *      BBS.  After connecting with one node, any other marked .FON
  109.   *      entries for that BBS are removed from the redial queue.
  110.  
  111.   *  4.  The (RETU)'s after the (CALL QMA)'s facilitate multiple
  112.   *      calls in one unattended session.  There is a hitch though.
  113.   *      You must follow these  -abcd-  instructions,
  114.  ───────────────────────────────────────────────────────────────────
  115.   *                       A. Open the .FON dialer
  116.   *                       B. Manually mark BBSs
  117.   *                       C. Exit dialer
  118.   *                       D. Use THIS Alt-N command.
  119.  ───────────────────────────────────────────────────────────────────
  120.  {:aln}  {dial-c ,}             {retu}           Multi-dial & Return
  121.  ───────────────────────────────────────────────────────────────────
  122.  
  123. !{:qmn}  {setv nodeid,nlbbs}    {setv abbr,nl}   {setv dorno,mmail}
  124.          {unmark 2 ■,3 ■}       {call qma}       {retu}
  125. !{:qms}  {setv nodeid,smuti}    {setv abbr,sm}   {setv dorno,1}
  126.                                 {call qma}       {retu}
  127. !{:qml}  {setv nodeid,ledge}    {setv abbr,le}   {setv dorno,mm20}
  128.                                 {call qma}       {retu}
  129. !{:qmm}  {setv nodeid,mepccon}  {setv abbr,me}   {setv dorno,1}
  130.                                 {call qma}       {retu}
  131. !{:qmd}  {setv nodeid,datawarp} {setv abbr,da}   {setv dorno,mm2}
  132.                                 {call qma}       {retu}
  133. !{:qmi}  {setv nodeid,dirasnt}  {setv abbr,di}   {setv dorno,jimmer}
  134.                                 {call qma}       {retu}
  135. !{:qmw}  {setv nodeid,wolfmoon} {setv abbr,wo}   {setv dorno,f}
  136.          {setv dmenu,s}         {call qma}       {retu}
  137.  
  138.  ┌─────────────────────────────┐
  139.  │  Standard Online Responses  │  (part of the Generic Logon Routine)
  140.  └─────────────────────────────┘
  141.  
  142.   *  Responses to common logging-on prompts.
  143.   *  Put in  *YOUR*  name.  Notice that I have a different response
  144.   *  to the "First name?" prompt for the BBS called Directory Assistance.
  145.  
  146. !{:lof}  {comp abbr,di} {ifco lof1}   ;If BBS=DIRASNT, send TURBO login
  147. ! --->   {send Chuck Seyboldt|}{retu} ;otherwise, just send name.
  148. !{:lof1} {send Chuck Seyboldt %_pas% !main|} {alarm 2} {retu}
  149.  
  150. !{:lov}  {send 2078929168|}    {retu} ;Voice Phone Number verification
  151. !{:lob}  {send 042355|}        {retu} ;Birthday verification
  152. !{:loq}  {send y q ns|}        {retu} ;choose ANSI colors (Y/n)
  153.  {:|}    {send |}              {retu}
  154.  {:n|}   {send n|}             {retu}
  155.  {:y|}   {send y|}             {retu}
  156.  {:0|}   {send 0|}             {retu}
  157.  {:los}  {send  }              {retu} ;this is how to send "SpaceBar"
  158.  {:loe}  {send ~~^[^[}         {retu} ;this is sending two "Esc" presses
  159.  {:pas|} {send %_pas|}         {retu} ;this sends your password
  160.  
  161.  ┌─────────────────────────┐
  162.  │  Generic Logon Routine  │
  163.  └─────────────────────────┘
  164.  
  165.   *  This is a stand-alone logon macro for times you DON'T want to
  166.   *  make a mail run.  It is designed to get you quickest to the
  167.   *  "Main BBS Command?" prompt.
  168.  
  169.   *  This works for PCBoards, for the RRBS run by Jim Goodenough,
  170.   *  Directory Assistance  (1,707 538-8710), for Shad Muegge's
  171.   *  BABBLE BBS (1,707 538-1507), for Mark Turner's ESCape running
  172.   *  GAP software (1,714 698-9568), for Mike Martell's Wolf's Moon
  173.   *  running Spitfire (1,207 772-9093), and possibly for Wildcat!
  174.   *  Always adding more prompts to accomodate more BBS types.
  175.   *  In general, turn any BBS HOTKEY option to OFF.
  176.  
  177.  {:pcb}  {setlook 60,bye,10,|}
  178. !        {exec-N d:}                  ;(option) set to your drive letter
  179.          {push}                       ;push + pops ≈ call
  180.          {golook n|,A>?}              ;just say 'no' RBBS prompt
  181.          {golook n|,change?}          ;PCBoard  "Language" prompt
  182.          {golook loq,er)=no?}         ;PCBoard  "Graphics" prompt
  183.          {golook loq,= yes :}         ;GAP      "Graphics" prompt
  184.          {golook y|,? [y/N]}          ;Spitfire "Graphics" prompt
  185.          {golook loe, twice}          ;send Escape twice  (Front End)
  186.          {golook lof,st name}         ;send name (PCBoard, RBBS, GAP)
  187.          {golook lof,r name:}         ;send name (Spitfire)
  188.          {golook lof,al name}         ;send name (Babble)
  189.          {golook y|,orrect?}          ;send 'y' when caller ID is asked
  190.          {golook onl,ommand?}         ;Logged on via "quick" RBBS logon
  191.          {lookfor Password}           ;Logon macro now has two "lookfors"
  192.          {pops}                       ; Why?  To accomodate more golooks.
  193.          {send %_pas|}                ;send password
  194.          {push}
  195.          {setlook 60,bye,10,n|}       ;Start of "Logon, Part II"
  196.          {golook lov,CE ph}           ;Wildcat Phone Number verify
  197.          {golook lob,?????}           ;Wildcat  Birthdate   verify
  198.          {golook |,ause-}             ;Wildcat -pause- prompt
  199.          {golook |,TER >}             ;Spitfire "more" and BLT bypass
  200.          {golook pas|,Wrong}          ;resend password if necessary
  201.          {golook n|,More?}            ;just say 'no' to "More?"
  202.          {golook n|,inue?}            ;just say 'no' to "Continue?"
  203.          {golook n|,=yes?}            ;just say 'no' to "mail scan"
  204.          {golook n|,N)?}              ;just say 'no' RBBS prompt
  205.          {golool los,y key}           ;pass by "any key" prompt (GAP)
  206.          {golook los,(SPACE)}         ;send spacebar (Babble)
  207.          {golook onl,mand:}           ;Babble   Logon Complete
  208.          {golook onl,and :}           ;GAP      Logon Complete
  209.          {golook onl,N MENU -}        ;Spitfire Logon Complete
  210.          {golook onl,IN MENU:}        ;Wildcat  Logon Complete
  211.          {lookfor Command?}           ;PCBoard  Logon Complete
  212.  {:onl}  {pops}      {retu}           ;All set.  Logged-ON.
  213.  
  214.  ────────────────────────────────────────────────────────────────────────
  215.  
  216.  ┌─────────────────────────┐
  217.  │  MailRun Routine Start  │
  218.  └─────────────────────────┘
  219.  
  220.   *  Already checked for a .REP file.  If a REP exists, you are offered
  221.   *  the option to only upload those replies.  But, the default action
  222.   *  is to get a QWK.  This way, unattended sessions fetch a .QWK
  223.  
  224.  {:ask}  {alarm 1} {pause 1}
  225.          {display ,,,^j^j}
  226.          {display ,18,1E,▌ (C)ontinue mail d/l NOW ■ 'S' to skip d/l ▐}
  227.          {display ,,,^m}
  228.          {setlook 15,d_l,,}                 ;using Commo for timed branch
  229.          {golook d_l,c}                     ;15 second delay, default=d/l
  230.          {golook n_u,s}
  231.          {lookfor 15 sec delay to d/l}      ;Will not be seen from COMport
  232.          {goto d_l}
  233.  {:n_u}  {setv nodl,y}                      ;set variable to skip d/l try
  234.  
  235.  ┌───────────────────────────────┐
  236.  │  Get to the Mail Door Prompt  │
  237.  └───────────────────────────────┘
  238.  
  239.  {:d_l}  {pause 2}                          ;clear any user response
  240.          {comp dmenu}
  241.          {ifco pdl}                         ;check for two-level trigger
  242.          {send ^h~~~%dmenu%|}               ;if req'd, go to Door Menu
  243.          {setv dmenu}                       ;reset two-level trigger
  244.          {lookfor oor menu -}
  245.          {send ~~~~%dorno%~|} {goto sdl}    ;skip over one-level "OPEN"
  246.  {:pdl}  {send ^hopen %dorno%|}
  247.  {:sdl}  {setlook 60,bye,30,y|}
  248.          {push}
  249.          {golook |,inue>}                   ;for Jimmer  Startup
  250.          {golook |,inue:}                   ;for JetMail Startup
  251.          {golook y|,inue...}                ;for QM4 prompt
  252.          {golook qul,) Command?}            ;for Qmail doors
  253.          {golook qul,or menu>: }            ;for Jimmer
  254.          {lookfor Mail Command}             ;for MarkMail/RoseMail/JetMail
  255.  
  256.  ┌─────────────────┐
  257.  │  Upload a .REP  │
  258.  └─────────────────┘
  259.  
  260.   *  If a .REP exists, it is sent before any attempt is made to download.
  261.   *  This uses DSZ's -u option to erase the .REP after a successful upload.
  262.   *  Hence one reason to register your copy of DSZ <g>.
  263.  
  264.  {:qul}  {pops}
  265.          {ifexist %maildir\%nodeid.rep,,nup}
  266.          {send ~~u|}
  267.          {setlook 30,bye,,}
  268.          {lookfor ^xB01}
  269.          {exec-n dsz port %_por ha bo sz -mu %maildir\%nodeid.rep}
  270.          {setlook 60,bye,15,|}
  271.          {push}
  272.          {golook y|,inue...}                ;for QM4 prompt
  273.          {golook nup,) Command?}            ;for Qmail doors
  274.          {golook nup,or menu>: }            ;for Jimmer
  275.          {lookfor Mail Command}             ;for MarkMail/RoseMail/JetMail
  276.  
  277.  ┌───────────────────┐
  278.  │  Download a .QWK  │
  279.  └───────────────────┘
  280.  
  281.   *  The ":nup" section would be skipped if you decided to skip .QWK
  282.   *  downloading in the "Mailrun Routine Start, :ask" section.
  283.  
  284.  {:nup}  {pops}
  285.          {comp nodl,y} {ifcond byz,}        ;Skip d/l if %nodl=y
  286.          {send ~~d~|}                       ;Otherwise, scan messages
  287.          {setlook 300,bye,90,y|}
  288.          {golook ndl,was found!}
  289.          {golook ndl,No Messages}
  290.          {golook ndl,no new mess}           ;RoseMail empty packet
  291.          {golook qdl,se messages}           ;QM4 prompt
  292.          {golook qdl,transfer...}           ;Jimmer Mail prompt
  293.          {golook qdl,bytes using}
  294.          {golook qdl,When Done?}            ;MM2 prompt        | mutually
  295.          {golook mmr,tal Messages: }        ;MM2 message count | exclusive
  296.          {lookfor this packet (}            ;QM2 or RoseMail prompt
  297.          {goto qdl}
  298.  
  299.  ┌───────────────────────────┐
  300.  │  Count MarkMail Messages  │
  301.  └───────────────────────────┘
  302.  
  303.   *  This section will skip the RENQWK and any attempt to download if
  304.   *  MarkMail scans less than 30 messages for your .QWK packet.
  305.  
  306.  {:mmr}  {setg ,,l,^m}
  307.          {gets count,15}                    ;get message count  (w/ANSI)
  308.          {subs count,-4,4,%count}           ;take last 4 characters
  309.          {lookfor When Done?}
  310.          {comp count,30}                    ;if less than 30 messages,
  311.          {ifcond-L ndl}                     ;then skip download
  312.  
  313.  ┌────────────────────────────────┐
  314.  │  .QWK rename and DSZ Download  │
  315.  └────────────────────────────────┘
  316.  
  317.   *  Renaming is much faster with one call to a batch file than several
  318.   *  COMMO calls to command.com.  Passing these variables from COMMO.MAC
  319.   *  to renqwk.bat.  %1 = %maildir : %2 = %nodeid : %3 = %abbr
  320.  
  321.  ┌─────────────────  renqwk.bat  ─┐    <--  cut here  --
  322.  │  @echo off                     │
  323.  │  ctty nul                      │
  324.  │                                │
  325.  │  del %1\%3__5.qwk              │
  326.  │  ren %1\%3__4.qwk  %3__5.qwk   │
  327.  │  ren %1\%3__3.qwk  %3__4.qwk   │
  328.  │  ren %1\%3__2.qwk  %3__3.qwk   │
  329.  │  ren %1\%3__1.qwk  %3__2.qwk   │
  330.  │  ren %1\%2.qwk     %3__1.qwk   │
  331.  │                                │
  332.  │  ctty con                      │
  333.  └────────────────────────────────┘    <--  cut here  --
  334.  
  335.  {:qdl}  {ifex %maildir\%nodeid.qwk,,gonow} ;check for .QWK before rename
  336.          {exec-n %_hom%renqwk %maildir %nodeid %abbr}    ;.QWKfile rename
  337.  {:gonow}{send ~~y|}
  338.          {lookfor ^xB00}
  339.          {exec-N dsz port %_por ha bo rz -mr %maildir}
  340.  {:ndl}  {setlook 30,bye,5,n|}
  341.          {push}
  342.          {golook y|,inue...}                ;for QM4 "continue" prompt
  343.          {golook byz,) Command?}            ;for Qmail Doors
  344.          {golook byz,or menu>: }            ;for Jimmer
  345.          {lookfor Mail Command}             ;for MarkMail/RoseMail/JetMail
  346.  
  347.  ┌──────────────────────┐
  348.  │  LogOFF or Stay on?  │
  349.  └──────────────────────┘
  350.  
  351.   *  Again a choice.  Default is to end the connection, but you may
  352.   *  stay ONLINE if you wish.  The macro is setup to open a capture
  353.   *  file if you choose to stay online.
  354.  
  355.  {:byz}  {pops}
  356.          {paus 1}{alarm 1}  {parm ,,,,0}
  357.          {display ,,,^j^j}
  358.          {display ,18,1E,▌ 'G' to LogOFF NOW ■ SpaceBar to stay ON  ▐}
  359.          {display ,,,^m}
  360.          {setlook 10,bye,,}                 ;using Commo for timed branch
  361.          {golook bye,g}                     ;10 second delay, default=bye
  362.          {golook sta, }
  363.          {lookfor 10 sec delay to Auto-LogOFF}
  364.  {:sta}  {clear} {send ^h|}
  365.          {call chm}      {}                 ;chm opens capture file
  366.  {:bye}  {send ^hg|}                        ;^h to clear user response
  367.          {setlook 10,,,}
  368.          {lookfor NO CARRIER^m^j}           ;comes from modem
  369.  {:bya}  {hangup y}
  370.          {setv lastcall,%nodeid}            ;save lastcall info
  371.          {setv nodeid} {setv abbr}
  372.          {setv dorno}  {setv nodl}  {retu}  ;and recycle your variables.
  373.  
  374.  ┌───────────────────────┐
  375.  │  Toggle CAPTURE mode  │
  376.  └───────────────────────┘
  377.  
  378.   *  This routine is setup with a directory called SAV located in the
  379.   *  Commo home directory (i.e., d:\commo\sav)  In addition to serving
  380.   *  a useful function here, Ctrl-Home will toggle capture  ON/OFF.
  381.  
  382.  {:chm}  {comp capture,on} {ifco cof}
  383.          {setv capture,on}
  384. !        {setv savedir,%_hom%sav}
  385.          {capture y,%savedir\%_mon%%_day%.cap}
  386.          {exec-n echo OPENED  ■  %_dat %_tim^j>> %_cap}  {return}
  387.  {:cof}  {setv capture}    {capture n}
  388.          {exec-n echo CLOSED  ■  %_dat %_tim^j■-■-■>> %_cap}
  389.          {return}
  390.  
  391.     ┌──────────────────────────────┐
  392. └───┤  End Of Mail fetchin' macro  ├───────
  393.     └──────────────────────────────┘
  394.  
  395.     ┌──────────────────────────────────┐
  396. ┌───┤  COMMO "ACTION processor" macro  ├───
  397.     └──────────────────────────────────┘
  398.  
  399.   *  This section reads simple ASCII files and sends commands and
  400.   *  strings to the BBS based on the ACTION file.  Setup for PCBoards.
  401.  
  402.   *  You may make an ACTION file manually with a text editor.
  403.   *  An ACTION file generator is included later as the :alf macro command.
  404.   *  Located in the COMMO home dir, the ACTION file has this sort of format:
  405.  
  406. ┌───────────────────────────────  action.nl  ─┐
  407. │ u                                           │ < "U" for upload
  408. │ filename.ul                                 │ < Name the file to u/l
  409. │ A line of file desription.  Up to 45 chars  │ < decription
  410. │ in length.  Multiple line descriptions are  │
  411. │ supported if your BBS host allows them.     │
  412. │ --                                          │ < "--" to end ACTION item
  413. │ d                                           │ < "D" for download
  414. │ file1.dl                                    │ < batch downloads allowed
  415. │ another.zip                                 │
  416. │ filemore.lhz                                │
  417. │ --                                          │ < "--" is important
  418. │ u                                           │
  419. │ another.zip                                 │
  420. │ /Private to the sysop.  Thanks for the fish │
  421. │ --                                          │ < Esp. at the very end.
  422. └─────────────────────────────────────────────┘
  423.  
  424.   {:action}{rope %_hom%action.%abbr,act-end}              <- START here
  425.   {:reread}{setlook 60,,10,|}
  426.            {read cmd}                         ;read line of ACTION file
  427.            {comp cmd,--}  {ifco reread}       ;branch to appropriate ACTION
  428.            {comp cmd,a}   {ifco asciup}
  429.            {comp cmd,j}   {ifco joincn}
  430.            {comp cmd,d}   {ifco dlfile}
  431.            {comp cmd,u}   {ifco ulfile}       ;if no match, end ACTION
  432.  
  433.   {:act-end}                                  ;When at end of ACTION list
  434.            {exec-n echo ^j*-*-* %_dat %_tim >> %_hom%used-act.%abbr}
  435.            {exec-n type %_hom%action.%abbr  >> %_hom%used-act.%abbr}
  436.            {exec-n del  %_hom%action.%abbr}
  437.            {setv line}  {setv fname}  {setv cmd}
  438.            {retu}                                         <-  END here
  439.  
  440.   {:dlfile}{send d|}                   ;Setup is for Zmodem BATCH downloads
  441.            {golo skip,not avai}        ;If host doesn't allow d/l, skip it
  442.   {:next-d}{read fname}                ;Read one complete line into %fname%
  443.            {comp fname,--} {ifco do-dl}
  444.            {ifex %dldir\%fname,next-d} ;Don't try to d/l files that exist
  445.            {send %fname%~~~|}          ;Send filename to BBS
  446.            {goto next-d}               ;Repeat read til dl-list is all read
  447.   {:do-dl} {send |~~|}                 ;Start download
  448.            {look ^xB00}
  449.            {exec-n dsz ha bo rz -mr %dldir}
  450.            {lookfor Command?}
  451.            {goto reread}               ;end of "D" ACTION processor
  452.  
  453.   {:ulfile}{read fname}                ;Upload ACTION starts
  454.            {ifex %uldir\%fname,,skip}  ;Make sure file exists on your disk
  455.            {send u %fname% z|}         ;Tell host to get ready for u/l
  456.            {golo skip,not avai}        ;If host doesn't allow u/l, or
  457.            {golo skip,y exists}        ;If host says file already exists,
  458.            {golo skip,plicates}        ;  skip this u/l action item.
  459.            {lookfor ximum)}            ;Host is ready for description.
  460.    {:desc} {read line}
  461.            {comp line,--}              ;Check for end of u/l action
  462.            {ifco ul_ok}
  463.            {send ~%line%|}             ;Send description line
  464.            {goto desc}                 ;and look for more description
  465.    {:ul_ok}{send ~|}
  466.            {lookfor ^xB01}             ;Zmodem upload
  467.            {exec-n dsz ha bo sz -m %uldir\%fname}
  468.            {setlook 60,,30,|}          ;Allow time for file validation
  469.            {lookfor Command?}
  470.            {goto reread}               ;end of "U" ACTION processor
  471.  
  472.    {:skip} {read line}                 ;SKIP section jumps to next
  473.            {comp line,--}              ;  action item by reading to
  474.            {ifco ,skip}                ;  the next "--" string.
  475.            {send |}
  476.            {setlook 50,,3,|}
  477.            {lookfor Command?}
  478.            {goto reread}               ;alternate end of "U" processor
  479.  
  480.   *  ASCII uploads take a special form.  Here is an example message.
  481.   *  You may need to structure ASCII upload messages differently.
  482.  
  483. ┌──────────────────────────────────  hijack ──┐
  484. │ jack kilday                                 │ < Message Recipient
  485. │ Thanks for the Fish                         │ < Message Subject
  486. │ n                                           │ < Public/Private msg flag
  487. │ u                                           │ < Use ASCII u/l, not editor
  488. │ Hi Jack,                                    │
  489. │                                             │
  490. │     Just stopping in with a test of a COMMO │
  491. │ ACTION macro processor.  I also wanted to   │
  492. │ give you a big THANK YOU for all the fish.  │
  493. │ They were delicious.                        │
  494. │                                             │
  495. │                                   Chuck·S   │
  496. └─────────────────────────────────────────────┘
  497.  
  498.   {:asciup}{read fname}                ;ASCII upload to PCBoard system
  499.            {ifex %dldir\%fname%,,reread}
  500.            {parm ,,,,2} {send e|}      ;Send "E" to start message entry
  501.            {asciiup %dldir\%fname%,}   ;Send the structured message
  502.            {parm ,,,,0} {send ~~|~~~sn|}   ;the PCBoard "save" command
  503.            {lookfor Command?}
  504.            {goto reread}               ;end of "A" processor
  505.  
  506.   {:joincn}{read fname}                ;Join PCBoard Conference
  507.            {send j %fname|}
  508.            {push}
  509.            {golook n|,)=yes?}          ;Skip mail scan
  510.            {golook |,invalid}          ;If you choose invalid conf
  511.            {golook n|,(H)elp}          ;If you chose invalid conf
  512.            {golook 0|,none?}           ;To conf 0 on invalid conf
  513.            {lookfor Command?}  {pops}
  514.            {goto reread}               ;end of "J" processor
  515.  
  516.     ┌───────────────────────────────────┐
  517. └───┤  End Of "ACTION processor" macro  ├───────
  518.     └───────────────────────────────────┘
  519.     ┌─────────────────────────────┐
  520. ┌───┤  "ACTION generator"  macro  ├───
  521.     └─────────────────────────────┘
  522.  
  523.   *  This macro isn't commented.  It is pretty easy to follow.
  524.   *  Here it is assigned to the Alt-F key combination.
  525.  
  526.   {:alf}   {inpu abbr,Make ^(ACTION^) file:  What BBS?}   <- START Here
  527.            {comp abbr}    {ifco opena}
  528.            {subst abbr,1,2,%abbr}
  529.   {:opena} {wope %_hom%action.%abbr}
  530.  
  531.   {:icmnd} {setv cmd} {setv fname} {setv line}
  532.            {inpu cmd,^(U^)pload, ^(D^)ownload, ^(A^)scii Upload, ^(J^)oin Conf?}
  533.            {comp cmd,u}   {ifco makeul}
  534.            {comp cmd,d}   {ifco makedl}
  535.            {comp cmd,a}   {ifco makeau}
  536.            {comp cmd,j}   {ifco makejn}
  537.            {comp cmd}     {ifco ,icmnd}
  538.            {wclo}         {edit %_hom%action.%abbr}
  539.            {setv cmd}     {setv fname} {setv line} {}     <- END Here
  540.  
  541.   {:makejn}{inpu fname,Name or Number of Conference to Join}
  542.            {comp fname}   {ifco icmnd}
  543.            {write j}
  544.            {write %fname}
  545.            {write --}     {goto icmnd}
  546.  
  547.   {:makeau}{inpu fname,Name the ASCII Upload}
  548.            {comp fname}   {ifco icmnd}
  549.            {ifex %dldir\%fname,,makeau}
  550.            {write a}
  551.            {write %fname}
  552.            {write --}     {goto icmnd}
  553.  
  554.   {:makedl}{setv fname}   {setv count,1}
  555.            {inpu fname,Name a File that you want to DownLoad}
  556.            {comp fname}   {ifco icmnd}
  557.            {write d}
  558.   {:dlmore}{write %fname}
  559.            {incr count}   {setv fname}
  560.            {inpu fname,File #%count% to Download?}
  561.            {comp fname}   {ifco ,dlmore}
  562.            {write --}     {goto icmnd}
  563.  
  564.   {:makeul}{inpu fname,Name the file to upload}
  565.            {comp fname}   {ifco icmnd}
  566.            {ifex %dldir\%fname,descul,makeul}
  567.   {:descul}{setv count,1}
  568.            {setv line}
  569.            {inpu line,One line description of %fname% Required}
  570.            {comp line}    {ifco icmnd}
  571.            {write u}      {write %fname}
  572.            {write %line}  {incr count}
  573.   {:mdesc} {setv line}    {inpu line,Line %count% of %fname% description}
  574.            {comp line}    {ifco endul}
  575.            {write %line}  {incr count}
  576.            {goto mdesc}
  577.   {:endul} {write --}     {goto icmnd}
  578.  
  579.     ┌───────────────────────────────────┐
  580. └───┤  End Of "ACTION generator" macro  ├───────
  581.     └───────────────────────────────────┘
  582.  
  583.