With the permission of Mr. Kakinoki, here are the source codes for a communication program for a Macintosh.
The following are the source codes for communication programming for a Macintosh. You can use the codes in your program, but it is your responsibility to make your own communication routines. I cannot guarantee that the codes are free of bugs.
#include <Serial.h> byte com_speed = 1, com_bit = 1, com_parity, com_x, com_stop; short RsPort; // 0:Modem, 1:Printer static short in, out; static short com_speeds[5] = {baud300, baud1200, baud2400, baud4800, baud9600}; static short com_bits[2] = {data7, data8}; static short com_paritys[3] = {noParity, oddParity, evenParity}; static short com_stops[3] = {stop10, stop15, stop20}; /*============================== return 0: OK -1: error ==============================*/ int openRS(void) { SerShk shk; OSErr err; short conf = com_speeds[com_speed] + com_stops[com_stop] + com_paritys[com_parity] + com_bits[com_bit]; shk.fXOn = 0; shk.fCTS = 1; shk.xOn = 0x13; shk.xOff = 0x11; shk.errs = parityErr + hwOverrunErr + framingErr; shk.evts = ctsEvent; shk.fInX = 0; if (RsPort) // printer port / KEYSPAN USB-SERIAL ADAPTER { err = OpenDriver("\p.BIn", &in); if (err != noErr) return -1; err = OpenDriver("\p.BOut", &out); } else // modem port { err = OpenDriver("\p.AIn", &in); if (err != noErr) return -1; err = OpenDriver("\p.AOut", &out); } if (err != noErr) return -1; err = SerReset(in, conf); if (err != noErr) return -1; err = SerReset(out, conf); if (err != noErr) return -1; err = SerHShake(in, &shk); if (err != noErr) return -1; err = SerHShake(out, &shk); if (err != noErr) return -1; return 0; } void closeRS(void) { CloseDriver(in); CloseDriver(out); } /*====================== readRS read 1byte return N: OK -1: error -2: break ======================*/ static short readRS(long *len, char *buf) { SerStaRec st; short err, ref; SerStatus(in, &st); if (st.cumErrs) { *len = 0L; return -1; } for (;;) { if ((err = SerGetBuf(in, len)) != noErr) return -1; if (*len) { FSRead(in, len, buf); return *len; } if (break_check()) // operator's break function return -2; } return 0; } /*====================== return 0: OK != 0: error ======================*/ static short writeRS(long *len, char *buf) { SerStaRec st; short err; SerStatus(out, &st); if (st.cumErrs || st.wrPend || st.ctsHold) return -1; return FSWrite(out, len, buf); } /*============*/ /*====================== return 0: OK != 0: error ======================*/ static int puts_rs(char *s) { int r; long len; len = strlen(s); r = writeRS(&len, s); return r; } /*====================== return >0: char -1: error -2: break ======================*/ static int get_rs(void) { long len = 1; char buf[256]; int r; r = readRS(&len, buf); if (r < 0) return r; else return buf[0]; }