// External Function (prototype) printf(fmt, args); // string to array of character unpack(udst, src) { var di, si, sj, p; di=0; si=0; while (1) { p=src[si]; sj=0; while (sj<4) { udst[di]=p-(p/256*256); p=p/256; if (udst[di]==0) return udst; sj=sj+1; di=di+1; } si=si+1; } } // array of character to string pack(dst, usrc) { var di, si; si=di=0; while (1) { dst[di] = usrc[si]; if (usrc[si]==0) return dst; si=si+1; dst[di] = dst[di] + 256 * usrc[si]; // 256 = (2^8) if (usrc[si]==0) return dst; si=si+1; dst[di] = dst[di] + 65536 * usrc[si]; // 65536 = (2^8)^2 if (usrc[si]==0) return dst; si=si+1; dst[di] = dst[di] + 16777216 * usrc[si]; // 16777216 = (2^8)^3 if (usrc[si]==0) return dst; si=si+1; di=di+1; } } // length of unpacked string ustrlen(ustr) { var i; i=0; while (ustr[i] != 0) i=i+1; return i; } // concatenate unpacked string ustrcat(udst, usrc) { var i, j; i=0; while (udst[i] != 0) i=i+1; j=0; while (usrc[j] != 0) { udst[i]=usrc[j]; i=i+1; j=j+1; } udst[i]=0; return udst; } // Main routine main() { var s1, s2; s1 = "Hello "; s2 = "world!"; printf("%s%s\n", s1, s2); var t1[7], t2[7], t[13], s[4]; unpack(t1, s1); unpack(t2, s2); t[0] = 0; ustrcat(t, t1); ustrcat(t, t2); printf("%s\n", pack(s, t)); var i; i=0; while (i < ustrlen(t)) { printf("%c\n", t[i]); i = i + 1; } }