Annotation of coherent/e/bin/ckermit/ckcmai.c, revision 1.1

1.1     ! root        1: #ifndef MAC
        !             2: char *versio = "C-Kermit 5A(188), 23 Nov 92"; /* Version herald. */
        !             3: #else
        !             4: /*
        !             5:   For Macintosh, also remember to change the Mac-specific version in ckmkr2.r.
        !             6: */
        !             7: char *versio = "Mac Kermit 0.99(188) Pre-ALPHA, 23 Nov 92";
        !             8: #endif /* MAC */
        !             9: long vernum = 501188L;
        !            10: /*
        !            11:   String and numeric version numbers, keep these three in sync!
        !            12:   First digit of vermum = major version, i.e. 5.
        !            13:   Second 2 digits of vernum: 00 = no minor version, 01 = A, 02 = B, etc.
        !            14:   Last three digits are edit number. 
        !            15: */
        !            16: #ifndef VERWHO
        !            17: /* Change verwho in following line, or with -DVERWHO=x in makefile CFLAGS. */
        !            18: #define VERWHO 0
        !            19: #endif /* VERWHO */
        !            20: int verwho = VERWHO; /* Who produced this version, 0 = Columbia University */
        !            21: /*
        !            22:   IMPORTANT: If you are working on your own private version of C-Kermit, please
        !            23:   include some special notation, like your site name or your initials, in the
        !            24:   "versio" string, e.g. "5A(182)-XXX", and use a nonzero code for the "verwho"
        !            25:   variable (e.g. in the USA use your zip code).  Unless we stick to this
        !            26:   discipline, divergent copies of C-Kermit will begin to appear that are
        !            27:   intistinguishable from each other, which is a big support issue.  Also, if
        !            28:   you have edited C-Kermit and made copies available to others, please add
        !            29:   appropriate text to the BUG command (ckuus6.c, function dobug()).
        !            30: */
        !            31: #define CKCMAI
        !            32: 
        !            33: /*  C K C M A I  --  C-Kermit Main program  */
        !            34: 
        !            35: /*
        !            36:   Author: Frank da Cruz ([email protected], [email protected]),
        !            37:   Columbia University Center for Computing Activities.
        !            38: 
        !            39:   COPYRIGHT NOTICE:
        !            40: 
        !            41:   Copyright (C) 1985, 1992, Trustees of Columbia University in the City of New
        !            42:   York.  Permission is granted to any individual or institution to use this
        !            43:   software as long as it is not sold for profit.  This copyright notice must be
        !            44:   retained.  This software may not be included in commercial products without
        !            45:   written permission of Columbia University.
        !            46: 
        !            47:   DOCUMENTATION:
        !            48: 
        !            49:   "Using C-Kermit" by Frank da Cruz and Christine M. Gianone,
        !            50:   Digital Press, Burlington, MA, USA.  Publication date: Winter 1992.
        !            51:   Order Number: EY-J896E-DP
        !            52:   Digital Press ISBN: 1-55558-108-0
        !            53:   Prentice Hall ISBN: 0-13-037490-3
        !            54: 
        !            55:   DISCLAIMER:
        !            56: 
        !            57:   The C-Kermit software is provided in source code form by Kermit Development
        !            58:   and Distribution, Columbia University.  The software is provided "as is;" no
        !            59:   other warranty is provided, express or implied, including without
        !            60:   limitations, any implied warranty of merchantability or implied warranty of
        !            61:   fitness for a particular purpose.
        !            62: 
        !            63:   Neither Columbia University nor any of the contributors to the C-Kermit
        !            64:   development effort, including, but not limited to, AT&T, Digital Equipment
        !            65:   Corporation, Data General Corporation, or International Business Machines
        !            66:   Corporation, warrant C-Kermit software or documentation in any way.  In
        !            67:   addition, neither the authors of any Kermit programs, publications or
        !            68:   documentation, nor Columbia University nor any contributing institutions or
        !            69:   individuals acknowledge any liability resulting from program or
        !            70:   documentation errors.
        !            71: 
        !            72:   ACKNOWLEDGMENTS:
        !            73: 
        !            74:   The Kermit file transfer protocol was developed at the Columbia University
        !            75:   Center for Computing Activities (CUCCA).  It is named after Kermit the Frog,
        !            76:   star of the television series THE MUPPET SHOW; the name is used by permission
        !            77:   of Henson Associates, Inc.
        !            78: 
        !            79:   Thanks to at least the following people for their contributions to this
        !            80:   program over the years, and apologies to anybody I missed:
        !            81: 
        !            82:    Chris Adie, Edinburgh U, Scotland (OS/2 support)
        !            83:    Robert Adsett, University of Waterloo, Canada
        !            84:    Larry Afrin, Clemson U
        !            85:    Greg Andrews, Telebit Corp
        !            86:    Barry Archer, U of Missouri
        !            87:    Robert Andersson, International Systems A/S, Oslo, Norway
        !            88:    Chris Armstrong, Brookhaven National Lab (OS/2)
        !            89:    William Bader, Software Consulting Services, Nazareth, PA
        !            90:    Fuat Baran, CUCCA
        !            91:    Stan Barber, Rice U
        !            92:    Jim Barbour, U of Colorado
        !            93:    Donn Baumgartner, Dell
        !            94:    Nelson Beebe, U of Utah
        !            95:    Karl Berry, UMB
        !            96:    Dean W Bettinger, SUNY
        !            97:    Gary Bilkus
        !            98:    Marc Boucher, U of Montreal
        !            99:    Charles Brooks, EDN
        !           100:    Bob Brown
        !           101:    Mike Brown, Purdue U
        !           102:    Jack Bryans, California State U at Long Beach
        !           103:    Mark Buda, DEC (VAX/VMS)
        !           104:    Fernando Cabral, Padrao IX, Brasilia, Brazil
        !           105:    Bjorn Carlsson, Stockholm University Computer Centre QZ, Sweden
        !           106:    Bill Catchings, formerly of CUCCA
        !           107:    Bob Cattani, Columbia U CS Dept
        !           108:    Davide Cervone, Rochester University
        !           109:    Seth Chaiklin, Denmark
        !           110:    John Chandler, Harvard U / Smithsonian Astronomical Observatory
        !           111:    John L Chmielewski, AT&T, Lisle, IL
        !           112:    Howard Chu, U of Michigan
        !           113:    Bill Coalson, McDonnell Douglas
        !           114:    Bertie Coopersmith, London, UK
        !           115:    Chet Creider, University of Western Ontario, Canada
        !           116:    Alan Crosswell, CUCCA
        !           117:    Jeff Damens, formerly of CUCCA
        !           118:    Mark Davies, Bath U, UK
        !           119:    S. Dezawa, Fujifilm, Japan
        !           120:    Joe R. Doupnik, Utah State U
        !           121:    Frank Dreano (Honeywell)
        !           122:    John Dunlap, University of Washington
        !           123:    David Dyck, John Fluke Mfg Co.
        !           124:    Stefaan A. Eeckels, Eurokom, Luxembourg
        !           125:    Paul Eggert, Twin Sun, Inc., El Segundo, CA
        !           126:    Bernie Eiben, DEC
        !           127:    Kristoffer Eriksson, Peridot Konsult AB, Oerebro, Sweden
        !           128:    John R. Evans, IRS, Kansas City
        !           129:    Glenn Everhart, RCA Labs
        !           130:    Charlie Finan, Cray Research
        !           131:    Herm Fischer, Encino, CA (extensive contributions to version 4.0)
        !           132:    Carl Fongheiser, CWRU
        !           133:    Marcello Frutig, Catholic University, Sao Paulo, Brazil (X.25 support)
        !           134:    Hirofumi Fujii, Japan Nat'l Lab for High Energy Physics, Tokyo (Kanji)
        !           135:    Chuck Fuller, Westinghouse Corporate Computer Services
        !           136:    Andy Fyfe, Caltech
        !           137:    Christine M. Gianone, CUCCA
        !           138:    John Gilmore, UC Berkeley
        !           139:    German Goldszmidt, IBM
        !           140:    Alistair Gorman, New Zealand
        !           141:    Richard Gration, ADFA, Australia
        !           142:    Chris Green, Essex U, UK
        !           143:    Alan Grieg, Dundee Tech, Scotland, UK
        !           144:    Yekta Gursel, MIT
        !           145:    Jim Guyton, Rand Corp
        !           146:    Michael Haertel
        !           147:    Bob Hain, UMN
        !           148:    Marion Hakanson, ORST
        !           149:    John Hamilston, Iowa State U
        !           150:    Simon Hania, Netherlands
        !           151:    Stan Hanks, Rice U.
        !           152:    Ken Harrenstein, SRI
        !           153:    Eugenia Harris, Data General (AOS/VS)
        !           154:    David Harrison, Kingston Warren Corp
        !           155:    James Harvey, Indiana/Purdue U (VMS)
        !           156:    Rob Healey
        !           157:    Chuck Hedrick, Rutgers U
        !           158:    Ron Heiby, Technical Systems Division, Motorola Computer Group
        !           159:    Steve Hemminger, Tektronix
        !           160:    Christian Hemsing, RWTH Aachen, Germany (OS-9)
        !           161:    Andrew Herbert, Monash Univ, Australia
        !           162:    Mike Hickey, ITI
        !           163:    R E Hill
        !           164:    Bill Homer, Cray Research
        !           165:    Ray Hunter, The Wollongong Group
        !           166:    Randy Huntziger, National Library of Medicine
        !           167:    Larry Jacobs, Transarc
        !           168:    Steve Jenkins, Lancaster University, UK
        !           169:    Dave Johnson, Gradient Technologies
        !           170:    Mark B Johnson, Apple Computer
        !           171:    Eric F Jones, AT&T
        !           172:    Luke Jones, AT&T
        !           173:    Peter Jones, U of Quebec Montreal
        !           174:    Phil Julian, SAS Institute
        !           175:    Peter Kabal, U of Quebec
        !           176:    Mic Kaczmarczik, U of Texas at Austin
        !           177:    Sergey Kartashoff, Inst. of Precise Mechanics & Computer Equipment, Moscow
        !           178:    Howie Kaye, CUCCA
        !           179:    Rob Kedoin, Linotype Co, Hauppauge, NY (OS/2)
        !           180:    Mark Kennedy, IBM
        !           181:    Terry Kennedy, St Peter's College, Jersey City, NJ (VAX/VMS, 2.11 BSD)
        !           182:    Douglas Kingston, morgan.com
        !           183:    Tom Kloos, Sequent Computer Systems
        !           184:    Jim Knutson, U of Texas at Austin
        !           185:    Scott Kramer, SRI International, Menlo Park, CA
        !           186:    David Kricker, Encore Computer
        !           187:    Thomas Krueger, UWM
        !           188:    Bo Kullmar, Central Bank of Sweden, Kista
        !           189:    R. Brad Kummer, AT&T Bell Labs, Atlanta, GA
        !           190:    John Kunze, UC Berkeley
        !           191:    Bob Larson, USC (OS-9)
        !           192:    Bert Laverman, Groningen U, Netherlands
        !           193:    Steve Layton
        !           194:    David Lawyer, UC Irvine
        !           195:    David LeVine, National Semiconductor Corporation
        !           196:    S.O. Lidie, Lehigh U
        !           197:    Tor Lillqvist, Helsinki University, Finland
        !           198:    Dean Long
        !           199:    Kevin Lowey, U of Saskatchewan (OS/2)
        !           200:    Andy Lowry, Columbia University
        !           201:    David MacKenzie, Environmental Defense Fund, University of Maryland
        !           202:    John Mackin, University of Sidney, Australia
        !           203:    Martin Maclaren, Bath U, UK
        !           204:    Chris Maio, Columbia U CS Dept
        !           205:    Fulvio Marino, Olivetti, Ivrea, Italy
        !           206:    Peter Mauzey, AT&T
        !           207:    Tye McQueen, Utah State U
        !           208:    Ted Medin
        !           209:    Hellmuth Michaelis, Hanseatischer Computerservice GmbH, Hamburg, Germany
        !           210:    Leslie Mikesell, American Farm Bureau
        !           211:    Martin Minow, DEC (VAX/VMS)
        !           212:    Pawan Mistra, Bellcore
        !           213:    Ken Mizialko, IBM, Manassas, VA
        !           214:    Ray Moody, Purdue U
        !           215:    Bruce J Moore, Allen-Bradley Co, Highland Heights, OH (Atari ST)
        !           216:    Steve Morley, Convex
        !           217:    Peter Mossel, Columbia University
        !           218:    Tony Movshon, NYU
        !           219:    Lou Muccioli, Swanson Analysis Systems
        !           220:    Dan Murphy
        !           221:    Gary Mussar
        !           222:    John Nall, FSU
        !           223:    Jack Nelson, University of Pittsburgh
        !           224:    Jim Noble, Planning Research Corporation (Macintosh)
        !           225:    Ian O'Brien, Bath U, UK
        !           226:    John Owens
        !           227:    Michael Pins, Iowa Computer Aided Engineering Network
        !           228:    Andre' Pirard, University of Liege, Belgium
        !           229:    Paul Placeway, Ohio State U (Macintosh & more)
        !           230:    Piet W. Plomp, ICCE, Groningen University, Netherlands
        !           231:    Ken Poulton, HP Labs
        !           232:    Manfred Prange, Oakland U
        !           233:    Christopher Pratt, APV Baker, UK
        !           234:    Frank Prindle, NADC
        !           235:    Tony Querubin, U of Hawaii
        !           236:    Anton Rang
        !           237:    Scott Ribe
        !           238:    Alan Robiette, Oxford University, UK
        !           239:    Michel Robitaille, U of Montreal (Mac)
        !           240:    Kai Uwe Rommel, Technische Universitaet Muenchen (OS/2)
        !           241:    Larry Rosenman (Amiga)
        !           242:    Jay Rouman, U of Michigan
        !           243:    Jack Rouse, SAS Institute (Data General and/or Apollo)
        !           244:    Stew Rubenstein, Harvard U (VAX/VMS)
        !           245:    Bill Schilit, Columbia University
        !           246:    Michael Schmidt, U of Paderborn, Germany
        !           247:    Eric Schnoebelen, Convex
        !           248:    Benn Schreiber, DEC
        !           249:    Dan Schullman, DEC (modems, DIAL command, etc)
        !           250:    John Schultz, 3M
        !           251:    Steven Schultz, Contel (PDP-11)
        !           252:    APPP Scorer, Leeds Polytechnic, UK
        !           253:    Gordon Scott, Micro Focus, Newbury UK
        !           254:    Gisbert W. Selke, WIdO, Bonn, Germany
        !           255:    David Sizeland, U of London Medical School
        !           256:    Fridrik Skulason, Iceland
        !           257:    Dave Slate
        !           258:    Bradley Smith, UCLA
        !           259:    Richard S Smith, Cal State
        !           260:    Ryan Stanisfer, UNT
        !           261:    Bertil Stenstroem, Stockholm University Computer Centre (QZ), Sweden
        !           262:    James Sturdevant, CAP GEMENI AMERICA, Minneapolis
        !           263:    Peter Svanberg, Royal Techn. HS, Sweden
        !           264:    James R. Swenson, Accu-Weather, Inc.
        !           265:    Andy Tanenbaum, Vrije U, Amsterdam, Netherlands
        !           266:    Markku Toijala, Helsinki U of Technology
        !           267:    Rick Troxel, NIH
        !           268:    Warren Tucker, Tridom Corp, Mountain Park, GA
        !           269:    Dave Tweten, AMES-NAS
        !           270:    G Uddeborg, Sweden
        !           271:    Walter Underwood, Ford Aerospace
        !           272:    Pieter Van Der Linden, Centre Mondial, Paris
        !           273:    Ge van Geldorp, Netherlands
        !           274:    Fred van Kempen, MINIX User Group, Voorhout, Netherlands
        !           275:    Wayne Van Pelt, GE/CRD
        !           276:    Mark Vasoll, Oklahoma State U (V7 UNIX)
        !           277:    Konstantin Vinogradov, ICSTI, Moscow
        !           278:    Paul Vixie, DEC
        !           279:    Dimitri Vulis, CUNY
        !           280:    Roger Wallace, Raytheon
        !           281:    Stephen Walton, Calif State U, Northridge (Amiga)
        !           282:    Jamie Watson, Adasoft, Switzerland (RS/6000)
        !           283:    Rick Watson, U of Texas (Macintosh)
        !           284:    Robert Weiner, Programming Plus, New York City
        !           285:    Lauren Weinstein, Vortex Technlogy
        !           286:    David Wexelblat, AT&T
        !           287:    Joachim Wiesel, U of Karlsruhe
        !           288:    Lon Willett, U of Utah
        !           289:    Michael Williams, UCLA
        !           290:    Nate Williams, U of Montana
        !           291:    David Wilson
        !           292:    Patrick Wolfe, Kuck & Associates, Inc.
        !           293:    Gregg Wonderly, Oklahoma State U (V7 UNIX)
        !           294:    Farrell Woods, Concurrent (formerly Masscomp)
        !           295:    Dave Woolley, CAP Communication Systems, London
        !           296:    Jack Woolley, SCT Corp
        !           297:    Frank Wortner
        !           298:    Ken Yap, U of Rochester
        !           299:    John Zeeff, Ann Arbor, MI
        !           300: */
        !           301: /*
        !           302:   ckcsym.h is used for for defining symbols that normally would be defined
        !           303:   using -D or -d on the cc command line, for use with compilers that don't
        !           304:   support this feature.
        !           305: */
        !           306: #include "ckcsym.h"
        !           307: #include "ckcasc.h"                    /* ASCII character symbols */
        !           308: #include "ckcdeb.h"                    /* Debug & other symbols */
        !           309: #include "ckcker.h"                    /* Kermit symbols */
        !           310: #include "ckcnet.h"                    /* Network symbols */
        !           311: #ifndef NOSPL
        !           312: #include "ckuusr.h"
        !           313: #endif /* NOSPL */
        !           314: 
        !           315: #ifndef NOSERVER
        !           316: /* Text message definitions.. each should be 256 chars long, or less. */
        !           317: #ifdef MAC
        !           318: char *hlptxt = "\r\
        !           319: Mac Kermit Server Commands:\r\
        !           320: \r\
        !           321:     BYE\r\
        !           322:     FINISH\r\
        !           323:     GET filespec\r\
        !           324:     REMOTE CD directory\r\
        !           325:     REMOTE HELP\r\
        !           326:     SEND filespec\r\
        !           327: \r\0";
        !           328: #else
        !           329: #ifdef AMIGA
        !           330: char *hlptxt = "C-Kermit Server Commands:\n\
        !           331: \n\
        !           332: GET filespec, SEND filespec, FINISH, BYE, REMOTE HELP\n\
        !           333: \n\0";
        !           334: #else
        !           335: #ifdef OS2
        !           336: char *hlptxt = "C-Kermit Server REMOTE Commands:\n\
        !           337: \n\
        !           338: GET files  REMOTE CD [dir]     REMOTE DIRECTORY [files]\n\
        !           339: SEND files REMOTE SPACE [dir]  REMOTE HOST command\n\
        !           340: FINISH     REMOTE DELETE files REMOTE TYPE files\n\
        !           341: BYE        REMOTE HELP         REMOTE SET parameter value\n\
        !           342: \n\0";
        !           343: #else
        !           344: #ifdef MINIX
        !           345: char *hlptxt = "C-Kermit Server REMOTE Commands:\n\
        !           346: GET SEND BYE FINISH REMOTE: CD DEL DIR HELP HOST SET SPACE TYPE WHO\n\0";
        !           347: #else
        !           348: #ifdef VMS
        !           349: char *hlptxt = "C-Kermit Server REMOTE Commands:\r\n\
        !           350: \r\n\
        !           351: GET files  REMOTE CD [dir]     REMOTE DIRECTORY [files]\r\n\
        !           352: SEND files REMOTE SPACE [dir]  REMOTE HOST command\r\n\
        !           353: MAIL files REMOTE DELETE files REMOTE WHO [user]\r\n\
        !           354: BYE        REMOTE PRINT files  REMOTE TYPE files\r\n\
        !           355: FINISH     REMOTE HELP         REMOTE SET parameter value\r\n\
        !           356: \0";
        !           357: #else
        !           358: #ifdef datageneral
        !           359: char *hlptxt = "C-Kermit Server REMOTE Commands:\n\
        !           360: \n\
        !           361: GET files  REMOTE CD [dir]     REMOTE DIRECTORY [filespec]\n\
        !           362: SEND files REMOTE SPACE [dir]  REMOTE HOST command\n\
        !           363: BYE        REMOTE TYPE file    REMOTE DELETE files\n\
        !           364: FINISH     REMOTE WHO          REMOTE SET\n\
        !           365: \0";
        !           366: #else
        !           367: char *hlptxt = "C-Kermit Server REMOTE Commands:\n\
        !           368: \n\
        !           369: GET files  REMOTE CD [dir]     REMOTE DIRECTORY [files]\n\
        !           370: SEND files REMOTE SPACE [dir]  REMOTE HOST command\n\
        !           371: MAIL files REMOTE DELETE files REMOTE WHO [user]\n\
        !           372: BYE        REMOTE PRINT files  REMOTE TYPE files\n\
        !           373: FINISH     REMOTE HELP         REMOTE SET parameter value\n\
        !           374: \n\0";
        !           375: #endif
        !           376: #endif
        !           377: #endif
        !           378: #endif
        !           379: #endif
        !           380: #endif
        !           381: 
        !           382: #ifdef MINIX
        !           383: char *srvtxt = "\r\n\
        !           384: Entering server mode.\r\n\0";
        !           385: #else
        !           386: #ifdef OSK
        !           387: char *srvtxt = "\r\l\
        !           388: Entering server mode.  If your local Kermit software is menu driven, use\r\l\
        !           389: the menus to send commands to the server.  Otherwise, enter the escape\r\l\
        !           390: sequence to return to your local Kermit prompt and issue commands from\r\l\
        !           391: there.  Use SEND and GET for file transfer.  Use REMOTE HELP for a list of\r\l\
        !           392: other available services.  Use BYE or FINISH to end server mode.\r\l\0";
        !           393: #else /* UNIX, VMS, AOS/VS, and all others */
        !           394: char *srvtxt = "\r\n\
        !           395: Entering server mode.  If your local Kermit software is menu driven, use\r\n\
        !           396: the menus to send commands to the server.  Otherwise, enter the escape\r\n\
        !           397: sequence to return to your local Kermit prompt and issue commands from\r\n\
        !           398: there.  Use SEND and GET for file transfer.  Use REMOTE HELP for a list of\r\n\
        !           399: other available services.  Use BYE or FINISH to end server mode.\r\n\0";
        !           400: #endif /* OSK */
        !           401: #endif /* MINIX */
        !           402: #else  /* server mode disabled */
        !           403: char *srvtxt = "";
        !           404: #endif /* NOSERVER */
        !           405: 
        !           406: /* Declarations for Send-Init Parameters */
        !           407: 
        !           408: int spsiz = DSPSIZ,                     /* Current packet size to send */
        !           409:     spmax = DSPSIZ,                    /* Biggest packet size we can send */
        !           410:     spsizr = DSPSIZ,                   /* Send-packet size requested */
        !           411:     spsizf = 0,                         /* Flag to override size negotiation */
        !           412:     rpsiz = DRPSIZ,                     /* Biggest we want to receive */
        !           413:     urpsiz = DRPSIZ,                   /* User-requested receive pkt size */
        !           414:     maxrps = MAXRP,                    /* Maximum incoming long packet size */
        !           415:     maxsps = MAXSP,                    /* Maximum outbound l.p. size */
        !           416:     maxtry = MAXTRY,                   /* Maximum retries per packet */
        !           417:     wslots = 1,                                /* Window size currently in use */
        !           418:     wslotr = 1,                                /* Window size from SET WINDOW */
        !           419:     wslotn = 1,                                /* Window size negotiated in S-pkt */
        !           420:     timeouts = 0,                      /* For statistics reporting */
        !           421:     spackets = 0,                      /*  ... */
        !           422:     rpackets = 0,                      /*  ... */
        !           423:     retrans = 0,                       /*  ... */
        !           424:     crunched = 0,                      /*  ... */
        !           425:     wmax = 0,                          /*  ... */
        !           426:     wcur = 0,                          /*  ... */
        !           427:     srvdis = 0,                                /* Server file xfer display */
        !           428:     srvtim = DSRVTIM,                  /* Server command wait timeout */
        !           429: /*
        !           430:   timint is the timeout interval I use when waiting for a packet.
        !           431:   pkttim is the SET RECEIVE TIMEOUT value, sent to the other Kermit.
        !           432:   rtimo is the SET SEND TIMEOUT value.  rtimo is the initial value of
        !           433:   timint.  timint is changed by the value in the incoming negotiation
        !           434:   packet unless a SET SEND TIMEOUT command was given.
        !           435: */
        !           436:     timint = DMYTIM,                    /* Timeout interval I use */
        !           437:     pkttim = URTIME,                   /* Timeout I want you to use */
        !           438:     rtimo = DMYTIM,                    /* Normal packet wait timeout */
        !           439:     timef = 0,                          /* Flag to override what you ask */
        !           440:     npad = MYPADN,                      /* How much padding to send */
        !           441:     mypadn = MYPADN,                    /* How much padding to ask for */
        !           442:     bctr = 1,                           /* Block check type requested */
        !           443:     bctu = 1,                           /* Block check type used */
        !           444:     bctl = 1,                          /* Block check length */
        !           445:     ebq =  MYEBQ,                       /* 8th bit prefix */
        !           446:     ebqflg = 0,                         /* 8th-bit quoting flag */
        !           447:     rqf = -1,                          /* Flag used in 8bq negotiation */
        !           448:     rq = 0,                            /* Received 8bq bid */
        !           449:     sq = 'Y',                          /* Sent 8bq bid */
        !           450:     rpt = 0,                            /* Repeat count */
        !           451:     rptq = MYRPTQ,                      /* Repeat prefix */
        !           452:     rptflg = 0;                         /* Repeat processing flag */
        !           453: 
        !           454: int capas = 9,                         /* Position of Capabilities */
        !           455:     atcapb = 8,                                /* Attribute capability */
        !           456:     atcapr = 1,                                /*  requested */
        !           457:     atcapu = 0,                                /*  used */
        !           458:     swcapb = 4,                                /* Sliding Window capability */
        !           459:     swcapr = 1,                                /*  requested (allowed) */
        !           460:     swcapu = 0,                                /*  used */
        !           461:     lpcapb = 2,                                /* Long Packet capability */
        !           462:     lpcapr = 1,                                /*  requested */
        !           463:     lpcapu = 0,                                /*  used */
        !           464:     lscapb = 32,                       /* Locking Shift capability */
        !           465:     lscapr = 1,                                /*  requested by default */
        !           466:     lscapu = 0;                                /*  used */
        !           467: 
        !           468: /* Flags for whether to use particular attributes */
        !           469: 
        !           470: int atenci = 1,                                /* Encoding in */
        !           471:     atenco = 1,                                /* Encoding out */
        !           472:     atdati = 1,                                /* Date in */
        !           473:     atdato = 1,                                /* Date out */
        !           474:     atdisi = 1,                                /* Disposition in/out */
        !           475:     atdiso = 1,
        !           476:     atleni = 1,                                /* Length in/out (both kinds) */
        !           477:     atleno = 1,
        !           478:     atblki = 1,                                /* Blocksize in/out */
        !           479:     atblko = 1,
        !           480:     attypi = 1,                                /* File type in/out */
        !           481:     attypo = 1,
        !           482:     atsidi = 1,                                /* System ID in/out */
        !           483:     atsido = 1,
        !           484:     atsysi = 1,                               /* System-dependent parameters in/out */
        !           485:     atsyso = 1;
        !           486: 
        !           487: CHAR padch = MYPADC,                    /* Padding character to send */
        !           488:     mypadc = MYPADC,                    /* Padding character to ask for */
        !           489:     seol = MYEOL,                       /* End-Of-Line character to send */
        !           490:     eol = MYEOL,                        /* End-Of-Line character to look for */
        !           491:     ctlq = CTLQ,                        /* Control prefix in incoming data */
        !           492:     myctlq = CTLQ;                      /* Outbound control character prefix */
        !           493: 
        !           494: struct zattr iattr;                    /* Incoming file attributes */
        !           495: 
        !           496: /* File related variables, mainly for the benefit of VAX/VMS */
        !           497: 
        !           498: int fblksiz = DBLKSIZ;         /* File blocksize */
        !           499: int frecl = DLRECL;            /* File record length */
        !           500: int frecfm = XYFF_S;           /* File record format (default = stream) */
        !           501: int forg = XYFO_S;             /* File organization (sequential) */
        !           502: int fcctrl = XYFP_N;           /* File carriage control (ctrl chars) */
        !           503: 
        !           504: #ifdef VMS
        !           505: /* VMS labeled file options */
        !           506: int lf_opts = LBL_NAM;
        !           507: #else
        !           508: int lf_opts = 0;
        !           509: #endif /* VMS */
        !           510: 
        !           511: /* Packet-related variables */
        !           512: 
        !           513: int pktnum = 0,                         /* Current packet number */
        !           514:     sndtyp = 0,                                /* Type of packet just sent */
        !           515:     rsn,                               /* Received packet sequence number */
        !           516:     rln,                               /* Received packet length */
        !           517:     size,                               /* Current size of output pkt data */
        !           518:     osize,                              /* Previous output packet data size */
        !           519:     maxsize,                            /* Max size for building data field */
        !           520:     spktl = 0,                         /* Length packet being sent */
        !           521:     rpktl = 0,                         /* Length of packet just received */
        !           522:     rprintf,                           /* REMOTE PRINT flag */
        !           523:     rmailf;                            /* MAIL flag */
        !           524: 
        !           525: CHAR
        !           526: #ifdef NO_MORE  /* Buffers used before sliding windows... */
        !           527:     sndpkt[MAXSP+100],                 /* Entire packet being sent */
        !           528:     recpkt[MAXRP+200],                 /* Packet most recently received */
        !           529:     data[MAXSP+4],                     /* Packet data buffer */
        !           530: #endif
        !           531: #ifdef DYNAMIC
        !           532:     *srvcmd = (CHAR *)0,               /* Where to decode server command */
        !           533: #else
        !           534:     srvcmd[MAXRP+4],                    /* Where to decode server command */
        !           535: #endif
        !           536:     padbuf[95],                                /* Buffer for send-padding */
        !           537:     *recpkt,
        !           538:     *rdatap,                           /* Pointer to received packet data */
        !           539:     *data = (CHAR *)0,                 /* Pointer to send-packet data */
        !           540:     *srvptr,                            /* Pointer to srvcmd */
        !           541:     mystch = SOH,                       /* Outbound packet-start character */
        !           542:     stchr = SOH;                        /* Incoming packet-start character */
        !           543: 
        !           544: /* File-related variables */
        !           545: 
        !           546: char filnam[257];                       /* Name of current file. */
        !           547: char cmdfil[80];                       /* Application file name. */
        !           548: 
        !           549: int nfils = 0;                         /* Number of files in file group */
        !           550: long fsize;                             /* Size of current file */
        !           551: int wildxpand = 0;                     /* Who expands wildcards */
        !           552: int clfils = 0;                                /* Flag for command-line files */
        !           553: int stayflg = 0;                       /* Flag for "stay", i.e. "-S" */
        !           554: 
        !           555: /* Communication line variables */
        !           556: 
        !           557: char ttname[80];                        /* Name of communication line. */
        !           558: 
        !           559: #ifdef MAC
        !           560: int connected = 0;                     /* true if connected */
        !           561: int startconnected;                    /* initial state of connected */
        !           562: #endif /* MAC */
        !           563: 
        !           564: long speed = -1L;                      /* Line speed */
        !           565: 
        !           566: int parity,                             /* Parity specified, 0,'e','o',etc */
        !           567:     autopar = 0,                       /* Automatic parity change flag */
        !           568:     sosi = 0,                          /* Shift-In/Out flag */
        !           569:     flow,                               /* Flow control */
        !           570:     turn = 0,                           /* Line turnaround handshake flag */
        !           571:     turnch = XON,                       /* Line turnaround character */
        !           572:     duplex = 0,                         /* Duplex, full by default */
        !           573:     escape = DFESC,                    /* Escape character for connect */
        !           574:     delay = DDELAY,                     /* Initial delay before sending */
        !           575:     tnlm = 0,                          /* Terminal newline mode */
        !           576:     mdmtyp = 0;                         /* Modem type (initially none)  */
        !           577: 
        !           578: /* Networks for SET HOST */
        !           579: 
        !           580: #define MYHOSTL 100
        !           581:     char myhost[MYHOSTL];              /* Local host name */
        !           582:     int network = 0;                   /* Network vs tty connection */
        !           583: #ifdef OS2
        !           584: /* For now, DECnet is the only type supported by OS/2 */
        !           585:     int nettype = NET_DEC;
        !           586: #else
        !           587:     int nettype = NET_TCPB;            /* Assume TCP/IP (BSD sockets) */
        !           588: #endif /* OS2 */
        !           589: 
        !           590: #ifdef SUNX25
        !           591:     extern initpad();
        !           592:     int revcall = 0;            /* X.25 reverse call not selected */
        !           593:     int closgr  = -1;          /* X.25 closed user group not selected */
        !           594:     int cudata = 0;            /* X.25 call user data not specified */
        !           595:     char udata[MAXCUDATA];     /* X.25 call user data */
        !           596: #endif /* SUNX25 */
        !           597: 
        !           598: /* Other recent additions */
        !           599: 
        !           600:     int tlevel = -1;                   /* Take-file command level */
        !           601: #ifndef NOSPL
        !           602:     extern int cmdlvl;                 /* Command level */
        !           603:     extern int maclvl;                 /* Macro invocation level */
        !           604: #endif /* NOSPL */
        !           605:     int carrier = CAR_AUT;             /* Pay attention to carrier signal */
        !           606:     int cdtimo = 0;                    /* Carrier wait timeout */
        !           607:     int xitsta = GOOD_EXIT;            /* Program exit status */
        !           608: #ifdef VMS                             /* Default filename collision action */
        !           609:     int fncact = XYFX_X;               /* REPLACE for VAX/VMS */
        !           610: #else
        !           611:     int fncact = XYFX_B;               /* BACKUP for everybody else */
        !           612: #endif /* VMS */
        !           613:     int bgset = -1;                    /* BACKGROUND mode set explicitly */
        !           614: #ifdef UNIX
        !           615:     int suspend = DFSUSP;              /* Whether SUSPEND command, etc, */
        !           616: #else                                  /* is to be allowed. */
        !           617:     int suspend = 0;
        !           618: #endif /* UNIX */
        !           619: 
        !           620: /* Statistics variables */
        !           621: 
        !           622: long filcnt,                    /* Number of files in transaction */
        !           623:     flci,                       /* Characters from line, current file */
        !           624:     flco,                       /* Chars to line, current file  */
        !           625:     tlci,                       /* Chars from line in transaction */
        !           626:     tlco,                       /* Chars to line in transaction */
        !           627:     ffc,                        /* Chars to/from current file */
        !           628:     tfc,                        /* Chars to/from files in transaction */
        !           629:     rptn;                      /* Repeated characters compressed */
        !           630: 
        !           631: int tsecs = 0;                  /* Seconds for transaction */
        !           632: int fsecs = 0;                 /* Per-file timer */
        !           633: 
        !           634: /* Flags */
        !           635: 
        !           636: int deblog = 0,                         /* Flag for debug logging */
        !           637:     debses = 0,                                /* Flag for DEBUG SESSION */
        !           638:     pktlog = 0,                         /* Flag for packet logging */
        !           639:     seslog = 0,                         /* Session logging */
        !           640:     tralog = 0,                         /* Transaction logging */
        !           641:     displa = 0,                         /* File transfer display on/off */
        !           642:     stdouf = 0,                         /* Flag for output to stdout */
        !           643:     stdinf = 0,                                /* Flag for input from stdin */
        !           644:     xflg   = 0,                         /* Flag for X instead of F packet */
        !           645:     hcflg  = 0,                         /* Doing Host command */
        !           646:     fncnv  = 1,                         /* Flag for file name conversion */
        !           647:     binary = 0,                         /* Flag for binary file */
        !           648:     savmod = 0,                         /* Saved file mode (whole session) */
        !           649:     bsave  = 0,                                /* Saved file mode (per file) */
        !           650:     bsavef = 0,                                /* Flag if bsave was used. */
        !           651:     cmask  = 0177,                     /* Connect byte mask */
        !           652:     fmask  = 0377,                     /* File byte mask */
        !           653:     warn   = 0,                         /* Flag for file warning */
        !           654:     quiet  = 0,                         /* Be quiet during file transfer */
        !           655:     local  = 0,                         /* Flag for external tty vs stdout */
        !           656:     server = 0,                         /* Flag for being a server */
        !           657:     cflg   = 0,                                /* Connect before transaction */
        !           658:     cnflg  = 0,                         /* Connect after transaction */
        !           659:     cxseen = 0,                         /* Flag for cancelling a file */
        !           660:     czseen = 0,                         /* Flag for cancelling file group */
        !           661:     discard = 0,                       /* Flag for file to be discarded */
        !           662:     keep = 0,                           /* Keep incomplete files */
        !           663:     unkcs = 1,                         /* Keep file w/unknown character set */
        !           664:     nakstate = 0,                      /* In a state where we can send NAKs */
        !           665:     dblchar = -1;                      /* Character to double when sending */
        !           666: 
        !           667: /* Variables passed from command parser to protocol module */
        !           668: 
        !           669: #ifndef NOSPL
        !           670: _PROTOTYP( int parser, (int) );         /* The parser itself */
        !           671: char *clcmds = NULL;                   /* Pointer to command-line commands */
        !           672: #endif /* NOSPL */
        !           673: 
        !           674: CHAR sstate  = (CHAR) 0;                /* Starting state for automaton */
        !           675: CHAR zstate  = (CHAR) 0;               /* For remembering sstate */
        !           676: char *cmarg  = "";                      /* Pointer to command data */
        !           677: char *cmarg2 = "";                      /* Pointer to 2nd command data */
        !           678: char **cmlist;                          /* Pointer to file list in argv */
        !           679: 
        !           680: /* Flags for the ENABLE and DISABLE commands */
        !           681: 
        !           682: int en_cwd = 1;                                /* CD/CWD */
        !           683: int en_del = 1;                                /* DELETE */
        !           684: int en_dir = 1;                                /* DIRECTORY */
        !           685: int en_fin = 1;                                /* FINISH/BYE */
        !           686: int en_get = 1;                                /* GET */
        !           687: #ifndef NOPUSH
        !           688: int en_hos = 1;                                /* HOST enabled */
        !           689: #else
        !           690: int en_hos = 0;                                /* HOST disabled */
        !           691: #endif /* NOPUSH */
        !           692: int en_sen = 1;                                /* SEND */
        !           693: int en_set = 1;                                /* SET */
        !           694: int en_spa = 1;                                /* SPACE */
        !           695: int en_typ = 1;                                /* TYPE */
        !           696: int en_who = 1;                                /* WHO */
        !           697: #ifdef datageneral
        !           698: /* Data General AOS/VS can't do this */
        !           699: int en_bye = 0;                                /* BYE */
        !           700: #else
        !           701: int en_bye = 1;                                /* BYE */
        !           702: #endif /* datageneral */
        !           703: 
        !           704: /* Miscellaneous */
        !           705: 
        !           706: char **xargv;                           /* Global copies of argv */
        !           707: int  xargc;                             /* and argc  */
        !           708: int xargs;                             /* an immutable copy of argc */
        !           709: char *xarg0;                           /* and of argv[0] */
        !           710: 
        !           711: extern char *dftty;                     /* Default tty name from ck?tio.c */
        !           712: extern int dfloc;                       /* Default location: remote/local */
        !           713: extern int dfprty;                      /* Default parity */
        !           714: extern int dfflow;                      /* Default flow control */
        !           715: 
        !           716: /*
        !           717:   Buffered file input and output buffers.  See getpkt() in ckcfns.c
        !           718:   and zoutdump() in the system-dependent file i/o module (usually ck?fio.c).
        !           719: */
        !           720: #ifndef DYNAMIC
        !           721: /* Now we allocate them dynamically, see getiobs() below. */
        !           722: char zinbuffer[INBUFSIZE], zoutbuffer[OBUFSIZE];
        !           723: #endif
        !           724: char *zinptr, *zoutptr;
        !           725: int zincnt, zoutcnt;
        !           726: 
        !           727: _PROTOTYP( int getiobs, (void) );
        !           728: 
        !           729: /*  M A I N  --  C-Kermit main program  */
        !           730: 
        !           731: #ifndef NOCCTRAP
        !           732: #include <setjmp.h>
        !           733: extern jmp_buf cmjbuf;
        !           734: #ifdef GEMDOS                          /* Special for Atari ST */
        !           735:     cc_clean();
        !           736: #endif /* GEMDOS */
        !           737: #endif /* NOCCTRAP */
        !           738: 
        !           739: #ifdef aegis
        !           740: /* On the Apollo, intercept main to insert a cleanup handler */
        !           741: int
        !           742: ckcmai(argc,argv) int argc; char **argv;
        !           743: #else
        !           744: #ifdef MAC
        !           745: int main (void)
        !           746: #else
        !           747: int
        !           748: main(argc,argv) int argc; char **argv;
        !           749: #endif /* MAC */
        !           750: #endif /* aegis */
        !           751: {
        !           752: #ifdef datageneral
        !           753: short *pfha = 016000000036;             /* Get around LANG_RT problem -- */
        !           754: *pfha = (short) 0;                      /* No user protection fault handler */
        !           755: #endif /* datageneral */
        !           756:   
        !           757: /* Do some initialization */
        !           758: 
        !           759:     if (sysinit() < 0)                 /* System-dependent initialization. */
        !           760:       fatal("Can't initialize!");
        !           761:     connoi();                          /* Console interrupts off */
        !           762: #ifndef MAC
        !           763:     xargc = xargs = argc;              /* Make global copies of argc */
        !           764:     xargv = argv;                       /* ...and argv. */
        !           765:     xarg0 = argv[0];
        !           766: #endif /* MAC */
        !           767:     sstate = 0;                         /* No default start state. */
        !           768: #ifdef DYNAMIC
        !           769:     if (getiobs() < 0) 
        !           770:       fatal("Can't allocate i/o buffers!");
        !           771: #endif /* DYNAMIC */
        !           772:     ckhost(myhost,MYHOSTL);            /* Name of local host */
        !           773:     strcpy(ttname,dftty);               /* Set up default tty name. */
        !           774:     local = dfloc;                      /* And whether it's local or remote. */
        !           775:     parity = dfprty;                    /* Set initial parity, */
        !           776:     flow = dfflow;                      /* and flow control. */
        !           777: #ifndef COHERENT
        !           778:     if (local) if (ttopen(ttname,&local,0,0) < 0) { /* If default tty line */
        !           779:        printf("%s: Can't open device\n",ttname);   /* is external, open it */
        !           780:        local = 0;                                  /* now... */
        !           781:        strcpy(ttname,CTTNAM);
        !           782:     }
        !           783: #endif /* COHERENT */
        !           784:     speed = ttgspd();                  /* Get transmission speed. */
        !           785: 
        !           786: #ifdef SUNX25
        !           787:     initpad();                          /* Initialize X.25 PAD */
        !           788: #endif /* SUNX25 */
        !           789: 
        !           790:     if (inibufs(SBSIZ,RBSIZ) < 0)      /* Allocate packet buffers */
        !           791:       fatal("Can't allocate packet buffers!");
        !           792: 
        !           793: #ifndef NOICP
        !           794: #ifdef MAC
        !           795:     cmdini();
        !           796: #else /* Not MAC */
        !           797: /* Attempt to take ini file before doing command line */
        !           798: 
        !           799:     *cmdfil = '\0';                    /* Assume no command file. */
        !           800:     prescan();                         /* But first check for -y option */
        !           801: 
        !           802: #ifndef NOCCTRAP
        !           803:     setint();                          /* Set up interrupts */
        !           804:     if (setjmp(cmjbuf)) {              /* Control-C trap returns to here. */
        !           805: #ifdef GEMDOS
        !           806:        cc_clean();                     /* Atari: Clean up after ^C-trap. */
        !           807: #endif /* GEMDOS */
        !           808:        doexit(GOOD_EXIT,-1);           /* Exit with good status. */
        !           809:     } else {
        !           810: #endif /* NOCCTRAP */
        !           811:        cmdini();                       /* Sets tlevel */
        !           812:        while (tlevel > -1) {           /* Execute init file. */
        !           813:            sstate = parser(0);         /* Loop getting commands. */
        !           814:            if (sstate) proto();        /* Enter protocol if requested. */
        !           815:        }
        !           816: #ifndef NOCCTRAP
        !           817:     }
        !           818: #endif /* NOCCTRAP */
        !           819: 
        !           820: /*
        !           821:   In UNIX there are two ways to invoke Kermit with a cmdfile:
        !           822:   (1) From the kermit command line, e.g. "kermit cmdfile [ options... ]"
        !           823:       argv[0] = "kermit"
        !           824:       argv[1] = "cmdfile"
        !           825:   (2) By executing a cmdfile whose first line is like "#!/path/kermit"
        !           826:       argv[0] = "/path/kermit" (sometimes just "kermit")
        !           827:       argv[1] = "/path/cmdfile"
        !           828: */
        !           829:     if (argc > 1) {
        !           830:        if (*argv[1] != '-') {
        !           831:            if (zchki(argv[1]) > 0) {
        !           832:                strcpy(cmdfil,argv[1]);
        !           833:            }
        !           834:        }
        !           835:     }
        !           836:     if (*cmdfil) {                     /* If we got one, */
        !           837:        dotake(cmdfil);                 /* execute it */
        !           838:        while (tlevel > -1) {           /* until it runs out. */
        !           839:            sstate = parser(1);         /* Loop getting commands. */
        !           840:            if (sstate) proto();        /* Enter protocol if requested. */
        !           841:        }
        !           842:     }
        !           843:     *cmdfil = '\0';                    /* Done, nullify the file name */
        !           844: #endif /* MAC */
        !           845: #endif /* NOICP */
        !           846: 
        !           847: #ifndef NOCMDL
        !           848: /* Look for a UNIX-style command line... */
        !           849: 
        !           850:     if (argc > 1) {                     /* Command line arguments? */
        !           851:         sstate = cmdlin();              /* Yes, parse. */
        !           852:        zstate = sstate;                /* Remember sstate around protocol */
        !           853:        if (cflg) conect();             /* Connect first if requested */
        !           854:         if (sstate) {
        !           855:            if (displa) concb((char)escape); /* (for console "interrupts") */
        !           856: #ifndef NOCCTRAP
        !           857:            setint();                   /* Set up interrupts */
        !           858:            if (setjmp(cmjbuf)) {       /* Control-C trap returns to here. */
        !           859: #ifdef GEMDOS
        !           860:                cc_clean();
        !           861: #endif /* GEMDOS */
        !           862:                if (cnflg) conect();    /* connect again if requested, */
        !           863:            } else {
        !           864: #endif /* NOCCTRAP */
        !           865:                proto();                /* Take any requested action, then */
        !           866:                if (!quiet)             /* put cursor back at left margin, */
        !           867:                  conoll("");
        !           868:                if (cnflg) conect();    /* connect if requested, */
        !           869: #ifndef NOCCTRAP
        !           870:            }
        !           871: #endif /* NOCCTRAP */
        !           872:        }
        !           873: /*
        !           874:   If interactive commands were given on the command line (using the
        !           875:   -C "command, command, ..." option), assign them to a macro called
        !           876:   "cl_commands", then execute the macro and leave it defined for
        !           877:   subsequent re-execution if desired.
        !           878: */
        !           879: #ifndef NOSPL
        !           880:        if (clcmds) {                   /* Check for -C commands */
        !           881:            int x;
        !           882:            x = addmac("cl_commands",clcmds); /* Put macro in table */
        !           883:            if (x > -1) {               /* If successful, */
        !           884:                dodo(x,NULL);           /* set up for macro execution */
        !           885:                while (maclvl > -1) {   /* Loop getting macro commands. */
        !           886:                    sstate = parser(1);
        !           887:                    if (sstate) proto(); /* Enter protocol if requested. */
        !           888:                }
        !           889:            }
        !           890:        }
        !           891: #endif /* NOSPL */
        !           892: #ifndef NOICP
        !           893: /*
        !           894:   If a command-line action argument was given and -S ("stay") was not given,
        !           895:   exit now.
        !           896: */
        !           897:        if ((cflg || cnflg || zstate) && !stayflg)
        !           898: #endif /* NOICP */
        !           899:          doexit(GOOD_EXIT,xitsta); /* exit with good status */
        !           900:     }
        !           901: #endif /* NOCMDL */
        !           902: 
        !           903: #ifdef NOICP                           /* No interactive command parser */
        !           904:     else {
        !           905: #ifndef NOCMDL
        !           906:        usage();                        /* Command-line-only version */
        !           907:        doexit(BAD_EXIT,-1);
        !           908: #else                                  /* Neither one! */
        !           909:        doexit(BAD_EXIT,-1);
        !           910: #endif /* NOCMDL */
        !           911:     }
        !           912: #else /* not NOICP */
        !           913: /*
        !           914:   If no action requested on command line, or if -S ("stay") was included,
        !           915:   enter the interactive command parser.
        !           916: */
        !           917:     herald();                          /* Display program herald. */
        !           918: 
        !           919: #ifndef NOCCTRAP                       /* If not no Control-C trap */
        !           920: ccagain:
        !           921:     if (setjmp(cmjbuf)) {              /* Control-C trap returns to here. */
        !           922: #ifdef GEMDOS
        !           923:        cc_clean();
        !           924: #endif /* GEMDOS */
        !           925:        fixcmd();                       /* Pop command stacks, etc. */
        !           926:        debug(F100,"ckcmai got interrupt","",0);
        !           927:        goto ccagain;                   /* set up trap again. */
        !           928:     } else {
        !           929:        debug(F100,"ckcmai setting interrupt trap","",0);
        !           930:        setint();                       /* Set up command interrupt traps */
        !           931:     }
        !           932: #else /* NOCCTRAP */
        !           933:     setint();                          /* Set up command interrupt traps */
        !           934: #endif /* NOCCTRAP */
        !           935: 
        !           936: #ifdef MAC
        !           937:     while (1) {
        !           938:        extern char *lfiles;            /* fake pointer cast */
        !           939: 
        !           940:        if (connected) {
        !           941:            debug(F100, "main: calling macparser", "", 0);
        !           942:            sstate = newparser(1, 1, 0L);
        !           943: 
        !           944:            /* ignore null command state */
        !           945:            if (sstate == 'n')
        !           946:                sstate = '\0';
        !           947: 
        !           948:            if (sstate)
        !           949:                proto();
        !           950:        }
        !           951:        else {
        !           952:            /*
        !           953:             * process take files the finder gave us.
        !           954:             */
        !           955:            if ((tlevel == -1) && lfiles)
        !           956:                startlfile();
        !           957: 
        !           958:            debug(F100, "main: calling parser", "", 0);
        !           959:            sstate = parser(0);
        !           960:            if (sstate == 'c')          /* if MAC connect */
        !           961:                sstate = 0;
        !           962:            if (sstate)
        !           963:                proto();
        !           964:        }
        !           965:     }
        !           966: #else /* Not MAC */
        !           967: 
        !           968: /*
        !           969:   Running from an application file, or a command filename was
        !           970:   specified on the command line.
        !           971: */
        !           972:     if (*cmdfil) dotake(cmdfil);       /* Command file spec'd on cmd line */
        !           973:     while(1) {                         /* Loop getting commands. */
        !           974:        sstate = parser(0);
        !           975:         if (sstate) proto();            /* Enter protocol if requested. */
        !           976:     }
        !           977: #endif /* MAC */
        !           978: #endif /* NOICP */
        !           979: }
        !           980: 
        !           981: #ifdef DYNAMIC
        !           982: /* Allocate file i/o buffers */
        !           983: 
        !           984: char *zinbuffer, *zoutbuffer;
        !           985: 
        !           986: int
        !           987: getiobs() {
        !           988:     zinbuffer = (char *)malloc(INBUFSIZE);
        !           989:     if (!zinbuffer) return(-1);
        !           990:     zoutbuffer = (char *)malloc(OBUFSIZE);
        !           991:     if (!zoutbuffer) return(-1);    
        !           992:     debug(F100,"getiobs ok","",0);
        !           993:     return(0);
        !           994: }
        !           995: #endif /* DYNAMIC */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.