COBOL : comment faire une pause dans le programme ?

COBOL : comment faire une pause dans le programme ? - Divers - Programmation

Marsh Posté le 10-11-2003 à 10:57:04    

salut all
 
savez vous comment faire une pause dans un prog cobol?
 
un équivalent du "delay(int)" en c par exemple
 
merci :hello:  
 
ps : cobol powaaaa [:thesphax]


Message édité par schumacher le 10-11-2003 à 10:58:03
Reply

Marsh Posté le 10-11-2003 à 10:57:04   

Reply

Marsh Posté le 10-11-2003 à 13:58:08    

Apparement, c'est pas dans le standard, mais ca peut faire partie des extensions propre a chaque plate-forme.
 
Là, un exemple trouvé sur le web, en Cobol sur machine Wang.
 

Code :
  1. This program performs a five-second pause in processing.
  2. 000100* Module CPAUSE Version xx.xx.xx Added by SCS on 06/12/XX
  3. 000200 IDENTIFICATION DIVISION.
  4. 000300 PROGRAM-ID. CPAUSE.
  5. 000400 ENVIRONMENT DIVISION.
  6. 000500 DATA DIVISION.
  7. 000600 WORKING-STORAGE SECTION.
  8. 000700 01 PAUSE-TIME PIC S9(09) BINARY VALUE 500.
  9. 001000
  10. 001100 77 FIRST-MESSAGE PIC X(70) VALUE "STARTING PAUSE
  11. 001200- "FOR 5 SECONDS.".
  12. 001300
  13. 001400 77 SECOND-MESSAGE PIC X(70) VALUE "PAUSE COMPLETE.".
  14. 001500
  15. 001600 PROCEDURE DIVISION.
  16. 001700 MAIN-PARAGRAPH.
  17. 001800 DISPLAY FIRST-MESSAGE.
  18. 001900 CALL "PAUSE" USING PAUSE-TIME.
  19. 002000 DISPLAY SECOND-MESSAGE.
  20. 002100 STOP RUN.


 
A+,


Message édité par gilou le 10-11-2003 à 13:59:00

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 10-11-2003 à 13:58:57    

putain, c'est ça du cobol ? [:mlc]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 10-11-2003 à 13:59:58    

J'y connais pas grand chose moi non plus.
 
Il y a une bonne introduction a ce langage ici: http://www.csis.ul.ie/cobol/Course/COBOLIntro.htm
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 10-11-2003 à 14:05:43    

Harkonnen a écrit :

putain, c'est ça du cobol ? [:mlc]


 
Oui, c'est pire que le PHP hein :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 10-11-2003 à 14:07:52    

antp a écrit :


 
Oui, c'est pire que le PHP hein :D


ouaip, pourtant je pensais pas qu'on pouvait faire pire !
ah si, peut etre avec Windev :D


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 10-11-2003 à 14:14:32    

Heu on peut faire pire que Cobol encore :
http://pr.fujitsu.com/jp/news/1997/Sep/netcobol.html
du Cobol sur le web :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 10-11-2003 à 14:14:53    

Harkonnen a écrit :

putain, c'est ça du cobol ? [:mlc]


Non, c'est pas du cobol çà ! C'est juste un prog qui fait rien !
 
Un vrai programme COBOL çà fait plusieurs centaines de pages de listing dont un bon tiers de déclarations.
 
Le listing du plus gros prog sur lequel j'ai bossé faisait dans les 50 Cm d'épaisseur :D  
 
C'est imbitable pour le commun des programmeurs et c'est pas du tout adapté à la visu sur écran PC.
 
Pour faire un cobol, il faut soit un écran passif, soit un lecteurs de cartes perforés !
 
Bref, c'est pas encore mort mais y'a très longtemps que çà devrait l'être :fou:


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 10-11-2003 à 14:18:43    

antp a écrit :

Heu on peut faire pire que Cobol encore :
http://pr.fujitsu.com/jp/news/1997/Sep/netcobol.html
du Cobol sur le web :D


m'enfin [:marc]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 10-11-2003 à 14:19:20    

Mara's dad a écrit :


Bref, c'est pas encore mort mais y'a très longtemps que çà devrait l'être :fou:  


un peu comme la disquette quoi :D


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 10-11-2003 à 14:19:20   

Reply

Marsh Posté le 10-11-2003 à 14:20:50    

Citation :

NetCOBOL Key Features
 
    * Generates 100% Pure Java Bytecode
    * COBOL programs can run as either a Java applet or Java application (COBOL applets subject to Java applet security)
    * Standards Compliant (Full ANSI Standard COBOL X3.23B 1989)
    * Platform independent Event Driven GUI programming extensions
    * Embedded SQL Preprocessor with JDBC support, facilitating the creation of COBOL applications/applets that can access data on DB2, Oracle, Sybase, SQL Server and other database servers.
    * Java based & network accessible COBOL file systems (Sequential, Relative, and Index)
    * EXEC HTML - allows dynamic COBOL driven web pages
    * EXEC JAVA - allows mixture of COBOL and Java source code in the same program
    * TCP/IP socket programming extensions


[:mlc]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 10-11-2003 à 14:23:41    

Citation :

* EXEC JAVA - allows mixture of COBOL and Java source code in the same program


Tu parles d'une mixture :lol:


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 10-11-2003 à 14:28:02    

Mara's dad a écrit :


Non, c'est pas du cobol çà ! C'est juste un prog qui fait rien !
 
Un vrai programme COBOL çà fait plusieurs centaines de pages de listing dont un bon tiers de déclarations.
 
Le listing du plus gros prog sur lequel j'ai bossé faisait dans les 50 Cm d'épaisseur :D  
 
C'est imbitable pour le commun des programmeurs et c'est pas du tout adapté à la visu sur écran PC.
 
Pour faire un cobol, il faut soit un écran passif, soit un lecteurs de cartes perforés !
 
Bref, c'est pas encore mort mais y'a très longtemps que çà devrait l'être :fou:  


Dans l'introduction du lien filé a Harko(bol?) :D [la mise en rouge est de moi :D]
 

Citation :

For over four decades COBOL has been the dominant programming language in the business computing domain. In that time it it has seen off the challenges of a number of other languages such as PL1, Algol68, Pascal, Modula, Ada, C, C++. All these languages have found a niche but none has yet displaced COBOL. Two recent challengers though, Java and Visual Basic, are proving to be serious contenders.
 
COBOL's dominance in underlined by the reports from the Gartner group.  
 
In 1997 they estimated that there were about 300 billion lines of computer code in use in the world. Of that they estimated that about 80% (240 billion lines) were in COBOL and 20% (60 billion lines) were written in all the other computer languages combined [Brown].  
 
In 1999 they reported that over 50% of all new mission-critical applications were still being done in COBOL and their recent estimates indicate that through 2004-2005 15% of all new applications (5 billion lines) will be developed in COBOL while 80% of all deployed applications will include extensions to existing legacy (usually COBOL) programs.  
 
Gartner estimates for 2002 are that there are about two million COBOL programmers world-wide compared to about about one million Java programmers and one million C++ programmers.


A+,


Message édité par gilou le 10-11-2003 à 14:28:27

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 10-11-2003 à 14:33:39    

gilou a écrit :


Dans l'introduction du lien filé a Harko(bol?) :D [la mise en rouge est de moi :D]
 

Citation :


In 1997 they estimated that there were about 300 billion lines of computer code in use in the world. Of that they estimated that about 80% (240 billion lines) were in COBOL and 20% (60 billion lines) were written in all the other computer languages combined [Brown].




Tu m'étonnes, vu la syntaxe du bouzin, un prog de moins de 5000 lignes risque pas de servir à grand-chose![:joce]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 10-11-2003 à 14:49:11    

C'est le problème, comparer le nombre de lignes veux pas dire grand chose !
 
En plus y doivent pas compter l'assembleur, sinon, on explose les compteurs :D


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 10-11-2003 à 16:36:46    

skeye a écrit :


Tu m'étonnes, vu la syntaxe du bouzin, un prog de moins de 5000 lignes risque pas de servir à grand-chose![:joce]

:non: la preuve qu'il faut pas 5000 lignes minimum:

Code :
  1. 000100 IDENTIFICATION DIVISION.
  2. 000200 PROGRAM-ID.     HELLOWORLD.
  3. 000300
  4. 000400*
  5. 000500 ENVIRONMENT DIVISION.
  6. 000600 CONFIGURATION SECTION.
  7. 000700 SOURCE-COMPUTER. RM-COBOL.
  8. 000800 OBJECT-COMPUTER. RM-COBOL.
  9. 000900
  10. 001000 DATA DIVISION.
  11. 001100 FILE SECTION.
  12. 001200
  13. 100000 PROCEDURE DIVISION.
  14. 100100
  15. 100200 MAIN-LOGIC SECTION.
  16. 100300 BEGIN.
  17. 100400     DISPLAY " " LINE 1 POSITION 1 ERASE EOS.
  18. 100500     DISPLAY "Hello world!" LINE 15 POSITION 10.
  19. 100600     STOP RUN.
  20. 100700 MAIN-LOGIC-EXIT.
  21. 100800     EXIT.


:D
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 10-11-2003 à 17:04:23    

antp a écrit :


 
Oui, c'est pire que le PHP hein :D

keske t'as contre le php ? :o


---------------
lecteur mp3 yvele's smilies jeux de fille
Reply

Marsh Posté le 10-11-2003 à 17:55:36    

Moi, rien, c'est Harko :o


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 10-11-2003 à 17:59:33    

Mara's dad a écrit :


En plus y doivent pas compter l'assembleur, sinon, on explose les compteurs :D


on peut coller de l'assembleur dans ce bordel ? [:xx_xx]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 10-11-2003 à 18:01:43    

Harkonnen a écrit :


on peut coller de l'assembleur dans ce bordel ? [:xx_xx]


 
ouais avec la syntaxe cobol bien sur [:dawa]
 
 
ASM-SECTION
ALIGNEMENT NONE
MOVE EBX TO EAX
CALL EBX  
PREPARE FOOD FOR THE CAT

Reply

Marsh Posté le 10-11-2003 à 18:10:12    

est ce que tout les programmeurs cobol ont la touche caplock bloqué? [:dawa]


---------------
lecteur mp3 yvele's smilies jeux de fille
Reply

Marsh Posté le 10-11-2003 à 19:55:27    

forummp3 a écrit :

est ce que tout les programmeurs cobol ont la touche caplock bloqué? [:dawa]


YES, EN COBOL TOUS LES MOTS CLEF SONT EN MAJ.
TOUS LES NOMS SYMBOLIQUES SONT AUSSI EN MAJ.
BREF, LES CARACTERES AUTORISES SONR TRES RESTEINTS.


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 10-11-2003 à 20:05:25    

C4EST UN COUP A DEVENIR HISTERIQUE CETTE HISTOIRE DE CAPLOCK BLOQU2 /D


---------------
lecteur mp3 yvele's smilies jeux de fille
Reply

Marsh Posté le 10-11-2003 à 20:06:55    

A ton avis pourquoi plus personne ne veut en faire ?


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 10-11-2003 à 20:09:04    

ILS ONT CASS2 LE CAPLOCK A FORCE ? [/DAWA]


---------------
lecteur mp3 yvele's smilies jeux de fille
Reply

Marsh Posté le 10-11-2003 à 22:47:31    

Mara's dad a écrit :

A ton avis pourquoi plus personne ne veut en faire ?


 
Faut dire que des que tu regardes de pres un programme, :sweat: ca fait vraiment archaique.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 10-11-2003 à 22:50:03    

Mara's dad a écrit :

A ton avis pourquoi plus personne ne veut en faire ?


 
Parceque ras le bol de mettre une * en colonne 7 pour signaler un commentaire


Message édité par kadreg le 10-11-2003 à 22:50:18

---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 10-11-2003 à 22:54:26    

gilou a écrit :


 
Faut dire que des que tu regardes de pres un programme, :sweat: ca fait vraiment archaique.
 
A+,


rien que les numéros de ligne, on se croirait sur Apple II :D


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 10-11-2003 à 23:18:23    

Le cobol, c'est tres lisible par rapport au JCL, IMHO.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 10-11-2003 à 23:19:52    

Quoi, le JCL c'est limpide comme tout !
Trop puissant ce truc :D


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 10-11-2003 à 23:22:31    

Hem...
 

Code :
  1. //PDCRTSJ2 JOB SIMOTIME,ACCOUNT,CLASS=1,MSGCLASS=0,NOTIFY=CSIP1
  2. //* *******************************************************************
  3. //*                   This program is provided by:                    *
  4. //*                    SimoTime Enterprises, LLC                      *
  5. //*           (C) Copyright 1987-2003 All Rights Reserved             *
  6. //*                                                                   *
  7. //*             Web Site URL:   http://www.simotime.com               *
  8. //*                   e-mail:   helpdesk@simotime.com                 *
  9. //* *******************************************************************
  10. //*
  11. //* Subject: Define a PDS using the IEFBR14 with a DD Statement
  12. //* Author:  SimoTime Enterprises
  13. //* Date:    January 1,1998
  14. //*
  15. //* Technically speaking, IEFBR14 is not a utility program because it
  16. //* does nothing. The name is derived from the fact that it contains
  17. //* two assembler language instruction. The first instruction clears
  18. //* register 15 (which sets the return code to zero) and the second
  19. //* instruction is a BR 14 which performs an immediate return to the
  20. //* operating system.
  21. //*
  22. //* IEFBR14's only purpose is to help meet the requirements that a
  23. //* job must have at least one EXEC statement. The real purpose is to
  24. //* allow the disposition of the DD statement to occur.
  25. //*
  26. //* For example, the following DISP=(NEW,CATLG) will cause the
  27. //* specified DSN (i.e. PDS) to be allocated.
  28. //* Note: a PDS may also be referred to as a library.
  29. //*
  30. //* The following Partitioned Data Sets are created.
  31. //*
  32. //* SIMOTIME.DEMO.CNTL
  33. //* SIMOTIME.DEMO.COBOL
  34. //* SIMOTIME.DEMO.COBCPY1
  35. //* SIMOTIME.DEMO.ASM
  36. //* SIMOTIME.DEMO.ASMCPY1
  37. //* SIMOTIME.DEMO.ASMMAC1
  38. //* SIMOTIME.DEMO.BMS
  39. //* SIMOTIME.DEMO.MFS
  40. //* SIMOTIME.DEMO.DBD
  41. //* SIMOTIME.DEMO.PSB
  42. //* SIMOTIME.DEMO.OBJECT
  43. //* SIMOTIME.DEMO.LOADLIB1
  44. //* SIMOTIME.DEMO.PROCLIB1
  45. //*
  46. //* The UNIT and VOL are not required for SMS managed data sets.
  47. //* UNIT=SYSDA,VOL=SER=MFILB1,
  48. //*
  49. //CRTPDSX1 EXEC PGM=IEFBR14
  50. //*
  51. //*        The following is for JCL members and PROC library...
  52. //*
  53. //DD01     DD  DISP=(NEW,CATLG),DSN=SIMOTIME.DEMO.CNTL,
  54. //             STORCLAS=MFI,
  55. //             SPACE=(TRK,(45,15,50)),
  56. //             DCB=(RECFM=FB,LRECL=80,BLKSIZE=800,DSORG=PO)
  57. //*
  58. //DD13     DD  DISP=(NEW,CATLG),DSN=SIMOTIME.DEMO.PROCLIB1,
  59. //             STORCLAS=MFI,
  60. //             SPACE=(TRK,(45,15,50)),
  61. //             DCB=(RECFM=FB,LRECL=80,BLKSIZE=800,DSORG=PO)
  62. //*
  63. //*        The following is for COBOL members and Copybooks...
  64. //*
  65. //DD02     DD  DISP=(NEW,CATLG),DSN=SIMOTIME.DEMO.COBOL,
  66. //             STORCLAS=MFI,
  67. //             SPACE=(TRK,(45,15,50)),
  68. //             DCB=(RECFM=FB,LRECL=80,BLKSIZE=800,DSORG=PO)
  69. //DD03     DD  DISP=(NEW,CATLG),DSN=SIMOTIME.DEMO.COBCPY1,
  70. //             STORCLAS=MFI,
  71. //             SPACE=(TRK,(45,15,50)),
  72. //             DCB=(RECFM=FB,LRECL=80,BLKSIZE=800,DSORG=PO)
  73. //*
  74. //*        The following is for Assembler, Copybooks & Macro files...
  75. //*
  76. //DD04     DD  DISP=(NEW,CATLG),DSN=SIMOTIME.DEMO.ASM,
  77. //             STORCLAS=MFI,
  78. //             SPACE=(TRK,(45,15,50)),
  79. //             DCB=(RECFM=FB,LRECL=80,BLKSIZE=800,DSORG=PO)
  80. //DD05     DD  DISP=(NEW,CATLG),DSN=SIMOTIME.DEMO.ASMCPY1,
  81. //             STORCLAS=MFI,
  82. //             SPACE=(TRK,(45,15,50)),
  83. //             DCB=(RECFM=FB,LRECL=80,BLKSIZE=800,DSORG=PO)
  84. //DD06     DD  DISP=(NEW,CATLG),DSN=SIMOTIME.DEMO.ASMMAC1,
  85. //             STORCLAS=MFI,
  86. //             SPACE=(TRK,(45,15,50)),
  87. //             DCB=(RECFM=FB,LRECL=80,BLKSIZE=800,DSORG=PO)
  88. //*
  89. //*        The following is for CICS Basic Mapping Support...
  90. //*
  91. //DD07     DD  DISP=(NEW,CATLG),DSN=SIMOTIME.DEMO.BMS,
  92. //             STORCLAS=MFI,
  93. //             SPACE=(TRK,(45,15,50)),
  94. //             DCB=(RECFM=FB,LRECL=80,BLKSIZE=800,DSORG=PO)
  95. //*
  96. //*        The following is for IMS members...
  97. //*
  98. //DD08     DD  DISP=(NEW,CATLG),DSN=SIMOTIME.DEMO.MFS,
  99. //             STORCLAS=MFI,
  100. //             SPACE=(TRK,(45,15,50)),
  101. //             DCB=(RECFM=FB,LRECL=80,BLKSIZE=800,DSORG=PO)
  102. //DD09     DD  DISP=(NEW,CATLG),DSN=SIMOTIME.DEMO.DBD,
  103. //             STORCLAS=MFI,
  104. //             SPACE=(TRK,(45,15,50)),
  105. //             DCB=(RECFM=FB,LRECL=80,BLKSIZE=800,DSORG=PO)
  106. //DD10     DD  DISP=(NEW,CATLG),DSN=SIMOTIME.DEMO.PSB,
  107. //             STORCLAS=MFI,
  108. //             SPACE=(TRK,(45,15,50)),
  109. //             DCB=(RECFM=FB,LRECL=80,BLKSIZE=800,DSORG=PO)
  110. //*
  111. //*        The following is for OBJECT members...
  112. //*
  113. //DD11     DD  DISP=(NEW,CATLG),DSN=SIMOTIME.DEMO.OBJECT,
  114. //             STORCLAS=MFI,
  115. //             SPACE=(TRK,(45,15,50)),
  116. //             DCB=(RECFM=FB,LRECL=80,BLKSIZE=800,DSORG=PO)
  117. //*
  118. //*        The following is for LOAD members...
  119. //*
  120. //DD12     DD  DISP=(NEW,CATLG),DSN=SIMOTIME.DEMO.LOADLIB1,
  121. //             STORCLAS=MFI,
  122. //             SPACE=(TRK,(45,15,50)),
  123. //             DCB=(RECFM=FB,LRECL=80,BLKSIZE=800,DSORG=PO)
  124. //*


 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 10-11-2003 à 23:25:36    

Ben quoi t'as les libs, les fichiers en entrées, ceux en sortie, ce qu'il faut en faire si tout va bien ou si çà plante.
Rien que de très profesionnel quoi !
En plus y'a plein de commentaires.


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 10-11-2003 à 23:28:03    

Aussi lisible que de l'assembleur RISC IMHO: Si tu n'ecris que ca a longueur de journée, ca te semble tres lisible, sinon, non.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 10-11-2003 à 23:28:16    

bon on sort du brainfuck ou du whitespace pour que tout le monde il soit d'accord ?

Reply

Marsh Posté le 10-11-2003 à 23:38:03    

gilou a écrit :

Aussi lisible que de l'assembleur RISC IMHO: Si tu n'ecris que ca a longueur de journée, ca te semble tres lisible, sinon, non.
A+,


Bien sûr je suis d'accord, mais c'est quand même pas mal de pouvoir maitriser ce que le prog va faire des fichiers.
Py c'est quand même un language d'ingé système...
Celà dis, si je ne regrète pas 1 seconde le COBOL, y'a des jours ou le JCL me manque ( et le REXX aussi ). Je sais pas, mais je trouvais çà très très précis comme gestion de fichiers. En plus avec une bonne doc de chez IBM c'est un vrai plaisir. J'ai toujours pensé que tous les éditeurs devairait faire des docs du même niveau que celle d'IBM.


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 10-11-2003 à 23:38:22    

chrisbk a écrit :

bon on sort du brainfuck ou du whitespace pour que tout le monde il soit d'accord ?


Nan :kaola:


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 10-11-2003 à 23:40:39    

Si quelqu'un a du code source Multics en PL/I avec des procedures a points d'entrée multiples, ca serait un complement utile a ce topic :D
 
Ah si, j'en ai trouvé, la quintessence du code spaghetti avec des call par nom a des etiquettes, et des go to...
Vous remarquerez que tout est mis dans une procedure unique :D

Code :
  1. /* Created and modified by J. M. Grochow, MIT Information Processing Services */
  2. /* The game of _m_o_o is a fairly simple game played according theto the following algorithm:
  3.    1. The computer selects four random digits (0 to 9).
  4.    2. The player attempts to guess these digits, in order.
  5.    3. The computer gives the player information as to the correctness of his guess.
  6.    a. For every digit guessed in order, a "Bull" is scored.
  7.    b. For every digit guessed out of order, a "Cow" is scored.
  8.    4. The player continues making guesses until four Bulls are scored indicating that
  9.    he has guessed all four digits correctly.
  10.    A short example should help:
  11.    The computer picks 1 2 3 4.
  12.    Player: 5 6 7 8. Score: nothing.
  13.    Player: 1 1 1 1. Score: 1 Bull, 3 Cows.
  14.    Player: 2 3 4 1. Score: 4 Cows.
  15.    Player: 1 2 4 3. Score: 2 Bulls, 2 Cows.
  16.    Player: 1 2 3 4. Score: 4 Bulls. The game is over.
  17.    To play moo, type the following command:
  18.    moo
  19.    To play moo without having your score recorded on the ladder, type:
  20.    moo -d
  21.    To cause the ladder to be recomputed, type:
  22.    moorank
  23.    To see the ladder:
  24.    mooprint
  25.    To see a particular entry in the ladder, e.g. Jones' entry:
  26.    mooprint Jones
  27.     */
  28. /*   DECLARATIONS */
  29. foo: procedure;
  30.           dcl clock_ external entry returns(fixed bin(71));
  31.           dcl person char(22) aligned;                      /* for storing person's name */
  32.           dcl project char(9) aligned;                      /* for benefit of user_info_ */
  33.           dcl account char(32) aligned;                     /* ditto */
  34.           dcl (b,c) fixed bin(35);                          /* bull and cow counters */
  35.           dcl alpha char(26) aligned int static init("ABCDEFGHIJKLMNOPQRSTUVWXYZ" );
  36.           dcl (s1, s2) char(4) aligned;                     /* output strings */
  37.           dcl x(4) fixed bin(35);                           /* player's four digit input */
  38.           dcl count fixed bin(35) int static;               /* number of tries */
  39.           dcl array(4) fixed bin(35);                       /* storage for random digits */
  40.           dcl arrayf(20) float binary(27);                  /* for generating random numbers */
  41.           dcl arrayff(20) based(arrayp) fixed bin(35);      /* overlay */
  42.           dcl printsw fixed bin(35) int static init(0);     /* switch to indicate print program */
  43.           dcl arrayp ptr;                                   /* pointer to generated array */
  44.           dcl timea(0: 1) based(lp1) fixed bin(35);         /* overlay for 71 bit number */
  45.           dcl (i, j, k) fixed bin(35);                      /* do loop indices */
  46.           dcl (bf, cf) float;                               /* comparison temporaries */
  47.           dcl flag fixed bin(35);                           /* flag for ask_ */
  48.           dcl avg float;                                    /* for printing the ladder */
  49.           dcl time fixed bin(71);                           /* for keeping the time */
  50.           dcl arg based(ap) char(al);                       /* argument */
  51.           dcl args char(20) aligned;                        /* argument storage */
  52.           dcl ap ptr, al fixed bin(35);
  53.           dcl (random_$uniform_seq, random_$set_seed, condition_) ext entry;
  54.           dcl (listen_$unclaimed_signal, ios_$abort) external entry;
  55.           dcl (ioa_$nnl, ioa_, cu_$arg_ptr, get_group_id_, com_err_) ext entry;
  56.           dcl (hcs_$initiate, hcs_$terminate_noname, term_$refname) ext entry;
  57.           dcl (ask_$ask_clr, ask_$ask_, ask_$ask_prompt, ask_$ask_int) ext entry;
  58.           dcl moo$mooquit external entry;
  59.           dcl (ask_$ask_cint, user_info_) ext entry;
  60.           dcl 1 l based(ladder) aligned,                    /* ladder declaration */
  61.           2 max fixed bin(35),
  62.           2 num fixed bin(35),
  63.           2 games fixed bin(35),
  64.           2 lowavg float,
  65.           2 lowscore fixed bin(35),
  66.           2 lsperson char(20) aligned,
  67.           2 message char(24) aligned,
  68.           2 e(1000) char(48);
  69.           dcl 1 e based(lp) aligned,                        /* entry declaration */
  70.           2 person char(24) aligned,                        /* name */
  71.           2 space fixed bin(35),
  72.           2 totaltime fixed bin(35),
  73.           2 ngames fixed bin(35),
  74.           2 totscore fixed bin(35),
  75.           2 avg float,
  76.           2 rank fixed bin(35);
  77.           dcl (ladder, lp, lp1) ptr internal static init(null);
  78. /*   */
  79. /* set up a special "quit" handler so that "moo" can take appropriate action */
  80.           printsw = 0;                                      /* for benefit of quit handler */
  81.           call hcs_$terminate_name("term_",i);
  82.           call term_$refname("condition_",i);
  83.           call condition_("quit", moo$mooquit);             /* field all quits */
  84.           count = 0;
  85.           call term_$refname("ask_",i);
  86. /*        cu_ and ioa_ are in bound_command_loop_ and can't be terminated. */
  87. /*        clock_ is in bound_sss_wired_ and can't be terminated. */
  88. /* see if an argument is typed (-d or -x) */
  89.           call cu_$arg_ptr(1, ap, al, flag);
  90.           if flag ^= 0 then do;
  91.                call ioa_("For instructions, type ""print >udd>sa>g>moo.instr""" );
  92.                call ioa_("To see the ladder, type ""moo$mooprint""" );
  93.                call ioa_("To avoid these comments in the future, type ""moo -x""^/" );
  94.           end;
  95.           else if arg = "-d" then do;
  96.                ladder = null;
  97.                call ioa_("Demonstration: no ladder update.^/" );
  98.                go to noladder;
  99.           end;
  100. /* now initiate the ladder and find the person's entry or get his name */
  101.           call hcs_$initiate(">udd>m>pg>p", substr(alpha,6,1)||substr(alpha,15,1)||substr(alpha,15,1), "", 0, 1, ladder
  102. i);
  103. noladder:
  104.           call term_$refname("user_info_", i);
  105.           call user_info_(person, project, account);
  106.           if (index(alpha, substr(person, 1, 1)) = 0) then do;
  107. getname:       call ask_$ask_("Please type your name: ", person);
  108.                if person = "q" then go to returnt;
  109.                if person = "quit" then go to returnt;
  110.                if substr(person, 1, 3) = "Moo" then go to getname;
  111.           end;
  112.           if ladder ^= null then do;
  113.                if ladder->l.lowavg = 0 then ladder->l.lowavg = 1.0e2;
  114.                if ladder->l.lowscore = 0 then ladder->l.lowscore = 100;
  115.                do i = 1 to ladder->l.num;
  116.                     lp = addr(ladder->l.e(i));
  117.                     if person = lp->e.person then go to top;
  118.                end;
  119.                i, ladder->l.num = ladder->l.num + 1;
  120.                lp = addr(ladder->l.e(i));
  121.                lp->e.person = person;
  122.                lp->e.rank = 0;
  123.           end;
  124. /* get the time and get the four random numbers */
  125. top:     
  126.           time = clock_;
  127.           call term_$refname("random_$set_seed", i);
  128.           call term_$refname("random_$uniform_seq", i);
  129.           call random_$set_seed(addr(time)->timea(1));
  130.           call random_$uniform_seq(arrayf, 20);
  131.           arrayp = addr(arrayf);
  132.           do i = 1 to 4;
  133.                flag = 1;
  134.                array(i) = mod(arrayff(21-i), 10);
  135. gen:           do j = 1 to i-1;
  136.                     if array(i) = array(j) then do;
  137.                          if flag = 17 then go to top;
  138.                          array(i) = mod(arrayff(flag), 10);
  139.                          flag = flag + 1;
  140.                          go to gen;
  141.                     end;
  142.                end;
  143.           end;
  144. /* do some initialization */
  145.           count = 0;
  146.           call ask_$ask_clr;
  147. /* do the basic loop for each move - get the numbers, check them, and find bulls and cows */
  148. beginrun: s1, s2 = " ";
  149.           call ask_$ask_prompt("Type number: " );
  150.           do i = 1 to 4;                                    /* now get each of the four numbers guessed and store */
  151.                call ask_$ask_cint(x(i), flag);
  152.                if flag = -1 then do;                        /* an alpha character was typed instead of numeric */
  153.                     if ladder = null then return;           /* demonstration mode: return */
  154.                     if count = 0 then go to returnt;        /* if first guess then return with no penalty */
  155.                     call ioa_("It is antisocial to try to leave a game which is not going well. Please continue." );
  156.                     go to continue;                         /* he is not permitted to quit in the middle */
  157.                end;
  158.              if flag = 0 then if i ^= 5 then call ask_$ask_int("Type ommitted ^d digits: ", x(i), 5-i);
  159.                if x(i) > 9 then do;
  160. continue:           call ioa_("All numbers must be between 0 and 9. Retype this move." );
  161.                     go to beginrun;
  162.                end;
  163.           end;
  164. /* now determine score on this move */
  165.           count = count+1;
  166.           b, c = 1;
  167. /* record bulls and cows */
  168.           do i = 1 to 4;
  169.           if array(i) = x(i) then do; substr(s1, b, 1) = "B"; b = b+1; end;
  170.                do j = 1 to 4;
  171.                if j ^= i then if array(j) = x(i) then do; substr(s2, c, 1) = "C"; c = c+1; end;
  172.                end;
  173.           end;
  174. /* now print his score for this guess */
  175.           call ioa_("^a,^a", s1, s2);
  176. /* if all four bulls are found, then do the appropriate ladder updating */
  177.           if b = 5 then do;
  178.                time = clock_ - time;                        /* compute time for this game */
  179.                if ladder ^= null then do;
  180.                     lp->e.ngames = lp->e.ngames +1;
  181.                     ladder->l.games = ladder->l.games + 1;
  182.                     if mod(ladder->l.games, 1000) = 0 then
  183.                     call ioa_("^RCongratulations: you have just played the ^dth game of moo.^B", ladder->l.games);
  184.                     lp->e.totscore = lp->e.totscore + count;
  185.                     lp->e.avg = (lp->e.totscore + 0.0e0) / lp->e.ngames;
  186.                     lp->e.totaltime = lp->e.totaltime + divide(time, 1000000, 35, 0);
  187.                     if lp->e.avg < ladder->l.lowavg then do;
  188.                          if lp->e.ngames >= 10 then ladder->l.lowavg = lp->e.avg;
  189.                     end;
  190.                     if count < ladder->l.lowscore then do;
  191.                          ladder->l.lowscore = count;
  192.                          ladder->l.lsperson = person;
  193.                     end;
  194.                end;
  195.                call ioa_("^d attempts, ^d seconds.^/", count, (divide(time, 1000000, 35, 0)));
  196.                go to top;
  197.           end;
  198. /* go and initiate another game */
  199.           go to beginrun;
  200. /* terminate ladder before returning */
  201. returnt:  if ladder ^= null then call hcs_$terminate_noname(ladder, flag);
  202.           return;
  203. /*   */
  204. /* entry point to print the ladder or your entry in it */
  205. mooprint: entry;
  206. /* field all quits */
  207.           printsw = 1;
  208.           call condition_("quit", moo$mooquit);             /* field all quits */
  209.           on zerodivide;
  210. /* initiate the ladder and see if there are any arguments */
  211.           call hcs_$initiate(">udd>m>pg>p", substr(alpha,6,1)||substr(alpha,15,1)||substr(alpha,15,1), "", 0, 1, ladder
  212. i);
  213.           if ladder = null then do;
  214.                call com_err_(i, "mooprint", "" );
  215.                go to returnt;
  216.           end;
  217.           call cu_$arg_ptr(1, ap, al, c);
  218.           if c = 0 then do;
  219.                args = arg;
  220.                if args = "nosort" then c = 1;
  221.                else go to sortblock;
  222.           end;
  223. /* print the header */
  224.           call ioa_("^/^a", ladder->l.message);
  225.           call ioa_("Number of people: ^d^-^-Number of games: ^d", ladder->l.num, ladder->l.games);
  226.           call ioa_("Lowest sustained avg.: ^5.2f^-^-Lowest single time score: ^d (by ^a)^/",
  227.           ladder->l.lowavg, ladder->l.lowscore, ladder->l.lsperson);
  228.           call ioa_("Rank   Avg.  Avg.T  Games  Score  Name" );
  229.           go to sortblock;
  230. /*   */
  231. /* entry point to do ranking */
  232. moorank:  entry;
  233. /* field all quits */
  234.           printsw = -1;
  235.           call condition_("quit", moo$mooquit);             /* field all quits */
  236. /* initiate the ladder */
  237.           call hcs_$initiate(">udd>m>pg>p", substr(alpha,6,1)||substr(alpha,15,1)||substr(alpha,15,1), "", 0, 1, ladder
  238. j);
  239.           if ladder = null then do;
  240.                call com_err_(j, "moorank", "" );
  241.                go to returnt;
  242.           end;
  243. /* a special block to do the sorting - allocates an array to help */
  244. sortblock: begin; dcl nums(3000) fixed bin(35);
  245.                do i = 1 to ladder->l.num;
  246.                     nums(i) = i;
  247.                end;
  248. /* check if this is print with no sorting necessary */
  249.                if printsw = 1 then if c = 1 then go to print1;
  250. /* routine to perform interchange sort using the array nums to store array indices */
  251. sortl:         j = 0;
  252.                do i = 1 to ladder->l.num-1;
  253.                     lp = addr(ladder->l.e(nums(i))); lp1 = addr(ladder->l.e(nums(i+1)));
  254.                     if printsw = 1 then do;
  255.                          if lp->e.rank = 0 then bf = 3000;
  256.                          else bf = lp->e.rank;
  257.                          if lp1->e.rank = 0 then cf = 3000;
  258.                          else cf = lp1->e.rank;
  259.                     end;
  260.                     else do;
  261.                          bf = lp->e.avg;
  262.                          cf = lp1->e.avg;
  263.                     end;
  264.                     if bf > cf then do;
  265.                          k = nums(i);
  266.                          nums(i) = nums(i+1);
  267.                          nums(i+1) = k;
  268.                          j = 1;
  269.                     end;
  270.                end;
  271.                if j ^= 0 then go to sortl;
  272. /* if this is the print program, then print out the ladder */
  273. print1:        if printsw = 1 then do;
  274.                     do i = 1 to ladder->l.num;
  275.                          lp = addr(ladder->l.e(nums(i)));
  276.                          if c = 0 then if args ^= lp->e.person then go to prendl;
  277.                          flag = divide(lp->e.totaltime, lp->e.ngames, 35, 0);
  278.                          call ioa_(" ^3d  ^5.2f  ^5d   ^4d  ^5d  ^a",
  279.                          lp->e.rank, lp->e.avg, flag, lp->e.ngames, lp->e.totscore, lp->e.person);
  280.                          if c = 0 then go to returnt;
  281. prendl:             end;
  282.                     call ioa_("" );
  283.                     go to returnt;
  284.                end;
  285. /* if this is the rank program, then put in the new ranking */
  286.                avg = 1.0e2;                                 /* set it high */
  287.                flag = 0;                                    /* to account for those with 0 average */
  288.                do i = 1 to ladder->l.num;
  289.                     lp = addr(ladder->l.e(nums(i)));
  290.                     if (lp->e.avg = 0.0e0) | (lp->e.ngames < 5) then do;
  291.                          lp->e.rank = 0;
  292.                          flag = flag + 1;
  293.                          go to endloop;
  294.                     end;
  295.                     if lp->e.ngames > 10 then if lp->e.avg < avg then avg = lp->e.avg;
  296.                     lp->e.rank = i - flag;
  297.                     do j = i to 1 by -1;
  298.                          lp1 = addr(ladder->l.e(nums(j)));
  299.                          if lp->e.avg = lp1->e.avg then lp->e.rank = lp1->e.rank;
  300.                          if lp->e.avg > lp1->e.avg then go to endloop;
  301.                     end;
  302. endloop:       end;
  303.                ladder->l.lowavg = avg;                      /* adjust the low average */
  304.                go to returnt;
  305.           end;
  306. /*   */
  307. /* entry point to handle console quits so as not to give the user any unfair advantages */
  308. mooquit:  entry;
  309.           call ios_$abort("user_i/o", ""b, time);           /* reset console quit condition */
  310.           call ioa_$nnl("^RMOOQUIT^B" );
  311. /* if quit while in print or rank then simply terminate the ladder */
  312.           if printsw ^= 0 then go to mooqret1;
  313. /* if the "try" count is zero then simply inform the user of the proper way to terminate play */
  314.           if count = 0 then do;
  315.                call ioa_(": Normal exit is by typing ""q"" instead of your first move." );
  316.                go to mooqret;
  317.           end;
  318. /* if the ladder way not initiated then simply unwind the stack */
  319.           if ladder = null then do;
  320. mooqret1:      call ioa_("" );
  321.                go to mooqret;
  322.           end;
  323. /* otherwise, add 10 to his score and tell him that he isn't playing fair */
  324.           else do;
  325.                call ioa_(": Ten points have been added to your total score." );
  326.                lp->e.totscore = lp->e.totscore + 10;
  327.                on zerodivide;
  328.                lp->e.avg = (lp->e.totscore + 0.0e0) / lp->e.ngames;
  329.                call ioa_("Your new average is ^5.2f", lp->e.avg);
  330.           end;
  331. /* terminate the ladder and unwind the stack */
  332. mooqret:  if ladder ^= null then call hcs_$terminate_noname(ladder, flag);
  333.           call listen_$unclaimed_signal;                    /* revert stack */
  334.           return;                                           /* never executed */
  335. end foo;


A+,


Message édité par gilou le 10-11-2003 à 23:43:51

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 10-11-2003 à 23:42:36    

gilou a écrit :


A+,
 
 
 
A+,
 
 


 
je tenais a quoter ce merdage a+sien

Reply

Marsh Posté le 10-11-2003 à 23:45:24    

chrisbk a écrit :


 
je tenais a quoter ce merdage a+sien

[:rofl]


---------------
lecteur mp3 yvele's smilies jeux de fille
Reply

Marsh Posté le 10-11-2003 à 23:45:57    

Qui a ete corrigé durant ton edit.
 
Quand je pense que quand j'ai appris l'info, je lisais le PL/I multics dans le source comme aijourd'hui le C(/++/#)...
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed