%EXTERNALINTEGERFN ROUTE(%LONGINTEGER ROUTE, %INTEGER OPERATION) ! ! Basic file route for EMAS character files. ! ! File route operation codes: ! %CONSTINTEGER CREATE = 1, ASSIGN = 2, DELETE = 3, DEASSIGN = 4 %CONSTINTEGER CHOOSE RAM = 5 ! ! File description parameter pair identifiers: ! %CONSTINTEGER ACTUAL FILE SIZE = 150 %CONSTINTEGER MAXIMUM FILE SIZE = 151 %CONSTINTEGER PLACEMENT = 130 %CONSTINTEGER EMAS CONAD = 133 %CONSTINTEGER INITIAL FILE SIZE = 137 %CONSTINTEGER ACCESS TYPE = 138 %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 CHANGE FILE SIZE(%STRING(31) FILE, %C %INTEGER SIZE, %INTEGERNAME 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 FLAG, SIZE, HOLE %OWNINTEGER MODE, CONAD %OWNSTRING(31) FILE %SWITCH CASE(1:5) ! %UNLESS 0 < OPERATION < 6 %THEN %RESULT = 9183 -> CASE(OPERATION) ! CASE(CREATE): FILE = ECTM DESC S(ROUTE, PLACEMENT) MODE = 3 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, ACTUAL FILE SIZE, SIZE//1024) INTEGER(CONAD+4) = 32 INTEGER(CONAD+12) = 3 INTEGER(CONAD+24) = 0 INTEGER(CONAD+28) = 0 %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 %IF MODE = 1 %THEN HOLE = 0 %ELSE %START HOLE = ECTM DESC I(ROUTE,MAXIMUM FILE SIZE) %IF HOLE <= 0 %THEN HOLE = 256 HOLE = HOLE*1024 %FINISH CONNECT(FILE, MODE, HOLE, 0, R, FLAG) %IF FLAG > 0 %THEN %MONITOR %AND %RESULT = FLAG CONAD = R_CONAD ECTM SET DESC I(ROUTE, EMAS CONAD, CONAD) SIZE = INTEGER(R_CONAD)//1024 ECTM SET DESC I(ROUTE, ACTUAL FILE SIZE, SIZE) %RESULT = 0 ! CASE(DEASSIGN): %IF MODE = 3 %THEN %START CHANGE FILE SIZE(FILE,INTEGER(CONAD),FLAG) %FINISH DISCONNECT(FILE,FLAG) %RESULT = 0 ! CASE(DELETE): SETUSE(FILE,0,0) DESTROY(FILE,FLAG) %RESULT = 0 ! CASE(CHOOSE RAM): %RESULT = ECTM SET DESC S(ROUTE, TEMP RAM, "PLULB1.CTMY_CRAM") ! %END ! %ENDOFFILE