mirror of
https://github.com/retro-software/B5500-software.git
synced 2026-01-11 23:42:42 +00:00
1. Commit library tape images, directories, and extracted text files. 2. Commit additional utilities under Unisys-Emode-Tools.
407 lines
36 KiB
Plaintext
407 lines
36 KiB
Plaintext
$ SET LINEINFO 00000100
|
|
$ SET LISTOMITTED 00000200
|
|
$ SET OMIT 00001000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00002000
|
|
%% %%00003000
|
|
%% TAPUT/TAPBCD %%00004000
|
|
%% %%00005000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00006000
|
|
%% %%00007000
|
|
%% COPYRIGHT (C) 2018: %%00008000
|
|
%% Paradigm Corporation %%00009000
|
|
%% 9747 Businesspark Ave., Suite 220 %%00010000
|
|
%% San Diego CA 92131-1653 %%00011000
|
|
%% voice 858-536-5533, http://www.digm.com %%00012000
|
|
%% %%00013000
|
|
%% Licensed under the Simple Public License (SimPL) 2.0 %%00013100
|
|
%% %%00013200
|
|
%% This material may be copied and used under the terms of %%00013300
|
|
%% that license. This copyright notice must be preserved and %%00013400
|
|
%% appropriate credit given in any derivative materials. %%00013500
|
|
%% %%00013600
|
|
%% This material is offered AS-IS WITH NO WARRANTY. Paradigm hereby %%00013700
|
|
%% disclaims all warranties respecting this material, expressed or %%00013800
|
|
%% implied, including without limitation warranty of design, %%00013900
|
|
%% merchantability, fitness for a particular purpose and against %%00014000
|
|
%% infringement. %%00014100
|
|
%% %%00016000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00017000
|
|
%% >>>> DO NOT RESEQUENCE THIS SOURCE FILE! <<<< %%00017100
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00017200
|
|
%% Maintenance updates will be applied using the sequence %%00017300
|
|
%% number configuration in the file. Mass resequencing will %%00017400
|
|
%% destroy the ability to apply source-level patches to this file. %%00017500
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00017600
|
|
00020000
|
|
THIS PROGRAM TRANSLATES A MAGNETIC TAPE IMAGE FILE IN SIMH .TAP 00021000
|
|
FORMAT TO PAUL PIERCE'S .BCD FORMAT FOR 7-TRACK TAPES. THE PROGRAM 00021100
|
|
ASSUMES THE .TAP FILE IS IN STREAM FORMAT AND HAS BEEN COPIED TO AN 00021200
|
|
MCP SYSTEM WITHOUT TRANSLATION OR CONVERSION OF ANY FORM -- IT 00021300
|
|
SHOULD BE JUST AN OCTET STREAM. THE .BCD FILES IS SIMILARLY WRITTEN 00021400
|
|
WITHOUT TRANSLATION AS AN MCP STREAM FILE. SEE: 00021500
|
|
00021600
|
|
http://simh.trailing-edge.com/docs/simh_magtape.pdf 00021700
|
|
http://www.piercefuller.com/oldibm-shadow/tool.html 00021800
|
|
00021900
|
|
TO RUN THIS PROGRAM, EQUATE FILE "TAP" TO THE .TAP FILE AND 00022000
|
|
"BCD" TO THE NAME OF THE CONVERTED FILE TO BE CREATED, E.G., 00022100
|
|
RUN OBJECT/TAPUT/TAPBCD; 00022200
|
|
FILE TAP=TAP/IMAGE ON PACK; 00022300
|
|
FILE BCD=BCD/IMAGE ON PACK; 00022400
|
|
00900000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00900010
|
|
MODIFICATION LOG. 00900020
|
|
----------------- 00900030
|
|
2018-05-03 P.KIMPEL, PARADIGM CORPORATION, SAN DIEGO, CA. 00900040
|
|
CLONED FROM TAPUT/MAKETAPE, SEE: 00900041
|
|
http://paradigmfutil.sourceforge.net/. 00900042
|
|
2018-05-06 P.KIMPEL 00900050
|
|
MODIFY TO COPY ERROR BLOCKS AND EMIT A WARNING MESSAGE. 00900051
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%00998000
|
|
$ POP OMIT 00999000
|
|
01000000
|
|
BEGIN 01002000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%01003000
|
|
%% GENERAL DEFINES %%01004000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%01005000
|
|
01100000
|
|
DEFINE 01101000
|
|
CPW = 6 #, % CHAR PER WORD 01102000
|
|
BPW = 48 #, % BITS PER WORD 01103000
|
|
SECTORSIZE = 30 #, % WORDS PER SECTOR 01104000
|
|
TICK = (2.4@-6) #, % CPU CLOCK PERIOD [SEC] 01105000
|
|
TICKSPERDAY = (24*3600/TICK) #, 01106000
|
|
ALL1 = (REAL(NOT FALSE)) #, 01107000
|
|
UNITSOF(V,BASE) = (((V)+((BASE)-1)) DIV (BASE)) #, 01108000
|
|
INCREMENTSOF(V,BASE)= (UNITSOF((V),(BASE))*(BASE)) #, 01109000
|
|
P0(A) = POINTER(A,0) #, 01110000
|
|
P8(A) = POINTER(A,8) #, 01111000
|
|
WDS(BYTES) = UNITSOF(BYTES, CPW) #, 01112000
|
|
SECTORS(WDS) = UNITSOF(WDS, SECTORSIZE) #, 01113000
|
|
LOG10(X) = (((FIRSTONE(SCALERIGHTF(X,12))-1).[5:4])+1) #, 01114000
|
|
BIT(X) = (X) DIV BPW].[(BPW-1) - (X) MOD BPW : 1 #, 01115000
|
|
CORRECTLY(V,B) = ((V).[(B)*(BPW DIV CPW)-1:BPW]) FOR (B) #, 01116000
|
|
LOGICAL(A,OP,B) = (REAL(BOOLEAN(A) OP BOOLEAN(B))) #, 01117000
|
|
CAND(A,B) = (IF (A) THEN (B) ELSE FALSE) #, 01118000
|
|
COR(A,B) = (IF (A) THEN TRUE ELSE (B)) #, 01119000
|
|
01200000
|
|
%----- EBCDIC CHARACTER DEFINES ----- 01200100
|
|
NUL = 48"00" #, 01200200
|
|
SP = " " #, 01202400
|
|
01210000
|
|
%----- TIME(6) WORD LAYOUT ----- 01210100
|
|
T6DATEF = [47:16] #, % JULIAN DATE - 1970000 01210200
|
|
T6JULIANBIASV = 1970000 #, 01210300
|
|
T6TIMEF = [31:32] #, % TIME OF DAY, TICKS DIV 16 01210400
|
|
T6SECONDS(T) = ((T).T6TIMEF*(16*TICK)) #, 01210500
|
|
01220000
|
|
%----- TIME(7) WORD LAYOUT ----- 01220100
|
|
T7YEARF = [47:12] #, % CCYY 01220200
|
|
T7MONTHF = [35:6] #, 01220300
|
|
T7DAYF = [29:6] #, 01220400
|
|
T7HOURF = [23:6] #, 01220500
|
|
T7MINUTEF = [17:6] #, 01220600
|
|
T7SECONDF = [11:6] #, 01220700
|
|
T7WEEKDAYF = [5:6] #, % 0=SUNDAY, 1=MONDAY, ... 01220800
|
|
T7YYYYMMDD(T) = ((T.T7YEARF*100 + T.T7MONTHF)*100 + T.T7DAYF) #,01220900
|
|
01250000
|
|
%----- LOGICAL I/O RESULT WORD (STATE ATTRIBUTE) LAYOUT ----- 01251000
|
|
LIOSIZEF = [47:20] #, % ACTUAL DATA TRANSFER LENGTH 01252000
|
|
LIORESULTLISTF = [27:1] #, % RESULT LIST VALID 01253000
|
|
LIOENUMRESULTF = [26:10] #, % ENUMERATED I/O RESULT VALUE 01254000
|
|
LIOTIMEOUTF = [15:1] #, % I/O TIMED OUT 01255000
|
|
LIOBREAKF = [13:1] #, % BREAK ON OUTPUT 01256000
|
|
LIOSHORTBLOCKF = [10:1] #, % SHORT BLOCK OR STREAM CHUNK 01257000
|
|
LIOEOFF = [9:1] #, % END OF FILE 01258000
|
|
LIOPARITYF = [7:1] #, % PARITY ERROR 01259000
|
|
LIOLENGTHERRORF = [4:1] #, % RECORD LENGTH ERROR 01260000
|
|
LIOCANCELEDF = [2:1] #, % I/O CANCELED 01261000
|
|
LIOATTENTIONF = [1:1] #, % ENUMERATED RESULT NOT VALID 01262000
|
|
LIOERRORF = [0:1] #, % SOME ERROR OCCURRED 01263000
|
|
01500000
|
|
%----- TAPE CONVERSION DEFINES ----- 01500100
|
|
TAPEMAXRECSIZE = 4"FFFF" #, 01500200
|
|
TAPEMARK = 48"8F" #, % EVEN PARITY >= CHARACTER CODE 01500300
|
|
01899900
|
|
ZZGENERAL = #; 01900000
|
|
02000000
|
|
FILE 02000100
|
|
TAP (KIND=DISK, FILESTRUCTURE=STREAM, FILEUSE=IN, 02000200
|
|
MAXRECSIZE=1, FRAMESIZE=8, ANYSIZEIO, DEPENDENTINTMODE), 02000300
|
|
BCD (KIND=DISK, FILESTRUCTURE=STREAM, FILEUSE=OUT, NEWFILE, 02000500
|
|
MAXRECSIZE=1, FRAMESIZE=8, ANYSIZEIO, FLEXIBLE); 02000600
|
|
02100000
|
|
EBCDIC ARRAY 02100100
|
|
BUF[0:TAPEMAXRECSIZE-1]; 02100200
|
|
02200000
|
|
TRANSLATETABLE 02200100
|
|
BCDTOODDPARITY( 02200200
|
|
EBCDIC TO 48"4C", 02200220
|
|
02200240
|
|
48"000102030405060708090A0B0C0D0E0F" TO 02200300
|
|
48"400102430445460708494A0B4C0D0E4F", 02200400
|
|
02200500
|
|
48"101112131415161718191A1B1C1D1E1F" TO 02200600
|
|
48"105152135415165758191A5B1C5D5E1F", 02200700
|
|
02200800
|
|
48"202122232425262728292A2B2C2D2E2F" TO 02200900
|
|
48"206162236425266768292A6B2C6D6E2F", 02201000
|
|
02201100
|
|
48"303132333435363738393A3B3C3D3E3F" TO 02201200
|
|
48"703132733475763738797A3B7C3D3E7F"); 02201300
|
|
09700000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%09700100
|
|
%% MESSAGE MECHANISM %%09700200
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%09700300
|
|
09700400
|
|
DEFINE 09700500
|
|
%----- MLSDISPLAY MESSAGE NUMBERS ----- 09700600
|
|
MSG_VERSION = 1 #, 09700700
|
|
MSG_TAPCTLWORDERR = 2 #, 09700800
|
|
MSG_TAPDATAERR = 3 #, 09700900
|
|
MSG_FILEWRITEERR = 4 #, 09701000
|
|
MSG_TAPEORERR = 5 #, 09701100
|
|
MSG_TAPEORMISMATCH = 6 #, 09701200
|
|
MSG_TAPINVALIDCTL = 7 #, 09701300
|
|
MSG_TAPEOF = 8 #, 09701400
|
|
MSG_TAPEERROR = 9 #, 09701500
|
|
09749000
|
|
MSG_INVALIDMESSAGE = 0 #, 09749100
|
|
09749200
|
|
MSG_DISPLAYID = "TAP-BCD: " #; 09749300
|
|
09750000
|
|
OUTPUTMESSAGE ARRAY 09750100
|
|
MSGS(ENGLISH( 09750200
|
|
MSG_VERSION = MSG_DISPLAYID 09750300
|
|
"TAP-BCD version " <1>, 09750400
|
|
MSG_TAPCTLWORDERR = MSG_DISPLAYID 09750500
|
|
"Error reading TAP control word @ " <1> ": " <2>, 09750600
|
|
MSG_TAPDATAERR = MSG_DISPLAYID 09750700
|
|
"Error reading TAP data record @ " <1> ": " <2>, 09750800
|
|
MSG_FILEWRITEERR = MSG_DISPLAYID 09750900
|
|
"Error writing output file @ " <1> ": " <2>, 09751000
|
|
MSG_TAPEORERR = MSG_DISPLAYID 09751100
|
|
"Error reading TAP end-record control @ " <1> ": " <2>, 09751200
|
|
MSG_TAPEORMISMATCH = MSG_DISPLAYID 09751300
|
|
"TAP end-record control size mismatch @ " <1> ": " <2>, 09751400
|
|
MSG_TAPINVALIDCTL = MSG_DISPLAYID 09751500
|
|
"Invalid TAP control word @ " <1> ": " <2>, 09751600
|
|
MSG_TAPEOF = MSG_DISPLAYID 09751700
|
|
"TAP file EOF encountered @ " <1> "(" <2> ")", 09751800
|
|
MSG_TAPEERROR = MSG_DISPLAYID 09751900
|
|
"TAP file error block @ " <1> "(" <2> ")", 09752000
|
|
09799000
|
|
MSG_INVALIDMESSAGE = MSG_DISPLAYID 09799100
|
|
"Invalid message 0" 09799200
|
|
)); 09799300
|
|
09800000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%09800100
|
|
PROCEDURE DISPLAY1N(MSGX, V1); 09800200
|
|
VALUE MSGX, V1; 09800300
|
|
INTEGER MSGX; 09800400
|
|
REAL V1; 09800500
|
|
BEGIN COMMENT 09800600
|
|
DISPLAYS A MESSAGE WITH ONE NUMERIC PARAMETER. 09800700
|
|
; 09800800
|
|
MLSDISPLAY(MSGS[MSGX], STRING(V1,*)); 09800900
|
|
END DISPLAY1N; 09801000
|
|
09801100
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%09801200
|
|
PROCEDURE DISPLAY1N1H(MSGX, V1, V2); 09801300
|
|
VALUE MSGX, V1, V2; 09801400
|
|
INTEGER MSGX, V1; 09801500
|
|
REAL V2; 09801600
|
|
BEGIN COMMENT 09801700
|
|
DISPLAYS A MESSAGE WITH ONE NUMERIC AND ONE HEX PARAMETER. 09801800
|
|
; 09801900
|
|
EBCDIC ARRAY 09802000
|
|
A[0:CPW*2]; 09802100
|
|
HEX ARRAY 09802200
|
|
H[0] = A; 09802300
|
|
09802400
|
|
REPLACE H[CPW*2] BY V2 FOR CPW*2; 09802500
|
|
REPLACE A[0] BY H[CPW*2] FOR CPW*2 WITH HEXTOEBCDIC; 09802600
|
|
MLSDISPLAY(MSGS[MSGX], STRING(V1,*), STRING(A[0], CPW*2)); 09802700
|
|
END DISPLAY1N1H; 09802800
|
|
09802900
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%09803000
|
|
PROCEDURE DISPLAY1N1S(MSGX, V1, P, LEN); 09803100
|
|
VALUE MSGX, V1, P, LEN; 09803200
|
|
INTEGER MSGX, LEN; 09803300
|
|
REAL V1; 09803400
|
|
POINTER P; 09803500
|
|
BEGIN COMMENT 09803600
|
|
DISPLAYS A MESSAGE WITH ONE NUMERIC AND ONE STRING PARAMETER. 09803700
|
|
; 09803800
|
|
MLSDISPLAY(MSGS[MSGX], STRING(V1,*), STRING(P,LEN)); 09803900
|
|
END DISPLAY1N1S; 09804000
|
|
09804100
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%09804200
|
|
PROCEDURE DISPLAY2N(MSGX, V1, V2); 09804300
|
|
VALUE MSGX, V1, V2; 09804400
|
|
INTEGER MSGX; 09804500
|
|
REAL V1, V2; 09804600
|
|
BEGIN COMMENT 09804700
|
|
DISPLAYS A MESSAGE WITH TWO NUMERIC PARAMETERS. 09804800
|
|
; 09804900
|
|
MLSDISPLAY(MSGS[MSGX], STRING(V1,*), STRING(V2,*)); 09805000
|
|
END DISPLAY2N; 09805100
|
|
80000000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%80000100
|
|
REAL PROCEDURE BIGENDIAN(V, BYTES); 80000200
|
|
VALUE V, BYTES; 80000300
|
|
REAL V; 80000400
|
|
INTEGER BYTES; 80000500
|
|
BEGIN COMMENT 80000600
|
|
CONVERTS THE LOW-ORDER "BYTES" OF A WORD (UP TO 6) FROM 80000700
|
|
LITTLE-ENDIAN TO BIG-ENDIAN BYTE ORDER. 80000800
|
|
; 80000900
|
|
80001000
|
|
BIGENDIAN:= (V.[47:8] & V[15:39:8] & V[23:31:8] & 80001100
|
|
V[31:23:8] & V[39:15:8] & V[47:7:8]).[47:BYTES*8]; 80001200
|
|
END BIGENDIAN; 80001300
|
|
80200000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%80200100
|
|
BOOLEAN PROCEDURE READTAP(TAPCOUNT, BUF, BLOCKLENGTH, MSGX); 80200200
|
|
VALUE TAPCOUNT, BLOCKLENGTH, MSGX; 80200300
|
|
EBCDIC ARRAY BUF[0]; 80200400
|
|
INTEGER TAPCOUNT, BLOCKLENGTH, MSGX; 80200500
|
|
BEGIN COMMENT 80200600
|
|
READS THE NEXT "BLOCKLENGTH" BYTES FROM THE INPUT .TAP FILE INTO 80200700
|
|
"BUF", CHECKING FOR LOGICAL I/O ERRORS AND A MATCHING ACTUALLY- 80200800
|
|
READ LENGTH (A MISMATCH USUALLY IMPLIES AN IMPENDING ERROR OR 80200900
|
|
EOF ON THE NEXT READ). 80201000
|
|
; 80201100
|
|
BOOLEAN 80201200
|
|
IORESULT; 80201300
|
|
80201400
|
|
IORESULT:= READ(TAP, BLOCKLENGTH, BUF); 80201500
|
|
IF IORESULT THEN 80201600
|
|
BEGIN 80201620
|
|
IF IORESULT.LIOEOFF THEN 80201640
|
|
DISPLAY2N(MSG_TAPEOF, TAPCOUNT, MSGX) 80201660
|
|
ELSE 80201680
|
|
DISPLAY1N1H(MSGX, TAPCOUNT, REAL(IORESULT)); 80201700
|
|
END 80201750
|
|
ELSE 80201800
|
|
IF REAL(IORESULT).LIOSIZEF ^= BLOCKLENGTH THEN 80201900
|
|
BEGIN 80202000
|
|
DISPLAY2N(MSGX, TAPCOUNT, REAL(IORESULT)); 80202100
|
|
IORESULT.[0:1]:= TRUE; 80202200
|
|
END; 80202300
|
|
80202400
|
|
READTAP:= IORESULT; 80202500
|
|
END READTAP; 80202600
|
|
81000000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%81000100
|
|
PROCEDURE CONVERTTAPE; 81000200
|
|
BEGIN COMMENT 81000300
|
|
DRIVER FOR CONVERTING THE .TAP FILE TO A .BCD FILE. 81000400
|
|
; 81000500
|
|
INTEGER 81000600
|
|
BLOCKSIZE, % ACTUAL TAPE BLOCK SIZE 81000700
|
|
BLOCKLENGTH, % ROUNDED-UP .TAP BLOCK SIZE 81000800
|
|
TAPCOUNT; % COUNT OF .TAP CONTROL BLOCKS 81000900
|
|
REAL 81001000
|
|
CTLW; % .TAP CONTROL WORD (32 BITS) 81001100
|
|
BOOLEAN 81001200
|
|
IORESULT, % LOGICAL I/O RESULT (STATE) 81001300
|
|
DONE; % LOOP CONTROL 81001400
|
|
81001500
|
|
DO BEGIN 81001600
|
|
TAPCOUNT:= *+1; 81001700
|
|
IORESULT:= READTAP(TAPCOUNT, BUF, 4, MSG_TAPCTLWORDERR); 81001800
|
|
IF IORESULT THEN 81001900
|
|
BEGIN 81001920
|
|
IF IORESULT.LIOEOFF THEN 81001940
|
|
DONE:= TRUE 81001960
|
|
ELSE 81001980
|
|
MYSELF.STATUS:= VALUE(TERMINATED); 81002000
|
|
END 81002050
|
|
ELSE 81002100
|
|
BEGIN 81002200
|
|
CTLW:= BIGENDIAN(REAL(BUF, 4), 4); 81002300
|
|
81002400
|
|
IF CTLW = 4"00000000" THEN 81002500
|
|
BEGIN % EOF (TAPEMARK) 81002600
|
|
REPLACE BUF BY TAPEMARK; 81002700
|
|
WRITE(BCD, 1, BUF); 81002800
|
|
END 81002900
|
|
81003000
|
|
ELSE IF CTLW.[30:7] = 0 THEN 81003100
|
|
BEGIN % NORMAL BLOCK WRITE 81003200
|
|
BLOCKSIZE:= CTLW.[23:24]; 81003300
|
|
BLOCKLENGTH:= (BLOCKSIZE+1) & 0[0:1]; 81003400
|
|
IORESULT:= READTAP(TAPCOUNT, BUF, BLOCKLENGTH, MSG_TAPDATAERR); 81003500
|
|
IF IORESULT THEN 81003600
|
|
MYSELF.STATUS:= VALUE(TERMINATED) 81003700
|
|
ELSE 81003800
|
|
BEGIN 81003900
|
|
IF CTLW.[31:8] = 4"80" THEN 81003905
|
|
DISPLAY1N1H(MSG_TAPEERROR, TAPCOUNT, CTLW); 81003910
|
|
81003915
|
|
REPLACE BUF BY BUF FOR BLOCKSIZE WITH BCDTOODDPARITY; 81003920
|
|
REPLACE BUF BY (REAL(BUF,1) & (1)[7:1]).[7:48] FOR 1; 81003940
|
|
IORESULT:= WRITE(BCD, BLOCKSIZE, BUF); 81004000
|
|
IF IORESULT THEN 81004100
|
|
BEGIN 81004200
|
|
DISPLAY1N1H(MSG_FILEWRITEERR, TAPCOUNT, REAL(IORESULT)); 81004300
|
|
MYSELF.STATUS:= VALUE(TERMINATED); 81004400
|
|
END 81004500
|
|
ELSE 81004600
|
|
BEGIN 81004700
|
|
IORESULT:= READTAP(TAPCOUNT, BUF, 4, MSG_TAPEORERR); 81004800
|
|
IF IORESULT THEN 81004920
|
|
MYSELF.STATUS:= VALUE(TERMINATED) 81004940
|
|
ELSE 81004960
|
|
IF BIGENDIAN(REAL(BUF, 4), 4) ^= CTLW THEN 81005000
|
|
BEGIN 81005100
|
|
DISPLAY2N(MSG_TAPEORMISMATCH, TAPCOUNT, 81005200
|
|
BIGENDIAN(REAL(BUF, 4), 4)); 81005300
|
|
MYSELF.STATUS:= VALUE(TERMINATED); 81005400
|
|
END; 81005500
|
|
END; 81005600
|
|
END; 81005700
|
|
END 81005800
|
|
81006500
|
|
ELSE IF CTLW = 4"FFFFFFFF" THEN 81006600
|
|
DONE:= TRUE % END-OF-MEDIUM, QUIT 81006700
|
|
81006800
|
|
ELSE IF CTLW = 4"FFFFFFFE" THEN 81006900
|
|
BEGIN END % ERASE GAP -- IGNORE THIS 81007000
|
|
81007100
|
|
ELSE 81007200
|
|
BEGIN % UNRECOGNIZED CONTROL WORD 81007300
|
|
DISPLAY1N1H(MSG_TAPINVALIDCTL, TAPCOUNT, CTLW); 81007400
|
|
MYSELF.STATUS:= VALUE(TERMINATED); 81007500
|
|
END; 81007600
|
|
END; 81007700
|
|
END 81007800
|
|
UNTIL DONE; 81007900
|
|
81008000
|
|
END CONVERTTAPE; 81008100
|
|
99900000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%99902000
|
|
%% OUTER BLOCK %%99903000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%99904000
|
|
REAL 99904100
|
|
T7; % TIME(7) TIMESTAMP WORD 99904200
|
|
99910000
|
|
T7:= COMPILETIME(7); 99910100
|
|
REPLACE BUF BY 99910200
|
|
T7.T7YEARF FOR 4 DIGITS, T7.T7MONTHF FOR 2 DIGITS, 99910300
|
|
T7.T7DAYF FOR 2 DIGITS, "-", 99910400
|
|
T7.T7HOURF FOR 2 DIGITS, T7.T7MINUTEF FOR 2 DIGITS; 99910500
|
|
MLSDISPLAY(MSGS[MSG_VERSION], STRING(BUF, 13)); 99910600
|
|
99910700
|
|
OPEN(TAP); 99910800
|
|
BCD.INTMODE:= TAP.INTMODE; 99910820
|
|
BCD.EXTMODE:= TAP.EXTMODE; 99910840
|
|
OPEN(BCD); 99910900
|
|
99911000
|
|
CONVERTTAPE; 99911100
|
|
99911200
|
|
CLOSE(BCD, CRUNCH); 99911300
|
|
CLOSE(TAP); 99911400
|
|
END. 99999900
|