O p   O`! #@%`')+   O`! #@%`')+CSRC  H GDTMP  H GDBIN  H GD .  H GD..  H GDATOD C GD;CRTS0 S GDCRTSD S GD vCRTSG S GD ^CRYSTAL S GD CSHTOMWCC GDFACTOR C GDU .  H GD..  H GDCPS68201004 GD.  H GD..  H GDAS68TOASPRG GD9/* * Atod converts the string `num' to a double and returns the value. * Note, that if there is a non-digit in the string, or if there is * an overflow, then it exits with an appropriate error message. * Also note that atod accepts leading zero for octal and leading * 0x for hexidecimal, and that in the latter case, a-f and A-F are * both accepted as digits. */ double atod(num) char *num; { register char *str; register int i; double res = 0, base = 10; str = num; i = *str++; if (i == '0') if ((i=*str++) == 'x') { i = *str++; base = 0x10; } else base = 010; for (; i != '\0'; i=*str++) { i = todigit(i); if (i >= base) die("bad number `%s'", num); res = res * base + i; if (res+1 == res) die("Number too big `%s'", num); } return (res); } / / ST C run time startup. / .prvd .globl errno_ .globl environ_ .globl _stksize_ .globl _start_ errno_: .word 0 environ_: .long 0 / / Parse TOS environment list into vector at end of bss. / a0 = base of envp[] / a1 = past end of envp[] or argv[] / a2 = pointer to next word to parse / a3 = pointer to last word parsed / a4 = unused / a5 = base page pointer / d0 = base of argv[] if found / d1 = terminator character for parse / d2 = character temporary / d3 = argv found flag / _iovector_ = value of ARGV parameter if any / environ_ = where envp[] gets stored for getenv() / _stksize_ = a long size for stack allocation / overwritten at runtime to make a stack limit / _start_ = program text base / .shri _start_: movea.l 4(a7), a5 / Fetch base page pointer movea.l 24(a5), a0 / Fetch bss base adda.l 28(a5), a0 / + size of bss = envp[] movea.l 44(a5), a2 / Fetch environment pointer clr.l d0 / no argv[] movea.l a0, a1 / Begin envp[] tst.b (a2) / Test for empty envp[] beq.s 8f move.l a2, (a1) / Store first element of vector 0: movea.l a2, a3 movea.l (a1)+, a2 9: tst.b (a2)+ bne.s 9b move.l a2, (a1) tst.b (a2) / Test next byte. beq.s 1f / End of environment / Look for ARGV cmpi.b $0x41, (a3)+ / 'A' ? bne.s 0b cmpi.b $0x52, (a3)+ / 'R' ? bne.s 0b cmpi.b $0x47, (a3)+ / 'G' ? bne.s 0b cmpi.b $0x56, (a3)+ / 'V' ? bne.s 0b / ARGV found, look for iovector. cmpi.b $0x3D, (a3)+ / '=' ? bne.s 0f tst.b (a3) beq.s 0f move.l a3, _iovector_ / ARGV found, rest of environ is argv[] 0: clr.l (a1)+ / terminate envp move.l a1, d0 / Save base of argv[] move.l a2, (a1) / start of arguments 0: movea.l a2, a3 movea.l (a1)+, a2 9: tst.b (a2)+ bne.s 9b move.l a2, (a1) tst.b (a2) / detect end bne.s 0b / End of envp[] or envp[] and argv[] 1: move.l d0, d3 / See if argv[] found bne.s 2f / ARGV= not found, parse command tail 8: clr.l (a1)+ / terminate envp move.l a1, d0 / Save base of argv[] move.l $_cmdname_, (a1)+ / Store canned name for argv[0] lea 128(a5), a2 / Command tail buffer == argv[1] move.b (a2)+, d2 / Fetch count ext d2 clr.b 0(a2, d2) / Nul terminate the cmdtail moveq $0x20, d1 / Space terminator 0: move.b (a2)+, d2 / If it isn't empty beq.s 2f / end of command tail cmp.b d1, d2 / Strip spaces beq.s 0b subq $1, a2 / Unstrip character move.l a2, (a1)+ / Store into vector 9: move.b (a2)+, d2 / Fetch character beq.s 2f / end of command tail cmp.b d1, d2 / Terminator bne.s 9b 1: clr.b -1(a2) / Terminate argv[argc] bra.s 0b / Continue / End of envp[] and argv[] 2: clr.l (a1)+ / Terminate argv[] / Allocate stack, a1 points beyond vectors move.l a1, d1 / Save end of vectors for argc adda.l _stksize_, a1 / Allocate _stksize_ bytes of stack move.l d1, _stksize_ / Save end of vectors for stack limit movea.l a1, a7 / Set the initial stack. move.l a1, 4(a5) / Save current brk for sbrk / Push arguments for main(argc, argv, envp) move.l a5, -(a7) / basepage move.l a0, environ_ / envp[] move.l a0, -(a7) / envp[] move.l d0, -(a7) / argv[] sub.l d0, d1 / (argc+1) * sizeof(char *) asr.l $2, d1 / (argc+1) subq $1, d1 / argc move d1, -(a7) / Release unused memory to the system pool. suba.l a5, a1 / Compute size of retained memory move.l a1, -(a7) move.l a5, -(a7) / Base of retained memory clr -(a7) / Must be zero move $0x4A, -(a7) / Mshrink opcode trap $1 / Gemdos adda $12, a7 / Pop arguments / Fixup the stderr file handle if we're off the desktop / Something is weird here, trying same without close's tst.l d3 bne.s 0f move $4, -(a7) / dup2(d7 = dup(2), 4), close(d7) move $2, -(a7) jsr dup_ / move d0, d7 move d0, (a7) jsr dup2_ / move d7, (a7) / jsr close_ move $2, 2(a7) / dup2(d7 = dup(0), 2), close(d7) clr (a7) jsr dup_ / move d0, d7 move d0, (a7) jsr dup2_ / move d7, (a7) / jsr close_ addq $4, a7 / pop 0: / Call main(argc, argv, envp) suba a6, a6 / Zero frame pointer jsr main_ / Call main line adda $10, a7 / Pop arguments / Exit with return from main move d0, -(a7) / Push status jsr exit_ / Call extended exit() move $0x4C, -(a7) / Terminate trap $1  / / desk accessory run-time startup code / .shri .globl main_ _start_: movea.l $__ESTACK__,a7 / load the stack pointer with our stack jsr main_ / Execute the desk accessory clr -(a7) / Function 0 trap $1 / Gemdos (Pterm0()) .bssd .even __USTACK__: .blkw 1024 / this is the stack size __ESTACK__: .blkl 1 / Put your value in its place. / / ST C run time startup. / / Stripped version for gem tos/aes/vdi environment: / main called with argc == argv == envp == 0, / getenv will not work / file handle 2 left pointing where ever it does, / .prvd .globl errno_ .globl environ_ .globl _stksize_ .globl _start_ errno_: .word 0 environ_: .long 0 / / a1 = end of bssd / a5 = base page pointer / _stksize_ = a long size for stack allocation / overwritten at runtime to make a stack limit / _start_ = program text base / .shri _start_: movea.l 4(a7), a5 / Fetch base page pointer movea.l 24(a5), a1 / Fetch bss base adda.l 28(a5), a1 / + size of bss / Allocate stack, a1 points beyond vectors move.l a1, d0 / Save stack limit adda.l _stksize_, a1 / Allocate _stksize_ bytes of stack move.l d0, _stksize_ / Save stack limit movea.l a1, a7 / Set the initial stack. move.l a1, 4(a5) / Save current brk for sbrk / Push arguments for main(argc, argv, envp) move.l a5, -(a7) / basepage clr.l -(a7) / envp[] clr.l -(a7) / argv[] clr -(a7) / argc / Release unused memory to the system pool. suba.l a5, a1 / Compute size of retained memory move.l a1, -(a7) move.l a5, -(a7) / Base of retained memory clr -(a7) / Must be zero move $0x4A, -(a7) / Mshrink opcode trap $1 / Gemdos adda $12, a7 / Pop arguments / Call main(argc, argv, envp) suba a6, a6 / Zero frame pointer jsr main_ / Call main line adda $10, a7 / Pop arguments / Exit with return from main move d0, -(a7) / Push status jsr exit_ / Call extended exit() move $0x4C, -(a7) / Terminate trap $1  .globl crystal_ .globl ctrl_cn_ .prvi / / For GEMAES calls from AESBIND.a or cryslib.o / crystal_: move.l 4(a7),d1 move $200,d0 trap $2 rts / / control array for vdibind / .prvd  .even ctrl_cn_: / Application Manager .byte 0, 1, 0 / func 010  .byte 2, 1, 1 / func 011  .byte 2, 1, 1 / func 012 .byte 0, 1, 1 / func 013 .byte 2, 1, 1 / func 014 .byte 1, 1, 1 / func 015 .byte 0, 0, 0 / func 016 .byte 0, 0, 0 / func 017 .byte 0, 0, 0 / func 008 .byte 0, 1, 0 / func 019 /  Event Manager .byte 0, 1, 0 / func 020 .byte 3, 5, 0 / func 021 .byte 5, 5, 0 / func 022 .byte 0, 1, 1 / func 023 .byte 2, 1, 0 / func 024 .byte 16, 7, 1 / func 025 .byte 2, 1, 0 / func 026 .byte 0, 0, 0 / func 027 .byte 0, 0, 0 / func 028 .byte 0, 0, 0 / func 009 /  Menu Manager .byte 1, 1, 1 / func 030 .byte 2, 1, 1 / func 031 .byte 2, 1, 1 / func 032 .byte 2, 1, 1 / func 033 .byte 1, 1, 2 / func 034 .byte 1, 1, 1 / func 005 .byte 0, 0, 0 / func 006 .byte 0, 0, 0 / func 007 .byte 0, 0, 0 / func 008 .byte 0, 0, 0 / func 009 /  Object Manager .byte 2, 1, 1 / func 040 .byte 1, 1, 1 / func 041 .byte 6, 1, 1 / func 042 .byte 4, 1, 1 / func 043 .byte 1, 3, 1 / func 044 .byte 2, 1, 1 / func 045 .byte 4, 2, 1 / func 046 .byte 8, 1, 1 / func 047 .byte 0, 0, 0 / fu nc 048 .byte 0, 0, 0 / func 049 /  Form Manager .byte 1, 1, 1 / func 050 .byte 9, 1, 1 / func 051 .byte 1, 1, 1 / func 002 .byte 1, 1, 0 / func 003 .byte 0, 5, 1 / func 004 .byte 0, 0, 0 / func 005 .byte 0, 0, 0 / func 006 .byte 0, 0, 0 / func 007 .byte 0, 0, 0 / func 008 .byte 0, 0, 0 / func 009 /  Dialog Manager .byte 0, 0, 0 / func 060 .byte 0, 0, 0 / func 061 .byte 0, 0, 0 / func 062 .byte 0, 0, 0 / func 003 .byte 0, 0, 0 / func 004 .byte 0, 0, 0 / func 005 .byte 0, 0, 0 / func 006 .byte 0, 0, 0 / func 007 .byte 0, 0, 0 / func 008 .byte 0, 0, 0 / func 009 / Graphics Manager .byte 4, 3, 0 / func 070 .byte 8, 3, 0 / func 071 .byte 6, 1, 0 / func 072 .byte 8, 1, 0 / func 073 .byte 8, 1, 0 / func 074 .byte 4, 1, 1 / func 075 .byte 3, 1, 1 / func 076 .byte 0, 5, 0 / func 077 .byte 1, 1, 1 / func 078 .byte 0, 5, 0 / func 009 / Scrap Manager .byte 0, 1, 1 / func 080 .byte 0, 1, 1 / func 081 .byte 0, 0, 0 / func 082 .byte 0, 0, 0 / func 083 .byte 0, 0, 0 / func 084 .byte 0, 0, 0 / func 005 .byte 0, 0, 0 / func 006 .byte 0, 0, 0 / func 007 .byte 0, 0, 0 / func 008 .byte 0, 0, 0 / func 009 / fseler Manager .byte 0, 2, 2 / func 090 .byte 0, 0, 0 / func 091 .byte 0, 0, 0 / func 092 .byte 0, 0, 0 / func 003 .byte 0, 0, 0 / func 004 .byte 0, 0, 0 / func 005 .byte 0, 0, 0 / func 006 .byte 0, 0, 0 / func 007 .byte 0, 0, 0 / func 008 .byte 0, 0, 0 / func 009 / Window Manager .byte 5, 1, 0 / func 100 .byte 5, 1, 0 / func 101 .byte 1, 1, 0 / func 102 .byte 1, 1, 0 / func 103 .byte 2, 5, 0 / func 104 .byte 6, 1, 0 / func 105 .byte 2, 1, 0 / func 106 .byte 1, 1, 0 / func 107 .byte 6, 5, 0 / func 108 .byte 0, 0, 0 / func 009 / Resource Manger .byte 0, 1, 1 / func 110 .byte 0, 1, 0 / func 111 .byte 2, 1, 0 / func 112 .byte 2, 1, 1 / func 113 .byte 1, 1, 1 / func 114 .byte 0, 0, 0 / func 115 .byte 0, 0, 0 / func 006 .byte 0, 0, 0 / func 007 .byte 0, 0, 0 / func 008 .byte 0, 0, 0 / func 009 / Shell Manager .byte 0, 1, 2 / func 120 .byte 3, 1, 2 / func 121 .byte 1, 1, 1 / func 122 .byte 1, 1, 1 / func 123 .byte 0, 1, 1 / func 124 .byte 0, 1, 2 / func 125 /* * Usage: cshtomwc file_name [argument ...] * * Returns: 1 if anything went wrong, otherwise return status of program. * * Compile with: cc cshtomwc.c # for the newest cshell's * or with: cc -DOLDCSHELL cshtomwc.c # for older cshell's * * Written by: rec@mwc 1986-10-08 * * This program should allow cshell users to call MWC programs * with the following caveats: * 1) You must give a complete file name for the program to be run. * Since you'll probably be using this in an alias or a command * file, this should be no great misery. * 2) You must setenv the environments which MWC requires * These are listed several times in the MWC documentation. * Start from the lexicon article on 'environment' if you need * review. (If your cshell doesn't have a 'setenv' command, * keep reading; we have a solution for you, too.) * 3) The enviroments must be in MWC format with the exception * of PATH which we may use the cshell list separator. * 4) If you redirect standard input to a file or a pipe, the * program you call will not find EOF on standard input. * 5) If you redirect standard output to a file, all writes to * stderr will end up there, too. * * The first version of this program was produced from a Beckemeyer * environment/argument passing specification dated 9/30/86. The * version of the cshell which we have does not follow the specification, * it passes random binary garbage in the basepage.p_env. The multi- * tasking cshell does follow the specification. We don't know when he * added the environment/argument passing conventions to his product. * If your cshell has no 'setenv' command, or if this program doesn't * work when compiled with 'cc cshtomwc.c', then you should: * 1) Edit the strings in the defenv array below to reflect * your system's configuration. * 2) Compile with 'cc -DOLDCSHELL cshtomwc.c' to eliminate * the Beckemeyer anachronisms. */ #include /* To find the environment string */ #include /* To find impossibilities */ #include /* To have a good time */ #ifdef OLDCSHELL /* * This only applies to older cshell's which have no environment. * Edit these strings to match your system's layout. * Note that they almost certainly won't work as they are. * Be sure to preserve the doubled backslashes, or the c compiler * will make some unprintable characters for you. */ char *defenv[] = { "PATH=.bin,,a:\\bin,b:\\bin", "SUFF=,.prg,.tos,.ttp", "TMPDIR=a:\\tmp", "INCDIR=a:\\include", "LIBPATH=a:\\lib,b:\\lib", 0 }; #endif main(argc, argv, envp) int argc; char *argv[], *envp[]; { #ifndef OLDCSHELL { /* * The first order of business is to fixup the environment. * Beckemeyer uses a "name=", "value" format which is * a) incompatible with U**X or Coherent, * b) incapable of passing empty values. * We have to reparse p_env from scratch * because our run time startup truncated envp[] * when it found "ARGV=". * But envp[], and argv[] which follows it in memory, * will have plenty of room for the resulting vector * since we're halving the number of strings. * And p_env will have plenty of room since we're * simply deleting NUL's and packing the result. */ register char *p1, *p2, **vp; vp = envp; /* passed by crts0.o */ p1 = p2 = (char *)BP->p_env; /* Get the start */ do { *vp++ = p1; /* set envp[x] */ while (*p1++ = *p2++) /* copy "name=" to NUL */ ; --p1; /* scrap NUL */ while (*p1++ = *p2++) /* concatenate "value" to NUL */ ; } while (*p2 != 0); /* until you see two NUL's in a row */ *vp++ = 0; /* Mark end of envp[] */ assert(vp < argv+argc); /* There is room, I swear there is */ assert(p1 < (char *)_start); /* There's room here, too */ } { /* * Next we'll load argv[]. * Beckemeyer uses ARGV=address_in_the_parent's_data_space * to pass arguments which is * a) economical, since a Pexec() makes a copy in our format * b) sort of suicidal if the program you're running is buggy * We just fetch the environment and put the value into argv[] * above. We fetch the ARGC=number_of_arguments parameter, too. */ extern char *getenv(); /* To find the string */ extern long atol(); /* To convert the string */ register char *p; /* To hold the value for a moment */ if ((p = getenv("ARGV")) == 0) return Cconws("cshtomwc: no ARGV found\n\r"), 1; argv = (char **)atol(p); if ((p = getenv("ARGC")) == 0) return Cconws("cshtomwc: no ARGC found\n\r"), 1; argc = (int)atol(p); assert(((long)argv & 1) == 0); /* Sorry Dave, just paranoid */ assert(argv+argc < (char **)BP->p_env); assert(argv[argc] == 0); /* I assume it's NULL terminated */ } { /* * A temporary fix. The PATH parsing routines will * accept ';' as a separator in the next release. * But for now, we need to translate ';' into ','. */ extern char *getenv(); register char *p; register int c; if ((p = getenv("PATH")) != 0) while (c = *p++) if (c == ';') p[-1] = ','; } #else { /* * There is no environment in older cshell's * so we simply plug the canned environment * defined above. */ envp = defenv; } #endif { /* * We need to fixup the _iovector which our libraries * depend on for the information about file handles * which gemdos is too dumb to provide. Because the * program we exec will see ARGV= in its environment * it will assume that standard file handles 0, 1, and 2 * refer to standard input, standard output, and standard * error streams respectively. Beckemeyer doesn't provide * any information about what he's done to these handles, * but everyone complains that they can't redirect stderr * so we'll assume that it points at aux:. * We'll also assume that where ever stdout points * it's all right to point stderr there as well. * The only thing which will break our programs is a redirection * of standard input to a file. Without _iovector[0] == 'F', * our programs cannot determine that stdin is not the console. * Using Cconrs() to read a file is a loss, since it never * returns EOF. Using our io package to read a file when it thinks * it's reading con: is a double loss, since we echo the missing * linefeeds back to con:. */ extern char *_iovector; _iovector = "CCAP?"; /* default setup */ dup2(dup(2), 4); /* make copy of aux: */ dup2(dup(1), 2); /* point stderr at stdout */ } /* * One last check. */ if (argc < 2) return Cconws("Usage: cshtomwc file_name [arg ...]\n\r"), 1; /* * And we're ready to go. */ return execve(argv[1], argv+1, envp); } Z/* * Factor prints out the prime factorization of numbers. If there are * any arguments, then it factors these. If there are no arguments, * then it reads stdin until either EOF or the number zero or a non-numeric * non-white-space character. Since factor does all of its calculations * in double format, the largest number which can be handled is quite * large. */ #include #include #include #define NUL '\0' #define ERROR 0x10 /* largest input base */ #define MAXNUM 200 /* max number of chars in number */ main(argc, argv) int argc; register char *argv[]; { register char *chp; double n; double atod(); char *getnum(); if (argc != 1) while ((chp=*++argv) != NULL && (n=atod(chp)) != 0) factor(n); else while ((chp=getnum()) != NULL && (n=atod(chp)) != 0) factor(n); return (0); } die(str) char *str; { fprintf(stderr, "%r\n", &str); exit(1); } usage() { die("usage: factor [number number ...]"); } char * getnum() { register char *chp, ch; static char res[MAXNUM+1]; do { ch = getchar(); } while (isascii(ch) && isspace(ch)); if (!isascii(ch) || todigit(ch) == ERROR) return (NULL); for (chp=res; isascii(ch) && !isspace(ch); ch=getchar()) if (chp < &res[MAXNUM]) *chp++ = ch; if (chp >= &res[MAXNUM]) die("Number too big"); *chp++ = NUL; return (res); } /* * Todigit converts the char `ch' to an integer equivalent, assuming * that `ch' is a digit or `a'-`f' or `A'-`F'. If this is not true, * then it returns ERROR. */ todigit(ch) register int ch; { if (!isascii(ch)) return (ERROR); if (isdigit(ch)) return (ch - '0' + 0); if (isupper(ch)) ch = tolower(ch); if ('a' <= ch && ch <= 'f') return (ch - 'a' + 0xa); return (ERROR); } /* * Factor is the routine that actually factors the double `n'. * It writes the prime factors to standard output. */ factor(n) double n; { double temp, limit, try; while (n > 1 && modf(n/2, &temp) == 0) { printf("2 "); n = temp; } limit = sqrt(n); for (try=3; try <= limit; try += 2) { if (modf(n/try, &temp) != 0) continue; do { printf("%.0f ", try); n = temp; } while (modf(n/try, &temp) == 0); limit = sqrt(n); } if (n > 1) printf("%.0f", n); putchar('\n'); }  `#R j*o m$m,B"HJgP"&J$YJf"Jg< Af Rf Gf Vf =f Jg#5B "&J$YJf"Jf&f2B "$EHB2 r ggSJ"g fB*`B" 6#6.I+I/ #$J//SA?/ / Bg?<JNA Jf.?<?<N>N?|BWN>NXONV ?N?<LNANV/ *nB.Jg p@R`.H /0H *_N^NuNV/ nH@ @*g .;g ./fz nSp/ :e nH@ @ g . fS` nHh/<:"NPO.H/<:"N"XO @-HHCf np/`~ .S-@ :c nH@ @ g . fS` nP nB nHh/<:"NPO nS np//./<:"NPO&N^NuNVH0(n LJgh .fRB/ HnNPO/</.N BPO-@ @ *P g*/ /-NPOJ@fg0@g `*m`BL0N^NuNVH0 n BB@;@ n *f0 n (=g/.NVXO/.NXOHЮ`*n(n -@H@ |#R2<`XHXW PN`rp;`f fp=`Xp=@`Np"]g.H.HAg`p"J.fS` LR-Hp.`|p$ "fp'R MT`bp@p?Hn/ N *@B.A-H nRPg.H @(g .)fR.` .f LSB n Hh/. NPO`p0px`H@ @ g . fR`Bp@ n _f& n Hh/. NPO/<4e/. NPO.H @(fRBgHn/ N *@A-H nRPg`J9;gp,p Jg6J9;f`*p?Hn/ N *@A-H nRPg` g(,H@ @$g .xg .-g .+f<H@ @0m .9o .am .fo .Am .Fo .Am .Zn. `nB/<4g/.NPOJ@f nB/<?/. N|PO-@g n0@g n/( /. NPO n _f,J.f& n Hh/. NPO/<4j/. NPO .:fp/<4l/. NPOJnfJ.fS`hH@ @ g . g .,fJ .,fp;R`/<4c/. NPOR .` .)f/<4n/. NPO L0N^NuNVB.A-H-n nPgH .-f nȱg nJ(gp@ ./f p,@p@ nRR` nBJ.g8/<4p/.NPOHn nHhNPO/<4s/.NPON^NuNV/ B98B@776::"Bg/<6:/.N -@/<;/<6:N|PO*@ g*0@g/- `/<6:/<7NPOB96:`0Bg/<7/.N -@/<;/<7N|PO*@J96:fd n =g/<7N"XO @ :fD/<7/<6:NPOBg/<7/.N -@/<;/<7N|PO*@ g0@g/- /<7NPOJ96:gB/<4u/<7NPOJ@g*/<6:N"XO @ :g/<4w/<6:NPOJ97f"J96:gT/<6:/<4yN0PO`< g0@@g/<6:/<4}N0POBnBg/<7/.N -@J97g97H @"f,Jng/<4N0XO/<7/<4N0POp`P nf/<7/<4N0PO`6Jng/<4N0XO/<7/<7/<4N0 p=@J9;fF nJg @%gJGgf/.? n hN\O`p =@p=@p=@H> G-fp=@H>`Bn G0f p0=@H> G*f& nT=Plp=@0.D@=@H>`*Bn G0m G9n0. G@0=@H>` G.fJH> G*f nT=PH>`*Bn G0m G9n0. G@0=@H>` Glf&H> Gdg Gog Gug Gxf0@> `-@*@p=@0 |#2<`XHXW PN`J nT=PJnl0.D@=@p-p ??./ N4PO*@`p ? nT?`p`p` n-PXJl .D-@p-p ?/./ N `p ? n// N *@X`p`p` n "(-@-AP/ ?././.?N`RBn n-Pf-|#X .-@*@JgJnm noS`(Bn nT0` n//.NPO`X ./0.Hї =@lBnJnfLJng0 n0f( n -f/. nRH? n hN\O0.SnJ@g /.?.` nd /. nRH? n hN\O`Jng0.SnJ@g/.?. n hN\O`L0N^NuNVH >. *NB%0<g"0H@H@B@H@ @$ >`?Bg _$ Jg nR` .L N^NuNVH0*n>.IB$p0//. N (PO-@g$p0//. N nPO @$ -n ` n $ Jg` L0N^NuNVH0*n(M/<5 y5NXO> @g G g`B GffB` L0N^NuNV/ *n .*+@+|B-0. D@;@ m l;| +|`+| *_N^NuNV/ *n Sm lBm p` UR0.*_N^NuNV/ *n UR0.*_N^NuNV/ *nRm oBm p` URB@*_N^NuNV/ *nJf0-H@f?<N":TO+@f+|T+|n`n-H@f2-H?NLTOJ@g5"f+|r+| -`&+|r+|-H?NTOHЭ*+@Bm *_N^NuNV/p?B?.NlPO. fB@`0H@.N^NuNV/ *n/ NXO/ mNXO*_N^NuNVH >.*n / NXO/ ? mN\OL N^NuNV/ *|5Y M5VeJg/NXO`*_N^NuNVH *n-H@fp`@/ NXO>-H?NZTOJg-H@f /-N"RXOB-0L N^NuNVH *nBm -H@ff >o?/--H?NPOGf$JGm mAf -*+@`+UB@` 09$HH fBy$H`-pL N^NuNVH *nRm o/ NXOJ@f 54f/<5"NXO -?/--H?NPOD@;@ @f^09$HH fBy$H`-Bm `F0- Rm m+H URB@>-H@ g G gL Gg 0`Jm f-pL N^NuNV/ *n 54f/<5"NXOBm p?Hn-H?NPO @g4J@gP .f -H@ f< . f -H@ fB@.`(09$HH fBy$H`-`-p*_N^NuNVH >.*n G f$-H@ g/ p ?N\O @fp`0Sm l"/ NXOJ@f -S@;@ UR0L N^NuNVH >.*n G G f -H@ g/ p ?Nn\O @g^Bm -H@fN/ NXOJ@f@p?Hn-H?NPO @f0` 09$HH fBy$H`-pL N^NuNVH >.*n G f$-H@ g/ p ?N\O @fp`?NAXO/NXO`B@N^NuNV/?.pE?NAXO>l0H/NXO`"?.NTO=@m?.?N*XO0.N^NuNV/?.?. rF?NA\O>J@f(?.NTO=@m?.?. N*XO0. `0H/NXO.N^NuNV?.NTO @Cfp`B@N^NuNV?.?./. pB?NA /NXON^NuNVH ?.NTO @Cf|9BQH>9BPHHBP*@SnmSGldpQBPB9BQ/<BPp ?NA\O>l0H`p ?p?p?NM\OpBP9BQH>9BPHHBP*@0Gp H: Ef~` n R RF E fn BPBPBQ0`$/. 0.H/?.p??NA /NXOL N^NuNV/. 0.H/?.p@?NA /NXON^NuNVH >.0V@ @bH0@$0 PN`*pP`&pA`"pC`JGm*y5SGmJfp`JgHL N^NuNVH >.JGm*y5SGmJfp` Jg0. L N^NuNVH >.0V@ @bHH0@$< PN*y5HGg Jfp`&R` 5?NTO`~C`~A`~P`pL N^NuNVJl .D3$Hp` .N^Nu"o`C"/jD$jDA`|J/j JgRJk`JjDNu"o`C"/$A`JNu"o`C$jD"/A`, g J/j Nu"o`C$"/A` NupJfpN∲cd⒒d҂dFNNVH8..P b d.</N"XO*@ Mg`J66f&M #6#6`& y66f QP&m`(y66Q L&h)M Q@* Ѝ#66(@Q LB)KL8N^NuNVH0~ .\S@,dB`ƙ*y6 gr .gH g @є .*L(Mc2  d @*`* Ѝ#6 y6 X`dJg @Ѝ*@`*m6f g#6Ry6096 @e Sy6`X/N XO/.N!JXO*@Sy6 L0N^NuNVp0./N!JXON^NuNVH .Y*@Jf4~0G6Jg 0RG0@6H?p?p?NM\O`NFL N^NuNV/ *nJg/<5"H? y54N\OR`/<5"p ? y54N\O*_N^NuNVH..Jl <`0Jf 9`$R @./pH?NA\O,g Ї# LN^NuNV0.H/N"XON^Nu  "#$|'()*+,-.0n:={NULL}DrOUXcBd"efgojrTsuZxnD0123456789ABCDEF#:-);-)8-)/u/68k/src/as68toas/1987/3/3/20/19#(-8(-;(-:as68toasAS68 to as68 source converter copyright 1986 Mark Williams Co V0.a /R/V/W/\/b/g/m/q/s/wC/x/{C//C//C//C//C///////////////0#00 0000000 0(0)0.0/06070?#0@0E#0N0S#0[0`#0l0q#0~0#00#0000000000000000000000000000001111 111111 1#1'1*1.1116 171;1<1A1B1G1H1M1N1R1W1\1]1a1b1g1h1l1m1q1r1v1w1{1|11111111111111111111111111111111111111111112222 2 22222 22!2"2'2(2-2.2324292:2?2@2E2J2O2P2U2Z2_2c2g2h2m2n2s2t2y2z222222222222222222222222222222222222222222333 3 3333333"3#3)3*303137383=3>3C3D3I3J3N3O3T3U3Y3Z3^3_3b3c3g3h3l3m3s3t3x3y3}3~333333333333333333333333333333333333333333333344444 4 444 4444"4#4(4)4.4/43484=4>4C4D4H4I4N4O4U4V4Z4[4`4a4benddata.prvdtext.shriequ=setdc.worddc.l.longdc.b.byteglobl.globlxdef.globlxref.globlcomm.commeven.evenbss.bssdds.b.blkbds.blkwds.l.longeven.evenorg = %mask2regdcbcomlineidntoffsetsectionifeq#if !(%)ifne#if (%)iflt#if (%) < 0ifle#if (%) <= 0ifgt#if (%) > 0ifge#if (%) >= 0endc#endif /%ifcifncoptttlpager0d0r1d1r2d2r3d3r4d4r5d5r6d6r7d7r8a0r9a1r10a2r11a3r12a4r13a5r14a6r15a7abcdaddaddaaddiaddqincaddqaddxandandiaslasrbccbcsbeqbzebeqbgebgtbhibhisbgebhsbccbleblobcsblsblosblsbltbmibnebnzbnebplbvcbvsbchgbclrbrabtbrabsetbsrbtstchkclrcmpcmpacmpicmpmdbccdbcsdblodbcsdbeqdbzedbeqdbradbfdbfdbgedbgtdbhidbhsdbhidbledblsdbltdbmidbnedbnzdbnedbpldbtdbvcdbvsdivsdivueoreoriexgextjmpjsrillegallealea.llealinklsrlslmovemoveamovemmovepmoveqmulsmulunbcdnegnegxnopnotororipearesetrolrorroxlroxrrtdrtertrrtssbcdsccshssccscssloscsseqszeseqsfsgesgtshisleslssltsmisnesnzsnesplstsvcsvsstopsubsubasubisubqdecsubqsubxswaptastraptrapvtstunlk._.w_:)${}=:%s %s .ascii %s, %s %s %s%s %s ** No as68 or cpp equivilence%d: %s %s %s%s.s$1.spa.i.%s %s%s %s %s%s %s %s, %s%s &!&!&#55"5<DYou must compile with the -f option to include printf() floating point5CCAP? Bad pointer in free. L"20 t2,@ 2 >& (^P (  &$  @            .&                ~FPBLD (J$  .6*" .J0.$nBF\ @$@ (  .,04 , 6&0&2> 0  @J$  $"  ,$                                                                                                                                                                                                 0R# j >