.
.         SDF TRANSFER COMMAND PROCESS
.
.         THIS ROUTINE IS ENTERED FROM THE TRANSFER COMMAND PROCESS TO
.         EXECUTE THE TRANSFER,F COMMAND.
.
          AXR$
.
.         (C)  Copyright 1972-1978  John Walker
.
.         This software is in the public domain
.
          DEFUNCT$
          FANG
.
E1        EQU       R10                 ELEMENT CLASS FOR FIRST FILE
E2        EQU       R11                 ELEMENT CLASS FOR SECOND FILE
F1        EQU       R12                 FDT, FCT FOR FILE 1
F2        EQU       R13                 FDT, FCT FOR FILE 2
.
.
.         FILE TO FILE:                 SDF TEXT IS SIMPLY COPIED UNTIL AN SDF
.                                       END OF FILE SENTINEL IS ENCOUNTERED.
.                                       NO FORMAT CONVERSION WILL OCCUR.
.
.
.         ELEMENT TO FILE:              THE FIRST SYMBOLIC ELEMENT SELECTED
.                                       BY FILESCAN IS CHANGED INTO AN SDF FILE.
.                                       SDFI IS USED TO READ IMAGES SO THAT
.                                       DELETED IMAGES MAY BE REMOVED.  CONTROL
.                                       WORDS WRITTEN TO THE OUTPUT SDF FILE
.                                       WILL BE FREE OF CYCLE INFORMATION, ETC.
.
.
.         FILE TO ELEMENT:              THE SDF FILE WILL BE READ USING SDFI,
.                                       AND AN ELEMENT CONSISTING OF THE
.                                       SDF FILE NAME RENAMED BY THE NAME ON
.                                       THE SECOND SPECIFICATION WILL BE WRITTEN
.                                       CONSISTING OF THE TEXT IMAGES OF THE
.                                       SDF FILE.  CONTROL WORDS WILL BE CHANGED
.                                       TO CONFORM TO CYCLE 0 IMAGES IN A NEW
.                                       ELEMENT.  ALL 051 CONTROL IMAGES WILL
.                                       BE REMOVED.
.
TRANSFERSDF*.
          LA        A0,E1               LOAD FIRST ELEMENT SPECIFICATION
          LA        A1,E2               LOAD SECOND ELEMENT SPECIFICATION
          TNZ       ELALL,A0            IS INPUT FILE OR ELEMENT ?
          J         IELT                INPUT IS ELEMENT.  READ UP TOC
.
.         INPUT SPECIFICATION IS A FILE NAME.  DOES OUTPUT HAVE AN ELEMENT
.         NAME SPECIFIED ?
.
          TNZ       ELALL,A1            DOES OUTPUT HAVE AN ELEMENT SPECIFIED ?
          J         OELT                YES.  ASSUME INPUT IS A FILE
.
.         BOTH SPECIFICATIONS ARE FILES.  WE MUST READ IN SECTOR ZERO OF
.         THE INPUT FILE TO DECIDE WHETHER IT IS A FILE OR A PROGRAM FILE.
.         IF IT IS A PROGRAM FILE, WE JUMP OFF TO IELT TO PROCESS IT WITH
.         FILESCAN.  IF IT IS SDF, WE COPY IT SDF FILE TO FILE.
.
/.
.
.         SDF => SDF
.
.         THE SDF FILE TO FILE TRANSFER IS PERFORMED DIRECTLY BY THE INPUT
.         AND OUTPUT ROUTINES, WHICH SIMPLY COPY BLOCKS, BUT SCAN FOR AN
.         END-OF-FILE SENTINEL.  IN THIS WAY THEY ARE GUARANTEED TO PRESERVE
.         ALL CONTROL IMAGES IN INTACT FORM.  THIS ALSO IS MUCH LESS EXPENSIVE
.         THAN COPYING IMAGE-BY-IMAGE.
.
          LX        X10,F1              LOAD INPUT FILE FCT
          LX        X9,F2               LOAD OUTPUT FILE FCT
          LA,U      A0,'F'              LOAD SDF FILE SCAN MODE
          SA        A0,IOOPT,X10        SET MODE FOR INPUT ROUTINE
          LMJ       A2,INPUT            CREATE READER ACTIVITY
          LMJ       A2,OUTPUT           CREATE OUTPUT ACTIVITY
          P         IOBB+QL,X9          WAIT FOR OUTPUT TO TERMINATE
.
.         IF THE INPUT FILE IS TAPE, WE PEEK AHEAD AT THE NEXT BLOCK.
.         IF IT IS AN END-OF-FILE, WE ADVANCE AFTER IT.
.
SDTOUT    LX        X10,F1              LOAD INPUT FILE FCT
          LX        X9,F2               LOAD POINTER TO OUTPUT FILE FCT
          TZ        IOMASS,X10          IS INPUT FILE TAPE ?
          J         INOT                NO.  SKIP THIS STUFF
INOT      BRELP     X10                 RELEASE INPUT FCT
          SZ        F1                  MARK INPUT FILE FCT RELEASED
          TZ        IOMASS,X9           IS OUTPUT TAPE ?
          J         SSLVMRK             ALL DONE IF MASS STORAGE
          LA,U      A0,WEF$             LOAD WRITE END OF FILE FUNCTION
          LA        A1,IOFUNC,X9        LOAD CURRENT FUNCTION IN PACKET
          SA        A0,IOFUNC,X9        SET WEF$ FUNCTION IN OUTPUT PACKET
          SZ        IOACW,X9            CLEAR ACCESS WORD
          TNE,U     A1,WEF$             EOF ALREADY WRITTEN ?
          J         SKWEF1              YES.  DON'T NEED FIRST MARK
          IOW$      IOPKT,X9            WRITE END OF FILE ON OUTPUT TAPE
          TZ        IOSTATUS,X9         NORMAL STATUS ?
          J         SSIOEF              NO.  EDIT ERROR MESSAGE
SKWEF1    IOW$      IOPKT,X9            WRITE SECOND EOF MARK
          TZ        IOSTATUS,X9         NORMAL STATUS ?
          J         SSIOEF              ERROR.  PROCESS IT
          LA,U      A0,MB$              GET BACKSPACE BLOCK FUNCTION
          SA        A0,IOFUNC,X9        SET FUNCTION IN PACKET
          IOW$      IOPKT,X9            BACK OVER SECOND EOF MARK
          LA        A0,IOSTATUS,X9      LOAD I/O STATUS
          TE,U      A0,1                NORMAL EOF MARK STATUS ?
          J         SSIOEF              NO.  ERROR
          LA        A0,CDOPTS,X8        LOAD OPTIONS ON COMMAND
          TEP,U     A0,OPTION('M')      MARK DESIRED AT END OF COPY ?
          J         SSLVMRK             YES.  LEAVE ONE MARK AT END
          IOW$      IOPKT,X9            BACK UP OVER SECOND MARK
          LA        A1,IOSTATUS,X9      LOAD I/O STATUS
          TE,U      A1,1                NORMAL BACK UP OVER EOF ?
          J         SSIOEF              NO.  ERROR CLOSING SDF OUTPUT TAPE
SSLVMRK   BRELP     X9                  RELEASE THE OUTPUT FCT
          BRELA     .                   RELEASE ALL BUFFERS FOR THE COMMAND
          COMPLETE  .                   TERMINATE NORMALLY
.
.         I/O ERROR CLOSING OUTPUT
.
SSIOEF    LA,U      A0,IOPKT,X9         LOAD I/O PACKET ADDRESS
          LMJ       X11,IOSEDT          EDIT I/O STATUS ERROR MESSAGE
.
.         GENERAL ENTRY TO ERROR THE COMMAND AND GET OUT
.
SSERR     ZAP       .                   ERROR THE COMMAND
          LA        A0,F1               LOAD FILE 1 FCT ADDRESS
          TZ        A0                  STILL ALLOCATED ?
          BRELP     A0                  YES.  RELEASE IT
          LA        A0,F2               LOAD FILE 2 FCT
          TZ        A0                  STILL ALLOCATED ?
          BRELP     A0                  YES.  RELEASE IT
          BRELA     .                   RELEASE ALL RANDOM BUFFERS
          COMPLETE  .                   TERMINATE THE COMMAND
/.
.
.         INPUT IS AN ELEMENT.  THIS IS UNAMBIGUOUS, AS WE KNOW THAT THE
.         INPUT IS TO BE A PROGRAM FILE.
.
IELT      LX        X9,E1               LOAD INPUT ELEMENT CLASS
          LA        A0,ELFDT,X9         LOAD LINK TO ASSOCIATED FDT
          LA        A1,FDTYPE,A0        LOAD TYPE FIELD FROM FDT
          JTAPE     A1,IELTAP           ERROR IF ELEMENT SOURCE IS TAPE
          LA,U      A7                  DON'T ACCEPT DELETED ELEMENTS
          LMJ       X11,FILESCAN        PREPARE LIST OF ELEMENTS TO PROCESS
          J         IEBSPR              BSP ERROR.  TERMINATE
          LMJ       X11,ELTREL          RELEASE ELEMENT TABLE BUFFER
          JZ        A8,IELTMT           MESSAGE IF NO ELEMENTS SELECTED
          LA        A8,CDOPTS,X8        LOAD COMMAND OPTIONS
          TEP       A8,(OPTION('A'))    WRITE 'EM OUT ALPHABETICALLY ?
          LMJ       X11,FILESORT        YES.  REORDER ELEMENT LIST
          BGETL     SDFL*2              ALLOCATE SDF I/O FCT'S
          AU,U      A0,SDFL             GET ADDRESS OF SECOND FCT IN A1
          DS        A0,X9               SAVE FCT ADDRESSES IN X9, X10
          DL        A2,F1               LOAD FCT POINTERS
          SA        A0,IOACW,A2         SAVE FIRST FCT ADDRESS
          SA        A1,IOACW,A3         SAVE SECOND FCT ADDRESS
          LA        A1,F1               LOAD FDT, FCT FOR INPUT
          SSL       A1,18               SHIFT DOWN FDT ADDRESS
          LA,U      A2,R$               LOAD READ FUNCTION
          LMJ       X11,SDFFCT          INITIALISE SDF I/O FCT
          AA,U      A0,SDFL             INCREMENT TO NEXT FCT
          LA        A1,F2               LOAD OUTPUT FILE FDT,FCT
          SSL       A1,18               SHIFT FDT TO H2
          LA,U      A2,W$               LOAD WRITE FUNCTION
          LA,U      A3                  START AT ADDRESS ZERO
          LMJ       X11,SDFFCT          BUULD SDF I/O FCT
          sdfoo     .                   OPEN SDF OUTPUT
          LA,U      A1,SDFIMAGE,A0      GET OUTPUT IMAGE ADDRESS
          SA,H2     A1,SDFIMA,X9        PUT IT IN IMAGE POINTER FOR INPUT
          DSL       A14,72              CLEAR OPEN FLAG, IMAGE COUNT
.
.         PROCESS NEXT ELEMENT
.
IELTN     REMOVE    CDELTQ,X8           REMOVE NEXT ELEMENT FROM QUEUE
          TNE,U     A1,CDELTQ,X8        END OF THE QUEUE ?
          J         IELTDONE            YES.  ALL DONE
          ANA,U     A1,EIFQ             BACK UP TO ELEMENT ITEM
          LA        A5,EITYP,A1         LOAD TYPE OF THE ELEMENT
          TG,U      A5,TY$REL           IS IT SYMBOLIC OR A PROC ?
          J         IELTIGN             NO.  IGNORE THIS ELEMENT
          LA        A5,EITXTA,A1        LOAD STARTING TEXT ADDRESS OF ELEMENT
          SA        A5,SDFADR,X9        SET STARTING ADDRESS FOR SDF INPUT
          JNZ       A14,IEOPNA          HAS LABEL BEEN WRITTEN ALREADY ?
          LA,U      A13                 NO.  SET CHARACTER SET AS FIELDATA
          SA        A1,A14              SAVE ELEMENT ITEM, SET OPENED FLAG
          LA        A4,(0500130,0)      LOAD LABEL CONTROL IMAGE
          LA        A0,EIFLG,A1         LOAD FLAG BITS FOR THIS ELEMENT
          TEP,U     A0,FL$ASC           IS ELEMENT RECORDED IN ASCII ?
          LA,U      A13,1               YES.  SET INITIAL SET TO ASCII
          AA        A4,A13              ADD CHARACTER SET TO LABEL CTL WORD
          SA        A4,SDFICW,X10       SET LABEL CONTROL WORD IN SDFO PACKET
          LA        A4,('*SDFF*')       LOAD LABEL TEXT
          SA        A4,SDFIMAGE,X10     PUT LABEL TEXT IN IMAGE BUFFER
          LA        A0,X10              LOAD OUTPUT FCT ADDRESS
          sdfo      .                   WRITE LABEL IMAGE FOR FILE
          J         IEOSR               SDF OUTPUT ERROR
          LA        A1,A14              RESTORE ELEMENT FIND ITEM
IEOPNA    TOP,U     A8,OPTION('T')      TOC OF ELEMENTS PROCESSED WANTED ?
          J         IELTNOT             NO.  SKIP TOC CODE
          LA,U      A10                 CLEAR SEQUENCE NUMBER TO INDICATE TRANS
          LX,U      X9,,A1              LOAD ADDRESS OF ELEMENT ITEM
          R$DIT     .                   SET UP THE EDITOR
          LMJ       X5,TOCLE            EDIT THE TOC LINE
          R$DITX    .                   TERMINATE THE EDITOR
          LA        A1,X9               RESTORE ELEMENT ITEM
          LX        X9,F1               GET I/O FCT ADDRESS BACK
          LX        X9,IOACW,X9         RECOVER THE SDF I/O FCT ADDRESS
IELTNOT   BRELR     A1                  RELEASE THE ELEMENT ITEM
          LA,U      A0,,X9              GET FCT ADDRESS FOR INPUT
          sdfio     .                   OPEN SDF INPUT
          J         IEISR               INPUT SDF ERROR
IEIMGL    LA        A0,X9               LOAD FCT ADDRESS
          sdfi      .                   GET NEXT IMAGE FROM INPUT
          J         IEISR               INPUT ERROR.
          J         IEEOF               EOF ON THIS ELEMENT
          TP        SDFICW,X9           IS IT A CONTROL IMAGE ?
          J         IELBL               YES.  CHECK FOR LABEL
          TZ,S4     SDFICW,X9           IS THE IMAGE DELETED ?
          J         IEIMGL              YES.  DON'T TRANSFER IT
          SZ        SDFICW,X10          CLEAR IMAGE CONTROL WORD
          LA,T1     A4,SDFICW,X9        LOAD LENGTH FROM INPUT
          SA,T1     A4,SDFICW,X10       COPY LENGTH TO OUTPUT
          AA,U      A15,1               INCREMENT IMAGED COPIED
IECPY     .
.         ***  CHECK FOR TRUNCATION  ***
          LA        A0,X10              LOAD OUTPUT FCT ADDRESS
          sdfo      .                   WRITE IMAGE TO OUTPUT
          J         IEOSR               OUTPUT SDF ERROR
          J         IEIMGL              PROCESS NEXT IMAGE
.
.         PROCESS CONTROL OR LABEL IMAGE
.
IELBL     LA,S1     A4,SDFICW,X9        LOAD INPUT IMAGE TYPE
          TE,U      A4,050              IS IT A LABEL IMAGE (DEFINES CHAR SET)
          TNE,U     A4,042              CHANGE CHARACTER SET ?
          J         IECCI               YES.  PROCESS CODE CHANGE
          J         IEIMGL              NO.  IGNORE OTHER CONTROL IMAGE
.
.         PROCESS CHANGE CHARACTER SET IMAGE  (042 OR 050)
.
IECCI     LA,S6     A4,SDFICW,X9        LOAD NEW CHARACTER SET CODE
          TNE       A4,A13              IS SET CHANGING ?
          J         IEIMGL              NO.  DON'T NEED TO ISSUE CHANGE
          LA        A5,(0420000,0)      LOAD CHANGE CHARACTER SET CONTROL WORD
          SA        A5,SDFICW,X10       SET IMAGE IN COBTROL WORD FOR OUTPUT
          SA,S6     A4,SDFICW,X10       STORE DESIRED CHARACTER SET IN IMAGE
          SA        A4,A13              SET CURRENT SET TO NEW SET
          J         IECPY               OUTPUT A CHANGE SET IMAGE
.
IEEOF     LA        A0,X9               LOAD INPUT FCT ADDRESS
          sdfic     .                   CLOSE SDF INPUT
          J         IELTN               PROCESS NEXT INPUT ELEMENT
.
.         IGNORE INPUT ELEMENT
.
IELTIGN   BRELR     A1                  RELEASE ELEMENT FIND ITEM
          J         IELTN               GET NEXT ELEMENT
.
.         DONE PROCESSING.  CLOSE OUT
.
IELTDONE  LA        A0,X10              LOAD OUTPUT FCT ADDRESS
          sdfoc     .                   CLOSE SDF OUTPUT
          J         IEOSR               SDF OUTPUT ERROR
          BRELR     X9                  RELEASE OUTPUT FCT
          LX        X9,F2               LOAD OUTPUT I/O FCT ADDRESS
          SZ        IOFUNC,X9           SET LAST FUNCTION TO NULL (NON WEF$)
          J         SDTOUT              COMPLETE PROCESSING.  MARK OUTPUT TAPE
.
.         BSP ERROR ON INPUT
.
iebspr    la        a2,a14              load BSP FCT address
          LMJ       X11,BSPERP          EDIT AND PRINT BSP ERROR MESSAGE
          J         SSERR               ERROR THE COMMAND
.
.         INPUT ELEMENT FILE IS ON TAPE - ERROR FOR NOW
.
IELTAP    R$DIT     .                   ENTER EDITING MODE
          E$MSG     IELTMS              EDIT AN ERROR MESSAGE
IELTMO    LA        A0,E1               LOAD ELEMENT CLASS ITEM FOR INPUT FILE
OELTMO    LA        A0,ELFDT,A0         LINK TO THE FDT
          LMJ       X11,FIST            APPEND FILE AND STATEMENT
          J         SSERR               ENTER COMMON ERROR CODE
.
.         NO ELEMENTS SELECTED FROM INPUT ELEMENT FILE
.
IELTMT    R$DIT     .                   ENTER EDITING MODE
          E$MSG     IELTMTM             COPY THE MESSAGE FOR NULL INPUT
          J         IELTMO              PROCESS LIKE INPUT ON TAPE
.
.         COMMON PROCESSING FOR I/O ERROR FROM SDFI OR SDFO
.
IEISR     .
IEOSR     .
OEISR     .
OEOSR     LA        A1,F1               GET I/O FCT FOR FIRST FILE
          TE,H2     A0,IOACW,A1         WAS ERROR ON F1 ?
          LA        A1,F2               NO.  GET POINTER TO FCT FOR OUTPUT FILE
          LA        A2,IOSTATUS,A0      LOAD I/O ERROR STATUS
          SA        A2,IOSTATUS,A1      COPU I/O STATUS TO FCT
          LA        A0,A1               GET FCT ADDRESS IN A0
          LMJ       X11,IOSEDT          EDIT THE I/O ERROR MESSAGE
          J         SSERR               PROCESS COMMAND ERROR
/.
.
.         OUTPUT HAS ELEMENT CLASS SPECIFIED.  THIS MEANS THAT WE TAKE AN
.         INPUT SDF FILE AND WRITE AN ELEMENT CONSISTING OF THE FILE NAME
.         RENAMED BY THE ELEMENT CLASS SPECIFICATION.
.
OELT      LX        X9,E2               LOAD OUTPUT ELEMENT CLASS
          LA        A0,ELFDT,X9         LOAD FDT POINTER FOR OUTPUT
          LA        A1,FDTYPE,A0        LOAD TYPE FROM THE FDT
          JTAPE     A1,OELTAP           ERROR.  CAN'T WRITE OUTPUT ELT ON TAPE
          BGETL     FTIL                ALLOCATE FTI FOR OUTPUT FILE
          SA        A0,A14              SAVE FTI ADDRESS
          LA        A1,F2               LOAD OUTPUT FILE FCT ADDRESS
          DL        A4,IOFN,A1          LOAD INTERNAL FILE NAME
          DS        A4,FTIFN,A0         STORE INTO FTI FILE NAME
          rfti      .                   READ FTI INTO MEMORY
          J         OEBSPR              BSP ERROR ON OUTPUT ELEMENT
          BGETL     SDFL*2              ALLOCATE SDF FCT'S, BUFFERS, LINES
          AU,U      A0,SDFL             GET ADDRESS OF SECOND FCT
          DS        A0,X9               SAVE POINTERS IN X9, X10
          LA        A1,F1               GET INPUT FDT, FCT
          SSL       A1,18               SHIFT DOWN FDT ADDRESS
          LA,U      A2,R$               LOAD READ FUNCTION
          LA,U      A3                  CLEAR READ ADDRESS
          LMJ       X11,SDFFCT          BUILD SDF INPUT FCT
          AA,U      A0,SDFL             GET ADDRESS OF OUTPUT FCT
          LA        A1,F2               LOAD OUTPUT FDT, FCT
          SSL       A1,18               SHIFT DOWN THE FDT
          LA,U      A2,W$               LOAD WRITE FUNCTION
          LX        X11,A14             LOAD FTI ADDRESS
          LA        A3,FTIWL,X11        LOAD NEXT WRITE LOCATION
          LMJ       X11,SDFFCT          BUILD OUTPUT SDF FCT
          sdfoo     .                   OPEN SDF OUTPUT
          LA        A1,('*SDFF*')       LOAD SDF LABEL TEXT
          SA        A1,SDFIMAGE,X10     SET AS TEXT FOR OUTPUT
          LA        A1,(0500130,0)      LOAD STANDARD ELEMENT LABEL
          SA        A1,SDFICW,X10       SET OUTPUT LABEL IMAGE
          LA,U      A0,,X9              GET INPUT FCT ADDRESS
          sdfio     .                   OPEN SDF INPUT
          J         OEISR               INPUT SDF ERROR
          SZ        A12                 SET OUTPUT TEXT INITIALLY FIELDATA
          sdfi      .                   READ FIRST IMAGE OF FILE
          J         OEISR               ERROR.  TERMINATE
          J         OEEOF               EOF.  WRITE NULL ELEMENT
          TN        SDFICW,X9           IS FIRST IMAGE CONTROL ?
          J         OEWLB               NO.  WRITE OUR LABEL
          LA,S1     A1,SDFICW,X9        LOAD CONTROL IMAGE TYPE
          TNE,U     A1,050              IS IT A LABEL IMAGE ?
          J         OESCT               YES.  SET CHARACTER SET
          TE,U      A1,042              IS FIRST CHANGE CHARACTER SET ?
          J         OEWLB               NO.  WRITE STANDARD LABEL
OESCT     LA,S6     A1,SDFICW,X9        LOAD CHARACTER SET FOR INPUT
          TZ        A1                  DOES FILE START IN ASCII ?
          LA,U      A12,FL$ASC          YES.  MARK ELEMENT TEXT ASCII
          SA,S6     A1,SDFICW,X10       STORE CHARACTER SET IN OUTPUT LABEL
OEWLB     LA        A0,X10              LOAD OUTPUT FCT ADDRESS
          sdfo      .                   WRITE LABEL IMAGE TO FILE
          J         OEOSR               SDF OUTPUT ERROR
          LA,U      A0,SDFIMAGE,X9      LOAD INPUT IMAGE ADDRESS
          SA,H2     A0,SDFIMA,X10       SET AS OUTPUT IMAGE ALSO
          TN        SDFICW,X9           DID WE SKIP CONTROL IMAGE ?
          J         OETXTI              NO.  PROCESS TEXT IMAGE
OENEXT    LA        A0,X9               LOAD INPUT FCT ADDRESS
          sdfi      .                   READ NEXT IMAGE
          J         OEISR               INPUT I/O ERROR
          J         OEEOF               EOF.  WIND UP OUTPUT FILE
          TN        SDFICW,X9           TEXT IMAGE ?
          J         OETXTI              YES.  OUTPUT IT CLEANED UP
          LA,S1     A0,SDFICW,X9        LOAD CONTROL IMAGE TYPE
          TE,U      A0,042              CHANGE CHARACTER SET ?
          J         OENEXT              NO.  IGNORE OTHER CONTROL IMAGES
          SZ        SDFICW,X10          CLEAR OUTPUT CONTROL IMAGE
          SA,S1     A0,SDFICW,X10       SET IMAGE TYPE IN IMAGE
          LA,S6     A0,SDFICW,X9        LOAD DESIRED CODE TYPE
          SA,S6     A0,SDFICW,X10       PUT IN OUTPUT IMAGE TYPE
          J         OEWRITE             WRITE IMAGE TO FILE
.
.         PROCESS TEXT IMAGE
.
OETXTI    SZ        SDFICW,X10          CLEAR OUTPUT IMAGE CONTROL WORD
          LA,T1     A0,SDFICW,X9        LOAD LENGTH OF INPUT IMAGE
          SA,T1     A0,SDFICW,X10       COPY IT TO OUTPUT
          AA,U      A15,1               INCREMENT IMAGES WRITTEN
OEWRITE   LA        A0,X10              LOAD OUTPUT FCT ADDRESS
          sdfo      .                   COPY IMAGE TO OUTPUT ELEMENT
          J         OEOSR               OUTPUT SDF I/O ERROR
          J         OENEXT              WRITE NEXT IMAGE
.
OEEOF     LA        A0,X9               LOAD INPUT FCT ADDRESS
          sdfic     .                   CLOSE SDF INPUT
          LA        A0,X10              LOAD OUTPUT FCT
          sdfoc     .                   CLOSE OUTPUT
          J         OEOSR               OUTPUT WRITE ERROR
          LA        A0,A14              LOAD FTI ADDRESS
          LA,U      A0,FTIET,A0         LOAD ELEMENT TABLE ENTRY ADDRESS
          LMJ       X11,PFTLEN          COMPUTE OPTIMAL TABLE LENGTH
          AA,U      A0,EIL              LEAVE ROOM FOR ONE MORE ELEMENT
          TG,U      A0,BUFELTT+1        ARE WE FORCED TO PAGE ?
          LA,U      A0,BUFELTT          YES.  LIMIT BUFFER SIZE
          SA        A0,A1               SAVE BUFFER SIZE
          AA,U      A0,EIL              ADD SPACE FOR INSERT ITEM
          BGETL     .                   ALLOCATE ELEMENT TABLE AND INSERT ITEM
          SA        A0,A13              SAVE THE ELEMENT TABLE ADDRESS
          LXI,U     A1,EIL,A0           LOAD ELEMENT TABLE START ADDRESS
          LA        A0,A14              LOAD FTI ADDRESS
          rpfet     .                   READ ELEMENT TABLE
          J         OEBSPR              OUTPUT BSP ERROR
          LA        A0,A13              LOAD ELEMENT ITEM BUFFER ADDRESS
          LA        A1,E2               GET OUTPUT ELEMENT CLASS
          LA        A2,F1               LOAD INPUT FCT, FDT
          SSL       A2,18               SHIFT FDT TO H2
          DL        A4,FDFN,A2          LOAD FILE NAME FROM FDT
          DS        A4,EIEN,A0          PUT AS ELEMENT NAME OF ELEMENT
          DL        A4,(LJSF$2 ' ')     LOAD BLANK VERSION NAME
          DS        A4,EIVER,A0         SET VERSION AS BLANK
          LA        A4,(5,,1)           LOAD CANNED CYCLE WORD
          SA        A4,EICYCW,A0        SET CYCLE WORD IN ELEMENT ITEM
          LA        A4,SDFADR,X10       LOAD NEXT WRITE ADDRESS AFTER ELEMENT
          LA        A2,A14              LOAD FTI ADDRESS
          ANU       A4,FTIWL,A2         COMPUTE ELEMENT LENGTH
          LA        A3,FTIWL,A2         LOAD START ADDRESS OF THIS ELEMENT
          SA        A4,FTIWL,A2         UPDATE NEXT WRITE LOCATION
          SA        A5,EITXTL,A0        SET ELEMENT TEXT LENGTH
          SA        A3,EITXTA,A0        SET TEXT STARTING ADDRESS FOR ELEMENT
          SZ        EITIME,A0           CLEAR TIME SO BSP WILL USE CURRENT
          SZ        EIPLNK,A0           CLEAR POINTER LINK
          SZ        EIVLNK,A0           CLEAR VERSION LINK
          SZ        EIFLGW,A0           CLEAR FLAGS, TYPE LINK
          SA        A12,EIFLG,A0        SET FIELDATA / ASCII TEXT MODE
          DSL       A4,72               CLEAR TYPE, PROCESSOR CODE
          LA,U      A4,TY$SYM           SET TYPE SYMBOLIC
          LA        A2,ELTBIT,A1        LOAD TYPE BITS
          TEP,U     A2,BIT(TY$SYM-1)    SYMBOLIC TYPE ?
          J         OESYMEL             YES.  CHECK PROCESSOR CODES
          TEP,U     A2,BIT(TY$ASMP-1)   ASM PROC ?
          LA,U      A4,TY$ASMP          YES.  LOAD ITS TYPE
          TEP,U     A2,BIT(TY$COBP-1)   COBOL PROC ?
          LA,U      A4,TY$COBP          YES.  LOAD THE TYPE
          TEP,U     A2,BIT(TY$FORP-1)   FORTRAN PROC ?
          LA,U      A4,TY$FORP          YES.  LOAD TYPE CODE
          TE,U      A4,TY$SYM           SYMBOLIC TYPE ?
          J         OETYSET             NO.  SET DESIRED MAJOR TYPE
OESYMEL   SSL       A2,GTTYPE           SHIFT OFF MAJOR TYPE BITS
OESTYL    JZ        A2,OETYSET          SET TYPE SYMBOLIC IF NO PROCESSOR CODE
          JB        A2,OETYSET          SET TYPE NOW IF BIT FOUND
          AA,U      A5,1                INCREMENT PROCESSOR CODE
          SSL       A2,1                MOVE NEXT BIT TO LOW ORDER
          J         OESTYL              LOOP UNTIL PROCESSOR CODE FOUND
OETYSET   SA        A4,EITYP,A0         SET MAJOR TYPE IN ELEMENT ITEM
          SA        A5,EIPCOD,A0        STORE PROCESSOR CODE FOR SYMBOLICS
          LMJ       X11,RENAME          APPLY RENAMING RULES TO FILE NAME
          LA        A1,A13              LOAD ELEMENT ADD ITEM
          LA        A0,A14              LOAD FTI ADDRESS
          etia      .                   ADD ELEMENT TO ELEMENT TABLE
          J         OEBSPR              BSP ERROR.
          LA        A0,A14              LOAD FTI ADDRESS
          wpfet     .                   REWRITE ELEMEMT TABLE
          J         OEBSPR              BSP ERROR.
          LA        A0,A14              LOAD FTI ADDRESS BACK
          wfti      .                   WRITE BACK FTI, NEXT WRITE ADDRESS
          J         OEBSPR              BSP ERROR.
          J         SDTOUT              EXIT THE COMMAND
.
.         BSP ERROR ON OUTPUT FILE
.
oebspr    la        a2,a14              load the BSP FCT address
          LMJ       X11,BSPERP          EDIT AND PRINT BSP ERROR MESSAGE
          J         SSERR               ERROR THE COMMAND
.
.         OUTPUT ELEMENT IS TO BE WRITTEN TO TAPE
.
OELTAP    R$DIT     .                   ENTER EDITING MODE
          E$MSG     OELTMS              EDIT THE ERROR MESSAGE
          LA        A0,E2               LOAD OUTPUT ELEMENT CLASS PARAMETER
          J         OELTMO              ENTER COMMON CODE FOR INPUT
.
          PURE      DATA
.
IELTMS    'INPUT ELEMENTS MAY NOT COME FROM TAPE !'
IELTMTM   'NO ELEMENTS SELECTED FOR SDF TRANSFER FROM !'
OELTMS    'OUTPUT ELEMENT MAY NOT BE WRITTEN TO TAPE !'
          END