10 REM > ROMIT
   20 REM Author    : Arthur
   30 REM Last Edit : 02-Nov-87  by  BC
   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