@L}5 _$% l0$)$$Hȱ$ UhL" `e$$%`$%`  R@P!( L(1   Y I`  d  Ld M * @  $ % CC$$)%1 Udߥ$9%: !0 S$% DD˙`  }J)Lr d M * @  $ % CC$$)%1 Udߥ$9%: !0 S$%} DD˙`  }J)Lr J  ((  p L ()   J}L= ( L 0q A    IB JC;? D W } LL  ` W )LA!  ߰")-݆ p" } $G@LL 08`Q")<2Q0 -G$Ș݆ UL# ; p8(()(0ʥ)NQ` }$GȘ݆LU )L ݆ L GȘ ݆LL )W>Z   HH)H }p h  hyhy D L> L JJ    ! LA*` BF }7'8  M HN H` 8 Z  \LdJJ!"! GFE@F (!L }EE !E^ ^ E E7EȩEdE/EȩE  D } .L }  ;F d  ;?F7F? ( .   Z D LL d } . D  L    p  E` , d)  D L) 0BM݊L݉} ML  N݆ L NLML [ TEqEHȱEqEh 0Gȹ G} HLL GɛL  LFREE SECTORS G) *Gȩ GȽG GȌ*jj >G} C8jJ3j2CD( C202C ԠBX` N 1? l LlD:RAMDISK}.COMLu L1 L ;LHL  T`  `1  ɐ     `TU  } L ? .  t`GBJ ~DEHI B V0dV!}QDEHI VF9 ,0 ,0 s0hhL  L` H hDHEh"}DEL8HI4 0 HI,0 0  9 .G VLO#},0 L4*IJ`llD1:AUTORUN.SYSNEED MEM.SAV TO LOAD THIS FILE.D1:MEM.SAV J y08 B|DEHI$} V0 0`B;DEL`?<0LV`@ʆ v s? F0Ξ05: [ BDEHI%} VY8 B V  @  /DE `E:D1:DUP.SYSERROR-SAVING USER MEMORY ON DISKTYPE Y TO &}STILL RUN DOS B;DE J  (` 9 V⪍ ઍ  -'}LLu ÝDEHILV 9 .l 9 .l  `` s$B BH(}I|DE V BLV nB,DE JLV B V BLVDEIʩ BꭝLu  } 3E:}DISK OPERATING SYSTEM II VERSION COPYRIGHT 1984 ATARI CORP.A. DISK DIRECTORY I. FORMAT DISKB. RUN CARTRIDG*}E J. DUPLICATE DISKC. COPY FILE K. BINARY SAVED. DELETE FILE(S) L. BINARY LOADE. RENAME FILE M. RUN AT ADDRES+}SF. LOCK FILE N. CREATE MEM.SAVG. UNLOCK FILE O. DUPLICATE FILEH. WRITE DOS FILES P. FORMAT SINGLEL !N',}#"&))9(&*)/h)''-&؆莟R'S  vL/ˢ L }Insert DOS 2.0s, type Y Λx -}DEfHI 1莏#q! @ y0ɛ8A0,' ȅ 1 1ild! 1L!NO SUCH ITEMSELECT.} ITEM OR FOR MENU! 0 .z:*{}.|{ 1 0 0JB 18L%|DL/}%DIRECTORY--SEARCH SPEC,LIST FILE?[# 0 0 &|D3" 1L!NOT A DISK FILEN !B 1L!E# 1 !BD0}ED:}:1BJ|DE 1DEBHI 1 h0ߢ 0.1}  0?詛 1 y0YЛ 1 ;#L" ;#L! BL1TYPE "Y" TO DELETE...DELETE FILE SPEC2}COPY--FROM, TO?OPTION NOT ALLOWED736 FREE SECTORS COPYING---D1:DIRECK.COMl# 0|D .L/%#3}##JB|DE 1BHID#E 1#0: B 1L!#͑### B 1#c$0SY4}S1}:## # # .#Ƚ# # 𩛙## 1,#PD#ELJ- <.BJD#E 5}1 1HH 0hh|DL%1}:̳# L% #D#EL% 1 0 . .0O% 1L!WILD CARDS NOT A6}LLOWED IN DESTINATION 0 <.|K}N 2 FORMAT. t* 5) 1L!`) 0NΞ 0 L1) 1 L!BAD LOAD FILELOAD FROM WHAT FILE?) 0 ?}0#B 1L!WHAT FILE TO LOCK?) 0 0$B 1L!WHAT FILE TO UNLOCK?DUP DISK-SOURCE,DEST DRIVES?TYPE "Y" IF OK TO US@}E PROGRAM AREACAUTION: A "Y" INVALIDATES MEM.SAV.FE! +L1   `*  70 2 2A} 0.* 1 y0 0)INSERT BOTH DISKS, TYPE RETURN^, 1 y038逍 N, 1L! ,B}C, t*  Lx+, 0 ^, 1 y0 , ,0,0 ,L+ ,I0 ,Vǭ0C}Ξ, 0 }, 1 y0C,ШC, 0K'!" H H 'h h Lx+!EF 5L1L!D,I,HhD}` NOT ENOUGH ROOMINSERT SOURCE DISK,TYPE RETURNINSERT DESTINATION DISK,TYPE RETURNE}`  `8 rL1`-* 1P* 1 y0Y`hhL!NAME OF FILE TO MOVE?- 0 0|DL% <.F},^ 1 70 0 .@L# .BJ 1  DEHIB V L1 ,} 1 70,L.  G}JB|,#P#DE 1 HI BDEHHII 1 B 1 ,^ 1 70,0La- B V,#PH},^ 1 70 0L#L!-* 1P* 1 y0Yj383}mm ݭI}}`8}``|* ? ɛ,`|:-)| / 1L!`DESTINATION CANT BE DOJ}S.SYS0 0H{ 24Δ 28/L!/) 2 Π 2 0 ξK}hAΞB,0 J 1 BDEHI,HÝDE 1HIHIDELSAVE-GIVE L}FILE,START,END(,INIT,RUN)O S0 1`BDEPHI V` S0H 1 L!M}0 0 1L~0`PLEASE TYPE 1 LETTER,0`hhL! 70 1L0L<1 ,;ɛ7,"ɛ:ݦ1ݥN}A"D|ݤD|ȩ:|ȩ|ɛ,,(/+.ީ1 1,ɛ`轤{NAMEO} TOO LONG B VL!` L1I H1EΝDL1|mDiE` V0`8d/8 i:222 1 LP}!ERROR- 138ɛ+,' 20*.. өr2 1``2TOO MANY DIGITSINVALID HEXAQ}DECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8uR} ECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8u/* * MAKE * * scan .MAK file */#include #define local staticextern char *m_nopen;char wordT}[40];char runtime[40]="D2:\\LIB\\RUNTIME.OBJ", library[40]="D2:\\LIB\\C.OLB";char *keys[] ={ "runtime", "library",U} 0};local char erred;local char *m_nword = "word needed\n";local FILE *f;/* get word * * NOTE: returns TRUE on ERV}ROR */local int getword(w)char *w;{ char *p; int ch; do { if ((ch=fgetc(f)) == EOF) return 1; ifW} (ch == ';') { while (ch != '\n') { if ((ch=fgetc(f)) == EOF) return 1; } } } wX}hile (iswhite(ch)); p = w; while (isalnum(ch) || strchr(".:\\>", ch)) { *p++ = ch; if ((ch=fgetc(f)Y}) == EOF) break; } *p = 0; return (ch == EOF);}/* scan file, build tree */int build (fname)char *fname;Z}{ char nbuf[40]; erred = 0; filname(nbuf, fname); strcat(nbuf, ".MAK"); f = fopen(nbuf, "r"); if (f == NULL)[} { fputs( nbuf, stdout); fputs(m_nopen, stdout); return 0; } for (;;) { if (getword(word)) break;\} switch (inlist(keys, word)) { case 1: if (getword(runtime)) { fputs(m_nword, stdout); ]} return 0; } break; case 2: if (getword(library)) { fputs(m_nword, stdout); retu^}rn 0; } break; default: if (addunit()) erred = 1; if (getword(word)) { fputs("no _}':'\n", stdout); erred = 1; } for (;;) { erred = getword(word); if (*word == '.') `}break; erred = adddep(); } } } fclose(f); return !erred;}tword(word); if (*word == '.') VCC65 MAKE v0.1 February 1993 Duane Tribe 120 112th st. Orofino, ID 83544 This archive contains the source code for an autom b}ated recompilation utility for CC65, known in the Unix world as "make". This make assumes the Atari system that I use: Spart c}aDOS X, A ramdisk as drive D2:, and perhaps more... Along with the source code are several files that may be useful even if d}the make program doesn't work for you. See the file EXTEND.DOC for details. The files are in Atari format (i.e. newline=155 e}). These files are Copyright 1993 by Duane Tribe. They may be freely distributed so long as all the files (including this o f}ne) remain in their original form. You may use and modify the source code for your own purposes. No fee, other than a nomina g}l media charge, may be required to distribute these files. There is no waranty of any kind for thgis software. All other ri h}ghts reserved. MANIFEST MAKE.COM source files: BUILD.C 1711 9 Aug 91 11:59p CHAIN.C 2794 27 O i}ct 91 9:03p CHECK.C 585 29 Sep 91 12:39p CHECK.COM 3577 29 Sep 91 12:42p CHECK.LNK 9 j}8 8 Aug 91 11:41p MAKE.C 766 27 Oct 91 10:21p MAKE.COM 9103 27 Oct 91 9:48p MAKE.LNK k} 203 27 Oct 91 10:08p MAKE.MAK 625 8 Aug 91 8:53p MORE.COM 4768 24 Jul 91 1:09p TREE.C l} 2348 27 Oct 91 7:55p TREE.H 267 27 Oct 91 7:54p Usefull subroutines: DIRENT.OBJ 96 m}9 6 Aug 91 6:23p DIRENTC.OBJ 1816 6 Aug 91 6:38p EXTEND.DOC 1040 29 Oct 88 2:16p INLIST.OBJ n} 131 8 Aug 91 6:34p MEMCMP.OBJ 140 30 Jul 91 6:12p NAMES.OBJ 960 22 Jul 91 7:58p PUTSTR.OB o}J 549 5 Aug 91 11:15p STRRCHR.OBJ 96 6 Aug 91 3:18p XIO.OBJ 168 29 Jul 91 9:58p OB {/* * MAKE * * write chain */#include #include "D:tree.h"#define local staticextern char *m_nq}open;extern char runtime[], library[];extern char outfile[];extern struct s_unit *dtree;extern FILE *output;local char}r *ext;local char m_lnkerr[] = "link file error\n" , m_outerr[] = "output file error\n" , newline[] = "\n" s} , fnbuf[40] = "D:" ;local char worktodo = 0;local FILE *lf;/* print action */local maket} (ud)struct s_unit *ud;{ struct s_unit *us; struct s_dep *d; FILE *out2; char ts, *sep, *size; worktodo = 1; u}ts = ( us = (d = ud->source)->dep )->type; switch (ts) { case c_M65: if (us->source) break; case c_C: v} (*ext)++; break; case c_OBJ: strcat(fnbuf, ud->name); *((char *)strchr(fnbuf, '.')) = 0; strcat(fnbuf, w}".LNK"); if ((lf=fopen(fnbuf, "w")) == NULL) fputs(m_lnkerr, stdout); putstr(lf, 2, runtime, newline); } x} switch (ts) { case c_C: putstr(output, 2, "X CC65 ", us->name ); break; case c_M65: fputs("X RAy}65 -O ", output); if (!strchr(ud->name, ':')) { fputs("D:", output); } fputs(ud->name, output); fz}putc( ' ', output); case c_OBJ: if (ts == c_M65) { out2 = output; sep = " "; } else {{} out2 = lf; sep = newline; } for (; d; d=d->next) { putstr(out2, 2, d->dep->name, sep|} ); } } switch (ts) { case c_M65: if (us->source) { fputs(newline, output); break; }} } case c_C: size = (ts==c_M65) ? "0 " : "11 "; putstr(output, 6, " >>2:ERRORS\nCHECK ", size, outfil~}e, "\n-", outfile, newline ); fclose(output); output = fopen(outfile, "w"); if (output == NULL) fputs}(m_outerr, stdout); break; case c_OBJ: putstr(output, 5, "X LINK65 -O ", ud->name, " @", fnbuf, "\n"} ); putstr(lf, 2, library, newline ); fclose(lf); }}/* traverse, checking units */local int t}raverse (u)struct s_unit *u;{ struct s_dep *d; struct s_unit *v; int t, rc; if (!(d=u->source)) { if (u->nil}) { fputs(u->name, stdout); fputs(m_nopen, stdout); return -1; } return 0; } for (t=0; d}; d=d->next) { if ((v=d->dep)->nil) { bcopy(u->time, v->time, 6); } if ((rc=traverse(v)) < 0) {} return -1; } else { if (rc) t = 1; } if ( memcmp(u->time, v->time, 6) < 0 ) t = 1;} } if (t) make(u); return t;}/* generate batch-file chain */chain (){ ext = outfile + 10; if (traverse(d}tree) < 0) return -1; return worktodo;}generate batch-file chain */chain (){ ext = outfile + 10; if (traverse(d,#include char ent[23];main (argc, argv)int argc;char *argv[];{ FILE *f; int rc; char size;} rc = dirent("D2:", "ERRORS", ent); if (rc < 0) { fputs("Cannot open D2:ERRORS\n", stdout); exit(0);} } size = atoi(argv[1]); if (ent[3]==size && !*((int *)ent+2) ) exit(0); f = fopen(argv[2], "w"); if (f < 0) } { fputs("Cannot open ", stdout); fputs( argv[2], stdout); fputc( '\n', stdout); exit(0); }} fputs("MORE - D2:ERRORS\n", f); fputs("; make aborted\n", f); fclose(f);} '\n', stdout); exit(0); }U -Lf%HehL!`ܠؠԠРH8咅h`H8h`֠ҠΠʠƠ±}HȱhL!``e` L L!L!L!L!L!L! ȘL! L! M Hȑh`HȱhL }HȱhL Hȱh ` ` .!HȥhL! .!L! `HȑhL!L!HH hhL!HH }hhL! H*h`L!`L!`HIhIi```IHIh`e` !L `}` !L! !L! !L! ! !L ! !L  &L!L! 󨥂fjL! eHehL! }8H哪hL! HhL! EHEhL! %H%hL!`\_ łXTM łFBE 0>7ł86/ 䃐-&ł}'% 0ł 䃐 ł`` 0ł 䃐ł۰ 0łʰ 䃐ł𹰼 }L H hL lHh` !L !L hh捠ilŕŔ }liL#`L!  ! Ɣ !$ \$& $ \$& 򦓥 !`H}eeh`` ! ! ! !Ńł &&L$FfFf3ō}Ō8包卅FfFfͥ !ĕ !` t$L! ` }`S L L L i?H ihL%  *l ee}ŐőюL%`8Hh`  +0< BJKHI}DE V`` k# 7 ,(  -% B! u B! u !uL& u # B! $ u #  B! $L}& u ! . "  B!L'  u Y"  u !  , i!L&  # u  & B! u } "  u   Lq# u  Y" B! u  u   ,  " u ! "L( u ! } "Lz'  u  % B! u !Lz' u  + u L$( u   Lq# } k# e ) ) 8(  l& B! u "!) ++  +  % u  }! Y" !  *} M!8(  Y" !  "8(  }! Y" ! !  % u  }! Y" ! *  `* B! u } "\* ++  + u  }! Y" ! ++  + ++  5*  %*  u  +%}*  u  + u  + ' Lq#D2:ERRORSCannot open D2:ERRORSwCannot open MORE - D2:ERRORS; make aborted } HHIDE Bh VL},` ]# M  ! u # + B! ! " u ++  Lq# u  Lq# k# !*}*  , **  O(Lq# Y# a  u # - u  B!L* B! u !L%+ B! u  B!L2+ # +-++} B! u # -=  u $  u #  B! $ ! Y" 0 h" B!L;+ ! u $ # Lq# ]# ! ! ! M% ^}-Lq# Y# ! z- 3#L+ u Lq#@ iɀ` +0krwa dK}JKHI)a0{8 驛DEB VL},``++` ,B VL},HHIh` a}{8 ` u u HI u DE + (` NHɛD R-ȥi}揠 R-Hhɛ`!8`` , B VL},HHIh` B V0`` Y# ! ": !} "" ! " ! 3#Lq# 0:`` h` B V0`` Y# ! ": !MD2:\LIB\RUNTIME.OBJD1:\OBJ\MEMCMP.OBJD1:\OBJ\XIO.OBJD1:\OBJ\DIRENT.OBJCHECK.OBJD2:\LIB\C.OLB`` Y# ! ": !b(LDAISAVEAXSUBYSP_READLOCYSPENTERFUNINCAX1ADDYSPTOSEQAXTSTAX_FCLO }SEADDTOSTOSNEAXTOSLTAXEXITFUN_MEMCMPSTASPP_TOUPPER_XIOSTAXYSPANDTOSRES }TAX_DIRENTLDAXYSPPUSHAX_STRCPY E B D X"! X Y S W S } W @uL e W A F S U W A F S UL / W @ X. H  SL }  D X W K X W @ X Q PL < X X X X# W X R }S W X M  W GLN W X K S W X W X X C X }L W @ X HL  W @ X TL  D X W X X O } S W IL  W X J WL  W GLN  W X X O ^q$LDAI_STDERRSAVEAXLNEGAXSUBYSP_STDIN_READLDAXIDXLOCYSPENTERFUNINC$}AX1ADDYSP_STDOUT_ERRNO_BCOPYTOSEQAXTSTAX_PMALLOC_FCLOSEADDTOSTOSNEAXTO$}SLTAXEXITFUN_MEMCMPSTASPP_TOUPPER_XIOSTAXYSPANDTOSRESTAX_STRCMP_DIRENT$}LDAXYSPPUSHAX_STRCPY STAXSPIDX I D H `!"z!z `! `" [ `  [$} `  @uL g `  B J [ ] `  B J [ ]L 1 `  @ `!. O $} [L  H `! `  S `! `  @ `! Y XL >   [ Pk `  Pa! ` $} `! `  `! S `! ^ `  [, G [L ( ` ( G [ ` * G [$} KL L . P `! Q [ `  `! S `!# `  `! `" `  `! [ $}[, `# `! `! `! `!) `  `! Z [ `  `! U  `  KLV$} `! Q [ [L L  `  `! `  `! `! F `! T  `  @ C$}L ] `  @ `! \L  `  B J [ ] `! Q [L  `  `!$} R `  `! ` ( `# `  `! ` * `#   P `  `! ` , `#L  ` $}  L  D [ `  [ `  `! `  UL nL  `  B J [ ] ` $} `! S [L  H `! `  `! S `! `! W C( `  `! `  `!$} `! N KLVL  KLV `! `! W C( `  `! `  `!$B ______________________ EXTENDED CC65 ROUTINES ______________________dirent - get raw directory (}entry requires xio, memcmp dirent(dir, fn, entry) char *dir, *fn, *entry;direntc - get raw dir, cache versio(}n requires xio, memcmp dirent (dir, fn, entry) char *dir, *fn, *entry;inlist - find str in list of strings(} int inlist(list, string) char *list[], *string;memcmp - compare memory int memcmp(m1, m2, n) compare n bytes of (}m1 to m2filname - rawname to file name char *filname (buf, rawnam) char *buf, *rawnam;dirname - rawname to sub-d(}ir name char *dirname (buf, rawnam) char *buf, *rawnam;putstr - put string(s) to stdout putstr (count, string, ...(}) int count; char *string;strrchr - find last chr in str strrchr (str, chr) char *str, chr;xio - extended I/O (}(DOS) access Pass iocb=-1 when not needed Returns iocb used or -1 for error xio(code,iocb,aux1,aux2,name) in(}t code, iocb, aux1, aux2; char *name; needed Returns iocb used or -1 for error xio(code,iocb,aux1,aux2,name) in((Nc_INLISTPOPAX A Aȱ`ѐ L %iiL ,}`c_INLISTPOPAX A Aȱ`ѐ L %iiL ,/* * MAKE * * Batch-chain creator */#include char m_nopen[] = " cannot open\n";char *msg[] = 0}{ "; make aborted\n", "; up to date\n", "; what file?\n"};char outfile[] = "D:MAKEBAT.A";FILE *output;main (argc,0} argv)int argc;char *argv[];{ int n, rc; fdelete("D:MAKEBAT.?"); if (!output = fopen(outfile, "w")) { fputs(0}outfile, stdout); fputs(m_mopen, stdout); exit(0); } if (argc != 2) { n = 2; } else { n = 0; 0} fputs("Analyzing...\n", stdout); if (build(argv[1])) { if (rc = chain()) { if (rc > 0) 0} { fclose(outfile); exit(0); } } else n = 1; } } fputs(msg[n], output); fc0}lose(output);}ose(outfile); exit(0); } } else n = 1; } } fputs(msg[n], output); fc0 CLf%HehL!`ܠؠԠРH8咅h`H8h`֠ҠΠʠƠ±4}HȱhL!``e` L L!L!L!L!L!L! ȘL! L! M Hȑh`HȱhL 4}HȱhL Hȱh ` ` .!HȥhL! .!L! `HȑhL!L!HH hhL!HH 4}hhL! H*h`L!`L!`HIhIi```IHIh`e` !L `4}` !L! !L! !L! ! !L ! !L  &L!L! 󨥂fjL! eHehL! 4}8H哪hL! HhL! EHEhL! %H%hL!`\_ łXTM łFBE 0>7ł86/ 䃐-&ł4}'% 0ł 䃐 ł`` 0ł 䃐ł۰ 0łʰ 䃐ł𹰼 4}L H hL lHh` !L !L hh捠ilŕŔ 4}liL#`L!  ! Ɣ !$ \$& $ \$& 򦓥 !`H4}eeh`` ! ! ! !Ńł &&L$FfFf3ō4}Ō8包卅FfFfͥ !ĕ !` t$L! ` 4}`S L L L i?H ihL%  ?l ee4}ŐőюL%`8Hh` `ŒL& ȱ4}`ѐ L]&iiLJ&`  /A0< BJKHI4}DE V`` k# 7  d*  -% B! u  B! u !uLQ' u #  B! $ u #  B! 4}$L' u ! . "  B!L'  u Y"  u !  B i!L('&& B! !k u !a! u  u Y4}"  J@ u B!, ! B!L( u ( ! B! u * ! B!  L)L'. !  @ B! u Y" # u  -4}% u  B! B!, !  ) u  & B! u "  u   Lq#  @ B! B4}!L(L( u  u   A  "  u ! !LG) u ! "L( u #  B! $  @4} B!L( u  @ u  u ( ! u  u * !& & ! u  u , !L) u &&L) 7  B! u  4}B! u  u "LX*L* u #  B! $ u  Y" B!L)  u  Y"  % !( u  u 4}   1B  Lq#L)  Lq# k# u i! u :  jB5 u ! _ " D "4} u ",  -%L* u $,  -% u  u  A u D i! u Lq# k# m u u  p* u B! 4}B! B! u !UL_+ u #  B! $L<+ u !L+ u  B!L+ u B!L+L+ #j+\w+?w+*LI+ u  u "j u 4}  h" ! M! \ " : " u ',  AL, u ,,  A u / Lq#DD:\*.**.*4} k# q   }! Y" ! }! Y"  }! h" B! u #  B! $ ! B! u #  B! $ ! B! u # 4} B! $ !) u #  B! $ !  u  ?L, 3 Lq#D2:\LIB\RUNTIME.OBJ4}D2:\LIB\C.OLBj0r0z0 k# a i-j-  h? B! "  # Lq# u ;4} "= u ",i-j-  h? B! "  # Lq#L- u  BLq- u  B! u  ?0  u 4} jBC u #  B! $  u i!i-j-  h? B! "Lr.L. u i! u " # Lq# k#( 7 4}f- , u  p* 0  A 0  ?i-j-i-j- "9 )A*A  ?66 )A4}*A  ?(  Lq#L9/L3/,  k-LL0`- ,  8&L90-  k-#g-h- )A*A  ?(  Lq#LI08- 4}  k-#g-h- )A*A  ?(  Lq#LI0 ><f-,  k-0 )A*A  ?f-L0L0,  k-f-4}, ! . "L60 .MAKrn4}o ':'link file erroroutput file errorD: k# 7 0 u 0 ! B! ! 4} B! ! M! L1 u 0 ! !L200 ! # i! $L2â0  u  Y"  Aâ0 .  jB i!4}0 ܢ4  Aâ0 4  ?00 "0 )A*A  ?00  - 0  0,L2 #$161Q4}1 LZ377  4  u  Y"  0,Lk34 77  ? u  Y" :  jB !4 4}77  ? u  Y" 77  ? 77  >  "77 B!4 B!L300 B!0 4}B! u IL#3 u  ! B!L3 u  u !  Y"  u  0,L3Lk3 #2I22 L4 u 0 ! !4}0 77  ?L4  "4L34 B!77  5  u 7 5 7 0  0,74}7  @7 5  ?7777 "0 )A*A  ?L477  5  u  Y" '5 4}â0 *5  0,00  8- 0  0,00  @L4 #s33L4  Lq#.LNKwX CC65 X RA65 -O D:4} 0 11 >>2:ERRORSCHECK -wX LINK65 -O @ k# q u 0 ! B! ! !Z u  ! !A u  Y" )A*A  4}?66 )A*A  ? 3 Lq# 3 Lq# B! u L6L5 u  ! B!L5 u ! B! ! !0 u * Y" 5}  u * Y"   1B u  ,5 B! " 3 Lq#LP6 u !  B! u * Y"  u * Y5}"   % "  B!L5 u ! u  0 u 3 Lq# k#7 Y"00d8e8  ,5 "5}Lq#0Lq# cannot open8,8:8D:MAKEBAT.A k# a H8  A7 T8  ?77 u  "  B!L75} B!V8 )A*A  ? u  }! Y" !  .A 6 B!, u #7  @  %L7 B!7 5}  u }! Y" ! 77  ?77  @ # Lq#; make aborted; up to date; what file?D:MAKEBAT.?wAnalyzing...5}>>>> cannot build k# q 25}  @ B! u  Y" ,  -% u 0 !, .  jB B! u r8 h8 u  8& }! Y5}" ! i!8 ,  p*8 :  jB B! u \  & B!  u  B! u >  & B!  u  B!5}8  u  B!  -% u i! u * Y" B!8 8 8  & "g u  &! B5 }! u  "9L: u # B! $LY: u #  B! $ i!Lm:L; u  &! u #  B! $ 8 5 } Y" ! i! u #  B! $ 8  Y" ! i! u #  B! $ 8  Y" ! i! u #  B! $ 8 5 } Y" ! i! u #  B! $ 8  Y" ! i! u 8  Y" ! i! u 3 Lq# k# a  u  Y" , 5 } J@ ! u # Lq#L4< u 0 ! B! u !4 u !  ; B! u # Lq# u  ! B!L; # Lq# k# M d8e8 5 } " 8f8g8d8e8L~  0,  Lq# k# 7 5} !  @ B! u 8 B! R! !   Lq# u  !f8g80 ! B! !6 u  ! B! !  u B!5}L(= u  u  !Lq=f8g8  u 0 !f8g8 ! M! ! !Bf8g8  Y" )A*A  ?|8 )A*A  ? 5}  Lq#  u ! M! Y" M!  #Lm>  "7  "&  " "5}( "  "T)A*A  f8g8  Y" > u  Y" |8  0,5}  Lq#  Lq#.C.M65.OBJ.COM unrelated-> HHIDE Bh VLA` ]# M  ! u # DA B!5} ! " u -A.A  Lq# u  Lq# HIDEB VLA`` k# !??  B ?? 5} 7Lq# ]# ! ! ! M% NCLq# Y# !z " !a 3#B !Z " !A 3#  !9 "5} !0 3#Lq# ]# u # u ! "5 u # "Lq# u  B! u  B!LM@ u # u ! h"Lq# Y# 5}M CC B!CC  u Y"CC u  Lq# Y# ! jC 3#LA u Lq# ]# ! ! M% Y"  ! -%Lq#5}@ iɀ` /A0krwa dKJKHI)a0{8 驛D5}EB VLA``-A.A` /AA ADE!BJK VLA` BB VLAHHIh` )!5}`` ƓLFBĒ` `Œ eL!LxB a{8 5}` u u HI u DE + (` NHɛD BCȥi揠5} BCHhɛ`!8`` B B VLAHHIh` B V0``C ȥi揠4gD2:\LIB\RUNTIME.OBJD1:\OBJ\MEMCMP.OBJD1:\OBJ\STRRCHR.OBJD1:\OBJ\INLIST.OBJD1:\OBJ\XIO.OBJD1:\OBJ\DIRENTC.OBJD1:\OBJ\NAM9}ES.OBJD1:\OBJ\PUTSTR.OBJBUILD.OBJCHAIN.OBJMAKE.OBJTREE.OBJD2:\LIB\C.OLBD1:\OBJ\XIO.OBJD1:\OBJ\DIRENTC.OBJD1:\OBJ\NAM8N; MAKE makefile 8/6/91; ExtensionsMAKE.COM : D1:\OBJ\MEMCMP.OBJ D1:\OBJ\STRRCHR.OBJ D1:\OBJ\IN=}LIST.OBJ D1:\OBJ\XIO.OBJ D1:\OBJ\DIRENTC.OBJ D1:\OBJ\NAMES.OBJ D1:\OBJ\PU= }TSTR.OBJ .; PrimaryMAKE.COM : BUILD.OBJ CHAIN.OBJ MAKE.OBJ TREE.OBJ .; Build treeBUILD.OBJ : BUILD=!}.M65 .BUILD.M65 : BUILD.C .; Make & verify treeTREE.OBJ : TREE.M65 .TREE.M65 : TREE.C TREE.H .; Build batch-fi="}le chainCHAIN.OBJ : CHAIN.M65 .CHAIN.M65 : CHAIN.C TREE.H .; MainMAKE.OBJ : MAKE.M65 .MAKE.M65 : MAKE.C .<}VlPOPAX_MEMCMP @ @ @eeŐőюL $A$}` 8Hh`X_MEMCMP @ @ @eeŐőюL $@ 2Lf%HehL!`ܠؠԠРH8咅h`H8h`֠ҠΠʠƠ±E&}HȱhL!``e` L L!L!L!L!L!L! ȘL! L! M Hȑh`HȱhL E'}HȱhL Hȱh ` ` .!HȥhL! .!L! `HȑhL!L!HH hhL!HH E(}hhL! H*h`L!`L!`HIhIi```IHIh`e` !L `E)}` !L! !L! !L! ! !L ! !L  &L!L! 󨥂fjL! eHehL! E*}8H哪hL! HhL! EHEhL! %H%hL!`\_ łXTM łFBE 0>7ł86/ 䃐-&łE+}'% 0ł 䃐 ł`` 0ł 䃐ł۰ 0łʰ 䃐ł𹰼 E,}L H hL lHh` !L !L hh捠ilŕŔ E-}liL#`L!  ! Ɣ !$ \$& $ \$& 򦓥 !`HE.}eeh`` ! ! ! !Ńł &&L$FfFf3ōE/}Ō8包卅FfFfͥ !ĕ !` t$L! ` E0}`S L L L i?H ihL%  80l k# u i! u :  E1}15 u ! _ " D " u d'  -%L#& u f'  -% u  u  0 u D i! u Lq# k# E2}m u u  % u B! B! B! u !UL& u #  B! $L~& u !L& u  B!L& u B!L&L& #&\E3}&?&*L& u  u "j u  h" ! M! \ " : " u i'  0LY' u E4}n'  0 u / Lq#DD:\*.**.* k# u  u '  / R!Lq#d k# a  u ! r'  E5} r1 B!  "L]) B! u "[L)( u # B! $ u #  B! $L' u r'  u Y" ! i! E6} "LX(L(r' Y" ! Ģ "/ u #  B! $ \ i! u i!LZ) u #  B! $ . i! E7} B! u "[L) u # B! $ u #  B! $L( u r'  u Y" ! i! "L6)L( u  E8}u " h" i!Lm) u !  / u  " # Lq# cannot open k# M -* 00  b0 1 B!3* E9} 00  b0 u L*) # ) $L'*  %))L'* #)))q)Q)n)NL)  Lq#~~~~~ kE:}# u 00  / u ") ) ( 3##) # ) $))  " E;})Lq#:::::::::: k# e * u  %E<}) ! )L+ + 00  b0* 00  b0 + 00  b0)* ".  / B! u E=}"0* 00  b0) 00  b0 ' L-)) u * P  r1 M! #L-* B! E>}# M! $L-LY, u #  B! $L(, u !L-  9*L-  9*  9*L-  9*)  " E?}  9*L-$  9*(  9*L-  9*$  9*)  9*L-  9*$  9*-  9*L-$ E@}  9*'  9*L- u !  " ")  9* u ! @ Y"  9*L- u !  9*L- #d,s,,EA},{,,},-~#-`L>-) ! ' L-LC,L+L- e  u  0L- e ) !)) ! ! ) ' Lq#rEB} k#* 7 . u  "!/ 00  b0  %R). u . B! #L/, u , B!, u ! ! EC}- " )Li., u ! *  1, u ! ?  1L/ . u !  %(   '(ED} u ". 00  b0) 00  b0Li.(   '  +LZ/L/, u !  +Li.* EE} Lq#more file... HHIDE Bh VLh1` B V0`` ]# M  ! u # 0 B! ! "EF} u 00  Lq# u  Lq# k# !6070  1 6070  $.Lq# ]# ! ! ! M% x2Lq# Y# ! / EG} 3#L0 u Lq# ]# ! ! M% Y"  ! -%Lq#@ iɀ` 00krwaEH} dKJKHI)a0{8 驛DEB VLh1``00` 1B VLh1HHIEI}h` `Œ eL!L1 1`%H$H` u u HI u DE + (` EJ} NHɛD l2ȥi揠 l2Hhɛ`!8`` 1 B VLEK}h1HHIh` HɛD l2ȥi揠 l2Hhɛ`!8`` 1 B VLD_STRCHRLDAISAVEAX_FILNAMELDAYSPENTERFUNINCAX1STAYSP_DIRNAMESUBTOSIM}_STRCATTOSNEAXINCSP7EXITFUNSTASPPTOSULEAXSTAXYSPDECSP7ANDTOSRESTAXPUSHAXIN}LDAXYSP_STRCPYCASEJUMP E U T N U T: T @5 U A T_ R TIO}D K U T"! T VL q U T"! T V U T U T J UIP} TD N ULM E Q U T U T  U P P P U AUL  U BIQ} F P SL  U AL  U PL ( U PL (L ( W \ ? *L  U TIR} U Oj U T I A G D T\ K D T: K U T"!IS} T JL  U T"! T J U LLMDD:\*.**.*: K U T"!HU_STDERRSAVEAX_FPUTS_STDINLOCYSPLDAXIENTERFUN_STDOUT_ERRNOTSTAXSUMU}BTOSADDTOSASLAXEXITFUNSTAXYSPRESTAXINCSP8DECAX1LDAXYSPPUSHAXDECAX2_PUTMV}STRDECSP8 F V D S D S L K E L K S L J N R A TMW} N O E N R A T N O E N R A Q N O I) R A T NMX} O E S R S BL q PLMO E N R A Q N O I) R A T NL10?POPAX_STRRCHR @ @ `ŒL ) R A T NP`/* * TREE * * build tree */#include #include "D:tree.h"#define local staticextern char word[4U[}0];struct s_unit *dtree;struct s_unit *unit;local *types[] ={ ".C", ".M65", ".OBJ", ".COM", 0};local typev[] ={ U\} c_msc, c_C, c_M65, c_OBJ, c_COM};local char m_nob[] = " cannot build\n";local char buf[40], buf2[13];local char entry[2U]}3];local char erred;/* make unit data */local struct s_unit *mkunit (){ struct s_unit *u; char *p, *q; int i;U^} u = pmalloc(sizeof(struct s_unit)); strcpy(u->name, word); u->source = NULL; p = strchr(word, '.'); u->type = tyU_}pev[inlist(types, p)]; filname(buf, word); p = strchr(buf, ':'); if (q = strrchr(p, '\\')) p = q; if (q = strrchr(U`}p, '>' )) p = q; strcpy(buf2, ++p); *p = 0; p = u->time; if (dirent(buf, buf2, entry) < 0) { u->nil = 1; Ua} for (i=0; i<6; i++) *p++ = 0; } else { u->nil = 0; *p++ = entry[19]; *p++ = entry[18]; *p++ = eUb}ntry[17]; *p++ = entry[20]; *p++ = entry[21]; *p = entry[22]; } return u;}/* find unit */local struUc}ct s_unit *findunit (u)struct s_unit *u;{ struct s_dep *d; struct s_unit *u2; if (!strcmp(u->name, word)) { reUd}turn u; } else { d = u->source; while (d) { if (u2 = findunit(d->dep)) return u2; d =Ue} d->next; } } return NULL;}/* add unit to tree */int addunit (){ struct s_unit *u; if (dtree == NULL) Uf} { dtree = unit = mkunit(); } else unit = findunit(dtree); if (unit) return 0; putstr(stdout, 2, word,Ug} " unrelated\n"); return 1;}/* add dependent to previous unit */int adddep (){ struct s_dep *d, *d2, *new; strUq}UB%DOS SYSB*)DUP SYSBSBUILD C BaCC65MAKETEXBpCHAIN C BCHECK C BCHECK COMBCHECK LNKBDIRENT OBJBDIRENTC OBJB EXTEND DOCBINLIST OBJBMAKE C BIMAKE COMBMAKE LNKBMAKE MAKB#MEMCMP OBJB'%MORE COMBLNAMES OBJBTPUTSTR OBJBYSTRRCHR OBJBZTREE C BvTREE H ByXIO OBJuct s_unit *u; char ts, td, s; new = pmalloc(sizeof(struct s_dep)); if (!(new->dep = u = mkunit())) return 1; Ur}new->next = NULL; if (d = unit->source) { while (d2 = d->next) d = d2; d->next = new; } else { unit->Us}source = new; } if (!(td=unit->type)) { fputs(unit->name, stdout); fputs( m_nob, stdout); return 1; Ut}} s = td + (ts = u->type); if ( (ts > td) || (s!=2 && s!=3 && s!=6 && s!=12) || (ts==0 && td!=2)) { pUu}utstr(stdout, 4, unit->name, "->", u->name , m_nob ); return 1; } return 0;}(ts==0 && td!=2)) { pTb/* * tree data */#define c_msc 0#define c_C 1#define c_M65 2#define c_OBJ 4#define c_COM 8struct s_unit{ Yw} char type, nil; char name[40]; char time[6]; struct s_dep *source;};struct s_dep{ struct s_unit *dep; struct Yx}s_dep *next;}; char name[40]; char time[6]; struct s_dep *source;};struct s_dep{ struct s_unit *dep; struct X"d~POPAXFINDIOCB_XIO @ @ @ @ A0< @BJKHI]z}DE V`` @ @ @ @ A0< @BJKHI\+