2011-07-19 11:26:40 +01:00
|
|
|
/* ScummVM - Graphic Adventure Engine
|
|
|
|
*
|
|
|
|
* ScummVM is the legal property of its developers, whose names
|
|
|
|
* are too numerous to list here. Please refer to the COPYRIGHT
|
|
|
|
* file distributed with this source distribution.
|
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU General Public License
|
|
|
|
* as published by the Free Software Foundation; either version 2
|
|
|
|
* of the License, or (at your option) any later version.
|
|
|
|
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program; if not, write to the Free Software
|
|
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
|
|
*
|
|
|
|
*/
|
2011-07-30 22:03:28 +02:00
|
|
|
uint16 allocatemem(uint16 paragraphs);
|
2011-11-18 07:29:38 +01:00
|
|
|
void deallocatemem(uint16 segment);
|
2011-07-27 14:56:02 +02:00
|
|
|
uint8 *workspace();
|
2011-11-18 06:30:12 +01:00
|
|
|
uint8 *textUnder();
|
2011-08-03 12:21:46 +02:00
|
|
|
void allocatework();
|
2011-07-30 23:11:48 +02:00
|
|
|
void clearwork();
|
2011-11-17 18:21:34 +01:00
|
|
|
void standardload();
|
|
|
|
uint16 standardload(const char *fileName); // Returns a segment handle which needs to be freed with deallocatemem for symmetry
|
2011-11-18 00:01:24 +01:00
|
|
|
void loadintotemp();
|
|
|
|
void loadintotemp2();
|
|
|
|
void loadintotemp3();
|
|
|
|
void loadintotemp(const char *fileName);
|
|
|
|
void loadintotemp2(const char *fileName);
|
|
|
|
void loadintotemp3(const char *fileName);
|
2011-11-18 00:14:30 +01:00
|
|
|
void loadtempcharset();
|
|
|
|
void loadtempcharset(const char *fileName);
|
2011-11-18 00:41:09 +01:00
|
|
|
void printcurs();
|
2011-11-18 06:17:23 +01:00
|
|
|
void delcurs();
|
2011-11-18 06:33:18 +01:00
|
|
|
void hangoncurs(uint16 frameCount);
|
|
|
|
void hangoncurs();
|
2011-06-26 15:10:18 +02:00
|
|
|
void multidump();
|
2011-07-19 16:45:48 +02:00
|
|
|
void multidump(uint16 x, uint16 y, uint8 width, uint8 height);
|
2011-09-01 01:39:12 +02:00
|
|
|
void frameoutv(uint8 *dst, const uint8 *src, uint16 pitch, uint16 width, uint16 height, int16 x, int16 y);
|
2011-07-20 21:41:52 +02:00
|
|
|
void frameoutnm(uint8 *dst, const uint8 *src, uint16 pitch, uint16 width, uint16 height, uint16 x, uint16 y);
|
|
|
|
void frameoutbh(uint8 *dst, const uint8 *src, uint16 pitch, uint16 width, uint16 height, uint16 x, uint16 y);
|
|
|
|
void frameoutfx(uint8 *dst, const uint8 *src, uint16 pitch, uint16 width, uint16 height, uint16 x, uint16 y);
|
2011-06-26 15:10:18 +02:00
|
|
|
void worktoscreen();
|
|
|
|
void multiget();
|
2011-08-03 16:44:29 +02:00
|
|
|
void multiget(uint8 *dst, uint16 x, uint16 y, uint8 width, uint8 height);
|
2011-06-26 15:10:18 +02:00
|
|
|
void convertkey();
|
|
|
|
void cls();
|
2011-06-26 15:17:19 +02:00
|
|
|
void printsprites();
|
2011-06-26 15:10:18 +02:00
|
|
|
void quickquit();
|
|
|
|
void readoneblock();
|
|
|
|
void printundermon();
|
|
|
|
void seecommandtail();
|
|
|
|
void randomnumber();
|
|
|
|
void quickquit2();
|
2011-08-11 02:27:41 +02:00
|
|
|
uint8 getnextword(const Frame *charSet, const uint8 *string, uint8 *totalWidth, uint8 *charCount);
|
|
|
|
void printboth(const Frame* charSet, uint16 *x, uint16 y, uint8 c, uint8 nextChar);
|
2011-07-18 22:27:06 +02:00
|
|
|
void printchar();
|
2011-08-11 02:27:41 +02:00
|
|
|
void printchar(const Frame* charSet, uint16 *x, uint16 y, uint8 c, uint8 nextChar, uint8 *width, uint8 *height);
|
2011-11-18 08:29:50 +01:00
|
|
|
void printchar(const Frame* charSet, uint16 x, uint16 y, uint8 c, uint8 nextChar, uint8 *width, uint8 *height);
|
2011-07-18 14:30:07 +02:00
|
|
|
void printdirect();
|
2011-08-10 17:12:26 +02:00
|
|
|
void printdirect(const uint8** string, uint16 x, uint16 *y, uint8 maxWidth, bool centered);
|
2011-09-07 03:58:04 +02:00
|
|
|
void printdirect(const uint8* string, uint16 x, uint16 y, uint8 maxWidth, bool centered);
|
2011-08-29 11:55:21 +02:00
|
|
|
void printmessage(uint16 x, uint16 y, uint8 index, uint8 maxWidth, bool centered);
|
|
|
|
void printmessage();
|
2011-07-23 19:18:10 +02:00
|
|
|
void usetimedtext();
|
2011-08-11 15:24:06 +02:00
|
|
|
void dumptimedtext();
|
2011-08-11 16:59:20 +02:00
|
|
|
void setuptimedtemp();
|
|
|
|
void setuptimedtemp(uint8 textIndex, uint8 voiceIndex, uint8 x, uint8 y, uint16 countToTimed, uint16 timeCount);
|
2011-07-23 19:18:10 +02:00
|
|
|
void getundertimed();
|
|
|
|
void putundertimed();
|
2011-08-11 03:19:51 +02:00
|
|
|
uint8 printslow(const uint8 *string, uint16 x, uint16 y, uint8 maxWidth, bool centered);
|
2011-07-19 12:37:32 +02:00
|
|
|
void printslow();
|
2011-07-21 22:46:16 +02:00
|
|
|
void dumptextline();
|
2011-07-17 16:06:19 +02:00
|
|
|
void getnumber();
|
2011-08-11 02:27:41 +02:00
|
|
|
uint8 getnumber(const Frame *charSet, const uint8 *string, uint16 maxWidth, bool centered, uint16 *offset);
|
2011-07-17 14:38:30 +02:00
|
|
|
uint8 kernchars(uint8 firstChar, uint8 secondChar, uint8 width);
|
2011-11-17 15:08:34 +01:00
|
|
|
void oldtonames();
|
|
|
|
void namestoold();
|
2011-11-17 15:33:25 +01:00
|
|
|
void loadpalfromiff();
|
2011-07-30 19:54:53 +02:00
|
|
|
void getroomdata();
|
2011-11-17 11:29:15 +01:00
|
|
|
Room *getroomdata(uint8 room);
|
2011-07-30 21:56:33 +02:00
|
|
|
void readheader();
|
2011-07-30 22:56:29 +02:00
|
|
|
void fillspace();
|
2011-07-30 21:46:59 +02:00
|
|
|
void startloading(const Room *room);
|
2011-07-20 17:21:03 +01:00
|
|
|
Sprite *spritetable();
|
2011-06-26 17:03:17 +02:00
|
|
|
void showframe();
|
2011-08-11 03:30:41 +02:00
|
|
|
void showframe(const Frame *frameData, uint16 x, uint16 y, uint16 frameNumber, uint8 effectsFlag, uint8 *width, uint8 *height);
|
2011-08-21 17:47:10 +02:00
|
|
|
void showframe(const Frame *frameData, uint16 x, uint16 y, uint16 frameNumber, uint8 effectsFlag);
|
2011-07-27 17:42:11 +02:00
|
|
|
void printasprite(const Sprite *sprite);
|
2011-06-26 15:10:18 +02:00
|
|
|
void width160();
|
2011-08-03 16:44:29 +02:00
|
|
|
void multiput(const uint8 *src, uint16 x, uint16 y, uint8 width, uint8 height);
|
2011-06-26 15:10:18 +02:00
|
|
|
void multiput();
|
2011-06-26 15:17:19 +02:00
|
|
|
void eraseoldobs();
|
|
|
|
void clearsprites();
|
2011-07-30 15:04:25 +02:00
|
|
|
Sprite *makesprite(uint8 x, uint8 y, uint16 updateCallback, uint16 frameData, uint16 somethingInDi);
|
2011-06-26 15:17:19 +02:00
|
|
|
void spriteupdate();
|
2011-06-28 15:48:07 +02:00
|
|
|
void initman();
|
2011-07-29 01:12:29 +02:00
|
|
|
void mainman(Sprite *sprite);
|
2011-07-26 07:54:25 +02:00
|
|
|
void facerightway();
|
2011-07-25 23:54:54 +02:00
|
|
|
void walking(Sprite *sprite);
|
2011-08-08 22:26:31 +02:00
|
|
|
void autosetwalk();
|
2011-09-03 15:09:21 +02:00
|
|
|
void checkdest(const RoomPaths *roomsPaths);
|
2011-07-20 17:21:03 +01:00
|
|
|
void aboutturn(Sprite *sprite);
|
|
|
|
void backobject(Sprite *sprite);
|
2011-08-23 14:41:28 +02:00
|
|
|
void constant(Sprite *sprite, SetObject *objData);
|
|
|
|
void steady(Sprite *sprite, SetObject *objData);
|
|
|
|
void random(Sprite *sprite, SetObject *objData);
|
2011-11-16 23:27:14 +01:00
|
|
|
void dodoor(Sprite *sprite, SetObject *objData, Common::Rect check);
|
2011-08-23 14:41:28 +02:00
|
|
|
void doorway(Sprite *sprite, SetObject *objData);
|
|
|
|
void widedoor(Sprite *sprite, SetObject *objData);
|
|
|
|
void lockeddoorway(Sprite *sprite, SetObject *objData);
|
|
|
|
void liftsprite(Sprite *sprite, SetObject *objData);
|
2011-09-04 16:39:38 +02:00
|
|
|
Frame *findsource();
|
2011-08-11 22:58:06 +02:00
|
|
|
void showgamereel();
|
2011-08-29 14:54:21 +02:00
|
|
|
void showgamereel(ReelRoutine *routine);
|
2011-07-30 16:01:52 +02:00
|
|
|
void showreelframe(Reel *reel);
|
2011-08-11 23:13:17 +02:00
|
|
|
const Frame *getreelframeax(uint16 frame);
|
2011-09-03 11:02:03 +02:00
|
|
|
void turnpathon(uint8 param);
|
|
|
|
void turnpathoff(uint8 param);
|
|
|
|
void turnpathon();
|
|
|
|
void turnpathoff();
|
2011-09-03 13:50:59 +02:00
|
|
|
void turnanypathon(uint8 param, uint8 room);
|
|
|
|
void turnanypathoff(uint8 param, uint8 room);
|
|
|
|
void turnanypathon();
|
|
|
|
void turnanypathoff();
|
2011-09-02 07:56:50 +02:00
|
|
|
RoomPaths *getroomspaths();
|
2011-08-23 14:41:28 +02:00
|
|
|
void makebackob(SetObject *objData);
|
2011-06-26 15:10:18 +02:00
|
|
|
void modifychar();
|
|
|
|
void lockmon();
|
2011-07-20 13:15:30 +02:00
|
|
|
void cancelch0();
|
|
|
|
void cancelch1();
|
2011-07-30 23:37:18 +02:00
|
|
|
void plotreel();
|
2011-08-15 13:49:11 +02:00
|
|
|
Reel *getreelstart();
|
2011-08-11 12:33:33 +02:00
|
|
|
void dealwithspecial(uint8 firstParam, uint8 secondParam);
|
2011-08-03 12:24:06 +02:00
|
|
|
void zoom();
|
2011-08-03 13:54:03 +02:00
|
|
|
void crosshair();
|
2011-08-03 14:16:09 +02:00
|
|
|
void showrain();
|
2011-08-03 16:19:27 +02:00
|
|
|
void deltextline();
|
2011-08-18 00:35:10 +02:00
|
|
|
void commandonly();
|
|
|
|
void commandonly(uint8 command);
|
2011-08-03 18:48:43 +02:00
|
|
|
void doblocks();
|
2011-08-11 23:13:17 +02:00
|
|
|
void checkifperson();
|
|
|
|
bool checkifperson(uint8 x, uint8 y);
|
2011-08-22 14:46:06 +02:00
|
|
|
void checkiffree();
|
|
|
|
bool checkiffree(uint8 x, uint8 y);
|
2011-08-30 03:11:32 +02:00
|
|
|
void checkifex();
|
|
|
|
bool checkifex(uint8 x, uint8 y);
|
2011-08-15 14:35:44 +02:00
|
|
|
const uint8 *findobname(uint8 type, uint8 index);
|
|
|
|
void copyname();
|
|
|
|
void copyname(uint8 type, uint8 index, uint8 *dst);
|
2011-08-15 15:42:09 +02:00
|
|
|
void commandwithob();
|
|
|
|
void commandwithob(uint8 command, uint8 type, uint8 index);
|
2011-08-15 17:00:20 +02:00
|
|
|
void showpanel();
|
2011-08-15 17:11:11 +02:00
|
|
|
void updatepeople();
|
2011-08-16 01:25:59 +02:00
|
|
|
void madmantext();
|
2011-08-16 04:01:40 +02:00
|
|
|
void madmode();
|
2011-08-17 01:16:05 +02:00
|
|
|
void movemap(uint8 param);
|
2011-08-18 10:36:57 +02:00
|
|
|
bool addalong(const uint8 *mapFlags);
|
|
|
|
bool addlength(const uint8 *mapFlags);
|
|
|
|
void getdimension();
|
|
|
|
void getdimension(uint8 *mapXstart, uint8 *mapYstart, uint8 *mapXsize, uint8 *mapYsize);
|
2011-08-17 07:08:38 +02:00
|
|
|
void getmapad();
|
2011-08-18 18:36:15 +02:00
|
|
|
void calcmapad();
|
2011-08-17 07:08:38 +02:00
|
|
|
uint8 getmapad(const uint8 *setData);
|
|
|
|
uint8 getxad(const uint8 *setData, uint8 *result);
|
|
|
|
uint8 getyad(const uint8 *setData, uint8 *result);
|
|
|
|
void calcfrframe();
|
2011-08-21 15:57:13 +02:00
|
|
|
void calcfrframe(uint8* width, uint8* height);
|
2011-08-17 07:08:38 +02:00
|
|
|
void finalframe();
|
|
|
|
void finalframe(uint16 *x, uint16 *y);
|
|
|
|
void showallobs();
|
2011-08-18 22:09:28 +02:00
|
|
|
void blocknametext();
|
|
|
|
void walktotext();
|
|
|
|
void personnametext();
|
2011-08-18 22:22:39 +02:00
|
|
|
void findxyfrompath();
|
2011-08-19 10:35:29 +02:00
|
|
|
void findormake();
|
2011-08-20 12:26:10 +02:00
|
|
|
void findormake(uint8 index, uint8 value, uint8 type);
|
2011-08-23 14:41:28 +02:00
|
|
|
DynObject *getfreead(uint8 index);
|
|
|
|
DynObject *getexad(uint8 index);
|
2011-08-23 15:03:28 +02:00
|
|
|
DynObject *geteitheradCPP();
|
2011-08-23 14:41:28 +02:00
|
|
|
SetObject *getsetad(uint8 index);
|
2011-08-31 23:38:34 +02:00
|
|
|
void *getanyad(uint8 *value1, uint8 *value2);
|
2011-09-01 00:11:07 +02:00
|
|
|
void *getanyaddir(uint8 index, uint8 flag);
|
2011-08-19 11:42:13 +02:00
|
|
|
void setallchanges();
|
2011-08-20 12:26:10 +02:00
|
|
|
void dochange();
|
|
|
|
void dochange(uint8 index, uint8 value, uint8 type);
|
2011-08-20 12:33:21 +02:00
|
|
|
void deletetaken();
|
2011-08-16 03:15:43 +02:00
|
|
|
bool isCD();
|
2011-08-20 13:23:47 +02:00
|
|
|
void placesetobject();
|
|
|
|
void placesetobject(uint8 index);
|
|
|
|
void removesetobject();
|
|
|
|
void removesetobject(uint8 index);
|
2011-08-21 15:24:05 +02:00
|
|
|
void showallfree();
|
2011-08-29 16:31:00 +02:00
|
|
|
void showallex();
|
2011-08-22 15:53:54 +02:00
|
|
|
bool finishedwalkingCPP();
|
|
|
|
void finishedwalking();
|
2011-08-22 17:30:53 +02:00
|
|
|
void checkone();
|
|
|
|
void checkone(uint8 x, uint8 y, uint8 *flag, uint8 *flagEx, uint8 *type, uint8 *flagX, uint8 *flagY);
|
2011-08-23 10:13:10 +02:00
|
|
|
void getflagunderp();
|
|
|
|
void getflagunderp(uint8 *flag, uint8 *flagEx);
|
2011-08-23 10:40:52 +02:00
|
|
|
void walkandexamine();
|
2011-08-23 11:09:54 +02:00
|
|
|
void obname();
|
|
|
|
void obname(uint8 command, uint8 commandType);
|
2011-08-24 12:15:17 +02:00
|
|
|
void delpointer();
|
2011-08-24 13:20:18 +02:00
|
|
|
void showblink();
|
2011-08-24 13:22:11 +02:00
|
|
|
void dumpblink();
|
2011-08-24 17:23:43 +02:00
|
|
|
void dumppointer();
|
2011-08-24 23:01:53 +02:00
|
|
|
void showpointer();
|
2011-08-25 07:02:57 +02:00
|
|
|
void animpointer();
|
2011-08-24 15:04:53 +02:00
|
|
|
void checkcoords();
|
|
|
|
void checkcoords(const RectWithCallback *rectWithCallbacks);
|
2011-08-25 07:50:35 +02:00
|
|
|
void readmouse();
|
|
|
|
void readmouse1();
|
|
|
|
void readmouse2();
|
|
|
|
void readmouse3();
|
|
|
|
void readmouse4();
|
2011-08-25 08:03:27 +02:00
|
|
|
uint16 waitframes();
|
2011-08-25 10:39:51 +02:00
|
|
|
void drawflags();
|
2011-08-29 12:38:22 +02:00
|
|
|
void addtopeoplelist();
|
2011-08-29 14:55:57 +02:00
|
|
|
void addtopeoplelist(ReelRoutine *routine);
|
2011-08-30 02:26:28 +02:00
|
|
|
void getexpos();
|
2011-08-30 02:45:53 +02:00
|
|
|
void paneltomap();
|
2011-08-30 12:22:09 +02:00
|
|
|
void maptopanel();
|
|
|
|
void dumpmap();
|
2011-08-30 02:53:49 +02:00
|
|
|
void obpicture();
|
2011-08-30 10:56:49 +02:00
|
|
|
void transferinv();
|
2011-08-31 23:38:34 +02:00
|
|
|
void obicons();
|
2011-09-01 00:06:30 +02:00
|
|
|
void compare();
|
|
|
|
bool compare(uint8 index, uint8 flag, const char id[4]);
|
2011-09-02 03:55:52 +02:00
|
|
|
bool pixelcheckset(const ObjPos *pos, uint8 x, uint8 y);
|
|
|
|
bool isitdescribed(const ObjPos *objPos);
|
|
|
|
void checkifset();
|
|
|
|
bool checkifset(uint8 x, uint8 y);
|
2011-09-02 06:38:08 +02:00
|
|
|
void checkifpathison();
|
|
|
|
bool checkifpathison(uint8 index);
|
2011-09-02 09:11:48 +02:00
|
|
|
void isitworn();
|
|
|
|
bool isitworn(const DynObject *object);
|
2011-10-09 18:09:24 +02:00
|
|
|
void wornerror();
|
2011-09-02 09:11:48 +02:00
|
|
|
void makeworn();
|
|
|
|
void makeworn(DynObject *object);
|
2011-09-02 09:35:52 +02:00
|
|
|
void obtoinv();
|
|
|
|
void obtoinv(uint8 index, uint8 flag, uint16 x, uint16 y);
|
2011-09-05 20:45:41 +02:00
|
|
|
void showryanpage();
|
2011-09-05 21:42:06 +02:00
|
|
|
void findallryan();
|
|
|
|
void findallryan(uint8 *inv);
|
2011-09-06 08:54:01 +02:00
|
|
|
void fillryan();
|
2011-09-02 16:41:54 +02:00
|
|
|
void useroutine();
|
2011-09-06 22:10:02 +02:00
|
|
|
void hangon();
|
|
|
|
void hangon(uint16 frameCount);
|
|
|
|
void hangonp();
|
|
|
|
void hangonp(uint16 count);
|
2011-11-05 14:13:57 +01:00
|
|
|
void showicon();
|
2011-09-07 03:41:05 +02:00
|
|
|
uint8 findnextcolon(uint8 **string);
|
|
|
|
void findnextcolon();
|
2011-09-07 03:44:40 +02:00
|
|
|
uint8 *getobtextstartCPP();
|
2011-09-07 03:53:53 +02:00
|
|
|
void usetext(const uint8 *string);
|
|
|
|
void usetext();
|
2011-09-03 00:00:44 +02:00
|
|
|
void getblockofpixel();
|
|
|
|
uint8 getblockofpixel(uint8 x, uint8 y);
|
2011-09-18 15:33:24 +02:00
|
|
|
void bresenhams();
|
2011-09-04 07:44:14 +02:00
|
|
|
void examineobtext();
|
2011-09-04 12:44:05 +02:00
|
|
|
void sortoutmap();
|
2011-09-04 13:20:02 +02:00
|
|
|
void showcity();
|
2011-09-04 15:10:49 +02:00
|
|
|
uint16 getpersframe(uint8 index);
|
|
|
|
void convicons();
|
2011-11-14 20:22:45 +01:00
|
|
|
void examineob(bool examineAgain = true);
|
2011-11-15 11:05:30 +01:00
|
|
|
void showwatch();
|
2011-11-17 00:18:28 +01:00
|
|
|
void showtime();
|
2011-11-14 19:49:19 +01:00
|
|
|
void roomname();
|
2011-11-15 12:33:13 +01:00
|
|
|
void transfertext();
|
2011-11-16 12:43:19 +01:00
|
|
|
void initrain();
|
2011-11-15 14:12:44 +01:00
|
|
|
Rain *splitintolines(uint8 x, uint8 y, Rain *rain);
|
2011-11-16 13:26:15 +01:00
|
|
|
uint8 *mainPalette();
|
|
|
|
uint8 *startPalette();
|
|
|
|
uint8 *endPalette();
|
2011-11-16 13:03:39 +01:00
|
|
|
void clearstartpal();
|
2011-11-16 17:56:06 +01:00
|
|
|
void clearendpal();
|
2011-11-16 13:26:15 +01:00
|
|
|
void paltostartpal();
|
|
|
|
void endpaltostart();
|
|
|
|
void startpaltoend();
|
|
|
|
void paltoendpal();
|
2011-11-16 17:30:38 +01:00
|
|
|
void fadecalculation();
|
2011-11-16 20:09:47 +01:00
|
|
|
void watchcount();
|
2011-11-16 21:00:46 +01:00
|
|
|
void zoomicon();
|
2011-11-16 21:23:51 +01:00
|
|
|
void loadroom();
|
2011-11-16 21:32:25 +01:00
|
|
|
void getundermenu();
|
|
|
|
void putundermenu();
|
2011-11-16 18:48:03 +01:00
|
|
|
void textformonk();
|
|
|
|
void textforend();
|
2011-11-17 17:44:19 +01:00
|
|
|
void readsetdata();
|
2011-11-16 22:52:34 +01:00
|
|
|
void loadroomssample();
|
2011-11-18 06:43:32 +01:00
|
|
|
void fadeupyellows();
|
2011-11-18 07:01:36 +01:00
|
|
|
void fadeupmonfirst();
|
2011-11-18 06:52:34 +01:00
|
|
|
void printlogo();
|
2011-11-18 07:04:45 +01:00
|
|
|
void usemon();
|
2011-11-18 07:48:07 +01:00
|
|
|
void input();
|
2011-09-18 15:33:24 +02:00
|
|
|
|