home *** CD-ROM | disk | FTP | other *** search
-
- ┌────────────────────────────────┐
- │ Chuck Seyboldt's COMMO Macro │ CS-MAC05
- └────────────────────────────────┘
-
- ! * You !NEED! to edit! lines that have a "!" in the first column.
- ^^^^^^^^^^^^^^^
- * * Lines with a "*" may be deleted.
- * Deleting my comments is a good thing to do, it saves much RAM.
-
- * This is *NOT* a complete control system for {Commo}.
- * CS-MACxx is to be added to your existing COMMO.MAC file.
-
- * Supported by COMMO v.5x: This macro is in use as of 04/05/92 to fetch
- * mail from a variety of sources. The macro text has terse commentary.
- * You will need a file, RENQWK.BAT, in your COMMO home directory, to
- * rename .QWK packets to avert download crashes.
- * An example RENQWK.BAT is later in this file ... ready to snip out.
-
- * Many thanks to Fred Brucker for providing the intelligent, excellent
- * platform that supports this work. COMMO is powerful and fun.
-
- * ASSUMPTIONS *
-
- * Zmodem is assumed for all file transfers in these macros.
- * I assume you are using a registered copy of DSZ.
- * I assume that DSZ is located in your DOS path.
-
- * KEY ASSIGNMENTS *
-
- * The macro contains several features that can be called without
- * being ONLINE or in a mailrun. Here are the key assigments so you
- * may check for conflicts with your existing COMMO.MAC
-
- * ■ Alt-N Multi-number dial with auto-return on NO CARRIER
- * ■ Alt-F Make ACTION FILE for later ONLINE processing
- * ■ ^Home Toggle Capture ON/OFF (names cap file with date)
-
- * Key assignments for THE-REST are in the ASSIGN.KEY file.
-
- * FEATURES *
-
- * - fast
- * - runs unattended
- * - one macro for many BBSs
- * - one session may call several BBSs
- * - works for MarkMail, Qmail, RoseMail, Jimmer, and JetMail
- * (all BBS and mail door prompts be set to EXPERT)
- * - renames .QWK files (RENQWK.BAT included in this file)
- * - deletes .REP files (via registered DSZ -u function)
- * - checks message count from MarkMail doors.
- * Skips mail download if message count is less than 30.
- * > ACTION PROCESSOR macro for file uploads and downloads.
- * - Includes a macro that will prompt you for selections and
- * make the BBS specific "ACTION" lists based on your input.
- * - Keeps a timestamped ACTION history file for each BBS.
-
- * Support *
-
- * - I really enjoy sharing COMMO. Your questions and advice
- * are welcome. You may find me in U'NI's COMMO conference
- * almost daily ... on RIME via Directory Assistance
- * occasionally ... or at NLBBS (1,207 761-4782).
- * - No $ charge for this work. It's full of room to improve.
- * I consider your comments to be ample payment.
-
- ┌───────────────────────┐
- │ Logon & Mail Macros │
- └───────────────────────┘
-
- * :QMA is the central control macro. :QMA first passes control to
- * the :PCB generic logon routine. Then, if an ACTION file exists in
- * the Commo home directory, the :ACTION file processor is called.
-
- * The :ACTION file processor and the (Alt-F) ACTION file generator
- * are located near the end of this macro file.
-
- * File uploads and downloads occur before opening the mail door.
- * If a .REP exists, it is is uploaded. Then the .QWK is downloaded.
- * Be sure to set your mail directory location (same for .QWK & .REP)
-
- ────────────────────────────────────────────────────────────────────────
- {:qma} {setv nodl} {setv count} ;set some working variables
- ! ---> {setv maildir,d:\qwk} ;set to YOUR mail directory
- {capture n} ;turnoff capture if open
- {call pcb} ;call generic logon routine
- {push} ;(push + pops ≈ call)
- {ifexist %_hom%action.%abbr%,action,} ;CALL "ACTION processor"
- {pops}
- {ifexist %maildir\%nodeid.rep,ask,d_l} ;GOTO mailrun routines
- ────────────────────────────────────────────────────────────────────────
-
- * How this macro serves several nodeid (BBSs) ...
-
- * 1. The .FON file has linked macros called "qmn", "qms", "qml",
- * etcetera. You'll see the names a few lines down from here.
-
- * 2. The .MAC file has labels called ":qmn", ":qms", ":qml", etc.
- * The short (:qmn) macro routines set these Commo variables;
-
- * nodeid : the .QWK/.REP filename.
- * abbr : a two character abbreviation for .QWK renaming.
- * dorno : the appropriate "OPEN xxxx" command for the BBS maildoor.
- * dmenu : An optional variable to accomodate two-level entry into
- * the mail door. This command to get to "door menu" prompt.
-
- * 3. The (UNMArk)'s provide a way to dial multiple nodes for one
- * BBS. After connecting with one node, any other marked .FON
- * entries for that BBS are removed from the redial queue.
-
- * 4. The (RETU)'s after the (CALL QMA)'s facilitate multiple
- * calls in one unattended session. There is a hitch though.
- * You must follow these -abcd- instructions,
- ───────────────────────────────────────────────────────────────────
- * A. Open the .FON dialer
- * B. Manually mark BBSs
- * C. Exit dialer
- * D. Use THIS Alt-N command.
- ───────────────────────────────────────────────────────────────────
- {:aln} {dial-c ,} {retu} Multi-dial & Return
- ───────────────────────────────────────────────────────────────────
-
- !{:qmn} {setv nodeid,nlbbs} {setv abbr,nl} {setv dorno,mmail}
- {unmark 2 ■,3 ■} {call qma} {retu}
- !{:qms} {setv nodeid,smuti} {setv abbr,sm} {setv dorno,1}
- {call qma} {retu}
- !{:qml} {setv nodeid,ledge} {setv abbr,le} {setv dorno,mm20}
- {call qma} {retu}
- !{:qmm} {setv nodeid,mepccon} {setv abbr,me} {setv dorno,1}
- {call qma} {retu}
- !{:qmd} {setv nodeid,datawarp} {setv abbr,da} {setv dorno,mm2}
- {call qma} {retu}
- !{:qmi} {setv nodeid,dirasnt} {setv abbr,di} {setv dorno,jimmer}
- {call qma} {retu}
- !{:qmw} {setv nodeid,wolfmoon} {setv abbr,wo} {setv dorno,f}
- {setv dmenu,s} {call qma} {retu}
-
- ┌─────────────────────────────┐
- │ Standard Online Responses │ (part of the Generic Logon Routine)
- └─────────────────────────────┘
-
- * Responses to common logging-on prompts.
- * Put in *YOUR* name. Notice that I have a different response
- * to the "First name?" prompt for the BBS called Directory Assistance.
-
- !{:lof} {comp abbr,di} {ifco lof1} ;If BBS=DIRASNT, send TURBO login
- ! ---> {send Chuck Seyboldt|}{retu} ;otherwise, just send name.
- !{:lof1} {send Chuck Seyboldt %_pas% !main|} {alarm 2} {retu}
-
- !{:lov} {send 2078929168|} {retu} ;Voice Phone Number verification
- !{:lob} {send 042355|} {retu} ;Birthday verification
- !{:loq} {send y q ns|} {retu} ;choose ANSI colors (Y/n)
- {:|} {send |} {retu}
- {:n|} {send n|} {retu}
- {:y|} {send y|} {retu}
- {:0|} {send 0|} {retu}
- {:los} {send } {retu} ;this is how to send "SpaceBar"
- {:loe} {send ~~^[^[} {retu} ;this is sending two "Esc" presses
- {:pas|} {send %_pas|} {retu} ;this sends your password
-
- ┌─────────────────────────┐
- │ Generic Logon Routine │
- └─────────────────────────┘
-
- * This is a stand-alone logon macro for times you DON'T want to
- * make a mail run. It is designed to get you quickest to the
- * "Main BBS Command?" prompt.
-
- * This works for PCBoards, for the RRBS run by Jim Goodenough,
- * Directory Assistance (1,707 538-8710), for Shad Muegge's
- * BABBLE BBS (1,707 538-1507), for Mark Turner's ESCape running
- * GAP software (1,714 698-9568), for Mike Martell's Wolf's Moon
- * running Spitfire (1,207 772-9093), and possibly for Wildcat!
- * Always adding more prompts to accomodate more BBS types.
- * In general, turn any BBS HOTKEY option to OFF.
-
- {:pcb} {setlook 60,bye,10,|}
- ! {exec-N d:} ;(option) set to your drive letter
- {push} ;push + pops ≈ call
- {golook n|,A>?} ;just say 'no' RBBS prompt
- {golook n|,change?} ;PCBoard "Language" prompt
- {golook loq,er)=no?} ;PCBoard "Graphics" prompt
- {golook loq,= yes :} ;GAP "Graphics" prompt
- {golook y|,? [y/N]} ;Spitfire "Graphics" prompt
- {golook loe, twice} ;send Escape twice (Front End)
- {golook lof,st name} ;send name (PCBoard, RBBS, GAP)
- {golook lof,r name:} ;send name (Spitfire)
- {golook lof,al name} ;send name (Babble)
- {golook y|,orrect?} ;send 'y' when caller ID is asked
- {golook onl,ommand?} ;Logged on via "quick" RBBS logon
- {lookfor Password} ;Logon macro now has two "lookfors"
- {pops} ; Why? To accomodate more golooks.
- {send %_pas|} ;send password
- {push}
- {setlook 60,bye,10,n|} ;Start of "Logon, Part II"
- {golook lov,CE ph} ;Wildcat Phone Number verify
- {golook lob,?????} ;Wildcat Birthdate verify
- {golook |,ause-} ;Wildcat -pause- prompt
- {golook |,TER >} ;Spitfire "more" and BLT bypass
- {golook pas|,Wrong} ;resend password if necessary
- {golook n|,More?} ;just say 'no' to "More?"
- {golook n|,inue?} ;just say 'no' to "Continue?"
- {golook n|,=yes?} ;just say 'no' to "mail scan"
- {golook n|,N)?} ;just say 'no' RBBS prompt
- {golool los,y key} ;pass by "any key" prompt (GAP)
- {golook los,(SPACE)} ;send spacebar (Babble)
- {golook onl,mand:} ;Babble Logon Complete
- {golook onl,and :} ;GAP Logon Complete
- {golook onl,N MENU -} ;Spitfire Logon Complete
- {golook onl,IN MENU:} ;Wildcat Logon Complete
- {lookfor Command?} ;PCBoard Logon Complete
- {:onl} {pops} {retu} ;All set. Logged-ON.
-
- ────────────────────────────────────────────────────────────────────────
-
- ┌─────────────────────────┐
- │ MailRun Routine Start │
- └─────────────────────────┘
-
- * Already checked for a .REP file. If a REP exists, you are offered
- * the option to only upload those replies. But, the default action
- * is to get a QWK. This way, unattended sessions fetch a .QWK
-
- {:ask} {alarm 1} {pause 1}
- {display ,,,^j^j}
- {display ,18,1E,▌ (C)ontinue mail d/l NOW ■ 'S' to skip d/l ▐}
- {display ,,,^m}
- {setlook 15,d_l,,} ;using Commo for timed branch
- {golook d_l,c} ;15 second delay, default=d/l
- {golook n_u,s}
- {lookfor 15 sec delay to d/l} ;Will not be seen from COMport
- {goto d_l}
- {:n_u} {setv nodl,y} ;set variable to skip d/l try
-
- ┌───────────────────────────────┐
- │ Get to the Mail Door Prompt │
- └───────────────────────────────┘
-
- {:d_l} {pause 2} ;clear any user response
- {comp dmenu}
- {ifco pdl} ;check for two-level trigger
- {send ^h~~~%dmenu%|} ;if req'd, go to Door Menu
- {setv dmenu} ;reset two-level trigger
- {lookfor oor menu -}
- {send ~~~~%dorno%~|} {goto sdl} ;skip over one-level "OPEN"
- {:pdl} {send ^hopen %dorno%|}
- {:sdl} {setlook 60,bye,30,y|}
- {push}
- {golook |,inue>} ;for Jimmer Startup
- {golook |,inue:} ;for JetMail Startup
- {golook y|,inue...} ;for QM4 prompt
- {golook qul,) Command?} ;for Qmail doors
- {golook qul,or menu>: } ;for Jimmer
- {lookfor Mail Command} ;for MarkMail/RoseMail/JetMail
-
- ┌─────────────────┐
- │ Upload a .REP │
- └─────────────────┘
-
- * If a .REP exists, it is sent before any attempt is made to download.
- * This uses DSZ's -u option to erase the .REP after a successful upload.
- * Hence one reason to register your copy of DSZ <g>.
-
- {:qul} {pops}
- {ifexist %maildir\%nodeid.rep,,nup}
- {send ~~u|}
- {setlook 30,bye,,}
- {lookfor ^xB01}
- {exec-n dsz port %_por ha bo sz -mu %maildir\%nodeid.rep}
- {setlook 60,bye,15,|}
- {push}
- {golook y|,inue...} ;for QM4 prompt
- {golook nup,) Command?} ;for Qmail doors
- {golook nup,or menu>: } ;for Jimmer
- {lookfor Mail Command} ;for MarkMail/RoseMail/JetMail
-
- ┌───────────────────┐
- │ Download a .QWK │
- └───────────────────┘
-
- * The ":nup" section would be skipped if you decided to skip .QWK
- * downloading in the "Mailrun Routine Start, :ask" section.
-
- {:nup} {pops}
- {comp nodl,y} {ifcond byz,} ;Skip d/l if %nodl=y
- {send ~~d~|} ;Otherwise, scan messages
- {setlook 300,bye,90,y|}
- {golook ndl,was found!}
- {golook ndl,No Messages}
- {golook ndl,no new mess} ;RoseMail empty packet
- {golook qdl,se messages} ;QM4 prompt
- {golook qdl,transfer...} ;Jimmer Mail prompt
- {golook qdl,bytes using}
- {golook qdl,When Done?} ;MM2 prompt | mutually
- {golook mmr,tal Messages: } ;MM2 message count | exclusive
- {lookfor this packet (} ;QM2 or RoseMail prompt
- {goto qdl}
-
- ┌───────────────────────────┐
- │ Count MarkMail Messages │
- └───────────────────────────┘
-
- * This section will skip the RENQWK and any attempt to download if
- * MarkMail scans less than 30 messages for your .QWK packet.
-
- {:mmr} {setg ,,l,^m}
- {gets count,15} ;get message count (w/ANSI)
- {subs count,-4,4,%count} ;take last 4 characters
- {lookfor When Done?}
- {comp count,30} ;if less than 30 messages,
- {ifcond-L ndl} ;then skip download
-
- ┌────────────────────────────────┐
- │ .QWK rename and DSZ Download │
- └────────────────────────────────┘
-
- * Renaming is much faster with one call to a batch file than several
- * COMMO calls to command.com. Passing these variables from COMMO.MAC
- * to renqwk.bat. %1 = %maildir : %2 = %nodeid : %3 = %abbr
-
- ┌───────────────── renqwk.bat ─┐ <-- cut here --
- │ @echo off │
- │ ctty nul │
- │ │
- │ del %1\%3__5.qwk │
- │ ren %1\%3__4.qwk %3__5.qwk │
- │ ren %1\%3__3.qwk %3__4.qwk │
- │ ren %1\%3__2.qwk %3__3.qwk │
- │ ren %1\%3__1.qwk %3__2.qwk │
- │ ren %1\%2.qwk %3__1.qwk │
- │ │
- │ ctty con │
- └────────────────────────────────┘ <-- cut here --
-
- {:qdl} {ifex %maildir\%nodeid.qwk,,gonow} ;check for .QWK before rename
- {exec-n %_hom%renqwk %maildir %nodeid %abbr} ;.QWKfile rename
- {:gonow}{send ~~y|}
- {lookfor ^xB00}
- {exec-N dsz port %_por ha bo rz -mr %maildir}
- {:ndl} {setlook 30,bye,5,n|}
- {push}
- {golook y|,inue...} ;for QM4 "continue" prompt
- {golook byz,) Command?} ;for Qmail Doors
- {golook byz,or menu>: } ;for Jimmer
- {lookfor Mail Command} ;for MarkMail/RoseMail/JetMail
-
- ┌──────────────────────┐
- │ LogOFF or Stay on? │
- └──────────────────────┘
-
- * Again a choice. Default is to end the connection, but you may
- * stay ONLINE if you wish. The macro is setup to open a capture
- * file if you choose to stay online.
-
- {:byz} {pops}
- {paus 1}{alarm 1} {parm ,,,,0}
- {display ,,,^j^j}
- {display ,18,1E,▌ 'G' to LogOFF NOW ■ SpaceBar to stay ON ▐}
- {display ,,,^m}
- {setlook 10,bye,,} ;using Commo for timed branch
- {golook bye,g} ;10 second delay, default=bye
- {golook sta, }
- {lookfor 10 sec delay to Auto-LogOFF}
- {:sta} {clear} {send ^h|}
- {call chm} {} ;chm opens capture file
- {:bye} {send ^hg|} ;^h to clear user response
- {setlook 10,,,}
- {lookfor NO CARRIER^m^j} ;comes from modem
- {:bya} {hangup y}
- {setv lastcall,%nodeid} ;save lastcall info
- {setv nodeid} {setv abbr}
- {setv dorno} {setv nodl} {retu} ;and recycle your variables.
-
- ┌───────────────────────┐
- │ Toggle CAPTURE mode │
- └───────────────────────┘
-
- * This routine is setup with a directory called SAV located in the
- * Commo home directory (i.e., d:\commo\sav) In addition to serving
- * a useful function here, Ctrl-Home will toggle capture ON/OFF.
-
- {:chm} {comp capture,on} {ifco cof}
- {setv capture,on}
- ! {setv savedir,%_hom%sav}
- {capture y,%savedir\%_mon%%_day%.cap}
- {exec-n echo OPENED ■ %_dat %_tim^j>> %_cap} {return}
- {:cof} {setv capture} {capture n}
- {exec-n echo CLOSED ■ %_dat %_tim^j■-■-■>> %_cap}
- {return}
-
- ┌──────────────────────────────┐
- └───┤ End Of Mail fetchin' macro ├───────
- └──────────────────────────────┘
-
- ┌──────────────────────────────────┐
- ┌───┤ COMMO "ACTION processor" macro ├───
- └──────────────────────────────────┘
-
- * This section reads simple ASCII files and sends commands and
- * strings to the BBS based on the ACTION file. Setup for PCBoards.
-
- * You may make an ACTION file manually with a text editor.
- * An ACTION file generator is included later as the :alf macro command.
- * Located in the COMMO home dir, the ACTION file has this sort of format:
-
- ┌─────────────────────────────── action.nl ─┐
- │ u │ < "U" for upload
- │ filename.ul │ < Name the file to u/l
- │ A line of file desription. Up to 45 chars │ < decription
- │ in length. Multiple line descriptions are │
- │ supported if your BBS host allows them. │
- │ -- │ < "--" to end ACTION item
- │ d │ < "D" for download
- │ file1.dl │ < batch downloads allowed
- │ another.zip │
- │ filemore.lhz │
- │ -- │ < "--" is important
- │ u │
- │ another.zip │
- │ /Private to the sysop. Thanks for the fish │
- │ -- │ < Esp. at the very end.
- └─────────────────────────────────────────────┘
-
- {:action}{rope %_hom%action.%abbr,act-end} <- START here
- {:reread}{setlook 60,,10,|}
- {read cmd} ;read line of ACTION file
- {comp cmd,--} {ifco reread} ;branch to appropriate ACTION
- {comp cmd,a} {ifco asciup}
- {comp cmd,j} {ifco joincn}
- {comp cmd,d} {ifco dlfile}
- {comp cmd,u} {ifco ulfile} ;if no match, end ACTION
-
- {:act-end} ;When at end of ACTION list
- {exec-n echo ^j*-*-* %_dat %_tim >> %_hom%used-act.%abbr}
- {exec-n type %_hom%action.%abbr >> %_hom%used-act.%abbr}
- {exec-n del %_hom%action.%abbr}
- {setv line} {setv fname} {setv cmd}
- {retu} <- END here
-
- {:dlfile}{send d|} ;Setup is for Zmodem BATCH downloads
- {golo skip,not avai} ;If host doesn't allow d/l, skip it
- {:next-d}{read fname} ;Read one complete line into %fname%
- {comp fname,--} {ifco do-dl}
- {ifex %dldir\%fname,next-d} ;Don't try to d/l files that exist
- {send %fname%~~~|} ;Send filename to BBS
- {goto next-d} ;Repeat read til dl-list is all read
- {:do-dl} {send |~~|} ;Start download
- {look ^xB00}
- {exec-n dsz ha bo rz -mr %dldir}
- {lookfor Command?}
- {goto reread} ;end of "D" ACTION processor
-
- {:ulfile}{read fname} ;Upload ACTION starts
- {ifex %uldir\%fname,,skip} ;Make sure file exists on your disk
- {send u %fname% z|} ;Tell host to get ready for u/l
- {golo skip,not avai} ;If host doesn't allow u/l, or
- {golo skip,y exists} ;If host says file already exists,
- {golo skip,plicates} ; skip this u/l action item.
- {lookfor ximum)} ;Host is ready for description.
- {:desc} {read line}
- {comp line,--} ;Check for end of u/l action
- {ifco ul_ok}
- {send ~%line%|} ;Send description line
- {goto desc} ;and look for more description
- {:ul_ok}{send ~|}
- {lookfor ^xB01} ;Zmodem upload
- {exec-n dsz ha bo sz -m %uldir\%fname}
- {setlook 60,,30,|} ;Allow time for file validation
- {lookfor Command?}
- {goto reread} ;end of "U" ACTION processor
-
- {:skip} {read line} ;SKIP section jumps to next
- {comp line,--} ; action item by reading to
- {ifco ,skip} ; the next "--" string.
- {send |}
- {setlook 50,,3,|}
- {lookfor Command?}
- {goto reread} ;alternate end of "U" processor
-
- * ASCII uploads take a special form. Here is an example message.
- * You may need to structure ASCII upload messages differently.
-
- ┌────────────────────────────────── hijack ──┐
- │ jack kilday │ < Message Recipient
- │ Thanks for the Fish │ < Message Subject
- │ n │ < Public/Private msg flag
- │ u │ < Use ASCII u/l, not editor
- │ Hi Jack, │
- │ │
- │ Just stopping in with a test of a COMMO │
- │ ACTION macro processor. I also wanted to │
- │ give you a big THANK YOU for all the fish. │
- │ They were delicious. │
- │ │
- │ Chuck·S │
- └─────────────────────────────────────────────┘
-
- {:asciup}{read fname} ;ASCII upload to PCBoard system
- {ifex %dldir\%fname%,,reread}
- {parm ,,,,2} {send e|} ;Send "E" to start message entry
- {asciiup %dldir\%fname%,} ;Send the structured message
- {parm ,,,,0} {send ~~|~~~sn|} ;the PCBoard "save" command
- {lookfor Command?}
- {goto reread} ;end of "A" processor
-
- {:joincn}{read fname} ;Join PCBoard Conference
- {send j %fname|}
- {push}
- {golook n|,)=yes?} ;Skip mail scan
- {golook |,invalid} ;If you choose invalid conf
- {golook n|,(H)elp} ;If you chose invalid conf
- {golook 0|,none?} ;To conf 0 on invalid conf
- {lookfor Command?} {pops}
- {goto reread} ;end of "J" processor
-
- ┌───────────────────────────────────┐
- └───┤ End Of "ACTION processor" macro ├───────
- └───────────────────────────────────┘
- ┌─────────────────────────────┐
- ┌───┤ "ACTION generator" macro ├───
- └─────────────────────────────┘
-
- * This macro isn't commented. It is pretty easy to follow.
- * Here it is assigned to the Alt-F key combination.
-
- {:alf} {inpu abbr,Make ^(ACTION^) file: What BBS?} <- START Here
- {comp abbr} {ifco opena}
- {subst abbr,1,2,%abbr}
- {:opena} {wope %_hom%action.%abbr}
-
- {:icmnd} {setv cmd} {setv fname} {setv line}
- {inpu cmd,^(U^)pload, ^(D^)ownload, ^(A^)scii Upload, ^(J^)oin Conf?}
- {comp cmd,u} {ifco makeul}
- {comp cmd,d} {ifco makedl}
- {comp cmd,a} {ifco makeau}
- {comp cmd,j} {ifco makejn}
- {comp cmd} {ifco ,icmnd}
- {wclo} {edit %_hom%action.%abbr}
- {setv cmd} {setv fname} {setv line} {} <- END Here
-
- {:makejn}{inpu fname,Name or Number of Conference to Join}
- {comp fname} {ifco icmnd}
- {write j}
- {write %fname}
- {write --} {goto icmnd}
-
- {:makeau}{inpu fname,Name the ASCII Upload}
- {comp fname} {ifco icmnd}
- {ifex %dldir\%fname,,makeau}
- {write a}
- {write %fname}
- {write --} {goto icmnd}
-
- {:makedl}{setv fname} {setv count,1}
- {inpu fname,Name a File that you want to DownLoad}
- {comp fname} {ifco icmnd}
- {write d}
- {:dlmore}{write %fname}
- {incr count} {setv fname}
- {inpu fname,File #%count% to Download?}
- {comp fname} {ifco ,dlmore}
- {write --} {goto icmnd}
-
- {:makeul}{inpu fname,Name the file to upload}
- {comp fname} {ifco icmnd}
- {ifex %dldir\%fname,descul,makeul}
- {:descul}{setv count,1}
- {setv line}
- {inpu line,One line description of %fname% Required}
- {comp line} {ifco icmnd}
- {write u} {write %fname}
- {write %line} {incr count}
- {:mdesc} {setv line} {inpu line,Line %count% of %fname% description}
- {comp line} {ifco endul}
- {write %line} {incr count}
- {goto mdesc}
- {:endul} {write --} {goto icmnd}
-
- ┌───────────────────────────────────┐
- └───┤ End Of "ACTION generator" macro ├───────
- └───────────────────────────────────┘
-
-