(  $0800  $0800 ; ; TELE-CAT // V2.0 SOURCE CODE ; WRITTEN BY THE ELECTRON & ; THE SURGEON.THIS SOURCE CODE ; IS COMMENTED BUT NOT IN TOO ; MUCH DETAIL. ; ; IN WRITING THIS SOURCE FILE, ; WE USED LISA V2.5. ; ; NOTE: THIS PARTICULAR SOURCE ; CODE WAS WRITTEN FOR THE ; APPLE CAT II MODEM. ; ; ALSO: THIS VERSION IS WRITTEN ; FOR THE 212 CARD. IF YOU DO !; NOT HAVE ONE, DO NOT MAKE MOD- ; IFICATIONS TO THIS VERSION. ; WRAPBUF $0300 TYPBUF $0329 COUT $FDED GETEXT $FD0C BEEP $FF3A WAIT $FCA8 BAUD $04 FILTBYT $07 FILTCHAR $09 SLOT $FA CHATS $FB MACSTAT $FC TREADER INPUT ALTINP ERROR RINGWAIT SENDCAR CARY HANGUP WRAP? 01 CARST 00 CHAR 00 FAST? 00 ABORT? 00 ONOFF 00 MAX 26 SKIPBUF 00 ; ; CURSOR CHARACTERS: ; CURS 0C  DC  "!"  "/"  "("  "*"  ")"  "#"  "+"  "#"  "<"  "!"  ">" TEMPA 00 TEMPX 00 TEMPY 00 TEMPA2 00 TEMPX2 00 TEMPY2 00 TEMPA3 00 TEMPX3 00 TEMPY3 00 DELAY 00 TEMPSTO 00 TABS 00 TBUF 00 CUWRAP 00 CUSO 00 TX 00 READCHAR 00 ; "; AWAIT FOR A RING FROM THE MODEM ; RINGWAITSLOT HANGUP START ; ; HANGUP PHONE ; HANGUP SLOT  #$04 $C080,Y #$81 $C081,Y #$00 $C082,Y #$06 $C083,Y #$64 $C089,Y #$07 $C08A,Y #$22 $C08B,Y #$05 $C08C,Y #$1F $C08D,Y #$00 $C08E,Y $C08F,Y CARST #$08 $0427 #$02 BAUD  START #$00 CARST #$3F $0427 NORING $C08D,Y #%00000001 RING $C000 ENDROUT NORING ENDROUT ; ; RING RECEIVED; AWAIT CARRIER ; SENDCAR HANGUP RING #$12 $0427  SLOT #$02 $C082,Y #$81 $C081,Y #$80 WAIT #$01 $C081,Y #!40 CARWAIT #$38 WAIT $C080,Y #%00100000 CARY $C08D,Y #%00000100 CARY #!195 DELAY #!5 CARDELAY  CARWAIT RINGWAIT CARY #$80 WAIT SLOT $C08D,Y #%00000100 CON103 #$05 $C080,Y #$01 $C081,Y #$00 $C08B,Y #$0A $C08F,Y #!12 BAUD CARY1 CON103 #$04 $C080,Y #$81 $C081,Y #$22 $C08B,Y #$10 $C08D,Y #!03 BAUD CARY1 #$FF CARST #$00 TYPBUF $C010 #CONNECT $36 /CONNECT $37 $03EA ; '; MODEM ROUTINE TO SEND INFORMATION TO ; THE OTHER COMPUTER. ; CONNECT TEMPY2 SLOT #$8D B2 CC300 #$8D OVERMDM #$70 WAIT #$8A OVERMDM #$8D ENDMDM B2 OVERMDM ENDMDM TEMPY2 BUFFER $FDF0 OVERMDM OVERMDM1$C08F,Y #%00010000 OVERMDM1  $C08E,Y  CARDELAY$1C $1D  WAITING DELAY WAIT  WAITING $1C $1D  ; "; ROUTINE TO CHECK FOR CHARACTERS $; FROM MODEM OR KEYBOARD TO GO INTO ; TYPEAHEAD BUFFER. ; BUFFER TEMPA3 TEMPX3 TEMPY3 SKIPBUF NOBUF CHKEY NOBUF TYPBUF (#!64 ALLREADY 64 KEYS IN THE BUFFER? )NOBUF IF SO; DONT STORE KEY IN BUFFER TEMPSTO TYPBUF TYPBUF TYPBUF,X NOBUF TEMPA3 TEMPX3 TEMPY3  !CNOW 00 CURRENT VID WIDTH. TIME1 00 TIME2 00 TIME3 00 ; &; CHECK IF CARRIER IS PRESENT; IF NOT %; GIVE A FEW SECONDS TO RECOVER CAR- ; RIER THEN HANG UP OR RETURN. ; CARRIER SLOT #$00 CARROK $C080,Y #%00100000 CARROK $C08D,Y #%00000100 CARROK #!40 WAITCARR#$38 WAIT $C080,Y #%00100000 CARROK $C08D,Y #%00000100 CARROK #!90 DELAY #!5 CARDELAY  WAITCARR HANGUP RETURN CARROK #$FF CARST RETINP ; %; ALTERNATE 'INPUT' ROUTINE USED FOR &; AUTO-MESSAGE, ETC.. THIS IS SIMILAR #; TO AN INPUT ROUTINE, BUT ACCEPTS ; COMMAS, QUOTES, AND COLONS.. ; ALTINP #$00 $FD6F #$02  ($69),Y  #$00 ($69),Y  #$02 ($69),Y #$00 #$FF #$01  ; ; ERROR ROUTINE CONSTANTLY ; USED BY THE BOARD ; ERROR   $DF      ; %; CONVERT TO UPPER CASE IF NECESSARY ; CONVERT #$FF NOWCONV #$88 NOWCONV #$7F #$60 NONLOWER FILTBYT NONLOWER CARDET SLOT #$00 NOSLOT $C080,Y #%00100000 NOSLOT $C08D,Y #%00000100 NOSLOT NODET NOSLOT #$FF  ; ; ANIMATE CURSOR ROUTINE ; SPIN TEMPA TEMPY ONOFF ENDIT CUSO CUSO CURS,Y COUT #$88 COUT FAST? NORUBOUT #$A0 COUT #$88 COUT NORUBOUTCURS ENDIT #$00 CUSO ENDIT TEMPA TEMPY  ; ; TEXT FILE READER ROUTINE ; USED TO READ MESSAGES, ; MAIL, ETC.. ; TREADER CHKEY CONTREAD #$00 CONCHK #$80 CONCHK #$A0 SPACEBAR ABORT ABORT #$8E CTRL-N NEXT MESSAGE ABORT #$93 CTRL-S PAUSE CONTREAD PAUSE CHKEY CONTREAD CARDET ABORT SPIN PAUSE CONTREADCARDET ABORT GETEXT #$80 COUT TREADER ABORT $05  ; ; INPUT ROUTINE.. ; INPUT #$00 MACSTAT CNOW CHATS CUSO GETKEY WRAPBUF GETAKEY KEEPWRAP GETAKEY TABS NOTAB KEEPTAB NOTAB $24 #$DF ($28),Y #$00 TIME1 TIME2 TIME3 KEY CHBUF KEYHIT CARRIER ; $; CHECK FOR ANIMATED CURSOR & CHECK "; IF NO INPUT FROM MODEM HAS BEEN !; RECEIVED. (NO KEYS PRESSED FOR ; A GIVEN AMOUNT OF TIME..) ; RETINP SPIN TIME1 TIME1 #$FF KEY #$00 TIME1 TIME2 TIME2 #$FF KEY #$00 TIME2 TIME3 TIME3 #!07 WARNING #$87 COUT KEY WARNING #!14 KEY #$A0 MACSTAT #$00 CNOW RETURN KEYHIT TEMPSTO CLR CONVERT ; ; CTRL-B CHAT ENTERANCE ; NOTLOWER#$02 CONT2 $C000 #$02 NOCHAT #$01 CHATS RETURN NOCHAT GETKEY ; ; CTRL-F CHAT EXIT ; CONT2 #$06 CONT3 $C000 #$06 NOCHAT #$02 CHATS RETURN ; ; BACKSPACE (<-) KEY ; CONT3 #$00 CHATS #$08 BACKSP #$7F CONT4 BACKSP CNOW JMGK CNOW #$88 COUT FASTBACK GETKEY ; ; ; CONT4 #$0D CONT5 RETURN #$00 FILTCHAR CHAR CNOW RETURN! NOFILL RETURN! CNOW NOFILL VI$,Y #' ' NOMORE CNOW MACSTAT RETURN! #$88 COUT RETURN! ; ; STORE LINE INTO A VARIABLE. ; NOMORE CNOW #$02 CNOW  #$01 ($69),Y  #VI$+1 ($69),Y  /VI$ ($69),Y  ; "; CTRL-G; ANIMATED CURSOR TOGGLE. ; CONT5 #$07 CONTBE6 ONOFF TURNOFF #$01 CURSORSTONOFF JMGK GETKEY TURNOFF #$00 CURSORST ; ; CTRL-W; ERASE LAST WORD ; CONTBE6 #$17 CONT6 CNOW #$00 ENDBKWRD CTRLW CNOW #$00 ENDBKWRD VI$,Y #' ' ENDBK CNOW #$88 COUT FASTBACK CTRLW ENDBKWRDGETKEY ENDBK BACKSP ; ; CTRL-I; TAB 4 SPACES ; CONT6 #$09 CONTAF6 #$04 TABS GETAKEY ; ; CTRL-X; ERASE LINE ; CONTAF6 #$18 CONT7 CNOW #$00 ENDBKWRD CTRLX CNOW #$00 ENDBKWRD CNOW #$88 COUT FASTBACK CTRLX ; ; FORBIDDEN ASCII CHARACTERS. ; CONT7 #$0B CONT8 #$5B CONT8 #$0C CONT9 #$5C CONT9 #$0F MACROS? #$5F ; ; MACROS ; MACROS? TEMPSTO CNOW CENTER TEMPSTO #$05 MACRO2 #$E0 MACSTAT RETURN MACRO2 #$12 MACRO3 #$E1 MACSTAT RETURN MACRO3 #$14 CENTER #$E2 MACSTAT RETURN ; ; CTRL-V; AUTO-CENTER LINE ; CENTER FILTCHAR NOMAC TEMPSTO #$16 REPEAT CNOW NOCENT #$E3 MACSTAT CNOW ERASEWRD#$00 ENDCENT  #$88 COUT FASTBACK ERASEWRD ENDCENT RETURN ; ; CTRL-Y; REPEAT ACROSS LINE ; REPEAT #$19 NOMAC CNOW NOCENT #!15 MACSTAT CNOW ERASEWRD NOCENT TEMPSTO NOMAC FILTCHAR CONT11 TEMPSTO #$0E C1 #$88 TEMPSTO ; ; CTRL-J; DOWNSPACE ; C1 #$0A C2 #$8A TEMPSTO ; ; CTRL-D; SLOWSPACE ; C2 #$04 CONT11 #$80 TEMPSTO ; $; CHECK FOR COMMA, QUOTE, OR COLON. ; CONT11 FILTCHAR CONT12 TEMPSTO #$22 FILTER #$2C FILTER #$3A FILTER CONT12 FILTER GETKEY JMNOEND NOEND WRAPJMP NOWRAP CONT12 TEMPSTO MAX CNOW JMNOEND ; #; # OF MAXIMUM CHARACTERS HAS BEEN ; SURPASSED. ; %; WE EITHER BEEP THE SPEAKER OR DO A ; WORD-WRAP HERE. ; TEMPSTO WRAP? WRAPJMP FILTCHAR NOWRAP TABS NOTABS #$00 TABS NOTABS CNOW CHSPCE VI$,X #' ' FOUNDSPA #$00 NOWRAP #$01 NOWRAP  CHSPCE FOUNDSPA TEMPX TEMPSTO #' ' WRAPEND CNOW CNOW VI$,X #$00 WRAPBUF CNOW ; ; WORD-WRAP ROUTINE ; WRAPPINGVI$,X TEMPX CONTWRAP  #$88 COUT FASTBACK WRAPPING CONTWRAPTEMPX TEMPX2 #$01 CONWRAP TEMPX VI$,X WRAPBUF WRAPBUF,Y  MAX ENDWRAP  TEMPX  CONWRAP ENDWRAP TEMPX2  CNOW WRAPEND RETURN ; ; BEEP SPEAKER ; NOWRAP TEMPSTO BEEP TEMPSTO GETKEY NOEND #' ' JMPGK CNOW CNOW VI$,Y #$80 TEMPSTO CHAR PRINTIT COUT PREJMP PRINTIT TEMPSTO COUT ; $; CHECK IF ONE-KEY INPUT IS ACTIVE. ; PREJMP $08 JMPGK RETURN JMPGK GETKEY ; %; RECALL BUFFER INTO MEMORY ROUTINE. ; CHBUF #$00 WRAPBUF TYPBUF CKEY TBUF CKEY TBUF TBUF TYPBUF,X  CKEY #$00 TYPBUF TBUF ; #; CHECK FOR KEY BY EITHER MODEM OR ; KEYBOARD. ; CHKEY $C000 YESKEY ABORT? #$01 NOKEY SLOT #$00 NOKEY $C08F,Y #%00001000 NOKEY ; ; READ KEY FROM MODEM & CLEAR ; REPEATING. IF YOU WERE HAVING ; PROBLEMS WITH THE 212 CARD'S ; INPUTTING FROM MODEM (AND ; REPEATING ENDLESSLY) THE ; FOLLOWING LINES ARE THERE FOR ; YOUR USE. (ALTHOUGH IT TOOK ; ABOUT 4 DAYS TO FIND..) ; BAUD #$03 C300 #$18 CLEARKEY C300 #$10 CLEARKEY$C08D,Y $C08B,Y ALLOK #$01 YESKEY TEMPSTO $C010 TEMPSTO  NOKEY #$00 #$00  CLR TEMPA TEMPY $24 #$A0 ($28),Y TEMPA TEMPY  ; ; FAST BACKSPACING ROUTINE. ; FASTBACKFAST? ENDFAST #$A0 COUT #$88 COUT ENDFAST CLR  ; "; RECALL WRAPPED WORD(S) FROM THE ; LAST LINE. ; KEEPWRAPWRAPBUF STOPWRAP CUWRAP STOPWRAP CUWRAP CUWRAP WRAPBUF,X KEYHIT STOPWRAP#$00 WRAPBUF CUWRAP GETAKEY KEEPTAB TABS #' ' KEYHIT ; %; PLACE WHERE THE APPLESOFT VARIABLE ; IS STORED.. ; VI$ 00  ; VI$ 00  L