Annotation of coherent/g/usr/bin/ckermit/ckcmai.c, revision 1.1.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.