;**********************************
;
;   MAKFIL - creates a text file
;
;**********************************
;2.0 18-Jul-84 DFP rewritten by David Pallmann.
;
;syntax is: .MAKFIL filename
;           text                        <- syntax @file reads in another file
;           text
;            ..
;           text
;           blank line

       OBJNAM  MAKFIL.LIT

       VMAJOR=2

       SEARCH  SYS
       SEARCH  SYSSYM
       SEARCH  TRM

       IMP=A5

       .OFINI
       .OFDEF  FILE,D.DDB              ;DDB for creating file
       .OFDEF  FILE2,D.DDB             ;DDB for reading other files in
       .OFSIZ  IMPSIZ

START:  PHDR    -1,0,PH$REE!PH$REU      ;program header
       GETIMP  IMPSIZ,IMP              ;allocate impure area (FILE & FILE2)
       BYP                             ;bypass spaces @A2
       FSPEC   FILE(IMP),TXT           ;load DDB w/filespec
       INIT    FILE(IMP)               ;fetch driver, allocate buffer
       LOOKUP  FILE(IMP)               ;does the file exist?
       BNE     10$                     ; no - branch
       DSKDEL  FILE(IMP)               ; yes - delete it
10$:    OPENO   FILE(IMP)               ;open for output
       MOV     JOBCUR,A0               ;A0 := job control block
       MOV     JOBTRM(A0),A0           ;A0 := terminal definition block
       ORW     #T$ILC,@A0              ;tell AMOS/L to allow lower case

GETLIN: KBD     ENDFIL                  ;get a line (branch on ^C)
       LIN                             ;blank line?
       BEQ     ENDFIL                  ; yes
       CMPB    @A2,#'@                 ;does line start with '@'?
       BEQ     20$                     ; yes - branch
10$:    MOVB    (A2)+,D1                ;D1 := next character on line
       BEQ     GETLIN                  ;branch if D1 zero (end of line)
       FILOTB  FILE(IMP)               ;write D1 out to file
       BR      10$                     ;loop till full line processed
20$:    INC     A2                      ;bypass the '@'
       FSPEC   FILE2(IMP),CMD          ;set up DDB
       INIT    FILE2(IMP)              ;load driver, allocate buffer
       OPENI   FILE2(IMP)              ;open for input
30$:    CTRLC   ENDFIL                  ;branch on ^C
       FILINB  FILE2(IMP)              ;read character from file
       TST     FILE2+D.SIZ(IMP)        ;end of file?
       BEQ     40$                     ; yes - branch
       FILOTB  FILE(IMP)               ;write character to file
       BR      30$                     ;loop till entire file processed
40$:    CLOSE   FILE2(IMP)              ;close auxiliary file
       BR      GETLIN                  ;return to main loop

ENDFIL: CLOSE   FILE(IMP)               ;close file
       EXIT                            ;exit to AMOS/L

       END