|
|
1.1 ! root 1: ////////// ! 2: / i8086 C string library. ! 3: / strncat() ! 4: / ANSI 4.11.3.2. ! 5: ////////// ! 6: ! 7: ////////// ! 8: / char * ! 9: / strncat(To, From, Count) ! 10: / char *To, *From; ! 11: / int Count; ! 12: / ! 13: / Append not more than Count characters (NOT including the NUL) from From to To. ! 14: / Always append a NUL. ! 15: ////////// ! 16: ! 17: #include <larges.h> ! 18: ! 19: To = LEFTARG ! 20: From = To+DPL ! 21: Count = From+DPL ! 22: ! 23: Enter(strncat_) ! 24: Les di, To(bp) / To address to ES:DI ! 25: mov cx, $-1 / Max count to CX ! 26: sub ax, ax ! 27: cld ! 28: repne ! 29: scasb / Find end of To ! 30: dec di / and back up ES:DI to point at NUL ! 31: ! 32: mov cx, Count(bp) / Limit of move (not limit of result) to CX ! 33: or cx, cx ! 34: je 2f / Move nothing ! 35: Lds si, From(bp) / From address to DS:SI ! 36: ! 37: 1: lodsb / Fetch from From ! 38: stosb / and store to To ! 39: orb al, al ! 40: loopne 1b / Count nonzero and NUL not seen yet, continue ! 41: je 2f / NUL has been copied, done ! 42: subb al, al / Count ran out before NUL found, ! 43: stosb / NUL-terminate the string ! 44: ! 45: 2: mov ax, To(bp) / Return the destination ! 46: #if LARGEDATA ! 47: mov dx, es ! 48: #endif ! 49: Leave
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.