🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: comp.sources.apple2
1 messages
1 total messages Started by Jonathan A. Chandross Wed, 01 May 1991 21:34
v001SRC031: AAF Tools in Basic
#30
Author: Jonathan A. Chandross
Date: Wed, 01 May 1991 21:34
340 lines
12159 bytes
Submitted-by: Andy Tefft (ART100@psuvm.psu.edu)
Posting-number: Volume 1, Source:31
Archive-name: archive/aaf_basic
Architecture: ANY_2
Version-number: 1.00

The AAF (Apple Archive Format) tools implemented in Basic, for those of
you lacking a C compiler.

Enjoy.

=paaf.doc
-
-Andy Tefft
-ART100@psuvm.psu.edu
-99 E. Main St.
-North East, PA 16428
-
-paaf.bas
-Version 1.00
-
-Features of this version:
-
-- lets you change the filename that it writes into the file
-  if you desire (for the = line)
-- if you try and write a line > 79 columns (which would be truncated
-  by mailers) you are warned, but the line is written as-is anyway.
-
-You can choose to create a new archive or append to an existing
-one. The only real difference is if you choose "new" the archive
-is deleted if it exists already. It is ok to use "append" on
-a new file.
-
=paaf.bas
- 1  ONERR  GOTO 2000
- 4  LOMEM: 16384
- 5 IN$ = "X": REM  must be first string assigned
- 10  TEXT : HOME
- 15  PRINT "AAF Packer, v1.0"
- 20  PRINT : PRINT "By Andy Tefft (art100@psuvm.psu.edu)"
- 25  PRINT : PRINT "Freeware. Use with appropriate caution."
- 30  PRINT : PRINT "Notes:"
- 40  PRINT : PRINT "1) 'Pathname' means any valid ProDOS'
- 45  PRINT "   full or partial pathname."
- 46  PRINT
- 50  PRINT "2) Pressing RETURN at the input/output"
- 55  PRINT "   file prompts returns you to the menu"
- 60  PRINT : PRINT "3) Both input and output volumes must"
- 65  PRINT "   be online."
- 70  PRINT : PRINT "4) Looks best in 40 columns."
- 75  PRINT : PRINT "5) You will be warned when adding lines"
- 76  PRINT "   longer than 79 columns."
- 80  PRINT : PRINT "Press a key to continue"
- 90  GET A$
- 120  FOR R = 768 TO 788: READ X: POKE R,X: NEXT : REM input-anything
- 130  DATA 162,0,32,117,253,160,2,138,145,105,200,169,0,145,105,200
- 135  DATA  169,2,145,105,96
- 140 D$ =  CHR$ (4)
- 145  DIM OU$(100)
- 150  PRINT D$"prefix": INPUT PR$
- 160  TEXT : HOME
- 165  PRINT "AAF Packer v1.0   Andy Tefft   11/23/90"
- 170  PRINT : PRINT "Prefix: "PR$
- 171  PRINT "---------------------------------------"
- 172  POKE 34,5
- 175  PRINT : PRINT "Menu:"
- 176  POKE 32,5
- 180  PRINT : PRINT "P)refix": PRINT "C)atalog"
- 181  PRINT
- 185  PRINT "A)ppend to an archive"
- 190  PRINT "N)ew archive"
- 195  PRINT : PRINT "E)xit"
- 199  POKE 32,0
- 200  VTAB 18: GET C$
- 210  IF C$ = "e" OR C$ = "E" THEN  END
- 220  IF C$ <  > "C" AND C$ <  > "c" THEN  GOTO 300
- 230  INPUT "Directory to catalog, return for prefix:";C$
- 240 S = 1: REM  section for error check
- 250  PRINT D$"cat"C$
- 260  PRINT "Press a key to return to menu.";: GET A$
- 270  HOME : GOTO 175
- 300  IF C$ <  > "P" AND C$ <  > "p" THEN 400
- 310 S = 2: REM  for error checking
- 320  PRINT : INPUT "New prefix: ";C$
- 325  PRINT D$"prefix"C$
- 330  GOTO 150
- 400  IF C$ = "A" OR C$ = "a" OR C$ = "N" OR C$ = "n" THEN 410
- 405  HOME : GOTO 175
- 410  IF C$ = "N" OR C$ = "n" THEN NF = 1: REM  new file
- 420  PRINT "Archive pathname (return for menu)": INPUT ": ";OF$
- 425  IF OF$ = "" THEN  HOME : GOTO 175
- 430 S = 3: REM  section for errors
- 440  PRINT D$"open"OF$: PRINT D$"close"OF$
- 450  IF NF THEN  PRINT D$"delete"OF$
- 460  INPUT "Pathname of file to add to archive?     : ";I$
- 465  IF I$ = "" THEN  HOME : GOTO 175
- 470 S = 4
- 471  PRINT D$"verify"I$
- 475  PRINT : PRINT "Filename to put in archive? (return for"
- 476  PRINT I$;: INPUT " : ";FF$
- 477  IF FF$ = "" THEN FF$ = I$
- 482  PRINT D$"open"OF$
- 483  PRINT D$"append"OF$
- 484  PRINT D$"write"OF$
- 485  PRINT "= "FF$
- 488  PRINT D$
- 490  PRINT D$"open"I$
- 500  PRINT D$"read"I$
- 505 S = 5
- 510  FOR L = 1 TO 100
- 520  CALL 768:IN$ =  MID$ (IN$,1)
- 525  VTAB  PEEK (37)
- 530  IF  LEN (IN$) < 80 THEN 550
- 540  PRINT : PRINT ">>> Warning: Line too long:"
- 541  PRINT : PRINT IN$
- 545  PRINT
- 550 OU$(L) = "-" + IN$
- 560  NEXT
- 570  PRINT D$
- 580  PRINT D$"write"OF$
- 590  FOR L = 1 TO 100
- 600  PRINT OU$(L): NEXT
- 610  PRINT D$
- 620  GOTO 500
- 700  PRINT D$"write"OF$
- 710  FOR LL = 1 TO L - 1
- 720  PRINT OU$(LL): NEXT
- 725  PRINT "+ End of file "FF$
- 730  PRINT D$"close"
- 740  PRINT ">>> Finished. Hit a key for menu."
- 745  GET A$
- 750  GOTO 150
- 1999  END
- 2000 Y =  PEEK (222)
- 2010  PRINT
- 2020  IF Y = 5 AND S = 5 THEN 700
- 2030  IF Y = 6 AND S = 2 THEN 2100
- 2035  IF Y = 6 AND S = 1 THEN 2200
- 2040  IF Y = 6 AND S = 3 THEN 2300
- 2050  IF Y = 6 AND S = 4 THEN 2400
- 2055  PRINT D$"close"
- 2060  PRINT ">>> Error #"Y: END
- 2100  PRINT : PRINT ">>> Error: Volume/dir not found."
- 2105  PRINT
- 2110  GOTO 320
- 2200  PRINT : PRINT ">>> Error: Volume/dir not found."
- 2205  PRINT
- 2210  GOTO 230
- 2300  PRINT ">>> Error: File/directory not found."
- 2310  PRINT : PRINT "Insert disk if necessary, then hit"
- 2320  PRINT "return to continue, ? for catalog"
- 2330  INPUT C$: IF C$ = "" THEN 420
- 2340  INPUT "Pathname? (return for current prefix)   : ";C$
- 2350  PRINT D$"cat"C$
- 2360  PRINT "Hit a key.": GET A$: PRINT : GOTO 420
- 2400  PRINT ">>> Error: input file not found."
- 2410  PRINT "Hit return to try again, ? for catalog"
- 2420  INPUT ": ";C$
- 2430  IF C$ = "" THEN 460
- 2440  INPUT "Pathname? (return for current prefix)   : ";C$
- 2450  PRINT D$"cat"C$
- 2460  PRINT "Hit a key.": GET A$: PRINT : GOTO 460
-
=upaaf.doc
-
-Andy Tefft
-ART100@psuvm.psu.edu
-99 E. Main St.
-North East, PA 16428
-
-upaaf.bas
-Version 1.00
-
-This should be exec'ed under basic.system and then saved
-as aaf.unpacker.
-
-Some notes that may/may not be mentioned in the program itself:
-
-- it handles multiple files in one posting (of course)
-- it echoes lines to the screen that are before the first =
-  and after the last + (this isn't specified in the specs)
-- it attempts to detect whether the last file in the archive
-  was closed with a + line, and issues a warning if it's not.
-  it does not however check for a new = line occurring before a
-  + line. If this mistake exists in the file, the = line will
-  simply be echoed.
-- Because it's not easy to edit the archive on an apple //,
-  it will prompt for an output file name (default can of
-  course be used)
-- "pathname" means any valid prodos pathname, with or without
-  a leading volume/directory name. The prefix is shown and
-  prepended to any filenames without a leading slash (by prodos,
-  not my program). Use of an invalid pathname will generate
-  cryptic errors
-- control-c will exit the program at any time, and will display
-  error #255 and close all files. Because the program builds
-  up a list of the last 100 output lines to write to the file,
-  up to the last 100 lines will not be written to the output
-  file if you interrupt the program. Same for a disk full
-  error.
-- both input and output volumes must be online at the same time.
-  I had planned on allowing volume switches (that's why I buffer
-  100 output lines at a time), but I won't unless someone requests
-  it.
-- Output is formatted for 40 columns, but 80 columns can be
-  used if desired (this makes in-file comments easier to read).
-  80/40 columns should be selected by the user before running
-  the program.
-- ">>>" prefixes messages from the program (except prompts)
-  to distinguish them from in-file comments
-- input anything routine is (I think) from an old dos 3.3
-  public domain disk I found. It allows , and : in input lines.
-  Examine the program for usage.
-
=upaaf.bas
- 4  LOMEM: 16384
- 5 IN$ = "X": REM  must be first string assigned
- 10  TEXT : HOME
- 20  PRINT "AAF Unpacker, v1.0"
- 22  PRINT : PRINT "by Andy Tefft  (art100@psuvm.psu.edu)"
- 24  PRINT : PRINT "This program is freeware. Do what you"
- 25  PRINT "want with it, but don't blame me if you"
- 26  PRINT "break it."
- 28  PRINT : PRINT "Notes (list program for more):"
- 30  PRINT : PRINT "1) When asked for a pathname, use"
- 32  PRINT "   a full or partial pathname."
- 34  PRINT : PRINT "2) Type 'PR#3' before running to use"
- 36  PRINT "   80 columns."
- 38  PRINT : PRINT "3) Only minimal error checking is done."
- 40  PRINT : PRINT "4) Input and output volumes must both"
- 42  PRINT "be online."
- 44  PRINT : PRINT "Press a key to continue"
- 45  GET A$
- 50  REM  ARCHIVE FORMAT:
- 55  REM
- 60  REM  = filename : denotes output file name
- 70  REM  - line     : line of output file
- 80  REM  + anything : end of file ("anything" ignored")
- 85  REM
- 86  REM  all other lines echoed to screen
- 87  REM
- 90  REM  because of the difficulty of editing text files
- 91  REM  on the apple //, this program prompts for output
- 92  REM  file names, so you can change them if desired.
- 93  REM
- 94  REM  input anything routine is from an old dos 3.3
- 95  REM  public-domain disk
- 96  REM
- 120  FOR R = 768 TO 788: READ X: POKE R,X: NEXT : REM input-anything
- 130  DATA 162,0,32,117,253,160,2,138,145,105,200,169,0,145,105,200
- 135  DATA  169,2,145,105,96
- 140 D$ =  CHR$ (4)
- 145  DIM OU$(100)
- 150  PRINT D$"prefix": INPUT PR$
- 160  TEXT : HOME
- 165  PRINT "AAF Unpacker v1.0  Andy Tefft  11/21/90"
- 170  PRINT : PRINT "Prefix: "PR$
- 175  PRINT : PRINT "Enter archive pathname, ? for catalog,"
- 176  PRINT "/ to change prefix, return to exit."
- 180  POKE 34,7
- 190  PRINT
- 199  ONERR  GOTO 2000
- 200  INPUT ": ";C$
- 205  IF C$ = "" THEN  END
- 210  IF C$ <  > "/" THEN 300
- 220  PRINT : INPUT "New prefix:";P$
- 230  PRINT D$"Prefix"P$
- 240  GOTO 150
- 300  IF C$ <  > "?" THEN 400
- 310  PRINT D$"cat"
- 320  GOTO 190
- 400  PRINT : PRINT ">>> Opening "C$" for input."
- 405  POKE 34,4:II = 1
- 406  PRINT D$"verify"C$
- 407 II = 0
- 410  PRINT D$"open"C$
- 415 IL = 0
- 420  PRINT D$"read"C$
- 430  CALL 768:IN$ =  MID$ (IN$,1)
- 440  IF  LEFT$ (IN$,1) = "=" THEN 450
- 445  PRINT IN$: GOTO 430
- 450 OU$ =  MID$ (IN$,2)
- 455  PRINT ">>> ";
- 460  PRINT "Opening "OU$" for output."
- 465  PRINT D$: REM  stop taking input from file
- 470  PRINT "Press return to use this, enter a new"
- 472  PRINT "pathname for output, ? for catalog"
- 475  INPUT ": ";CC$
- 476  IF CC$ <  > "?" THEN 480
- 477  PRINT "Path to catalog, return for current dir"
- 478  INPUT P$: PRINT D$"CAT"P$: GOTO 460
- 480  IF CC$ <  > "" THEN OU$ = CC$
- 485 OO = 1
- 490  PRINT D$"open"OU$: PRINT D$"close"OU$: PRINT D$"delete"OU$
- 491 OO = 0
- 495  PRINT D$"read"C$
- 500 OL = 0
- 505 FI = 1: REM  means we've started a file
- 510  CALL 768:IN$ =  MID$ (IN$,1)
- 520  IF  LEFT$ (IN$,1) = "-" THEN 530
- 521  IF  LEFT$ (IN$,1) = "+" THEN 1000
- 525  PRINT IN$: GOTO 510
- 530 OL = OL + 1
- 535  VTAB  PEEK (37)
- 540 OU$(OL) =  MID$ (IN$,2)
- 550  IF OL < 100 GOTO 510
- 560  REM   write 100 lines of output file
- 570  PRINT D$"open"OU$
- 580  PRINT D$"append"OU$
- 590  PRINT D$"write"OU$
- 600  FOR R = 1 TO 100
- 610  PRINT OU$(R)
- 620  NEXT
- 630  PRINT D$"close"OU$
- 640  GOTO 495
- 1000  PRINT D$"open"OU$
- 1010  PRINT D$"append"OU$
- 1020  PRINT D$"write"OU$
- 1030  FOR R = 1 TO OL
- 1040  PRINT OU$(R): NEXT
- 1050  PRINT D$"close"OU$
- 1060  PRINT : PRINT ">>> Finished "OU$
- 1065 FI = 0
- 1070  GOTO 420
- 1999  END
- 2000 Y =  PEEK (222)
- 2001  PRINT
- 2005  IF Y = 6 THEN 2100
- 2010  IF Y = 5 THEN 2020
- 2015  PRINT "Error #"Y: PRINT D$"close": END
- 2020  PRINT D$"close": PRINT ">>> End of file encountered."
- 2030  IF FI = 1 THEN  PRINT ">>> "OU$" may be incomplete."
- 2040  IF FI = 1 THEN  PRINT "(no end of file marker found)"
- 2050  TEXT
- 2060  END
- 2100  IF OO = 1 THEN  PRINT "Volume/directory not found.": GOTO 455
- 2110  IF II = 1 THEN  PRINT "Input file not found.": GOTO 175
-
+ END OF ARCHIVE
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads