@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/* ALMLIB.C for CC8, by Mark Miller 5/27/91. */#include "STDIO.H"#define MEMSTART 1536#define MEMSIZE 256/* num of byteT}s for alloc info. */#define INFOLEN 2#define FREE_SPC 1#define USED_SPC 2/* Does housekeeping on memory space. If theU}re are consecutive memory spaces that are freed, it will consolidate these spaces into one free space.*/update()$( /*V} ptr to alloc info.; ptr to first free space found */ char *loc, *tempaddr; /* size of a space; accum for size of consecuW}tive spaces */ int size, templen; /* flag for first non-free space found (after free space(s) found) */ int done; loX}c = MEMSTART; templen = 0; /* search through memory space until end, for free space to consolidate */ while(loc < MEMSTY}ART+MEMSIZE) $( if(*loc == FREE_SPC) $( /* if space is free, search for consecutive free spaces */ sizeZ} = *(loc+1); /* hold first free-space pos */ tempaddr = loc; /* get size of this space */ templen = s[}ize; /* get to next info. bytes */ loc += size+INFOLEN; done = 0; while((loc < MEMSTART+MEMSIZE) && !\}done) $( /* if next space is free, add its free space to accum */ if(*loc == FREE_SPC) $( ]} size = *(loc+1); templen += size+INFOLEN; $) /* if */ else /* otherwise, done with p^}resent search */ done = 1; /* go to next info. bytes */ loc += size+INFOLEN; $) /* while */ _} /* if more than one free space was found, record this free space */ /* at first free-space pos */ if(templen`} != size) *(tempaddr+1) = templen; templen = 0; $) /* if */ else /* if space is not free, go to na}ext info. bytes (next space) */ loc += size+INFOLEN; $) /* while */$) /* update *//* Finds a free space for someb}thing of specified size (data type does not matter). If no free space can be found with specified size, malloc will retuc}rn NULL. Currently malloc only works in the 256 byte space of Page 6 (location 1536 decimal).*/char *malloc(size) ind}t size;$( /* ptr to info. bytes; ptr to allocated space */ char *loc, *bloc; /* amt of space free/used */ int space;e} /* flag for when free space found and allocated; flag for when update() */ /* is called */ int done, updated; loc =f} MEMSTART; /* if memory area is completely unused, put in info. bytes, set to */ /* free space */ if(*loc == 0) $( g} *loc = FREE_SPC; *(loc+1) = MEMSIZE-2; $) /* if */ bloc = NULL; updated = 0; done = 0; while(!done) $( h} /* search for free space of specified size (or more) */ while((loc < MEMSTART+MEMSIZE) && !done) $( space = *(i}loc+1); /* if space is free, allocate it and return ptr to it. Also put */ /* modified info. bytes after allocatj}ed space */ if((*loc == FREE_SPC) && ((space == size) || (space >= size+INFOLEN))) $( *loc = USED_SPC; k} *(loc+1) = size; if(space >= size+INFOLEN) $( *(loc+INFOLEN+size) = FREE_SPC; *(locl}+INFOLEN+1+size) = space-size-INFOLEN; $) /* if */ bloc = loc+INFOLEN; done = 1; $) /* if */ m} else /* otherwise, go to next info. bytes */ loc += space+INFOLEN; $) /* while */ if(!updated && n}!done) $( update(); updated = 1; loc = MEMSTART; $) else done = 1; $) /* while */ reto}urn bloc;$) /* malloc *//* Deallocates space pointed to by addr.*/free(addr) char *addr;$( int size; if((addrp} >= MEMSTART) && (addr < MEMSTART+MEMSIZE)) *(addr-2) = FREE_SPC;$) /* free *//* Allocation Memory Reset: Sets allq} bytes in memory space to 0, just in case any data is there.*/almreset()$( clear(MEMSTART-1, MEMSIZE+1);$)/* Allocr}ation Memory Dump: This function is provided for program debugging purposes. It displays, in decimal form, what is in ths}e memory area used for dynamic memory allocation by malloc().*/almdump()$( char *addr; printf("Allocation memory dt}ump from location\n"); printf("%d to %d, in bytes:\n", MEMSTART, MEMSTART + MEMSIZE); for(addr = MEMSTART; addr <= MEMSTAu}RT+MEMSIZE; addr++) printf("%d ", *addr); printf("\nPress RETURN to continue"); getchar();$) /* almdump */<= MEMSTAt' @@A5AB>A7>A>A A7@A5AB w} AB>A7 A7 @  A79A% A7 A x} @  A7 ' @AB A A7  @@@ y}ABA5AB >A7AB9A$ 9A7)   z}A A7 A9A7)A7? A77? 9A >A7@ {} A7ABAB '@@@ A'A |} -A5 A  '  '' ' &  '@A }}+  " ;A ' ?''YAllocation memory dump from location ~}%d to %d, in bytes:%d Press RETURN to continue'getchar'printf'almdump'clear'almreset'free'malloc }'updated, in bytes:%d Press RETURN to continue'getchar'printf'almdump'clear'almreset'free'malloc ,(?L:6L,2L5LU4Lt5Li5L-L3L+-L6L!5L2L1L3L-L1LW.La.L1L6L4L4LO5L4L.L4L4L45L,L,L3L]1L5L4L1L4L5L-L2L}3L/.L1L=.L1L/L-L3LD2L_5L5L3L.L.L-L3L{2L2L2L2L{.2lȱňı88必ƥDZ…ȱ…ťi ,ԆL!}8 , 46`* 76`L, `ƅˈƅʈƅɈƅ` -ƝB EƝD IƝH ƝJ }K VIi`` -L,BHI V0ڢ`ȱ G-FȌ- tLw- -ձʑ `ƙȥ}̱ȑ`ƙȄͦʥ``ƅɈƅȢ`ƅȱƅ̠ƅȱȪ̑Ȋ` /.HȱȪh` -ȅȱ}ͥˑȥʈȦͥ`ƅƅ إԅ) ٥0Ԧ`IIi` -L- - 80`` -V/F\/}G]/\/]/ƅȱƅL*/҅Ɉƅȭ]/\/\/]/V/Ȅʩ΅ϩ %$ U/L0/`( 46 z}-ԆբL!8ȱ% 2-Lp/.Lp/AL/ȱ: 0蝀懲詛 ٥ ԅΤLp/ԅϤLp/}DL0ȱIՈIiL0Ոƅ إ'0ȄΥΐ U/ R0L0 R0Υ U/LD0 - U/}Π0. U/Le0)LU/溤`XL0ȄƅՈƅԥH)JJJJi0:i U/h)i0:i U/ }L0L0/C ʱ U/L0SL4ʱƅȱƅť K1L0ΰ U/ K1LH1 K1ΰ U/L0 U/}``BP B VBD1EƝK)IJLt-S:ƅ`ƅVȱƅTƅU` 1 0`Lz- 1`BLt- 1 } - BIƅɝEƝDȠˆ 2󩛑Lt- - BLt-ƍ+2ƍ*2ƿƿiƐLt0`8Hƪh` -̄ͱʅα}ͥ``ȱܱƅɈƅȢ`{a `A[i L2 -Π 2Ȉȱ :* }D1:șȈ..Ȅ̤αʤ̑`@i`ƝDȱƝEBȱƆ 2}ARWUD`   J V0JJJJ`Lz-ƨx`ƨТ`ȭ Ȑ Ң`ƝEƝDB}I V0 ($`Lz- -L3 -B0ƝKƝDȱƝELv3FL0ʱƪȱƨ ؠ0.)ȩ.ȩ0ȩ}L0ȱ)LA4ƅƅ ؠƅȱƅL4ƙșʙ`̈` u4 L4 u4 (L4 u4 fL4 u4 `L4 -}ș ޠʈ`ƅȱƅȱƅȱƅ L4ƪȱƨ ޠƪȱƨ ݠƅȱƅL4 -ș L4ƅɈƅȠ} ٦ԥ`//B`/B` 5 BLt- 5B VHI`` -ƝIƝHƝEƝD` - }``_A [ a{``ҩ҈) ƝҠ) Ƞ)` - ȈȈ`LL}i56i66i1i1i1i1$i86%i96/©6í@@L7@"66l iàL}7…ȱ…ťiÈԑL7…ȱ…ťiåՑĈԑL7ȱňĥԑĥ8êc;%7d;&7Lt…ȱ…ťi}ÈąԄL7…ȱ…ťiñąՈąL7eȱeL6ȱňĥԑĥȑĈL7ԅԄL7ԪȱԈՆL7i‘}ȱ‘L6…ȱ…L6iԑȑL7ԱԊȦձՊL7iȱª¨„ iiȑÈL7ȱ}Í;88L7±ŠȦñÊL7ªȱ…ƈL7 L\8L6 ȥLB=L,=q…q…L6&L7}eԅȱeՅՈL78ԅȱՅՈL7ԅՅȱ :ԥL7 9L8 9ԥL7ȱդL:ԅȱՅՈL7E}ȱEՅՈL7%ԅȱ%ՅՈL7ȱJfՈL7ȱL7ȱ*ՈL7ԱL78ԅԩՅL7}EԅԩEՅL7L7L78Ԫȱ`ȱL7ȱԄL7 90 90 90ʊ 90}ȱՐɱԐȱՐзԐЭȱՐЎԐL9ȱՐ԰L9&&& L: }`ɀE ɀf8ਊ s:$ 8$P 8`E0 IIL; 8}Ff eeFfff$ 8`,'7E7e7666v777777j877!8E8\8u88888888}9%969G9o99999999:::%:7:K:`:~8;+0>L>h>>>><<<<>??…ȱ…ťiÈią ȱ}iąՈL7ȱĈL7…ȱ…ťiñąՈąiȱiĈL7…ȱ…ťi8ą԰ ȱąՈL7ȱąՈL7…}ȱ…ťiñąՈą8ĐL7ȱĈL7tmL(=P]L(=…ȱ…8ԈĪCL(=…ȱ…8ԈĪ}0)L<=8ªԥiàL7Ԅՠªȱ…Æ L78ª0ƊL<=˥ԈL<=ФԈL}(=q…ԥq…L6…ȱ…ťiåqąԥqąՈL7eȱeťiåiđđL7eȱeťi}L <eȱeťiL?<eȱeťiLn<eȱeťiL<eȱeťiő}L6eȱeňeԅȱeՅL6eȱeťiñ‘ąՈ‘ąL6eȱeűąՈąL6eȱeňąԄ}L6 ԄL7L7L?:6ȱeťiñ‘ąՈ‘ąL6eȱeűąՈąL6eȱeňąԄ*Dynamic Memory PackageWritten for CC8, Ace C's linker &librariesby Mark Miller---------------------------------Files:}ALMLIB.CALMLIB.CCCSTDIO.HSTACK.CSTACK.COMALMLIB.C contains:malloc(), free(), almreset(), &almdump(). You should not }need touse update(). It is only intendedfor use by malloc().These routines use the Page 6 areafor dynamic memory alloca}tion.almreset() - Sets the Page 6 areato zeroes.almdump() - Is intended fordebugging purposes. It dumps thePage 6 area,} a byte at a time indecimal form, to the screen.malloc() and free() act as closeto their standard behavior as Icould get} them. Each block that isallocated with malloc() will bepreceded by two bytes, theavailability byte, and the sizebyte. }This is the way malloc()determines how much free space isavailable, and keeps it fromstepping on stuff alreadyallocated. } malloc() allocatesmemory in bytes.ALMLIB.CCC - ALMLIB.C compiledinto P-code using CC8. CC8compiled code can be linked }usingthe Ace C, Deep Blue C, orLightspeed C linkers, to otherP-code files created with thecorresponding compilers, includ}ingother P-code files created by CC8.STDIO.H - Contains the definitionof NULL (i.e. #define NULL 0). Itis not really ne}eded, unless youintend to recompile ALMLIB.C, oryou can use it for convenience inyour own programs.STACK.C - Is an examp}le program Iwrote for a data structures coursein college. It implements a stackas a linked-list structure. Ittakes as i}nput, sentencescontaining words separated byspaces, and terminated by a period,question-mark, exclamation point,etc. I d}on't think it reallymatters. The program uses twostacks to reverse the order of thewords in the sentence, withoutreversi}ng the lettering in thewords. It puts whatever youterminated the sentence with atthe end of the reversed sentence.STACK}.COM - The compiled andlinked version of STACK.C. It isready to run.ENGINE.OBJ - The runtime enginefrom Ace C. It must} be in thesame directory as STACK.COM, sinceit is loaded at runtime.If you have any questions aboutthis package, you can} e-mail to meat millerm@cs.colostate.edunceit is loaded at runtime.If you have any questions aboutthis package, you can*/* Sentence Reverser, prog. 3 from CS 270, using CC8 with Ace C libraries *//* by Mark Miller 2/4/91 */#define NULL 1536}struct nrec$( char data; struct nrec *next;$);push(stack, p) struct nrec **stack, *p;$( p->next = *stack; *sta}ck = p;$) /* push */struct nrec *pop(stack) struct nrec **stack;$( struct nrec *p; p = *stack; *stack = (*stack)}->next; return p;$) /* pop */readsent(sentstack, rdone) struct nrec **sentstack; int *rdone;$( char ch; struct }nrec *p; *sentstack = NULL; poke(764,255); while((ch = getchar()) != '\n') if(ch != '*') $( p = (struct }nrec *) malloc(sizeof(struct nrec)); p->data = ch; push(sentstack, p); $) /* if */ else *rdone = 1;}$) /* readsent */esrever(sentstack, wordstack) struct nrec **sentstack, **wordstack;$( struct nrec *chptr; char pun}ct; *wordstack = NULL; chptr = pop(sentstack); /* punctuation is first element on stack */ punct = chptr->data; fr}ee(chptr); do $( /* get char to push on 2nd stack */ chptr = pop(sentstack); if((chptr->data != ' ') && (*se}ntstack != NULL)) push(wordstack, chptr); else $( /* if stack is not empty, get rid of char */ if(*}sentstack == NULL) /* if stack is empty, print char */ printf("%c", chptr->data); free(chptr); do} $( /* get char from stack */ chptr = pop(wordstack); printf("%c", chptr->data); free(ch}ptr); $) while(*wordstack != NULL); /* if stack is not empty, print space */ if(*sentstack != NULL) } printf(" "); *wordstack = NULL; $) /* else */ $) while(*sentstack != NULL); printf("%c\n", punct);$) /* esrev}er */main()$( struct nrec *sentstack, *wordstack; int done; almreset(); done = 0; while(!done) $( printf(}"Type in sentence. Use * to quit program\n"); readsent(&sentstack, &done); if(!done) $( printf("reversed:}\n"); esrever(&sentstack, &wordstack); printf("\n"); $) /* if */ $) /* while */$) printf("reversed:e@AacebAFrnr (|rn( (lB|BB @*@|kDr} rr @$@$Q@( (|r@| rE|r@ @@&@rr @$GA@}ArBrE|r@ArBrE/A$A?AArBSA$@ArB( (E}AArB||<@AArB||@ArB$nA( %c%c %cType in sentence. Use * to quit programreversed:}AvC,, , ,,,,,,,!,$,',*,-,0,3,6,9,<,?,B,E,H,K,N,Q,T,W,Z,],`,c,f,i,l,o,r,u,}x,{,~,,,,,,,,,,,,,,,,,,(fB$Bt$BrB$B( (rCfCrr}`B|rBfCICrrBrC$B( XCrBrHBnHCuBuB'B can't open %sfilename }(or RETURN to exit)? wCF( jgDC D$dDVD|n||n,}jCC&+DD|nn,$Dn,$CrJ&NDn nr B$dD}n,$C( ( D n EjDD&wED D$t}E|n ErHErnR&E& E&fE n rnR&TEn~ nn~r.}. |n$tEn,$DEE&EwC$E$D( (Z&EjE&E|}.rr B. (  B (NFrBtFrBV&?F$0F D$FFrB$ FFrBBB(} Allocation memory dump from location1536 to 1792, in bytes:%d Press RETURN to continueS??Lo?Can't find D1:ENGINE.O}BJ @ VaD?EBJ VVD?E BI Vl IHEDB V0ʭD?E?8H}I V B VL,o? VVD?E BI Vl IHEDB V0ʭD?E?8H#define NULL 0B VL,o? VVD?E BI Vl IHEDB V0ʭD?E?8H B%DOS SYSB*)DUP SYSB#SALMLIB C B vALMLIB CCCB(ENGINE OBJBREADME TXTBSTACK C BSTACK COMBSTDIO H