home *** CD-ROM | disk | FTP | other *** search
/ CBM Funet Archive / cbm-funet-archive-2003.iso / cpm / archivers / lt31.pma / LT31.MAC < prev    next >
Text File  |  1979-12-31  |  56KB  |  2,007 lines

  1. TITLElt31 tYPES/eXTRACTS/uNCRUNCH/usq/unlzh lbr/fILES (15 dEC 1991)
  2.  
  3. ;
  4.  
  5. VEREQU31;cURRENT VERSION NUMBER
  6.  
  7. ;
  8.  
  9. ; lt TYPES NORMAL, LZH-ENCODED, CRUNCHED OR SQUEEZED FILES, EITHER DIRECTLY
  10.  
  11. ; OR FROM .lbr MEMBERS.  wILD CARDS ACCESS A SERIES OF LIBRARY MEMBERS.
  12.  
  13. ;
  14.  
  15. ; rECOMMENDED aSSEMBLER/lINKER - slrmac AND slrnkp.  oTHERS WILL WORK,
  16.  
  17. ; BUT NORMALLY REQUIRE A TWO PASS LINK OPERATION AND FILE TRUNCATION
  18.  
  19. ; TO AVOID GENERATING USELESS UNINITIALIZED DATA SPACE IN THE CODE FILE.
  20.  
  21. ;
  22.  
  23. ;slrmac ltXX/r
  24.  
  25. ;slrnkp ltXX/n,/a:100,/j,ltXX,unlzh,unc,/e
  26.  
  27. ;
  28.  
  29. ; fOR OTHER LINKERS SEE THE DOCUMENTATION IN buffers.  tO CHECK YOUR
  30.  
  31. ; METHODS FIRST ASSEMBLE AND LINK THIS RELEASE AND COMPARE THE OBJECT
  32.  
  33. ; FILES.  iF THEY ARE DIFFERENT YOU DO NOT HAVE THE FULL TECHNIQUE.
  34.  
  35. ;
  36.  
  37. ;---------------------------------------------------------------------
  38.  
  39. ;     UPDATES
  40.  
  41. ;
  42.  
  43. ; 15 dEC 91 mODIFIED AS FOLLOWS TO ENABLE ASSEMBLY WITH ANCIENT (ABOUT 1979)
  44.  
  45. ;   V31     VERSION OF m80 BY CHANGING THE NAMES OF THE FOLLOWING SYMBOLS WHICH
  46.  
  47. ;    EXCEEDED 6 CHARACTERS.  (tHIS WILL NOT EFFECT ASSEMBLY WITH ANY
  48.  
  49. ;    OTHER ASSEMBLER.)
  50.  
  51. ;    old label  new label   old label  new label   old label  new label
  52.  
  53. ;    SETNAM2    SETNM2   SETFLD1    SETFD1  SETFLD2    SETFD2
  54.  
  55. ;    SETFLD3    SETFD3   SETFLD4    SETFD4  SETFLD5    SETFD5
  56.  
  57. ;    aLSO MODIFIED ROUTINE LABELLED START: TO FIX A BUG DATING FROM V25
  58.  
  59. ;    THAT PREVENTED lt FROM ACCEPTING user SPECIFICATIONS AS A source
  60.  
  61. ;    OF DATA.  (mANY THANKS TO rOGER wARREN, sYSOP, eLEPHANT'S gRAVEYARD
  62.  
  63. ;    sAN dIEGO, cALIFORNIA FOR THE SUGGESTIONS FOR FIXING THIS PROBLEM.)
  64.  
  65. ;     mODIFIED BY bRIAN mURPHY (bcm)
  66.  
  67. ;     vANCOUVER kAYPRO uSERS gROUP
  68.  
  69. ;     rICHMOND, bRITISH cOLUMBIA, cANADA
  70.  
  71. ;     bbs PHONE:  (604) 271-5934
  72.  
  73. ;
  74.  
  75. ; 17 jUL 91 iNCORPORATED VERSION 2.0 OF lzh ENCODING.  tHIS PROGRAM IS
  76.  
  77. ;   V30     NECESSARY TO DECODE FILES ENCODED WITH VERSION 2.0 OF lzh
  78.  
  79. ;    COMPRESSION, BUT WILL automatically HANDLE FILES ENCODED WITH
  80.  
  81. ;    VERSION 1.X lzh ENCODING. aDDED APPROPRIATE DOCUMENTATION CHANGES.
  82.  
  83. ;    aDDED INSTRUCTION TO RESET msb IN OUTPUT fcbS.
  84.  
  85. ;    cORRECTED ERROR MESSAGE POINTER FOR unc & unl ERRORS
  86.  
  87. ;    (SENT GARBAGE TO SCREEN).
  88.  
  89. ;-r wARREN
  90.  
  91. ; sYSOP, eLEPHANT'S gRAVEYARD
  92.  
  93. ; sAN dIEGO, ca (619)270-3148
  94.  
  95. ;
  96.  
  97. ; 02 sEP 89 aDDED ABILITY TO HANDLE lzh-ENCODED FILES (EXTENSIONS
  98.  
  99. ;   V29     OF THE FORM .?y?).aDDED APPROPRIATE DOCS. nO FUNCTIONAL
  100.  
  101. ;    CHANGES TO THE PROGRAM, OTHERWISE.
  102.  
  103. ;-r wARREN
  104.  
  105. ; sYSOP, eLEPHANT'S gRAVEYARD
  106.  
  107. ; sAN dIEGO, ca (619)270-3148
  108.  
  109. ;
  110.  
  111. ;
  112.  
  113. ;**** diatribe****
  114.  
  115. ; 18 mAY 88 rEFORMATTED AGAIN, AND REPAIRED.  iF mR hOFF WISHES TO
  116.  
  117. ;   V28     TO REFORMAT THIS SOURCE i WISH HE WOULD RETAIN SUCH FOR
  118.  
  119. ;    HIS OWN BENEFIT, AND NOT FOUL THE DISTRIBUTED VERSION.
  120.  
  121. ;    hE INGENIOUSLY MAKES IT VIRTUALLY IMPOSSIBLE TO DETECT THE
  122.  
  123. ;    CHANGES MADE USING A TEXT COMPARATOR.  iF THIS REQUEST IS
  124.  
  125. ;    A PROBLEM TO HIM HE IS WELCOME TO CALL ME AT THE NUMBER 
  126.  
  127. ;    BELOW.  v27 HAD TOTALLY LOST ANY INDICATION OF WHAT FILE
  128.  
  129. ;    WAS BEING TYPED, AND WITHOUT A CONVENIENT COMPARISON i
  130.  
  131. ;    HAD TO RESTORE FROM v25.  tHUS v26 CHANGES HAVE BEEN LOST.
  132.  
  133. ;    AND i DO NOT KNOW WHETHER v26 OR v27 WAS THE PROBLEM.
  134.  
  135. ;    i ALSO REQUEST THAT mR. hOFF REFRAIN FROM REMOVING MY
  136.  
  137. ;    COMMENTS IN THE FUTURE (i HAVE RESTORED MY COMMENTS TO
  138.  
  139. ;    VERSION 25 BELOW).wILL ALL MODIFIERS KINDLY REFRAIN FROM
  140.  
  141. ;    ALTERING THE FILE DATES OF MODULES THAT HAVE NOT CHANGED.
  142.  
  143. ;    fOR EXAMPLE, unc.rel AND unc.slr ARE STILL THE '86 VERSIONS.
  144.  
  145. ;    lbr DISTRIBUTIONS CAN USE lsetdate, AND arcS ARE AUTOMATIC.
  146.  
  147. ;    tHE GAIN FROM A LARGE VALUE OF rec IS MINISCULE AND PREVENTS
  148.  
  149. ;    USE ON SYSTEMS WITH LIMITED MEMORY.  v28 DOES NOT PRODUCE
  150.  
  151. ;    EXTRA LINES BETWEEN EXTRACTIONS TO FILE NOW, AND THIS WAS
  152.  
  153. ;    DONE WITH LESS, NOT MORE, CODE.
  154.  
  155. ;
  156.  
  157. ;    things TO BE DONE: iNCORPORATE CHECKSUM TESTING OF RESULTS;
  158.  
  159. ;SLAVE zcpr LINKAGES TO z3env IF ON zcpr SYSTEM (SIGNAL
  160.  
  161. ;IS NON-ZERO ENVIRONMENT POINTER).  i HOPE TO HAVE A
  162.  
  163. ;dos+/ccp+ VERSION THAT RESPECTS THE env FOR WHEEL/USER
  164.  
  165. ;LEVELS SOME TIME.
  166.  
  167. ;
  168.  
  169. ;    iF i AM MISTAKEN AS TO THE CULPRIT, i APOLOGIZE FOR THE
  170.  
  171. ;    VENTED SPLEEN.- c.b. fALCONER
  172.  
  173. ;
  174.  
  175. ; 05/11/88  rEWROTE DISPLAY SECTION WHEN  EXTRACTING FILES TO DISK.  wAS
  176.  
  177. ;   V27     TRIPLE SPACING WITH NO TABULATION. wAS UNSIGHTLY IF LIBRARY
  178.  
  179. ;    HAD MORE THAN 1-2 FILES.  (sTILL UNDER 5K.)  iF tpa IS UNDER
  180.  
  181. ;    48K, MIGHT NEED TO CHANGE  "rec"  FROM 128 TO 96 OR EVEN 64.
  182.  
  183. ;- iRV hOFF, sYSOP
  184.  
  185. ;  pracsa sYSOP rcpm
  186.  
  187. ;
  188.  
  189. ; 04/15/88  wHEN TYPING A CRUNCHED FILE  WITH A COMMENT ATTACHED, IT WAS
  190.  
  191. ;   V26     RUNNING OFF THE END OF THE SCREEN, TO DISPLAY THE UNCRUNCHED
  192.  
  193. ;    FILE NAME WITH COMMENT.- eD mINTON
  194.  
  195. ;  cOLUMBUS, oh
  196.  
  197. ;
  198.  
  199. ; 10 aPR 88 rEFORMATTED TO MY ORIGINAL SYSTEM, WHICH SHOWS THE ACTION
  200.  
  201. ;  V25    OF CONDITIONALS CLEARLY.  sOMEONE HAD REFORMATTED THE
  202.  
  203. ;    ENTIRE SOURCE, AND i SUSPECT THE PROMULGATOR OF A CERTAIN
  204.  
  205. ;    REFORMATTING PROGRAM.  tHERE IS NO NEED TO KEEP CONDITIONALS
  206.  
  207. ;    UN-NESTED, SINCE LINKING REQUIRES A REASONABLE ASSEMBLER
  208.  
  209. ;    (NOT asm) ANYHOW.  aDDED .ovr TYPE PROHIBITION.
  210.  
  211. ;    wHEEL CONTROL IS NOW UNIFIED, WITH A SINGLE PATCH POINT.
  212.  
  213. ;    nOW ORGANIZED SO THAT ALL OPTIONS ARE PATCHABLE - sET MAXUSR
  214.  
  215. ;    TO 0FFH TO USE THE zcpr MXUSR VALUE.  pAUSECHECK ON EVERY
  216.  
  217. ;    CHARACTER IS NOW AN OPTION (USEFUL FOR bRAILLE).  tHE 
  218.  
  219. ;    CONDITIONALS SHOULD BE USED ONLY WHERE A SMALLER OBJECT
  220.  
  221. ;    FILE IS REQUIRED FOR SOME REASON, NOT FOR CONFIGURATION.
  222.  
  223. ;    sPACE HAS BEEN RESERVED FOR zcpr ADDICTS (ENVIRONMENT).
  224.  
  225. ;**  patch points have changed (FOR THE LAST TIME??!!).
  226.  
  227. ;    i HAVE ALSO RESTORED SOME OF THE "REGS AFFECTED" COMMENTS
  228.  
  229. ;    WHICH HAD BEEN REMOVED.  pLEASE UPDATE AND MAINTAIN THEM,
  230.  
  231. ;    THEY GREATLY EASE FUTURE MODIFICATIONS.
  232.  
  233. ;    i HAVE ATTACHED A SLIGHTLY LATER VERSION OF unc, FUNCTIONALLY
  234.  
  235. ;    IDENTICAL, BUT 5 BYTES SHORTER.
  236.  
  237. ;    i AM GLAD TO SEE MANY PEOPLE ACTIVELY ENHANCING THIS.  wHEN
  238.  
  239. ;    ORIGINALLY RELEASED i DID NOT EXPECT IT TO ATTAIN SUCH
  240.  
  241. ;    POPULARITY.  tOO BAD IT GREW OVER 4K.  nOW SHOULD ADD THE
  242.  
  243. ;    CHECKSUM TESTS.
  244.  
  245. ;- c.b. fALCONER (203) 281-1438
  246.  
  247. ;
  248.  
  249. ; 02/18/88  fIXED BUG IN parse4 ROUTINE. iF NO user area SPECIFIED FOR
  250.  
  251. ;   V24     DISK OUTPUT THEN IT DEFAULTED TO INPUT FILE USER AREA RATHER
  252.  
  253. ;    THAN THE current USER AREA. mODIFIED TO ALLOW ABORT DURING
  254.  
  255. ;    DISK OUTPUT. aDDED $u COMMAND LINE OPTION TO ALLOW DISK
  256.  
  257. ;    OUTPUT OF SQUEEZED/CRUNCHED FILES without UNSQUEEZE/UNCRUNCH.
  258.  
  259. ;    (SEE THE nouqz BYTE ADDED TO THE PATCH AREA AT 103h).
  260.  
  261. ;    aDDED rec EQUATE TO ALLOW MORE THAN ONE SECTOR IN THE FILE
  262.  
  263. ;    OUTPUT BUFFER TO REDUCE WEAR AND TEAR ON FLOPPY DRIVES.
  264.  
  265. ;- tOM hEAD
  266.  
  267. ;
  268.  
  269. ; 08/12/87  fIXED TO PROPERLY HANDLE 0-LENGTH FILES.  mODIFIED TO
  270.  
  271. ;   V23     CHECK FOR PAUSE AND ABORT FROM CONSOLE AFTER EVERY TYPED
  272.  
  273. ;    CHARACTER RATHER THAN AT THE END OF EACH LINE.  tHIS WAS
  274.  
  275. ;    NECESSARY TO PREVENT LOSS OF DATA ON SOME VERY SLOW
  276.  
  277. ;    TERMINALS SUCH AS THE ONE i USE, AND TO ENABLE THE TYPING
  278.  
  279. ;    OF A FILE WITH NO LINEFEEDS TO BE ABORTED.aLSO FIXED THE
  280.  
  281. ;    TAB EXPANSION ROUTINE TO WORK CORRECTLY WITH FILES CON-
  282.  
  283. ;    TAINING UNUSUAL CONTROL CHARACTERS SUCH AS BACKSPACE, AND
  284.  
  285. ;    MADE THE "TURN UP ONE LINE" FEATURE MORE FOOLPROOF.
  286.  
  287. ;- hOWARD gOLDSTEIN
  288.  
  289. ;
  290.  
  291. ; 07/30/87  aDDED THE LONG NEEDED zcpr/zcmd SUPPORT OF MAXIMUM USER
  292.  
  293. ;   V22     AREA.  wHEN THE uzcpr OPTION IS SET, THE PAGE 0 VALUE
  294.  
  295. ;    WILL BE EXAMINED TO DETERMINE IF THE REQUESTED USER AREA
  296.  
  297. ;    IS WITHIN THE ALLOWABLE RANGE.  tHIS IS PRIMARILY USEFUL
  298.  
  299. ;    ON rcp/m'S (BUT i SUSPECT THAT IS WHERE lt IS PRIMARILY
  300.  
  301. ;    USED).  aDDED CODE TO ALLOW OVERRIDING THE LINE COUNTER
  302.  
  303. ;    AND USER AREA RESTRICTIONS WHEN THE WHEEL IS ACTIVE.
  304.  
  305. ;- gARY iNMAN, sYSOP
  306.  
  307. ;  wEST lOS aNGELES rcp/m
  308.  
  309. ;
  310.  
  311. ; 07/21/87  wHEN AT A [MORE] PAUSE, THE SPACE BAR NOW TURNS UP ONE
  312.  
  313. ;   V21     LINE AT A TIME.  ltXX IS OFTEN USED ON rcpm SYSTEMS AS
  314.  
  315. ;    THEIR GENERAL PURPOSE type.com PROGRAM.  tHIS MAKES IT
  316.  
  317. ;    COMPATIBLE WITH unarc16.  tHESE TWO  PROGRAMS ARE USED
  318.  
  319. ;    IN THE POPULAR lux PROGRAM TO TYPE ascii FILES IN arc,
  320.  
  321. ;    ark OR lbr FILES.  i HAVE ALWAYS LIKED THIS FEATURE IN
  322.  
  323. ;    unarc16 AND DECIDED TO ADD IT TO lt20.  i BELIEVE MOST
  324.  
  325. ;    USERS WILL FIND THIS QUITE USEFUL AND HOPE cb fALCONER
  326.  
  327. ;    DOES NOT MIND MY ADDING THIS FEATURE.  tHIS VERSION IS
  328.  
  329. ;    A LITTLE OVER 4K.  iF THIS MAKES ANY PROBLEM, JUST USE
  330.  
  331. ;    AN EARLIER VERSION. - iRV hOFF, sYSOP
  332.  
  333. ;  pracsa rcpm
  334.  
  335. ;
  336.  
  337. ; 07/17/87  aBLE TO USE WHEEL BYTE IN CONJUNCTION WITH outflg FLAG.
  338.  
  339. ;   V20     oNE BYTE ADDED IN DDT MODIFIABLE AREA AT PROGRAM START.
  340.  
  341. ;    whlflg AND/OR wheel NOW TESTED IN CONJUNCTION WITH THE
  342.  
  343. ;    outflg FLAG ELIMINATING NEED FOR TWO COPIES OF PROGRAM
  344.  
  345. ;    WHEN USED ON A REMOTE SYSTEM.  fOUND THAT IT WOULD NOT
  346.  
  347. ;    ASSEMBLE PROPERLY USING m80/l80 BECAUSE OF yes/no, NOW
  348.  
  349. ;    CORRECTED.rESTORED PROGRAM NAME, VERSION NUMBER, AND
  350.  
  351. ;    AUTHOR CREDIT. oTHER MINOR MODS TO KEEP CODE SIZE <4K.
  352.  
  353. ;- g.f. rEDING [72436,45]
  354.  
  355. ;
  356.  
  357. ; 06/10/87  cHANGE TO ONLY DISPLAY CHARACTERS BETWEEN "[" AND "]" IN
  358.  
  359. ;   V19     THE HEADER OF CRUNCHED FILES AS OTHER CHARACTERS IN THIS
  360.  
  361. ;    AREA ARE RESERVED.rEMOVED THE REDUNDANT "if not uncr"
  362.  
  363. ;    (MARKED ";;;;") FOLLOWING AN "else" WHICH PREVENTED lt18
  364.  
  365. ;    FROM BEING ASSEMBLED IN ITS DISTRIBUTED FORM. sLIGHT TEXT
  366.  
  367. ;    CHANGES TO KEEP <4K.- sTEVEN gREENBERG
  368.  
  369. ;
  370.  
  371. ; 12/28/86  aLLOWS ACCESS TO .lbr FILES > 512K.  wAS USING cpm 1.4
  372.  
  373. ;   V18     VARIETY OF DIRECT ACCESS.  mODS TO KEEP UNDER 4K TOTAL.
  374.  
  375. ;    sHOULD cp/m V1.4 CHECK AND REFUSAL.
  376.  
  377. ;- c.b. fALCONER
  378.  
  379. ;
  380.  
  381. ; 12/13/86  pREVENT JUNK FILE NAMES ON "lt FN.T D:" WHERE FN.T IS NOT
  382.  
  383. ;   V17     SQUEEZED OR CRUNCHED. tHANKS TO bILL dUERR FOR CALLING MY
  384.  
  385. ;    ATTENTION TO THIS. sET DEFAULT "DRVSUP" TO ALL DRIVES.
  386.  
  387. ;    fIXED outflf USAGE WHEN EXTRACT FALSE, PER fRANK wHITMAN.
  388.  
  389. ;- c.b. fALCONER
  390.  
  391. ;
  392.  
  393. ; 11/24/86  uSING unc MODULE, EXECUTABLE ON 8080.   cAN EXTRACT ALL
  394.  
  395. ;   V16     FILES TO DISK. nEEDED BECAUSE nulu 1.51 CANNOT UNCRUNCH
  396.  
  397. ;    DURING EXTRACTIONS.  dISK EXTRACTION IGNORES "badtbl".
  398.  
  399. ;    fOR rcpm USE, ASSEMBLE WITH THE "EXTRACT" EQUATE SET TO
  400.  
  401. ;    no.  cLEAN-UPS.- c.b. fALCONER
  402.  
  403. ;
  404.  
  405. ; 11/17/86  aDDED ABILITY TO EXTRACT TO A FILE WITH "lt LBR D:FN.FT",
  406.  
  407. ;   V15     WHERE THE "D:" SIGNIFIES EXTRACTION.  01aH IS eof, SO NOT
  408.  
  409. ;    SUITABLE FOR BINARY FILES.tHE CODE HAS BECOME A MESS TO
  410.  
  411. ;    PRESERVE THE ABILITY TO GENERATE MINIMUM VERSION.
  412.  
  413. ;- c.b. fALCONER
  414.  
  415. ;
  416.  
  417. ; 86/11/15  aDDED HOOKS TO INCLUDE sTEVE gREENBERGS uncr SYSTEM. tHESE
  418.  
  419. ;   V14     ARE GUARDED BY 'uncr' EQUATE TO SETUP OPTIONS.  uSE REQUIRES
  420.  
  421. ;    LINKING AND CREATION OF RELOCATABLE OBJECT.  aNY UNCRUNCHING
  422.  
  423. ;    REQUIRES A z80 CPU. - c.b. fALCONER
  424.  
  425. ;
  426.  
  427. ; 02/12/86  aDDED EXPANSION OF ucsd STYLE "DLE/CODE" INDENTATION CODES.
  428.  
  429. ;   V13     tHESE ALSO APPEAR IN THE pascalp SYSTEM.
  430.  
  431. ;- c.b. fALCONER
  432.  
  433. ;
  434.  
  435. ; 12/05/84  sTOLE SOME FEATURES FROM typelXX '?' FOR FORBIDDEN FILE
  436.  
  437. ;   V12     TYPE TABLE, LIST OUTPUT ENABLE ON DU VERSION, LOCATION OF
  438.  
  439. ;    badtbl FOR PATCHING.  cHECKED "limitt" AND "lmitl" OPTIONS
  440.  
  441. ;    FUNCTIONING WITH WILD CARDS.  vERSION DISPLAY SHOWS OPTIONS
  442.  
  443. ;    ENABLED.  aDDED BIT VECTOR FOR DRIVES AVAILABLE.  aDDED DU
  444.  
  445. ;    OPTION UNDER "duspec" CONDITIONAL.tHE MINIMUM VERSION
  446.  
  447. ;    REMAINS UNDER 0500H BYTES, WITH OPTIONS DISABLED.  iF AN
  448.  
  449. ;    OPERATOR IS ALREADY LOGGED INTO A DRIVE/USER AREA THEN THAT
  450.  
  451. ;    DRIVE/USER AREA REMAINS AVAILABLE EVEN THOUGH THE CONFIGURED
  452.  
  453. ;    RESTRICTIONS SHOULD PREVENT IT.  tHIS ALLOWS FOR PRIVILEGED
  454.  
  455. ;    USERS.  jOHN dOE CAN'T GET THERE AT ALL.
  456.  
  457. ;- c.b. fALCONER
  458.  
  459. ;
  460.  
  461. ; 12/04/84  dELETED UNUSED VARIABLES AND LABELS, ALSO VARIABLES THAT
  462.  
  463. ;   V11     ARE BETTER KEPT ON THE STACK.  aRRANGED FOR lbrfcb TO BE
  464.  
  465. ;    FULLY INITIALIZABLE VIA PARAMETER, FOR STRAIGHT TYPE.
  466.  
  467. ;    tHUS:
  468.  
  469. ;   a>lt FNAME.TYP
  470.  
  471. ;
  472.  
  473. ;    WILL TYPE/UNSQUEEZE fname, WHILE "lt lbrfile COMPONENT"
  474.  
  475. ;    EXTRACTS AS BEFORE. - c.b. fALCONER
  476.  
  477. ;
  478.  
  479. ; 10/02/84  aDAPTED FROM sTEVEN r. hOLTZCLAW'S "luxtyp (06/10/83)"
  480.  
  481. ;   V10     FOR INDEPENDENT USE WITHOUT THE COMPLETE lux SYSTEM.
  482.  
  483. ;    eLIMINATED z80-ONLY OPCODES.  aDDED FILE SEARCHES.aDDED
  484.  
  485. ;    SIMPLE USAGE MESSAGE, ASSEMBLY TIME CONSTANTS TO ELIMINATE
  486.  
  487. ;    LIMITS ON LINES AND FILE TYPES, ^z STOPS PAUSES. crt LINES
  488.  
  489. ;    MEASURED ACROSSFILES.
  490.  
  491. ;- c.b. fALCONER
  492.  
  493. ;
  494.  
  495. ; ---------------------------------------------------------------------
  496.  
  497. ;
  498.  
  499. ASEG ;nEEDED FOR m80, IGNORED BY slrmac, ELSE IGNORE ERROR
  500.  
  501. ;
  502.  
  503. NOEQU0;fOR CONDITIONAL ASSEMBLY
  504.  
  505. YESEQUNOT NO; (sOME ASSEMBLERS DON'T LIKE 0ffH)
  506.  
  507. ;
  508.  
  509. ;-------- cONFIGURATION -------
  510.  
  511. ; aSSEMBLY TIME CONFIGURABLE AREAS.  eACH INCREASES com FILE SIZE.
  512.  
  513. EXTRACT EQUYES;*fILE EXTRACTION ABILITY, WHEEL CONTROLLABLE
  514.  
  515. RECEQU32;sECTORS IN FILE OUTPUT BUFFER.do not MAKE
  516.  
  517. ;  TOO LARGE, ELSE UNCRUNCHER WONT WORK
  518.  
  519. ;
  520.  
  521. LIMITLEQUYES;yES ALLOWS OUTPUT LINE LIMITS
  522.  
  523. LIMITTEQUYES;yES ALLOWS FILE TYPE RESTRICTION
  524.  
  525. DUSPECEQUYES;uSE du STYLE DRIVE/USER SPECIFICATIONS
  526.  
  527. XPNDEQUYES;eXPAND ucsd STYLE "dle/CODE" INDENTATION CODES
  528.  
  529. PAWSEQUNO;cHECK PAUSE/ABORT ON EACH OUTPUT CHAR (BRAILLE)
  530.  
  531. ;
  532.  
  533. ; nEXT IS USED WITH extract SO THAT 1 COPY ONLY NEEDED FOR rcpm SYSTEMS
  534.  
  535. ; nOTE: THE WHEEL ALSO OVER-RIDES THE LINE COUNT RESTRICTION, IF ANY
  536.  
  537. WHLATEQU0;lOCATION OF WHEEL BYTE, 0 DISABLES WHEEL CHECK
  538.  
  539. ;(USUALLY 03EH, PATCH INTO OPTION AREA)
  540.  
  541. ;vALUE ONLY USED TO SET THIS WORD (1 PLACE)
  542.  
  543. ;
  544.  
  545. ; fOR ADDED SECURITY ON rcp/m'S TO PREVENT ACCESS TO FILES OUTSIDE
  546.  
  547. ; THE CALLERS PERMITTED DRIVE USER AREAS.  sEE WHLAT ABOVE ALSO
  548.  
  549. MXDRVEQU03DH;lOCATION OF MAX DRIVE BYTE
  550.  
  551. MXUSREQU03FH;lOCATION OF MAX USER BYTE
  552.  
  553. ;
  554.  
  555. ; cONFIGURABLE VALUES.aLSO SEE "drvsup" CONFIGURABLE VECTOR
  556.  
  557. PAGSZEQU20;dEFAULT LINES PER crt PAGE
  558.  
  559. LNMAXEQU0;0 FOR NO LIMIT, ELSE MAX FILE SIZE (TO 255)
  560.  
  561. NOCTRLEQUYES;yES TO PREVENT CONTROL CHAR. OUTPUT
  562.  
  563. USRMAXEQU15;mAXIMUM USER AREA ACCESSIBLE
  564.  
  565. ; 0-15 FOR cp/m 3, 0-31 FOR cp/m 2.2 OR dosplus
  566.  
  567. ;zcpr. .special value - 0FFH CAUSES zcpr MXUSR TO BE
  568.  
  569. ;LOADED INTO MAXUSR.
  570.  
  571. ;------- end CONFIGURATION EQUATES --------
  572.  
  573. ;
  574.  
  575. ; aSCII CONTROL CHARS
  576.  
  577. BELLEQU07H
  578.  
  579. BSEQU08H
  580.  
  581. TABEQU09H
  582.  
  583. LFEQU0AH
  584.  
  585. CREQU0DH
  586.  
  587. DLEEQU010H
  588.  
  589. EOFEQU01AH
  590.  
  591. SQZDLEEQU090H;SPECIAL IN SQUEEZED/CRUNCHED FILES
  592.  
  593. ;
  594.  
  595. ; cp/m-dos+ SYSTEM VALUES
  596.  
  597. BDOSEQU0005H
  598.  
  599. FCB1EQU05CH
  600.  
  601. FCB2EQU06CH
  602.  
  603. CMDLNEQU080H
  604.  
  605. ;
  606.  
  607. ; bdos CALLS
  608.  
  609. CIOEQU6;dIRECT CONSOLE i/o
  610.  
  611. SETDRVEQU14
  612.  
  613. OPENEQU15
  614.  
  615. CLOSEEQU16
  616.  
  617. SRCHFEQU17
  618.  
  619. DELETEEQU19
  620.  
  621. FREADEQU20
  622.  
  623. FWRTEQU21
  624.  
  625. MAKEEQU22
  626.  
  627. GETDRVEQU25
  628.  
  629. SETDMAEQU26
  630.  
  631. GSUSEREQU32;gET/SET USER
  632.  
  633. FRDRANEQU33;rEAD RANDOM RECORD
  634.  
  635. ;
  636.  
  637. CSEG
  638.  
  639. ;
  640.  
  641. ; lINKAGES TO UNC MODULE
  642.  
  643. EXTRNUNC, ENDU
  644.  
  645. ENTRYGETBYT, OUT
  646.  
  647. ;
  648.  
  649. ; lINKAGES TO unlzh MODULE
  650.  
  651. EXTRNUNL
  652.  
  653. ENTRYGLZHUN,PLZHUN
  654.  
  655. ;
  656.  
  657. ;--------------
  658.  
  659. ;program begins
  660.  
  661. ;--------------
  662.  
  663. BEGIN:JMPSTART;PAST CONFIGURATION AREA
  664.  
  665. ;
  666.  
  667. ; uNUSED, BUT SPACE RESERVED TO FIX PATCH LOCATIONS
  668.  
  669. DB'z3env';sPECIAL SIGNATURE
  670.  
  671. DB1;eXTERNAL ENVIRONMENT
  672.  
  673. @ENV:DW0;aND zcpr CAN PATCH THIS LOCATION
  674.  
  675. ;
  676.  
  677. ; cONFIGURATION VALUES, EVEN IF UNUSED VIA "LIMIT" OPTIONS
  678.  
  679. ; tHESE MAY BE PATCHED TO CONFIGURE THE com FILE AT INSTALLATION
  680.  
  681. WHLADR: DWWHLAT;nON-ZERO IF WHEEL CONTROLLED
  682.  
  683. PAGSIZ: DBPAGSZ;lINES PER PAGE, 0 = NO PAUSES
  684.  
  685. MAXLIN: DBLNMAX;mAX LINES TO TYPE, 0 = UNLIMITED
  686.  
  687. TYPFLG: DBLIMITT; 0 FOR ALL FILE TYPES, ELSE SELECTIVE
  688.  
  689. PAWSFG: DBPAWS;tO CHECK PAUSE ON EACH OUTPUT CHAR.
  690.  
  691. CTLFLG: DBNOCTRL; nON ZERO ALLOWS CONTROL CHAR PRINT
  692.  
  693. ALTDRV: DB0;aLTERNATE DRIVE TO SEARCH, 0 = NONE
  694.  
  695. MAXUSR: DBUSRMAX; mAX ACCESSIBLE USER, FOR DU ENTRIES
  696.  
  697. ;sET 0FFH TO USE zcpr MXUSR VALUE
  698.  
  699. DRVSUP: DW1111111111111111B; vECTOR OF AVAILABLE DRIVES
  700.  
  701. ;abcdefghijklmnop-; dRIVE IDS (nO n..p UNDER pASCALp)
  702.  
  703. ; (EXAMPLE)1100000000001000b; (SHOWN SET FOR a, b AND m DRIVES)
  704.  
  705. NOUQZ:DB0;0 TO ALLOW UNSQUEEZING/UNCRUNCHING
  706.  
  707. ;OF FILES DURING DISK OUTPUT. tHE $u
  708.  
  709. ;COMMAND LINE OPTION WILL TOGGLE THIS.
  710.  
  711. XPDLE:DBnot NOCTRL;sET no = 0 TO SUPPRESS dle EXPANSION.
  712.  
  713. ;uSEFUL IF NOCTRL IS SET no.
  714.  
  715. DB0;SPARE FOR FUTURE USE
  716.  
  717. ;
  718.  
  719. ; '?' MATCHES ANY CHARACTER. aLPHA ORDER FOR CONVENIENCE ONLY,
  720.  
  721. ; A COMPLETE SEQUENTIAL SCAN IS DONE.  aN EXISTING NAME CAN BE
  722.  
  723. ; MADE TO DISAPPEAR BY SETTING ITS HIGH ORDER BIT SOMEWHERE.
  724.  
  725. IFLIMITT; tABLE OF INVALID FILE TYPES
  726.  
  727. BADTBL:  DB'abs';iNTENDED TO DISABLE
  728.  
  729.  DB'arc';===================
  730.  
  731.  DB'ark'
  732.  
  733.  DB'bad'
  734.  
  735.  DB'crl'
  736.  
  737.  DB'c?m';com, cqm, czm, cpm (V20 EXECUTES ON pcS)
  738.  
  739.  DB'e?e';exe, eqe, eze(msdos EXECUTABLE)
  740.  
  741.  DB'irl'
  742.  
  743.  DB'i?t';int, iqt, izt
  744.  
  745.  DB'lbr'
  746.  
  747.  DB'o??';obj, oqj, ozj, ovl, ovr ETC
  748.  
  749.  DB'p?d';pcd, pqd, pzd(EXECUTABLE BY runpcd)
  750.  
  751.  DB'tx#'
  752.  
  753.  DB'rbm'
  754.  
  755.  DB'r?l';rel, rql, rzl
  756.  
  757.  DB's?r';slr, sqr, szr(slr FORMAT REL FILES)
  758.  
  759.  DB'sys'
  760.  
  761.  DB0,0,0
  762.  
  763.  DB0,0,0;sPARES, FOR USER CONFIGURATION
  764.  
  765.  DB0,0,0
  766.  
  767.  DB0;tABLE END MARKER
  768.  
  769. ENDIF;LIMITT
  770.  
  771.  
  772.  
  773. START:LXIH,0;sET UP hl FOR ADD TO STACK
  774.  
  775. SHLDMEMCNT; zERO THE MEMORY COUNT
  776.  
  777. DADSP;aDD STACK POINTER
  778.  
  779. SHLDSTACK;kEEP STACK CONTENTS
  780.  
  781. LXISP,STACK;sET UP LOCAL STACK
  782.  
  783. LDAMAXUSR
  784.  
  785. INRA;sPECIAL 0FFH MAX CAUSES
  786.  
  787. LDAMXUSR;REVISION TO MXUSR
  788.  
  789. JNZSTART1; (cHANGED FROM JZ TO FIX BUG bcm 15/12/91)
  790.  
  791. STAMAXUSR; rEVISE IF zcpr USER SYSTEM
  792.  
  793. START1: LXID,LBRBUF
  794.  
  795. MVIA,SETDMA;dO ALL i/o THRU THIS BUFFER
  796.  
  797. CALLSYS
  798.  
  799. ;"       "
  800.  
  801. IFEXTRACT
  802.  
  803.  MVIA,' '
  804.  
  805.  STAOUTFCB+1;dEFAULT NONE
  806.  
  807. ENDIF;EXTRACT
  808.  
  809. ;"       "
  810.  
  811. IFDUSPEC; pARSE THE COMMAND LINE
  812.  
  813.  CALLPARSE
  814.  
  815.  LDASAVUSR
  816.  
  817.  CALLSGUSER; sET THE USER ACCESS
  818.  
  819. ENDIF;DUSPEC
  820.  
  821. ;"       "
  822.  
  823. CALLLBROPN; sET UP THE LIBRARY NAME BUFFER
  824.  
  825. PUSHPSW;sAVE EXTRACT/TYPE FLAG
  826.  
  827. JNZSTART2; tYPE ONLY
  828.  
  829. LHLDMEMCNT; gET MEMBER COUNT
  830.  
  831. MOVA,L;gET MEMBER COUNT LSB
  832.  
  833. ORAH;aNY MEMBERS?
  834.  
  835. LXID,NFOUND
  836.  
  837. JZEXEUNT; nO - EXIT
  838.  
  839. ;"       "
  840.  
  841. START2: LXID,SIGN1;gIVE NAME, VERSION, CREDIT
  842.  
  843. CALLTSTRC
  844.  
  845. POPPSW
  846.  
  847. JNZDUMP;tYPE ONLY
  848.  
  849. ;"       "
  850.  
  851. ; pER COMPONENT LOOP
  852.  
  853. NEXT:CALLINITLP; iNITIALIZE THE "NEXT" LOOP
  854.  
  855. CALLGETMEM; gET NEXT MEMBER fcb
  856.  
  857. JCEXIT;aLL DONE...
  858.  
  859. CALLLBRSET; sET UP TO READ THE LIBRARY FILE
  860.  
  861. ;"       "
  862.  
  863. ; iNPUT SETUP, DO THE EXTRACTION AND/OR UNSQUEEZING
  864.  
  865. DUMP:IFLIMITT; tEST THE TYPE OF FILE
  866.  
  867.  CALLTSTTYP
  868.  
  869. ENDIF;LIMITT
  870.  
  871. ;"       "
  872.  
  873. CALLGET2HL; gET THE FIRST 2 BYTES FROM THE FILE
  874.  
  875. JNZZERPRT; sPECIAL PROCESSING FOR 0-LENGTH FILE
  876.  
  877. ;"       "
  878.  
  879. ; tHIS ALLOWS DISK OUTPUT without ANY UNSQUEEZING OR UNCRUNCHING.
  880.  
  881. PUSHH
  882.  
  883. LXIH,OUTFLG;fILE OUTPUT FLAG
  884.  
  885. LDANOUQZ;nO UNSQ/UNCR FLAG
  886.  
  887. ANAM;iF (NO UNSQ/UNCR) and (DISK OUTPUT)
  888.  
  889. POPH
  890.  
  891. JNZASPRT;tHEN SKIP UNCOMPRESSION ROUTINES.
  892.  
  893. ;"       "
  894.  
  895. MVIA,076H
  896.  
  897. CMPL
  898.  
  899. JNZASPRT;nOT SQUEEZED - PRINT AN ASCII FILE
  900.  
  901. MVIA,0FFH
  902.  
  903. CMPH
  904.  
  905. JZDUMPSQ; sQUEEZED, DUMP IT
  906.  
  907. DCRA;tO 0FEH
  908.  
  909. CMPH
  910.  
  911. JZDUMPCR; cRUNCHED, DUMP IT
  912.  
  913. DCRA;tO 0FDH
  914.  
  915. CMPH
  916.  
  917. JNZASPRT;nOT COMPRESSED - PRINT AN ASCII FILE
  918.  
  919. ;"       "
  920.  
  921. ; oUTPUT FROM A lzh COMPRESSED FILE
  922.  
  923. CALLNMSHOW; sHOW ACTUAL NAME ETC, ABSORB HEADER
  924.  
  925. LHLDNAMPTR; fREE MEMORY AREA, ABOVE NAMES
  926.  
  927. CALLUNL;unlzh.rel.  uNCOMPRESS
  928.  
  929. LXID,BADFILE
  930.  
  931. JCDONEM;SOMETHING WENT WRONG
  932.  
  933. JMPDONE
  934.  
  935. ;"       "
  936.  
  937. ; oUTPUT FROM A CRUNCHED FILE
  938.  
  939. DUMPCR: CALLNMSHOW; sHOW ACTUAL NAME ETC, ABSORB HEADER
  940.  
  941. LHLDNAMPTR; fREE MEMORY AREA, ABOVE NAMES
  942.  
  943. CALLUNC;unc.rel.  uNCRUNCH
  944.  
  945. LXID,BADFILE
  946.  
  947. JCDONEM;SOMETHING WENT WRONG
  948.  
  949. JMPDONE
  950.  
  951. ;
  952.  
  953. ; oUTPUT FROM A SQUEEZED COMPONENT
  954.  
  955. DUMPSQ: CALLGET2HL; gET AND DISCARD THE NEXT 2 BYTES
  956.  
  957. CALLNMSHOW; aCTUAL NAME, AND ABSORB HEADER
  958.  
  959. CALLSQSETU; sETUP THE SQUEEZED FILE
  960.  
  961. ;"       "
  962.  
  963. ; lIST A SQUEEZED COMPONENT
  964.  
  965. SQLOOP: CALLGETSQB; gET A BYTE FROM THE FILE
  966.  
  967. JCDONE;eOF - GET NEXT FILE NAME IN QUEUE
  968.  
  969. CALLCRTYPE; eLSE PRINT THE CHAR
  970.  
  971. JMPSQLOOP; aND LOOP FOR MORE
  972.  
  973. ;
  974.  
  975. ; sHOW unsq/uncr MEMBER NAME, ETC.  oPTIONALLY REVISE OUTPUT NAME.
  976.  
  977. ; tHIS HAS THE SIDE FUNCTION OF ABSORBING THE SQZ/CRN HEADER.
  978.  
  979. ; A,F,B,D,E,H,L
  980.  
  981. NMSHOW: LXID,FFSEP
  982.  
  983. CALLTSTR;mAKE THE FILE-FILE SEPERATOR
  984.  
  985. ;"       "
  986.  
  987. IFEXTRACT
  988.  
  989.  LXIH,OUTFCB+1
  990.  
  991.  MVIB,11
  992.  
  993. NMSHW1:  MVIM,' ';pRE-BLANK THE OUTPUT NAME
  994.  
  995.  INXH
  996.  
  997.  DCRB
  998.  
  999.  JNZNMSHW1
  1000.  
  1001.  MOVM,B
  1002.  
  1003.  LXID,OUTFCB+1
  1004.  
  1005.  MVIB,8;sIZE OF NAME FIELD
  1006.  
  1007. ENDIF;EXTRACT
  1008.  
  1009. ;"       "
  1010.  
  1011. ; tHIS SECTION TYPES THE FILENAME TO THE CONSOLE AND PUTS IT INTO
  1012.  
  1013. ; "outfcb".  a NULL CHARACTER TERMINATES ALL HEADER PROCESSING.  oTHER
  1014.  
  1015. ; CHARACTERS AFTER FILENAME ARE IGNORED, UNLESS THEY FOLLOW A "["
  1016.  
  1017. ; CHARACTER.  tHESE WILL BE ECHOED TO THE CONSOLE, UNTIL EITHER A NULL
  1018.  
  1019. ; CHARACTER IS DETECTED (TERMINATE PROCESSING) OR A "]" CHARACTER IS
  1020.  
  1021. ; DETECTED (START SCANNING FOR NULL AGAIN).
  1022.  
  1023. NMSHW2: PUSHD;fILENAME AREA OF outfcb
  1024.  
  1025. CALLLBRGET; gET CHARACTER FROM THE FILE
  1026.  
  1027. POPD;rESTORE POINTER
  1028.  
  1029. ORAA;cHECK FOR NULL
  1030.  
  1031. JZNMSHW9; iF FOUND, TERMINATE HEADER PROCESSING
  1032.  
  1033. CPI'['
  1034.  
  1035. JZNMSHW7; "[", GO DISPLAY "STAMP" TEXT
  1036.  
  1037. CPI'.';wAS THE CHARACTER A "."?
  1038.  
  1039. JNZNMSHW3; iF NOT UPDATE CNT, DISPLAY CHAR, PUT IN fcb
  1040.  
  1041. CALLCTYPE;"." IS DISPLAYED, BUT NOT PUT INTO fcb
  1042.  
  1043. MVIB,3;SET FILENAME CHAR COUNTER TO "3"
  1044.  
  1045. ;"       "
  1046.  
  1047. IFEXTRACT;
  1048.  
  1049.  LXID,OUTFCB+9;ADV FILENAME DEST POINTER ACCORDINGLY
  1050.  
  1051. ENDIF;EXTRACT
  1052.  
  1053. ;"       "
  1054.  
  1055. JMPNMSHW2; cONTINUE PROCESSING FILENAME EXT CHARS
  1056.  
  1057.  
  1058.  
  1059. NMSHW3: INRB;cHECK FILENAME CHARACTER LIMIT
  1060.  
  1061. DCRB;
  1062.  
  1063. JZNMSHW6; iF DOWN TO ZERO, EXIT THIS SECTION
  1064.  
  1065. ANI07FH;sTRIP ms BIT BEFORE PLACING IN fcb
  1066.  
  1067. CALLCTYPE;eLSE DISPLAY CHAR
  1068.  
  1069. ;"       "
  1070.  
  1071. IFEXTRACT;
  1072.  
  1073.  STAXD;PUT CHAR IN THE fcb IF APPROPRIATE
  1074.  
  1075. ENDIF;EXTRACT
  1076.  
  1077. ;"       "
  1078.  
  1079. INXD;bUMP FILENAME DEST PNTR
  1080.  
  1081. DCRB;cOUNT IT
  1082.  
  1083. JMPNMSHW2; cONTINUE FILENAME PROCESSING
  1084.  
  1085. ;
  1086.  
  1087. ; fILENAME HAS BEEN FULLY PROCESSED. cONTINUE HEADER ANALYSIS.
  1088.  
  1089. NMSHW4: CALLCTYPE;(ENTRY HERE TO DISPLAY EXTRA CHAR)
  1090.  
  1091. ;"       "
  1092.  
  1093. NMSHW5: CALLLBRGET
  1094.  
  1095. ORAA;lOOP SWALLOWS CHARACTERS UNTIL EITHER
  1096.  
  1097. JZNMSHW9;   A NULL OR A "[" CHAR IS DETECTED
  1098.  
  1099. ;"       "
  1100.  
  1101. NMSHW6: CPI'['
  1102.  
  1103. JNZNMSHW5
  1104.  
  1105. ;"       "
  1106.  
  1107. NMSHW7: MVIA,' ';"[" FOUND. iNSERT BLANK FOR AESTHETICS
  1108.  
  1109. CALLCTYPE
  1110.  
  1111. MVIA,'[';bUT DISPLAY THE "[" CHAR AS WELL
  1112.  
  1113. NMSHW8: CALLCTYPE
  1114.  
  1115. CALLLBRGET
  1116.  
  1117. CPI']';lOOP TO DISPLAY CHARACTERS TO THE CON-
  1118.  
  1119. JZNMSHW4;   SOLE UNTIL A NULL OR A "]" IS FOUND
  1120.  
  1121. ORAA
  1122.  
  1123. JNZNMSHW8
  1124.  
  1125. ;"       "
  1126.  
  1127. ; aLL PATHS TO HERE HAVE A=0 AND Z FLAG SET
  1128.  
  1129. NMSHW9: IFEXTRACT
  1130.  
  1131.  CALLOUTTST; tEST IF OUTPUT TO DISK
  1132.  
  1133.  CNZOPNOUT; iF TO FILE, CREATE IT (OUTFCB), SET NZ
  1134.  
  1135. ENDIF;EXTRACT
  1136.  
  1137. ;"       "
  1138.  
  1139. CZCRLFLF; ONLY WHEN TYPING
  1140.  
  1141. RET
  1142.  
  1143. ;
  1144.  
  1145. ; oUTPUT AN UNSQUEEZED FILE/COMPONENT.
  1146.  
  1147. ;
  1148.  
  1149. ZERPRT: STAZERLEN; sAVE ZERO LENGTH FILE FLAG
  1150.  
  1151. ;"       "
  1152.  
  1153. ASPRT:IFEXTRACT
  1154.  
  1155.  PUSHH
  1156.  
  1157.  LDAOUTFCB+1;kLUDGE TO PREVENT FILE COPYING
  1158.  
  1159.  SUI' '
  1160.  
  1161.  JNZASPRT0
  1162.  
  1163.  LXIH,NOUQZ
  1164.  
  1165.  ORAM;iF WE OVERRIDE UNSQ/UNCR
  1166.  
  1167.  JNZABORT;WE WOULD TRASH THE SCREEN.
  1168.  
  1169.  STAOUTFLG; I.E. A ZERO, FOLLOWING FAILS
  1170.  
  1171. ASPRT0:  CALLOUTTST; tEST IF OUTPUT TO DISK
  1172.  
  1173.  CNZOPNOUT; iF TO FILE, CREATE IT (OUTFCB), SETS NZ
  1174.  
  1175.  POPH
  1176.  
  1177.  CZCRLFLF; IF TYPING. oPENED OUTPUT HAS SET NZ
  1178.  
  1179. ELSE;NOT EXTRACT
  1180.  
  1181.  CALLCRLFLF; WE ARE TYPEING
  1182.  
  1183. ENDIF;NOT EXTRACT
  1184.  
  1185. ;"       "
  1186.  
  1187. LDAZERLEN
  1188.  
  1189. ORAA
  1190.  
  1191. JNZDONE;dON'T TYPE ANYTHING FOR 0-LENGTH FILE
  1192.  
  1193. MOVA,L;pRINT
  1194.  
  1195. PUSHH
  1196.  
  1197. CALLCRTYPE; fIRST
  1198.  
  1199. POPH;(FILE OUT CLOBBERS HL)
  1200.  
  1201. MOVA,H;tWO
  1202.  
  1203. ;"       "
  1204.  
  1205. ASPRT1: CALLCRTYPE; bYTES
  1206.  
  1207. CALLLBRGET; gET A BYTE FROM THE FILE
  1208.  
  1209. JZASPRT1; nOT EOF, PRINT AND GET MORE
  1210.  
  1211. JMPDONE
  1212.  
  1213. ;
  1214.  
  1215. ; dONE, SEND MESSAGE
  1216.  
  1217. DONEM:CALLTSTR
  1218.  
  1219. ;"       '
  1220.  
  1221. ; dONE, NO MESSAGE
  1222.  
  1223. DONE:LXISP,STACK;sp UNCERTAIN HERE - RESET THE STACK
  1224.  
  1225. ;"       "
  1226.  
  1227. IFEXTRACT
  1228.  
  1229.  CALLOUTTST; tEST IF OUTPUT TO DISK
  1230.  
  1231.  CNZFCLOSE; CLOSE FILE IF SO
  1232.  
  1233. ENDIF;EXTRACT
  1234.  
  1235. ;"       "
  1236.  
  1237. JMPNEXT
  1238.  
  1239. ;
  1240.  
  1241. ; iNITIALIZE THE "NEXT" LOOP
  1242.  
  1243. ; A,F,B,H,L
  1244.  
  1245. INITLP: LDAPAGLNS
  1246.  
  1247. ORAA
  1248.  
  1249. JNZINITL1; pAGING WAS NOT STOPPED
  1250.  
  1251. STALINCN1; eLSE CLEAR FOR FRESH START
  1252.  
  1253. LDAPAGSIZ
  1254.  
  1255. STAPAGLNS; rESTART ANY PAGE PAUSES
  1256.  
  1257. INITL1: LXIH,ZEROS;fILL FLAG AREA WITH ZEROS
  1258.  
  1259. MVIB,LASTZ-ZEROS;cOUNT OF ZEROES TO LOAD
  1260.  
  1261. XRAA;fILL (hl) UP FOR (b) WITH ZEROES
  1262.  
  1263. INITL2: MOVM,A;pUT A BYTE
  1264.  
  1265. INXH;nEXT LOCATION
  1266.  
  1267. DCRB
  1268.  
  1269. JNZINITL2; fILL ALL 11 BYTES
  1270.  
  1271. RET
  1272.  
  1273. ;
  1274.  
  1275. ; oPEN THE filename.lbr FILE AND THE member.ext FILES, RETURNS z-FLAG
  1276.  
  1277. ; FOR LIBRARY EXTRACTION, nz FOR PURE TYPE
  1278.  
  1279. ;
  1280.  
  1281. LBROPN: MVIB,12;fIELD SIZE FOR .lbr FILE
  1282.  
  1283. LXIH,FCB1; mOVE FIRST FILE fcb
  1284.  
  1285. LXID,LBRFCB;tO lbrfcb
  1286.  
  1287. CALLMOVE
  1288.  
  1289. XRAA;sET EXT & REC # TO 0 FOR PROPER OPEN
  1290.  
  1291. STALBREXT
  1292.  
  1293. STALBRSNO
  1294.  
  1295. LXIH,FCB2+1;sOURCE IS MEMBER fcb NAME, NO DRIVE
  1296.  
  1297. MOVA,M;fIRST MEMBER CHARACTER
  1298.  
  1299. CPI' ';iS IT A SPACE OR CONTROL ?
  1300.  
  1301. JCHELPER; cONTROL, EXIT WITH HELP
  1302.  
  1303. JZTFILE;sPACE, TYPE ONE FILE ONLY
  1304.  
  1305. LXID,MEMNAM;mOVE fcb2 TO memnam
  1306.  
  1307. MVIB,11;bYTES TO MOVE
  1308.  
  1309. CALLMOVE;mEMBER NAME TO LOCAL AREA
  1310.  
  1311. ;"       "
  1312.  
  1313. ; oPEN THE .lbr FILE
  1314.  
  1315. LXIH,'bl'
  1316.  
  1317. SHLDLBRTYP; fORCE .lbr TYPE
  1318.  
  1319. MVIA,'r'
  1320.  
  1321. STALBRTYP+2
  1322.  
  1323. CALLFOPNLB; oPEN .lbr FILE
  1324.  
  1325. INRA;oPEN OK?
  1326.  
  1327. JZNOFILE; fAILURE, ABORT WITH HELP
  1328.  
  1329. ;"       "
  1330.  
  1331. ; rEAD THE FIRST RECORD OF THE LIBRARY DIRECTORY
  1332.  
  1333. CALLLBREAD; rEAD A SECTOR
  1334.  
  1335. LHLDLBRBUF+14;gET DIRECTORY SIZE
  1336.  
  1337. ;"       "
  1338.  
  1339. ; tEST FOR A VALID LIBRARY FILE
  1340.  
  1341. LDALBRBUF
  1342.  
  1343. ORAA;tEST FIRST BYTE
  1344.  
  1345. LXID,CORRPT
  1346.  
  1347. JNZEXEUNT; nON-ZERO, BAD .lbr FILE
  1348.  
  1349. ;"       "
  1350.  
  1351. ; rEAD THE NEXT LIBRARY DIRECTORY RECORD
  1352.  
  1353. LBROP5: PUSHH;sAVE dirsize
  1354.  
  1355. CNZLBREAD; rEAD A SECTOR, EXCEPT 1ST PASS
  1356.  
  1357. ;"       "
  1358.  
  1359. ; sEARCH FOR THE MEMBER NAME IN THE LIBRARY DIRECTORY
  1360.  
  1361. LXIH,LBRBUF;pROCESS FIRST ENTRY
  1362.  
  1363. CALLADDMEM; tO MEMORY BUFFER
  1364.  
  1365. LXIH,LBRBUF+20H;pROCESS SECOND ENTRY
  1366.  
  1367. CALLADDMEM; tO MEMORY BUFFER
  1368.  
  1369. LXIH,LBRBUF+40H;pROCESS THIRD ENTRY
  1370.  
  1371. CALLADDMEM; tO MEMORY BUFFER
  1372.  
  1373. LXIH,LBRBUF+60H;pROCESS FOURTH ENTRY
  1374.  
  1375. CALLADDMEM; tO MEMORY BUFFER
  1376.  
  1377. POPH;cOUNT OF DIR ENTRIES
  1378.  
  1379. DCXH;-1
  1380.  
  1381. MOVA,H;zERO DIRECTORY ENTRIES LEFT ?
  1382.  
  1383. ORAL
  1384.  
  1385. JNZLBROP5; nOW READ ANOTHER DIRECTORY SECTOR
  1386.  
  1387. RET
  1388.  
  1389. ;
  1390.  
  1391. ; tHE SECOND PARAMETER IS MISSING, JUST TYPE THE MAIN FILE,
  1392.  
  1393. ; RETURNS nz FLAG TO SIGNAL NO LIBRARY EXTRACTION
  1394.  
  1395. ;
  1396.  
  1397. TFILE:LXID,LBRFCB+1
  1398.  
  1399. LDAXD
  1400.  
  1401. DCXD
  1402.  
  1403. CPI' '
  1404.  
  1405. JZHELPER
  1406.  
  1407. CALLFOPENF
  1408.  
  1409. INRA
  1410.  
  1411. JZNOFILE
  1412.  
  1413. ;"       "
  1414.  
  1415. IFLIMITT
  1416.  
  1417.  INXD
  1418.  
  1419.  XCHG
  1420.  
  1421.  LXID,MEMFCB
  1422.  
  1423.  MVIB,11
  1424.  
  1425.  CALLMOVE;nAME TO MEMNAM FOR CHECKING
  1426.  
  1427. ENDIF;LIMITT
  1428.  
  1429. ;"       "
  1430.  
  1431. CALLINITLP; oTHER ONE PASS INITIALIZERS
  1432.  
  1433. ORI0FFH;sET nz FLAG
  1434.  
  1435. JMPINITPT; sET UP POINTERS, LEAVE nz FLAG
  1436.  
  1437. ;
  1438.  
  1439. ; sETUP ACCESS TO THE LIBRARY COMPONENT
  1440.  
  1441. ; A,F,B,D,E,H,L
  1442.  
  1443. LBRSET: LXID,MBRMSG
  1444.  
  1445. CALLTSTRC
  1446.  
  1447. LXIH,MEMFCB;iNDEX MEMBER fcb
  1448.  
  1449. ;"       "
  1450.  
  1451. IFEXTRACT
  1452.  
  1453.  PUSHH
  1454.  
  1455.  LXID,OUTFCB+1
  1456.  
  1457.  MVIB,11;sET DEFAULT OUTPUT FILE NAME
  1458.  
  1459.  CALLMOVE;(WILL REVISE IF SQUEEZED/CRUNCHED)
  1460.  
  1461.  XRAA
  1462.  
  1463.  STAXD;aND CLEAR EXTENT FIELD
  1464.  
  1465.  POPH
  1466.  
  1467. ENDIF;EXTRACT
  1468.  
  1469. ;"       "
  1470.  
  1471. CALLFNAME
  1472.  
  1473. MOVE,M;gET MEMBER STARTING RECORD lsb
  1474.  
  1475. INXH
  1476.  
  1477. MOVD,M;aND msb
  1478.  
  1479. PUSHD;sAVE
  1480.  
  1481. INXH
  1482.  
  1483. MOVE,M;gET MEMBER SIZE lsb
  1484.  
  1485. INXH
  1486.  
  1487. MOVD,M;aND msb
  1488.  
  1489. XCHG;iNTO 'hl'
  1490.  
  1491. INXH;+1
  1492.  
  1493. SHLDRCNT;sAVE IT IN RECORD COUNT
  1494.  
  1495. POPH;rESTORE STARTING RECORD NUMBER
  1496.  
  1497. SHLDLBRRNO
  1498.  
  1499. XRAA
  1500.  
  1501. STALBRRNO+2;sET RANDOM RCD NO
  1502.  
  1503. STALBREXT
  1504.  
  1505. CALLFOPNLB; oPEN THE lbr FILE AGAIN
  1506.  
  1507. INRA
  1508.  
  1509. JZPREEOF; sHOULD NOT HAPPEN
  1510.  
  1511. MVIA,FRDRAN
  1512.  
  1513. CALLSYS;dO A RANDOM READ TO PUT IN SEQUENTIAL
  1514.  
  1515. ORAA
  1516.  
  1517. JNZPREEOF; nO SUCH RECORD
  1518.  
  1519. ;"       '
  1520.  
  1521. ; iNITIALIZE POINTERS TO READ FROM lbrfcb
  1522.  
  1523. ; A,H,L (FLAGS PRESERVED)
  1524.  
  1525. INITPT: MVIA,080H
  1526.  
  1527. STACHRCNT; sET CHAR COUNT TO FORCE READ
  1528.  
  1529. LXIH,LBRBUF-1
  1530.  
  1531. SHLDBUFPTR
  1532.  
  1533. RET
  1534.  
  1535. ;
  1536.  
  1537. ; gET A BYTE FROM THE .lbr MEMBER. getbyt FOR uncrel. glzhun FOR unlzh USE
  1538.  
  1539. ; A,F,D,E,H,L
  1540.  
  1541. GLZHUN:
  1542.  
  1543. GETBYT:
  1544.  
  1545. LBRGET: LDACHRCNT; gET POINTER
  1546.  
  1547. INRA;pOINT TO NEXT POSITION
  1548.  
  1549. STACHRCNT; pUT POINTER BACK
  1550.  
  1551. JPLBRGE1; bUFFER NOT EMPTY
  1552.  
  1553. CALLZBUFF;eMPTY, RESET POINTERS, READ SECTOR
  1554.  
  1555. LHLDRCNT;gET RECORD COUNT
  1556.  
  1557. DCXH;-1
  1558.  
  1559. SHLDRCNT;sET NEW RECORD COUNT
  1560.  
  1561. MOVA,L
  1562.  
  1563. ORAH
  1564.  
  1565. JZLBRGE2; iF ALL RECORDS READ
  1566.  
  1567. CALLLBREAD; rEAD A SECTOR
  1568.  
  1569. ORAA
  1570.  
  1571. JNZLBRGE2; iF READ WAS UNSUCCESSFUL
  1572.  
  1573. ;"       "
  1574.  
  1575. LBRGE1: LHLDBUFPTR
  1576.  
  1577. INXH
  1578.  
  1579. SHLDBUFPTR
  1580.  
  1581. MOVA,M;nO  - GET THE NEXT BYTE
  1582.  
  1583. CMPA;sET ZERO - NO ERROR
  1584.  
  1585. RET
  1586.  
  1587. ;
  1588.  
  1589. LBRGE2: MVIA,0FFH
  1590.  
  1591. ORAA
  1592.  
  1593. RET;rETURN NON-ZERO FOR ERROR
  1594.  
  1595. ;
  1596.  
  1597. ; zERO THE BUFFER POINTERS (FOR REACCESS FROM START)
  1598.  
  1599. ; A,F,H,L
  1600.  
  1601. ZBUFF:XRAA;eMPTY, READ ANOTHER RECORD
  1602.  
  1603. STACHRCNT; cLEAR THE CHARACTER COUNT
  1604.  
  1605. LXIH,LBRBUF-1
  1606.  
  1607. SHLDBUFPTR
  1608.  
  1609. RET
  1610.  
  1611. ;
  1612.  
  1613. ; rEAD A SECTOR FROM LIBRARY FILE
  1614.  
  1615. ; A,F,D,E
  1616.  
  1617. LBREAD: MVIA,FREAD
  1618.  
  1619. LXID,LBRFCB;.lbr fcb
  1620.  
  1621. JMPSYS;rEAD A BLOCK, AND EXIT
  1622.  
  1623. ;
  1624.  
  1625. ; gET 2 BYTES FROM INPUT FILE INTO hl
  1626.  
  1627. ; A,F,D,E,H,L
  1628.  
  1629. GET2HL: CALLLBRGET; gET A BYTE FROM THE INPUT FILE
  1630.  
  1631. RNZ;mAY BE AN EMPTY COMPONENT
  1632.  
  1633. PUSHPSW
  1634.  
  1635. CALLLBRGET; gET A BYTE FROM THE INPUT FILE
  1636.  
  1637. MOVH,A
  1638.  
  1639. POPPSW;FIRST BYTE OF THE PAIR
  1640.  
  1641. MOVL,A
  1642.  
  1643. RET
  1644.  
  1645. ;
  1646.  
  1647. NOFILE: LXID,NOFMSG
  1648.  
  1649. JMPEXEUNT
  1650.  
  1651. ;
  1652.  
  1653. HELPER: LXID,SIGNON;gIVE NAME, VERSION, CREDIT
  1654.  
  1655. CALLTSTR
  1656.  
  1657. LXID,USAGE;gIVE HELP MENU
  1658.  
  1659. CALLTSTRC
  1660.  
  1661. CALLQWHL
  1662.  
  1663. LXID,WHLUSG
  1664.  
  1665. CNZTSTRC;aDDED HELP WHEN WHEEL ENABLED
  1666.  
  1667. JMPEXIT;WITHOUT WASTING crt SPACE.
  1668.  
  1669. ;
  1670.  
  1671. PREEOF: LXID,EOFMSG
  1672.  
  1673. ;"       "
  1674.  
  1675. ; eRROR EXIT, CRLF AND MESSAGE (de)^
  1676.  
  1677. EXEUNT: CALLTSTRC;pRINT MESSAGE
  1678.  
  1679. ;"       "
  1680.  
  1681. EXIT:IFDUSPEC; rESTORE ENTRY CONDITIONS
  1682.  
  1683.  CALLRESTOR
  1684.  
  1685. ENDIF;DUSPEC
  1686.  
  1687. ;"       "
  1688.  
  1689. LHLDSTACK
  1690.  
  1691. SPHL;rESTORE ORIGINAL STACK
  1692.  
  1693. RET;--EXIT-- TO CP/M
  1694.  
  1695. ;
  1696.  
  1697. IFEXTRACT
  1698.  
  1699. ; cLOSE ANY OUTPUT FILE
  1700.  
  1701. ; A,F,D,E,H,L 
  1702.  
  1703. FCLOSE:  LDABYTES;gET BYTES IN CURRENT SECTOR
  1704.  
  1705.  ORAA
  1706.  
  1707.  JZFCLS2;nONE
  1708.  
  1709.  LHLDOUTPTR; gET BUFFER POINTER
  1710.  
  1711. FCLS1: MVIM,EOF;pUT IN eof
  1712.  
  1713.  INXH;bUMP POINTER
  1714.  
  1715.  INRA;aND BYTE COUNT
  1716.  
  1717.  JPFCLS1;fILL OUT SECTOR WITH eof
  1718.  
  1719.  LDASECTOR
  1720.  
  1721.  INRA
  1722.  
  1723.  STASECTOR; bUMP SECTOR COUNT
  1724.  
  1725. FCLS2: CALLFPUT;wRITE BUFFER, MAYBE
  1726.  
  1727.  LDAOUTUSR; sHIFT TO OUTPUT USER
  1728.  
  1729.  CALLSGUSER
  1730.  
  1731.  LXID,OUTFCB
  1732.  
  1733.  MVIA,CLOSE
  1734.  
  1735.  CALLSYS
  1736.  
  1737.  LDAINUSER
  1738.  
  1739.  JMPSGUSER; rESTORE AND EXIT
  1740.  
  1741. ;
  1742.  
  1743. ; pUT CHARACTER (tos) TO FILE.uNCLEAN HOOK FOR crtype.
  1744.  
  1745. ; A,F,H,L
  1746.  
  1747. FPUTCH:  POPPSW;gET CHAR. TO acc.
  1748.  
  1749.  LHLDOUTPTR; pOINTER
  1750.  
  1751.  MOVM,A;pUT CHAR IN BUFFER
  1752.  
  1753.  INXH
  1754.  
  1755.  SHLDOUTPTR; uPDATE POINTER
  1756.  
  1757.  LDABYTES
  1758.  
  1759.  INRA
  1760.  
  1761.  STABYTES;uPDATE BYTES IN THIS SECTOR
  1762.  
  1763.  RP;eXIT IF NOT FULL SECTOR
  1764.  
  1765.  XRAA
  1766.  
  1767.  STABYTES;iNIT. BYTE COUNT
  1768.  
  1769.  LDASECTOR
  1770.  
  1771.  INRA
  1772.  
  1773.  STASECTOR; uPDATE SECTORS IN BUFFER
  1774.  
  1775.  CPIREC;bUFFER FULL?
  1776.  
  1777.  RNZ;eXIT IF NOT
  1778.  
  1779. ; "      "
  1780.  
  1781. ; wRITE OUTPUT BUFFER TO FILE
  1782.  
  1783. ; A,F,H,L
  1784.  
  1785. FPUT: PUSHD
  1786.  
  1787.  LDAOUTUSR; uSER FOR OUTPUT FILE
  1788.  
  1789.  CALLSGUSER
  1790.  
  1791.  CALLPBUF;wRITE THE SECTORS
  1792.  
  1793.  LXID,LBRBUF
  1794.  
  1795.  MVIA,SETDMA;bACK TO INPUT BUFFER
  1796.  
  1797.  CALLSYS
  1798.  
  1799.  LDAINUSER; rESTORE INPUT USER
  1800.  
  1801.  CALLSGUSER
  1802.  
  1803. ; "      "
  1804.  
  1805. ; tHIS CODE ALLOWS ABORTING A DISK FILE OUTPUT
  1806.  
  1807.  CALLCISTAT; cHECK FOR CONSOLE INPUT
  1808.  
  1809.  JZFPUT2;cONTINUE IF NONE
  1810.  
  1811.  CPI'c'-40H
  1812.  
  1813.  JZABORT;aBORT ON ctl-c
  1814.  
  1815. FPUT2: POPD;eLSE CONTINUE
  1816.  
  1817.  RET
  1818.  
  1819. ;
  1820.  
  1821. ; uNLOAD THE STORED BUFFER (UP TO REC SECTORS LONG)
  1822.  
  1823. ; A,F,D,E,H,L
  1824.  
  1825. PBUF: LDASECTOR; gET SECTOR COUNT
  1826.  
  1827.  INRA;pREPARE FOR UPCOMMING dcr a
  1828.  
  1829.  LXIH,OUTBUFF;sTART OF OUTPUT BUFFER
  1830.  
  1831.  SHLDOUTPTR; iNIT. BYTE POINTER
  1832.  
  1833. PBUF1: SHLDDMAADD;  AND WRITE ADDRESS
  1834.  
  1835.  DCRA
  1836.  
  1837.  STASECTOR; uPDATE SECTOR COUNT
  1838.  
  1839.  RZ;eXIT IF NONE LEFT TO WRITE
  1840.  
  1841.  PUSHPSW;sAVE SECTOR COUNT
  1842.  
  1843.  XCHG;sETUP de
  1844.  
  1845.  MVIA,SETDMA;wRITE ADDRESS
  1846.  
  1847.  CALLSYS
  1848.  
  1849.  LXID,OUTFCB
  1850.  
  1851.  MVIA,FWRT; nOW WRITE IT
  1852.  
  1853.  CALLSYS
  1854.  
  1855.  ORAA
  1856.  
  1857.  JNZFULLUP; wRITE ERROR, ABORT EVERYTHING
  1858.  
  1859.  LHLDDMAADD
  1860.  
  1861.  LXID,128;gET NEXT WRITE ADDRESS
  1862.  
  1863.  DADD
  1864.  
  1865.  POPPSW;gET SECTOR COUNT
  1866.  
  1867.  JMPPBUF1;aND LOOP
  1868.  
  1869. ENDIF;EXTRACT
  1870.  
  1871. ;
  1872.  
  1873. ; oUTPUT TO crt OR FILE.  eNTRY NAME "OUT" FOR unc OR uncrel, 'PLZHUN' FOR
  1874.  
  1875. ; unlzh OR unl USE
  1876.  
  1877. ; crt OUTPUT TRACKS COLUMN AND LINE.
  1878.  
  1879. ; A,F,E,H,L
  1880.  
  1881. PLZHUN:
  1882.  
  1883. OUT:
  1884.  
  1885. CRTYPE: IFEXTRACT
  1886.  
  1887.  PUSHPSW
  1888.  
  1889.  CALLOUTTST; tEST IF OUTPUT TO DISK
  1890.  
  1891.  JNZFPUTCH
  1892.  
  1893.  POPPSW
  1894.  
  1895. ENDIF;EXTRACT
  1896.  
  1897. ;"       "
  1898.  
  1899. ; nOT CREATING A FILE, THIS CHAR GOES TO THE CONSOLE.
  1900.  
  1901. CPIEOF
  1902.  
  1903. JZDONE;eof ON 01aH FOR ascii OUTPUT
  1904.  
  1905. ;"       "
  1906.  
  1907. IFXPND
  1908.  
  1909.  PUSHPSW
  1910.  
  1911.  LDADLEFLG
  1912.  
  1913.  ORAA
  1914.  
  1915.  JNZCRTYP6
  1916.  
  1917.  POPPSW
  1918.  
  1919.  CPIDLE
  1920.  
  1921.  JNZCRTYP1
  1922.  
  1923.  LDAXPDLE
  1924.  
  1925.  ORAA
  1926.  
  1927.  JNZCRTYP5
  1928.  
  1929.  MVIA,DLE
  1930.  
  1931. ENDIF;XPND
  1932.  
  1933. ;"       "
  1934.  
  1935. CRTYP1: ANI7FH;mAKE SURE ITS ascii
  1936.  
  1937. PUSHPSW;sAVE THE CHARACTER
  1938.  
  1939. CALLCOUT
  1940.  
  1941. LDAPAWSFG
  1942.  
  1943. ORAA
  1944.  
  1945. CNZPAUSER; fOR SLOW TERMINALS (bRAILLE, ETC)
  1946.  
  1947. POPPSW;rESTORE CHARACTER
  1948.  
  1949. CPILF;wAS IT A LINE FEED
  1950.  
  1951. RNZ;nO - CONTINUE
  1952.  
  1953. CALLQWHL;lOAD WHEEL BYTE IF ENABLED
  1954.  
  1955. JNZCRTYP2; bYPASS LINE COUNT TESTS ON WHEEL
  1956.  
  1957. ;"       "
  1958.  
  1959. IFLIMITL; cHECK FOR TOO MANY LINES TYPED
  1960.  
  1961.  LDALINCNT; aDVANCE LINE COUNTER
  1962.  
  1963.  INRA
  1964.  
  1965.  STALINCNT
  1966.  
  1967.  MOVB,A;lINE NUMBER IN 'b'
  1968.  
  1969.  LDAMAXLIN; mAX NUMBER OF LINES TO TYPE
  1970.  
  1971.  ORAA;tEST FLAG
  1972.  
  1973.  JZCRTYP2; iF NULL FUNCTION
  1974.  
  1975.  CMPB;eLSE COMPARE TO MAX LINES
  1976.  
  1977.  LXID,EXCESS
  1978.  
  1979.  JZDONEM;aNNOUNCE TOO MUCH
  1980.  
  1981. ENDIF;LIMITL
  1982.  
  1983. ;"       "
  1984.  
  1985. CRTYP2: LDALINCN1; gET LINE COUNTER
  1986.  
  1987. MOVB,A;kEEP IN 'b'
  1988.  
  1989. LDAPAGLNS; nUMBER OF LINES PER PAGE
  1990.  
  1991. DCRA;dECREMENT AND TEST FLAG
  1992.  
  1993. JMPAUSER; fUNCTION IS NULL
  1994.  
  1995. CMPB;cOMPARE TO LINES PER PAGE
  1996.  
  1997. JNCPAUSER; iF NOT AT MAXIMUM COUNT
  1998.  
  1999. XRAA;cLEAR LINES COUNTER
  2000.  
  2001. STALINCN1
  2002.  
  2003. LXID,MORE
  2004.  
  2005. CALLTSTR;aNNOUNCE THE PAUSE
  2006.  
  2007. CALLPAUSE;gET INPUT FROM CONSOLE
  2008.  
  2009. CPI' '-EOF;sPACE FOR LINE AT A TIME?
  2010.  
  2011. JNZCRTYP3
  2012.  
  2013. MOVA,B;gET ORIGINAL LINE COUNT BACK
  2014.  
  2015. DCRA;aND SET TO "ONE LINE LEFT"
  2016.  
  2017. STALINCN1
  2018.  
  2019. CRTYP3: LXID,CLEAN
  2020.  
  2021. CALLTSTR;cLEAR OUT THE "[MORE]"
  2022.  
  2023. ;"       "
  2024.  
  2025. ; cHECK FOR USER PAUSE OR ABORT
  2026.  
  2027. ; A,F,E (UNLESS ABORTED)
  2028.  
  2029. PAUSER: CALLCISTAT; cHECK THE KEYBOARD
  2030.  
  2031. CALLPSCHK
  2032.  
  2033. CPI's'-40H;ctl-s TO PAUSE?
  2034.  
  2035. JZPAUSE
  2036.  
  2037. ANI5FH
  2038.  
  2039. CPI's'
  2040.  
  2041. RNZ;nOT ctl-s, RETURN
  2042.  
  2043. ;"       "
  2044.  
  2045. ; rETURNS INPUT-01aH.aBORTS ON C,c,^c OR K,k,^k - NEXT ON ctl-x, ETC.
  2046.  
  2047. ; A,F,E
  2048.  
  2049. PAUSE:CALLCISTAT; cHECK THE KEYBOARD
  2050.  
  2051. JZPAUSE;nOTHING YET SO WAIT
  2052.  
  2053. CALLPSCHK
  2054.  
  2055. SUIEOF
  2056.  
  2057. RNZ;nOT ^z
  2058.  
  2059. STAPAGLNS; eND PAUSES PERMANENTLY ON ^z
  2060.  
  2061. RET
  2062.  
  2063. ;
  2064.  
  2065. IFXPND
  2066.  
  2067. CRTYP6:  XRAA;iNDENTATION EXPANSION
  2068.  
  2069.  STADLEFLG
  2070.  
  2071.  POPPSW
  2072.  
  2073.  SUI' '
  2074.  
  2075.  RC
  2076.  
  2077.  RZ;eLSE 'a' IS COUNT OF SPACES TO SEND
  2078.  
  2079. CRTYP7:  STADLECNT
  2080.  
  2081.  MVIE,' '
  2082.  
  2083.  CALLCOUT3
  2084.  
  2085.  LDADLECNT
  2086.  
  2087.  DCRA
  2088.  
  2089.  JNZCRTYP7
  2090.  
  2091. CRTYP5:  STADLEFLG
  2092.  
  2093.  RET
  2094.  
  2095. ENDIF;XPND
  2096.  
  2097. ;
  2098.  
  2099. ; cONSOLE STATUS
  2100.  
  2101. ; A,F,E
  2102.  
  2103. CISTAT: MVIA,CIO;bdos FUNCTION
  2104.  
  2105. MVIE,0FFH
  2106.  
  2107. CALLSYS;dIRECT CONSOLE IN CALL
  2108.  
  2109. ORAA;wAS A KEY ENTERED ?
  2110.  
  2111. RET
  2112.  
  2113. ;
  2114.  
  2115. ; pAUSE CHECK FOR SPECIAL CHARACTERS
  2116.  
  2117. ; A,F (UNLESS ABORTED)
  2118.  
  2119. PSCHK:CPI'c'-40H;wANT TO ABORT?
  2120.  
  2121. JZABORT;iF YES, QUIT
  2122.  
  2123. CPI'k'-40H
  2124.  
  2125. JZABORT
  2126.  
  2127. CPI'x'-40H;jUMPING TO NEXT FILE?
  2128.  
  2129. JZPSCHK1
  2130.  
  2131. CPI' ';sPACE FOR "LINE AT A TIME"?
  2132.  
  2133. RZ
  2134.  
  2135. ANI5FH;iNSURE IN UPPER CASE
  2136.  
  2137. CPI'c'
  2138.  
  2139. JZABORT
  2140.  
  2141. CPI'k'
  2142.  
  2143. JZABORT
  2144.  
  2145. CPI'x'
  2146.  
  2147. RNZ;iF NOT, KEEP GOING
  2148.  
  2149. PSCHK1: CALLCRLF
  2150.  
  2151. JMPDONE;nEXT FILE ON ctl-x
  2152.  
  2153. ;
  2154.  
  2155. ; aBORT THE RUN WITH MESSAGE
  2156.  
  2157. ABORT:LXID,ABRMSG
  2158.  
  2159. JMPEXEUNT
  2160.  
  2161. ;
  2162.  
  2163. ; oUTPUT CHAR A TO CONSOLE, EXPANDING TABS, TRACKING COLUMN
  2164.  
  2165. ; A,F,E
  2166.  
  2167. COUT:MOVE,A;sAVE OUTPUT CHARACTER
  2168.  
  2169. CPITAB
  2170.  
  2171. JZTABBER; eXPAND A TAB
  2172.  
  2173. CPICR;cARRIAGE RETURN
  2174.  
  2175. JNZCOUT1
  2176.  
  2177. XRAA;cr SETS column TO 0
  2178.  
  2179. JMPCOUT4
  2180.  
  2181.  
  2182.  
  2183. COUT1:CPIBS;iS CHAR A BACKSPACE?
  2184.  
  2185. JNZCOUT2
  2186.  
  2187. LDACOLUMN; bACKSPACE SETS column BACK ONE
  2188.  
  2189. DCRA
  2190.  
  2191. RM;iGNORE IF AT COLUMN 0 ALREADY
  2192.  
  2193. JMPCOUT4
  2194.  
  2195.  
  2196.  
  2197. COUT2:CPI' ';
  2198.  
  2199. JCCOUTE;oTHER CONTROLS DON'T AFFECT column
  2200.  
  2201. ;"       "
  2202.  
  2203. ; cALLABLE ENTRY POINT HERE TO DISPLAY E
  2204.  
  2205. COUT3:LDACOLUMN; aDVANCE COLUMN COUNTER
  2206.  
  2207. INRA
  2208.  
  2209. COUT4:STACOLUMN
  2210.  
  2211. ;"       "
  2212.  
  2213. ; oUTPUT E TO CONSOLE IF PRINTABLE
  2214.  
  2215. COUTE:CALLQCTL;tEST CONTROL
  2216.  
  2217. MOVA,E;gET CHAR BACK
  2218.  
  2219. JZCTYPE;NO SUPPRESSION, PRINT THE CHAR
  2220.  
  2221. RET;ABSORB IT, rETURN TO CALLER
  2222.  
  2223. ;
  2224.  
  2225. ; eXPAND A TAB, AT LEAST ONE SPACE EMITTED
  2226.  
  2227. TABBER: MVIE,' '
  2228.  
  2229. CALLCOUT3;pRINT A SPACE
  2230.  
  2231. LDACOLUMN
  2232.  
  2233. ANI7;aT NEXT TAB STOP ?
  2234.  
  2235. JNZTABBER; yES, CONTINUE
  2236.  
  2237. RET
  2238.  
  2239. ;
  2240.  
  2241. ; tEST FOR CONTROL CHAR OUTPUT (FROM E). z FLAG FOR NO SUPPRESSION.
  2242.  
  2243. ; A,F
  2244.  
  2245. QCTL:LDACTLFLG; gET CONTROLS ACTIVE
  2246.  
  2247. ORAA;tEST FLAG
  2248.  
  2249. RZ;rETURN IF NOT
  2250.  
  2251. MOVA,E;gET OUTPUT CHAR
  2252.  
  2253. CPI' '
  2254.  
  2255. JNCQCTL1;nOT CONTROL, CLEAR FLAGS
  2256.  
  2257. CPICR
  2258.  
  2259. RZ
  2260.  
  2261. CPIBS
  2262.  
  2263. RZ
  2264.  
  2265. CPIBELL
  2266.  
  2267. RZ
  2268.  
  2269. CPILF
  2270.  
  2271. RNZ;nON-TYPABLE CONTROL CHAR
  2272.  
  2273. QCTL1:CMPA;sET z-FLAG, TYPABLE
  2274.  
  2275. RET
  2276.  
  2277. ;
  2278.  
  2279. IFLIMITT; tEST FOR TYPABLE FILE
  2280.  
  2281. ; tEST FOR TYPEABLE FILE, ABORT WITH MESSAGE TO "done" IF NOT
  2282.  
  2283. ; A,F,B,D,E,H,L
  2284.  
  2285. TSTTYP:  LDATYPFLG; gET TEST FLAG
  2286.  
  2287.  ORAA;tEST IT
  2288.  
  2289.  RZ;rETURN IF OK TO TYPE ALL TYPES
  2290.  
  2291. ; "      "
  2292.  
  2293.  IFEXTRACT; and LIMITT
  2294.  
  2295.   CALLOUTTST; tEST IF OUTPUT TO DISK
  2296.  
  2297.   RNZ;rETURN IF OUTPUTTING TO DISK
  2298.  
  2299.  ENDIF; EXTRACT and LIMITT
  2300.  
  2301. ; "      "
  2302.  
  2303.  MVIB,3
  2304.  
  2305.  LXIH,BADTBL-3;iNDEX BAD FILE TYPE TABLE
  2306.  
  2307. TSTTY1:  INXH;nEXT TABLE ADDRESS POINTER
  2308.  
  2309.  DCRB;bUMP LOOP COUNTER
  2310.  
  2311.  JNZTSTTY1; dO UNTIL AT NEXT TABLE ENTRY
  2312.  
  2313.  MOVA,M;gET A BYTE
  2314.  
  2315.  ORAA
  2316.  
  2317.  RZ;END OF TABLE - OK TO TYPE THIS ONE
  2318.  
  2319.  MVIB,3;3 CHAR EXTENSION
  2320.  
  2321.  LXID,MEMFCB+8;iNDEX FILE NAME EXTENSION
  2322.  
  2323. TSTTY2:  LDAXD;gET A BYTE FROM EXTENSION
  2324.  
  2325.  ANI7FH;sTRIP ANY FILE ATTRIBUTE BITS
  2326.  
  2327.  CMPM
  2328.  
  2329.  JZTSTTY3; mATCH, CONTINUE SCAN
  2330.  
  2331.  MOVA,M
  2332.  
  2333.  CPI'?';'?' IN TABLE MATCHES ALL
  2334.  
  2335.  JNZTSTTY1; nO MATCH, NEXT ENTRY
  2336.  
  2337. TSTTY3:  INXH;bUMP TABLE ADDRESS POINTER
  2338.  
  2339.  INXD;bUMP EXTENT POINTER
  2340.  
  2341.  DCRB;bUMP COUNTER
  2342.  
  2343.  JNZTSTTY2; cONTINUE FOR 3 CHARS
  2344.  
  2345.  LXIH,MEMFCB+8;uSER NAME
  2346.  
  2347.  LXID,CANT
  2348.  
  2349.  CALLTSTR;"can'T TYPE A '"
  2350.  
  2351.  MVIB,3;3 BYTE FILE TYPE
  2352.  
  2353. TSTTY5:  MOVA,M;gET BYTE
  2354.  
  2355.  CALLCTYPE;gIVE A CHANCE TO ABORT HERE
  2356.  
  2357.  INXH;nEXT BYTE
  2358.  
  2359.  DCRB
  2360.  
  2361.  JNZTSTTY5; tYPE ALL 3 BYTES
  2362.  
  2363.  LXID,CANT2;"' file ",cr,lf
  2364.  
  2365.  JMPDONEM;aND DO NEXT FILE
  2366.  
  2367. ENDIF;LIMITT
  2368.  
  2369. ;
  2370.  
  2371. ; tHIS PART IS ADAPTED FROM type109 BY dAVID rAND
  2372.  
  2373. ; A,F,B,C,D,E,H,L
  2374.  
  2375. GETSQB: LDARPTCNT; gET REPEAT FLAG
  2376.  
  2377. ORAA;aNY CHARS TO REPEAT ?
  2378.  
  2379. JNZGETSQ1; yES - GET AND COUNT
  2380.  
  2381. CALLNXTCH;gET A CHARACTER
  2382.  
  2383. RC;eOF
  2384.  
  2385. CPISQZDLE; rEPEAT BYTE FLAG
  2386.  
  2387. JNZGETSQ3; nO -
  2388.  
  2389. CALLNXTCH;yES - GET ANOTHER CHARACTER
  2390.  
  2391. RC;eof
  2392.  
  2393. ORAA;iF NULL
  2394.  
  2395. JNZGETSQ2
  2396.  
  2397. MVIA,SQZDLE;dLE IS ENCODED AS DLE,0
  2398.  
  2399. RET;rETURN WITH IT, CARRY CLEAR
  2400.  
  2401. ;
  2402.  
  2403. GETSQ2: DCRA;bUMP COUNTER TWICE
  2404.  
  2405. JZGETSQB; 1 REPEAT IS A NULL EVENT
  2406.  
  2407. GETSQ1: DCRA
  2408.  
  2409. STARPTCNT; sET REPEAT COUNT
  2410.  
  2411. LDARPTCHR; rETURN REPEAT CHARACTER
  2412.  
  2413. GETSQ3: STARPTCHR; sET REPEAT CHAR
  2414.  
  2415. ORAA;cLEAR ANY CARRY, NOT eof
  2416.  
  2417. RET
  2418.  
  2419. ;
  2420.  
  2421. ; nEXT DECODED BYTE FROM FILE, IGNORING REPEAT CHARACTERS
  2422.  
  2423. ; A,F,B,C,D,E,H,L
  2424.  
  2425. NXTCH:LXID,0;pOINTER @ STAR OF TEXT
  2426.  
  2427. LDACHAR
  2428.  
  2429. MOVC,A
  2430.  
  2431. NXTCH1: LDANUMFLT
  2432.  
  2433. ORAA
  2434.  
  2435. JNZNXTCH2
  2436.  
  2437. PUSHD;sAVE 'de'
  2438.  
  2439. CALLLBRGET; gET A BYTE FROM THE INPUT FILE
  2440.  
  2441. JNZPREEOF; nOT EXPECTING AN EOF HERE
  2442.  
  2443. POPD;rESTORE 'de'
  2444.  
  2445. MOVC,A
  2446.  
  2447. MVIA,8;'a' IS COUNTER
  2448.  
  2449. NXTCH2: DCRA;bUMP COUNT
  2450.  
  2451. STANUMFLT; sAVE IT
  2452.  
  2453. MOVA,C;gET CHARACTER
  2454.  
  2455. RRC;sHIFT RIGHT
  2456.  
  2457. MOVC,A;sAVE CHARACTER
  2458.  
  2459. PUSHPSW;sAVE CHARACTER
  2460.  
  2461. LXIH,XLATBL;iNDEX RAM AREA
  2462.  
  2463. DADD;hl=hl+(4*de)
  2464.  
  2465. DADD
  2466.  
  2467. DADD
  2468.  
  2469. DADD
  2470.  
  2471. POPPSW;rESTORE CHAR
  2472.  
  2473. JNCNXTCH3; iF NO CARRY
  2474.  
  2475. INXH
  2476.  
  2477. INXH
  2478.  
  2479. NXTCH3: MOVE,M
  2480.  
  2481. INXH
  2482.  
  2483. MOVD,M
  2484.  
  2485. MOVA,D
  2486.  
  2487. ANI80H
  2488.  
  2489. JZNXTCH1
  2490.  
  2491. MOVA,C
  2492.  
  2493. STACHAR
  2494.  
  2495. MOVA,D
  2496.  
  2497. CPI0FEH;sPECIAL END OF FILE ?
  2498.  
  2499. MVIA,EOF;yES - RETURN WITH eof CHARACTER
  2500.  
  2501. STC
  2502.  
  2503. RZ;aND CARRY FOR eof
  2504.  
  2505. MOVA,E
  2506.  
  2507. CMC
  2508.  
  2509. CMA
  2510.  
  2511. RET;wITH CARRY CLEAR, NOT eof
  2512.  
  2513. ;
  2514.  
  2515. ; sET UP THE TRANSLATION TABLE FOR THE SQUEEZED FILE
  2516.  
  2517. ; A,F,D,E,H,L
  2518.  
  2519. SQSETU: CALLGET2HL; gET 2 BYTES FROM INPUT FILE INTO hl
  2520.  
  2521. LXID,XLATBL;iNDEX RAM AREA
  2522.  
  2523. SQSET1: MOVA,H;gET msb
  2524.  
  2525. ORAL;tEST lsb
  2526.  
  2527. RZ
  2528.  
  2529. PUSHH;sAVE TABLE SIZE COUNTER
  2530.  
  2531. PUSHD;sAVE RAM AREA INDEX
  2532.  
  2533. CALLGET2HL; gET 2 BYTES FROM INPUT FILE INTO hl
  2534.  
  2535. POPD;rESTORE RAM AREA INDEX
  2536.  
  2537. XCHG;iNTO 'hl'
  2538.  
  2539. MOVM,E;sAVE THE lsb BYTE
  2540.  
  2541. INXH
  2542.  
  2543. MOVM,D;aND msb BYTE
  2544.  
  2545. INXH
  2546.  
  2547. PUSHH;bUMP & SAVE POINTER
  2548.  
  2549. CALLGET2HL; gET 2 BYTES FROM INPUT FILE INTO hl
  2550.  
  2551. XCHG;iNTO de
  2552.  
  2553. POPH;rESTORE POINTER
  2554.  
  2555. MOVM,E;sAVE THE lsb BYTE
  2556.  
  2557. INXH
  2558.  
  2559. MOVM,D;aND THE msb BYTE
  2560.  
  2561. INXH;bUMP POINTER
  2562.  
  2563. XCHG;rESTORE POINTER TO 'de'
  2564.  
  2565. POPH;rESTORE TABLE SIZE COUNTER
  2566.  
  2567. DCXH;dECREMENT IT THE BYTE COUNT
  2568.  
  2569. JMPSQSET1; aND LOOP FOR MORE
  2570.  
  2571. ;
  2572.  
  2573. ; aDD A LIBRARY MEMBER TO THE NAME QUEUE BUFFER IF A MATCH TO memnam
  2574.  
  2575. ; A,F,B,D,E,H,L
  2576.  
  2577. ADDMEM: MOVA,M;gET FIRST BYTE OF MEMBER ENTRY
  2578.  
  2579. ORAA
  2580.  
  2581. RNZ;nON ZERO - MUST BE DELETED OR NULL ENTRY
  2582.  
  2583. INXH;gO TO THE SECOND BYTE
  2584.  
  2585. PUSHH;sAVE SOURCE ADDRESS FOR COMING 'ldir'
  2586.  
  2587. PUSHH;sAVE IT AGAIN
  2588.  
  2589. MVIB,11;11 BYTE FILENAME
  2590.  
  2591. ADDME0: MOVA,M;gET BYTE
  2592.  
  2593. CPI' '
  2594.  
  2595. JNZADDME1; nOT SPACE - CONTINUE
  2596.  
  2597. INXH;nEXT CHAR
  2598.  
  2599. DCRB
  2600.  
  2601. JNZADDME0; cONTINUE SEARCHING FOR SPACES
  2602.  
  2603. POPH;mUST BE THE DIRECTORY
  2604.  
  2605. JMPADDME4; sO ABORT THIS ONE
  2606.  
  2607. ;
  2608.  
  2609. ADDME1: POPH
  2610.  
  2611. LXID,MEMNAM;iNDEX MEMBER fcb NAME
  2612.  
  2613. MVIB,11;11 BYTE COMPARE
  2614.  
  2615. ADDME2: LDAXD;gET BYTE FROM MEMBER NAME fcb
  2616.  
  2617. CPI'?';'?' MATCHES ALL ENTRIES
  2618.  
  2619. JZADDME3; mATCH
  2620.  
  2621. CMPM;sAME AS MEMBER ENTRY?
  2622.  
  2623. JNZADDME4; nO - ABORT THIS PROCESS
  2624.  
  2625. ADDME3: INXH
  2626.  
  2627. INXD
  2628.  
  2629. DCRB
  2630.  
  2631. JNZADDME2; cOMPARE ALL 11 BYTES
  2632.  
  2633. LHLDNAMPTR; gET DESTINATION ADDRESS
  2634.  
  2635. XCHG
  2636.  
  2637. POPH;gET SOURCE ADDRESS BACK AGAIN
  2638.  
  2639. MVIB,15
  2640.  
  2641. CALLMOVE;mOVE 15 BYTE BLOCK INTO MEMORY
  2642.  
  2643. XCHG
  2644.  
  2645. SHLDNAMPTR; sAVE NAME POINTER
  2646.  
  2647. LHLDMEMCNT; gET MEMBER NUMBER COUNT
  2648.  
  2649. INXH;bUMP IT UP ONE
  2650.  
  2651. SHLDMEMCNT; sET NEXT MEMBER MEMORY ADDRESS
  2652.  
  2653. RET
  2654.  
  2655.  
  2656.  
  2657. ADDME4: POPH;bALANCE STACK
  2658.  
  2659. RET
  2660.  
  2661. ;
  2662.  
  2663. ; gET THE NEXT MEMBER NAME FROM THE MEMORY NAME QUEUE BUFFER, 
  2664.  
  2665. ; RETURN CARRY SET IF NO MORE MEMBERS LEFT
  2666.  
  2667. ; A,F,B,D,E,H,L
  2668.  
  2669. GETMEM: LHLDMEMCNT; gET MEMBER COUNT
  2670.  
  2671. MOVA,L
  2672.  
  2673. ORAH
  2674.  
  2675. STC
  2676.  
  2677. RZ;zERO COUNT - SET ERROR CONDITION
  2678.  
  2679. DCXH;bUMP COUNT DOWN
  2680.  
  2681. SHLDMEMCNT; aND RESET MEMBER COUNT
  2682.  
  2683. LHLDNAMPT1; gET SOURCE ADDRESS FOR MOVE
  2684.  
  2685. LXID,MEMFCB;gET DESTINATION FOR MOVE
  2686.  
  2687. MVIB,15;11 BYTE FILENAME + 4 BYTE FILE INFO
  2688.  
  2689. CALLMOVE;tHE BLOCK
  2690.  
  2691. SHLDNAMPT1; rESET THE NEXT SOURCE ADDRESS
  2692.  
  2693. ORAA;cLEAR ANY CY
  2694.  
  2695. RET
  2696.  
  2697. ;
  2698.  
  2699. ; dOUBLE crlf TO CONSOLE
  2700.  
  2701. ; A
  2702.  
  2703. CRLFLF: CALLCRLF
  2704.  
  2705. ;"       "
  2706.  
  2707. ; cr AND lf TO CONSOLE
  2708.  
  2709. ; A
  2710.  
  2711. CRLF:MVIA,CR
  2712.  
  2713. CALLCTYPE
  2714.  
  2715. MVIA,LF
  2716.  
  2717. ;"       "
  2718.  
  2719. ; cHARACTER TO CONSOLE, PRESERVE ALL REGISTERS, TRACK LINES
  2720.  
  2721. CTYPE:PUSHPSW
  2722.  
  2723. PUSHD
  2724.  
  2725. MOVE,A
  2726.  
  2727. CPILF
  2728.  
  2729. JNZCTYPE1
  2730.  
  2731. LDALINCN1
  2732.  
  2733. INRA
  2734.  
  2735. STALINCN1
  2736.  
  2737. CTYPE1: MVIA,CIO;dIRECT CONSOLE OUTPUT
  2738.  
  2739. CALLSYS
  2740.  
  2741. POPD
  2742.  
  2743. POPPSW
  2744.  
  2745. RET
  2746.  
  2747. ;
  2748.  
  2749. ; crlf, THEN FALL THROUGH TO tstr
  2750.  
  2751. ; A,F
  2752.  
  2753. TSTRC:CALLCRLF
  2754.  
  2755. ;"       "
  2756.  
  2757. ; oUTPUT STRING (de)^
  2758.  
  2759. ; A,F
  2760.  
  2761. TSTR:PUSHD
  2762.  
  2763. TSTR1:LDAXD
  2764.  
  2765. ORAA
  2766.  
  2767. JZTSTRX
  2768.  
  2769. CALLCTYPE
  2770.  
  2771. INXD
  2772.  
  2773. JMPTSTR1
  2774.  
  2775. ;
  2776.  
  2777. TSTRX:POPD
  2778.  
  2779. RET
  2780.  
  2781. ;
  2782.  
  2783. IFEXTRACT
  2784.  
  2785. ; qUERY FOR FILE PURGE
  2786.  
  2787. ; A,F
  2788.  
  2789. QUERY: PUSHD
  2790.  
  2791.  LXID,EXISTS
  2792.  
  2793.  CALLTSTR
  2794.  
  2795.  CALLPAUSE
  2796.  
  2797.  POPD
  2798.  
  2799.  ADIEOF;cORRECT OUTPUT
  2800.  
  2801.  ANI05FH;uPSHIFT
  2802.  
  2803.  CALLCTYPE;aND ECHO
  2804.  
  2805. ; PUSHPSW
  2806.  
  2807. ; CALLCRLF
  2808.  
  2809. ; POPPSW
  2810.  
  2811.  CPI'y'
  2812.  
  2813.  RET;pURGE WANTED IF Z FLAG
  2814.  
  2815. ;
  2816.  
  2817. ; oPEN (CREATE) FILE outfcb^. rETURNS nz WHEN ALL WELL
  2818.  
  2819. ; A,F,D,E
  2820.  
  2821. OPNOUT:  LDAOUTUSR
  2822.  
  2823.  CALLSGUSER
  2824.  
  2825.  LXID,OUTFCB
  2826.  
  2827.  MVIA,OPEN
  2828.  
  2829.  CALLSYS
  2830.  
  2831.  INRA
  2832.  
  2833.  ORAA;eNSURE CARRY RESET
  2834.  
  2835.  CNZQUERY;wHEN FILE ALREADY EXISTS
  2836.  
  2837.  JNZDONE;aBORT IF NOT TO BE PURGED
  2838.  
  2839.  XRAA
  2840.  
  2841.  STABYTES;rESET BYTE COUNT
  2842.  
  2843.  STASECTOR; AND SECTOR COUNT
  2844.  
  2845.  STAOUTFCB+32;rESET OUTPUT RECORD NUMBER
  2846.  
  2847.  MVIA,DELETE
  2848.  
  2849.  CALLSYS;rEMOVE ANY OLD FILE
  2850.  
  2851.  MVIA,MAKE
  2852.  
  2853.  CALLSYS;aND CREATE A NEW ONE
  2854.  
  2855.  INRA
  2856.  
  2857.  PUSHPSW
  2858.  
  2859.  LDAINUSER
  2860.  
  2861.  CALLSGUSER; gO BACK TO INPUT ACCESS
  2862.  
  2863.  POPPSW
  2864.  
  2865.  RNZ;aLL WELL
  2866.  
  2867. ; "      "
  2868.  
  2869. ; fULLUP MESSAGE AND ABORT
  2870.  
  2871. FULLUP:  LXID,NOROOM
  2872.  
  2873.  JMPEXEUNT; aBORT EVERYTHING
  2874.  
  2875. ENDIF;EXTRACT
  2876.  
  2877. ;
  2878.  
  2879. ; oPEN lbrfcb FILE
  2880.  
  2881. ; A,F
  2882.  
  2883. FOPNLB: LXID,LBRFCB
  2884.  
  2885. ;"       "
  2886.  
  2887. ; oPEN FILE (de)^, DOING ANY SEARCHES, RETURN bdos RESPONSE
  2888.  
  2889. ; A,F
  2890.  
  2891. FOPENF: CALLFOPEN
  2892.  
  2893. CPI0FFH
  2894.  
  2895. RNZ;sUCCESS
  2896.  
  2897. LDAXD
  2898.  
  2899. ORAA
  2900.  
  2901. MVIA,0FFH; fAILURE FLAG
  2902.  
  2903. RNZ;bECAUSE A DRIVE WAS SPECIFIED
  2904.  
  2905. LDAALTDRV; sET SYSTEM DRIVE AND RETRY
  2906.  
  2907. STAXD;(A ZERO VALUE CAUSES USELESS RETRY)
  2908.  
  2909. ;"       "
  2910.  
  2911. ; oPEN FILE (de)^, RETURN bdos RESPONSE IN (a),
  2912.  
  2913. ; ASSUMES dma IS PRESET TO lbrbuf.
  2914.  
  2915. ; A,F
  2916.  
  2917. FOPEN:IFLIMITT; eNSURE NON-AMBIGUOUS NAME
  2918.  
  2919.  MVIA,SRCHF
  2920.  
  2921.  CALLSYS;sEARCH FOR OPENEE
  2922.  
  2923.  CPI0FFH
  2924.  
  2925.  RZ;fAILURE, NOT FOUND
  2926.  
  2927.  PUSHH
  2928.  
  2929.  PUSHD
  2930.  
  2931.  PUSHB
  2932.  
  2933.  LXIH,LBRBUF+1;cOPY THE NON-AMBIGUOUS NAME
  2934.  
  2935.  ADDA
  2936.  
  2937.  ADDA;4*
  2938.  
  2939.  ADDA
  2940.  
  2941.  ADDA;16*
  2942.  
  2943.  ADDA;32*
  2944.  
  2945.  ADDL
  2946.  
  2947.  MOVL,A;iNDEX INTO THE dma AREA
  2948.  
  2949.  ADCH
  2950.  
  2951.  SUBL
  2952.  
  2953.  MOVH,A;pOINT TO THE "FOUND" FILE
  2954.  
  2955.  MVIB,11
  2956.  
  2957.  INXD
  2958.  
  2959.  CALLMOVE;eXACT NAME INTO fcb
  2960.  
  2961.  POPB
  2962.  
  2963.  POPD
  2964.  
  2965.  POPH
  2966.  
  2967. ENDIF;LIMITT
  2968.  
  2969. ;"       "
  2970.  
  2971. MVIA,OPEN
  2972.  
  2973. ;"       '
  2974.  
  2975. ; eXECUTE bdos FUNCTION (a), PRESERVE REGISTERS
  2976.  
  2977. ; A,F
  2978.  
  2979. SYS:PUSHH
  2980.  
  2981. PUSHD
  2982.  
  2983. PUSHB
  2984.  
  2985. MOVC,A
  2986.  
  2987. CALLBDOS
  2988.  
  2989. POPB
  2990.  
  2991. POPD
  2992.  
  2993. POPH
  2994.  
  2995. RET
  2996.  
  2997. ;
  2998.  
  2999. ; mOVE (b) BYTES FROM (hl)^ TO (de)^
  3000.  
  3001. ; A,F,B,D,E,H,L
  3002.  
  3003. MOVE:MOVA,M
  3004.  
  3005. STAXD
  3006.  
  3007. INXH
  3008.  
  3009. INXD
  3010.  
  3011. DCRB
  3012.  
  3013. JNZMOVE
  3014.  
  3015. RET
  3016.  
  3017. ;
  3018.  
  3019. ; lIST FILENAME FROM fcb (hl)^
  3020.  
  3021. ; A,F,H,L
  3022.  
  3023. FNAME:PUSHB
  3024.  
  3025. MVIB,8;sIZE OF NAME FIELD
  3026.  
  3027. FNAME1: MOVA,M;gET A BYTE
  3028.  
  3029. ANI07FH
  3030.  
  3031. CPI' '
  3032.  
  3033. CNZCTYPE;PRINT NON-SPACE
  3034.  
  3035. INXH;nEXT CHAR
  3036.  
  3037. DCRB
  3038.  
  3039. JNZFNAME1; cONTINUE NAME
  3040.  
  3041. MVIA,'.'
  3042.  
  3043. CALLCTYPE;pRINT SEPERATOR
  3044.  
  3045. MVIB,3;3 CHARACTER EXTENT
  3046.  
  3047. FNAME2: MOVA,M;gET BYTE
  3048.  
  3049. ANI07FH
  3050.  
  3051. CPI' '
  3052.  
  3053. CNZCTYPE;PRINT NON-SPACE
  3054.  
  3055. INXH;nEXT CHAR
  3056.  
  3057. DCRB
  3058.  
  3059. JNZFNAME2; cONTINUE EXT
  3060.  
  3061. POPB
  3062.  
  3063. RET
  3064.  
  3065. ;
  3066.  
  3067. ; tHIS MUST PARSE THE COMMAND LINE INTO fcb1 AND fcb2, SETTING THE
  3068.  
  3069. ; APPROPRIATE DRIVES AND USER VALUES, AND SAVING OLD VALUES.  nOTE THAT
  3070.  
  3071. ; THIS ROUTINE SHOULD not ASSUME THAT THE COMMAND LINE IS UPSHIFTED, TO
  3072.  
  3073. ; ALLOW USE WITH ccplus WHEN THE NOUPSHIFT OPTION IS SELECTED, AND THUS
  3074.  
  3075. ; ENABLING USE OF sOFTWARE tOOLS ETC.  tHIS ROUTINE DOES NOT DENY
  3076.  
  3077. ; ACCESS TO THE CURRENTLY LOGGED IN DRIVE OR USER, SO THAT A PRIVILEGED
  3078.  
  3079. ; OPERATOR CAN ALWAYS USE THE PROGRAM ON HIS OWN AREA, EVEN THOUGH
  3080.  
  3081. ; NORMALLY RESTRICTED.nOTE THAT THE FACT OF LOGGING IN ESTABLISHES
  3082.  
  3083. ; THE EXISTANCE OF THE DRIVE UNIT.
  3084.  
  3085. IFDUSPEC; pARSE COMMAND LINE
  3086.  
  3087. PARSE: MVIA,GETDRV;sAVE ENTRY DRIVE
  3088.  
  3089.  CALLSYS
  3090.  
  3091.  STAOLDDRV
  3092.  
  3093.  CALLGETUSR; AND USER VALUES
  3094.  
  3095.  STAOLDUSR; FIRST SO ANY ERROR RESTORES
  3096.  
  3097.  LXIH,CMDLN
  3098.  
  3099.  MOVA,M;lINE LENGTH
  3100.  
  3101.  PUSHH
  3102.  
  3103.  INRA
  3104.  
  3105.  ADDL
  3106.  
  3107.  MOVL,A
  3108.  
  3109.  MVIM,0;mARK LINE END
  3110.  
  3111. ; "      "
  3112.  
  3113. ; cHECK FOR COMMAND LINE OPTION $u TO TOGGLE UNSQ/UNCR FLAG
  3114.  
  3115.  MVIA,' '
  3116.  
  3117. PARSE1:  DCXH
  3118.  
  3119.  CMPM
  3120.  
  3121.  JZPARSE1; IGNORE TRAILING BLANKS
  3122.  
  3123.  MOVA,M
  3124.  
  3125.  ANI05FH
  3126.  
  3127.  CPI'u'
  3128.  
  3129.  JNZPARSE4; NOT $u OPTION
  3130.  
  3131.  DCXH;bACKUP 3 CHARS.
  3132.  
  3133.  MOVA,M
  3134.  
  3135.  CPI'$'
  3136.  
  3137.  JNZPARSE4; NOT $u OPTION
  3138.  
  3139.  DCXH
  3140.  
  3141.  MOVA,M
  3142.  
  3143.  CPI' '
  3144.  
  3145.  JNZPARSE4; NOT DELIMITED, MAY BE PART OF FNAME
  3146.  
  3147.  MVIM,0;fOUND " $u" AT END, REMOVE FROM LINE
  3148.  
  3149.  LDANOUQZ;gET FLAG
  3150.  
  3151.  CMA;tOGGLE IT
  3152.  
  3153.  STANOUQZ;aND PUT IT BACK
  3154.  
  3155. ; "      "
  3156.  
  3157. PARSE4:  POPH;LINE BEGINNING PTR
  3158.  
  3159.  LXID,FCB1
  3160.  
  3161.  CALLSKIPBL; sKIP ANY LEADING BLANKS
  3162.  
  3163.  CALLSETDU
  3164.  
  3165.  JCHELPER; bAD SPECIFICATION
  3166.  
  3167.  MOVB,A
  3168.  
  3169.  LDAOLDUSR
  3170.  
  3171.  CMPB
  3172.  
  3173.  JZPARSE6; uSER OK IF ALREADY LOGGED ON TO IT
  3174.  
  3175.  LDAMAXUSR; lOAD MAXIMUM USER VALUE
  3176.  
  3177. PARSE5:  CMPB
  3178.  
  3179.  JCNOACC;iLLEGAL ON SYSTEM
  3180.  
  3181. PARSE6:  PUSHD
  3182.  
  3183.  MOVA,B
  3184.  
  3185. ; "      "
  3186.  
  3187.  IFEXTRACT
  3188.  
  3189.   STAINUSER; pRESERVE FOR OUTPUT FLIPPING
  3190.  
  3191.  ENDIF; EXTRACT
  3192.  
  3193. ; "      "
  3194.  
  3195.  STASAVUSR; sAVE FOR LATER
  3196.  
  3197.  POPD
  3198.  
  3199.  LDAXD
  3200.  
  3201.  CALLCHKDV
  3202.  
  3203.  JCNOACC;nO ACCESS OR NO SUCH DRIVE
  3204.  
  3205.  INXD;dRIVE IS ALREADY SET
  3206.  
  3207.  CALLSETNAM; sETUP FIRST FILE NAME
  3208.  
  3209.  CNZSKIPBL; dONT SKIP PAST EOL MARKER
  3210.  
  3211.  LXID,FCB2
  3212.  
  3213.  XRAA
  3214.  
  3215.  STAXD;kILL THE 2ND DRIVE SPEC.
  3216.  
  3217. ; "      "
  3218.  
  3219.  IFEXTRACT
  3220.  
  3221.   STAOUTFLG; dEFAULT NO OUTPUT FILE CREATED
  3222.  
  3223.  ENDIF; EXTRACT
  3224.  
  3225. ; "      "
  3226.  
  3227.  CALLSETDU;tO SKIP OVER ANY DU SPEC
  3228.  
  3229.  JCHELPER
  3230.  
  3231. ; "      '
  3232.  
  3233.  IFEXTRACT
  3234.  
  3235.   JZPARSE7; nO du SPECIFIED
  3236.  
  3237.   MOVA,B
  3238.  
  3239.   STAOUTUSR
  3240.  
  3241.   LDAXD
  3242.  
  3243.   STAOUTFCB
  3244.  
  3245.   XRAA
  3246.  
  3247.   STAXD;rESET DRIVE FIELD.
  3248.  
  3249.   DCRA;tO 0FFH
  3250.  
  3251.   STAOUTFLG; fLAG DOING OUTPUT
  3252.  
  3253.  ELSE;not EXTRACT
  3254.  
  3255.   JNZHELPER
  3256.  
  3257.  ENDIF; not EXTRACT
  3258.  
  3259. ; "      "
  3260.  
  3261. PARSE7:  INXD
  3262.  
  3263. ; "      "
  3264.  
  3265. ; pARSE FILENAME FROM (hl)^ INTO fcb AT (de)^
  3266.  
  3267. ; z-FLAG IF END OF LINE REACHED
  3268.  
  3269. ; A,F,B,D,E,H,L
  3270.  
  3271. SETNAM:  MVIB,8
  3272.  
  3273.  CALLSETFLD
  3274.  
  3275.  CPI'.'
  3276.  
  3277.  JNZSETNM2;        nO EXTENSION SPECIFIED
  3278.  
  3279.  INXH
  3280.  
  3281. SETNM2: MVI    B,3
  3282.  
  3283. ; "      "
  3284.  
  3285. ; sET FIELD LENGTH (b) IN (de)^ FROM (hl)^ UP, BLANK PADDING, z- FLAG
  3286.  
  3287. ; FOR END OF LINE.  lEAVE hl POINTING TO DELIMITER.  (A) := DELIMITER.
  3288.  
  3289. ; tRUNCATE ANY FIELDS LONGER THAN EXPECTED.
  3290.  
  3291. ; A,F,B,D,E,H,L
  3292.  
  3293. SETFLD:  CALLQDELIM; lOAD AND UPSHIFT CHAR
  3294.  
  3295.  JZSETFD4;        dELIMITER, GO BLANK PAD
  3296.  
  3297.  CPI'*'
  3298.  
  3299.  JNZSETFD1
  3300.  
  3301.  MVIA,'?';eXPAND '*' TO '?'S
  3302.  
  3303.  JMPSETFD2;        wITHOUT ADVANCING INPUT POINTR
  3304.  
  3305.  
  3306.  
  3307. SETFD1: INX    H
  3308.  
  3309. SETFD2: STAX   D
  3310.  
  3311.  INXD
  3312.  
  3313.  DCRB
  3314.  
  3315.  JNZSETFLD
  3316.  
  3317. SETFD3: CALL   QDELIM;       sKIP TO FIRST DELIMITER
  3318.  
  3319.  JZSETFD5;        aT A DELIMITER
  3320.  
  3321.  INXH;eLSE TRUNCATE
  3322.  
  3323.  JMPSETFD3
  3324.  
  3325.  
  3326.  
  3327. SETFD4: MVI    A,' ';       bLANK PAD
  3328.  
  3329.  STAXD
  3330.  
  3331.  INXD
  3332.  
  3333.  DCRB
  3334.  
  3335.  JNZSETFD4
  3336.  
  3337. SETFD5: MOV    A,M
  3338.  
  3339.  ORAA;z FLAG FOR EOL ONLY
  3340.  
  3341.  RET
  3342.  
  3343. ;
  3344.  
  3345. ; (a) := (hl)^ UPSHIFTED.  z FLAG IF A DELIMITER FOR FILE NAMES
  3346.  
  3347. ; A,F
  3348.  
  3349. QDELIM:  MOVA,M
  3350.  
  3351.  ANI07FH;jUST IN CASE
  3352.  
  3353.  CALLUPSHFT
  3354.  
  3355.  CPI07FH
  3356.  
  3357.  RZ;a RUBOUT IS A DELIMITER
  3358.  
  3359.  CPI'='
  3360.  
  3361.  RZ
  3362.  
  3363.  CPI','
  3364.  
  3365.  RZ
  3366.  
  3367.  CPI'_'
  3368.  
  3369.  RZ
  3370.  
  3371.  CPI'.'
  3372.  
  3373.  RZ
  3374.  
  3375.  CPI':'
  3376.  
  3377.  RZ
  3378.  
  3379.  CPI';'
  3380.  
  3381.  RZ
  3382.  
  3383.  CPI'<'
  3384.  
  3385.  RZ
  3386.  
  3387.  CPI'>'
  3388.  
  3389.  RZ
  3390.  
  3391.  CPI'['
  3392.  
  3393.  RZ
  3394.  
  3395.  CPI']'
  3396.  
  3397.  RZ
  3398.  
  3399.  CPI' '
  3400.  
  3401.  RZ
  3402.  
  3403.  RNC;
  3404.  
  3405.  CMPA;aLL CONTROLS ARE DELIMITERS
  3406.  
  3407.  RET;iNCLUDING eol
  3408.  
  3409. ;
  3410.  
  3411. ; sKIP TO NON-BLANK IN (HL)^.  z-FLAG IF eol REACHED.
  3412.  
  3413. ; aT ENTRY (hl) POINTS TO BYTE PREVIOUS TO FIRST TESTEE.
  3414.  
  3415. ; A,F,H,L
  3416.  
  3417. SKIPBL:  INXH
  3418.  
  3419.  MOVA,M
  3420.  
  3421.  ORAA
  3422.  
  3423.  RZ;eMPTY LINE, z-FLAG
  3424.  
  3425.  CPI' '
  3426.  
  3427.  JZSKIPBL; sKIP LEADING BLANKS
  3428.  
  3429.  RET;nZ, FOUND SOMETHING
  3430.  
  3431. ;
  3432.  
  3433. ; nO ACCESS EXIT
  3434.  
  3435. NOACC: LXID,ILLEGL
  3436.  
  3437.  JMPEXEUNT
  3438.  
  3439. ;
  3440.  
  3441. ; pARSE DRIVE/USER FROM LINE (hl)^  RETURN USER IN (a), SET DRIVE IN (de)^
  3442.  
  3443. ; aT EXIT (hl) POINTS PAST ANY DRIVE/USER SPECIFICATION. dRIVE/USER
  3444.  
  3445. ; VALIDITY IS NOT CHECKED HERE.  cARRY FOR ANY ERROR, Z-FLAG FOR NO ENTRY
  3446.  
  3447. ; A,F,B,C,H,L
  3448.  
  3449. SETDU: MVIA,':';sCAN FOR ':'
  3450.  
  3451.  CALLSCAN;rETURNS (a) = POSITION
  3452.  
  3453.  JCSETDU2; nO DRIVE/USER SPECIFIED
  3454.  
  3455.  CPI4
  3456.  
  3457.  JNCSETDU2; nOT IN 1ST 4 CHARACTERS, NOT DU SPEC
  3458.  
  3459.  MOVC,A;sAVE POSITION
  3460.  
  3461.  MOVA,M
  3462.  
  3463.  CALLUPSHFT
  3464.  
  3465.  SUI'@'
  3466.  
  3467.  RC;iLLEGAL, CATCHES INITIAL ':'
  3468.  
  3469.  STAXD;pREVENTING ANY SEARCHES UNLESS '@'
  3470.  
  3471.  INXH
  3472.  
  3473.  CALLGETUSR; dEFAULT, IF NONE SPECIFIED
  3474.  
  3475.  MOVB,A
  3476.  
  3477.  DCRC;rANGE 0...2
  3478.  
  3479.  JZSETDU1; nO USER SPEC
  3480.  
  3481.  MVIB,0
  3482.  
  3483.  CALLDECIN
  3484.  
  3485.  RC;iLLEGAL CHARACTER
  3486.  
  3487.  DCRC;rANGE 0..1
  3488.  
  3489.  JZSETDU1; oNE CHAR IN USER SPEC ONLY
  3490.  
  3491.  CALLDECIN
  3492.  
  3493.  RC;iLLEGAL CHARACTER
  3494.  
  3495. SETDU1:  ORI1;rESET z-FLAG, HAVE VALUES
  3496.  
  3497.  MOVA,B
  3498.  
  3499.  INXH;nOW POINT PAST THE ':'
  3500.  
  3501.  RET
  3502.  
  3503.  
  3504.  
  3505. SETDU2:  CALLGETUSR; nO SPEC, SET Z FLAG & DEFAULT USR
  3506.  
  3507.  CMPA;sET Z FLAG
  3508.  
  3509.  RET
  3510.  
  3511. ;
  3512.  
  3513. ; rETURN CURRENT USER IN (a)
  3514.  
  3515. ; A,F
  3516.  
  3517. GETUSR:  MVIA,0FFH
  3518.  
  3519. ; "      "
  3520.  
  3521. ; sET CURRENT USER TO (a)
  3522.  
  3523. ; A,F
  3524.  
  3525. SGUSER:  PUSHD
  3526.  
  3527.  MOVE,A
  3528.  
  3529.  MVIA,GSUSER
  3530.  
  3531.  CALLSYS
  3532.  
  3533.  POPD
  3534.  
  3535.  RET
  3536.  
  3537. ;
  3538.  
  3539. ; cHECK FOR VALID DRIVE SPECIFICATION (a).  cARRY FOR INVALID VALUE.
  3540.  
  3541. ; uSES GLOBAL "drvsup" VALUE AND "olddrv" VALUES
  3542.  
  3543. ; A,F
  3544.  
  3545. CHKDV: ORAA
  3546.  
  3547.  RZ;dEFAULT IS ALWAYS OK
  3548.  
  3549.  PUSHH
  3550.  
  3551.  LHLDOLDDRV
  3552.  
  3553.  CMPL
  3554.  
  3555.  POPH;sPECIFIC REFERENCE TO
  3556.  
  3557.  RZ;lOGGED IN DRIVE IS OK
  3558.  
  3559.  PUSHH
  3560.  
  3561.  LHLDDRVSUP
  3562.  
  3563. CHKDV2:  DADH
  3564.  
  3565.  DCRA
  3566.  
  3567.  JNZCHKDV2; sHIFT ACCESS BIT INTO CARRY
  3568.  
  3569.  POPH;cARRY FOR ACCESS AT THIS POINT
  3570.  
  3571.  CMC
  3572.  
  3573.  RET
  3574.  
  3575. ;
  3576.  
  3577. ; iNCORPORATE CHARACTER (hl)^ INTO THE VALUE (e) (DECIMAL).
  3578.  
  3579. ; cARRY FOR LLEGAL CHARACTER, ELSE ADVANCE (hl).
  3580.  
  3581. ; A,F,B
  3582.  
  3583. DECIN: MOVA,M
  3584.  
  3585.  SUI'0'
  3586.  
  3587.  RC;iLLEGAL
  3588.  
  3589.  CPI9+1
  3590.  
  3591.  CMC
  3592.  
  3593.  RC;iLLEGAL
  3594.  
  3595.  INXH
  3596.  
  3597.  PUSHPSW
  3598.  
  3599.  MOVA,B
  3600.  
  3601.  ADDA;2*
  3602.  
  3603.  ADDA;4*
  3604.  
  3605.  ADDB;5*
  3606.  
  3607.  ADDA;10*
  3608.  
  3609.  MOVB,A
  3610.  
  3611.  POPPSW
  3612.  
  3613.  ADDB
  3614.  
  3615.  MOVB,A
  3616.  
  3617.  RET
  3618.  
  3619. ;
  3620.  
  3621. ; sCAN (hl) UP FOR (a) OR TO eol (MARKED BY NULL).
  3622.  
  3623. ; rETURN (a) = RELATIVE POSITION (0 BASED), CARRY IF NOT FOUND.
  3624.  
  3625. ; A,F
  3626.  
  3627. SCAN: PUSHB
  3628.  
  3629.  PUSHH
  3630.  
  3631.  MVIC,-1
  3632.  
  3633.  DCXH
  3634.  
  3635. SCAN1: INXH
  3636.  
  3637.  INRC
  3638.  
  3639.  CMPM
  3640.  
  3641.  JZSCAN2;fOUND, CARRY CLEAR
  3642.  
  3643.  PUSHB;cHECK FOR END OF STRING
  3644.  
  3645.  MOVC,M;tHIS TEST OCCURS AFTER THE CHAR TEST
  3646.  
  3647.  INRC;sO THAT A NULL WILL BE FOUND. eLSE
  3648.  
  3649.  DCRC;a NULL SIGNIFIES END OF STRING.
  3650.  
  3651.  POPB;dON'T PLAY WITH MEMORY, MAY BE rom.
  3652.  
  3653.  JNZSCAN1;nOT eos, CONTINUE
  3654.  
  3655.  STC;eND OF LINE, NOT FOUND
  3656.  
  3657. SCAN2: MOVA,C
  3658.  
  3659.  POPH
  3660.  
  3661.  POPB
  3662.  
  3663.  RET
  3664.  
  3665. ;
  3666.  
  3667. ; tHIS RESTORES THE ENTRY DRIVE/USER VALUE
  3668.  
  3669. ; A,F,E
  3670.  
  3671. RESTOR:  LDAOLDUSR
  3672.  
  3673.  CALLSGUSER
  3674.  
  3675.  LDAOLDDRV
  3676.  
  3677.  MOVE,A
  3678.  
  3679.  MVIA,SETDRV
  3680.  
  3681.  CALLSYS
  3682.  
  3683.  RET
  3684.  
  3685. ;
  3686.  
  3687. ; uPSHIFT (a)
  3688.  
  3689. ; A,F
  3690.  
  3691. UPSHFT:  CPI'A'
  3692.  
  3693.  RC
  3694.  
  3695.  CPI'Z'+1
  3696.  
  3697.  RNC
  3698.  
  3699.  ANI05FH
  3700.  
  3701.  RET
  3702.  
  3703. ENDIF;DUSPEC
  3704.  
  3705. ;
  3706.  
  3707. IFEXTRACT
  3708.  
  3709. ; sEE IF WE USE WHEEL TEST.  iF SO, TEST WHEEL BYTE.
  3710.  
  3711. ; rETURNS z SET IF WHEEL NOT SET, OR NO FILE OUTPUT,
  3712.  
  3713. ; ELSE RETURNS WITH z NOT SET FOR OUTPUT TO FILE.
  3714.  
  3715. ; A,F
  3716.  
  3717. OUTTST:  CALLQWHL
  3718.  
  3719.  RZ;WHEEL NOT SET
  3720.  
  3721.  LDAOUTFLG; gET OUTPUT FLAG
  3722.  
  3723.  ORAA;tRUE FOR OUTPUT TO FILE
  3724.  
  3725.  RET
  3726.  
  3727. ENDIF;EXTRACT
  3728.  
  3729. ;
  3730.  
  3731. ; cHEEK WHEEL STATUS.  whladr = 0 ACTS AS IF WHEEL ON, ELSE CHECKS
  3732.  
  3733. ; nz FLAG FOR PRIVILEDGED OPERATION
  3734.  
  3735. ; A,F
  3736.  
  3737. QWHL:PUSHH
  3738.  
  3739. LHLDWHLADR
  3740.  
  3741. MOVA,M;gETS 0C3 OR 0CD AT LCN 0 IF WHLADR=0
  3742.  
  3743. POPH
  3744.  
  3745. ORAA;nON-ZERO MEANS PRIVILEDGED
  3746.  
  3747. RET
  3748.  
  3749. ;
  3750.  
  3751. NFOUND: DB'mEMBER '
  3752.  
  3753. NOFMSG: DB'nOT FOUND',CR,LF,LF,0
  3754.  
  3755.  
  3756.  
  3757. SIGNON: DBCR,LF,'lt',VER/10+'0',VER MOD 10+'0'
  3758.  
  3759. DB' [D[U]:]LBR/FILENAME [D[U]:][COMPONENT] [$U]'
  3760.  
  3761. DB'     BY c.b. fALCONER',CR,LF
  3762.  
  3763. SIGN1:DB'^s PAUSE, ^c ABORT, ^x NEXT'
  3764.  
  3765. DB' FILE, ^z STOPS PAGING',0
  3766.  
  3767.  
  3768.  
  3769. USAGE:DBCR,LF,'   tYPE/UNCRUNCH/UNSQUEEZE/UNlzh '
  3770.  
  3771. DB'FILES OR lbr MEMBERS',CR,LF
  3772.  
  3773. DB'   dRIVE/USER AFTER LBR/FILENAME '
  3774.  
  3775. DB'CAUSES FILE OUTPUT.',CR,LF
  3776.  
  3777. DB'   $u AT END DISABLES UNSQ/UNCR/UNLZH '
  3778.  
  3779. DB'OF COMPRESSED FILES',CR,LF
  3780.  
  3781. DB'   (WILDCARDS PERMITTED)'
  3782.  
  3783. DBCR,LF,LF
  3784.  
  3785. DB'eXAMPLES:',CR,LF
  3786.  
  3787. DB'   b>lt a3:hello source.azm     '
  3788.  
  3789. DB'   [CONSOLE]     (DEFAULTS TO hello.lbr)',CR,LF
  3790.  
  3791. DB'   a>lt lzhencod.dyc            '
  3792.  
  3793. DB'   [CONSOLE]     (HANDLES lzh ENCODING)',CR,LF
  3794.  
  3795. DB'   a>lt squeeze.dqc             '
  3796.  
  3797. DB'   [CONSOLE]',CR,LF
  3798.  
  3799. DB'   a>lt hello *.*               '
  3800.  
  3801. DB'   [CONSOLE, ALL TYPABLE]',0
  3802.  
  3803. ;
  3804.  
  3805. ; 2ND PART WHEN WHEEL SET OR DISABLED
  3806.  
  3807. WHLUSG: DB'   b>lt b:hello a4:source.aqm   '
  3808.  
  3809. DB'   [FILE]',CR,LF
  3810.  
  3811. DB'   b>lt b:hello a4:source.aqm $u'
  3812.  
  3813. DB'   [FILE WITH NO UNSQUEEZE]',CR,LF
  3814.  
  3815. DB'   a>lt b:crunch.azm a:         '
  3816.  
  3817. DB'   [FILE]',0
  3818.  
  3819.  
  3820.  
  3821. ABRMSG: DBCR,LF,'++ aborted ++',CR,LF,0
  3822.  
  3823. CLEAN:DBCR,'        ',CR,0;eRASE THE "MORE"
  3824.  
  3825. EOFMSG: DB'eARLY eof, ABORTED',0
  3826.  
  3827. EXISTS: DB' EXISTS, PURGE (Y/N)? ',0
  3828.  
  3829. FFSEP:DB' =>> ',0;fILE-FILE SEPARATOR
  3830.  
  3831. CORRPT: DB'lbr FILE CORRUPT',0
  3832.  
  3833. MBRMSG: DB'mEMBER: ',0
  3834.  
  3835. MORE:DB'[MORE] ',0
  3836.  
  3837. BADFILE:DBCR,LF,LF,BELL,'cORRUPT OR UNKNOWN FORMAT FILE',CR,LF,0
  3838.  
  3839.  
  3840.  
  3841. IFLIMITT
  3842.  
  3843. CANT: DBBELL," ...cAN'T TYPE A '",0
  3844.  
  3845. CANT2: DB"' FILE",CR,LF,0
  3846.  
  3847. ENDIF;LIMITT
  3848.  
  3849.  
  3850.  
  3851. IFEXTRACT
  3852.  
  3853. NOROOM:  DBCR,LF,LF,BELL,'nO SPACE, ABORTING',0
  3854.  
  3855. ENDIF;EXTRACT
  3856.  
  3857.  
  3858.  
  3859. IFLIMITL
  3860.  
  3861. EXCESS:  DBBELL,'tOO LONG, TRANSFER WITH kmd',CR,LF,0
  3862.  
  3863. ENDIF;LIMITL
  3864.  
  3865.  
  3866.  
  3867. IFDUSPEC
  3868.  
  3869. ILLEGL:  DBBELL,'aCCESS DENIED',CR,LF,0
  3870.  
  3871. ENDIF;DUSPEC
  3872.  
  3873. ;
  3874.  
  3875. ; -------------------------------------------------------------------
  3876.  
  3877. ;
  3878.  
  3879. DSEG
  3880.  
  3881. ; lINK THE DATA SEGMENT AFTER THE CODE.  uSE 2 PASSES IF NECESSARY.
  3882.  
  3883. ;
  3884.  
  3885. ; tEMPORARY STORAGE AREA
  3886.  
  3887. BUFPTR: DW0
  3888.  
  3889. CHRCNT: DB0
  3890.  
  3891. DB0
  3892.  
  3893. LINCN1: DB0;lINES PRINTED SINCE [MORE]
  3894.  
  3895. PAGLNS: DB0;lN/PAGE BEFORE PAUSE, 0 CAUSES SETUP
  3896.  
  3897.  
  3898.  
  3899. NAMPT1: DWENDU;nambuf
  3900.  
  3901. NAMPTR: DWENDU;nambuf
  3902.  
  3903. RCNT:DW65535;mAXIMUM. RECORD COUNT FOR TYPE
  3904.  
  3905.  
  3906.  
  3907. OUTPTR: DWOUTBUFF;fILE OUTPUT BUFFER
  3908.  
  3909. ; iT IS HELPFUL TO ENSURE THAT THE last INITIALIZED DATA ITEM
  3910.  
  3911. ; IS non-zero.eASES ANY FINAL TRUNCATION, ENSURES ccitcrc CAN RUN.
  3912.  
  3913. ;;
  3914.  
  3915. ; tHIS (UNINITIALIZED) PORTION TAKES UP NO SPACE IN THE CODE FILE
  3916.  
  3917. ; (WITH REASONABLE LINKERS - L80 ZERO FILLS)
  3918.  
  3919. BYTES:DS1;IN CURRENT OUTBUFF SECTOR
  3920.  
  3921. SECTOR: DS1;NO. IN OUTBUFF FILLING
  3922.  
  3923. MEMCNT: DS2;MEMBERS IN CURRENT LIBRARY
  3924.  
  3925. LBRFCB: DS9
  3926.  
  3927. LBRTYP: DS3
  3928.  
  3929. LBREXT: DS20;lBRFCB+12; FILE EXTENT
  3930.  
  3931. LBRSNO: DS1;lBRFCB+32; SECTOR #
  3932.  
  3933. LBRRNO: DS3;lBRFCB+33; RANDOM RCD NO.
  3934.  
  3935. MEMFCB: DS16
  3936.  
  3937. MEMNAM: DS16
  3938.  
  3939.  
  3940.  
  3941. OLDUSR: DS1
  3942.  
  3943. OLDDRV: DS1
  3944.  
  3945. SAVUSR: DS1
  3946.  
  3947.  
  3948.  
  3949. IFEXTRACT
  3950.  
  3951. INUSER:  DS1;tO RESTORE AFTER FILE OUTPUT
  3952.  
  3953. OUTFLG:  DS1;dO FILE OUTPUT IF TRUE
  3954.  
  3955. OUTUSR:  DS1;oUTPUT fcb USR
  3956.  
  3957. OUTFCB:  DS33;oUTPUT FILE fcb
  3958.  
  3959. DMAADD:  DS2;wRITE ADDRESS
  3960.  
  3961. OUTBUFF: DS128*REC;oUTPUT BUFFER
  3962.  
  3963. ENDIF;EXTRACT
  3964.  
  3965. ;
  3966.  
  3967. ; mARK START OF ZEROED AREA, PER COMPONENT LOOP
  3968.  
  3969. ZEROS:
  3970.  
  3971.  
  3972.  
  3973. NUMFLT: DS1
  3974.  
  3975. CHAR:DS1
  3976.  
  3977. RPTCHR: DS1;cHAR TO REPEAT
  3978.  
  3979. RPTCNT: DS1;cOUNT OF REPEAT CHARACTERS
  3980.  
  3981. LINCNT: DS1;nUMBER OF LINES PRINTED TOTAL
  3982.  
  3983. COLUMN: DS1;cRT COLUMN POSITION
  3984.  
  3985. ZERLEN: DS1
  3986.  
  3987. IFXPND
  3988.  
  3989. DLEFLG:  DS1;fLAG A DLE JUST RECEIVED
  3990.  
  3991. DLECNT:  DS1;cOUNT OF BLANKS TO EMIT
  3992.  
  3993. ENDIF;XPND
  3994.  
  3995. LASTZ:DS64;mARK END OF ZEROED AREA, STACK SPACE
  3996.  
  3997.  
  3998.  
  3999. STACK:DS2;sTORE ENTRY STACK POINTER
  4000.  
  4001. LBRBUF: DS128;mEMBER READ BUFFER
  4002.  
  4003. XLATBL: DS258*4
  4004.  
  4005.  
  4006.  
  4007. ENDBEGIN
  4008.  
  4009. , STACK SPACE
  4010.  
  4011.  
  4012.  
  4013.