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