jac@yoko.rutgers.edu (Jonathan A. Chandross) (05/02/91)
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