%EXTERNALINTEGERFN ROUTE(%LONGINTEGER ROUTE, %INTEGER OPERATION) ! ! Basic file route for EMAS variable record length data files. ! ! File route operation codes: ! %CONSTINTEGER CREATE = 1, ASSIGN = 2, DELETE = 3, DEASSIGN = 4 %CONSTINTEGER CHOOSE RAM = 5 ! ! File description parameter pair identifiers: ! %CONSTINTEGER MINIMUM RECORD SIZE = 105 %CONSTINTEGER MAXIMUM RECORD SIZE = 104 %CONSTINTEGER KEY POSITION = 106 %CONSTINTEGER KEY LENGTH = 107 %CONSTINTEGER ACTUAL FILE SIZE = 150 %CONSTINTEGER SYSTEM FILE DETAILS = 115 %CONSTINTEGER RECORD VIEW = 126 %CONSTINTEGER CONTROL DATA HEADER = 152 %CONSTINTEGER CONTROL DATA TRAILER = 153 %CONSTINTEGER MAXIMUM FILE SIZE = 151 %CONSTINTEGER FILE ORGANISATION = 101 %CONSTINTEGER BLOCK SIZE = 111 %CONSTINTEGER FORM LENGTH = 155 %CONSTINTEGER LINE WIDTH = 154 %CONSTINTEGER DDL FILE DESC = 156 %CONSTINTEGER RECORDING MODE = 157 %CONSTINTEGER TRACKS = 158 %CONSTINTEGER COMPRESS EXPAND = 159 %CONSTINTEGER RECORDING DENSITY = 160 %CONSTINTEGER EXTENSION INCREMENT = 162 %CONSTINTEGER DATA CONTENT SIZE = 163 %CONSTINTEGER CHARACTER CATEGORY = 164 %CONSTINTEGER REDUCTION = 220 %CONSTINTEGER AUTO PAGE = 222 %CONSTINTEGER PLACEMENT = 130 %CONSTINTEGER EMAS TYPE = 131 %CONSTINTEGER CHANNEL = 132 %CONSTINTEGER EMAS CONAD = 133 %CONSTINTEGER CURRENT LENGTH = 134 %CONSTINTEGER RAM NAME = 135 %CONSTINTEGER ROUTE NAME = 136 %CONSTINTEGER INITIAL FILE SIZE = 137 %CONSTINTEGER ACCESS TYPE = 138 %CONSTINTEGER ACCESS LOCK = 139 %CONSTINTEGER TEMP RAM = 141 ! %SYSTEMROUTINESPEC CONNECT(%STRING(31) FILE, %INTEGER A, B, C, %C %RECORDNAME R, %INTEGERNAME FLAG) %SYSTEMROUTINESPEC DISCONNECT(%STRING(31) FILE, %INTEGERNAME FLAG) %SYSTEMROUTINESPEC OUTFILE(%STRING(31) FILE, %C %INTEGER SIZE, HOLE, PROT, %INTEGERNAME CONAD, FLAG) %SYSTEMROUTINESPEC DESTROY(%STRING(31) FILE, %INTEGERNAME FLAG) %SYSTEMROUTINESPEC SETUSE(%STRING(31) FILE, %INTEGER MODE, VALUE) ! %EXTERNALSTRINGFNSPEC ECTM DESC S(%LONGINTEGER ROUTE, %INTEGER ID) %EXTERNALINTEGERFNSPEC ECTM DESC I(%LONGINTEGER ROUTE, %INTEGER ID) %EXTERNALROUTINESPEC ECTM SET DESC I(%LONGINTEGER ROUTE, %C %INTEGER ID, VALUE) %EXTERNALINTEGERFNSPEC ECTM SET DESC S(%LONGINTEGER ROUTE, %C %INTEGER ID, %STRING(255) VALUE) ! %RECORDFORMAT CONREC(%INTEGER CONAD, FILETYPE, DATASTART, DATAEND) %RECORD R(CONREC) %INTEGER AD, FLAG, MODE, CONAD, SIZE, HOLE %STRING(31) FILE %SWITCH CASE(1:5) ! %UNLESS 0 < OPERATION < 6 %THEN %RESULT = 9183 -> CASE(OPERATION) ! CASE(CREATE): FILE = ECTM DESC S(ROUTE, PLACEMENT) HOLE = ECTM DESC I(ROUTE, MAXIMUM FILE SIZE) %IF HOLE <= 0 %THEN HOLE = 256 HOLE = HOLE * 1024 SIZE = ECTM DESC I(ROUTE,INITIAL FILE SIZE) %IF SIZE <= 0 %THEN SIZE = 4 SIZE = SIZE * 1024 OUTFILE(FILE,SIZE,HOLE,0,CONAD,FLAG) %IF FLAG > 0 %THEN %MONITOR %AND %RESULT = FLAG ECTM SET DESC I(ROUTE, EMAS CONAD, CONAD) ECTM SET DESC I(ROUTE, CURRENT LENGTH, 0) ECTM SET DESC I(ROUTE, ACTUAL FILE SIZE, SIZE//1024) INTEGER(CONAD+12) = 4 %RESULT = 0 ! CASE(ASSIGN): FILE = ECTM DESC S(ROUTE, PLACEMENT) MODE = ECTM DESC I(ROUTE, ACCESS TYPE) %IF MODE = 0 %THEN MODE = 1 %IF MODE # 1 %THEN MODE = 3 HOLE = ECTM DESC I(ROUTE,MAXIMUM FILE SIZE) %IF HOLE <= 0 %THEN HOLE = 256 HOLE = HOLE*1024 CONNECT(FILE, MODE, HOLE, 0, R, FLAG) %IF FLAG > 0 %THEN %MONITOR %AND %RESULT = FLAG ECTM SET DESC I(ROUTE, EMAS CONAD, R_CONAD) SIZE = R_DATAEND - R_DATASTART ECTM SET DESC I(ROUTE, CURRENT LENGTH, SIZE) SIZE = (R_DATAEND - R_DATASTART + 32)//1024 ECTM SET DESC I(ROUTE, ACTUAL FILE SIZE, SIZE) %RESULT = 0 ! CASE(DEASSIGN): FILE = ECTM DESC S(ROUTE, PLACEMENT) DISCONNECT(FILE,FLAG) %RESULT = 0 ! CASE(DELETE): FILE = ECTM DESC S(ROUTE, PLACEMENT) SETUSE(FILE,0,0) DESTROY(FILE,FLAG) %RESULT = 0 ! CASE(CHOOSE RAM): %RESULT = ECTM SET DESC S(ROUTE, TEMP RAM, "PLULB1.CTMY_VRAM") ! %END ! %ENDOFFILE