| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 | 
							- import * as Commands from './../../ast/commands';
 
- import { Modes } from '../modes';
 
- import {toInt, toString, toBool, toReal, convertToString} from './../../typeSystem/parsers';
 
- import { Types } from './../../typeSystem/types';
 
- import { ProcessorErrorFactory } from "./../error/processorErrorFactory";
 
- import { StoreValue } from '../store/value/store_value';
 
- export function createOutputFun () {
 
-   const writeFunction = async function (store, _) {
 
-     const totalSV = store.applyStore('p1.0');
 
-     const total = totalSV.get();
 
-     for (let i = 1; i < total; i += 1) {
 
-       const val = store.applyStore(`p1.${i}`);
 
-       this.output.sendOutput(convertToString(val.get(), val.type));
 
-     }
 
-     store.mode = Modes.RETURN;
 
-     return store;
 
-   }
 
-   const block = new Commands.CommandBlock([], [new Commands.SysCall(writeFunction)]);
 
-   const func = new Commands.Function('$write', Types.VOID,
 
-     [new Commands.FormalParameter(Types.ALL, 'p1', false, true)],
 
-     block);
 
-   return func;
 
- }
 
- export function createInputFun () {
 
-   const readFunction = async function (store, _) {
 
-     const text = await this.input.requestInput();
 
-     const typeToConvert = store.applyStore('p1').type;
 
-     let type = null
 
-     let result = null;
 
-     try {
 
-       if (typeToConvert.isCompatible(Types.INTEGER)) {
 
-         result = toInt(text.trim()).trunc();
 
-         type = Types.INTEGER;
 
-       } else if (typeToConvert.isCompatible(Types.REAL)) {
 
-         result = toReal(text.trim())
 
-         type = Types.REAL;
 
-       } else if (typeToConvert.isCompatible(Types.BOOLEAN)) {
 
-         result = toBool(text.trim())
 
-         type = Types.BOOLEAN;
 
-       } else if (typeToConvert.isCompatible(Types.STRING)) {
 
-         result = toString(text)
 
-         type  = Types.STRING;
 
-       } else {
 
-         throw new Error("!!!!Critical error: Unknown type in readFunction!!!!");
 
-       }
 
-     } catch (_) {
 
-       if(this.mode == Modes.ABORT) {
 
-         store.mode = Modes.RETURN;
 
-         return store;
 
-       }
 
-       const stringInfo = typeToConvert.stringInfo()[0]
 
-       const realObject = store.getStoreObject("p1");
 
-       if (realObject.getReferenceDimension() > 0) {
 
-         const arrayInfo = realObject.type.stringInfo()[0];
 
-         const dim = realObject.getReferenceDimension();
 
-         throw ProcessorErrorFactory.invalid_read_type_array(text, stringInfo.type, stringInfo.dim,
 
-           realObject.getRefObj(), arrayInfo.type, dim, this.function_call_stack.pop());
 
-       }
 
-       throw ProcessorErrorFactory.invalid_read_type(text, stringInfo.type, stringInfo.dim,
 
-         realObject.getRefObj(), this.function_call_stack.pop());
 
-     }
 
-     const stoValue = new StoreValue(type, result);
 
-     store.updateStore('p1', stoValue);
 
-     store.mode = Modes.RETURN;
 
-     return store;
 
-   }
 
-   const block = new Commands.CommandBlock([],  [new Commands.SysCall(readFunction)]);
 
-   const func = new Commands.Function('$read', Types.VOID,
 
-     [new Commands.FormalParameter(Types.ALL, 'p1', true)],
 
-     block);
 
-   return func;
 
- }
 
 
  |