home *** CD-ROM | disk | FTP | other *** search
- // CheckMessage() Used for sending/receiving messages
- // Register() Start up initial door-protocol
- // (allocates memory, creates reply port, etc)
- // ShutDown() Shut down door-port and exit
- #include <exec/exec.h>
- #include <exec/semaphores.h>
- #include <proto/exec.h>
- #include <exec/types.h>
- #include <exec/ports.h>
- #include <exec/memory.h>
- #include <dos/dos.h>
- #include <dos.h>
- #include <clib/exec_protos.h>
- #include <clib/dos_protos.h>
- #include <clib/alib_protos.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
-
- #define deletecomm DeleteComm
- #define shutdown ShutDown
- #define sendcmd SendCmd
- #define sendstrcmd SendStrCmd
- #define senddatacmd SendDataCmd
- #define sendstrdatacmd SendStrDataCmd
- #define writestr WriteStr
- #define showfile ShowFile
- #define getdt GetDT
- #define getstr GetStr
- #define hotkey Hotkey
-
- #define NumLines 32
-
- #define SEEK_SET 0
- #define FOREVER for(;;)
- #define NL NULL
- #define JH_LI 0
- #define JH_REGISTER 1
- #define JH_SHUTDOWN 2
- #define JH_WRITE 3
- #define JH_SM 4
- #define JH_PM 5
- #define JH_HK 6
- #define JH_SG 7
- #define JH_SF 8
- #define JH_EF 9
- #define JH_CO 10
- #define JH_BBSName 11
- #define JH_Sysop 12
- #define JH_FLAGFILE 13
- #define JH_SHOWFLAGS 14
- #define JH_DL 15
- #define JH_ExtHK 15
- #define JH_SIGBIT 16
- #define JH_FetchKey 17
- #define JH_FETCHKEY 17
- #define JH_SO 18
- #define JH_HSM 19
- /**************************** GET/SET Values from System ***********************/
-
- #define DT_NAME 100
- #define DT_PASSWORD 101
- #define DT_LOCATION 102
- #define DT_PHONENUMBER 103
- #define DT_SLOTNUMBER 104
- #define DT_SECSTATUS 105
- #define DT_SECBOARD 106
- #define DT_SECLIBRARY 107
- #define DT_SECBULLETIN 108
- #define DT_MESSAGESPOSTED 109
- #define DT_UPLOADS 110
- #define DT_DOWNLOADS 111
- #define DT_TIMESCALLED 112
- #define DT_TIMELASTON 113
- #define DT_TIMEUSED 114
- #define DT_TIMELIMIT 115
- #define DT_TIMETOTAL 116
- #define DT_BYTESUPLOAD 117
- #define DT_BYTEDOWNLOAD 118
- #define DT_DAILYBYTELIMIT 119
- #define DT_DAILYBYTEDLD 120
- #define DT_EXPERT 121
- #define DT_LINELENGTH 122
- #define ACTIVE_NODES 123
- #define DT_DUMP 124
- #define DT_TIMEOUT 125
- #define BB_CONFNAME 126
- #define BB_CONFLOCAL 127
- #define BB_LOCAL 128
- #define BB_STATUS 129
- #define BB_COMMAND 130
- #define BB_MAINLINE 131
- #define NB_LOAD 132
- #define DT_USERLOAD 133
- #define BB_CONFIG 134
- #define CHG_USER 135
- #define RETURNCOMMAND 136
- #define ZMODEMSEND 137
- #define ZMODEMRECEIVE 138
- #define SCREEN_ADDRESS 139
- #define BB_TASKPRI 140
- #define RAWSCREEN_ADDRESS 141
- #define BB_CHATFLAG 142
- #define DT_STAMP_LASTON 143
- #define DT_STAMP_CTIME 144
- #define DT_CURR_TIME 145
- #define DT_CONFACCESS 146
- #define BB_PCONFLOCAL 147
- #define BB_PCONFNAME 148
- #define BB_NODEID 149
- #define BB_CALLERSLOG 150
- #define BB_UDLOG 151
- #define EXPRESS_VERSION 152
- #define UNICONIFY 153
- #define BB_CHATSET 162
- #define ENVSTAT 163
-
- #define SVR_MESSAGE 177
- #define QN 178
-
- #define GETKEY 500
- #define RAWARROW 501
- #define CHAIN 502
-
- /****************** in progress ******************/
- #define NODE_DEVICE 503
- #define NODE_UNIT 504
- #define NODE_BAUD 505
- #define NODE_NUMBER 506
- #define JH_MCI 507
- /*************************************************/
- #define PRV_COMMAND 508
- #define PRV_GROUP 509
- #define BB_CONFNUM 510
- #define BB_DROPDTR 511
- #define BB_GETTASK 512
- #define BB_REMOVEPORT 513
- #define BB_SOPT 514
- #define NODE_BAUDRATE 516
- #define BB_LOGONTYPE 517
- #define BB_SCRLEFT 518
- #define BB_SCRTOP 519
- #define BB_SCRWIDTH 520
- #define BB_SCRHEIGHT 521
- #define BB_PURGELINE 522
- #define BB_PURGELINESTART 523
- #define BB_PURGELINEEND 524
- #define BB_NONSTOPTEXT 525
- #define BB_LINECOUNT 526
- #define DT_LANGUAGE 527
- #define DT_QUICKFLAG 528
- #define DT_GOODFILE 529
- #define DT_ANSICOLOR 530
- #define MULTICOM 531
- #define LOAD_ACCOUNT 532
- #define SAVE_ACCOUNT 533
- #define SAVE_CONFDB 534
- #define LOAD_CONFDB 535
- #define GET_CONFNUM 536
- #define SEARCH_ACCOUNT 537
- #define APPEND_ACCOUNT 538
- #define LAST_ACCOUNTNUM 539
- #define MOD_TYPE 540
- #define DT_ISANSI 541
- #define BATCHZMODEMSEND 542
- #define DT_MSGCODE 543
- #define ACP_COMMAND 544
- #define DT_FILECODE 545
- #define EDITOR_STRUCT 546
- #define BYPASS_CSI_CHECK 547
- #define SENTBY 548
- #define MCIFLAG 551
- #define MSGBASE_COMMAND 600
- #define MSGBASE_CONF 601
- #define MSG_LASTREAD_CONF 602
- #define MSG_LASTNEWREAD_CONF 603
- #define MSGBASE_LOCATION 604
- #define MSGBASE_SUPPLEMENT 605
- #define DT_REALNAME 606
- #define DT_STARTDATE 607
- #define QUICK_KEY 608
- #define DT_TOGGLE_SERIAL 609
- #define NETDOWNLOAD 610
- #define NETUPLOAD 611
- #define BB_CONFLIST 612
- #define BB_OFFHOOK 613
- #define IS_CONFACCESS 614 // +1 = RelCurConf
- #define BB_ENCRYPT 615
- #define BB_NONSTOPSTATUS 616
- #define JH_SF_NSF 617
- #define JH_SG_NSF 618
- #define BB_CHOOSEANAME 619
- #define DT_ATTACHFILE 620
- #define BB_GETMCISTR 621
- #define DT_XIMPORT 622
- #define DT_LASTMSGCMD 623
- #define DT_ASL 624
- #define DT_MSGCMDOVERIDE 625
- #define DT_QWKBYTECOUNT 626
- #define DT_RELCONF 627 // +1 = RelCurConf
- #define RETURNPRVCMD 628
- #define BB_TRANSFERABORT 629
- #define BB_CLEARMSGQUE 630
- #define BB_NOPROMPTDOWNLOAD 631
- #define SXVERSION 907
- #define DT_ADDBIT 1000
- #define DT_REMBIT 1001
- #define DT_QUERYBIT 1002
- #define READIT 1
- #define WRITEIT 0
- #define SHUTDOWN 1
- #define CHAIN_WAIT 0
-
-
-
- #define NEXTMSG 1
- #define NONEXTMSG 2
- #define MSGSTATUS 0
- #define CONSOLE_PORT 1
- #define SERIAL_PORT 2
-
-
-
-
-
- struct JHMessage *Jhmsg,*msg;
- struct MsgPort *port,*replymp;
-
- #define XIM_Msg Jhmsg
- #define shutdown ShutDown
- struct JHMessage
- {
- struct Message Msg; /* msg structure */
- char String[200]; /* info buffer */
- int Data; /* Read/Write & result indicator */
- int Command; /* Command sent from door. */
- int NodeID; /* reserved */
- int LineNum; /* reserved */
- ULONG signal; /* reserved */
- struct Process *task; /* see BB_GETTASK in doordocs */
- APTR *Semi; /* See MULTICOM in doordocs */
- APTR Filler1;
- APTR Filler2;
- char *str;
- };
-
- struct MsgPort *CreatePort(UBYTE *name,LONG pri)
- {
- int sigBit;
- struct MsgPort *mp;
-
- if((sigBit=AllocSignal(-1L))==-1)
- return(0);
- mp=(struct MsgPort *)
- AllocMem((ULONG)sizeof(struct MsgPort),(ULONG)MEMF_CLEAR|MEMF_PUBLIC);
-
- if(!mp)
- {
- FreeSignal(sigBit);
- return(0);
- }
-
- mp->mp_Node.ln_Name=name;
- mp->mp_Node.ln_Pri=pri;
- mp->mp_Node.ln_Type=NT_MSGPORT;
- mp->mp_Flags=PA_SIGNAL;
- mp->mp_SigBit=sigBit;
- mp->mp_SigTask=(struct Task *)FindTask(0L);
- if(name) AddPort(mp);
- else NewList(&(mp->mp_MsgList));
- return(mp);
- }
-
-
- void CheckMessage(void)
- {
- PutMsg(port,(struct Message *)Jhmsg);
- (void)WaitPort(replymp);
- (void)GetMsg(replymp);
- }
-
- VOID Register(int node)
- {
- int n1=0,n2=0,n3=0,found=0;
- char PortName[80];
- char DoorReply[] = "AEDoorRP.000";
-
- Jhmsg=(struct JHMessage *)AllocMem(sizeof(struct JHMessage),MEMF_PUBLIC);
-
- if(Jhmsg==0) exit(30);
-
- while(n1<10)
- {
- n2=0;
- while(n2<10)
- {
- n3=0;
- while(n3<10)
- {
- DoorReply[9]=n1+'0';
- DoorReply[10]=n2+'0';
- DoorReply[11]=n3+'0';
- if(FindPort(DoorReply)) { n3++; continue; }
- found=1;
- break;
- }
- if(found) break;
- n2++;
- }
- if(found) break;
- n1++;
- }
-
- if(!found)
- {
- FreeMem(Jhmsg,sizeof(struct JHMessage));
- exit(30);
- }
-
- replymp=CreatePort(DoorReply,0L);
- if(replymp==0)
- {
- FreeMem(Jhmsg,sizeof(struct JHMessage));
- exit(30);
- }
-
- Jhmsg->Msg.mn_Node.ln_Type=NT_MESSAGE;
- Jhmsg->Msg.mn_Length=sizeof(struct JHMessage);
- Jhmsg->Msg.mn_ReplyPort=replymp;
- Jhmsg->Command=1;
- Jhmsg->Data=2;
- // Jhmsg->NodeID=-1;
- // Jhmsg->LineNum=0;
- sprintf(PortName,"AEDoorPort%d",node);
- while(!(port=FindPort(PortName)));
- PutMsg(port,(struct Message *)Jhmsg);
- Wait(1<<replymp->mp_SigBit);
- msg=(struct JHMessage *)GetMsg((struct MsgPort *)replymp);
- }
-
- VOID ShutDown(VOID)
- {
- Jhmsg->Command=2;
- PutMsg(port,(struct Message *)Jhmsg);
- Wait(1<<replymp->mp_SigBit);
- while(msg=(struct JHMessage *)GetMsg((struct MsgPort *)replymp));
- DeletePort((struct MsgPort *)replymp);
- FreeMem(Jhmsg,sizeof(struct JHMessage));
- exit(0);
- }
-
- struct XIM
- {
- struct Message Msg; // msg structure
- char String[200]; // info buffer
- int Data; // Read/Write & result indicator
- int Command; // Command sent from door.
- int NodeID;
- int LineNum;
- unsigned long signal;
- struct Process *task; // see BB_GETTASK in doordocs
- APTR *Semi; // See MULTICOM in doordocs
- APTR Filler1;
- APTR Filler2;
- char *str;
- };
-
- struct XIM *XIM_Msg,*msg;
-
- int sigBit;
-
- struct MsgPort *port,*replymp;
-
- void CreateComm(int node)
- {
- register int n1=0,n2=0,n3=0,found=0;
- char PortName[80],DoorReply[16];
-
- strcpy(DoorReply,"AEDoorRP.000");
-
- if((XIM_Msg=(struct XIM *)AllocMem(sizeof(struct XIM),MEMF_PUBLIC))==0)exit(30);
-
- while(n1<10)
- {
- n2=0;
- while(n2<10)
- {
- n3=0;
- while(n3<10)
- {
- DoorReply[9]=n1+'0';
- DoorReply[10]=n2+'0';
- DoorReply[11]=n3+'0';
- if(FindPort(DoorReply))
- {
- n3++;
- continue;
- }
- found=1;
- break;
- }
- if(found) break;
- n2++;
- }
- if(found) break;
- n1++;
- }
-
- if(found)replymp=CreatePort(DoorReply,0L);
-
- if(!found||!replymp)
- {
- FreeMem(XIM_Msg,sizeof(struct XIM));
- exit(30);
- }
-
- XIM_Msg->Msg.mn_Node.ln_Type=NT_MESSAGE;
- XIM_Msg->Msg.mn_Length=sizeof(struct XIM);
- XIM_Msg->Msg.mn_ReplyPort=replymp;
- XIM_Msg->Command=1;
- XIM_Msg->Data=2;
- XIM_Msg->NodeID=-1;
- XIM_Msg->LineNum=0;
-
- sprintf(PortName,"AEDoorPort%d",node);
- while(!(port=FindPort(PortName)));
-
- PutMsg(port,(struct Message *)XIM_Msg);
- Wait(1<<replymp->mp_SigBit);
- msg=(struct XIM *)GetMsg((struct MsgPort *)replymp);
- }
-
- void DeleteComm(void)
- {
- XIM_Msg->Command=2;
- PutMsg(port,(struct Message *)XIM_Msg);
- Wait(1<<replymp->mp_SigBit);
- while(msg=(struct XIM *)GetMsg((struct MsgPort *)replymp));
- FreeSignal(sigBit);
- DeletePort((struct MsgPort *)replymp);
- FreeMem(XIM_Msg,sizeof(struct XIM));
- }
-
- void SendStrDataCmd(int Command,char String[200],int Data)
- {
- XIM_Msg->Command=Command;
- XIM_Msg->Data=Data;
- strcpy(XIM_Msg->String,String);
- PutMsg(port,(struct Message *)XIM_Msg);
- (void)WaitPort(replymp);
- (void)GetMsg(replymp);
- }
- char *getbla(int Command)
- { XIM_Msg->Command=Command;
- PutMsg(port,(struct Message *)XIM_Msg);
- (void)WaitPort(replymp);
- (void)GetMsg(replymp);
- return(XIM_Msg->String);
- }
-
- void SendDataCmd(int Command,int Data)
- {
- SendStrDataCmd(Command,"",Data);
- }
-
- void SendStrCmd(int Command,char String[200])
- {
- SendStrDataCmd(Command,String,0);
- }
-
- void SendCmd(int Command)
- {
- SendStrDataCmd(Command,"",0);
- }
-
- void WriteStr(char String[200],int Data)
- {
- SendStrDataCmd(4,String,Data);
- }
-
- void ShowFile(char String[200])
- {
- SendStrDataCmd(8,String,0);
- }
-
- void GetDT(int Command,char String[200])
- {
- SendStrDataCmd(Command,String,1);
- }
-
- char *GetStr(int Data,char String[200])
- {
- SendStrDataCmd(0,String,Data);
- if(XIM_Msg->Data==-1)return(0);
- return(XIM_Msg->String);
- }
-
- long Hotkey(char String[200])
- {
- SendStrDataCmd(6,String,0);
- if(XIM_Msg->Data==-1)return(XIM_Msg->Data);
- return(XIM_Msg->String[0]);
- }
- char *Prompt(int Data,char String[200])
- {
- SendStrDataCmd(5,String,Data);
- return(XIM_Msg->String);
- }
-