@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/*ALLOC.C*/#define NULL 0#define AV struct availistAV $( AV *ptr; int bsz;$);int tot;int holdtot, lomem, blocka, bT}lockb;int endprog = 0x9F70;extern int dofirst();extern char msg2[];static AV *freep = NULL;char pmpt[] = "Overflow...";U}char *malloc(nunits)int nunits;$( AV *p, *prevp; if((nunits < 4) && (nunits > 0)) nunits = 4; if((prevp = freep)V} == NULL) dofreep(); prevp = freep; p = prevp->ptr; while(1) $( if((p->bsz >= nunits+4) || (p->bsz == nunits)W}) $( if(p->bsz == nunits) prevp->ptr = p->ptr; else $( p->bsz -= nunits; p = (AX}V *)(p->bsz + (int)p); $) tot -= nunits; return((char *)p); $) if(p == freep) $( printf("Y}\n%s\n",pmpt); printf("%s\n\n",msg2); getkey(); return(NULL); $) prevp = p; p = p->ptr; $)$)Z}/*function free*/free(adr,siz)char *adr;int siz;$( AV *bp, *p; bp = (AV *)adr; if((siz < 4) && (siz > 0)) [} siz = 4; bp->bsz = siz; p = freep; while(!(bp > p && bp < p->ptr)) $( if(p >= p->ptr && (bp > p || bp < p->ptr\})) break; p = p->ptr; $) if(bp->bsz + (int)bp == p->ptr) $( bp->bsz += p->ptr->bsz; bp->ptr = p->ptr-]}>ptr; $) else bp->ptr = p->ptr; if(p->bsz + (int)p == bp) $( p->bsz += bp->bsz; p->ptr = bp->ptr; $) else^} p->ptr = bp; tot += siz;$)/*function dofreep()*/dofreep()$( AV *prevp; freep = (AV *) lomem; freep->ptr = lome_}m + 4; freep->bsz = 0; prevp = freep; freep = freep->ptr; freep->ptr = endprog; freep->bsz = blockb - 4; freep = `}freep->ptr; freep->ptr = prevp; freep->bsz = blocka; freep = prevp;$)front()$( closeall(); lomem = dpeek(743); a} blocka = 0xBC00 - endprog; blockb = 0x2C00 - lomem; holdtot = blocka + blockb; tot = holdtot;$)clearfl()$( tot = b}holdtot; dofreep(); dofirst();$) 0x2C00 - lomem; holdtot = blocka + blockb; tot = holdtot;$)clearfl()$( tot = &/*BROWSE.C*/#include "GLOBALS.H";extern int browsep();extern int docol();extern int dohead();extern int postad();exter d}n int saveptr();extern int getmes();extern int free();extern char *malloc();extern int point();extern int getcnam();ext e}ern int getmesn();extern int getsdata();extern int getdrive();extern char msg1[], msg2[];char from[] = " From :";char f} to[] = " To :";char date[] = " Date :";char subj[] = " Subject:";char sub2[] = " :";char mess[] = "Me g}ssage #:";char repl[] = "mhead; if(rt != -1) rov = getnext(rt,cn,rov n}); $) pn = rt; lbuf = sizeof(buf); scan = 1; pflag = 0; printf("\nRead %s\n",p72); strcpy(f0,p72); ib = getdr o}ive(f0,'r'); if(ib <= 0) return; else close(ib); while(scan && rov != NULL) $(/************** while loop ********** p}*****/count = 0;prev = NULL;sec = rov->sector;byt = rov->byte;ib = copen(f0,'r');point(ib,sec,byt);i=bgets(buf,lbuf,i q}b);ptr = buf;if((ptr[122] != '') && (ptr[123] != ''))$( printf("\n\nWrong Disk?\n\n"); getkey(); close(ib); retu r}rn;$)rptr = recs;getsdata(rptr,ptr,116,6);k = val(recs);k--;k = k*128;t = malloc(k+1);if(t != NULL)$( i=bgets(t,k, s}ib); close(ib); rptr = mn; getsdata(rptr,ptr,1,7); j = rov->confn; rec = getcnam(j); rptr = frm; getsdata(rptr, t}ptr,46,25); rptr = too; getsdata(rptr,ptr,21,25); rptr = dt; getsdata(rptr,ptr,8,8); rptr = tm; getsdata(rptr,ptr u},16,5); rptr = sj; getsdata(rptr,ptr,71,25); rptr = rp; getsdata(rptr,ptr,108,8); m = val(rp); if(rp[0] == ' ') m v} = 0; if(pflag) $( printf("\n%s",prY); docol(); rptr = f1; ib = browsep(rptr); if(ib <= 0) pflag = 0; w} $) if(!pflag) $( strcpy(f1,"S:"); ib = copen(f1,'w'); $) poke(82,0); poke(752,1); putchar('\f'); pri x}ntf(ib,"%s %s",mess,mn); printf(ib," of %d\n",rec->hi); printf(ib,"#%-3d %-33s\n",rec->cnum,rec->cnam); printf(ib,"\n%s y} %s",from,frm); printf(ib,"\n%s %s\n",to,too); printf(ib,"%s %s/ %s",date,dt,tm); count = 6; if(m != 0) $( prin z}tf(ib,"\n%s%s",subj,repl); printf(ib,"%s>",rp); printf(ib,"\n%s %s",sub2,sj); count+=2; $) else $( prin {}tf(ib,"\n%s %s",subj,sj); count++; $) printf(ib,"\n"); count++; process(ib,pflag,t,k,count); close(ib); if(pf |}lag) $( printf("\n%s",prZ); docol(); pflag = 0; $)$)printf("\n\n%s",ppt);cx = toupper(getkey());putchar(' }}\f');switch(cx)$( case 'R': $( j = 0; printf("\n%s",z11); cy = toupper(getkey()); if(cy == 'Y') $( ~} j = dohead(t,ptr); printf("\n%d %s",j,z12); $) postad(rec->cnum,ptr); printf("\n%s",z13); cy = to }upper(getkey()); if(cy != 'Y') scan = 0; $) break; case 'N': case '\n': case ' ': $( prev = rov; ro }v = rov->dnext; if(rt != -1) rov = getnext(pn,cn,rov); if(rov == NULL) $( printf("\n%s\n%s\n",x0,msg2 }); getkey(); rov = prev; prev = NULL; $) $) break; case 'B': $( prev = rov->dprev; if(p }rev != NULL) rov = prev; else $( printf("\n%s\n%s\n",x0,msg2); getkey(); $) $) break; cas }e 'J': $( j = getmesn(rec->lo,rec->hi); if(j >= 0) $( prev = getmes(j,rec->cnum); if(prev != NULL) }rov = prev; $) $) break; case 'M': $( printf("\n%s",z14); cy = toupper(getkey()); if(cy == 'Y') } saveptr(rov->mesn,rov->confn); $) break; case 'Q': scan = 0; break; case 'P': pflag = 1; break; case ' }A': default: ; break;$)if(t != NULL) free(t,k+1);/************* end while *****************/ $) closeall();$)getne }xt(ppn,ccn,rrv)int ppn, ccn;DISK *rrv;$( int flag; flag = 1; while(rrv != NULL && flag) $( if(ppn == 1) $ }( if(rrv->pers == 'y') flag = 0; $) else if (ccn >= 0) $( if(ccn == rrv->confn) flag }= 0; $) if(flag) rrv = rrv->dnext; $) return rrv;$) (ccn >= 0) $( if(ccn == rrv->confn) flag A/*CONTROL.C*/#include "GLOBALS.H";#define MAXR 1024extern char *malloc();extern int getdrive();extern char msg3[];char} pr0[] = "Reading ";lfile()$( char f0[64]; int ib; strcpy(f0,"CONTROL.DAT"); ib = getdrive(f0,'r'); if(ib>0) $}( printf("\n%s%s\n",pr0,f0); readf(ib); close(ib); printf("\n%s\n",msg3); getkey(); $)$)/*function re}adf()*/readf(iocb)int iocb;$( FILEDAT fr; FILELX ff; char w[MAXR], *ptr, *p, *fn, *t; int m, n, s, bufs, bufr, i,} k; ff.lnhead = NULL; n = bufr = 0; p = ptr = w; bufs = MAXR; m = bgets(p,bufs,iocb); bufr += m; n=find(ptr,bu}fr,' '); if(n < 0) $( printf("\n\nNeed Ascii file\n\n"); return; $) for(i=1;i<=11;i++) $( n=find(ptr,bu}fr,' '); n++; fn = ptr; while(*fn != ' ') fn++; *fn = '\0'; fn = ptr; if(i == 5) $( w}hile(*fn != ',') fn++; fn++; n = strlen(fn)+1; $) switch(i) $( case 5: case 7: $(} t = malloc(n); move(fn,t,n); $) break; case 9: case 10: if(fn[0] != '0') $}( printf("\n\nmistake\n\n"); return; $) break; case 11: $( s = val(fn);} fr.numc = s; $) break; default: ; break; $) switch(i) $( case 5: fr.BBSI}D = t; break; case 7: fr.usern = t; break; default: ; break; $) n++; } ptr = (int)ptr + n; bufr -= n; $) while(s+1) $( for(i=1;i<=2;i++) $( if((n=find(ptr,bufr,' ')) < 0)} $( move(ptr,w,bufr); ptr = w; p = (int)ptr + bufr; bufs = MAXR-bufr; m = bgets}(p,bufs,iocb); bufr += m; $) n=find(ptr,bufr,' '); n++; fn = ptr; while(*fn != ' ') } fn++; *fn = '\0'; switch(i) $( case 1: $( fn = ptr; k = val(fn); } n++; ptr = (int)ptr + n; bufr -= n; $) break; case 2: $( } if(addrec(k,ptr,&ff)) $( n++; ptr = (int)ptr + n; bufr -= n; s--}; $) else s = -1; $) break; $) $) $) db->lhead = ff.lnhead; db->BBSID = f}r.BBSID; db->usern = fr.usern; db->numc = fr.numc;$)/*function addrec()*/addrec(a,curr,frc)int a;char *curr;FILELX} *frc;$( CONF *new; char *t, *rec; int bts, n, slist; n = 0; rec = curr; bts = strlen(rec)+1; if(bts >= 33) r}ec[33] = '\0'; bts = strlen(rec)+1; slist = sizeof(CONF); t = malloc(bts+slist); if(t != NULL) $( move(rec,t,bt}s); new = (CONF *)(bts + (int)t); new->cnam = t; new->cnum = a; new->npers = 0; new->nmes = 0; new}->hi = 0; new->lo = 0x07FF; new->cnext = NULL; if((*frc).lnhead == NULL) (*frc).lnhead = new; els}e (*frc).endln->cnext = new; (*frc).endln = new; n = 1; $) return(n);$)NULL) (*frc).lnhead = new; elsU/*GLOBALS.H*/#define NULL 0#define MAXL 133#define MAXM 128#define FILEDAT struct frecord#define CONF struct nm_num#de}fine DISK struct diskx#define CONN struct conln#define FILELX struct filelextern DISK $( int sector; char byte; int} confn; char pers; int mesn; DISK *dnext,*dprev;$);extern CONF $( char *cnam; int cnum, npers, nme}s, hi,lo; CONF *cnext;$);extern FILEDAT $( char *BBSID, *usern; int numc; CONF *lhead; DISK *mhead;$);ex}tern FILELX $( CONN *lnhead, *endln;$);extern CONN $( char *dat,typ; CONN *next;$);extern FILEDAT *db;head;$);exq/*MAIN.C*/#include "MAIN.H";extern char *malloc();extern int postad();extern int browsex();extern int clearfl();extern} int dodir();extern int menud();extern int pconf();extern int front();extern int lfile();extern int getconfn();extern i}nt messages();extern int save();extern int read();main()$( DISK rr, *pm, p; int rt, ret; init(); while(1) $( } menua(); if(db->lhead != NULL) $( rt = menub(); while(rt == 0) $( rt = getconfn(); } if(rt >= 0) postad(rt,NULL); rt = menub(); $) if(db->mhead != NULL) $( rt = me}nuc(); while(rt > 0) $( rt = menud(&rr,&p); while(rt >= 0) $( ret =} (int)rr; pm = p; browsex(ret,rt,pm); rt = menud(&rr,&p); $) rt = men}uc(); $) $) $) $)$)init()$( front(); dofirst(); columns = 40;$)char mes0[] = "˸}堠򠠠";char mes1[] = " ҠRead CONTROL.DAT file";char mes2[] = " ѠQuit to DOS ĠDisk directory";char} mes9[] = " Select:\n";char mesz[] = " Free bytes:";menua()$( char choice; while(1) $( poke(82,0); } poke(752,1); printf("\f%s\n",mes0); printf("%s %d\n",mesz,tot); printf("\n%s",mes1); printf("\n\n%s",mes2)}; printf("\n\n%s",mes9); choice = toupper(getkey()); switch(choice) $( case 'Q': exit(); }break; case 'R': $( if(db->lhead != NULL) clearfl(); lfile(); if(db->lhead != N}ULL) return; $) break; case 'D': dodir(); break; default: ; break; $) $})$)char mes3[] = " ҠRead QWK8.DAT";char mes4[] = " or ӠScan MESSAGES.DAT file";char mesH[] = " РPost a message Š}Exit menu";char mesI[] = " ֠View conference data ";menub()$( char choice; while(1) $( poke(82,0); poke(75}2,1); printf("\f%s\n",mes0); printf("%s %d\n",mesz,tot); printf("\n%s",mes3); printf("\n\n%s",mes4); prin}tf("\n\n%s",mesH); printf("\n\n%s",mesI); printf("\n\n%s",mes2); printf("\n\n%s",mes9); choice = toupper(getk}ey()); switch(choice) $( case 'E': return -1; break; case 'P': return 0; brea}k; case 'Q': exit(); break; case 'V': pconf(); break; case 'D': dodir()}; break; case 'R': $( read(); if(db->mhead != NULL) return 1; $) brea}k; case 'S': $( messages(); if(db->mhead != NULL) return 1; $) break; } default: ; break; $) $)$)char mes7[] = " ҠRead messages ŠExit menu";char mes8[] = " ӠSave index in QWK8.DAT";}menuc()$( char choice; while(1) $( poke(82,0); poke(752,1); printf("\f%s\n",mes0); printf("%s %d\n",}mesz,tot); printf("\n%s",mes7); printf("\n\n%s",mes8); printf("\n\n%s",mes2); printf("\n\n%s",mes9); choi}ce = toupper(getkey()); switch(choice) $( case 'E': return 0; break; case 'Q': exit}(); break; case 'D': dodir(); break; case 'R': return 1; break; case 'S':} save(); break; default: ; break; $) $)$)dofirst()$( int s; s = sizeof(FILEDAT); db = (FI}LEDAT *) malloc(s); db->lhead = NULL; db->mhead = NULL; db->BBSID = NULL; db->usern = NULL; db->numc = 0; s} = sizeof(FILELX); dbl = (FILELX *) malloc(s); dby = (FILELX *) malloc(s); dbx = (FILELX *) malloc(s); dbz = (FILELX }*) malloc(s); dbl->lnhead = NULL; dby->lnhead = NULL; dbx->lnhead = NULL; dbz->lnhead = NULL; dbl->endln = NULL; }dby->endln = NULL; dbx->endln = NULL; dbz->endln = NULL;$)>lnhead = NULL; dbz->lnhead = NULL; dbl->endln = NULL; @/*MAIN.H*/#define NULL 0#define FILEDAT struct frecord#define CONF struct nm_num#define DISK struct diskx#define CONN }struct conln#define FILELX struct filelFILELX $( CONN *lnhead, *endln;$);CONN $( char *dat,typ; CONN *next;$);DIS}K $( int sector; char byte; int confn; char pers; int mesn; DISK *dnext,*dprev;$);CONF $( char *cnam; int }cnum, npers, nmes, hi,lo; CONF *cnext;$);FILEDAT $( char *BBSID, *usern; int numc; CONF *lhead}; DISK *mhead;$);FILEDAT *db;FILELX *dbl,*dby,*dbx,*dbz;char msg1[] = "Π for menu";char msg2[] = "Π to c}ontinue";char msg3[] = "Done!\n\nΠ to continue";extern int tot;int columns;for menu";char msg2[] = "Π to cV/*MESSAGES.C*/#include "GLOBALS.H";#define FILEMX struct tempptrFILEMX $( DISK *headm, *endm;$);extern char *malloc() };extern int getdrive();extern int getsdata();extern int getcnam();extern char msg2[],msg3[];extern char pr0[];messages( })$( char f0[64]; int ib; strcpy(f0,"MESSAGES.DAT"); ib = getdrive(f0,'r'); if(ib>0) $( printf("\n%s%s\n",pr }0,f0); readm(ib); close(ib); printf("\n%s\n",msg3); getkey(); $)$)/*function readm()*/readm(iocb)int i }ocb;$( FILEMX frec; DISK rec; CONF *rov; char buf[MAXM], byt, name[26], *ptr; char recs[7], messn[8], *rptr; int } sec, lbuf, i, j, k; frec.headm = NULL; lbuf=sizeof(buf); i=bgets(buf,lbuf,iocb); while(i) $( note(iocb,&sec,& }byt); rec.sector = sec; rec.byte = byt; i=bgets(buf,lbuf,iocb); ptr = buf; if((ptr[122] != '') && (ptr[1 }22] != '') && i) $( printf("\n\nmistake\n\n "); i = 0; $) if(i) $( rec.confn = ptr[123]; } rec.confn += 256*ptr[124]; rov = getcnam(rec.confn); rptr = name; getsdata(rptr,ptr,21,25); if(s }find(name,db->usern) >= 0) rec.pers = 'y'; else rec.pers = 'n'; rptr = messn; getsdata(rptr,ptr,1,7 }); k = val(messn); rec.mesn = k; if(k < rov->lo) rov->lo = k; if(k > rov->hi) rov->hi } = k; rptr = recs; getsdata(rptr,ptr,116,6); k = val(recs); if(addmes(rec.sector, rec.confn, rec.mesn }, rec.byte, rec.pers, &frec)) $( rov->nmes++; if(rec.pers == 'y') rov->npers++; k--; } for(j=0;jmhead = frec.headm;$ })/*function addmes()*/static DISK *prev;addmes(s,c,m,b,p,frc)int s,c,m;char b,p;FILEMX *frc;$( DISK *new; char *t }; int n, slist; n = 0; slist = sizeof(DISK); t = malloc(slist); if(t != NULL) $( new = (DISK *) t; new-> }sector = s; new->byte = b; new->confn = c; new->pers = p; new->mesn = m; new->dnext = NULL; if((*fr }c).headm == NULL) $( (*frc).headm = new; prev = NULL; $) else (*frc).endm->dnext = new; (*frc).en }dm = new; new->dprev = prev; prev = new; n = 1; $) return(n);$)pconf()$( CONF *rov; int count; poke }(82,0); rov = db->lhead; count = 0; while(rov != NULL) $( printf("\n#%-3d %-33s",rov->cnum,rov->cnam); count+ }+; if(count >= 22) $( printf("\n>- More -<"); getkey(); count = 0; $) rov = rov->cnext; $ }) printf("\n%s",msg2); getkey();$)note(ib,sc,bt)int ib,*sc;char *bt;$( ciov(ib,38,-1,-1,-1,-1); *sc = dpeek(844+ }(16*ib)); *bt = peek(846+(16*ib));$)point(ib,sc,bt)int ib,sc;char bt;$( dpoke(844+(16*ib),sc); poke(846+(16*ib),bt }); return ciov(ib,37,-1,-1,-1,-1);$)point(ib,sc,bt)int ib,sc;char bt;$( dpoke(844+(16*ib),sc); poke(846+(16*ib),bt (/*POSTAD.C*/#include "GLOBALS.H";extern FILELX *dbl,*dby;extern char *malloc();extern int getstr();extern int getcnam()$};extern int itoa();extern int delmess();extern int free();extern int post();extern int lines();extern int clearblk();e$}xtern int putsdata();extern int savep();extern char repl[],from[],to[],subj[];char inc[] = "in conference:";char zz0[] = $}"Subject:\n -->";char nz[] = "Private? y/[n]";char z10[] = "New name or \n -->";char zz1[] = "New subject or \n -->";char prom[] = "Enter message, exits\n";postad(cf,buff)int cf;char *buff;$( FILELX fr; CONN $}*rov; CONF *rec; char frm[26], too[26], sj[26], mn[8]; char cn[11], *ptr, *rptr, dum[26]; char yy[7], *t, cx; int n$}, mnn, k, j; k = cf; rec = getcnam(k); rptr = cn; itoa(k,rptr); printf("\n%s",nz); cx = toupper(getkey()); if($}cx == 'Y') cx = '*'; else cx = ' '; ptr = buff; if(ptr != NULL) $( rptr = mn; getsdata(rptr,ptr,1,7); mnn$} = val(mn); rptr = too; getsdata(rptr,ptr,46,25); rptr = dum; getsdata(rptr,ptr,71,25); printf("\n\n\n%s $}%s",subj,dum); printf("\n %s ",zz1); $) else $( rptr = mn; rptr[0] = '\0'; printf("\f\n %s ",zz0); $}$) rptr = sj; getstr(rptr,25); if(ptr != NULL) $( if(strlen(sj) == 0) strcpy(sj,dum); $) else $( $} printf("\n%s ",to); rptr = too; getstr(rptr,25); $) n = strlen(db->usern)+1; rptr = dum; getsdata(rptr,db->u$}sern,0,n); printf("\n%s %s",from,dum); printf("\n %s ",z10); rptr = frm; getstr(rptr,25); if(strlen(frm) == 0) $} strcpy(frm,dum); putchar('\n'); if(ptr != NULL) printf("\n%s%d> %s",repl,mnn,inc); else printf("\nPost %s",inc);$} printf("%d\n%s\n",k,rec->cnam); printf("\n%s %s",from,frm); printf("\n%s %s",to,too); printf("\n%s %s",subj,sj);$} printf("\n%s",prom); post(&fr); if(fr.lnhead != NULL) $( dbl->lnhead = fr.lnhead; dbl->endln = fr.endln; $} j = lines(); if(j) $( t = malloc(MAXM); if(t != NULL) $( rptr = t; clearblk(rptr,M$}AXM); rptr[0] = cx; putsdata(rptr,cn,1,7); putsdata(rptr,too,21,25); putsdata(rptr,frm,46,25)$}; putsdata(rptr,sj,71,25); putsdata(rptr,mn,108,7); rptr[122] = ''; rptr[123] = '\0'; $} rptr[124] = '\0'; rov = dby->lnhead; n = 0; while(rov != NULL) $( k = strlen(rov$}->dat)+1; n+=k; if(rov->typ == 'Q') n+=3; rov = rov->next; $) k = n/128; $} if(n != 128*k) k++; n = k*128 -n; k++; ptr = yy; itoa(k,ptr); putsdata(rptr,yy,116,$}6); savep(n,rptr); free(t,MAXM); $) delmess(); $) $)$)tr); putsdata(rptr,yy,116,$[/*POSTX.C*/#include "GLOBALS.H";extern char *malloc();extern int columns;post(f)FILELX *f;$( FILELX frec; char buf(}[MAXL], *ptr, c; int i, j, k, sp, entline, esc; poke(82,0); poke(752,0); printf("\n"); frec.lnhead = NULL; ptr =(} buf; j = 0; esc = entline = 1; sp = -1; while(entline) $( k = j; while(((c=getkey()) != 155) && esc) $)}( if(c >=32 && c <=127) $( if(j == columns) $( if(sp >= 0) ptr[sp] = '\0';)} else ptr[j] = '\0'; if(addcon(ptr,&frec)) $( if(sp>=0) $( )} j = j-sp-1; for(i=0;ik) $( putchar(c); j--)}; $) break; case 32: $( sp = j; putchar(c); )} ptr[j++] = c; $) break; case 92: case 96: case 123: case 125: ; )} break; default: $( putchar(c); ptr[j++] = c; $) ) } break; $)/* end switch */ $)/* end else of if j=cols */ $)/* escape exits here */ if(c) } == 27) esc = 0; $)/* while c != 155 && esc */ entline = esc; if(entline) $( putchar('\n'); ptr[j) }] = '\0'; if(addcon(ptr,&frec)) j = 0; else entline = 0; $) $)/* while entline */ (*f).lnhead = f) }rec.lnhead; (*f).endln = frec.endln;$)addcon(curr,frc)char *curr;FILELX *frc;$( CONN *new; char *t, *rec; int bt) }s, n, slist; n = 0; rec = curr; bts = strlen(rec)+1; slist = sizeof(CONN); t = malloc(bts+slist); if(t != NULL))} $( move(rec,t,bts); new = (CONN *)(bts + (int)t); new->dat = t; new->typ = 'C'; new->next = NULL; )}if((*frc).lnhead == NULL) (*frc).lnhead = new; else (*frc).endln->next = new; (*frc).endln = new; n = 1; )}$) return(n);$) NULL) (*frc).lnhead = new; else (*frc).endln->next = new; (*frc).endln = new; n = 1; (/*POSTY.C*/#include "GLOBALS.H";#define SX struct savexSX $( int sib; char scx;$);extern FILELX *dbx, *dby, *dbz, *-}dbl;extern int getsdata();extern int setdrive();extern int free();extern int columns;extern int dodb();extern int docol-}();extern int postc();extern int tot;extern char d6[];char inn[4];char bline[] = "ѠQuit ӠSave ֠View ŠEdit àColumns"-};lines()$( char c; if(dbx->lnhead != NULL) dodb(1); else dodb(0); while(1) $( printf("\n%s\n",bline); -} printf("Bytes free: %d\n",tot); c = toupper(getkey()); switch(c) $( case 'Q': $( printf("\n-}Quit? y/n"); if(toupper(getkey()) == 'Y') $( delmess(); return 0; $) $) -} break; case 'C': docol(); break; default: $( if(dby->lnhead != NULL) $( -} switch(c) $( case 'S': return 1; break; case 'V': -} plines(); break; case 'E': postc(); break; default: ; br-}eak; $) $) $) break; $) $)$)plines()$( CONN *rov; char cx; int count, cnm, dd;-} poke(82,0); poke(752,1); count = 0; cnm = 1; rov = dby->lnhead; while(rov != NULL) $( cx = rov->typ; dd-} = strlen(rov->dat) +4; printf("\n%3d>",cnm); if(cx == 'Q') $( printf("%s",inn); dd+= 3; $) p-}rintf("%s",rov->dat); if(dd >= 2*columns) count+=3; else if(dd >= columns) count+=2; else count++; -} if(count >= 21) $( printf("\n>- More -<"); getkey(); count = 0; $) cnm++; rov = rov->next-}; $)$)delmess()$( CONN *rov, *holdr; char *d; int slist, i; if(dby->lnhead != NULL) $( slist = sizeof(CON- }N); rov = dby->lnhead; while(rov != NULL) $( holdr = rov; rov = rov->next; if(holdr->typ == 'Q'-!}) free(holdr,slist); else $( d = holdr->dat; i = strlen(d)+1; free(d,i+slist); -"} $) $) $) dbl->lnhead = NULL; dbx->lnhead = NULL; dby->lnhead = NULL; dbz->lnhead = NULL;$)putsdata(p,r,po-#}s,lim)char *p, *r;int pos, lim;$( int j; j = 0; while((j= 0;j--) cptr[k++] = ptr[j];$)char do0[]="Save post or reply";savep(n,r)int n;-(}char *r;$( SX sparm; CONN *rov; char f0[64], nn[7], cx, *ptr; int ib, j, k; printf("\n%s",do0); ptr = f0; *pt-)}r = '\0'; strcat(f0,db->BBSID); strcat(f0,".MSG"); ptr = f0; j = sutil(&sparm,ptr); if(j <= 0) return; else $(-*} ib = sparm.sib; cx = sparm.scx; if(cx == 'W') $( printf(ib,"%s",db->BBSID); k = strlen(db->BBSID-+}); for(j=0;jlnhead; while(rov != N-,}ULL) $( if(rov->typ == 'Q') bputs(inn,3,ib); ptr = rov->dat; k = strlen(ptr) +1; for(j=0;--}jnext; $) for(j=0;j0) $( close(ib); printf("\n\n%s %s",f0,do3); p-3}rintf("\n%s",do4); printf("\n%s",do5); printf("\n%s",do6); printf("\n%s",do7); cx = toupper(getkey()); sw-4}itch(cx) $( case 'E': return -1; break; case 'A': if((ib=copen(f0,'a'))<1) ac = 0; br-5}eak; case 'W': if((ib=copen(f0,'w'))<1) ac = 0; break; default: ; break; $) $) else $-6}( if((ib=copen(f0,'w'))<1) ac = 0; else cx = 'W'; $) if(ac == 0) printf("\n\n%s %s\n",do2,f0); else -7} $( (*sxp).sib = ib; (*sxp).scx = cx; $) return ac;$)) if(ac == 0) printf("\n\n%s %s\n",do2,f0); else ,C/*POSTZ.C*/#include "GLOBALS.H";extern int getstr();extern char *malloc();extern int free();extern int plines();extern19} int post();extern int tags();extern int tot;extern FILELX *dby;extern char prom[];char prom2[] = "xit nsert elete i1:}ew aglines";char prom4[] = "Insert before which line? -->";char prom5[] = "delete at which line? -->";char prom7[] = "Add1;} at end? y/[n]";postc()$( FILELX *f, fr; char c, cx[4], *r, ch; int d, d1, j, flag, s; printf("\nEdit\n"); s = s1<}izeof(FILELX); f = (FILELX *) malloc(s); if(f != NULL) $( while(1) $( printf("\n%s\n",prom2); print1=}f("Bytes free: %d\n",tot); c = toupper(getkey()); switch(c) $( case 'E': $( free(1>}f,s); return; $) break; case 'I': $( printf("\n%s",prom7); ch =1?} toupper(getkey()); if((ch == '\n') || (ch == 'N')) $( printf("\n%s",prom4); r = 1@}cx; getstr(r,3); d = val(cx); $) printf("\n%s",prom); post(&fr); 1A} if(fr.lnhead != NULL) $( f->lnhead = fr.lnhead; f->endln = fr.endln; if(ch 1B}== 'Y') addend(f); else $( if(dby->lnhead == NULL) addend(f); 1C} else addline(d,f); $) $) $) break; case 'D': $( flag = 11D}; while(flag) $( flag = 0; printf("\nBegin %s",prom5); r = cx; 1E} getstr(r,3); d = val(cx); printf("\nEnd %s",prom5); r = cx; getstr(r,3)1F}; d1 = val(cx); if(d > d1) $( printf("\nBegin <= End"); flag 1G}= 1; $) $) if(d == d1) deline(d); else for(j=d;j<=d1;j++) deline(d); 1H} $) break; case 'T': tags(); break; case 'V': plines(); brea1I}k; default: ; break; $) $) $)$)deline(n)int n;$( CONN *rov, *hr, *prev; char *d; int slist, fla1J}g, count, i; if(dby->lnhead != NULL) $( slist = sizeof(CONN); flag = 0; rov = dby->lnhead; if(n == 1) 1K} $( hr = dby->lnhead; dby->lnhead = rov->next; flag = 1; $) else $( count = 2; whi1L}le((rov != NULL) && !flag) $( hr = rov; rov = rov->next; if(n == count) $( hr1M}->next = rov->next; flag = 1; $) else count++; $) $) if(flag) $( if(rov->ty1N}p == 'Q') free(rov,slist); else $( d = rov->dat; i = strlen(d)+1; free(d,i+slist)1O}; $) if(hr->next == NULL) dby->endln = hr; $) $)$)addline(dd,ff)int dd;FILELX *ff;$( CONN *r1P}ov, *holdr; int flag, count; if(dby->lnhead != NULL) $( flag = 0; count = 2; rov = dby->lnhead; while(1Q}(rov != NULL) && !flag) $( if(dd == 1) $( dby->lnhead = ff->lnhead; ff->endln->next = rov; 1R} flag = 1; $) else if(dd == count) $( holdr = rov->next; rov->next = ff->lnhead; 1S} ff->endln->next = holdr; flag = 1; $) else rov = rov->next; count++; $) $) else $( 1T} dby->lnhead = ff->lnhead; dby->endln = ff->endln; $)$)addend(ff)FILELX *ff;$( if(dby->lnhead == NULL) dby->l1U}nhead = ff->lnhead; else dby->endln->next = ff->lnhead; dby->endln = ff->endln;$)( if(dby->lnhead == NULL) dby->l0W/*PROCESS.C*/#define MAXL 133#define SX struct savexSX $( int sib; char scx;$);extern int sutil();extern int getst5W}r();extern int columns;char zzz[] = ">- More -<";process(ib,pflag,rt,ii,cnt)int ib,pflag;char *rt;int ii, cnt;$( cha5X}r *hptr, *ptr, *rptr; char buff[MAXL], cc; int i, j, k, count, n, flag, r, m; int x, xx, sp, a; count = cnt; i = i5Y}i; rptr = rt; m=125; while((n = find(rptr,i,m)) >=0) rptr[n] = ' '; flag = r = 0; while((n=find(rptr,i,'')) >=5Z} 0) $( hptr = buff; m = n; rptr[n] = '\0'; j = strlen(rptr+r); move(rptr+r,hptr,j+1); if(j > column5[}s) $( a = x = 0; sp = -1; while(a <= j) $( if(x == columns) $( if(sp >=5\} 0) $( cc = hptr[sp+1]; hptr[sp] = '\0'; a = a-(columns-sp) +1; xx 5]}= sp+1; $) else $( cc = hptr[x]; hptr[x] = '\0'; xx = x; 5^} $) if(flag) $( printf(ib,"%s",hptr); flag = 0; $) els5_}e printf(ib,"\n%s",hptr); if((strlen(hptr) == columns) && !pflag) flag = 1; count++; 5`} hptr += xx; hptr[0] = cc; sp = -1; x = 0; if((count >= 22) && !pflag) $(5a} printf("\n%s",zzz); getkey(); count = 0; $) $) else $(5b} if(hptr[x] == ' ') sp = x; x++; a++; $) $) $) if(flag) $(5c} printf(ib,"%s",hptr); flag = 0; $) else printf(ib,"\n%s",hptr); if((strlen(hptr) == columns) && !pfl5d}ag) flag = 1; count++; if((count >= 22) && !pflag) $( if(flag) flag = 0; else printf("\n"); 5e} printf("%s",zzz); getkey(); count = 0; $) r += j; r++; $) if(pflag) printf(ib,"\n"); rptr[m+5f}1] = '\n';$)char bprt[] = "Print to rinter, isk, bort\nSelect: ";char bprs[] = "Input filename\n--> ";browsep(sptr)ch5g}ar *sptr;$( SX sxp; char cx, f0[64]; int ib, j; printf("\n%s",bprt); cx = toupper(getkey()); if(cx == 'A') retu5q}B%DOS SYSB*)DUP SYSBSALLOC C B'cBROWSE C BCONTROL C BGLOBALS H B MAIN C BMAIN H BMESSAGESC BPOSTAD C BPOSTX C B'POSTY C B8POSTZ C BVPROCESS C BtQWK8_ LNKBvSAVE C BUTFL C B UTFX C B"ZPOST C rn 0; else if(cx == 'P') $( strcpy(sptr,"P:"); if((ib = copen(sptr,'w'))<1) return 0; else return ib; 5r} $) else $( printf("\n%s",bprs); sptr = f0; getstr(sptr,63); j = sutil(&sxp,sptr); if(j <= 0) return 5s}0; else return sxp.sib; $)$)rs); sptr = f0; getstr(sptr,63); j = sutil(&sxp,sptr); if(j <= 0) return 4$D1:MAIND1:ALLOCD1:UTFLD1:CONTROLD1:MESSAGESD1:SAVED1:UTFXD1:BROWSED1:PROCESSD1:POSTADD1:POSTXD1:POSTYD1:POSTZD1:9u}ZPOSTD1:ACECIOD1:ENGINE.OBJNTROLD1:MESSAGESD1:SAVED1:UTFXD1:BROWSED1:PROCESSD1:POSTADD1:POSTXD1:POSTYD1:POSTZD1:8/*SAVE.C*/#include "GLOBALS.H";#define FILEMX struct tempptrextern FILEMX $( DISK *headm, *endm;$);extern int getdriv=w}e();extern int addmes();extern char msg3[], pr0[];char index[] = "QWK8.DAT";save()$( DISK *r; CONF *rr; char f0[64=x}]; int ib, count; strcpy(f0,index); ib = getdrive(f0,'w'); if(ib>0) $( count = 0; r = db->mhead; while=y}(r != NULL) $( count++; r = r->dnext; $) printf("\nSaving to %s\n",f0); r = db->mhead; printf=z}(ib,"%d\n",count); while(r != NULL) $( printf(ib,"%d\n",r->sector); printf(ib,"%c",r->byte); printf={}(ib,"%d\n",r->confn); printf(ib,"%c",r->pers); printf(ib,"%d\n",r->mesn); r = r->dnext; $) rr = db-=|}>lhead; printf(ib,"%d\n",db->numc); while(rr != NULL) $( printf(ib,"%d\n",rr->npers); printf(ib,"%d\n=}}",rr->nmes); printf(ib,"%d\n",rr->hi); printf(ib,"%d\n",rr->lo); rr = rr->cnext; $) close(ib); =~}printf("\n%s\n",msg3); getkey(); $)$)read()$( FILEMX fr; char f0[64]; int ib; strcpy(f0,index); ib = getd=}rive(f0,'r'); if(ib>0) $( printf("\n%s%s\n",pr0,f0); readi(ib,&fr); close(ib); if(fr.headm != NULL) =} db->mhead = fr.headm; printf("\n%s\n",msg3); getkey(); $)$)/*function readi()*/readi(iocb,f)int iocb;FILEMX =}*f;$( FILEMX frec; DISK rec; CONF *rov; char w[12], *p; int j, k; int count; frec.headm = NULL; p = w; cg=}ets(p,iocb); count = val(p); for(j=0;jlhead; c=}gets(p,iocb); count = val(p); for(j=0;jnpers = val(p); cgets(p,iocb); =} rov->nmes = val(p); cgets(p,iocb); rov->hi = val(p); cgets(p,iocb); rov->lo = val(p); rov = rov->cnext;=} $)$)es = val(p); cgets(p,iocb); rov->hi = val(p); cgets(p,iocb); rov->lo = val(p); rov = rov->cnext;< /*UTFL.C*/#include "GLOBALS.H";extern char msg1[], msg2[];char d6[] = "Which drive#? = D1:";dodir()$( int ib;A} char ff[64],cx; printf("\n%s",d6); if((cx = getkey()) == '\n') cx = '1'; strcpy(ff,"*.*"); setdrive(ff,cx); A} printf("\n%s\n",ff); closeall(); if((ib=copen(ff,'d'))<1) printf("\nCan't open %s\n",ff); else $( while(cgetA}s(ff,ib)>0) cputs(ff,0); close(ib); $) printf("\n%s",msg1); getkey();$)char d2[] = "Abort ҠRetry";int A}getdrive(ff0,c)char *ff0, c;$( char cx, f0[64]; int flag,ib; strcpy(f0,ff0); printf("\n%s\n",d6); if((cx = getkeA}y()) == '\n') cx = '1'; setdrive(f0,cx); strcpy(ff0,f0); flag = 1; while(flag) $( closeall(); if((ib=coA}pen(f0,c))<1) $( printf("\nCan't open %s\n",f0); printf("\n%s\n",d2); cx = toupper(getkey()); swiA}tch(cx) $( case 'A': flag = 0; break; case 'R': default: ; break; $) $) A} else flag = 0; $) return(ib);$)setdrive(fname,drivenum)char *fname;char drivenum;$( bump(fname,3,0); fname[0] =A} 'D'; fname[1] = drivenum; fname[2] = ':';$)bump(string,n,ptr)char *string;int n, ptr;$( if(string[ptr] != '\0' &&A} string[ptr] != '\n') bump(string,n,ptr+1); string[ptr+n]=string[ptr];$)nexists(rx)int rx;$( CONF *rov; int flaA}g; flag = 0; rov = db->lhead; while((rov != NULL) && !flag) $( if(rx == rov->cnum) flag = 1; else rov A}= rov->cnext; $) return(flag);$)getcnam(rx)int rx;$( CONF *rov; int flag; flag = 1; rov = db->lhead; whileA}((rov != NULL) && flag) $( if(rx == rov->cnum) flag = 0; else rov = rov->cnext; $) return(rov);$)A}getsdata(r,p,pos,lim)char *r, *p;int pos, lim;$( int j; for(j=0;j hi)) $( printf("\n%s %d to %A}d\n%s",y3,lo,hi,msg2); cn = -1; getkey(); $) return cn;$)getstr(r,lim)char *r;int lim;$( char c; int j, A}k; j = k = 0; while(((c=getkey()) != 155) && (j < lim)) $( if(c >= 32 && c <= 127) $( switch(c) $(A} case 126: if(j>k) $( putchar(c); j--; $) break; case 92:A} case 96: case 123: case 125: ; break; default: $( putchar(c); r[j++] =A} c; $) break; $) $) $) putchar('\n'); r[j] = '\0';$) putchar(c); r[j++] =@V/*UTFX.C*/#include "GLOBALS.H";extern int pconf();extern int getconfn();extern int getstr();extern int setdrive();exteE}rn int getdrive();extern char msg2[],msg3[];extern char mes0[],mes9[];extern int columns;extern char d6[];char mms1[] = E}" Read ll ersonal astread onference";char mms2[] = " uit iew Conf.data et Screen width";char p01[] = "Quit to DOSE}? y/[n]";menud(ret,rover)DISK *ret, *rover;$( DISK rr, rov; char f[64], cy, cx; int cn; while(1) $( *ret = E}rr = *rover = NULL; poke(82,0); poke(752,1); printf("\f%s",mes0); report(); printf("\n\n%s",mms1); prE}intf("\n%s",mms2); printf("\n\n%s",mes9); cy = toupper(getkey()); switch(cy) $( case 'Q': $( E} printf("\n\n%s",p01); cx = toupper(getkey()); if(cx == 'Y') exit(); return -1; $)E} break; case 'V': pconf(); break; case 'S': docol(); break; case 'A': E} $( *ret = -1; return 1; $) break; case 'P': $( *ret = 1; return 1;E} $) break; case 'L': $( rr = loadptr(&rov); if(rr) $( *rover = rov;E} *ret = -1; return 1; $) $) break; case 'C': $( cn = getconfn();E} if(cn >= 0) $( *ret = 0; return cn; $) $) break; default: ; breE}ak; $) $)$)char p08[] = "Screen width is: ";char p09[] = "Input desired width\n-->";char p88[] = " = No E}change";docol()$( char buf[8], *ptr; int d; d = columns; printf("\n%s%d",p08,d); printf("\n%s",p88); printf("\E}n%s",p09); ptr = buf; getstr(ptr,7); d = val(ptr); if(ptr[0] == '\0') d = columns; else if((d >= MAXL) || (d < 40))E} $( d = columns; printf("\nOut of range"); printf("\n <40 to 132>"); $) columns = d;$)char mptrx[] = "LASE}TREAD.PTR";loadptr(rec)DISK *rec;$( DISK *rc; char w[12], *p, f0[64]; int ib, mm, cc, flag; flag = 0; strcpy(f0E},mptrx); ib = getdrive(f0,'r'); if(ib>0) $( flag = 1; printf("\nReading %s\n",f0); p = w; cgets(p,ib);E} cgets(p,ib); mm = val(p); cgets(p,ib); close(ib); cc = val(p); rc = getmes(mm,cc); *rec = rc; $E}) else *rec = NULL; return flag;$)saveptr(mm,cc)int mm, cc;$( DISK *r; CONF *rr; char f0[64], cx; int ib, couE}nt; strcpy(f0,mptrx); printf("\n%s",d6); if((cx=getkey()) == '\n') cx = '1'; setdrive(f0,cx); if((ib=copen(f0,E}'w'))<1) $( printf("\nCan't open %s",f0); printf("\n%s\n",msg2); getkey(); return; $) else $( priE}ntf(ib,"%d\n",mm); printf(ib,"%d\n",mm); printf(ib,"%d\n",cc); close(ib); printf("\n%s\n",msg3); getkey()E}; $)$)getmes(mnum,cnm)int mnum,cnm;$( DISK *r; int flag; r = db->mhead; if((mnum >= 0) && (cnm >= 0)) $( E} flag = 0; while((r != NULL) && !flag) if((mnum == r->mesn) && (cnm == r->confn)) flag = 1; else r = E}r->dnext; $) return r;$)char ppx[] = " Summary of index to MESSAGES.DAT";char ppy[] = "Confn# #msgs Msg#: low tE}o high";report()$( CONF *rvr; int tcount, tpcount, count; printf("%s",ppx); printf("\n%s\n",ppy); count = tcountE} = tpcount = 0; count = 4; rvr = db->lhead; while(rvr != NULL) $( tcount += rvr->nmes; tpcount += rvr->npers;E} if(rvr->nmes > 0) $( printf("\n"); if(rvr->npers > 0) printf("+"); else printf(" "); printf(E}" #%-3d %3d message(s) %6d to %-6d", rvr->cnum, rvr->nmes, rvr->lo, rvr->hi); count++; $) if(count >= 22) $E}( printf("\n>- More -<"); getkey(); printf("\f%s",mes0); printf("%s",ppx); printf("\n%s\n",ppy)E}; count = 4; $) rvr = rvr->cnext; $) printf("\n\nTotal:%3d message(s) %3d personal(+)",tcount,tpcount);$)D}/*ZPOST.C*/#include "GLOBALS.H";#define SX struct savexSX $( int sib; char scx;$);extern int dodir();extern int suI}til();extern int getstr();extern int addend();extern int addcon();extern char *malloc();extern int setdrive();extern inI}t getsdata();extern FILELX *dbx,*dbl,*dby,*dbz;extern char inn[4];extern int tot;extern char d6[], msg3[], pr0[];dohead(I}tt,fbuf)char *tt, *fbuf;$( FILELX frec; char ty, *rptr, bf[MAXL], *ptr, *p; char frm[26], dt[9], tm[6], *tq; int j,I} k; ptr = fbuf; rptr = frm; getsdata(rptr,ptr,46,25); p = frm; j = strlen(p); tq = inn; tq[0] = p[0]; k = 0;I} while((*p != ' ') && klnhead = frec.lnhead; dbz->eI}ndln = frec.endln; rptr = tt; k = 0; ty = 'Q'; frec.lnhead = NULL; while(find(rptr+k,1,'\n') < 0) $( if(lisI}t(ty,rptr+k,&frec)) $( j++; k += (strlen(rptr+k) +1); $) $) dbx->lnhead = frec.lnhead; dbx->endln I}= frec.endln; return j;$)list(tp,curr,frc)char tp,*curr;FILELX *frc;$( CONN *new; char *t, *rec; int n, slist;I} n = 0; rec = curr; slist = sizeof(CONN); t = malloc(slist); if(t != NULL) $( new = (CONN *) t; new->dat I}= rec; new->typ = tp; new->next = NULL; if((*frc).lnhead == NULL) (*frc).lnhead = new; else (*frc).endI}ln->next = new; (*frc).endln = new; n = 1; $) return(n);$)dodb(parm)int parm;$( if(parm) $( dby->lnheI}ad = dbz->lnhead; dbz->endln->next = dbx->lnhead; dbx->endln->next = dbl->lnhead; dby->endln = dbl->endln; $)I} else $( dby->lnhead = dbl->lnhead; dby->endln = dbl->endln; $)$)char tprt[] = "oad taglines (or any textfilI}e)";char sprs[] = "ave editor contents";char dprs[] = "os directory\nuit\n\nSelect: ";char tprs[] = "Input filename\n--I}> ";tags()$( SX sprm; CONN *rov; char cx, cy, f0[64], *ptr, w[MAXL]; int ib, j; while(1) $( printf("\n\n%sI}",tprt); printf("\n%s",sprs); printf("\n%s",dprs); cx = toupper(getkey()); if(cx == 'Q') return; else if(I}cx == 'D') dodir(); else $( printf("\n%s",tprs); ptr = f0; getstr(ptr,63); if(ptr[2] != ':')I} $( printf("\n%s",d6); if((cy=getkey()) == '\n') cy = '1'; setdrive(f0,cy); $) I} if(cx == 'L') $( ib=copen(f0,'r'); if(ib>0) $( ptr = w; j = bgets(ptr,I}MAXL,ib); j = find(ptr,MAXL,'\n'); if(j < 0) printf("\n\nNeed Atascii file\n\n"); eI}lse $( close(ib); ib=copen(f0,'r'); printf("\n%s%s\n",pr0,f0); readI}t(ib); $) $) $) else $( j = sutil(&sprm,f0); if(j <= 0) return; eI}lse $( ib = sprm.sib; printf("\nSaving %s\n",f0); rov = dby->lnhead; while(roI}v != NULL) $( printf(ib,"\n%s",rov->dat); rov = rov->next; $) printf(ibI},"\n"); $) $) close(ib); printf("\n%s\n",msg3); getkey(); $) $)$)readt(iocb)int iocbI};$( FILELX *f, ff; char w[2*MAXL], *p; int m, flag; ff.lnhead = NULL; flag = 1; p = w; while(((m = cgets(p,ioI}cb)) >= 0) && flag) $( if(m >= tot) flag = 0; else $( if(m >= MAXL-1) $( printf("\n\nLine tI}runcatedn\n"); p[MAXL-1] = '\0'; $) else p[m] = '\0'; if(addcon(p,&ff)) ; else flag =I} 0; $) $) f->lnhead = ff.lnhead; f->endln = ff.endln; addend(f);$)if(addcon(p,&ff)) ; else flag =HP