[comp.sys.apple] DOS 3.3 Catalog to text file

bird@ihwpt.ATT.COM (J.L.Walters) (07/30/87)

A few weeks ago there were a number of requests for someone to upload a
program that would catalog a disk and save the result to a text file on a
disk. In answer to that the two programs LABELS and MENU were uploaded. These
programs were to be modified to perform the wanted function. The following is
my version. It is for DOS 3.3 only. It should be possible to modify for
ProDOS (he said confidently).

Recently, the same person that uploaded LABELS and MENU uploaded a
similar program that was much shorter and did not use an assembly
program hidden in a REM statement at line 0. It probably would be better
to modify that program to save the catalog to a disk. However, I am
still going to upload this file so those that are interested can see one
way to get an array to a disk file. In addition, the assembly code from
the REM statement has been disassembled and the commented source
provided below. At the end of the source is the (untested) 
procedure I would use to include such a program as line 0 of an
Applesoft program. Any constructive comments, etc., welcomed. 

                                        Joe Walters
                                        ihnp4!ihesa!bird
                                        (312) 979-3091

----------------- Assembly source hidden in REM 0 statement --------------

* Following is Merlin source.

ARYTAB = $6B ;Start of array storage
ARRAY = $5A1C ;Dummy start of array
CSWLL = $AA53 ;Output vector
CSWLH = $AA54
KSWLL = $AA55 ;Keyboard input vector
KSWLH = $AA56

 ORG $0800

* The following code lives in the REM statement at line
* zero of the CATALOG TO LABELS OR FILE AppleSoft file.

* The HEX data is Applesoft stuff for the REM
       HEX 00 ;Start of program
       DW NXTLNE ;Address of next Applesoft line
       HEX 00,00 ;This line number (zero)
       HEX B2 ;REM token
      
       LDA #<CUMBAK
       STA CSWLL 	;Intercept output to crt
       LDA #>CUMBAK
       STA CSWLH
       LDA #<OUT	;Applesoft start -1
       STA KSWLL 	;Keyboard input gets dumped
       LDA #>OUT
       STA KSWLH
       LDY #$08
       LDA (ARYTAB),Y 	;Find start of array storage
       STA AA+1		;Set AA to it
       INY
       LDA (ARYTAB),Y
       STA AA+2
       RTS
    
* CSWL (Input vector) points here. When a catalog is done,
* all input comes here. The file name is then stored in
* the array along with returns, etc.

CUMBAK AND #$7F
       CMP #$20
       BPL AA		;B/not lower than a space, i.e. not control
       ORA #$40		;Make control printable
AA     STA ARRAY
       INC AA+1
       BNE OUT		;B/not crossing page boundry
       INC AA+2
OUT    RTS		;Exit CSWL & KSWL
       HEX 00		;End of Applesoft Line marker
NXTLNE =   *		;Forms address of line 10

***********************************************************
* If you desire to change this program then:
*
* 1. Load the Applesoft "CATALOG TO LABELS OR FILE" FILE
*
* 2. Type the following which will overwrite line zero.
*    Make it a single line, not two as shown.
*
*   0 D$ =  CHR$ (4): INPUT "FILE NAME?";A$: PRINT D$"OPEN"A$:
*     PRINT D$"WRITE"A$: LIST 1 - : PRINT D$"CLOSE": END
*
* 3. Type RUN and follow along. (Name of XX is cool.)
*    This will save lines 10 through end as a text file.
*
* 4. Type NEW to clear Basic memory
*
* 5. BLOAD the changed "CAT TO LABELS OR FILE" (OBJ of this file)
*
* 6. Type "EXEC XX" which will cause lines 10 to end to be
*    reentered.
*
* 7. Type "SAVE CATALOG TO LABELS OR FILE" and you are done.
*
***********************************************************

----------------- Cut here and EXEC the following ----------------------

CALL-151
E00:38 A5 FF D0 32 D8 20 8E FD AD 30 BF 8D 6A 0E 20 00 BF C7 6D 0E 0D 80 02
E18:D0 1D 20 00 BF C5 69 0E B0 15 AD 81 02 29 0F AA E8 8E 80 02 A9 2F 8D 81
E30:02 20 00 BF C6 6D 0E A2 08 B0 0E 20 00 BF C3 70 0E B0 06 A2 26 20 53 0E
E48:AA 20 53 0E 4C D0 03 20 ED FD E8 BD 59 0E D0 F7 60 A0 F3 E1 F6 E5 E4 8D
E60:00 C5 F2 F2 EF F2 87 8D 00 02 00 81 02 01 80 02 07 7E 0E E3 FC 01 08 00
E78:00 00 FD AE 0C 15 07 C3 C1 D4 C1 CC CF C7 00
F00:D8 A0 00 84 FF 84 E0 A9 10 85 E1 20 67 FD E0 05 90 3B A2 00 20 3A 0F 85
F18:E2 A0 FF C8 20 3A 0F 06 E2 6A 06 E2 6A 91 E0 45 FF 85 FF C0 02 90 EC 98
F30:65 E0 85 E0 90 DE E6 E1 B0 DA E8 BD 00 02 0A C9 40 F0 F7 E9 7E 90 02 0A
F48:60 68 68 90 BE 4C 69 FF
F00G
.?|G?D?qhEgLRSihGXLSiPhzLdTihEGLUSi_GXpjLBpGGXpjLAqG_Jh~H?_OAHH?L
.zXYmBpGOKBmqGG_?O@GIC?q_iCNMGfS_iSNTgBG_iSGHaR_KiHMD?_b_Ae_QgDL_
.i@ANgUDmI_KHgMD_Ao_HaR_@iRRDiLAKaX_BiNCDBk?F?GS?Qq_MgNS_iF@QiA@F
._Dm_iSGDI_QDaL_@aS_KiHMD?_o_IaJMiNVRAa_SiG@SI_SGaD_MiDWSI_KHgMD_
.gHR_?po?oLG]C?q??RHgC?q_iOTQiONRaD_NaE_OiQNFiQ@LI_HRI_SNI_OQiHMS
.G_@_iCHRaJ_Bi@S@iKNFI_SNI_K@iADKaR_NaM_XiNTQG?JH@q?qI_OQiHMSgDQ_
.gNQ_gSN_iR@UaD_SgGD_iEHKaD_Mi@LDaR_SaN_@I_SDgWS_iEHK_Dm?_PH{C?q?
.afHEC?HyPVy|EyEMi@LD?cgp?othC?GHaO?H{OUg?ohybCcOofgsAhyBoOoyWyCc
.IaOQ?boaC?tH`Y?a?pqyOUsyOya{iOTSI_HMI_XNgTQ_iCHR_J_eI_GHaS_@I_JD
._X}aC?zH`c?qK?HH`m?}_@cyWy@cCyV?qgHwC?ju?roo@oyqI_B@iS@KgNF_gSN_
.iLDLiNQX??gIPA?qA__OAc_HaM_QgDL_iRSLgSR_iADKgNV_iBNMiS@HaM_OiQHM
.iSDQI_BNiMSQiNKRI_ENaQ_DiORNaM?bCIK?Oq__i@RBgHH_?pt_A|_BiNLOiQDR
.iRDCI_LNgCDk?_qv?kwr?kp_A|_RiTARiBQHgOS_gNMkC?]IPU?q?__q?vkt?pkp
.?w_|?_pqI_KHiMDRI_ODaQ_HiMBG?k_q?vkv?p_|I_CNiTAKaD_RiSQHgJD?pYI_
.C?q__Oc_?|__iBGQ?c_g?pth?_j_I_BG_Qc_?gqv?h_jA__BgGQc?_gw?rh_?j__
.iBGQ?c_g?ph?@cJiC?q__Oc_A|_O?c_jI_BG_Qc_?gqv?h_jI_BG_Qc_?gtp?h_j
.I_BG_Qc_?gpw?h_jI_BG_Qc_?gqv?h_jI_BG_Qc_?gvp?h?iCJs?Qq?HCJ}?Qq_A
.iDKNaV_HaR_EgNQ_iHL@iFDViQHSgDQ?bNJGC?q?bsJQG?Oc{Ofg?qvh{Gfg?wph
.Cyq_iTKSgQ@_iBNMaC_DgSBmC?UJq[?OMcOONcGf?gqvNhGf?guuNhGf?gqvNhGf
.?grr@h?[KJe?Rq?OKJo?jBBO?rqyQq_EiHKDiM@LaD_QiDRSiQHBiSDC?_qtI_BG
.i@QRI_ENaQ_Ki@ADgKR?BAKyC?ap@qy]CyyaiOQHgMS_iK@AgDK_gNQ_iVQHgSD_
.iB@Si@KNaF_SaN_CiHRJ?a?S?KC@P\yyCyyaaKnB?~_a?z?a?KM@W}@cCy\yWy@c
.G?XK@W@lb@cOGaBawM@cqOabMaCBkBOr@vyqI_@KiKNVI_ETgKK_?ro_iBG@gQR_
.gHM_iM@LaD?^?Ka@Qq?z?Kk@Z@HOKp@p?otyYlM@AcgHMhOAKcCr?ro?O[KuJ@BO
.kBGpIyM@AcgHNhOgIgM@AcgHAhkB_BhyWAH?QaK?C@q?QnKIE@lBrOoC?twoK?FK
.`S@lb@cOGaBawM@cqOabLaCj?uroK?UK`]@VCyap@pyU@sy]K?~K`g@yIaDMiSDQ
.I_CDiRBQiHOSiHNMA_gM_N_kI_NQ?_yh@aya?pr?AMLqC@\yOCa}AazC_Hc?AvL{
.C@VyjBBOApyCbHcOqggC_Hck?rqhGyYc{OgggM@c?goh?kpvAh?^CLE@OaptCyUt
.CyyaiOQHiMSDaQ_QiD@C_X_gaXnM?h~a@zy}_@c?`~LOE@y@@cyyEyl@KcOabXaM
.b@cOGaxasCVyOjss@o?_CLY@OUtyQyaDiWHSA_gXGnMh?~azEy}@@cyy_@cyPy?x
.CLc@Wl@cqOaXMaM@KcOabxaC?uqx?xx?pCLmC@VyOjrxBo?fCLw@[yfg?shzIaOQ
.?bpaEyyO?czyWyYcKz?r?shzgCHcK?qLqA@KiHMDoOq?B?MKE@@HyOBBz@BF?q?L
.KMU@YyM@AcgH?hz?BgM_I@KHjMDOiKHMkDGpEylHrGpNkBCt?qo?bBMiE@yM_@cg
.kHGp@hyliKHMkDOpKvCt?to?bIMsE@AHG?RMp}@j?troG?XM@GAyC?AMAQAKiHMD
.yOKHjMDG@pyliKHMkDPpLvC@mHOKiHMDo@pvCyyyWAH?OJM[CAjt?vo?OpMeIABB
.zOHG@qyljBBPkBGpvCyf?gshAzaO_Qbo@ayVCyapBo?c?MoAYlBBzPBGLpCyIaB@
.iS@KgNF_iQDPiTHQgDR_i@MNiSGDaQ_Ki@AD_KayOjrxBo?}?MyA[yfg?shzIaOQ
.?boaCyyyPVyj?txo??XN`CAVCyatCyyagMN_iEHKgDR_iENTgMCa??xN`MAa?poy
.Qya@iMNSiGDQI_CHgRJ_GgXn_Mh_?~a?aUNWEA}@@cyy_@cyWl@cqOaMMaM@KcOa
.bmaCQ??lGNaAWl@cqOaXMaM@KcOabxaCOjpoC?DN`kAyofgvBhzf?gwhGz@c@zyj
.?uooC?JN`uAqC?fNP?AqI_B@iS@KgNF_gSN_iEHKaD_RiSTEbE?DCNIAQVyKkNOo
.Cyq_I_EHgKD_iMNSI_KNiBJDbC?iCNSAkMOr@oyo?wqoEylHzNMGMpMHrOpMbAcO
.?a~asCju?to?ppN]CAq_??dOPgAdOjpo?toyOq__gFN_iNMDgQQ_gHE_iEHKaD_K
.iNBJgDCniCNDgRMfaS_DiWHRaS?ACOqAPyyy_CcaiQDMi@LD?_az_Epc?aka_Epc
.G?yOP{AyIaEHgKD_iDWHiRSRAm_@iOODgMC_gNQ_iNUDiQVQiHSDAm_@GnN_?~_a
.Ey}@@cyy_@c?R`OEEAl@KcOab@aMb@cOGa`auCyCAca@iOODgMCa_EpcCyjv?ro?
.RqOOEAyCAcaNiODMGaEpBc?CKOYAWyCcIaVQiHSDGaEpBc?NKOcAZ@HOMp@BK?aO
.qmA@NcOiIgM@AcgH?hkwBh?lKOwAWy@cEyAHK?~O@ABy_CcaiBKNgRDa_Epc??VP
.@KBljKNPrNoCWyCcIaKNgBJa_EpcG?BP@UByIa@MiNSGgDQ_iCHRaJ_NaQ_PiTHS
.A__@GnP_?_~aEy}@@cyy_@c?_WP_EBl@KcOabPaMb@cOGapasC??__PiCBjpAo?f
.?PsBOq_?O`P}CBq_A__QgDL_iFDSI_RSiQHMaF_NaE_KiDMFgSG_gMN_iKNMiFDQ
.I_SGg@M_GaMaI_BGi@QRK?`P`GBqA__NaM_DiWHSG_Ep?c_|I_RSiQHM_Fk__Ac_
.A|_Ki@RSI_BGg@QkG_H_A|_BiNTMaS_NaE_BiG@Q_R?fGQQBOq__gHE__H_}G_M_
.?j_pI_SGgDM_iSNNI_L@gMX_iBG@gQRmG_H_?{|_aM_SiGDMI_NJI_TMiKDRaR_A
.?c_|?_~?aOQ[CByyOappCyya?___A__FiHUDI_TRI_XNgTQ_iEHKaD_Mi@LDAa?|
.GQeBOyagiM@LaD_LiTRSI_ADA_aMAa_NaQ_KiDRRI_BGi@Q@iBSDgQRh@a?kGQoB
.P]yy?a__?__~I_ENaQ_Bi@S@iKNFI_NQI_DRaB_SaN_PiTHS?___@ay\K?AQ`yBy
.GyEpKcOa@ay@kHOpz@MGBp?ICQCBW}AcK?bQPMBlbAcOofgwLhCj?ppp@oyqA__]
._G?GCRWBWlAcoOa~LaCVCyyyWyCcIaB@iS@KgNFaCyyyW}@cCyp?@jRaEBlANcOf
.?gprLhCpCyq_I_B@iQQHi@FDI_QDiSTQaM?BCRkBWlAc{Ofg?qvhpCy?Cyq_I_DR
.aB?lCRuBWlAc{Nfg?rphsCjx?xoyOq__iOQHiMS@iAKDI_BGi@Q@iBSD`Q?UKR?B
.[yfg?vhzCyq_I_ADgKK_iENQI_HMiU@KgHC_iBG@iQ@BiSDQC?^RpIBj?xooC?eR
.pSBq@_?nKR]BWyAc@z?}KRgB_EpcwOEpMcGABc?CKRqBRA?JKR{BOq_?o~RECCyy
.PyyyGaH_iR@H_C_akMHpAa_NaQ_KiDRRAm_Og@X_i@SSiDMSiHNM@ayj?wwo??ES
.@OCq?_?f?SYC[lag?qqqNhPNBpoCOjvq@oyqA__MgDV_iEHK_D?{?ScCQyaSgGD_
.iEHK_D__GaEpAc?j?SmCQyaHaR_KiNBJgDCmI_TMiKNBaJ_NaQ_EiNQFgDSmG_Tn
._E_~?_ayW}@cC?MS@wCy_@cyWl@cqOaEMaM@KcOabeaCFyKH?rqw@wyj?po?QgSA
.ECyCAcaTiMKNgBJa_EpcIyKNoOpyPe?nGSKCOq_?Q}SUEClH{POqOjpp?so?qQS_
.JCHOkHHqEyyA?ca_GaAcBz?hGSiC_Epc{Ogg_EpcGkHhCyjp?opo??DTasCEBpcO
.?aaykHOpCyUpCyyaB_af?gwh?z?MGT}COjxo?o?SBTVuO??xBTWuQq_QiD@CI_B@
.iS@KgNF_gSN_iLDLiNQXI_QNiTSHgMD?_PTauu@HrOp@?rwybAcObAcG?a|aCyA?
._nTkuu@HoOpoKt@p{FHpIyM@gLDcGgHhwOAcCyA?ODTuyuM@gLDc?goh{Ogg_Ack
.?pxhC?gTlDua?pqyOUpqCy]yQyaQiD@CiHMFI_B@iS@KgNFaCy\?QsTIsuap@qyU
.?qx?q?TXtudj?uro?vt?qVT]suKq?otsEyyCAcaBi@S@iKNFBa?wJTbuOxqp?uko
.EyyCAcaO_Qbo@ayy_CcagHMb?oayOy?eJUgu[lgggM@c?goh?kphoOa_LaCa?pqy
.[KHw?uwyOya`?``_iDQQgNQ_?az?a\UqvulgIgM@?cgo?hkpKhOaB_aCOyalI_TM
.i@AKaD_SaN_QiD@CI_CHiQDBiSNQ_X_`?``aG?vUlvulqggM_@cg?ohkBphO?a_a
.sCjt?xo?QAU{suVyOjpu@o?_NU~xOIpyOya_?___AwoM@ay{?oku?rxx@wyI?o??
.C?T?

BSAVE CATALOG TO LABELS OR FILE,A$1000,L$0EA1
E00G

lc@pbhyd.UUCP (Larry Colton) (07/30/87)

In article <1860@ihwpt.ATT.COM> bird@ihwpt.ATT.COM (J.L.Walters) writes:
>A few weeks ago there were a number of requests for someone to upload a
>program that would catalog a disk and save the result to a text file on a
>disk. In answer to that the two programs LABELS and MENU were uploaded. These
>programs were to be modified to perform the wanted function. The following is
>my version. It is for DOS 3.3 only. It should be possible to modify for
>ProDOS (he said confidently).
>

Nothing special is required to capture a ProDOS directory into an Applesoft 
array as ProDOS is much more flexible than DOS 3.3 in file handling 
capabilities.  A directory can be opened and read just like any other file 
by using the ,t argument: 
     PRINT CHR$(4)"OPEN DIR.NAME,TDIR":PRINT CHR$(4)"READ DIR.NAME".
It is then a simple matter to INPUT into an array as you would any text file.
Since the number of files in a directory can vary, you should DIM the array
to the maximum size directory you anticipate encountering (remember there is
no limit to the number of files in a subdirectory).  You should use an
ONERR statement to trap the OUT OF DATA message and exit your input loop
when reading directories shorter than your DIM value.  Remember to CLOSE 
the directory when done reading it.


---
Larry Colton                      {ihnp4,pyramid,qantel}!ptsfa!pbhyd!lc
Pacific * Bell                                                San Diego