'CORAL' L16 'INCLUDE' "[200,25]GENDEF.COR" 'LIBRARY' ( 'COMMENT' BASIC COMPATABLE PROCEDURES; 'INTEGER''PROCEDURE' LEN ('VALUE''INTEGER')); 'COMMON' ('INTEGER''PROCEDURE' ADD TO('VALUE''INTEGER','VALUE''INTEGER')); 'SEGMENT' RJSSUB 'BEGIN' 'INTEGER''PROCEDURE' ADD TO ('VALUE''INTEGER' STRING1, STRING2); 'BEGIN' 'INTEGER' RECIVE POINTER, COUNT; 'INTEGER' WORKSPACE, LENGTH, BYTE POSITION, MAX STR LENGTH, LOAD POINTER; 'OVERLAY' WORKSPACE 'WITH' 'BYTE''ARRAY' CHARS[0:1]; 'IF' STRING1<>0 'AND' STRING1<>-1 'AND' STRING2<>0 'AND' STRING2<>-1 'THEN' 'BEGIN' RECIVE POINTER:=2; (SET UP INITIAL POINTER POSITION) WORKSPACE :=0; (CLEAR WORK SPACE) MAX STR LENGTH:=[STRING1-2]; (HOLD MAXIMUM BUFFER SIZE) LENGTH := LEN(STRING1); (HOLD LENGTH OF MASTER STRING) BYTE POSITION := LENGTH - (LENGTH/2)*2; (INDICATE NEXT BYTE TO LOAD) LOAD POINTER := LENGTH +1; (SET UP OUTPUT LOAD POINTER) 'IF' BYTE POSITION<>0 'THEN' WORKSPACE:=[STRING1 + LOAD POINTER] 'ELSE' LOAD POINTER := LOAD POINTER +1; 'FOR' COUNT:=1 'STEP' 1 'UNTIL' LEN(STRING2) 'DO' 'BEGIN' 'IF' LENGTH< MAX STR LENGTH 'THEN' 'BEGIN' CHARS[BYTE POSITION]:=[STRING2+RECIVE POINTER]; RECIVE POINTER:=RECIVE POINTER +1; LENGTH:=LENGTH+1; BYTE POSITION:=BYTE POSITION+1; (MOVE POINTER TO NEXT BYTE TO LOAD) 'IF' BYTE POSITION=2 'THEN' 'BEGIN' BYTE POSITION:=0; (RESET NEXT BYTE LOAD POINTER) [STRING1 + LOAD POINTER]:=WORK SPACE; (LOAD OUT DATA) WORKSPACE:=0; (CLEAR WORK SPACE) LOAD POINTER:= LOAD POINTER+2; (INDEX TO NEXT WORD TO OUTPUT) 'END'; 'END'; 'END'; [STRING1]:=LENGTH; (LOAD OUT TOTAL STRING LENGTH) 'IF' BYTE POSITION<>0 'THEN' [STRING1 + LOAD POINTER]:= WORKSPACE; (LOAD OUT LAST CHARACTER IF REQUIRED) 'ANSWER' SUCCESS; 'END' 'ELSE' 'ANSWER' ERROR; 'END' OF ADD TO PROCEDURE; 'END'; 'FINISH'