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