My program ran fine under cygwin 1.5 as well as many versions of linux including
mandriva 2009, mandriva 2009.1 and mandriva 2010.0

When compiled with
gcc cal.c -o cal
and run with
cal 2009
I get a segmentation fault.
When I uncomment line 62, the program runs successfully.

I have had other problems with recent versions of cygwin 1.7 which makes me suspect
some kind of error outside my programs.

thanks,
jeff
Cygwin Configuration Diagnostics
Current System Time: Tue Dec 01 17:28:15 2009

Windows XP Professional Ver 5.1 Build 2600 Service Pack 3

Path:   C:\WINDOWS\system32
        C:\WINDOWS
        C:\WINDOWS\System32\Wbem
        C:\Program Files\ATI Technologies\ATI.ACE\Core-Static
        c:\cygwin\bin
        c:\cygwin\usr\local\bin
        u:\j\bin
        C:\WINDOWS\system32\WindowsPowerShell\v1.0
        C:\PROGRA~1\DISKEE~1\DISKEE~1\
        C:\Program Files\Universal Extractor
        C:\Program Files\Universal Extractor\bin
        C:\Program Files\QuickTime\QTSystem\

Output from c:\cygwin\bin\id.exe
UID: 1003(jdeifik)  GID: 513(None)
0(root)             544(Administrators) 545(Users)          513(None)

SysDir: C:\WINDOWS\system32
WinDir: C:\WINDOWS

HOME = 'u:\j'
Path = 'C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program 
Files\ATI 
Technologies\ATI.ACE\Core-Static;c:\cygwin\bin;c:\cygwin\usr\local\bin;u:\j\bin;C:\WINDOWS\system32\WindowsPowerShell\v1.0;C:\PROGRA~1\DISKEE~1\DISKEE~1\;C:\Program
 Files\Universal Extractor;C:\Program Files\Universal Extractor\bin;C:\Program 
Files\QuickTime\QTSystem\'

ALLUSERSPROFILE = 'C:\Documents and Settings\All Users'
APPDATA = 'U:\Documents and Settings\jdeifik\Application Data'
CLASSPATH = '.;C:\Program Files\Java\jre6\lib\ext\QTJava.zip'
CLIENTNAME = 'Console'
CommonProgramFiles = 'C:\Program Files\Common Files'
COMPUTERNAME = 'PHENOMII'
ComSpec = 'C:\WINDOWS\system32\cmd.exe'
CVSROOT = 'u:\cvsroot'
FP_NO_HOST_CHECK = 'NO'
HOMEDRIVE = 'U:'
HOMEPATH = '\Documents and Settings\jdeifik'
Isuser = 'U:\Documents and 
Settings\jdeifik\LOCALS~1\Temp\{93D52C87-BDD8-4B78-BCD2-09D5FC34E8DA}\{BCE9F441-9027-4911-82E0-5FB28057897D}\_isuser.dll'
LOGONSERVER = '\\PHENOMII'
NUMBER_OF_PROCESSORS = '4'
OS = 'Windows_NT'
PATHEXT = '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.PSC1'
PROCESSOR_ARCHITECTURE = 'x86'
PROCESSOR_IDENTIFIER = 'x86 Family 16 Model 4 Stepping 2, AuthenticAMD'
PROCESSOR_LEVEL = '16'
PROCESSOR_REVISION = '0402'
ProgramFiles = 'C:\Program Files'
PROMPT = '$P$G'
QTJAVA = 'C:\Program Files\Java\jre6\lib\ext\QTJava.zip'
SamDir = 'SINSTDIR'
SESSIONNAME = 'Console'
SystemDrive = 'C:'
SystemRoot = 'C:\WINDOWS'
TEMP = 'U:\DOCUME~1\jdeifik\LOCALS~1\Temp'
TMP = 'U:\DOCUME~1\jdeifik\LOCALS~1\Temp'
USERDOMAIN = 'PHENOMII'
USERNAME = 'jdeifik'
USERPROFILE = 'U:\Documents and Settings\jdeifik'
VBOX_INSTALL_PATH = 'C:\Program Files\Sun\VirtualBox\'
windir = 'C:\WINDOWS'

HKEY_CURRENT_USER\Software\Cygnus Solutions\Cygwin
HKEY_CURRENT_USER\Software\Cygnus Solutions\Cygwin\mounts v2
HKEY_CURRENT_USER\Software\Cygnus Solutions\Cygwin\Program Options
HKEY_CURRENT_USER\Software\Cygwin
HKEY_CURRENT_USER\Software\Cygwin\Program Options
HKEY_CURRENT_USER\Software\Cygwin\setup
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MenuOrder\Start
 Menu\Programs\Cygwin
  (default) = (unsupported type)
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MenuOrder\Start
 Menu\Programs\_Open_Source\Cygwin
  (default) = (unsupported type)
HKEY_LOCAL_MACHINE\SOFTWARE\Cygnus Solutions\Cygwin
HKEY_LOCAL_MACHINE\SOFTWARE\Cygnus Solutions\Cygwin\mounts v2
  (default) = '/cygdrive'
  cygdrive flags = 0x00000022
HKEY_LOCAL_MACHINE\SOFTWARE\Cygnus Solutions\Cygwin\mounts v2\/
  (default) = 'C:\cygwin'
  flags = 0x0000000a
HKEY_LOCAL_MACHINE\SOFTWARE\Cygnus Solutions\Cygwin\mounts v2\/usr/bin
  (default) = 'C:\cygwin/bin'
  flags = 0x0000000a
HKEY_LOCAL_MACHINE\SOFTWARE\Cygnus Solutions\Cygwin\mounts v2\/usr/lib
  (default) = 'C:\cygwin/lib'
  flags = 0x0000000a
HKEY_LOCAL_MACHINE\SOFTWARE\Cygnus Solutions\Cygwin\Program Options
HKEY_LOCAL_MACHINE\SOFTWARE\Cygwin
HKEY_LOCAL_MACHINE\SOFTWARE\Cygwin\Installations
  (default) = '\??\c:\cygwin'
HKEY_LOCAL_MACHINE\SOFTWARE\Cygwin\Program Options
HKEY_LOCAL_MACHINE\SOFTWARE\Cygwin\setup
  (default) = 'C:\cygwin'

obcaseinsensitive set to 1

Cygwin installations found in the registry:
  System: Key: c5e39b7a9d22bafb Path: c:\cygwin

a:  fd             N/A    N/A                    
c:  hd  NTFS     24003Mb  69% CP CS UN PA FC     OCZ_Xp
d:  cd             N/A    N/A                    
j:  hd  NTFS    715794Mb  43% CP CS UN PA FC     sea_1.5a_mp3
k:  hd  NTFS    883865Mb  83% CP CS UN PA FC     Hit_1_av
l:  hd  NTFS    715002Mb  52% CP CS UN PA FC     sea_1_5a_os
m:  hd  NTFS   1430797Mb  75% CP CS UN PA FC     Sea_1.5b_tv
p:  cd             N/A    N/A                    
u:  hd  NTFS     70001Mb  54% CP CS UN PA FC     Hit_1_User
w:  fd             N/A    N/A                    
x:  fd             N/A    N/A                    
y:  fd             N/A    N/A                    
z:  fd             N/A    N/A                    

c:\cygwin        /          system  binary,auto
c:\cygwin\bin    /usr/bin   system  binary,auto
c:\cygwin\lib    /usr/lib   system  binary,auto
cygdrive prefix  /cygdrive  user    binary,auto

Found: c:\cygwin\bin\awk.exe
 -> c:\cygwin\bin\gawk.exe
Found: c:\cygwin\bin\bash.exe
Found: c:\cygwin\bin\cat.exe
Found: c:\cygwin\bin\cp.exe
Found: c:\cygwin\bin\cpp.exe
 -> c:\cygwin\etc\alternatives\cpp
 -> c:\cygwin\bin\cpp-4.exe
Not Found: crontab
Found: C:\WINDOWS\system32\find.exe
Found: c:\cygwin\bin\find.exe
Warning: C:\WINDOWS\system32\find.exe hides c:\cygwin\bin\find.exe
Found: c:\cygwin\bin\gcc.exe
 -> c:\cygwin\etc\alternatives\gcc
 -> c:\cygwin\bin\gcc-4.exe
Not Found: gdb
Found: c:\cygwin\bin\grep.exe
Found: c:\cygwin\bin\kill.exe
Found: c:\cygwin\bin\ld.exe
Found: c:\cygwin\bin\ls.exe
Found: c:\cygwin\bin\make.exe
Found: c:\cygwin\bin\mv.exe
Not Found: patch
Found: c:\cygwin\bin\perl.exe
Found: c:\cygwin\bin\rm.exe
Found: c:\cygwin\bin\sed.exe
Found: c:\cygwin\bin\ssh.exe
Found: c:\cygwin\bin\sh.exe
Found: c:\cygwin\bin\tar.exe
Found: c:\cygwin\bin\test.exe
Not Found: vi
Not Found: vim

  704k 2007/12/18 c:\cygwin\bin\cygaspell-15.dll - os=4.0 img=1.0 sys=4.0
                  "cygaspell-15.dll" v0.0 ts=2007/12/18 3:39
   61k 2009/03/02 c:\cygwin\bin\cygbz2-1.dll - os=4.0 img=1.0 sys=4.0
                  "cygbz2-1.dll" v0.0 ts=2009/3/1 19:11
    7k 2003/10/19 c:\cygwin\bin\cygcrypt-0.dll - os=4.0 img=1.0 sys=4.0
                  "cygcrypt-0.dll" v0.0 ts=2003/10/19 0:57
 1147k 2009/11/05 c:\cygwin\bin\cygcrypto-0.9.8.dll - os=4.0 img=1.0 sys=4.0
                  "cygcrypto-0.9.8.dll" v0.0 ts=2009/11/5 9:36
  703k 2007/12/17 c:\cygwin\bin\cygdb-4.2.dll - os=4.0 img=1.0 sys=4.0
                  "cygdb-4.2.dll" v0.0 ts=2007/12/17 3:58
  943k 2007/12/17 c:\cygwin\bin\cygdb-4.5.dll - os=4.0 img=1.0 sys=4.0
                  "cygdb-4.5.dll" v0.0 ts=2007/12/17 5:12
 1036k 2007/12/17 c:\cygwin\bin\cygdb_cxx-4.2.dll - os=4.0 img=1.0 sys=4.0
                  "cygdb_cxx-4.2.dll" v0.0 ts=2007/12/17 3:58
 1296k 2007/12/17 c:\cygwin\bin\cygdb_cxx-4.5.dll - os=4.0 img=1.0 sys=4.0
                  "cygdb_cxx-4.5.dll" v0.0 ts=2007/12/17 5:12
  118k 2008/05/09 c:\cygwin\bin\cygexpat-1.dll - os=4.0 img=1.0 sys=4.0
                  "cygexpat-1.dll" v0.0 ts=2008/5/8 21:03
   22k 2009/09/29 c:\cygwin\bin\cygffi-4.dll - os=4.0 img=1.0 sys=4.0
                  "cygffi-4.dll" v0.0 ts=2009/9/14 8:50
   40k 2009/03/01 c:\cygwin\bin\cygform-8.dll - os=4.0 img=1.0 sys=4.0
                  "cygform-8.dll" v0.0 ts=2009/2/28 22:32
   43k 2009/11/20 c:\cygwin\bin\cygform-9.dll - os=4.0 img=1.0 sys=4.0
                  "cygform-9.dll" v0.0 ts=2009/11/20 11:14
   44k 2009/09/29 c:\cygwin\bin\cyggcc_s-1.dll - os=4.0 img=1.0 sys=4.0
                  "cyggcc_s-1.dll" v0.0 ts=2009/9/14 8:42
20594k 2009/09/29 c:\cygwin\bin\cyggcj-9.dll - os=4.0 img=1.0 sys=4.0
                  "cyggcj-9.dll" v0.0 ts=2009/9/14 10:19
 8562k 2009/09/29 c:\cygwin\bin\cyggcj-noncore-9.dll - os=4.0 img=1.0 sys=4.0
                  "cyggcj-noncore-9.dll" v0.0 ts=2009/9/14 10:20
 2060k 2009/09/29 c:\cygwin\bin\cyggcj-tools-9.dll - os=4.0 img=1.0 sys=4.0
                  "cyggcj-tools-9.dll" v0.0 ts=2009/9/14 10:21
   19k 2009/02/26 c:\cygwin\bin\cyggdbm-4.dll - os=4.0 img=1.0 sys=4.0
                  "cyggdbm-4.dll" v0.0 ts=2009/2/25 23:58
    8k 2009/02/26 c:\cygwin\bin\cyggdbm_compat-4.dll - os=4.0 img=1.0 sys=4.0
                  "cyggdbm_compat-4.dll" v0.0 ts=2009/2/25 23:58
   11k 2009/09/29 c:\cygwin\bin\cyggij-9.dll - os=4.0 img=1.0 sys=4.0
                  "cyggij-9.dll" v0.0 ts=2009/9/14 10:21
  315k 2009/06/06 c:\cygwin\bin\cyggmp-3.dll - os=4.0 img=1.0 sys=4.0
                  "cyggmp-3.dll" v0.0 ts=2009/6/6 4:23
   24k 2009/09/29 c:\cygwin\bin\cyggomp-1.dll - os=4.0 img=1.0 sys=4.0
                  "cyggomp-1.dll" v0.0 ts=2009/9/14 8:51
   24k 2009/06/23 c:\cygwin\bin\cyghistory6.dll - os=4.0 img=1.0 sys=4.0
                  "cyghistory6.dll" v0.0 ts=2009/6/23 5:20
   25k 2009/07/06 c:\cygwin\bin\cyghistory7.dll - os=4.0 img=1.0 sys=4.0
                  "cyghistory7.dll" v0.0 ts=2009/7/5 7:45
  274k 2009/11/22 c:\cygwin\bin\cygicons-0.dll - os=4.0 img=1.4 sys=4.0
                  "cygicons-0.dll" v0.0 ts=2009/11/21 18:35
  981k 2009/05/30 c:\cygwin\bin\cygiconv-2.dll - os=4.0 img=1.0 sys=4.0
                  "cygiconv-2.dll" v0.0 ts=2009/5/30 12:05
   37k 2003/08/10 c:\cygwin\bin\cygintl-2.dll - os=4.0 img=1.0 sys=4.0
                  "cygintl-2.dll" v0.0 ts=2003/8/10 14:50
   31k 2005/11/20 c:\cygwin\bin\cygintl-3.dll - os=4.0 img=1.0 sys=4.0
                  "cygintl-3.dll" v0.0 ts=2005/11/19 18:04
   31k 2009/04/03 c:\cygwin\bin\cygintl-8.dll - os=4.0 img=1.0 sys=4.0
                  "cygintl-8.dll" v0.0 ts=2009/4/2 18:15
    6k 2009/09/29 c:\cygwin\bin\cygjvm.dll - os=4.0 img=1.0 sys=4.0
                  "cygjvm.dll" v0.0 ts=2009/9/14 10:21
    5k 2009/11/27 c:\cygwin\bin\cyglsa.dll - os=4.0 img=1.0 sys=4.0
                  "cyglsa.dll" v0.0 ts=2009/11/27 6:39
    9k 2009/11/27 c:\cygwin\bin\cyglsa64.dll - os=4.0 img=0.0 sys=5.2
   98k 2009/03/16 c:\cygwin\bin\cygmagic-1.dll - os=4.0 img=1.0 sys=4.0
                  "cygmagic-1.dll" v0.0 ts=2009/3/16 9:32
   21k 2009/03/01 c:\cygwin\bin\cygmenu-8.dll - os=4.0 img=1.0 sys=4.0
                  "cygmenu-8.dll" v0.0 ts=2009/2/28 22:31
   25k 2009/11/20 c:\cygwin\bin\cygmenu-9.dll - os=4.0 img=1.0 sys=4.0
                  "cygmenu-9.dll" v0.0 ts=2009/11/20 11:13
  211k 2009/06/06 c:\cygwin\bin\cygmp-3.dll - os=4.0 img=1.0 sys=4.0
                  "cygmp-3.dll" v0.0 ts=2009/6/6 4:23
  269k 2009/06/07 c:\cygwin\bin\cygmpfr-1.dll - os=4.0 img=1.0 sys=4.0
                  "cygmpfr-1.dll" v0.0 ts=2009/6/7 14:10
   66k 2009/03/01 c:\cygwin\bin\cygncurses++-8.dll - os=4.0 img=1.0 sys=4.0
                  "cygncurses++-8.dll" v0.0 ts=2009/2/28 22:39
   63k 2009/11/20 c:\cygwin\bin\cygncurses++-9.dll - os=4.0 img=1.0 sys=4.0
                  "cygncurses++-9.dll" v0.0 ts=2009/11/20 11:25
  237k 2009/03/01 c:\cygwin\bin\cygncurses-8.dll - os=4.0 img=1.0 sys=4.0
                  "cygncurses-8.dll" v0.0 ts=2009/2/28 22:28
  198k 2009/11/20 c:\cygwin\bin\cygncurses-9.dll - os=4.0 img=1.0 sys=4.0
                  "cygncurses-9.dll" v0.0 ts=2009/11/20 11:10
   11k 2009/03/01 c:\cygwin\bin\cygpanel-8.dll - os=4.0 img=1.0 sys=4.0
                  "cygpanel-8.dll" v0.0 ts=2009/2/28 22:30
   13k 2009/11/20 c:\cygwin\bin\cygpanel-9.dll - os=4.0 img=1.0 sys=4.0
                  "cygpanel-9.dll" v0.0 ts=2009/11/20 11:12
  217k 2009/11/10 c:\cygwin\bin\cygpcre-0.dll - os=4.0 img=1.0 sys=4.0
                  "cygpcre-0.dll" v0.0 ts=2009/10/25 2:42
    8k 2009/11/10 c:\cygwin\bin\cygpcreposix-0.dll - os=4.0 img=1.0 sys=4.0
                  "cygpcreposix-0.dll" v0.0 ts=2009/10/25 2:42
 1543k 2008/07/03 c:\cygwin\bin\cygperl5_10.dll - os=4.0 img=1.0 sys=4.0
                  "cygperl5_10.dll" v0.0 ts=2008/6/30 9:06
   22k 2002/06/09 c:\cygwin\bin\cygpopt-0.dll - os=4.0 img=1.0 sys=4.0
                  "cygpopt-0.dll" v0.0 ts=2002/6/8 22:45
    4k 2007/12/18 c:\cygwin\bin\cygpspell-15.dll - os=4.0 img=1.0 sys=4.0
                  "cygpspell-15.dll" v0.0 ts=2007/12/18 3:40
  155k 2009/06/23 c:\cygwin\bin\cygreadline6.dll - os=4.0 img=1.0 sys=4.0
                  "cygreadline6.dll" v0.0 ts=2009/6/23 5:20
  162k 2009/07/06 c:\cygwin\bin\cygreadline7.dll - os=4.0 img=1.0 sys=4.0
                  "cygreadline7.dll" v0.0 ts=2009/7/5 7:45
  252k 2009/11/05 c:\cygwin\bin\cygssl-0.9.8.dll - os=4.0 img=1.0 sys=4.0
                  "cygssl-0.9.8.dll" v0.0 ts=2009/11/5 9:36
    8k 2009/09/29 c:\cygwin\bin\cygssp-0.dll - os=4.0 img=1.0 sys=4.0
                  "cygssp-0.dll" v0.0 ts=2009/9/14 8:49
  771k 2009/09/29 c:\cygwin\bin\cygstdc++-6.dll - os=4.0 img=1.0 sys=4.0
                  "cygstdc++-6.dll" v0.0 ts=2009/9/14 9:19
   48k 2009/11/20 c:\cygwin\bin\cygtic-9.dll - os=4.0 img=1.0 sys=4.0
                  "cygtic-9.dll" v0.0 ts=2009/11/20 11:10
  247k 2004/12/07 c:\cygwin\bin\cygtidy-0-99-0.dll - os=4.0 img=1.0 sys=4.0
                  "cygtidy-0-99-0.dll" v0.0 ts=2004/12/7 6:34
   24k 2009/03/29 c:\cygwin\bin\cygwrap-0.dll - os=4.0 img=1.0 sys=4.0
                  "cygwrap-0.dll" v0.0 ts=2009/3/28 23:28
   64k 2009/03/02 c:\cygwin\bin\cygz.dll - os=4.0 img=1.0 sys=4.0
                  "cygz.dll" v0.0 ts=2009/3/1 17:33
 2419k 2009/11/27 c:\cygwin\bin\cygwin1.dll - os=4.0 img=1.0 sys=4.0
                  "cygwin1.dll" v0.0 ts=2009/11/27 6:38
    Cygwin DLL version info:
        DLL version: 1.7.0
        DLL epoch: 19
        DLL old termios: 5
        DLL malloc env: 28
        Cygwin conv: 181
        API major: 0
        API minor: 218
        Shared data: 5
        DLL identifier: cygwin1
        Mount registry: 3
        Cygwin registry name: Cygwin
        Program options name: Program Options
        Installations name: Installations
        Cygdrive default prefix: 
        Build date: Fri Nov 27 15:38:37 CET 2009
        Shared id: cygwin1S5


No Cygwin services found.


Cygwin Package Information
Last downloaded files to: 
Last downloaded files from: 

Package              Version
_update-info-dir     00834-1
alternatives         1.3.30c-10
aspell               0.60.5-1
aspell-en            6.0.0-1
base-cygwin          2.0-1
base-files           3.8-4
base-passwd          3.1-1
bash                 3.2.49-23
bc                   1.06-2
binutils             2.19.51-1
bzip2                1.0.5-10
coreutils            7.0-2
crypt                1.1-1
csih                 0.9.1-1
cygrunsrv            1.34-1
cygutils             1.4.1-1
cygwin               1.7.0-67
cygwin-doc           1.5-1
dash                 0.5.5.1-2
diffutils            2.8.7-1
editrights           1.01-2
expat                2.0.1-1
file                 5.00-3
findutils            4.5.4-1
gawk                 3.1.7-1
gcc-core             3.4.4-999
gcc-g++              3.4.4-999
gcc-java             3.4.4-999
gcc-mingw-core       20050522-1
gcc-mingw-g++        20050522-1
gcc-mingw-java       20050522-1
gcc4                 4.3.4-1
gcc4-core            4.3.4-1
gcc4-g++             4.3.4-1
gcc4-java            4.3.4-1
gettext              0.17-11
grep                 2.5.4-2
groff                1.19.2-2
gzip                 1.3.12-2
ipc-utils            1.0-1
less                 429-1
libaspell15          0.60.5-1
libbz2_1             1.0.5-10
libdb4.2             4.2.52.5-2
libdb4.5             4.5.20.2-2
libexpat1            2.0.1-1
libexpat1-devel      2.0.1-1
libffi4              4.3.4-1
libgcc1              4.3.4-1
libgcj-common        4.3.4-1
libgcj9              4.3.4-1
libgdbm4             1.8.3-20
libgmp3              4.3.1-3
libgomp1             4.3.4-1
libiconv2            1.13-10
libintl2             0.12.1-3
libintl3             0.14.5-1
libintl8             0.17-11
libmpfr1             2.4.1-4
libncurses-devel     5.7-16
libncurses8          5.5-10
libncurses9          5.7-16
libpcre0             8.00-1
libpopt0             1.6.4-4
libreadline6         5.2.14-12
libreadline7         6.0.3-2
libssp0              4.3.4-1
libstdc++6           4.3.4-1
libstdc++6-devel     4.3.4-1
libwrap0             7.6-20
login                1.10-10
make                 3.81-2
man                  1.6e-1
mingw-runtime        3.16-1
ncurses              5.7-16
openssh              5.3p1-1
openssl              0.9.8l-2
perl                 5.10.0-5
python               2.5.2-1
rebase               3.0.1-1
run                  1.1.12-10
sed                  4.1.5-2
tar                  1.22-1
tcltk                20080420-1
termcap              20050421-1
terminfo             5.7_20090228-10
terminfo0            5.5_20061104-10
texinfo              4.13-3
tidy                 041206-1
time                 1.7-2
tzcode               2009k-1
w32api               3.14-1
which                2.20-2
zlib                 1.2.3-10
zlib-devel           1.2.3-10
zlib0                1.2.3-10
Use -h to see help about each section
#include <stdio.h>              /* printf */
#include <stdlib.h>             /* exit */
#include <assert.h>             /* assert */


static int number(char *str);
static void cal(int m, int y, char *p, int w);
static void pstr(char *str, int n);
static int jan1(int yr);


static const char dayw[] = {" S  M Tu  W Th  F  S"};
static const char *smon[]= {
        "January", "February", "March", "April",
        "May", "June", "July", "August",
        "September", "October", "November", "December",
};

static char     string[432];


int main(int argc, char *argv[])
{
    int y, i, j;
    int m;

    if(argc < 2) {
        printf("usage: cal [month] year\n");
        exit(0);
    }
    if(argc == 2)
        goto xlong;

/* print out just month */

    m = number(argv[1]);
    if(m<1 || m>12)
        goto badarg;
    y = number(argv[2]);
    if(y<1 || y>9999)
        goto badarg;
    printf("   %s %u\n", smon[m-1], y);
    printf("%s\n", dayw);
    cal(m, y, string, 24);
    for(i=0; i<6*24; i+=24) {
        pstr(string+i, 24);
    }
    exit(0);

/* print out complete year */

xlong:
    y = number(argv[1]);
    if(y<1 || y>9999)
        goto badarg;
    printf("\n");
    printf("                            %u\n", y);
    printf("\n");
    for(i=0; i<12; i+=3) {
        fprintf(stderr,"fred is your friend %d\n", i);
        for(j=0; j<6*72; j++) {
            //printf("joe %d\n", j);
            string[j] = '\0';
        }
        fprintf(stderr,"bob 0\n");
        printf("         %.3s", smon[i]);
        printf("                        %.3s", smon[i+1]);
        printf("                       %.3s\n", smon[i+2]);
        printf("%s   %s   %s\n", dayw, dayw, dayw);
        fprintf(stderr,"bob 1\n");
        cal(i+1, y, string, 72);
        cal(i+2, y, string+23, 72);
        cal(i+3, y, string+46, 72);
        fprintf(stderr,"bob 2\n");
        for(j=0; j<6*72; j+=72) {
            pstr(string+j, 72);
        }
        fprintf(stderr,"bob 2\n");
    }
    return 0;

badarg:
    printf("Bad argument\n");
    return 1;
}


static int number(char *str)
{
    int n, c;
    char *s;

    n = 0;
    s = str;
    while((c = *s++)) {
        if(c<'0' || c>'9')
            return(0);
        n = n*10 + c-'0';
    }
    return(n);
}


static void pstr(char *str, int n)
{
    int i;
    char *s;

    s = str;
    i = n;
    while(i--)
        if(*s++ == '\0')
            s[-1] = ' ';
    i = n+1;
    while(i--)
        if(*--s != ' ')
            break;
    s[1] = '\0';
    printf("%s\n", str);
}


char    mon[] = {
        0,
        31, 29, 31, 30,
        31, 30, 31, 31,
        30, 31, 30, 31,
};


static void cal(int m, int y, char *p, int w)
{
    int d, i;
    char *s;

    s = p;
    d = jan1(y);
    mon[2] = 29;
    mon[9] = 30;

    switch((jan1(y+1)+7-d) % 7) {

      /* non-leap year */
    case 1: mon[2] = 28; break;

        /* 1752 */
    default: mon[9] = 19; break;

        /* leap year */
    case 2:     ;
    }

    for(i=1; i<m; i++) {
      d += mon[i];
    }
    d %= 7;
    s += 3*d;
    for(i=1; i<=mon[m]; i++) {
        if(i==3 && mon[m]==19) {
            i += 11;
            mon[m] += 11;
        }
        if(i > 9)
            *s = i/10+'0';
        s++;
        *s++ = i%10+'0';
        s++;
        if(++d == 7) {
            d = 0;
            s = p+w;
            p = s;
        }
    }
}


/* return day of the week of jan 1 of given year */
static int jan1(int yr)
{
int d;

  /* normal gregorian calendar one extra day per four years */
    d = 4+yr+(yr+3)/4;

  /* julian calendar regular gregorian less three days per 400 */
    if(yr > 1800) {
        d -= (yr-1701)/100;
        d += (yr-1601)/400;
    }

  /* great calendar changeover instant */
    if(yr > 1752) {
        d += 3;
    }

    return(d%7);
}

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

Reply via email to