3 ms·
I'd be interested in seeing some sample input/output examples.
by ignoranceprior 6y ago
I'd be interested in seeing some sample input/output examples.
- deleted 6y ago[deleted]
- jiyunomegami 6y agoDuff's device output cut due to length limit, but here you go: CL-USER> (vacietis::cstr-noeval " void send (char * to, char * from, int count) { int n = (count + 7) / 8; switch (count % 8) { case 0: do { * to++ = * from++; case 7: * to++ = * from++; case 6: * to++ = * from++; case 5: * to++ = * from++; case 4: * to++ = * from++; case 3: * to++ = * from++; case 2: * to++ = * from++; case 1: * to++ = * from++; } while (--n > 0); } } int main () { char tobuf[32]; memset(tobuf, 0, sizeof(tobuf)); char* from = \"Duff the magic dragon's device!\"; send(tobuf, from, 31); printf(\"from: %s\\n\", from); printf(\" to: %s\\n\", tobuf); return 0; }") (PROGN (PROGN (DECLAIM (FTYPE (FUNCTION (* * * ) T) SEND)) (VACIETIS::VAC-DEFUN/1 SEND (TO FROM COUNT) (DECLARE (TYPE (SIGNED-BYTE 32) COUNT)) (PROG* ((N (VACIETIS.C:INTEGER/ (VACIETIS.C:+ COUNT 7) 8))) (DECLARE (TYPE (SIGNED-BYTE 32) N)) (VACIETIS.C:SWITCH (VACIETIS.C:% COUNT 8) (1 2 3 4 5 6 7 0) (0 (VACIETIS.C:DO (TAGBODY (VACIETIS.C:= (VACIETIS.C:DEREF* (PROG1 TO (VACIETIS.C:= TO (VACIETIS.C:PTR+ TO 1)))) (VACIETIS.C:DEREF* (PROG1 FROM (VACIETIS.C:= FROM (VACIETIS.C:PTR+ FROM 1))))) 7 (VACIETIS.C:= (VACIETIS.C:DEREF* (PROG1 TO (VACIETIS.C:= TO (VACIETIS.C:PTR+ TO 1)))) (VACIETIS.C:DEREF* (PROG1 FROM (VACIETIS.C:= FROM (VACIETIS.C:PTR+ FROM 1))))) 6 ... ))))))) (PROGN (DECLAIM (FTYPE (FUNCTION NIL (SIGNED-BYTE 32)) MAIN)) (VACIETIS::VAC-DEFUN/1 MAIN NIL (DECLARE) (PROG* ((TOBUF (MAKE-ARRAY 32 :ELEMENT-TYPE '(SIGNED-BYTE 8))) (FROM (VACIETIS:STRING-TO-CHAR* "Duff the magic dragon's device!"))) (DECLARE (DYNAMIC-EXTENT FROM) (TYPE (SIMPLE-ARRAY (SIGNED-BYTE 8) (32)) TOBUF) (DYNAMIC-EXTENT TOBUF)) (MEMSET TOBUF 0 32) (SEND TOBUF FROM 31) (PRINTF (VACIETIS:STRING-TO-CHAR* "from: %s ") FROM) (PRINTF (VACIETIS:STRING-TO-CHAR* " to: %s ") TOBUF) (RETURN-FROM MAIN 0))))) Once you evaluate the above, you can call main from lisp.
- carapace 6y ago(Psst, indent four spaces for monospace blocks) Like this. :)