10
20
30
40 :
50 DIM file% 80, name% 65, word% 4
60 INPUT "Enter output file name : "$name%
70 Ch%=OPENOUT($name%)
80 IF Ch%=0 STOP
90 REPEAT
100 INPUT "Enter input object name : "$name%
110 IF LEN($name%)=0 ELSE PROCAddObject
120 UNTIL LEN($name%)=0
130 CLOSE#Ch%
140 END
150 :
160 DEF PROCAddObject
170 A%=5: X%=file%: Y%=X%/256: file%!0=name%: Ty%=(USR &FFDD) AND 3
180 Le%=file%!10: Ex%=file%!6: Lo%=file%!2
190 IF (Ty% = 0) OR (Ty% = 3) THEN STOP
200 IF Ty% = 1 THEN PROCAddFile ELSE PROCAddDirectory
210 ENDPROC
220 :
230 DEF PROCAddDirectory
240 Le%=0: Lo%=0: Ex%=0
250 REPEAT
260 INPUT "Enter name to give directory : "$name%
270 IF LEN($name%) > 63 THEN PRINT "Name is too long."
280 UNTIL LEN($name%) <= 64
290 PROCAddHeader
300 ENDPROC
310 :
320 DEF PROCAddFile
330 Ha%=OPENIN($name%)
340 IF Ha%=0 THEN STOP
350 PRINT "Load address &";~Lo%'"Exec address &";~Ex%'"Length &";~Le%
360 REPEAT
370 INPUT "Enter name to give file : "$name%
380 IF LEN($name%) > 63 THEN PRINT "Name is too long."
390 UNTIL LEN($name%) <= 64
400 PROCAddHeader
410 PROCCopyData
420 CLOSE#Ha%
430 ENDPROC
440 :
450 DEF PROCAddHeader
460 PROCWord(Ex%): BPUT#Ch%, 0: BPUT#Ch%, 0
470 IF Ty% = 1 THEN BPUT#Ch%, &4D
480 IF Ty% = 2 THEN BPUT#Ch%, &8D
490 BPUT#Ch%, (9+LEN($name%)): BPUT#Ch%, 1
500 FOR I%=1 TO LEN($name%)
510 BPUT#Ch%, ASC(MID$($name%,I%,1))
520 NEXT I%
530 BPUT#Ch%, 0: BPUT#Ch%, ASC"(": BPUT#Ch%, ASC"C": BPUT#Ch%, ASC")"
540 BPUT#Ch%, 0: PROCWord(Lo%): PROCWord(Le%)
550 ENDPROC
560 :
570 DEF PROCCopyData
580 IF Le% = 0 THEN ENDPROC
590 FOR I%=1 TO Le%: BPUT#Ch%, BGET#Ha%: NEXT I%
600 ENDPROC
610 :
620 DEF PROCWord(W%): word%!0=W%
630 BPUT#Ch%, (word%?0): BPUT#Ch%, (word%?1)
640 BPUT#Ch%, (word%?2): BPUT#Ch%, (word%?3)
650 ENDPROC