ICL 1900 Series Computers

Sample PLAN Program

The following program is an example from the PLAN (Programming LANguage 1900) manual, which will transfer data from 80-column punch cards to a magnetic tape that conforms to the ICL 1900 series tape organisation standards.

The Magnetic Tape Housekeeping system has been used at the physical level of file control, each block being one record made up of data from a number of cards preceded by one word containing the record size in binary. The number of cards in each record (maximum 25) is determined by a given parameter count.

If there are insufficient data cards to fill the last data block completely, this block is space-filled.

Input Data

The punched card input pack consists of a parameter card (described below), data cards, an end marker card, and a blank card. The data cards may contain any alphanumeric or symbolic data distinguishable from the end marker card, punched in the ICL 64-character ard Code. The end marker card has an asterisk (*) punched in columns 1 to 4 inclusive.

Columns   Parameter Card Format

1 to 4    WRI,
5 to 16   12-character file name
17        Variable: generation number followed by a comma (maximum seven characters)
          Variable: reterntion period followed by a comma (maximum four characters)
          Variable: number of cards per record followed by a comma (maximum two characters)

An example of the punching on the parameter card is:
WRI,CTMTTESTFILE,1,21,5,

Output Format of Magnetic Tape

Header Label
Start of Data Sentinel
Data Blocks
Trailer Label

The parameter card and end marker card are not recorded on the tape.

#PROGRAM       CTMT70/SEGA
#LOWER
               BUFFA(1002)
#LOWER
RDCRD          3/0,0,80,0/BUFFA
PARER          24HINCORRECT PARAMETER CARD
MESS           24/PARER
MASK           #60077777
CRDBL          25
BLKSZ          501
TAPE           261/#400,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
               0,0,0,0,0,0,0,0,0,0,0,0,0,0
#PROGRAM
#ENTRY         0
START ALLOT 0  3                   [GET CARD READER
      LDX   0  9
      BPZ   0  *+3                 [TEST FOR ALLOCATION
      SUSWT    2HCR                [NO CARD READER AVAILABLE
      BRN      START
      PERI  0  RDCRD               [READ PARAMETER CARD
      SUSBY 0  3
      LDX   4  BUFFA
      TXU   4  '4HWRI,'            [TEST FOR PARAMETER CARD IDENTIFIER
      BCC      GETP
      REL   0  3                   [RELEASE CARD READER
      SUSTY    MESS                [INCORRECT PARAMETER CARD
      BRN      START
GETP  LDCT  2  12
      LDCH  5  BUFFA+1(2)          [EXTRACT FILE NAME FROM CARD BUFFER
      DCH   5  TAPE+2(2)           [& STORE IN FILE DEFINITION AREA
      BCHX  2  *-2
      LDX   2  '7/BUFFA+4.0'
      CALL  0  DECAL               [CONVERT GENERATION NUMBER TO BINARY
      STO   5  TAPE+6              [& STORE IN FILE DEFINITION AREA
      ANDX  2  MASK
      LDCT  3  4
      ADX   2  3                   [SET MAXIMUM COUNT
      CALL  0  DECAL               [CONVERT RETENTION PERIOD TO BINARY
      STO   5  TAPE+7              [& STORE IN FILE DEFINITION AREA
#              SHOULD TEST THAT RETENTION PERIOD NOT GREATER THAN 4095
      ANDX  2  MASK
      ADX   2  '#200000'           [SET MAXIMUM COUNT
      CALL  0  DECAL               [CONVERT NO. CARDS FOR RECORD
      STO   5  CRDBL               [& STORE RECORD SIZE IN CARDS
#              SHOULD TEST RECORD LENGTH NOT GREATER THAN 25 CARDS
      LDN   6  1
      MPA   5  '20'                [CALCULATE BLOCK LENGTH
      STO   6  BLKSZ               [& STORE
      MTDEF 0  0,0,TAPE,ERROR      [DEFINE MAG TAPE - MACRO
      LDX   7  BLKSZ
      STO   7  BUFFA               [STORE RECORD LENGTH IN BUFFER
      LDX   2  CRDBL
      LDCT  7  0(2)                [SET COUNTER FOR NO. CARDS IN BLOCK
      STOZ     1                   [SET MODIFIER
CARD  INPUT    CR0,ENDCD           [I/O GENERATOR MACRO
      INDIS    CR0                 [I/O GENERATORMACRO
      A        80/BUFFA+1(1),80
      END
      BUX   7  *+2                 [ANY MORE CARDS TO FILL BLOCK
      BRN      FIRST
      ADN   1  20                  [UPDATE MODIFIER
      BRN      CARD
FIRST LDX   1  BLKSZ
      STOZ     3                   [SET MODIFIER
WRBLK MTWRB 0  BUFFA(3),BLKSZ,S    [WRITE A DATA BLOCK TO TAPE - MACRO
      STO   1  BUFFA(1)            [STORE RECORD LENGTH IN BUFFER
      LDCT  7  0(2)
NEXT  INPUT    CR0
      INDIS    CR0
      A        80/BUFFA+1(1)
      END
      BUX   7  *+2                 [ANY MORE CARDS TO FILL BLOCK
      BRN      SECND
      ADN   1  20                  [UPDATE RECORD POINTER
      BRN      NEXT
SECND MTSUS 0                      [CHECK TRANSFER
      ADN   1  21
      SBX   1  BLKSZ
      ERX   1  BLKSZ               [SWITCH FOR OTHER BUFFER
      ERX   3  BLKSZ               [SWITCH TO OUTPUT OTHER BUFFER
      BRN      WRBLK
ERROR SUSWT    2HPF                [ASSUMED PARITY ERROR
      BRN      START
FILL  ADN   1  20
ENDCD BZE   1  DONE
      TXU   1  BLKSZ
      BCC      DONE
      OUT      BUFFA+1(1)          [SPACEFILL REST OF BUFFER - MACRO
      B        80
      END
      BUX   7  FILL
      MTSUS 0                      [CHECK TRANSFER - MACRO
      ERX   3  BLKSZ
      MTWRB 0  BUFFA(3),BLKSZ,S    [WRITE A BLOCK - MACRO
DONE  MTSUS 0                      [CHECK TRANSFER - MACRO
      MTEND 0  CLOSE               [CLOSE AND REWIND TAPE - MACRO
      SUSWT    2HHH                [END OF RUN - HALT:- HH
      BRN      START
DECAL STOZ     4                   [CONVERT DECIMAL TO BINARY
      STOZ     5
      CDB   4  0(2)                [CONVERT NUMBER
      BCS      *+2
      BCHX  2  *-2
      LDCH  6  0(2)
      TXU   6  '#34'               [TEST EXIT CHAR = COMMA
      BCC      *+2
      SUSTY    MESS
      BCHX  2  *+1
      EXIT  0  0
#END
#FIN
#STOP