diff --git a/ACP.e b/ACP.e index c5fd0ad..73e3fdb 100644 --- a/ACP.e +++ b/ACP.e @@ -44,35 +44,6 @@ '*stringlist', '*acpversion' -/* -'Setup' -BBS:Config%d -execute %s -Icon Setup Complete. -Cannot Locate Icon Config. - -aErrorCreatingD:dc.b 'Error Creating Directory %s',$A,0 -aCreatingIconS: dc.b 'Creating Icon %s',$A,0 -a3_3s: dc.b '>%-3.3s',0 -aS_txt: dc.b '%s.txt',0 -aErrorCreatingI:dc.b 'Error creating Icon %s',$A,0 -aErrorCreatin_0:dc.b 'Error Creating Directory %s',$A,0 -aCreatingIcon_0:dc.b 'Creating Icon %s',$A,0 -aDrw: dc.b '>DRW',0 -aS_txt_0: dc.b '%s.txt',0 -aErrorCreatin_1:dc.b 'Error creating Icon %s',$A,0 -aDir: dc.b '(DIR)',0 -aAddingTooltype:dc.b 9,'Adding ToolType %s',$A,0 -aErrorOpeningCo:dc.b 'Error opening config file',$A,0 -aDef: dc.b '>DEF',0 -aUsingDefaultIc:dc.b 'Using Default Icon',$A,0 -aSelectIconconf:dc.b 'Select IconConfig',0 -a?: dc.b '#?',0 -aS_1: dc.b 's:',0 -aAeicon_config: dc.b 'aeicon.config',0 - -*/ - ENUM ERR_NONE,ERR_ALREADY_RUNNING,ERR_STARTUP, ERR_VALIDATE,ERR_NO_DISKFONT,ERR_FDS_RANGE CONST LISTENQ=100 @@ -618,7 +589,7 @@ ENDPROC PROC openListenSocket(port) DEF server_s DEF servaddr=0:PTR TO sockaddr_in - DEF tempStr[255]:STRING + ->DEF tempStr[255]:STRING IF((server_s:=Socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) ->StringF(tempStr,'/X Telnet: Error creating listening socket. (\d)\b\n',Errno()) @@ -752,7 +723,7 @@ PROC initCycles() ENDPROC PROC initNdCycles() - DEF i,x + DEF x DEF list:PTR TO itemsList FOR x:=0 TO MAX_NODES-1 ndUser[x]:=NEW list.init() @@ -1752,7 +1723,7 @@ PROC maddNodes(nodes) ENDFOR ENDPROC -PROC maddItem(type,label:PTR TO CHAR,commKey:PTR TO CHAR,flags,mutual,user) +PROC maddItem(type,label:PTR TO CHAR,commKey:PTR TO CHAR,flags,mutual,userData) ->DEF i=0 was static DEF t:PTR TO newmenu DEF s:PTR TO CHAR @@ -1767,10 +1738,10 @@ PROC maddItem(type,label:PTR TO CHAR,commKey:PTR TO CHAR,flags,mutual,user) s:=AllocMem(80,MEMF_PUBLIC OR MEMF_CLEAR) IF(label) THEN strcpy(s,label) ELSE strcpy(s,'') t.label:=s - t.commkey:=0->//(STRPTR)CommKey + t.commkey:=commKey t.flags:=flags t.mutualexclude:=mutual - t.userdata:=0 + t.userdata:=userData maxMenus++ ENDIF maddItemi++ @@ -1788,7 +1759,6 @@ PROC maddRem() ENDPROC PROC regLastDownloads(name:PTR TO CHAR,dateStr:PTR TO CHAR,node) - DEF i=0 ->DEF num=0 was static regNodeDownloads(name,dateStr,node) @@ -1802,7 +1772,6 @@ PROC regNodeDownloads(name:PTR TO CHAR, dateStr:PTR TO CHAR,node) ENDPROC PROC regLastUploads(name:PTR TO CHAR,dateStr:PTR TO CHAR,node) - DEF i=0 ->DEF num=0 was static regNodeUploads(name,dateStr,node) @@ -1838,7 +1807,6 @@ PROC showQuiet(i) ENDPROC PROC regLastUser(name:PTR TO CHAR,dateStr:PTR TO CHAR,node) - DEF i=0 DEF tempStr[44]:STRING ->DEF num=0; was static @@ -2187,7 +2155,7 @@ PROC initSemaSemiNodes(s:PTR TO multiPort) DEF j WHILE(iDEF j=0 ->static int j=0; ->DEF set=FALSE ->static BOOL Set=FALSE; DEF ng:PTR TO newgadget - DEF s IF(setTheGadsj=FALSE) StrCopy(setOriText[0],'Sysop Login') @@ -3467,7 +3434,7 @@ PROC main() HANDLE DEF num DEF version[200]:STRING DEF windowSig,myappsig - DEF i,j,class + DEF i,class DEF newlock=NIL DEF telnetServerSocket=-1 DEF telnetSocket=-1 diff --git a/MiscFuncs.e b/MiscFuncs.e index d06f31e..c7d8641 100644 --- a/MiscFuncs.e +++ b/MiscFuncs.e @@ -79,6 +79,10 @@ EXPORT PROC strCmpi(test1: PTR TO CHAR, test2: PTR TO CHAR, len) ENDFOR ENDPROC TRUE +EXPORT PROC midStr2(dest,src,pos,len) + IF len>0 THEN MidStr(dest,src,pos,len) ELSE StrCopy(dest,'') +ENDPROC + EXPORT PROC charToLower(c) /* convert a given char to lowercase */ DEF str[1]:STRING @@ -209,7 +213,7 @@ EXPORT PROC formatLongDate(cDateVal,outDateStr) DEF d : PTR TO datestamp DEF dt : datetime DEF datestr[10]:STRING - DEF r,dateVal + DEF dateVal dateVal:=cDateVal-21600 @@ -236,7 +240,7 @@ EXPORT PROC formatLongTime(cDateVal,outDateStr) DEF d : PTR TO datestamp DEF dt : datetime DEF time[10]:STRING - DEF r,dateVal + DEF dateVal dateVal:=cDateVal-21600 @@ -265,7 +269,36 @@ EXPORT PROC formatLongDateTime(cDateVal,outDateStr) DEF datestr[10]:STRING DEF daystr[10]:STRING DEF timestr[10]:STRING - DEF r,dateVal + DEF dateVal + + dateVal:=cDateVal-21600 + + d:=dt.stamp + d.tick:=(dateVal-Mul(Div(dateVal,60),60)) + d.tick:=Mul(d.tick,50) + dateVal:=Div(dateVal,60) + d.days:=Div((dateVal),1440)-2922 ->-2922 days between 1/1/70 and 1/1/78 + d.minute:=dateVal-(Mul(d.days+2922,1440)) + + dt.format:=FORMAT_DOS + dt.flags:=0 + dt.strday:=daystr + dt.strdate:=datestr + dt.strtime:=timestr + + IF DateToStr(dt) + StringF(outDateStr,'\s[3] \s[7]\d\s \s',daystr,datestr,IF dt.stamp.days>=8035 THEN 20 ELSE 19,datestr+7,timestr) + RETURN TRUE + ENDIF +ENDPROC FALSE + +EXPORT PROC formatCDateTime(cDateVal,outDateStr) + DEF d : PTR TO datestamp + DEF dt : datetime + DEF datestr[10]:STRING + DEF daystr[10]:STRING + DEF timestr[10]:STRING + DEF dateVal dateVal:=cDateVal-21600 @@ -283,7 +316,7 @@ EXPORT PROC formatLongDateTime(cDateVal,outDateStr) dt.strtime:=timestr IF DateToStr(dt) - StringF(outDateStr,'\s[3] \s \s',daystr,datestr,timestr) + StringF(outDateStr,'\s[3] \s[3] \s[2] \s \d\s',daystr,datestr+3,datestr,timestr,IF dt.stamp.days>=8035 THEN 20 ELSE 19,datestr+7) RETURN TRUE ENDIF ENDPROC FALSE @@ -293,7 +326,7 @@ EXPORT PROC formatLongDateTime2(cDateVal,outDateStr,seperatorChar) DEF dt : datetime DEF datestr[10]:STRING DEF timestr[10]:STRING - DEF r,dateVal + DEF dateVal dateVal:=cDateVal-21600 diff --git a/axcommon.e b/axcommon.e index d436570..e84fe67 100644 --- a/axcommon.e +++ b/axcommon.e @@ -311,7 +311,7 @@ undocumented host addresses: 637 - get or set internet name 638 - get or set translator 639 - get or set host language name (languages.info) -640 - set amixnet outbound path (not yet implemented) +640 - set amixnet outbound path */ /* New host commands for /X5 using range 700+ */ diff --git a/axobjects.e b/axobjects.e index 41b2f9a..8dd2c6e 100644 --- a/axobjects.e +++ b/axobjects.e @@ -24,16 +24,16 @@ EXPORT OBJECT user /* Note ConfYM = the last msg you actually read, ConfRead is the same ?? */ newSinceDate: LONG pwdHash: LONG - confRead2: LONG - confRead3: LONG + confRead2: LONG ->not used + confRead3: LONG ->not used zoomType: INT - unknown: INT - unknown2: INT - unknown3: INT + unknown: INT ->not used + unknown2: INT ->not used + unknown3: INT ->not used xferProtocol: INT - filler2: INT - lcFiles: INT - badFiles: INT + filler2: INT ->not used + lcFiles: INT ->not used + badFiles: INT ->not used accountDate: LONG screenType: INT editorType: INT @@ -61,9 +61,9 @@ EXPORT OBJECT user creditTracking: CHAR -> track uploads/downloads flags in credit account translatorID: CHAR msgBaseRJoin:INT - confYM9: LONG - beginLogCall : LONG - protocol: CHAR + confYM9: LONG ->not used + beginLogCall : LONG ->not used + protocol: CHAR ->not really used uucpa: CHAR lineLength: CHAR newUser: CHAR @@ -88,7 +88,8 @@ EXPORT OBJECT userMisc downloadBytesBCD[8]:ARRAY OF CHAR uploadBytesBCD[8]:ARRAY OF CHAR eMail[50]:ARRAY OF CHAR - unused[146]:ARRAY OF CHAR + lastDlCPS:LONG + unused[142]:ARRAY OF CHAR ->unknown[28]:ARRAY OF CHAR ->nodeFlags[32]:ARRAY OF LONG ->confFlags2[10]:ARRAY OF LONG diff --git a/bcd.e b/bcd.e index caf4288..b59a0b2 100644 --- a/bcd.e +++ b/bcd.e @@ -102,7 +102,6 @@ ENDPROC EXPORT PROC convertFromBCD(inArray:PTR TO CHAR) DEF tempBCD[8]:ARRAY DEF bcdStr[20]:STRING - DEF i convertToBCD($ffffffff,tempBCD) subBCD2(tempBCD,inArray) diff --git a/express.e b/express.e index 54d09ac..c0d09dc 100644 --- a/express.e +++ b/express.e @@ -94,6 +94,8 @@ MODULE 'intuition/screens', '*mailssl', '*zmodem', '*bcd', + '*pwdhash', + '*tooltypes', '*expversion' DEF masterMsg:acpMessage @@ -136,14 +138,14 @@ DEF readQueued=FALSE DEF timerQueued=FALSE DEF ibuf, serbuff, inControl DEF commandText[255]:STRING -DEF loggedOnUser=NIL: PTR TO user +DEF loggedOnUser=NIL: PTR TO user ->shared with tooltypes.e DEF loggedOnUserKeys=NIL: PTR TO userKeys DEF loggedOnUserMisc=NIL: PTR TO userMisc DEF tempAccess: tempAccess DEF tempAccessGranted=FALSE DEF sopt=NIL: PTR TO startOption -DEF mailOptions=NIL: PTR TO mailConfig ->see also mailssl.e -DEF node +DEF mailOptions=NIL: PTR TO mailConfig ->shared with mailssl.e +DEF node ->shared with tooltypes.e DEF ringCount DEF nodeScreenDir[255]:STRING DEF confScreenDir[255]:STRING @@ -152,12 +154,12 @@ DEF reservedName[255]:STRING DEF consoleOutputDeviceName[255]:STRING DEF consoleInputDeviceName[255]:STRING -DEF currentConf=0 +DEF currentConf=0 ->shared with tooltypes.e DEF currentMsgBase=0 DEF relConfNum=0 DEF callerNum=0 DEF currentConfName[255]:STRING -DEF currentConfDir[255]:STRING +DEF currentConfDir[255]:STRING ->shared with tooltypes.e DEF msgBaseLocation[255]:STRING DEF uploadLocation[255]:STRING DEF userDataFile[255]:STRING @@ -181,7 +183,7 @@ DEF expressDate[15]:STRING DEF regKey[100]:STRING DEF mailStat=NIL: PTR TO mailStat DEF mailHeader=NIL: PTR TO mailHeader -DEF cmds: commands +DEF cmds: PTR TO commands ->shared with tooltyles.e DEF mybbsLoc[255]:STRING DEF parsedParams: PTR TO stringlist DEF confBases: PTR TO stdlist @@ -201,7 +203,6 @@ DEF bytesADL=0 DEF tTEFF=0 DEF tTCPS=0 DEF tTTM=0 -DEF tMPBT=0 DEF tBT=0 DEF dTBT=0 DEF beenUDd=0 @@ -252,7 +253,7 @@ DEF lastNewReadConf=0 DEF msgBuf: PTR TO stringlist DEF maxMsgLines = 800 DEF confNames: PTR TO stringlist -DEF confDirs: PTR TO stringlist +DEF confDirs: PTR TO stringlist ->shared with tooltyles.e DEF historyFolder[255]:STRING DEF userNotesFolder[255]:STRING DEF historyBuf : PTR TO stringlist @@ -271,13 +272,13 @@ DEF editor: editor DEF editorFileName[80]:STRING DEF editorFileInclude[80]:STRING -DEF xprLib: PTR TO stringlist +DEF xprLib: PTR TO stringlist ->shared with tooltypes.e DEF xprTitle: PTR TO stringlist DEF screenTypeTitle: PTR TO stringlist DEF screenTypeExt: PTR TO stringlist DEF scomment:PTR TO stringlist -DEF fCheckDir[255]:STRING +DEF fCheckDir[255]:STRING ->shared with tooltypes.e DEF hostLanguage[255]:STRING DEF userLanguage[255]:STRING @@ -336,6 +337,7 @@ DEF serShared=FALSE DEF zresume=0 DEF scropen=FALSE +DEF wantzwin=FALSE DEF screen=NIL:PTR TO screen DEF window=NIL:PTR TO window DEF defaultfontattr: textattr @@ -372,10 +374,10 @@ DEF sdReplyRexx=NIL: PTR TO rexxmsg DEF bgData:bgCheckData DEF bgFileCheck=FALSE -DEF diskObjectCache:PTR TO stdlist +DEF diskObjectCache:PTR TO stdlist ->shared with tooltypes.e DEF cacheResetOn=CACHE_RESET_NEVER -DEF cacheTests=0 -DEF cacheHits=0 +DEF cacheTests=0 ->shared with tooltypes.e +DEF cacheHits=0 ->shared with tooltypes.e DEF serialLocked=FALSE DEF ownDevSignal=0 @@ -447,33 +449,6 @@ PROC configFileExists(fname:PTR TO CHAR) ENDIF ENDPROC FALSE -PROC getUserAccessFilename(outFilename: PTR TO CHAR) - DEF tempStr[255]:STRING - - DEF i,c - - StrCopy(tempStr,loggedOnUser.name) - FOR i:=0 TO StrLen(tempStr)-1 - c:=tempStr[i] - SELECT c - CASE "%" - tempStr[i]:="_" - CASE "#" - tempStr[i]:="_" - CASE "?" - tempStr[i]:="_" - CASE "/" - tempStr[i]:="_" - CASE "(" - tempStr[i]:="_" - CASE ")" - tempStr[i]:="_" - ENDSELECT - ENDFOR - - StringF(outFilename,'\sACCESS/\s',cmds.bbsLoc,tempStr) -ENDPROC - PROC convertAccess() DEF tempStr[255]:STRING @@ -534,7 +509,7 @@ PROC modemOffHook() IF serShared=FALSE serShared:=TRUE IF(sopt.toggles[TOGGLES_SERIALRESET]) - resetSystem(0) + resetSystem() intDoReset(sopt.offHook) ioFlags[IOFLAG_SER_IN]:=0 ioFlags[IOFLAG_SER_OUT]:=0 @@ -555,8 +530,7 @@ PROC modemOffHook() ENDPROC PROC updateTimeUsed() - DEF currDay,logonDay,currTime,time - DEF tempstr[255]:STRING + DEF currDay,logonDay,currTime currTime:=getSystemTime() currDay:=Div(currTime-21600,86400) logonDay:=Div(logonTime-21600,86400) @@ -682,7 +656,7 @@ PROC setNRAMS() n++ StringF(nramName,'NRAM.\d',n) UNTIL readToolType(TOOLTYPE_NRAMS,node,nramName,nramData)=FALSE - resetSystem(0); + resetSystem() setEnvStat(ENV_AWAITCONNECT) ELSE setEnvMsg('NO NRAM.DEF') @@ -868,7 +842,7 @@ PROC rePurge() ENDWHILE ENDPROC -PROC resetSystem(yes) +PROC resetSystem() DEF tempStr[255]:STRING DEF ni:PTR TO nodeInfo @@ -938,7 +912,7 @@ PROC checkDoorMsg(mode) DEF ch,cmd DEF type,temp,exit DEF servermsg: PTR TO jhMessage - DEF len,i + DEF i DEF subState: loggedOnState DEF debugstr[255]:STRING DEF tempstring[255]:STRING @@ -1253,9 +1227,9 @@ PROC checkDoorMsg(mode) strCpy(servermsg.string,tempstring,80) CASE BB_CHATFLAG IF sysopAvail - strCpy(servermsg.string,'YES',ALL) + strCpy(servermsg.string,'ON',ALL) ELSE - strCpy(servermsg.string,'NO',ALL) + strCpy(servermsg.string,'OFF',ALL) ENDIF CASE EXPRESS_VERSION getExpressMajorVer(tempstring) @@ -1515,13 +1489,6 @@ PROC stripAnsi(s: PTR TO CHAR, d: PTR TO CHAR, resetit, strip) SetStr(d,StrLen(d)) ENDPROC -PROC aePutChar(c) - DEF str[1]:STRING - StrCopy(str,' ') - str[0]:=c - aePuts(str) -ENDPROC - PROC aePuts(string,force=FALSE) aePuts2(string,-1,force) ENDPROC @@ -1579,13 +1546,19 @@ EXCEPT DO ENDSELECT ENDPROC -PROC fAEPutStr(string) - aePuts(string) -ENDPROC - PROC aePuts2(string,length,force=FALSE) DEF str[1023]:STRING DEF str2[1023]:STRING + DEF cls[1]:STRING + DEF p + + StrCopy(cls,'#') + cls[0]:=12 + IF length=-1 + IF InStr(string,cls)>=0 THEN lineCount:=0 + ELSE + IF ((p:=InStr(string,cls))>=0) AND (p0) OR (ansiColour=FALSE) OR (bitPlanes<3)) IF length<>-1 THEN StrCopy(str,string,length) ELSE StrCopy(str,string) @@ -1639,7 +1612,6 @@ ENDPROC PROC telnetSend(string:PTR TO CHAR, putlen) DEF i,c,e,maxBlkSize,tot,offs,n,telsendDelay DEF buf2 - DEF debugstr[255]:STRING c:=0 FOR i:=0 TO putlen-1 @@ -1849,6 +1821,10 @@ ENDPROC PROC checkInput() checkDoorMsg(0) + IF servercmd=SV_UNICONIFY + servercmd:=-1 + IF scropen THEN expressToFront() ELSE openExpressScreen() + ENDIF ENDPROC ((checkCon() OR checkSer() OR checkTelnetData())) PROC checkScreenClear() @@ -1991,7 +1967,6 @@ PROC yesNo(flag) ENDPROC PROC addToHistory(text) - DEF msg IF historyBuf.count()<20 historyNum:=historyBuf.add(text) historyCycle:=historyNum @@ -2266,93 +2241,6 @@ PROC queueSerialRead(whereto,bsize=1) readQueued:=TRUE ENDPROC TRUE -PROC calcPasswordHash(pwd: PTR TO CHAR) - DEF hash - DEF hashdata - - hashdata:=NEW[$0000,$0000,$7707,$3096,$EE0E,$612C,$9909,$51BA,$076D,$C419,$706A,$F48F,$E963,$A535,$9E64,$95A3,$0EDB,$8832,$79DC,$B8A4,$E0D5,$E91E, - $97D2,$D988,$09B6,$4C2B,$7EB1,$7CBD,$E7B8,$2D07,$90BF,$1D91,$1DB7,$1064,$6AB0,$20F2,$F3B9,$7148,$84BE,$41DE,$1ADA,$D47D,$6DDD,$E4EB, - $F4D4,$B551,$83D3,$85C7,$136C,$9856,$646B,$A8C0,$FD62,$F97A,$8A65,$C9EC,$1401,$5C4F,$6306,$6CD9,$FA0F,$3D63,$8D08,$0DF5,$3B6E,$20C8, - $4C69,$105E,$D560,$41E4,$A267,$7172,$3C03,$E4D1,$4B04,$D447,$D20D,$85FD,$A50A,$B56B,$35B5,$A8FA,$42B2,$986C,$DBBB,$C9D6,$ACBC,$F940, - $32D8,$6CE3,$45DF,$5C75,$DCD6,$0DCF,$ABD1,$3D59,$26D9,$30AC,$51DE,$003A,$C8D7,$5180,$BFD0,$6116,$21B4,$F4B5,$56B3,$C423,$CFBA,$9599, - $B8BD,$A50F,$2802,$B89E,$5F05,$8808,$C60C,$D9B2,$B10B,$E924,$2F6F,$7C87,$5868,$4C11,$C161,$1DAB,$B666,$2D3D,$76DC,$4190,$01DB,$7106, - $98D2,$20BC,$EFD5,$102A,$71B1,$8589,$06B6,$B51F,$9FBF,$E4A5,$E8B8,$D433,$7807,$C9A2,$0F00,$F934,$9609,$A88E,$E10E,$9818,$7F6A,$0DBB, - $086D,$3D2D,$9164,$6C97,$E663,$5C01,$6B6B,$51F4,$1C6C,$6162,$8565,$30D8,$F262,$004E,$6C06,$95ED,$1B01,$A57B,$8208,$F4C1,$F50F,$C457, - $65B0,$D9C6,$12B7,$E950,$8BBE,$B8EA,$FCB9,$887C,$62DD,$1DDF,$15DA,$2D49,$8CD3,$7CF3,$FBD4,$4C65,$4DB2,$6158,$3AB5,$51CE,$A3BC,$0074, - $D4BB,$30E2,$4ADF,$A541,$3DD8,$95D7,$A4D1,$C46D,$D3D6,$F4FB,$4369,$E96A,$346E,$D9FC,$AD67,$8846,$DA60,$B8D0,$4404,$2D73,$3303,$1DE5, - $AA0A,$4C5F,$DD0D,$7CC9,$5005,$713C,$2702,$41AA,$BE0B,$1010,$C90C,$2086,$5768,$B525,$206F,$85B3,$B966,$D409,$CE61,$E49F,$5EDE,$F90E, - $29D9,$C998,$B0D0,$9822,$C7D7,$A8B4,$59B3,$3D17,$2EB4,$0D81,$B7BD,$5C3B,$C0BA,$6CAD,$EDB8,$8320,$9ABF,$B3B6,$03B6,$E20C,$74B1,$D29A, - $EAD5,$4739,$9DD2,$77AF,$04DB,$2615,$73DC,$1683,$E363,$0B12,$9464,$3B84,$0D6D,$6A3E,$7A6A,$5AA8,$E40E,$CF0B,$9309,$FF9D,$0A00,$AE27, - $7D07,$9EB1,$F00F,$9344,$8708,$A3D2,$1E01,$F268,$6906,$C2FE,$F762,$575D,$8065,$67CB,$196C,$3671,$6E6B,$06E7,$FED4,$1B76,$89D3,$2BE0, - $10DA,$7A5A,$67DD,$4ACC,$F9B9,$DF6F,$8EBE,$EFF9,$17B7,$BE43,$60B0,$8ED5,$D6D6,$A3E8,$A1D1,$937E,$38D8,$C2C4,$4FDF,$F252,$D1BB,$67F1, - $A6BC,$5767,$3FB5,$06DD,$48B2,$364B,$D80D,$2BDA,$AF0A,$1B4C,$3603,$4AF6,$4104,$7A60,$DF60,$EFC3,$A867,$DF55,$316E,$8EEF,$4669,$BE79, - $CB61,$B38C,$BC66,$831A,$256F,$D2A0,$5268,$E236,$CC0C,$7795,$BB0B,$4703,$2202,$16B9,$5505,$262F,$C5BA,$3BBE,$B2BD,$0B28,$2BB4,$5A92, - $5CB3,$6A04,$C2D7,$FFA7,$B5D0,$CF31,$2CD9,$9E8B,$5BDE,$AE1D,$9B64,$C2B0,$EC63,$F226,$756A,$A39C,$026D,$930A,$9C09,$06A9,$EB0E,$363F, - $7207,$6785,$0500,$5713,$95BF,$4A82,$E2B8,$7A14,$7BB1,$2BAE,$0CB6,$1B38,$92D2,$8E9B,$E5D5,$BE0D,$7CDC,$EFB7,$0BDB,$DF21,$86D3,$D2D4, - $F1D4,$E242,$68DD,$B3F8,$1FDA,$836E,$81BE,$16CD,$F6B9,$265B,$6FB0,$77E1,$18B7,$4777,$8808,$5AE6,$FF0F,$6A70,$6606,$3BCA,$1101,$0B5C, - $8F65,$9EFF,$F862,$AE69,$616B,$FFD3,$166C,$CF45,$A00A,$E278,$D70D,$D2EE,$4E04,$8354,$3903,$B3C2,$A767,$2661,$D060,$16F7,$4969,$474D, - $3E6E,$77DB,$AED1,$6A4A,$D9D6,$5ADC,$40DF,$0B66,$37D8,$3BF0,$A9BC,$AE53,$DEBB,$9EC5,$47B2,$CF7F,$30B5,$FFE9,$BDBD,$F21C,$CABA,$C28A, - $53B3,$9330,$24B4,$A3A6,$BAD0,$3605,$CDD7,$0693,$54DE,$5729,$23D9,$67BF,$B366,$7A2E,$C461,$4AB8,$5D68,$1B02,$2A6F,$2B94,$B40B,$BE37, - $C30C,$8EA1,$5A05,$DF1B,$2D02,$EF8D,0]:INT - - MOVE.L pwd,A0 - BSR sub_486F0 - MOVE.L D0,hash - END hashdata - RETURN hash - -sub_486F0: - MOVEM.L D1-D7/A1-A6,-(A7) - MOVEA.L A0,A3 - MOVEQ #0,D0 - TST.B (A0) - BNE.W loc_48704 - MOVEM.L (A7)+,D1-D7/A1-A6 - RTS --> --------------------------------------------------------------------------- - -loc_48704: - MOVEQ #0,D1 - -loc_48706: - MOVE.B (A0)+,D0 - TST.B D0 - BEQ.W loc_48712 - ADDQ.B #1,D1 - BRA.S loc_48706 --> --------------------------------------------------------------------------- - -loc_48712: - MOVEA.L A3,A0 - MOVEA.L A0,A1 - MOVEA.L A0,A2 - MOVE.L hashdata,A1 - MOVE.L D1,D5 - - MOVEQ #0,D0 - MOVEQ #8,D2 - MOVEQ #$FFFFFFFF,D3 - MOVEQ #2,D4 - -loc_48726: - MOVEQ #0,D1 - MOVE.B (A0)+,D1 - EOR.B D0,D1 - AND.W D3,D1 - ASL.W D4,D1 - MOVE.L 0(A1,D1.L),D1 - LSR.L D2,D0 - EOR.L D1,D0 - SUBQ.L #1,D5 - BNE.S loc_48726 - SWAP D0 - NOT.W D0 - ROXL.L D0,D0 - NEG.L D0 - MOVEM.L (A7)+,D1-D7/A1-A6 - RTS -ENDPROC - PROC loadTranslator(translator:PTR TO translator,fileName) DEF fh DEF intxt:PTR TO CHAR @@ -2538,10 +2426,9 @@ PROC unloadTranslators() ENDPROC PROC loadHistory() - DEF fh,i + DEF fh DEF fname[255]:STRING DEF tempstr[255]:STRING - DEF msg StringF(fname,'\shistory\d',historyFolder,loggedOnUser.slotNumber) IF(fh:=Open(fname,MODE_OLDFILE))<>0 @@ -2601,7 +2488,7 @@ PROC addFlagItems(list:PTR TO stdlist,confNum,fileNames) FOR i:=0 TO EstrLen(fileNames)-1 IF (fileNames[i]=" ") IF EstrLen(fname)>0 - addFlagItem(list,-1,fname) + addFlagItem(list,confNum,fname) StrCopy(fname,'') ENDIF ELSE @@ -2609,7 +2496,7 @@ PROC addFlagItems(list:PTR TO stdlist,confNum,fileNames) ENDIF ENDFOR IF (EstrLen(fname)>0) - addFlagItem(list,-1,fname) + addFlagItem(list,confNum,fname) ENDIF ENDPROC @@ -2629,7 +2516,7 @@ ENDPROC PROC loadFlagged() DEF fh DEF data[2048]:STRING - DEF conf,len,i + DEF conf,len DEF fname[255]:STRING IF ownPartFiles @@ -2755,11 +2642,9 @@ PROC dumpActiveUser(filename: PTR TO CHAR) Close(fi) ENDPROC - -PROC checkUserOnLine(user: PTR TO user, check) +PROC checkUserOnLine(check) DEF fh,lock - DEF temp[10]:STRING - DEF error=0,stat,loop + DEF error=0,loop DEF tempStr[255]:STRING DEF tuser:user DEF sp:PTR TO singlePort @@ -2792,7 +2677,7 @@ PROC checkUserOnLine(user: PTR TO user, check) UnLock(lock) StringF(tempStr,'\snode\d.user',cmds.bbsLoc,loop) IF(fh:=Open(tempStr,MODE_OLDFILE))<>0 - IF(stat:=Read(fh,tuser,SIZEOF user)) + IF(Read(fh,tuser,SIZEOF user)) IF(stringCompare(tuser.name,loggedOnUser.name)=RESULT_SUCCESS) error:=0 lock:=NIL @@ -2814,14 +2699,14 @@ PROC checkUserOnLine(user: PTR TO user, check) StringF(tempStr,'\snode\d.user',cmds.bbsLoc,node) IF(fh:=Open(tempStr,MODE_NEWFILE))<>0 - IF(stat:=Write(fh,loggedOnUser,SIZEOF user)) THEN error:=1 + IF(Write(fh,loggedOnUser,SIZEOF user)) THEN error:=1 ENDIF Close(fh) /* Write current userkeys information */ ->//(RTS) StringF(tempStr,'\snode\d.userkeys',cmds.bbsLoc,node) /* file name */ IF(fh:=Open(tempStr,MODE_NEWFILE))<>0 - IF(stat:=Write(fh,loggedOnUserKeys,SIZEOF userKeys)) THEN error:=1 + IF(Write(fh,loggedOnUserKeys,SIZEOF userKeys)) THEN error:=1 ENDIF Close(fh) ->// printf("logon.c (79) User_keys.Userflags = %2x\b\n",User_keys.Userflags) @@ -2829,136 +2714,6 @@ PROC checkUserOnLine(user: PTR TO user, check) ENDPROC error - -PROC getNodeFile(toolType,tooltypeSelector,nodeFile) - DEF tempStr[255]:STRING - DEF tempStr2[255]:STRING - DEF i,p - - SELECT toolType - CASE TOOLTYPE_NODE - -> tooltypeSector is node number - StringF(nodeFile,'\sNode\d',cmds.bbsLoc,tooltypeSelector) - CASE TOOLTYPE_WINDOW - -> tooltypeSector is node number - StringF(nodeFile,'\sNode\d/WINDOW.DEF',cmds.bbsLoc,tooltypeSelector) - CASE TOOLTYPE_CONFCONFIG - -> tooltypeSector is not used - StringF(nodeFile,'\sConfconfig',cmds.bbsLoc) - CASE TOOLTYPE_BBSCONFIG - -> tooltypeSector is not used - StringF(nodeFile,'\sbbsConfig',cmds.bbsLoc) - CASE TOOLTYPE_NAMESNOTALLOWED - -> tooltypeSector is not used - StringF(nodeFile,'\sNamesNotAllowed',cmds.bbsLoc) - CASE TOOLTYPE_CONF - -> tooltypeSector is conf number - ->get conf location - StringF(tempStr,'LOCATION.\d',tooltypeSelector) - readToolType(TOOLTYPE_CONFCONFIG,'',tempStr,tempStr2) - IF tempStr2[StrLen(tempStr2)-1]="/" THEN SetStr(tempStr2,StrLen(tempStr2)-1) - StringF(nodeFile,'\s',tempStr2) - CASE TOOLTYPE_MSGBASE - -> tooltypeSector is conf number - ->get conf location - getConfLocation(tooltypeSelector,tempStr) - StringF(nodeFile,'\sMsgBases',tempStr) - CASE TOOLTYPE_BBSCMD - -> tooltypeSector is command name string - StringF(nodeFile,'\sCommands/BBSCmd/\s',cmds.bbsLoc,tooltypeSelector) - CASE TOOLTYPE_CONFCMD - -> tooltypeSector is command name string - StringF(nodeFile,'\sCommands/Conf\dCmd/\s',cmds.bbsLoc,currentConf,tooltypeSelector) - CASE TOOLTYPE_CONFCMD2 - -> tooltypeSector is command name string - StringF(nodeFile,'\s\s',currentConfDir,tooltypeSelector) - CASE TOOLTYPE_NODECMD - -> tooltypeSector is command name string - StringF(nodeFile,'\sCommands/Node\dCmd/\s',cmds.bbsLoc,node,tooltypeSelector) - CASE TOOLTYPE_CONFSYSCMD - -> tooltypeSector is command name string - StringF(nodeFile,'\sCommands/Conf\dSysCmd/\s',cmds.bbsLoc,currentConf,tooltypeSelector) - CASE TOOLTYPE_NODESYSCMD - -> tooltypeSector is command name string - StringF(nodeFile,'\sCommands/Node\dSysCmd/\s',cmds.bbsLoc,node,tooltypeSelector) - CASE TOOLTYPE_SYSCMD - -> tooltypeSector is command name string - StringF(nodeFile,'\sCommands/SYSCmd/\s',cmds.bbsLoc,tooltypeSelector) - CASE TOOLTYPE_DRIVES - -> tooltypeSector is not used - StringF(nodeFile,'\sDrives',cmds.bbsLoc) - CASE TOOLTYPE_COMPUTERLIST - -> tooltypeSector is not used - StringF(nodeFile,'\sComputerList',cmds.bbsLoc) - CASE TOOLTYPE_DEFAULT_ACCESS - -> tooltypeSector is not used - StringF(nodeFile,'\sAccess',cmds.bbsLoc) - CASE TOOLTYPE_USER_ACCESS - -> tooltypeSector is not used - getUserAccessFilename(nodeFile) - CASE TOOLTYPE_ACCESS - -> tooltypeSector is access level number - StringF(nodeFile,'\sAccess/ACS.\d',cmds.bbsLoc,tooltypeSelector) - CASE TOOLTYPE_AREA - -> tooltypeSector is access area name - StringF(nodeFile,'\sAccess/AREA.\s',cmds.bbsLoc,tooltypeSelector) - CASE TOOLTYPE_PRESET - -> tooltypeSector is preset level number - StringF(nodeFile,'\sAccess/PRESET.\d',cmds.bbsLoc,tooltypeSelector) - CASE TOOLTYPE_NODE_PRESET - -> tooltypeSector is access level number, note this also uses the current node - StringF(nodeFile,'\sNode\d/PRESET.\d',cmds.bbsLoc,node,tooltypeSelector) - CASE TOOLTYPE_FCHECK - -> tooltypeSector is file type - StringF(nodeFile,'\s/\s',fCheckDir,tooltypeSelector) - CASE TOOLTYPE_NODE_WINDOW - -> tooltypeSector is node number - StringF(nodeFile,'\sNode\d/WINDOW.DEF',cmds.bbsLoc,tooltypeSelector) - CASE TOOLTYPE_NODE_TIMES - -> tooltypeSector is node number - StringF(nodeFile,'\sNode\d/TIMES.DEF',cmds.bbsLoc,tooltypeSelector) - CASE TOOLTYPE_CONNECT - -> tooltypeSector is node number - StringF(nodeFile,'\sNode\d/Connect.Def',cmds.bbsLoc,tooltypeSelector) - CASE TOOLTYPE_XPRTYPES - -> tooltypeSector is not used - StringF(nodeFile,'\sProtocols/XprTypes',cmds.bbsLoc) - CASE TOOLTYPE_XFERLIB - -> tooltypeSector is xpr lib number - StringF(nodeFile,'\sProtocols/\s',cmds.bbsLoc,xprLib.item(tooltypeSelector)) - CASE TOOLTYPE_SCREENTYPES - -> tooltypeSector is not used - StringF(nodeFile,'\sScreenTypes',cmds.bbsLoc) - CASE TOOLTYPE_NRAMS - -> tooltypeSector is node, - StringF(tempStr,'\sNode\d/NRAMS',cmds.bbsLoc,tooltypeSelector) - IF findFirst(tempStr,tempStr2) - p:=-1 - FOR i:=0 TO StrLen(tempStr2)-1 - IF tempStr2[i]="." THEN p:=i - ENDFOR - IF (p>=0) - SetStr(tempStr2,p) - ENDIF - StringF(nodeFile,'\s/\s',tempStr,tempStr2) - ELSE - StrCopy(nodeFile,'') - ENDIF - CASE TOOLTYPE_ASCPACK - -> tooltypeSector is not used - StringF(nodeFile,'\sZoom/ASCPACK',cmds.bbsLoc) - CASE TOOLTYPE_QWKPACK - -> tooltypeSector is not used - StringF(nodeFile,'\sZoom/QWKPACK',cmds.bbsLoc) - CASE TOOLTYPE_QWKCONFIG - -> tooltypeSector is not used - StringF(nodeFile,'\sZoom/QWKCFG',cmds.bbsLoc) - CASE TOOLTYPE_LANGUAGES - -> tooltypeSector is not used - StringF(nodeFile,'\sLanguages',cmds.bbsLoc) - ENDSELECT -ENDPROC - PROC findAcsLevel() DEF ttfile[255]:STRING,found,level level:=loggedOnUser.secStatus/5*5 @@ -2975,206 +2730,6 @@ PROC higherAccess() aePuts('\b\nCommand requires higher access.\b\n') ENDPROC -PROC readToolType(toolType,tooltypeSelector,key,outValue) - DEF nodeFile[255]:STRING - DEF do: PTR TO diskobject - DEF tooltypes - DEF s: PTR TO CHAR - - s:=NIL - getNodeFile(toolType,tooltypeSelector,nodeFile) - - do:=getOrCreateCacheItem(nodeFile) - IF (do) - tooltypes:=do.tooltypes - IF (s:=FindToolType(tooltypes,key)) THEN StrCopy(outValue,s,ALL) - ENDIF - IF diskObjectCache=NIL THEN FreeDiskObject(do) -ENDPROC s<>NIL - -PROC readToolTypeInt(toolType,tooltypeSelector,key) - DEF value[255]:STRING - IF readToolType(toolType,tooltypeSelector,key,value) - RETURN Val(value) - ENDIF -ENDPROC -1 - -PROC checkToolType(toolType,tooltypeSelector,key,testValue) - DEF nodeFile[255]:STRING - DEF do: diskobject - DEF tooltypes - DEF s: PTR TO CHAR - DEF result=FALSE - - s:=NIL - - getNodeFile(toolType,tooltypeSelector,nodeFile) - - do:=getOrCreateCacheItem(nodeFile) - IF (do) - tooltypes:=do.tooltypes - IF(s:=FindToolType(tooltypes,key)) - IF (MatchToolValue(s,testValue)) THEN result:=TRUE - ENDIF - ENDIF - IF diskObjectCache=NIL THEN FreeDiskObject(do) -ENDPROC result - -PROC checkToolTypeExists(toolType,tooltypeSelector,key) - DEF nodeFile[255]:STRING - DEF do: diskobject - DEF tooltypes - DEF s: PTR TO CHAR - DEF result=FALSE - - s:=NIL - - getNodeFile(toolType,tooltypeSelector,nodeFile) - - do:=getOrCreateCacheItem(nodeFile) - IF (do) - tooltypes:=do.tooltypes - IF(s:=FindToolType(tooltypes,key)) THEN result:=TRUE - ENDIF - IF diskObjectCache=NIL THEN FreeDiskObject(do) -ENDPROC result - -PROC getOrCreateCacheItem(fileName:PTR TO CHAR) - DEF i,cnt,found=FALSE - DEF cacheObj: PTR TO diskObjectCacheItem - DEF do=NIL:PTR TO diskobject - DEF fn2[255]:STRING - DEF ownToolTypes - DEF toolTypes:PTR TO LONG - DEF fh,fileBuf,off,lineCount,len - - IF diskObjectCache<>NIL - cnt:=diskObjectCache.count() - - i:=0 - WHILE (iLRU algorithm, move most recently used to end of list - i++ - WHILE iNIL - fileBuf:=New(getFileSize(fn2)+1) ->allow an extra char in case file does not end in LF - - fh:=Open(fn2,MODE_OLDFILE) - IF fh<>0 - off:=0 - lineCount:=0 - WHILE(ReadStr(fh,fn2)<>-1) OR (StrLen(fn2)>0) - len:=0 - WHILE (fn2[len]<>0) AND (fn2[len]<>";") - len++ - ENDWHILE - - ->trim trailing space - WHILE (fn2[len-1]<=32) AND (len>0) - len-- - EXIT len=0 ->this is just here to prevent the fn2[len-1] causing a buffer underrun in the absence of short circuit evaluation - ENDWHILE - SetStr(fn2,len) - - AstrCopy(fileBuf+off,fn2,len+1) - lineCount++ - off:=off+len+1 - ENDWHILE - - toolTypes:=List(lineCount+1) - off:=0 - FOR i:=1 TO lineCount - listAdd2(toolTypes,fileBuf+off) - off:=off+StrLen(fileBuf+off)+1 - ENDFOR - ListAdd(toolTypes,[NIL]) - do.tooltypes:=toolTypes - ownToolTypes:=TRUE - Close(fh) - ELSE - Dispose(fileBuf) - FreeDiskObject(do) - do:=NIL - ENDIF - ENDIF - ENDIF - IF diskObjectCache<>NIL - cacheObj:=NEW cacheObj - cacheObj.fileName:=String(StrLen(fileName)) - cacheObj.ownsToolTypes:=ownToolTypes - StrCopy(cacheObj.fileName,fileName) - cacheObj.diskObject:=do - - IF diskObjectCache.count()<(diskObjectCache.maxSize()-1) - diskObjectCache.add(cacheObj) - ELSE - cacheObj:=diskObjectCache.item(0) - DisposeLink(cacheObj.fileName) - FreeDiskObject(cacheObj.diskObject) - diskObjectCache.remove(0) - diskObjectCache.add(cacheObj) - ENDIF - ENDIF - ENDIF -ENDPROC do - -PROC clearDiskObjectCache() - DEF cacheObj: PTR TO diskObjectCacheItem - DEF i, do: PTR TO diskobject - DEF mem - - IF diskObjectCache=NIL THEN RETURN - FOR i:=0 TO diskObjectCache.count()-1 - IF (cacheObj:=diskObjectCache.item(i)) - IF cacheObj.ownsToolTypes - do:=cacheObj.diskObject - mem:=do.tooltypes[0] -> release the file buffer (first string pointer points to start of buffer) - Dispose(mem) - DisposeLink(do.tooltypes) ->our tooltypes is a list that needs to be freed - ENDIF - DisposeLink(cacheObj.fileName) - IF cacheObj.diskObject<>NIL - do:=cacheObj.diskObject - FreeDiskObject(do) - ENDIF - END cacheObj - ENDIF - ENDFOR - diskObjectCache.clear() - cacheTests:=0 - cacheHits:=0 -ENDPROC - PROC startProcess(exestring, stacksize, priority, async, doorTrap) DEF filetags DEF task,temp @@ -3216,13 +2771,12 @@ PROC runDoor(cmd,type,command,params,resident,doorTrap,privcmd,pri=0,stacksize=2 DEF doormsg: PTR TO doorMsg DEF temp DEF async,ch - DEF i,f + DEF i DEF nodes = 0,msgcmd DEF tempstring[255]:STRING DEF tempstring2[255]:STRING DEF runOnExit[255]:STRING DEF runOnExit2[255]:STRING - DEF cb:PTR TO confBase DEF exit=0 DEF alreadyActive=FALSE DEF tuserdata:PTR TO user,tuserkeys:PTR TO userKeys, tusermisc: PTR TO userMisc @@ -3433,7 +2987,7 @@ PROC runDoor(cmd,type,command,params,resident,doorTrap,privcmd,pri=0,stacksize=2 CASE JH_SIGBIT msg.data:=doorExtSig CASE JH_FetchKey - IF checkCon() OR checkSer() OR checkTelnetData() + IF checkInput() msg.command:=readChar(doorTimeout) IF (msg.command<0) THEN msg.data:=-1 ELSE msg.data:=1 ELSE @@ -3716,9 +3270,9 @@ PROC runDoor(cmd,type,command,params,resident,doorTrap,privcmd,pri=0,stacksize=2 strCpy(msg.string,tempstring,200) CASE BB_CHATFLAG IF sysopAvail - strCpy(msg.string,'YES',ALL) + strCpy(msg.string,'ON',ALL) ELSE - strCpy(msg.string,'NO',ALL) + strCpy(msg.string,'OFF',ALL) ENDIF CASE BB_CHATSET IF msg.data @@ -3733,12 +3287,14 @@ PROC runDoor(cmd,type,command,params,resident,doorTrap,privcmd,pri=0,stacksize=2 ENDIF ENDIF CASE DT_STAMP_LASTON - formatLongDateTime(loggedOnUser.timeLastOn,msg.string) + formatCDateTime(loggedOnUser.timeLastOn,tempstring) + strCpy(msg.string,tempstring,200) CASE DT_CURR_TIME StringF(tempstring,'\d',getSystemTime()) strCpy(msg.string,tempstring,200) CASE DT_STAMP_CTIME - formatLongDateTime(getSystemTime(),msg.string) + formatCDateTime(getSystemTime(),tempstring) + strCpy(msg.string,tempstring,200) CASE DT_CONFACCESS IF(msg.data) THEN strCpy(msg.string,loggedOnUser.conferenceAccess,10) ELSE strCpy(loggedOnUser.conferenceAccess,msg.string,10) CASE BB_PCONFNAME @@ -3774,7 +3330,7 @@ PROC runDoor(cmd,type,command,params,resident,doorTrap,privcmd,pri=0,stacksize=2 getExpressMajorVer(tempstring) strCpy(msg.string,tempstring,200) CASE GETKEY - IF(checkSer() OR checkCon() OR checkTelnetData()) THEN msg.string[0]:="1" ELSE msg.string[0]:="0" + IF checkInput() THEN msg.string[0]:="1" ELSE msg.string[0]:="0" msg.string[1]:=0 CASE RAWARROW IF(rawArrow) THEN rawArrow:=FALSE ELSE rawArrow:=TRUE @@ -4103,7 +3659,7 @@ PROC runDoor(cmd,type,command,params,resident,doorTrap,privcmd,pri=0,stacksize=2 debugLog(LOG_WARN,'BB_CONFACCOUNT cannot currently set conf accounting') CASE DT_CALLEDTODAY IF (msg.data) - StringF(tempstring,'\d',loggedOnUserKeys.timesOnToday) + StringF(tempstring,'\d',getTodaysCalls(loggedOnUser,loggedOnUserKeys)) strCpy(msg.string,tempstring,200) ELSE loggedOnUserKeys.timesOnToday:=Val(msg.string) @@ -4112,7 +3668,7 @@ PROC runDoor(cmd,type,command,params,resident,doorTrap,privcmd,pri=0,stacksize=2 IF(StrLen(sopt.ramPen)>0) THEN StringF(tempstring,'\s/',sopt.ramPen) ELSE StringF(tempstring,'\sNode\d/Playpen/',cmds.bbsLoc,node) strCpy(msg.string,tempstring,200) CASE ICONIFYQUERY - strCpy(msg.string,IF scropen THEN "NO" ELSE "YES",200) + strCpy(msg.string,IF scropen THEN 'NO' ELSE 'YES',200) CASE LOGON_UNAME debugLog(LOG_WARN,'LOGON_UNAME not currently supported') CASE LOGON_UPASS @@ -4871,7 +4427,6 @@ ENDPROC 0 PROC readRawChar(timeout,extsig = 0) DEF wasControl,ch DEF timedout,signalled - DEF temp[1]:STRING conPuts('[ p') /* turn console cursor on */ REPEAT @@ -4889,7 +4444,6 @@ ENDPROC ch PROC readChar(timeout, extsig = 0) DEF wasControl,ch DEF timedout,signalled - DEF temp[1]:STRING conPuts('[ p') /* turn console cursor on */ @@ -4906,10 +4460,12 @@ PROC readChar(timeout, extsig = 0) ENDPROC ch PROC checkForPause() - DEF stat,linelen + DEF linelen DEF input[3]:STRING - IF loggedOnUser<>NIL THEN linelen:=loggedOnUser.lineLength ELSE linelen:=30 + IF loggedOnUser=NIL THEN RETURN RESULT_SUCCESS + + linelen:=loggedOnUser.lineLength IF linelen=0 THEN linelen:=22 IF(nonStopDisplayFlag=FALSE) THEN lineCount++ @@ -4944,7 +4500,6 @@ PROC conCLS() StrCopy(cls,' ',ALL) cls[0]:=12 conPuts(cls) - lineCount:=0 ENDPROC PROC sendCLS() @@ -4952,7 +4507,6 @@ PROC sendCLS() StrCopy(cls,' ',ALL) cls[0]:=12 aePuts(cls) - lineCount:=0 ENDPROC PROC sendBELL() @@ -5011,7 +4565,7 @@ PROC processMciCmd(mcidata,len,pos) t:=0 ENDIF - MidStr(cmd,mcidata,pos,maxLen-pos) + midStr2(cmd,mcidata,pos,maxLen-pos) IF EstrLen(num)>0 THEN maxLen:=Val(num) ELSE maxLen:=-1 /* @@ -5053,7 +4607,7 @@ PROC processMciCmd(mcidata,len,pos) aePuts2(tempstr,maxLen) ELSEIF (StrCmp(cmd,'TT',ALL)) pos:=pos+2+t - StringF(tempstr,'\d',loggedOnUserKeys.timesOnToday AND $FFFF) + StringF(tempstr,'\d',getTodaysCalls(loggedOnUser,loggedOnUserKeys)) aePuts2(tempstr,maxLen) ELSEIF (StrCmp(cmd,'LC',ALL)) pos:=pos+2+t @@ -5201,14 +4755,14 @@ PROC processMciCmd(mcidata,len,pos) ->display another file pos:=pos+3 nval:=EstrLen(cmd)-3 - MidStr(cmd,mcidata,pos,nval) + midStr2(cmd,mcidata,pos,nval) displayFile(cmd) pos:=pos+EstrLen(cmd)+t ELSEIF StrCmp(cmd,'SX_',3) ->sequential file display pos:=pos+3 nval:=EstrLen(cmd)-3 - MidStr(cmd,mcidata,pos,nval) + midStr2(cmd,mcidata,pos,nval) nval:=readIntFromFile(cmd) IF nval<>-1 nval++ @@ -5241,7 +4795,7 @@ PROC processMciCmd(mcidata,len,pos) debugLog(LOG_DEBUG,tempstr) maxLen:=EstrLen(cmd)-3 -> get full filename - MidStr(cmd,mcidata,pos,maxLen) + midStr2(cmd,mcidata,pos,maxLen) StrCopy(tempstr,cmd,FilePart(cmd)-cmd) StringF(filename,'\z\r\d[3].\s',nval+1,FilePart(cmd),screenfilename) StrAdd(tempstr, filename) @@ -5254,14 +4808,14 @@ PROC processMciCmd(mcidata,len,pos) ->run a command pos:=pos+3 nval:=EstrLen(cmd)-3 - MidStr(cmd,mcidata,pos,nval) + midStr2(cmd,mcidata,pos,nval) processSysCommand(cmd,TRUE) pos:=pos+EstrLen(cmd)+t ELSEIF StrCmp(cmd,'CR_',3) ->promted keypress pos:=pos+3 nval:=EstrLen(cmd)-3 - MidStr(cmd,mcidata,pos,nval) + midStr2(cmd,mcidata,pos,nval) aePuts(cmd) res:=readChar(INPUT_TIMEOUT) IF res<>RESULT_SUCCESS THEN RETURN res @@ -5446,7 +5000,7 @@ PROC processMciCmd2(mcidata,len,pos,outdata) t:=0 ENDIF - MidStr(cmd,mcidata,pos,maxLen-pos) + midStr2(cmd,mcidata,pos,maxLen-pos) IF EstrLen(num)>0 THEN maxLen:=Val(num) ELSE maxLen:=-1 IF (StrCmp(cmd,'',ALL)) @@ -5472,7 +5026,7 @@ PROC processMciCmd2(mcidata,len,pos,outdata) StrAdd(outdata,tempstr,maxLen) ELSEIF (StrCmp(cmd,'TT',ALL)) pos:=pos+2+t - StringF(tempstr,'\d',loggedOnUserKeys.timesOnToday AND $FFFF) + StringF(tempstr,'\d',getTodaysCalls(loggedOnUser,loggedOnUserKeys)) aePuts2(tempstr,maxLen) ELSEIF (StrCmp(cmd,'LC',ALL)) pos:=pos+2+t @@ -5885,12 +5439,10 @@ PROC tranChat() ENDPROC PROC chat() - DEF c,j,x,i,back,whichCon,whichSer - DEF str[100]:STRING,str2[10]:STRING,space[90]:STRING,buff[256]:STRING + DEF c,x,i,back,whichCon,whichSer + DEF str[100]:STRING,str2[10]:STRING,space[90]:STRING DEF chatfile[255]:STRING - DEF fp -wx: checkOnlineStatus() runSysCommand('CHATIN','') @@ -5908,13 +5460,12 @@ wx: aePuts(cmds.sysopName) aePuts(', How can I help you??\b\n\b\n') ENDIF -sx: pagedFlag:=0 chatConFlag:=1 IF(ansiColour) StringF(str,'[\dm',cmds.acLvl[LVL_CHAT_COLOR_SYSOP]) - fAEPutStr(str) + aePuts(str) ENDIF chatSerFlag:=0 @@ -5957,7 +5508,7 @@ next: StrCopy(space,'') x:=0 - fAEPutStr('\b\n') + aePuts('\b\n') checkOnlineStatus() JUMP cnext2 ENDIF @@ -5966,9 +5517,9 @@ next: IF(x>0) x-- SetStr(space,x) - fAEPutStr(CHAR_BACKSPACE) - fAEPutStr(' ') - fAEPutStr(CHAR_BACKSPACE) + sendChar(CHAR_BACKSPACE) + aePuts(' ') + sendChar(CHAR_BACKSPACE) JUMP cnext2 ENDIF @@ -5985,11 +5536,11 @@ next: IF(ansiColour) IF((chatConFlag=1) AND (whichSer=1)) StringF(str,'[\dm',cmds.acLvl[LVL_CHAT_COLOR_SYSOP]) - IF(bitPlanes<3) THEN serPuts(str) ELSE fAEPutStr(str) + IF(bitPlanes<3) THEN serPuts(str) ELSE aePuts(str) ENDIF IF((chatSerFlag=1) AND (whichCon=1)) StringF(str,'[\dm',cmds.acLvl[LVL_CHAT_COLOR_USER]) - IF(bitPlanes<3) THEN serPuts(str) ELSE fAEPutStr(str) + IF(bitPlanes<3) THEN serPuts(str) ELSE aePuts(str) ENDIF sendChar(c) ELSE @@ -6013,7 +5564,7 @@ next: IF(back=0) IF(captureFP) THEN fileWriteLn(captureFP,space) - fAEPutStr('\b\n') + aePuts('\b\n') StrCopy(space,'') x:=0 JUMP next @@ -6035,13 +5586,13 @@ next: x:=StrLen(str) StrCopy(space,str) FOR i:=0 TO x-1 - fAEPutStr(CHAR_BACKSPACE) - fAEPutStr(' ') - fAEPutStr(CHAR_BACKSPACE) + sendChar(CHAR_BACKSPACE) + aePuts(' ') + sendChar(CHAR_BACKSPACE) ENDFOR - fAEPutStr('\b\n') - fAEPutStr(str) + aePuts('\b\n') + aePuts(str) ENDIF chatbrk: @@ -6050,8 +5601,6 @@ chatbrk: statPrintUser(loggedOnUser,loggedOnUserKeys,loggedOnUserMisc) IF(ansiColour) THEN aePuts('') - wy: - StrCopy(chatfile,'') IF (loggedOnUser.screenTypeNIL) AND (StrLen(loggedOnUser.name)>0) THEN statPrintUser(loggedOnUser,loggedOnUserKeys,loggedOnUserMisc) statChatFlag() ENDIF @@ -6867,7 +6414,7 @@ PROC doFax() serShared:=oldshared reInitModem() - resetSystem(1) + resetSystem() setEnvStat(ENV_AWAITCONNECT) ENDPROC @@ -6922,9 +6469,10 @@ PROC checkIncomingCall() DEF tempstr[255]:STRING DEF tempstr2[255]:STRING DEF stat,n,isConnected=FALSE - DEF filetags + DEF filetags,r DEF peeraddr: sockaddr_in DEF hostent: PTR TO hostent + DEF s ioFlags[IOFLAG_SER_IN]:=-1 ioFlags[IOFLAG_SER_OUT]:=0 @@ -6935,10 +6483,13 @@ PROC checkIncomingCall() IF telnetSocket>=0 StrCopy(connectString,'CONNECT 19200') n:=SIZEOF sockaddr_in - GetPeerName(telnetSocket,peeraddr,{n}) - hostent:=GetHostByAddr(peeraddr.sin_addr,4,AF_INET) - IF hostent<>NIL THEN StrCopy(hostName,hostent.h_name,255) - StringF(hostIP,'\d.\d.\d.\d',Shr(peeraddr.sin_addr AND $ff000000,24) AND $FF,Shr(peeraddr.sin_addr AND $ff0000,16),Shr(peeraddr.sin_addr AND $ff00,8),peeraddr.sin_addr AND $ff) + r:=GetPeerName(telnetSocket,peeraddr,{n}) + IF r=0 + StringF(hostIP,'\d.\d.\d.\d',Shr(peeraddr.sin_addr AND $ff000000,24) AND $FF,Shr(peeraddr.sin_addr AND $ff0000,16),Shr(peeraddr.sin_addr AND $ff00,8),peeraddr.sin_addr AND $ff) + s:=peeraddr.sin_addr + hostent:=GetHostByAddr({s},4,AF_INET) + IF hostent<>NIL THEN StrCopy(hostName,hostent.h_name,255) + ENDIF JUMP go3 ENDIF @@ -7012,6 +6563,7 @@ go2: IF(input=RESULT_TIMEOUT) THEN JUMP timedout ENDIF go3: + stripReturn(string) readToolType(TOOLTYPE_CONNECT,node,string,connectString) @@ -7085,7 +6637,6 @@ PROC processInputMessage(timeout, extsig = 0,rawMode=FALSE, allowSer=TRUE) DEF doorsig=0,rexxsig=0,serialsig=0,timersig=0,timedout=0 DEF temp[255]:STRING DEF statePtr: PTR TO awaitState - DEF n IF (transfering) RETURN TRUE,RESULT_TIMEOUT @@ -7340,7 +6891,7 @@ PROC processInputMessage(timeout, extsig = 0,rawMode=FALSE, allowSer=TRUE) conPuts('[ p') conCLS() reserveForUser() - resetSystem(1) + resetSystem() ioFlags[IOFLAG_SER_IN]:=-1 ioFlags[IOFLAG_SCR_OUT]:=0 setEnvStat(ENV_RESERVE) @@ -7390,7 +6941,7 @@ PROC processInputMessage(timeout, extsig = 0,rawMode=FALSE, allowSer=TRUE) setEnvStat(ENV_SHELL) sendCLS() remoteShell() - resetSystem(1) + resetSystem() ioFlags[IOFLAG_SER_IN]:=-1 ioFlags[IOFLAG_SCR_OUT]:=0 IF(ioFlags[IOFLAG_FIL_IN]) THEN ioFlags[IOFLAG_FIL_IN]:=0 @@ -7426,7 +6977,7 @@ PROC processInputMessage(timeout, extsig = 0,rawMode=FALSE, allowSer=TRUE) loggedOnUser:=NIL loggedOnUserMisc:=NIL loggedOnUserKeys:=NIL - resetSystem(1) + resetSystem() ioFlags[IOFLAG_SER_IN]:=-1 ioFlags[IOFLAG_SCR_OUT]:=0 IF(ioFlags[IOFLAG_FIL_IN]) THEN ioFlags[IOFLAG_FIL_IN]:=0 @@ -7458,7 +7009,7 @@ PROC processInputMessage(timeout, extsig = 0,rawMode=FALSE, allowSer=TRUE) loggedOnUser:=NIL loggedOnUserMisc:=NIL loggedOnUserKeys:=NIL - resetSystem(1) + resetSystem() ioFlags[IOFLAG_SER_IN]:=-1 ioFlags[IOFLAG_SCR_OUT]:=0 IF(ioFlags[IOFLAG_FIL_IN]) THEN ioFlags[IOFLAG_FIL_IN]:=0 @@ -7477,7 +7028,7 @@ PROC processInputMessage(timeout, extsig = 0,rawMode=FALSE, allowSer=TRUE) IF (servercmd=SV_INITMODEM) OR ((wasControl=1) AND (ch="7")) servercmd:=-1 reInitModem() - resetSystem(1) + resetSystem() ENDIF ->F9 @@ -7559,7 +7110,7 @@ PROC processInputMessage(timeout, extsig = 0,rawMode=FALSE, allowSer=TRUE) IF (servercmd=SV_ACCOUNTS) OR ((wasControl=1) AND (ch="5")) AND (loggedOnUser<>NIL) servercmd:=-1 doOnLineEdit(TRUE) - checkUserOnLine(loggedOnUser,0) + checkUserOnLine(0) convertAccess() ENDIF @@ -7757,7 +7308,6 @@ ENDPROC RESULT_SUCCESS PROC processLoggingOff() DEF tempstr[255]:STRING DEF tempstr2[255]:STRING - DEF i DEF filetags pagedFlag:=FALSE @@ -8065,7 +7615,6 @@ PROC clearTempSecurityFlags(securityFlag) ENDPROC PROC checkSecurity(securityFlag) - DEF res IF (loggedOnUser=NIL) OR (acsLevel=-1) THEN RETURN FALSE IF (StrLen(securityFlags)>securityFlag) @@ -8323,7 +7872,7 @@ PROC parseList(liststring,list:PTR TO stringlist) spacepos:=InStr(liststring,' ') IF spacepos>=0 WHILE(spacepos>=0) - MidStr(tempstr,liststring,startpos,spacepos-startpos) + midStr2(tempstr,liststring,startpos,spacepos-startpos) UpperStr(tempstr) newitem:=TrimStr(tempstr) IF StrLen(newitem)>0 THEN list.add(newitem) @@ -8332,7 +7881,7 @@ PROC parseList(liststring,list:PTR TO stringlist) spacepos:=InStr(liststring,' ',startpos) ENDWHILE IF startpos0 THEN list.add(newitem) @@ -8417,7 +7966,7 @@ PROC firstCharValue(teststring) ENDPROC teststring[0] PROC stringCompare(nam: PTR TO CHAR,pat: PTR TO CHAR) - DEF i,p,loop=TRUE + DEF p,loop=TRUE WHILE loop IF charToLower(nam[0])=charToLower(pat[0]) @@ -8448,7 +7997,7 @@ ENDPROC RESULT_FAILURE PROC listMSGs(gfh) DEF tempStr[255]:STRING - DEF stat,start,r + DEF r DEF oldMsgNum DEF mailFlag=0 DEF mailStatus[10]:STRING @@ -8459,7 +8008,7 @@ PROC listMSGs(gfh) StringF(tempStr,'Starting message [\d]: ',mailStat.lowestNotDel) aePuts(tempStr) - stat:=lineInput('','',10,INPUT_TIMEOUT,tempStr) + lineInput('','',10,INPUT_TIMEOUT,tempStr) IF StrLen(tempStr)=0 msgNum:=mailStat.lowestNotDel r:=1 @@ -8475,7 +8024,7 @@ PROC listMSGs(gfh) IF(msgNum>=mailStat.highMsgNum) JUMP listOUT ENDIF - stat:=loadMessageHeader(gfh) + loadMessageHeader(gfh) IF(mailHeader.status="D") THEN JUMP listNextMSG cb:=confBases.item(getConfIndex(currentConf,currentMsgBase)-1) @@ -9319,7 +8868,6 @@ PROC attachMsgFiles(num: LONG,s:PTR TO CHAR,attachType: LONG) IF cnt=0 aePuts('File attachment not found\b\n') ENDIF - ENDPROC @@ -9510,7 +9058,7 @@ PROC replyToMSG(gfh) ENDPROC RESULT_SUCCESS PROC checkToForward(str,name,check) - DEF stat,error + DEF error DEF tempStr[255]:STRING error:=0 @@ -9520,7 +9068,7 @@ PROC checkToForward(str,name,check) IF(check) loadAccount(1,tempUser,tempUserKeys,tempUserMisc) IF(stringCompare(name,tempUser.name)=RESULT_SUCCESS) - IF(stat:=findUserFromName(1,confNameType,str,tempUser,tempUserKeys,tempUserMisc)) + IF(findUserFromName(1,confNameType,str,tempUser,tempUserKeys,tempUserMisc)) SELECT confNameType CASE NAME_TYPE_USERNAME StringF(tempStr,' Forwarding mail To: \s\b\n',tempUserKeys.userName) @@ -9535,7 +9083,7 @@ PROC checkToForward(str,name,check) ENDIF ENDIF ELSE - IF(stat:=findUserFromName(1,confNameType,str,tempUser,tempUserKeys,tempUserMisc)) + IF(findUserFromName(1,confNameType,str,tempUser,tempUserKeys,tempUserMisc)) SELECT confNameType CASE NAME_TYPE_USERNAME StringF(tempStr,' Forwarding mail To: \s\b\n',tempUserKeys.userName) @@ -9603,49 +9151,6 @@ PROC msgToHeader() aePuts(' To: (Enter)=''ALL''? ') ENDPROC -PROC processLine(pat, vorig, dest) - DEF i,i2,nff - DEF rep[80]:STRING - DEF orig[100] : STRING - - StrCopy(orig,vorig,ALL) - FOR i:=0 TO StrLen(pat)-1 - EXIT pat[i]=";" - ENDFOR - - IF(i>=StrLen(pat)) THEN RETURN 0 - - StrCopy(rep,pat+i+1,ALL) - SetStr(pat,i) - - StrCopy(dest,'',ALL) - - FOR i:=0 TO StrLen(orig)-StrLen(pat) - nff:=1 - IF(pat[0]=orig[i]) - nff:=0 - i2:=i+1 - WHILE((i2-i)orig[i2]) - nff:=1 - JUMP wbrk - ENDIF - i2++ - ENDWHILE -wbrk: - ENDIF - IF(nff<>1) - SetStr(orig,i) - StrCopy(dest,orig,ALL) - StrAdd(dest,rep) - IF(i2SIZEOF mailHeader @@ -12074,9 +11574,7 @@ PROC isInList(list:PTR TO stdlist,s,confNum) ENDPROC FALSE PROC addFlagToList(s:PTR TO CHAR, confNum = -1) - DEF p: PTR TO CHAR DEF stat - DEF item:PTR TO flagFileItem DEF fileName fileName:=String(StrLen(s)) @@ -12285,9 +11783,16 @@ PROC checkForFileSize(checkFilename:PTR TO CHAR, checkConfNum, tfsizeList:PTR TO DEF drivenum DEF ramDir[255]:STRING DEF patternBuf,patBufLen + DEF estDlCPS IF checkConfNum=-1 THEN checkConfNum:=currentConf + IF loggedOnUserMisc.lastDlCPS<>0 + estDlCPS:=loggedOnUserMisc.lastDlCPS + ELSE + estDlCPS:=Div(onlineBaud,10) + ENDIF + FOR min:=0 TO StrLen(checkFilename)-1 IF((checkFilename[min]="?") OR (checkFilename[min]="*")) THEN wflag:=1 ENDFOR @@ -12400,7 +11905,6 @@ jumpIn: RETURN RESULT_FAILURE ENDIF ENDIF - IF((Examine(fLock,fBlock))=NIL) FreeDosObject(DOS_FIB,fBlock) myError(1) @@ -12425,7 +11929,7 @@ gotit: StrAdd(final,fBlock.filename) ENDIF fsize:=fBlock.size - tsec:=Div(fsize,Div(onlineBaud,10)) + tsec:=Div(fsize,estDlCPS) min:=tsec/60 secs:=tsec-(min*60) StringF(str,' \r\dk, \d mins \z\r\d[2] secs \s\t',Div(fsize,1024),min,secs,fBlock.filename) @@ -12501,7 +12005,6 @@ gotit: ENDSELECT ENDIF ENDWHILE - UnLock(fLock) fLock:=0 IF(z=1) THEN JUMP outst @@ -13163,16 +12666,21 @@ PROC sendQuietFlag(opt) ENDPROC PROC updateTitle(hoozer: PTR TO user) - DEF aflag,pflag + DEF aflag,pflag,pub=FALSE + DEF pubScreen[20]:STRING IF pagedFlag THEN pflag:="*" ELSE pflag:=" " IF sysopAvail THEN aflag:="*" ELSE aflag:=" " StringF(titlebar,' AmiExpress BBS (c)\s \s Node \d \c',expressDate,expressVer,node,aflag) + IF readToolType(TOOLTYPE_WINDOW,node,'WINDOW.PUBSCREEN',pubScreen) + pub:=TRUE + ENDIF + IF hoozer=NIL IF window<>NIL THEN SetWindowTitles(window,titlebar,titlebar) - IF windowStat<>NIL THEN SetWindowTitles(windowStat,titlebar,titlebar) + IF (windowStat<>NIL) AND pub THEN SetWindowTitles(windowStat,titlebar,titlebar) RETURN ENDIF @@ -13180,10 +12688,10 @@ PROC updateTitle(hoozer: PTR TO user) StringF(ititlebar,' \c\s, \s, (\d \l\s[10] [\d]) \d mins, \d \c',pflag,hoozer.name,hoozer.phoneNumber,hoozer.secStatus,hoozer.conferenceAccess,currentConf,Div(timeLimit,60),onlineBaud,aflag) ->//(RTS) was Online_BaudR IF(dStatBar=NIL) SetWindowTitles(window,ititlebar,ititlebar) - IF windowStat<>NIL THEN SetWindowTitles(windowStat,ititlebar,ititlebar) + IF (windowStat<>NIL) AND (pub) THEN SetWindowTitles(windowStat,ititlebar,ititlebar) ELSE SetWindowTitles(window,titlebar,titlebar) - IF windowStat<>NIL THEN SetWindowTitles(windowStat,titlebar,titlebar) + IF (windowStat<>NIL) AND (pub) THEN SetWindowTitles(windowStat,titlebar,titlebar) ENDIF ENDIF ENDPROC @@ -13209,18 +12717,24 @@ ENDPROC PROC statPrintUser(hoozer: PTR TO user,hoozer2: PTR TO userKeys,hoozer3: PTR TO userMisc) DEF string[82]:STRING DEF bcdStr[20]:STRING + DEF pubScreen[20]:STRING + DEF pub=FALSE statChatFlag() IF scropen=FALSE THEN RETURN + IF readToolType(TOOLTYPE_WINDOW,node,'WINDOW.PUBSCREEN',pubScreen) + pub:=TRUE + ENDIF + IF hoozer=NIL SetWindowTitles(window,titlebar,titlebar) - IF windowStat<>NIL THEN SetWindowTitles(windowStat,titlebar,titlebar) + IF (windowStat<>NIL) AND (pub) THEN SetWindowTitles(windowStat,titlebar,titlebar) RETURN ENDIF - IF(pagedFlag) - IF KickVersion(40) OR (bitPlanes<3) + IF(pagedFlag) AND (bitPlanes>2) + IF KickVersion(40) statMessage(1,1,'') ELSE statMessage(1,1,'') @@ -13270,7 +12784,7 @@ PROC statPrintUser(hoozer: PTR TO user,hoozer2: PTR TO userKeys,hoozer3: PTR TO StringF(string,'\l\d[5]',hoozer.uploads AND $FFFF) statMessage(45,2,string) - formatBCD(loggedOnUserMisc.downloadBytesBCD,bcdStr) + formatBCD(hoozer3.downloadBytesBCD,bcdStr) IF StrLen(bcdStr)>12 SetStr(bcdStr,StrLen(bcdStr)-3) StrAdd(bcdStr,'K') @@ -13279,7 +12793,7 @@ PROC statPrintUser(hoozer: PTR TO user,hoozer2: PTR TO userKeys,hoozer3: PTR TO StringF(string,'\l\s[12]',bcdStr) statMessage(51,2,string) - formatBCD(loggedOnUserMisc.uploadBytesBCD,bcdStr) + formatBCD(hoozer3.uploadBytesBCD,bcdStr) IF StrLen(bcdStr)>12 SetStr(bcdStr,StrLen(bcdStr)-3) StrAdd(bcdStr,'K') @@ -13305,7 +12819,7 @@ PROC statPrintUser(hoozer: PTR TO user,hoozer2: PTR TO userKeys,hoozer3: PTR TO statMessage(51,3,' ') IF(hoozer.newUser = FALSE) - formatLongDateTime(loggedOnUser.timeLastOn,string) + formatLongDateTime(hoozer.timeLastOn,string) ELSE IF(validUser=0) StringF(string,' * * Account Not Saved * * ') @@ -13384,7 +12898,7 @@ PROC xprfopenAsm() ENDPROC D0 PROC xprfopen() - DEF fn,am,i,res,filemode,task: PTR TO tc + DEF fn,am,i,res,filemode DEF tempstr[255]:STRING DEF dup ->(*xpr_fopen)(char *filename, char *accessmode) @@ -13480,7 +12994,7 @@ PROC xprfcloseAsm() ENDPROC D0 PROC xprfclose() - DEF fp,res,task: PTR TO tc + DEF fp DEF tempstr[255]:STRING -> (*xpr_fclose)(long filepointer) -> A0 @@ -13510,8 +13024,8 @@ PROC xprchkabortAsm() ENDPROC D0 PROC xprchkabort() - DEF winmsg:PTR TO intuimessage,res,task: PTR TO tc - DEF tempstr[255]:STRING + DEF winmsg:PTR TO intuimessage,res + ->DEF tempstr[255]:STRING loadA4() @@ -13536,8 +13050,8 @@ PROC xprfreadAsm() ENDPROC D0 PROC xprfread() - DEF buf,bsize,bcount,fp,res,task: PTR TO tc - DEF tempstr[255]:STRING + DEF buf,bsize,bcount,fp,res + ->DEF tempstr[255]:STRING -> long count = (*xpr_fread)(char *buffer, long size, long count, -> -D0 A0 D0 D1 -> long fileptr) @@ -13570,8 +13084,8 @@ PROC xprfwriteAsm() ENDPROC D0 PROC xprfwrite() - DEF buf,bsize,bcount,fp,res,task: PTR TO tc - DEF tempstr[255]:STRING + DEF buf,bsize,bcount,fp,res + ->DEF tempstr[255]:STRING -> long count = (*xpr_fwrite)(char *buffer, long size, long count, -> D0 A0 D0 D1 -> long fileptr) @@ -13604,7 +13118,7 @@ PROC xprsreadAsm() ENDPROC D0 PROC xprsread() - DEF buf,bsize,timeout,serialsig,i,signals,task: PTR TO tc,res,timersig,ch + DEF buf,bsize,timeout,serialsig,i,signals,res,timersig DEF tempstr[255]:STRING DEF waiting,stat,obuf,buf2,c,c2,avail DEF tv:timeval @@ -13787,11 +13301,9 @@ PROC xprsread() IF(signals AND serialsig) /* Abort the timer request. */ - stopTime() closeTimer() - /* Did the request terminate gracefully? */ IF(waitSerialRead()) @@ -13887,9 +13399,8 @@ PROC xprswriteAsm() ENDPROC D0 PROC xprswrite() - DEF buf,bsize,task:PTR TO tc,res,i + DEF buf,bsize DEF tempstr[255]:STRING - DEF c,buf2 -> long status = (*xpr_swrite)(char *buffer, long size) -> D0 A0 D0 @@ -13913,7 +13424,7 @@ PROC xprfseekAsm() ENDPROC D0 PROC xprfseek() - DEF fp,offset,origin,res + DEF fp,offset,origin DEF tempstr[255]:STRING -> long status = (*xpr_fseek)(long fileptr, long offset, long origin) -> D0 A0 D0 D1 @@ -13955,12 +13466,8 @@ PROC xprsflushAsm() ENDPROC D0 PROC xprsflush() - DEF task:PTR TO tc,res - loadA4() - debugLog(LOG_DEBUG,'xprsflush') - ENDPROC FALSE PROC xprupdateAsm() @@ -13972,7 +13479,7 @@ ENDPROC D0 PROC xprupdate() DEF xpru: PTR TO xpr_update DEF updateTime - DEF res,update=FALSE + DEF update=FALSE DEF outmsg[255]:STRING MOVE.L A0,xpru @@ -14218,7 +13725,7 @@ PROC xprfnextAsm() ENDPROC D0 PROC xprfnext() - DEF task:PTR TO tc,res,xprObj:PTR TO xprData,tempsize + DEF xprObj:PTR TO xprData DEF buffer:PTR TO CHAR MOVE.L A0,buffer @@ -14230,7 +13737,6 @@ ENDPROC xprfnext2(buffer,xprObj) PROC xprfnext2(buffer:PTR TO CHAR, xprObj:PTR TO xprData) DEF fileItem:PTR TO flagFileItem - DEF tempsize fileItem:=xprObj.fileList.item(xprObj.currentFile) @@ -14546,8 +14052,26 @@ PROC downloadFile(str: PTR TO CHAR,forceZmodem=FALSE) END tempstringlist ENDPROC res -PROC httpUpload(folder: PTR TO CHAR,httpPort) - aePuts('\b\nCreating HTTP Upload not yet supported\b\n') +PROC httpUpload(uploadFolder: PTR TO CHAR,httpPort) + DEF x: PTR TO xprData + DEF tempstr[100]:STRING + DEF oldSerCache + + x:=NEW x + x.currentFile:=0 + x.fileList:=NIL + x.updateDownloadStats:=FALSE + + oldSerCache:=serialCacheEnabled + flushSerialCache() + serialCacheEnabled:=FALSE + IF readToolType(TOOLTYPE_XFERLIB,loggedOnUser.xferProtocol,'HTTPHOST',tempstr)=FALSE + StrCopy(tempstr,'localhost') + ENDIF + + doHttpd(node,tempstr,httpPort,uploadFolder,{aePuts},{readChar},{sCheckInput},x,{ftpUploadFileStart},{ftpUploadFileEnd}, {ftpTransferFileProgress},TRUE) + serialCacheEnabled:=oldSerCache + END x ENDPROC PROC httpDownload(fileList: PTR TO stdlist, pupdateDownloadStats,httpPort) @@ -14594,7 +14118,7 @@ PROC httpDownload(fileList: PTR TO stdlist, pupdateDownloadStats,httpPort) oldSerCache:=serialCacheEnabled flushSerialCache() serialCacheEnabled:=FALSE - doHttpd(node,tempstr,httpPort,tempDir,{aePuts},{readChar},{sCheckInput},x,NIL /*{ftpDownloadFileStart}*/,NIL /*{ftpDownloadFileEnd}*/, NIL /*{ftpTransferFileProgress}*/,FALSE) + doHttpd(node,tempstr,httpPort,tempDir,{aePuts},{readChar},{sCheckInput},x,{ftpDownloadFileStart},{ftpDownloadFileEnd}, {ftpTransferFileProgress},FALSE) serialCacheEnabled:=oldSerCache ->clean up ram links @@ -14604,12 +14128,8 @@ PROC httpDownload(fileList: PTR TO stdlist, pupdateDownloadStats,httpPort) ENDPROC PROC ftpUploadFileStart(xprInfo:PTR TO xprData, fileName:PTR TO CHAR,filelen) - DEF fileItem:PTR TO flagFileItem - DEF item:PTR TO flagFileItem - DEF i - fileItem:=NIL sendMasterUpload(FilePart(fileName)) - zModemInfo.filesize:=0 + zModemInfo.filesize:=filelen zModemInfo.resumePos:=0 ftptime:=getSystemTime() updateZDisplay() @@ -14797,16 +14317,14 @@ PROC downloadFiles(fileList: PTR TO stdlist, updateDownloadStats, forceZmodem=FA DEF tempstr[255]:STRING DEF debugstr[255]:STRING DEF xprio: PTR TO xprIO - DEF i,result,tempsize - DEF cb:PTR TO confBase - DEF task:PTR TO tc + DEF result DEF time1,time2 DEF oldshared - DEF fileItem:PTR TO flagFileItem DEF x: PTR TO xprData DEF ftpPort,ftpDataPort,httpPort DEF zm: PTR TO zmodem_t DEF ext=TRUE + DEF dlTimeTaken=0 DEF protocol[255]:STRING @@ -14985,9 +14503,7 @@ PROC downloadFiles(fileList: PTR TO stdlist, updateDownloadStats, forceZmodem=FA ->cancel current queued serial read request stopSerialRead() - i:=0 result:=TRUE - time1:=getSystemTime() transfering:=TRUE cancelTransferOffHook:=FALSE lastIAC:=FALSE @@ -14999,13 +14515,16 @@ PROC downloadFiles(fileList: PTR TO stdlist, updateDownloadStats, forceZmodem=FA IF ext xprio.xpr_filename:=x + time1:=getSystemTime() result:=XprotocolSend(xprio) + time2:=getSystemTime() + tTTM:=time2-time1; ELSE zm.user_data:=x - result:=zmodem_send_files(zm, NIL,NIL) + result:=zmodem_send_files(zm, NIL,{dlTimeTaken}) + tTTM:=Div(dlTimeTaken,50) ENDIF - time2:=getSystemTime() IF zModemInfo.transPos<>zModemInfo.filesize THEN result:=FALSE @@ -15024,7 +14543,6 @@ PROC downloadFiles(fileList: PTR TO stdlist, updateDownloadStats, forceZmodem=FA ENDIF END x - tTTM:=time2-time1; IF ext XprotocolCleanup(xprio) ELSE @@ -15292,13 +14810,24 @@ PROC zmlputs(zm: PTR TO zmodem_t,level, str:PTR TO CHAR) ENDPROC PROC zmprogress(zm: PTR TO zmodem_t, pos) - DEF t,n + DEF t1,t2,t,n DEF h,m,s DEF tempStr[255]:STRING DEF updateTime - t:=getZmSystemTime()-zm.transfer_start_time - IF t>0 THEN n:=Div(pos,t) ELSE n:=pos + t1,t2:=getZmSystemTime() + t:=Mul((t1-zm.transfer_start_time1),50)+t2-zm.transfer_start_time2 + + IF t>0 + IF pos>40000000 + n:=Div(pos,Div(t,50)) + ELSE + n:=Div(Mul(pos,50),t) + ENDIF + ELSE + n:=pos + ENDIF + t:=Div(t,50) h:=Div(t,3600) m:=Mod(t,3600) @@ -15377,10 +14906,9 @@ PROC zmrecvbyte(zm: PTR TO zmodem_t, timeout) ENDPROC res PROC zmrecvbyteTelnet(zm: PTR TO zmodem_t, timeout) - DEF signals,timersig,res - DEF waiting,status,temp + DEF res + DEF temp DEF recvd,n - DEF tempstr[255]:STRING DEF tv:timeval recvd:=FALSE REPEAT @@ -15434,7 +14962,7 @@ ENDPROC res PROC zmrecvbyteSerial(zm: PTR TO zmodem_t, timeout) DEF serialsig,signals,timersig=0,res - DEF waiting,temp,abort + DEF waiting,abort IF (bufferReadOffsetcancel current queued serial read request stopSerialRead() - i:=0 - time1:=getSystemTime() transfering:=TRUE lastIAC:=FALSE @@ -15821,13 +15346,15 @@ PROC zModemUpload(file,forceZmodem=FALSE) HANDLE ENDIF IF ext + time1:=getSystemTime() result:=XprotocolReceive(xprio) + time2:=getSystemTime() + tTTM:=time2-time1; ELSE - result:=zmodem_recv_files(zm, file,{dlbytes}) + result:=zmodem_recv_files(zm, file,NIL,{ulTimeTaken}) + tTTM:=Div(ulTimeTaken,50) ENDIF - time2:=getSystemTime() - tTTM:=time2-time1; IF ext XprotocolCleanup(xprio) @@ -15958,10 +15485,6 @@ PROC rFreeSpace(path: PTR TO CHAR) ENDIF ENDPROC stat -PROC setProtocol(str: PTR TO CHAR) - loggedOnUser.protocol:="Z" -ENDPROC - PROC stripReturn(str: PTR TO CHAR) DEF i,t i:=StrLen(str)-1 @@ -16011,7 +15534,7 @@ PROC scanHoldDesc() ELSE bgFileCheck:=FALSE ENDIF - uploadaFile(1,'','') + uploadaFile(1,'') ENDIF /* end if fi != NL */ lcFileXfr:=FALSE aePuts('\b\n') @@ -16459,8 +15982,6 @@ EXCEPT DO ENDPROC returnval PROC zmodemReceive(flname:PTR TO CHAR,uLFType) - DEF c - DEF p:PTR TO CHAR DEF temp[100]:STRING DEF protocol[255]:STRING @@ -16611,7 +16132,7 @@ PROC getUN(sa: PTR TO CHAR) ENDIF ENDPROC 0 -PROC resumeStuff(tfs) +PROC resumeStuff() DEF status,ch DEF string[256]:STRING,path[256]:STRING,ray2[256]:STRING,ray[256]:STRING,str[256]:STRING DEF fBlock:PTR TO fileinfoblock @@ -16871,7 +16392,7 @@ ENDPROC PROC checkOurList(fname: PTR TO CHAR, str: PTR TO CHAR) DEF fp; DEF buff[255]:STRING - DEF dest[255]:STRING + ->DEF dest[255]:STRING IF((fp:=Open(fname,MODE_OLDFILE)))=0 /* can't find our file */ RETURN RESULT_SUCCESS @@ -16896,7 +16417,6 @@ ENDPROC RESULT_SUCCESS PROC checkForFile(fn: PTR TO CHAR) DEF path[255]:STRING,final[255]:STRING - DEF ft DEF x IF((InStr(fn,'%')>=0) OR ((InStr(fn,'#'))>=0) OR ((InStr(fn,'?'))>=0) OR ((InStr(fn,' '))>=0) OR ((InStr(fn,'/'))>=0) OR @@ -17113,7 +16633,6 @@ PROC testFile(str: PTR TO CHAR, path: PTR TO CHAR) DEF x,x2,stat,r DEF temp[100]:STRING,temp2[100]:STRING DEF temp4[100]:STRING - DEF options[200]:STRING aeGoodFile:=RESULT_NOT_ALLOWED stat:=RESULT_NOT_ALLOWED @@ -17370,7 +16889,7 @@ PROC formatFileSizeForDirList(fsize,fsstr:PTR TO CHAR) ENDIF ENDPROC -PROC uploadaFile(uLFType,cmd,params) -> JOE +PROC uploadaFile(uLFType,cmd) -> JOE DEF fBlock: fileinfoblock DEF fLock DEF i,x,x2,x3,cnt,status,moveToLCFILES,hold,cstat,noF,lcfile @@ -17379,7 +16898,7 @@ PROC uploadaFile(uLFType,cmd,params) -> JOE DEF path[256]:STRING,str[255]:STRING,istr[255]:STRING,str2[255]:STRING DEF fmtstr[256]:STRING DEF odate[20]:STRING,fcomment[256]:STRING - DEF ray[256]:STRING,ray2[256]:STRING,temp[256]:STRING,string[256]:STRING + DEF ray[256]:STRING,ray2[256]:STRING,string[256]:STRING DEF buff[255]:STRING DEF tempstr[255]:STRING,tempstr2[255]:STRING,tempstr3[255]:STRING DEF uaf,f @@ -17421,14 +16940,6 @@ PROC uploadaFile(uLFType,cmd,params) -> JOE ENDIF IF(uLFType=0) - parseParams(params) - IF(parsedParams.count()>0) - StrCopy(string,params[0]) - setProtocol(string) - ELSE - setProtocol('') - ENDIF - IF(StrLen(sopt.ramPen)>0) /* are we uploading to a diff device */ StringF(buff,'\s UPLOADING to \s..\b\n',xprTitle.item(loggedOnUser.xferProtocol),sopt.ramPen) ELSE /* otherwise normal upload to playpen dir */ @@ -17443,7 +16954,7 @@ PROC uploadaFile(uLFType,cmd,params) -> JOE aePuts(string) aePuts('Filename lengths above 12 are not allowed.\b\n\b\n') - zresume:=resumeStuff(tFS) + zresume:=resumeStuff() IF(zresume<0) THEN RETURN zresume IF((zresume=0) AND strCmpi(cmd,'RG',ALL)) aePuts('\b\nThere are no more files to resume on.\b\n\b\n') @@ -17663,7 +17174,6 @@ inpAgain: ENDIF /* end if str > 12 */ /*===================== jump here if we also lost carrier ========*/ -ax: formatLongDate(getSystemTime(),fmtstr) StrCopy(odate,fmtstr) @@ -18245,11 +17755,11 @@ PROC downloadAFile(cmdcode: PTR TO CHAR, params) HANDLE DEF tempList=NIL:PTR TO stdlist DEF item:PTR TO flagFileItem DEF finalList:PTR TO stdlist - DEF tmpItem: flagFileItem DEF tfsizes=NIL:PTR TO stdlist DEF freeDFlags=NIL:PTR TO stdlist DEF freeDFlag DEF cb:PTR TO confBase + DEF estDlCPS proto:=0 nad:=0 @@ -18267,6 +17777,12 @@ PROC downloadAFile(cmdcode: PTR TO CHAR, params) HANDLE aePuts('\b\n') ENDIF + IF loggedOnUserMisc.lastDlCPS<>0 + estDlCPS:=loggedOnUserMisc.lastDlCPS + ELSE + estDlCPS:=Div(onlineBaud,10) + ENDIF + dtfsize:=0 displayULStats(loggedOnUser,loggedOnUserMisc) /* Show User stats.. Num Dnloads, uploads */ @@ -18394,7 +17910,7 @@ arestart1: arestart: WHILE TRUE - tsec:=Div(dtfsize,Div(onlineBaud,10)) + tsec:=Div(dtfsize,estDlCPS) min:=tsec/60 IF(((Div(timeLimit,60))-min)<0) aePuts('Not enough time for requested downloads.\b\n\b\n') @@ -18514,7 +18030,6 @@ arestart: Throw(ERR_EXCEPT,RESULT_SUCCESS) ENDIF -skip1: aePuts('\b\nChecking...\b\n') IF(sysopdl=FALSE) FOR x:=0 TO StrLen(tempStr)-1 @@ -18560,10 +18075,14 @@ astart: StringF(tempStr,'\b\n\s',xprTitle.item(loggedOnUser.xferProtocol)) aePuts(tempStr) ENDIF - StringF(tempStr,' Batch Download Estimate at \d bps:\b\n',onlineBaud) + IF loggedOnUserMisc.lastDlCPS<>0 + StringF(tempStr,' Batch Download Estimate at \d cps:\b\n',estDlCPS) + ELSE + StringF(tempStr,' Batch Download Estimate at \d bps:\b\n',onlineBaud) + ENDIF aePuts(tempStr) -astart2: - tsec:=Div(dtfsize,Div(onlineBaud,10)) + + tsec:=Div(dtfsize,estDlCPS) min:=tsec/60 secs:=tsec-(min*60) StringF(tempStr,' \d files, \dk bytes, \d mins \d secs\b\n',numFiles,Div(dtfsize,1024),min,secs) @@ -18597,9 +18116,6 @@ breakd: IF (mystat<>13) THEN aePuts('Goodbye!\b\n\b\n') ELSE aePuts('\b\n\b\n') - -sysopDL: - dTBT:=0 tBT:=0 tTTM:=0 @@ -18636,6 +18152,7 @@ sysopDL: IF pcps>65535 THEN pcps:=65535 loggedOnUserKeys.oldDnCPS:=pcps ENDIF + loggedOnUserMisc.lastDlCPS:=pcps clearFlagItems(finalList) END finalList @@ -18678,8 +18195,6 @@ PROC ccom() DEF i,i2,stat DEF str[81]:STRING DEF display_time[30]:STRING - DEF string[200]:STRING - DEF date[20]:STRING DEF buff[255]: STRING formatLongDateTime(getSystemTime(),display_time) @@ -18893,7 +18408,7 @@ PROC createVoteTopic() DEF topicNum,lock DEF votefile[255]:STRING DEF tempStr[255]:STRING - DEF i,ans,questNum,fh + DEF ans,questNum,fh StringF(votefile,'\sVote',currentConfDir) IF(lock:=CreateDir(votefile)) @@ -19013,7 +18528,7 @@ ENDPROC PROC editVoteTopic() DEF topicNum,questNum,ans DEF votefile[255]:STRING - DEF n,i + DEF n aePuts('\b\nENTER TOPIC NUMBER (1-25)>: ') topicNum:=numberInputNoDefault() @@ -19419,6 +18934,18 @@ PROC numberInput(n) lineInput('',tempStr,5,INPUT_TIMEOUT,tempStr) ENDPROC Val(tempStr) AND $FFFF +PROC rJoinInput(conf,msgbase) + DEF tempStr[20]:STRING + DEF p + lineInput('','',5,INPUT_TIMEOUT,tempStr) + conf:=Val(tempStr) + IF (p:=InStr(tempStr,'.'))>=0 + msgbase:=Val(tempStr+p+1) + ELSE + msgbase:=0 + ENDIF +ENDPROC conf,msgbase + PROC longNumberInput(n) DEF tempStr[20]:STRING formatUnsignedLong(n,tempStr) @@ -19488,15 +19015,40 @@ PROC checkLockAccounts(f6) ENDIF ENDPROC +PROC findUserAnswers(which,answersFilename:PTR TO CHAR) + DEF i,lock + DEF tempStr[255]:STRING + + StrCopy(answersFilename,'') + i:=0 + REPEAT + StringF(tempStr,'\sNode\d',cmds.bbsLoc,i) + lock:=Lock(tempStr,ACCESS_READ) + IF lock<>0 THEN UnLock(lock) + + IF lock + IF checkToolTypeExists(TOOLTYPE_NODE,i,'CENTRAL_ANSWERS') + StringF(answersFilename,'\sAnswers/\d',cmds.bbsLoc,which) + ELSE + StringF(answersFilename,'\sNode\d/Answers/\d',cmds.bbsLoc,i,which) + ENDIF + ENDIF + i++ + UNTIL (lock=0) OR fileExists(answersFilename) OR (i>MAXNODES) + IF (i>MAXNODES) OR (lock=0) THEN StrCopy(answersFilename,'') +ENDPROC StrLen(answersFilename)>0 + PROC editInfo(which:LONG, hoozer:PTR TO user, hoozer2:PTR TO userKeys, hoozer3: PTR TO userMisc,f6) DEF flag, command DEF tempStr[255]:STRING DEF temp,stat,i,preset DEF checkLock + DEF page=0 + DEF value1,value2 nofkeys:=1 - displayAccount(which,hoozer,hoozer2,hoozer3,f6) + displayAccount(which,page,hoozer,hoozer2,hoozer3,f6) StrCopy(tempStr,hoozer.name) UpperStr(tempStr) strCpy(hoozer2.userName,tempStr,31) @@ -19510,6 +19062,19 @@ PROC editInfo(which:LONG, hoozer:PTR TO user, hoozer2:PTR TO userKeys, hoozer3: flag:=0 +->b) internet name +->c) email address +->d) lines per screen +->e) computer type +->f) screen type +->g) screen clear +->h) transfer protocol +->i) zoom type +->j) available for chat +->k) translator +->l) expert mode +->m) bg file check + SELECT command CASE "\t" flag:=2 @@ -19517,16 +19082,18 @@ PROC editInfo(which:LONG, hoozer:PTR TO user, hoozer2:PTR TO userKeys, hoozer3: aePuts('No-Save\b\n') flag:=1 CASE " " - displayAccountInfo(which,hoozer,hoozer2,hoozer3,f6) + ->page:=Eor(page,1) + ->sendCLS() + ->displayAccount(which,page,hoozer,hoozer2,hoozer3,f6) CASE "+" IF(onlineEdit=FALSE) which:=which+1 IF(loadAccount(which,hoozer,hoozer2,hoozer3)<>RESULT_FAILURE) - displayAccountInfo(which,hoozer,hoozer2,hoozer3,f6) + displayAccountInfo(which,page,hoozer,hoozer2,hoozer3,f6) ELSE which:=1 loadAccount(which,hoozer,hoozer2,hoozer3) - displayAccountInfo(which,hoozer,hoozer2,hoozer3,f6) + displayAccountInfo(which,page,hoozer,hoozer2,hoozer3,f6) ENDIF ENDIF CASE "-" @@ -19534,28 +19101,26 @@ PROC editInfo(which:LONG, hoozer:PTR TO user, hoozer2:PTR TO userKeys, hoozer3: which:=which-1 IF(which<1) THEN which:=findLastAccount() loadAccount(which,hoozer,hoozer2,hoozer3) - displayAccountInfo(which,hoozer,hoozer2,hoozer3,f6) + displayAccountInfo(which,page,hoozer,hoozer2,hoozer3,f6) ENDIF CASE "!" /* Credit Maintenance */ creditMaintenance(which,hoozer,hoozer2,hoozer3,f6) - displayAccount(which,hoozer,hoozer2,hoozer3,f6) + displayAccount(which,page,hoozer,hoozer2,hoozer3,f6) CASE "*" /* User Notes */ userNotes(which,hoozer,hoozer2,hoozer3,f6) - displayAccount(which,hoozer,hoozer2,hoozer3,f6) + displayAccount(which,page,hoozer,hoozer2,hoozer3,f6) CASE "@" /* Conference Accounting */ IF checkToolTypeExists(TOOLTYPE_ACCESS,hoozer.secStatus,ListItem(securityNames,ACS_CONFERENCE_ACCOUNTING)) - conferenceAccounting(which,hoozer,hoozer2,hoozer3,f6) - displayAccount(which,hoozer,hoozer2,hoozer3,f6) + conferenceAccounting(hoozer,hoozer2,hoozer3,f6) + displayAccount(which,page,hoozer,hoozer2,hoozer3,f6) ENDIF CASE "?" - IF checkToolTypeExists(TOOLTYPE_NODE,node,'CENTRAL_ANSWERS') - StringF(tempStr,'\sAnswers/\d',cmds.bbsLoc,which) - IF fileExists(tempStr) - sendCLS() - displayFile(tempStr,TRUE,FALSE) - doPause() - displayAccount(which,hoozer,hoozer2,hoozer3,f6) - ENDIF + findUserAnswers(which,tempStr) + IF StrLen(tempStr)>0 + sendCLS() + displayFile(tempStr,TRUE,FALSE) + doPause() + displayAccount(which,page,hoozer,hoozer2,hoozer3,f6) ENDIF ENDSELECT @@ -19591,7 +19156,7 @@ PROC editInfo(which:LONG, hoozer:PTR TO user, hoozer2:PTR TO userKeys, hoozer3: ->//(RTS) hoozer2->baud_rate = 0 ->saveAccount(hoozer,hoozer2,hoozer3,0,0) - displayAccountInfo(which,hoozer,hoozer2,hoozer3,f6) + displayAccountInfo(which,page,hoozer,hoozer2,hoozer3,f6) ENDIF ENDIF @@ -19606,12 +19171,12 @@ PROC editInfo(which:LONG, hoozer:PTR TO user, hoozer2:PTR TO userKeys, hoozer3: stat:=saveAccount(hoozer,hoozer2,hoozer3,stat,1) IF(stat<>RESULT_SUCCESS) THEN aePuts('Can''t Save account\b\n') deleteConfAccess(stat) - displayAccountInfo(which,hoozer,hoozer2,hoozer3,f6) + displayAccountInfo(which,page,hoozer,hoozer2,hoozer3,f6) flag:=0 CASE "~" /* SAVE */ aePuts('Save\b\n') hoozer.newUser:=0 - displayAccountInfo(which,hoozer,hoozer2,hoozer3,f6) + displayAccountInfo(which,page,hoozer,hoozer2,hoozer3,f6) IF(hoozer.slotNumber=0) hoozer2.number:=0 stat:=saveAccount(hoozer,hoozer2,hoozer3,which,1) /* 1 = FORCE SAVE */ @@ -19728,7 +19293,9 @@ PROC editInfo(which:LONG, hoozer:PTR TO user, hoozer2:PTR TO userKeys, hoozer3: flag:=0 CASE "J" /* conference ReJoin */ aePuts('') - hoozer.confRJoin:=numberInput(hoozer.confRJoin) + value1,value2:=rJoinInput(hoozer.confRJoin, hoozer.msgBaseRJoin) + hoozer.confRJoin:=value1 + hoozer.msgBaseRJoin:=value2 flag:=0 CASE "K" /* UPLOADS */ aePuts('') @@ -19753,7 +19320,7 @@ PROC editInfo(which:LONG, hoozer:PTR TO user, hoozer2:PTR TO userKeys, hoozer3: flag:=0 CASE "%" aePuts('') - hoozer2.timesOnToday:=numberInput(hoozer2.timesOnToday) + hoozer2.timesOnToday:=numberInput(getTodaysCalls(hoozer,hoozer2)) flag:=0 CASE "O" /* Bytes Uploaded */ aePuts('') @@ -20210,7 +19777,7 @@ PROC creditMaintenance(which:LONG, hoozer:PTR TO user, hoozer2:PTR TO userKeys, ENDPROC flag -PROC conferenceAccounting(which:LONG, hoozer:PTR TO user, hoozer2:PTR TO userKeys, hoozer3: PTR TO userMisc,f6) +PROC conferenceAccounting(hoozer:PTR TO user, hoozer2:PTR TO userKeys, hoozer3: PTR TO userMisc,f6) DEF tempstr[255]:STRING,tempstr2[255]:STRING DEF cb: PTR TO confBase DEF i,m,flag=0,conf,ch,oldval @@ -20550,7 +20117,7 @@ PROC editAccounts(f6) IF(charToUpper(tempStr[0])="N") listNewAccounts(f6) ELSEIF(charToUpper(tempStr[0])="B") - bulkAccountEditor(f6) + bulkAccountEditor() ELSEIF(charToUpper(tempStr[0])="C") listCreditAccounts(f6) ELSEIF(charToUpper(tempStr[0])="I") @@ -21011,7 +20578,7 @@ PROC findOpenAccount(hoozer:PTR TO user, hoozer2: PTR TO userKeys, hoozer3: PTR ENDIF ENDPROC -PROC displayAccount(who:LONG, hoozer:PTR TO user, hoozer2: PTR TO userKeys, hoozer3: PTR TO userMisc, f6:LONG) +PROC displayAccount(who:LONG, page, hoozer:PTR TO user, hoozer2: PTR TO userKeys, hoozer3: PTR TO userMisc, f6:LONG) DEF tempStr[255]:STRING DEF tempStr2[255]:STRING DEF temp @@ -21042,159 +20609,170 @@ PROC displayAccount(who:LONG, hoozer:PTR TO user, hoozer2: PTR TO userKeys, hooz ENDSELECT IF(hoozer.slotNumber=who) - StringF(tempStr,' ACTIVE [\d] BAUD: \d\b\n',hoozer.slotNumber,baud) - aePuts(tempStr) + StrCopy(tempStr2,' ACTIVE') ELSE - StringF(tempStr,'INACTIVE [\d] \b\n',who) - aePuts(tempStr) + StrCopy(tempStr2,'INACTIVE') ENDIF + StringF(tempStr,'\s [\d] BAUD: \d\b\n',tempStr2,who,baud) + aePuts(tempStr) StringF(tempStr,'A> Name: \l\s[32] ',hoozer.name) aePuts(tempStr) - StringF(tempStr,'B> Real Name: \l\s[25]',hoozer3.realName) - aePuts(tempStr) - StringF(tempStr,'C> Loc.: \l\s[29]',hoozer.location) - aePuts(tempStr) - IF((logonType>=LOGON_TYPE_REMOTE) AND (f6=FALSE)) - IF(loggedOnUser.slotNumber=1) + IF page=0 + StringF(tempStr,'B> Real Name: \l\s[25]',hoozer3.realName) + aePuts(tempStr) + StringF(tempStr,'C> Loc.: \l\s[29]',hoozer.location) + aePuts(tempStr) + IF((logonType>=LOGON_TYPE_REMOTE) AND (f6=FALSE)) + IF(loggedOnUser.slotNumber=1) + StringF(tempStr,'D> Pass ....: ENCRYPTED') + aePuts(tempStr) + ELSE + aePuts('D> Pass ....: DISABLED') + ENDIF + ELSE StringF(tempStr,'D> Pass ....: ENCRYPTED') aePuts(tempStr) - ELSE - aePuts('D> Pass ....: DISABLED') ENDIF - ELSE - StringF(tempStr,'D> Pass ....: ENCRYPTED') - aePuts(tempStr) - ENDIF - StringF(tempStr,'E> Phone Number ..: \l\s[13]',hoozer.phoneNumber) - aePuts(tempStr) + StringF(tempStr,'E> Phone Number ..: \l\s[13]',hoozer.phoneNumber) + aePuts(tempStr) - StringF(tempStr,'F> Area Name......: \l\s',hoozer.conferenceAccess) - aePuts(tempStr) + StringF(tempStr,'F> Area Name......: \l\s',hoozer.conferenceAccess) + aePuts(tempStr) - StringF(tempStr,'G> Ratio .........: \l\d[7]',hoozer.secLibrary) - aePuts(tempStr) + StringF(tempStr,'G> Ratio .........: \l\d[7]',hoozer.secLibrary) + aePuts(tempStr) - StringF(tempStr,'H> Sec_Level .....: \l\d[5]',hoozer.secStatus) - aePuts(tempStr) + StringF(tempStr,'H> Sec_Level .....: \l\d[5]',hoozer.secStatus) + aePuts(tempStr) - StringF(tempStr,'I> Ratio Type ....: \l\d[5]',hoozer.secBoard) - aePuts(tempStr) - IF(hoozer.secBoard=0) THEN aePuts(' <-Byte)') - IF(hoozer.secBoard=1) THEN aePuts(' <-B/F) ') - IF(hoozer.secBoard=2) THEN aePuts(' <-File)') + StringF(tempStr,'I> Ratio Type ....: \l\d[5]',hoozer.secBoard) + aePuts(tempStr) + IF(hoozer.secBoard=0) THEN aePuts(' <-Byte)') + IF(hoozer.secBoard=1) THEN aePuts(' <-B/F) ') + IF(hoozer.secBoard=2) THEN aePuts(' <-File)') - StringF(tempStr,'J> AutoReJoin ....: \l\d[10]',hoozer.confRJoin) - aePuts(tempStr) + IF (hoozer.msgBaseRJoin>0) + StringF(tempStr2,'\d.\d',hoozer.confRJoin,hoozer.msgBaseRJoin) + ELSE + StringF(tempStr2,'\d',hoozer.confRJoin) + ENDIF + StringF(tempStr,'J> AutoReJoin ....: \l\s[7]',tempStr2) + aePuts(tempStr) - StringF(tempStr,'K> Uploads .......: \l\d[10]',hoozer.uploads AND $FFFF) - aePuts(tempStr) + StringF(tempStr,'K> Uploads .......: \l\d[10]',hoozer.uploads AND $FFFF) + aePuts(tempStr) - StringF(tempStr,'L> Messages Posted: \l\d[7]',hoozer.messagesPosted AND $FFFF) - aePuts(tempStr) + StringF(tempStr,'L> Messages Posted: \l\d[7]',hoozer.messagesPosted AND $FFFF) + aePuts(tempStr) - StringF(tempStr,'M> Downloads .....: \l\d[10]\b\n',hoozer.downloads AND $FFFF) - aePuts(tempStr) + StringF(tempStr,'M> Downloads .....: \l\d[10]\b\n',hoozer.downloads AND $FFFF) + aePuts(tempStr) - IF hoozer.newUser THEN StrCopy(tempStr2,'Yes') ELSE StrCopy(tempStr2,'No') - StringF(tempStr,'N> New_User ......: \s[3] ',tempStr2) - aePuts(tempStr) + IF hoozer.newUser THEN StrCopy(tempStr2,'Yes') ELSE StrCopy(tempStr2,'No') + StringF(tempStr,'N> New_User ......: \s[3] ',tempStr2) + aePuts(tempStr) - StringF(tempStr,'#Calls: \l\d[6]',hoozer.timesCalled AND $FFFF) - aePuts(tempStr) + StringF(tempStr,'#Calls: \l\d[6]',hoozer.timesCalled AND $FFFF) + aePuts(tempStr) - StringF(tempStr,'%Today: \l\d[6]',hoozer2.timesOnToday AND $FFFF) - aePuts(tempStr) + StringF(tempStr,'%Today: \l\d[6]',getTodaysCalls(hoozer,hoozer2)) + aePuts(tempStr) - formatBCD(hoozer3.uploadBytesBCD,tempStr2) + formatBCD(hoozer3.uploadBytesBCD,tempStr2) - IF sopt.toggles[TOGGLES_CREDITBYKB] - StringF(tempStr,'O> KBytes Uled ...: \l\s[14]',tempStr2) - ELSE - StringF(tempStr,'O> Bytes Uled ....: \l\s[14]',tempStr2) - ENDIF - aePuts(tempStr) + IF sopt.toggles[TOGGLES_CREDITBYKB] + StringF(tempStr,'O> KBytes Uled ...: \l\s[14]',tempStr2) + ELSE + StringF(tempStr,'O> Bytes Uled ....: \l\s[14]',tempStr2) + ENDIF + aePuts(tempStr) - formatLongDateTime(hoozer.timeLastOn,tempStr2) - StringF(tempStr,'Last Called ...: \s',tempStr2) - aePuts(tempStr) + formatLongDateTime(hoozer.timeLastOn,tempStr2) + StringF(tempStr,'Last Called ...: \s',tempStr2) + aePuts(tempStr) - formatBCD(hoozer3.downloadBytesBCD,tempStr2) - IF sopt.toggles[TOGGLES_CREDITBYKB] - StringF(tempStr,'P> KBytes Dled ...: \l\s[14]',tempStr2) - ELSE - StringF(tempStr,'P> Bytes Dled ....: \l\s[14]',tempStr2) - ENDIF - aePuts(tempStr) + formatBCD(hoozer3.downloadBytesBCD,tempStr2) + IF sopt.toggles[TOGGLES_CREDITBYKB] + StringF(tempStr,'P> KBytes Dled ...: \l\s[14]',tempStr2) + ELSE + StringF(tempStr,'P> Bytes Dled ....: \l\s[14]',tempStr2) + ENDIF + aePuts(tempStr) - temp:=computerTypes.count() - IF temp=0 - StringF(tempStr,'Computer Type .: ') - ELSEIF hoozer.secBulletin>=temp - StringF(tempStr,'Computer Type .: NOT VALID!',computerTypes.item(hoozer.secBulletin)) - ELSE - StringF(tempStr,'Computer Type .: \l\s[16]',computerTypes.item(hoozer.secBulletin)) - ENDIF - aePuts(tempStr) + temp:=computerTypes.count() + IF temp=0 + StringF(tempStr,'Computer Type .: ') + ELSEIF hoozer.secBulletin>=temp + StringF(tempStr,'Computer Type .: NOT VALID!',computerTypes.item(hoozer.secBulletin)) + ELSE + StringF(tempStr,'Computer Type .: \l\s[16]',computerTypes.item(hoozer.secBulletin)) + ENDIF + aePuts(tempStr) - IF (hoozer.dailyBytesLimit<>0) - formatUnsignedLong(hoozer.dailyBytesLimit,tempStr2) - ELSE - StrCopy(tempStr2,'Infinite') - ENDIF - IF sopt.toggles[TOGGLES_CREDITBYKB] - StringF(tempStr,'Q> KByte Limit ...: \l\s[10]',tempStr2) - ELSE - StringF(tempStr,'Q> Byte Limit ....: \l\s[10]',tempStr2) - ENDIF - aePuts(tempStr) + IF (hoozer.dailyBytesLimit<>0) + formatUnsignedLong(hoozer.dailyBytesLimit,tempStr2) + ELSE + StrCopy(tempStr2,'Infinite') + ENDIF + IF sopt.toggles[TOGGLES_CREDITBYKB] + StringF(tempStr,'Q> KByte Limit ...: \l\s[10]',tempStr2) + ELSE + StringF(tempStr,'Q> Byte Limit ....: \l\s[10]',tempStr2) + ENDIF + aePuts(tempStr) - temp:=screenTypeTitle.count() - IF temp=0 - StringF(tempStr,'Screen Type ..: ') - ELSEIF hoozer.screenType>=temp - StringF(tempStr,'Screen Type ..: NOT VALID!') - ELSE - StringF(tempStr,'Screen Type ..: \l\s',screenTypeTitle.item(hoozer.screenType)) - ENDIF - aePuts(tempStr) + temp:=screenTypeTitle.count() + IF temp=0 + StringF(tempStr,'Screen Type ..: ') + ELSEIF hoozer.screenType>=temp + StringF(tempStr,'Screen Type ..: NOT VALID!') + ELSE + StringF(tempStr,'Screen Type ..: \l\s',screenTypeTitle.item(hoozer.screenType)) + ENDIF + aePuts(tempStr) - StringF(tempStr,'R> Time_Total: [\l\d[8]] mins ',Div(hoozer.timeTotal,60)) - aePuts(tempStr) + StringF(tempStr,'R> Time_Total: [\l\d[8]] mins ',Div(hoozer.timeTotal,60)) + aePuts(tempStr) - formatUnsignedLong(hoozer2.upCPS2,tempStr2) - StringF(tempStr,'S> Cps UP: \l\s[10]',tempStr2) - aePuts(tempStr) + formatUnsignedLong(hoozer2.upCPS2,tempStr2) + StringF(tempStr,'S> Cps UP: \l\s[10]',tempStr2) + aePuts(tempStr) - formatUnsignedLong(hoozer2.dnCPS2,tempStr2) - StringF(tempStr,'T> Cps DN: \l\s[10]',tempStr2) - aePuts(tempStr) + formatUnsignedLong(hoozer2.dnCPS2,tempStr2) + StringF(tempStr,'T> Cps DN: \l\s[10]',tempStr2) + aePuts(tempStr) - StringF(tempStr,'U> Time_Limit: [\l\d[8]] mins ',Div(hoozer.timeLimit,60)) - aePuts(tempStr) - StringF(tempStr,' V> Time_Used: [\l\d[8]] mins W> UUCP: \d ',Div(hoozer.timeUsed,60),hoozer.uucpa) - aePuts(tempStr) + StringF(tempStr,'U> Time_Limit: [\l\d[8]] mins ',Div(hoozer.timeLimit,60)) + aePuts(tempStr) + StringF(tempStr,' V> Time_Used: [\l\d[8]] mins W> UUCP: \d ',Div(hoozer.timeUsed,60),hoozer.uucpa) + aePuts(tempStr) - StringF(tempStr,'Y> Chat_Limit: [\l\d[8]] mins ',Div(hoozer.chatLimit,60)) - aePuts(tempStr) - StringF(tempStr,' Z> Chat_Used: [\l\d[8]] mins ',Div((hoozer.chatLimit-hoozer.chatRemain),60)) - aePuts(tempStr) + StringF(tempStr,'Y> Chat_Limit: [\l\d[8]] mins ',Div(hoozer.chatLimit,60)) + aePuts(tempStr) + StringF(tempStr,' Z> Chat_Used: [\l\d[8]] mins ',Div((hoozer.chatLimit-hoozer.chatRemain),60)) + aePuts(tempStr) - aePuts('\b\n') + aePuts('\b\n') + ENDIF + displayAccountActions(who) +ENDPROC +PROC displayAccountActions(who:LONG) + DEF tempStr[200]:STRING + DEF tempStr2[20]:STRING + aePuts('X =EXIT-NOSAVE ~=SAVE 1-8=PRESETS 9=RE-ACTIVATE =DELETE *=USER NOTES\b\n') StrCopy(tempStr,'=CONT @=CONFERENCE ACCOUNTING !=CREDIT ACCOUNT MAINTENANCE ') - IF checkToolTypeExists(TOOLTYPE_NODE,node,'CENTRAL_ANSWERS') - StrAdd(tempStr,'?=USER ANSWERS') - ENDIF + IF findUserAnswers(who,tempStr2) THEN StrAdd(tempStr,'?=USER ANSWERS') ELSE StrAdd(tempStr,' ') StrAdd(tempStr,'\b\n') aePuts(tempStr) ENDPROC -PROC displayAccountInfo(who:LONG, hoozer:PTR TO user, hoozer2:PTR TO userKeys, hoozer3:PTR TO userMisc,f6:LONG) +PROC displayAccountInfo(who:LONG, page,hoozer:PTR TO user, hoozer2:PTR TO userKeys, hoozer3:PTR TO userMisc,f6:LONG) DEF tempStr[255]:STRING DEF tempStr2[255]:STRING DEF baud,temp @@ -21232,135 +20810,146 @@ PROC displayAccountInfo(who:LONG, hoozer:PTR TO user, hoozer2:PTR TO userKeys, h StringF(tempStr,'\l\s[32]',hoozer.name) aePuts(tempStr) - StringF(tempStr,'\l\s[25]',hoozer3.realName) - aePuts(tempStr) - StringF(tempStr,'\l\s[29]',hoozer.location) - aePuts(tempStr) - IF((logonType>=LOGON_TYPE_REMOTE) AND (f6=FALSE)) + IF page=0 + StringF(tempStr,'\l\s[25]',hoozer3.realName) + aePuts(tempStr) + StringF(tempStr,'\l\s[29]',hoozer.location) + aePuts(tempStr) + + IF((logonType>=LOGON_TYPE_REMOTE) AND (f6=FALSE)) - IF(loggedOnUser.slotNumber=1) + IF(loggedOnUser.slotNumber=1) + StringF(tempStr,'ENCRYPTED') + aePuts(tempStr) + ELSE + aePuts('DISABLED\b\n') + ENDIF + ELSE StringF(tempStr,'ENCRYPTED') aePuts(tempStr) - ELSE - aePuts('DISABLED\b\n') ENDIF - ELSE - StringF(tempStr,'ENCRYPTED') + StringF(tempStr,'\l\s[13]',hoozer.phoneNumber) aePuts(tempStr) - ENDIF - StringF(tempStr,'\l\s[13]',hoozer.phoneNumber) - aePuts(tempStr) - StringF(tempStr,'\l\s[10]',hoozer.conferenceAccess) - aePuts(tempStr) + StringF(tempStr,'\l\s[10]',hoozer.conferenceAccess) + aePuts(tempStr) - StringF(tempStr,'\l\d[7]',hoozer.secLibrary) - aePuts(tempStr) + StringF(tempStr,'\l\d[7]',hoozer.secLibrary) + aePuts(tempStr) - StringF(tempStr,'\l\d[5]',hoozer.secStatus) - aePuts(tempStr) + StringF(tempStr,'\l\d[5]',hoozer.secStatus) + aePuts(tempStr) - StringF(tempStr,'\l\d[5]',hoozer.secBoard) - aePuts(tempStr) - IF(hoozer.secBoard=0) THEN aePuts(' <-Byte)') - IF(hoozer.secBoard=1) THEN aePuts(' <-B/F) ') - IF(hoozer.secBoard=2) THEN aePuts(' <-File)') + StringF(tempStr,'\l\d[5]',hoozer.secBoard) + aePuts(tempStr) + IF(hoozer.secBoard=0) THEN aePuts(' <-Byte)') + IF(hoozer.secBoard=1) THEN aePuts(' <-B/F) ') + IF(hoozer.secBoard=2) THEN aePuts(' <-File)') - StringF(tempStr,'\l\d[7]',hoozer.confRJoin) - aePuts(tempStr) - StringF(tempStr,'\l\d[10]',hoozer.uploads AND $FFFF) - aePuts(tempStr) + IF (hoozer.msgBaseRJoin>0) + StringF(tempStr2,'\d.\d',hoozer.confRJoin,hoozer.msgBaseRJoin) + ELSE + StringF(tempStr2,'\d',hoozer.confRJoin) + ENDIF - StringF(tempStr,'\l\d[7]',hoozer.messagesPosted AND $FFFF) - aePuts(tempStr) + StringF(tempStr,'\l\s[7]',tempStr2) + aePuts(tempStr) - StringF(tempStr,'\l\d[10]',hoozer.downloads AND $FFFF) - aePuts(tempStr) + StringF(tempStr,'\l\d[10]',hoozer.uploads AND $FFFF) + aePuts(tempStr) - IF hoozer.newUser THEN StrCopy(tempStr2,'Yes') ELSE StrCopy(tempStr2,'No') - StringF(tempStr,'N> New_User ......: \s[3] ',tempStr2) - aePuts(tempStr) + StringF(tempStr,'\l\d[7]',hoozer.messagesPosted AND $FFFF) + aePuts(tempStr) - StringF(tempStr,'#Calls: \l\d[6]',hoozer.timesCalled AND $FFFF) - aePuts(tempStr) + StringF(tempStr,'\l\d[10]',hoozer.downloads AND $FFFF) + aePuts(tempStr) - StringF(tempStr,'%Today: \l\d[6]',hoozer2.timesOnToday AND $FFFF) - aePuts(tempStr) + IF hoozer.newUser THEN StrCopy(tempStr2,'Yes') ELSE StrCopy(tempStr2,'No') + StringF(tempStr,'N> New_User ......: \s[3] ',tempStr2) + aePuts(tempStr) - formatBCD(hoozer3.uploadBytesBCD,tempStr2) - StringF(tempStr,'\l\s[14]',tempStr2) - aePuts(tempStr) + StringF(tempStr,'#Calls: \l\d[6]',hoozer.timesCalled AND $FFFF) + aePuts(tempStr) - formatLongDateTime(hoozer.timeLastOn,tempStr2) - StringF(tempStr,'\s',tempStr2) - aePuts(tempStr) + StringF(tempStr,'%Today: \l\d[6]',getTodaysCalls(hoozer,hoozer2)) + aePuts(tempStr) - formatBCD(hoozer3.downloadBytesBCD,tempStr2) - StringF(tempStr,'\l\s[14]',tempStr2) - aePuts(tempStr) + formatBCD(hoozer3.uploadBytesBCD,tempStr2) + StringF(tempStr,'\l\s[14]',tempStr2) + aePuts(tempStr) - temp:=computerTypes.count() - IF temp=0 - StringF(tempStr,'') - ELSEIF hoozer.secBulletin>=temp - StringF(tempStr,'NOT VALID!') - ELSE - StringF(tempStr,'\l\s[16]',computerTypes.item(hoozer.secBulletin)) - ENDIF - aePuts(tempStr) + formatLongDateTime(hoozer.timeLastOn,tempStr2) + StringF(tempStr,'\s',tempStr2) + aePuts(tempStr) - IF (hoozer.dailyBytesLimit<>0) - formatUnsignedLong(hoozer.dailyBytesLimit,tempStr2) - ELSE - StrCopy(tempStr2,'Infinite') - ENDIF - StringF(tempStr,'\l\s[10]',tempStr2) - aePuts(tempStr) + formatBCD(hoozer3.downloadBytesBCD,tempStr2) + StringF(tempStr,'\l\s[14]',tempStr2) + aePuts(tempStr) - temp:=screenTypeTitle.count() - IF temp=0 - StringF(tempStr,'') - ELSEIF (hoozer.screenType>=temp) - StringF(tempStr,'NOT VALID!') - ELSE - StringF(tempStr,'\l\s[16]',screenTypeTitle.item(hoozer.screenType)) - ENDIF - aePuts(tempStr) + temp:=computerTypes.count() + IF temp=0 + StringF(tempStr,'') + ELSEIF hoozer.secBulletin>=temp + StringF(tempStr,'NOT VALID!') + ELSE + StringF(tempStr,'\l\s[16]',computerTypes.item(hoozer.secBulletin)) + ENDIF + aePuts(tempStr) - StringF(tempStr,'\l\d[6]',Div(hoozer.timeTotal,60)) - aePuts(tempStr) + IF (hoozer.dailyBytesLimit<>0) + formatUnsignedLong(hoozer.dailyBytesLimit,tempStr2) + ELSE + StrCopy(tempStr2,'Infinite') + ENDIF + StringF(tempStr,'\l\s[10]',tempStr2) + aePuts(tempStr) - formatUnsignedLong(hoozer2.upCPS2,tempStr2) - StringF(tempStr,'Cps UP: \l\s[10]',tempStr2) - aePuts(tempStr) + temp:=screenTypeTitle.count() + IF temp=0 + StringF(tempStr,'') + ELSEIF (hoozer.screenType>=temp) + StringF(tempStr,'NOT VALID!') + ELSE + StringF(tempStr,'\l\s[16]',screenTypeTitle.item(hoozer.screenType)) + ENDIF + aePuts(tempStr) - formatUnsignedLong(hoozer2.dnCPS2,tempStr2) - StringF(tempStr,'Cps DN: \l\s[10]',tempStr2) - aePuts(tempStr) + StringF(tempStr,'\l\d[6]',Div(hoozer.timeTotal,60)) + aePuts(tempStr) - StringF(tempStr,'\l\d[6]',Div(hoozer.timeLimit,60)) - aePuts(tempStr) - StringF(tempStr,'\l\d[6]',Div(hoozer.timeUsed,60)) - aePuts(tempStr) + formatUnsignedLong(hoozer2.upCPS2,tempStr2) + StringF(tempStr,'Cps UP: \l\s[10]',tempStr2) + aePuts(tempStr) - StringF(tempStr,'\d',hoozer.uucpa) - aePuts(tempStr) + formatUnsignedLong(hoozer2.dnCPS2,tempStr2) + StringF(tempStr,'Cps DN: \l\s[10]',tempStr2) + aePuts(tempStr) - StringF(tempStr,'\l\d[6]',Div(hoozer.chatLimit,60)) - aePuts(tempStr) - StringF(tempStr,'\l\d[6]',Div((hoozer.chatLimit-hoozer.chatRemain),60)) - aePuts(tempStr) + StringF(tempStr,'\l\d[6]',Div(hoozer.timeLimit,60)) + aePuts(tempStr) + StringF(tempStr,'\l\d[6]',Div(hoozer.timeUsed,60)) + aePuts(tempStr) + + StringF(tempStr,'\d',hoozer.uucpa) + aePuts(tempStr) + + StringF(tempStr,'\l\d[6]',Div(hoozer.chatLimit,60)) + aePuts(tempStr) + StringF(tempStr,'\l\d[6]',Div((hoozer.chatLimit-hoozer.chatRemain),60)) + aePuts(tempStr) + ENDIF + displayAccountActions(who) ENDPROC -PROC bulkAccountEditor(f6) +PROC bulkAccountEditor() DEF flag,command DEF settings[15]:ARRAY OF LONG DEF areaName[255]:STRING DEF secLevel[3]:STRING - DEF i,v,r + DEF i,v,v2,r,p DEF tempstr[255]:STRING sendCLS() @@ -21414,7 +21003,16 @@ PROC bulkAccountEditor(f6) aePuts(' ') lineInput('',settings[2],15,INPUT_TIMEOUT,settings[2]) v,r:=Val(settings[2]) - IF (r=0) OR (v<1) OR (v>cmds.numConf) THEN StrCopy(settings[2],'') ELSE StringF(settings[2],'\d',v) + IF (r=0) OR (v<1) OR (v>cmds.numConf) + StrCopy(settings[2],'') + ELSE + IF (p:=InStr(settings[2],'.'))>=0 + v2,r:=Val(p+1+settings[2]) + StringF(settings[2],'\d.\d',v,v2) + ELSE + StringF(settings[2],'\d',v) + ENDIF + ENDIF CASE "K" aePuts(' ') lineInput('',settings[3],15,INPUT_TIMEOUT,settings[3]) @@ -21599,7 +21197,7 @@ PROC displayBulkSettings(settings:PTR TO LONG, areaName:PTR TO CHAR, secLevel:PT ENDPROC PROC applyBulkChanges(settings:PTR TO LONG,areaName:PTR TO CHAR,secLevel:PTR TO CHAR) - DEF fh,fh2,fh3,v + DEF fh,fh2,fh3,v,p DEF stat,stat2,stat3,match IF((fh:=Open(userDataFile,MODE_OLDFILE)))=0 THEN RETURN RESULT_FAILURE @@ -21665,7 +21263,15 @@ PROC applyBulkChanges(settings:PTR TO LONG,areaName:PTR TO CHAR,secLevel:PTR TO IF match IF StrLen(settings[0])>0 THEN tempUser.secLibrary:=Val(settings[0]) IF StrLen(settings[1])>0 THEN tempUser.secBoard:=Val(settings[1]) - IF StrLen(settings[2])>0 THEN tempUser.confRJoin:=Val(settings[2]) + IF StrLen(settings[2])>0 + IF (p:=InStr(settings[2],'.'))>=0 + tempUser.confRJoin:=Val(settings[2]) + tempUser.msgBaseRJoin:=Val(p+1+settings[2]) + ELSE + tempUser.confRJoin:=Val(settings[2]) + tempUser.msgBaseRJoin:=0 + ENDIF + ENDIF IF StrLen(settings[3])>0 THEN tempUser.uploads:=Val(settings[3]) IF StrLen(settings[4])>0 THEN tempUser.messagesPosted:=Val(settings[4]) IF StrLen(settings[5])>0 THEN tempUser.downloads:=Val(settings[5]) @@ -21704,7 +21310,7 @@ PROC bulkPresets() DEF preset:LONG,allConf:LONG DEF areaName[255]:STRING DEF secLevel[3]:STRING - DEF i,v,r + DEF v,r DEF tempstr[255]:STRING sendCLS() @@ -21794,7 +21400,6 @@ PROC bulkPresets() ENDPROC RESULT_SUCCESS PROC displayBulkPresetScreen() - DEF tempStr[255]:STRING aePuts(' BULK ACCOUNT MAINTENANCE') aePuts(' Preset to apply:') @@ -21820,7 +21425,7 @@ ENDPROC PROC displayBulkPresetSettings(preset:LONG, allConfs:LONG, areaName:PTR TO CHAR, secLevel:PTR TO CHAR) DEF tempStr[255]:STRING - DEF i,tot,v + DEF i,tot IF checkToolTypeExists(TOOLTYPE_PRESET,1,'PRESET.AREA') StringF(tempStr,' \s',IF preset=1 THEN 'Yes' ELSE 'No ') @@ -22309,7 +21914,7 @@ PROC internalCommand0() remoteShell() ENDPROC RESULT_SUCCESS -PROC internalCommand1(params) +PROC internalCommand1() IF (checkSecurity(ACS_ACCOUNT_EDITING)=FALSE) RETURN RESULT_NOT_ALLOWED ENDIF @@ -22754,8 +22359,7 @@ PROC internalCommandFM(params) HANDLE DEF foundfile[12]:STRING DEF foundDateStr[20]:STRING DEF flagfilelist=NIL:PTR TO stringlist - DEF matchpos,matchend - DEF newstr + DEF matchpos DEF item:PTR TO flagFileItem IF checkSecurity(ACS_EDIT_FILES)=FALSE THEN RETURN RESULT_NOT_ALLOWED @@ -22929,7 +22533,6 @@ PROC internalCommandG(params) ENDPROC RESULT_SUCCESS PROC internalCommandH(params) - DEF stat DEF tempstr[255]:STRING,screen[255]:STRING parseParams(params) @@ -22972,8 +22575,10 @@ PROC internalCommandUpHat(params) ENDPROC RESULT_SUCCESS PROC internalCommandJ(params) - DEF newConfStr[5]:STRING + DEF newStr[5]:STRING DEF newConf,stat + DEF newMsgBase=1 + DEF param,pos,cnt DEF tempStr[255]:STRING IF checkSecurity(ACS_JOIN_CONFERENCE)=FALSE THEN RETURN RESULT_NOT_ALLOWED @@ -22985,7 +22590,15 @@ PROC internalCommandJ(params) newConf:=-1 IF parsedParams.count()>0 - IF StrLen(parsedParams.item(0))>0 THEN newConf:=Val(parsedParams.item(0)) + param:=parsedParams.item(0) + IF StrLen(param)>0 + newConf:=Val(param) + IF (pos:=InStr(param,'.'))>=0 + newMsgBase:=Val(param+pos+1) + ELSEIF parsedParams.count()>1 + newMsgBase:=Val(parsedParams.item(1)) + ENDIF + ENDIF ENDIF newConf:=getInverse(newConf) @@ -22993,12 +22606,12 @@ PROC internalCommandJ(params) IF (newConf<1) OR (newConf>cmds.numConf) displayScreen(SCREEN_JOINCONF) StringF(tempStr,'Conference Number (1-\d): ',cmds.numConf) - stat:=lineInput(tempStr,'',5,INPUT_TIMEOUT,newConfStr) + stat:=lineInput(tempStr,'',5,INPUT_TIMEOUT,newStr) IF stat<>RESULT_SUCCESS THEN RETURN stat - IF StrLen(newConfStr)=0 THEN RETURN RESULT_SUCCESS + IF StrLen(newStr)=0 THEN RETURN RESULT_SUCCESS - newConf:=getInverse(Val(newConfStr)) + newConf:=getInverse(Val(newStr)) ENDIF IF newConf<1 THEN newConf:=1 @@ -23015,22 +22628,30 @@ PROC internalCommandJ(params) callersLog(tempStr) ENDIF - joinConf(newConf,1,FALSE,FALSE) + cnt:=getConfMsgBaseCount(newConf) + + IF (newMsgBase<1) OR (newMsgBase>cnt) + displayScreen(SCREEN_JOINMSGBASE) + StringF(tempStr,'Message Base Number (1-\d): ',cnt) + stat:=lineInput(tempStr,'',5,INPUT_TIMEOUT,newStr) + IF stat<>RESULT_SUCCESS THEN RETURN stat + + IF StrLen(newStr)=0 THEN RETURN RESULT_SUCCESS + + newMsgBase:=Val(newStr) + ENDIF + + joinConf(newConf,newMsgBase,FALSE,FALSE) ENDPROC RESULT_SUCCESS PROC internalCommandJM(params) DEF newStr[5]:STRING DEF newMsgBase,stat,cnt + DEF param DEF tempStr[255]:STRING IF checkSecurity(ACS_JOIN_CONFERENCE)=FALSE THEN RETURN RESULT_NOT_ALLOWED - cnt:=readToolTypeInt(TOOLTYPE_MSGBASE,currentConf,'NMSGBASES') - IF cnt=-1 - aePuts('\b\nThis conference does not contain multiple message bases\b\n\b\n') - RETURN RESULT_FAILURE - ENDIF - saveMsgPointers(currentConf,currentMsgBase) setEnvStat(ENV_JOIN) @@ -23039,9 +22660,23 @@ PROC internalCommandJM(params) newMsgBase:=-1 IF parsedParams.count()>0 - IF StrLen(parsedParams.item(0))>0 THEN newMsgBase:=Val(parsedParams.item(0)) + param:=parsedParams.item(0) + + IF (InStr(param,'.')>=0) + internalCommandJ(params) + RETURN + ENDIF + + IF StrLen(param)>0 THEN newMsgBase:=Val(param) + ENDIF + + cnt:=readToolTypeInt(TOOLTYPE_MSGBASE,currentConf,'NMSGBASES') + IF cnt=-1 + aePuts('\b\nThis conference does not contain multiple message bases\b\n\b\n') + RETURN RESULT_FAILURE ENDIF + cnt:=getConfMsgBaseCount(currentConf) IF (newMsgBase<1) OR (newMsgBase>cnt) @@ -23220,7 +22855,7 @@ PROC internalCommandO() result:=RESULT_SUCCESS - IF((sysopAvail=FALSE) AND (checkSecurity(ACS_OVERRIDE_CHAT))=FALSE) + IF(sysopAvail=FALSE) AND (checkSecurity(ACS_OVERRIDE_CHAT)=FALSE) StringF(string,'\b\nSorry, \s, is not around right now\b\n',cmds.sysopName) aePuts(string) aePuts('You can use ''C'' to leave a comment.\b\n\b\n') @@ -23361,7 +22996,6 @@ ENDPROC RESULT_SUCCESS PROC internalCommandS() DEF tmp[150]:STRING DEF tmp2[25]:STRING - DEF n,i IF checkSecurity(ACS_DISPLAY_USER_STATS)=FALSE THEN RETURN RESULT_NOT_ALLOWED @@ -23386,7 +23020,7 @@ PROC internalCommandS() aePuts(tmp) StringF(tmp,'# Times On : \d\b\n',loggedOnUser.timesCalled AND $FFFF) aePuts(tmp) - StringF(tmp,'Times Today: \d\b\n',loggedOnUserKeys.timesOnToday AND $FFFF) + StringF(tmp,'Times Today: \d\b\n',getTodaysCalls(loggedOnUser,loggedOnUserKeys)) aePuts(tmp) StringF(tmp,'Msgs Posted: \d\b\n',loggedOnUser.messagesPosted AND $FFFF) aePuts(tmp) @@ -23426,7 +23060,7 @@ PROC internalCommandS() aePuts('\b\n') ENDPROC RESULT_SUCCESS -PROC internalCommandRZ(cmdcode,params) +PROC internalCommandRZ(cmdcode) IF checkSecurity(ACS_UPLOAD)=FALSE THEN RETURN RESULT_NOT_ALLOWED setEnvStat(ENV_UPLOADING) @@ -23435,7 +23069,7 @@ PROC internalCommandRZ(cmdcode,params) ELSE bgFileCheck:=FALSE ENDIF - uploadaFile(1,cmdcode,params) + uploadaFile(1,cmdcode) ENDPROC RESULT_SUCCESS PROC internalCommandT() @@ -23462,7 +23096,7 @@ PROC internalCommandT() ENDIF ENDPROC RESULT_SUCCESS -PROC internalCommandU(cmdcode,params) +PROC internalCommandU(cmdcode) IF checkSecurity(ACS_UPLOAD)=FALSE THEN RETURN RESULT_NOT_ALLOWED setEnvStat(ENV_UPLOADING) @@ -23471,7 +23105,7 @@ PROC internalCommandU(cmdcode,params) ELSE bgFileCheck:=FALSE ENDIF - uploadaFile(0,cmdcode,params) + uploadaFile(0,cmdcode) ENDPROC RESULT_SUCCESS PROC internalCommandUS() @@ -23704,7 +23338,7 @@ PROC internalCommandW() IF (StrLen(str)=0) aePuts('\b\n') saveAccount(loggedOnUser,loggedOnUserKeys,loggedOnUserMisc,0,0) - checkUserOnLine(loggedOnUser,0) + checkUserOnLine(0) RETURN RESULT_SUCCESS ENDIF @@ -25629,7 +25263,7 @@ PROC myNewFiles(params) day:=Val(str+3) year:=Val(str+6) - IF (year>TWODIGITYEARSWITCHOVER) THEN year:=1900+year ELSE year:=2000+year + IF (year<100) AND (year>TWODIGITYEARSWITCHOVER) THEN year:=1900+year ELSE year:=2000+year ->sscanf(str,"%d %d %d",&month,&day,&year); @@ -25723,7 +25357,7 @@ PROC myNewFiles(params) mdt:=Val(dt) ddt:=Val(dt+3) ydt:=Val(dt+6) - IF (ydt>TWODIGITYEARSWITCHOVER) THEN ydt:=1900+ydt ELSE ydt:=2000+ydt + IF (ydt<100) AND (ydt>TWODIGITYEARSWITCHOVER) THEN ydt:=1900+ydt ELSE ydt:=2000+ydt ->sscanf(dt,"%d %d %d",&mdt,&ddt,&ydt); @@ -25885,7 +25519,7 @@ PROC confScan() ELSE bgFileCheck:=FALSE ENDIF - uploadaFile(0,'URG','') + uploadaFile(0,'URG') ENDIF ELSEIF(mystat=RESULT_ABORT) aePuts('\b\n') @@ -25902,7 +25536,7 @@ PROC confScan() ENDPROC RESULT_SUCCESS PROC captureRealAndInternetNames(conf,msgbase) - DEF i,m,stat,valid + DEF stat,valid DEF realNamesUsed=FALSE,internetNamesUsed=FALSE DEF tempstr[30]:STRING DEF namestr[255]:STRING @@ -25987,7 +25621,7 @@ PROC processCommand(cmdtext,internalOnly=FALSE) spacepos:=InStr(cmdtext,' ') IF spacepos>=0 - MidStr(cmdcode,cmdtext,0,spacepos) + midStr2(cmdcode,cmdtext,0,spacepos) MidStr(cmdparams,cmdtext,spacepos+1,ALL) ELSE StrCopy(cmdcode,cmdtext,ALL) @@ -26009,7 +25643,7 @@ PROC processSysCommand(cmdtext, allowBBSCmd=FALSE) IF EstrLen(cmdtext)=0 THEN RETURN IF (spacepos:=InStr(cmdtext,' '))>=0 - MidStr(cmdcode,cmdtext,0,spacepos) + midStr2(cmdcode,cmdtext,0,spacepos) MidStr(cmdparams,cmdtext,spacepos+1,ALL) ELSE StrCopy(cmdcode,cmdtext,ALL) @@ -26032,7 +25666,7 @@ PROC processInternalCommand(cmdcode,cmdparams,privcmd=FALSE) IF (StrCmp(cmdcode,'0')) res:=internalCommand0() ELSEIF (StrCmp(cmdcode,'1')) - res:=internalCommand1(cmdparams) + res:=internalCommand1() ELSEIF (StrCmp(cmdcode,'2')) res:=internalCommand2(cmdparams) ELSEIF (StrCmp(cmdcode,'3')) @@ -26104,13 +25738,13 @@ PROC processInternalCommand(cmdcode,cmdparams,privcmd=FALSE) ELSEIF (StrCmp(cmdcode,'RL')) res:=internalCommandRL(cmdparams) ELSEIF (StrCmp(cmdcode,'U')) - res:=internalCommandU(cmdcode,cmdparams) + res:=internalCommandU(cmdcode) ELSEIF (StrCmp(cmdcode,'US')) res:=internalCommandUS() ELSEIF (StrCmp(cmdcode,'UP')) res:=internalCommandUP() ELSEIF (StrCmp(cmdcode,'RZ')) - res:=internalCommandRZ(cmdcode,cmdparams) + res:=internalCommandRZ(cmdcode) ELSEIF (StrCmp(cmdcode,'V')) res:=internalCommandV(cmdcode,cmdparams) ELSEIF (StrCmp(cmdcode,'VER')) @@ -26156,9 +25790,17 @@ PROC displayMenuPrompt() ENDIF ENDPROC +PROC getTodaysCalls(user:PTR TO user, userKeys:PTR TO userKeys) + DEF currTime,currDay,lastDay + + currTime:=getSystemTime() + currDay:=Div(currTime-21600,86400) + lastDay:=Div(user.timeLastOn-21600,86400) + IF currDay<>lastDay THEN RETURN 0 +ENDPROC userKeys.timesOnToday AND $FFFF + PROC processLoggedOnUser() DEF subState: PTR TO loggedOnState - DEF wasControl,ch DEF string[255]:STRING DEF temp,stat DEF lastDay,currDay @@ -26335,7 +25977,7 @@ PROC processSysopLogon() confNameType:=NAME_TYPE_USERNAME displayUserToCallersLog(0) updateCallerNum() - checkUserOnLine(loggedOnUser,0) + checkUserOnLine(0) validUser:=1 ximPort:=CONSOLE_PORT state:=STATE_LOGGEDON @@ -26828,7 +26470,7 @@ logonLoop: RETURN ENDIF - stat:=checkUserOnLine(loggedOnUser,1) + stat:=checkUserOnLine(1) IF(stat=FALSE) StringF(tempStr,'User \s already on another node!',loggedOnUser.name) callersLog(tempStr) @@ -26945,7 +26587,7 @@ PROC processAwait() serShared:=FALSE subState.subState:=SUBSTATE_DISPLAY_AWAIT subState.redrawScreen:=FALSE - IF(sopt.trapDoor=FALSE) THEN resetSystem(1) + IF(sopt.trapDoor=FALSE) THEN resetSystem() stateData:=subState logonType:=LOGON_TYPE_LOGGED_OFF @@ -27026,6 +26668,7 @@ PROC processAwait() ENDIF IF (checkSer()) OR (sopt.trapDoor) OR (instantLogon) OR (checkTelnetConnection()) AND (reqState=REQ_STATE_NONE) + IF checkIncomingCall()=RESULT_CONNECT debugLog(LOG_DEBUG,'REMOTE LOGON') ioFlags[IOFLAG_SCR_OUT]:=-1 @@ -27332,7 +26975,6 @@ PROC doNewUserQuestions() DEF filename[200]:STRING, afilename[200]:STRING DEF ch,stat,lock DEF c[200]:STRING,string[200]:STRING,datestr[20]:STRING - DEF p: PTR TO CHAR DEF fp2,fp1 DEF temp1[255]:STRING @@ -27427,9 +27069,20 @@ qbreak: ENDIF ENDPROC RESULT_SUCCESS +PROC memClear(data:PTR TO CHAR,size) + WHILE (size>0) + data[]:=0 + size-- + ENDWHILE +ENDPROC + PROC initNewUser(userData:PTR TO user,userKeys: PTR TO userKeys,userMisc: PTR TO userMisc,slotNumber) DEF ttdata[255]:STRING + memClear(userData,SIZEOF user) + memClear(userKeys,SIZEOF userKeys) + memClear(userMisc,SIZEOF userMisc) + StringF(ttdata,'\sNode\d/Preset.1',cmds.bbsLoc,node) IF configFileExists(ttdata) userData.secStatus:=readToolTypeInt(TOOLTYPE_NODE_PRESET,1,'PRESET.ACCESS') @@ -27451,34 +27104,12 @@ PROC initNewUser(userData:PTR TO user,userKeys: PTR TO userKeys,userMisc: PTR TO readToolType(TOOLTYPE_PRESET,1,'PRESET.AREA',ttdata) ENDIF - userData.messagesPosted:=0 userData.newUser:=1 - userData.newSinceDate:=0 - userData.uploads:=0 - userData.downloads:=0 IF(userData.confRJoin=NIL) THEN userData.confRJoin:=1 - IF(userData.msgBaseRJoin=NIL) THEN userData.msgBaseRJoin:=1 - userData.timeLastOn:=0 - userData.timeUsed:=0 userData.timeTotal:=userData.timeLimit - userData.timesCalled:=0 - userData.bytesDownload:=0 - userData.bytesUpload:=0 userData.protocol:="Z" userData.timeLastOn:=getSystemTime() - - userData.dailyBytesDld:=0 - userData.chatLimit:=0; userData.chatRemain:=0; userData.creditDays:=0 - userData.creditAmount:=0; userData.creditStartDate:=0; userData.creditTotalToDate:=0 - userData.creditTotalDate:=0; userData.creditTracking:=0; userData.confYM9:=0 - - userData.accountDate:=getSystemTime(); userData.screenType:=0 - userData.editorType:=0 - - /*userData.confRead1:=0*/ userData.confRead2:=0; userData.confRead3:=0 - userData.zoomType:=0; userData.unknown:=0; userData.unknown2:=0; userData.unknown3:=0 - userData.xferProtocol:=0; userData.filler2:=0 - userData.lcFiles:=0; userData.badFiles:=0 + userData.accountDate:=getSystemTime() userData.expert:="N" strCpy(userData.conferenceAccess,ttdata,10) @@ -27487,13 +27118,6 @@ PROC initNewUser(userData:PTR TO user,userKeys: PTR TO userKeys,userMisc: PTR TO userData.slotNumber:=slotNumber userKeys.number:=slotNumber strCpy(userKeys.userName,userData.name,ALL) - - userKeys.oldDnCPS:=0 - userKeys.dnCPS2:=0 - userKeys.oldUpCPS:=0 - userKeys.upCPS2:=0 - userKeys.baud:=0 /* hold last logged on baud rate */ - ENDPROC PROC createNewAccount() @@ -27525,7 +27149,6 @@ ENDPROC PROC findFreeSlot() DEF slot, stat, fh - DEF tempStr[255]:STRING fh:=Open(userDataFile,MODE_OLDFILE) IF(fh=0) THEN RETURN 1 @@ -27590,6 +27213,7 @@ PROC closezModemStats() IF(windowZmodem<>NIL) THEN CloseWindow(windowZmodem) windowZmodem:=NIL + wantzwin:=FALSE ENDPROC PROC openZmodemStat() @@ -27598,6 +27222,8 @@ PROC openZmodemStat() DEF pubScreen[255]:STRING DEF pubLock=0 DEF pub=FALSE + + wantzwin:=TRUE IF netMailTransfer IF zModemInfo.currentOperation=ZMODEM_DOWNLOAD @@ -27687,7 +27313,7 @@ PROC openZmodemStat() ENDPROC PROC openExpressScreen() - DEF width,height,top,left,dispId,colourcount + DEF width,height,top,left,dispId DEF pubScreen[255]:STRING DEF penstr[12]:STRING DEF debugstr[255]:STRING @@ -27890,6 +27516,8 @@ PROC openExpressScreen() conPuts('[0 p',-1,TRUE) statPrintUser(loggedOnUser,loggedOnUserKeys,loggedOnUserMisc) + IF (wantzwin) AND (window<>NIL) THEN openZmodemStat() + IF((sopt.statBar<>FALSE) AND (pub=FALSE)) THEN toggleStatusDisplay() ENDPROC ERR_NONE @@ -27976,7 +27604,7 @@ ENDPROC (telnetSocket>=0) AND (offHookFlag=FALSE) PROC checkTelnetData() DEF count - DEF buf[1]:STRING + ->DEF buf[1]:STRING IF telnetSocket=-1 THEN RETURN FALSE @@ -28011,7 +27639,7 @@ PROC updateVersion(expVer:PTR TO CHAR,expDate:PTR TO CHAR) m:=Val(tmp) StrCopy(tmp,v+6,2) d:=Val(tmp) - StringF(expDate,'\d[2]-\s[3]-\d[4]',d,'JanFebMarAprMayJunJulAugSepOctNovDec'+((m-1)*3),y) + StringF(expDate,'\z\r\d[2]-\s[3]-\d[4]',d,'JanFebMarAprMayJunJulAugSepOctNovDec'+((m-1)*3),y) ELSE StrCopy(expVer,v,ALL) StrCopy(expDate,'',ALL) @@ -28086,6 +27714,8 @@ PROC main() HANDLE zmodemBuffer:=New(zModemBufferSize) + cmds:=NEW cmds + securityNames:=[ 'ACS.ACCOUNT_EDITING','ACS.READ_BULLETINS','ACS.COMMENT_TO_SYSOP','ACS.DOWNLOAD','ACS.UPLOAD','ACS.ENTER_MESSAGE','ACS.FILE_LISTINGS','ACS.JOIN_CONFERENCE','ACS.NEW_FILES_SINCE', 'ACS.PAGE_SYSOP','ACS.READ_MESSAGE','ACS.REMOTE_SHELL','ACS.DISPLAY_USER_STATS','ACS.VIEW_A_FILE','ACS.EDIT_USER_INFO','ACS.EDIT_INTERNET_NAME','ACS.EDIT_USER_LOCATION', @@ -28634,6 +28264,8 @@ PROC main() HANDLE END skipdFiles + END cmds + IF (loggedOnUser) THEN END loggedOnUser IF (loggedOnUserKeys) THEN END loggedOnUserKeys IF (loggedOnUserMisc) THEN END loggedOnUserMisc @@ -28804,4 +28436,3 @@ threadtasksA4: regA4: LONG NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL LONG NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL,NIL - \ No newline at end of file diff --git a/ftpd.e b/ftpd.e index 710505c..45dbadf 100644 --- a/ftpd.e +++ b/ftpd.e @@ -101,14 +101,14 @@ PROC releaseSocket(sb,fd,id) MOVEM.L (A7)+,D1-D7/A0-A6 ENDPROC D0 -PROC releaseCopyOfSocket(sb,fd,id) +/*PROC releaseCopyOfSocket(sb,fd,id) MOVEM.L D1-D7/A0-A6,-(A7) MOVE.L sb,A6 MOVE.L fd,D0 MOVE.L id,D1 JSR -$9C(A6) ->ReleaseCopyOfSocket(fd,id) MOVEM.L (A7)+,D1-D7/A0-A6 -ENDPROC D0 +ENDPROC D0*/ PROC closeSocket(sb,s) MOVEM.L D1-D7/A0-A6,-(A7) @@ -200,10 +200,9 @@ ENDPROC D0 PROC fileStart(ftpData:PTR TO ftpData,fn,pos) DEF fs,xprInfo - DEF xi fs:=ftpData.fileStart - xi:=ftpData.xprInfo - MOVE.L xi,-(A7) + xprInfo:=ftpData.xprInfo + MOVE.L xprInfo,-(A7) MOVE.L fn,-(A7) MOVE.L pos,-(A7) fs() @@ -246,7 +245,7 @@ PROC aePuts(ftpData:PTR TO ftpData, s:PTR TO CHAR) ENDPROC PROC sCheckInput(ftpData:PTR TO ftpData) - DEF chk,r + DEF chk chk:=ftpData.sCheckInput ENDPROC chk() @@ -518,7 +517,7 @@ PROC cmdUser(sb,ftp_c,params:PTR TO CHAR) ENDPROC PROC cmdPass(sb,ftp_c,params) - ->WriteF('user=\s\b\n',params) + ->WriteF('pass=\s\b\n',params) writeLineEx(sb,ftp_c, '230 password accepted\b\n') ENDPROC @@ -864,8 +863,7 @@ ENDPROC PROC cmdList(sb,ftp_c,data_s,data_c,ftpData:PTR TO ftpData) DEF r - DEF temp[255]:STRING - + IF (data_c>=0) myDir(sb,data_c,ftpData.workingPath) writeLineEx(sb,ftp_c, '226 Transfer Complete\b\n') @@ -889,8 +887,6 @@ PROC ftpThread() DEF sb,r DEF data_s=-1,data_c=-1 DEF ftpData:PTR TO ftpData - DEF t,svA4 - DEF temp[255]:STRING ftpData:=loadA4() @@ -1023,7 +1019,6 @@ ENDPROC pa PROC createThread(node,sockid,ftpData:PTR TO ftpData) DEF tags,proc:PTR TO process - DEF tempstr[255]:STRING tags:=NEW [NP_ENTRY,{ftpThread},NP_STACKSIZE,10000,0]:LONG ftpData.sockId:=sockid @@ -1036,7 +1031,7 @@ PROC createThread(node,sockid,ftpData:PTR TO ftpData) ENDPROC EXPORT PROC doftp(node,ftphost,ftpport,ftpdataport,ftppath,aePutsPtr, readCharPtr, sCheckInputPtr, xprInfo, ftpFileStartPtr, ftpFileEndPtr, ftpFileProgressPtr, uploadMode) - DEF r,ftp_s,ftp_c,s,sb,myargs:PTR TO LONG,rdargs + DEF r,ftp_s,ftp_c,s,sb DEF temp[255]:STRING DEF ftpData:PTR TO ftpData DEF flg,rchar diff --git a/httpd.e b/httpd.e index 0741d10..ea02369 100644 --- a/httpd.e +++ b/httpd.e @@ -1,5 +1,5 @@ /* -** simple ftpd +** simple httpd ** Amiga E version */ @@ -94,24 +94,6 @@ PROC accept(sb,s,addr,addrlen) MOVEM.L (A7)+,D1-D7/A0-A6 ENDPROC D0 -PROC releaseSocket(sb,fd,id) - MOVEM.L D1-D7/A0-A6,-(A7) - MOVE.L sb,A6 - MOVE.L fd,D0 - MOVE.L id,D1 - JSR -$96(A6) ->ReleaseSocket(fd,id) - MOVEM.L (A7)+,D1-D7/A0-A6 -ENDPROC D0 - -PROC releaseCopyOfSocket(sb,fd,id) - MOVEM.L D1-D7/A0-A6,-(A7) - MOVE.L sb,A6 - MOVE.L fd,D0 - MOVE.L id,D1 - JSR -$9C(A6) ->ReleaseCopyOfSocket(fd,id) - MOVEM.L (A7)+,D1-D7/A0-A6 -ENDPROC D0 - PROC closeSocket(sb,s) MOVEM.L D1-D7/A0-A6,-(A7) MOVE.L sb,A6 @@ -152,27 +134,6 @@ PROC listen(sb,s, backlog) MOVEM.L (A7)+,D1-D7/A0-A6 ENDPROC D0 -PROC getHostByName(sb,name) - MOVEM.L D1-D7/A0-A6,-(A7) - MOVE.L sb,A6 - MOVE.L name,A0 - - JSR -$D2(A6) ->GetHostByName(name) - MOVEM.L (A7)+,D1-D7/A0-A6 -ENDPROC D0 - -PROC obtainSocket(sb,id,domain, type, protocol) - MOVEM.L D1-D7/A0-A6,-(A7) - MOVE.L sb,A6 - MOVE.L id,D0 - MOVE.L domain,D1 - MOVE.L type,D2 - MOVE.L protocol,D3 - - JSR -$90(A6) ->ObtainSocket(id,domain,type,protocol) - MOVEM.L (A7)+,D1-D7/A0-A6 -ENDPROC D0 - PROC getSockOpt(sb,s,level,optname,optval,optlen ) MOVEM.L D1-D7/A0-A6,-(A7) MOVE.L sb,A6 @@ -202,10 +163,9 @@ ENDPROC D0 PROC fileStart(httpData:PTR TO httpData,fn,pos) DEF fs,xprInfo - DEF xi fs:=httpData.fileStart - xi:=httpData.xprInfo - MOVE.L xi,-(A7) + xprInfo:=httpData.xprInfo + MOVE.L xprInfo,-(A7) MOVE.L fn,-(A7) MOVE.L pos,-(A7) fs() @@ -248,7 +208,7 @@ PROC aePuts(httpData:PTR TO httpData, s:PTR TO CHAR) ENDPROC PROC sCheckInput(httpData:PTR TO httpData) - DEF chk,r + DEF chk chk:=httpData.sCheckInput ENDPROC chk() @@ -278,7 +238,7 @@ PROC openSocket(sb,port, reuseable,httpData:PTR TO httpData) servaddr:=NEW servaddr IF((server_s:=socket(sb,AF_INET, SOCK_STREAM, 0)) < 0) - StringF(tempStr,'/XFTP: Error creating listening socket. (\d)\b\n',errno(sb)) + StringF(tempStr,'/XHTTP: Error creating listening socket. (\d)\b\n',errno(sb)) aePuts(httpData,tempStr) END servaddr RETURN FALSE,-1 @@ -286,14 +246,14 @@ PROC openSocket(sb,port, reuseable,httpData:PTR TO httpData) IF reuseable IF setSockOpt(sb,server_s, SOL_SOCKET, SO_REUSEADDR, [1]:LONG, 4)<>0 - StringF(tempStr,'/XFTP: error setting socket options SO_REUSEADDR, error=\d\b\n',errno(sb)) + StringF(tempStr,'/XHTTP: error setting socket options SO_REUSEADDR, error=\d\b\n',errno(sb)) aePuts(httpData,tempStr) ENDIF optval:=NEW [0,0]:LONG optlen:=NEW [8]:LONG IF getSockOpt(sb,server_s, SOL_SOCKET, SO_LINGER, optval,optlen)<>0 - StringF(tempStr,'/XFTP: error getting socket options SO_LINGER, error=\d\b\n',errno(sb)) + StringF(tempStr,'/XHTTP: error getting socket options SO_LINGER, error=\d\b\n',errno(sb)) aePuts(httpData,tempStr) ENDIF IF optlen[0]=4 @@ -302,11 +262,11 @@ PROC openSocket(sb,port, reuseable,httpData:PTR TO httpData) optval[0]:=1 optval[1]:=0 ELSE - aePuts(httpData,'/XFTP: error setting socket options SO_LINGER, bad size\b\n') + aePuts(httpData,'/XHTTP: error setting socket options SO_LINGER, bad size\b\n') ENDIF IF setSockOpt(sb,server_s, SOL_SOCKET, SO_LINGER, optval,optlen[0])<>0 - StringF(tempStr,'/XFTP: error setting socket options SO_LINGER, error=\d\b\n',errno(sb)) + StringF(tempStr,'/XHTTP: error setting socket options SO_LINGER, error=\d\b\n',errno(sb)) aePuts(httpData,tempStr) ENDIF END optval @@ -320,7 +280,7 @@ PROC openSocket(sb,port, reuseable,httpData:PTR TO httpData) servaddr.sin_addr:=INADDR_ANY IF(bind(sb,server_s, servaddr, SIZEOF sockaddr_in) < 0) - StringF(tempStr,'/XFTP: Error calling bind() for port \d, error=\d\b\n',port,errno(sb)); + StringF(tempStr,'/XHTTP: Error calling bind() for port \d, error=\d\b\n',port,errno(sb)); aePuts(httpData,tempStr) closeSocket(sb,server_s) END servaddr @@ -328,7 +288,7 @@ PROC openSocket(sb,port, reuseable,httpData:PTR TO httpData) ENDIF IF(listen(sb,server_s, LISTENQ) < 0) - StringF(tempStr,'/XFTP: Error calling listen() for port \d, error=\d\b\n',port,errno(sb)); + StringF(tempStr,'/XHTTP: Error calling listen() for port \d, error=\d\b\n',port,errno(sb)); aePuts(httpData,tempStr) closeSocket(sb,server_s) END servaddr @@ -345,26 +305,20 @@ PROC readLine(sb,sockd, vptr:PTR TO CHAR, maxlen) DEF buffer:PTR TO CHAR buffer:=vptr - - FOR n:=0 TO maxlen-1 + n:=0 + WHILE (n<(maxlen-1)) AND (c[] <> "\n") rc:=recv(sb,sockd, c, 1,0) IF ( rc = 1 ) - IF(c[] = "\b") THEN JUMP next - IF (c[] = "\n") THEN JUMP brk - buffer[]++:=c[] - ELSEIF ( rc = 0 ) - IF ( n = 1 ) - RETURN 0 - ELSE - JUMP brk + IF(c[] <> "\b") AND (c[] <> "\n") + buffer[]++:=c[] + n++ ENDIF ELSE - IF ( errno(sb) = EINTR ) THEN JUMP next - RETURN -1 + IF ( errno(sb)<>EINTR ) + RETURN -1 + ENDIF ENDIF -next: - ENDFOR -brk: + ENDWHILE buffer[]:=0 ENDPROC n @@ -375,17 +329,242 @@ ENDPROC n PROC writeLineEx(sb,sockd, vptr:PTR TO CHAR) ENDPROC writeLine(sb,sockd, vptr, StrLen(vptr)) -EXPORT PROC doHttpd(node,httphost,httpport,httppath,aePutsPtr, readCharPtr, sCheckInputPtr, xprInfo:PTR TO xprData, ftpFileStartPtr, ftpFileEndPtr, ftpFileProgressPtr, uploadMode) - DEF r,http_s,http_c,s,sb,myargs:PTR TO LONG,rdargs +PROC listFiles(path: PTR TO CHAR,sb,http_c) + DEF lock + DEF f_info: PTR TO fileinfoblock + DEF tempstr[255]:STRING + + f_info:=AllocDosObject(DOS_FIB,NIL) + IF(f_info)=NIL THEN RETURN + + lock:=Lock(path,ACCESS_READ) + IF(lock)=0 + FreeDosObject(DOS_FIB,f_info) + RETURN + ENDIF + + IF(Examine(lock,f_info))=0 + UnLock(lock) + FreeDosObject(DOS_FIB,f_info) + RETURN + ENDIF + + writeLineEx(sb,http_c,'
\b\n') + writeLineEx(sb,http_c,'
    \b\n') + + WHILE((ExNext(lock,f_info))<>0) + StringF(tempstr,'
  1. \s
  2. \b\n',f_info.filename) + writeLineEx(sb,http_c,tempstr) + ENDWHILE + + writeLineEx(sb,http_c,'
\b\n') + writeLineEx(sb,http_c,'
\b\n') + UnLock(lock) + FreeDosObject(DOS_FIB,f_info) +ENDPROC + +PROC generatePage(sb,http_c,httppath:PTR TO CHAR, xprInfo:PTR TO xprData,node,uploadMode) + DEF temp[255]:STRING + DEF fl:PTR TO stdlist + DEF fi:PTR TO flagFileItem + DEF i + + writeLineEx(sb,http_c,'HTTP/1.1 200 OK\b\n') + writeLineEx(sb,http_c,'content-type: text/html; charset=UTF-8\b\n') + writeLineEx(sb,http_c,'\b\n') + writeLineEx(sb,http_c,'\b\n') + writeLineEx(sb,http_c,'\b\n') + IF uploadMode + writeLineEx(sb,http_c,'Ami-Express uploads\b\n') + ELSE + writeLineEx(sb,http_c,'Ami-Express downloads\b\n') + ENDIF + + writeLineEx(sb,http_c,'\b\n') + writeLineEx(sb,http_c,'\b\n') + IF uploadMode + StringF(temp,'

Ami-Express uploads - node \d

\b\n',node) + writeLineEx(sb,http_c,temp) + listFiles(httppath,sb,http_c) + writeLineEx(sb,http_c,'
\b\n') + writeLineEx(sb,http_c,'
\b\n') + writeLineEx(sb,http_c,'') + writeLineEx(sb,http_c,'\b\n') + writeLineEx(sb,http_c,'
\b\n') + ELSE + StringF(temp,'

Ami-Express downloads - node \d

\b\n',node) + writeLineEx(sb,http_c,temp) + writeLineEx(sb,http_c,'
\b\n') + writeLineEx(sb,http_c,'
    \b\n') + + fl:=xprInfo.fileList + FOR i:=0 TO fl.count()-1 + fi:=fl.item(i) + StringF(temp,'
  1. \s
  2. \b\n',FilePart(fi.fileName),FilePart(fi.fileName)) + writeLineEx(sb,http_c,temp) + ENDFOR + writeLineEx(sb,http_c,'
\b\n') + writeLineEx(sb,http_c,'
\b\n') + ENDIF + + writeLineEx(sb,http_c,'\b\n') + writeLineEx(sb,http_c,'\b\n') +ENDPROC + +PROC readMemLine(outBuf:PTR TO CHAR,sb,socket,inBuf:PTR TO CHAR,bufsize:PTR TO LONG,pos:PTR TO LONG,maxlen,maxbuf,contentLength:PTR TO LONG) + DEF loop=TRUE + DEF len + DEF r + + IF pos[]>=(bufsize[]-maxlen) + len:=bufsize[]-pos[] + CopyMem(inBuf+pos[],inBuf,len) + r:=maxbuf-len + IF contentLength[]"\n" + IF inBuf[pos[]]<>"\b" THEN StrAdd(outBuf,inBuf+pos[],1) + ELSE + loop:=FALSE + ENDIF + IF StrLen(outBuf)=maxlen THEN loop:=FALSE + pos[]:=pos[]+1 + ENDWHILE +ENDPROC StrLen(outBuf) + +PROC extractFileData(sb,socket,httpData:PTR TO httpData,boundary:PTR TO CHAR,contentLength,asynclib) + DEF buff,fh + DEF pos,p,readSize,boundaryLen + DEF fname[255]:STRING + DEF lineBuff[255]:STRING + DEF loop,morefiles=TRUE + DEF bufsize + DEF t,t2,filepos,lastfilepos,cps + + boundaryLen:=StrLen(boundary) + bufsize:=32768+boundaryLen + readSize:=bufsize + buff:=New(readSize) + + ->dupecheck + + IF contentLength 0) + IF (p:=InStr(lineBuff,'filename="'))>=0 + StrCopy(fname,httpData.workingPath) + StrAdd(fname,lineBuff+p+10,ALL) + p:=InStr(fname,'"') + SetStr(fname,p) + ENDIF + ENDWHILE + fh:=0 + IF StrLen(fname)>0 + IF asynclib<>NIL + DeleteFile(fname) + fh:=OpenAsync(fname,MODE_APPEND,32768) + ELSE + fh:=Open(fname,MODE_NEWFILE) + ENDIF + IF httpData.fileStart<>NIL + fileStart(httpData,fname,0) + ENDIF + t:=fastSystemTime() + lastfilepos:=0 + ENDIF + + loop:=TRUE + REPEAT + p:=pos + WHILE (p<(readSize-boundaryLen)) AND (StrCmp(buff+p,boundary,boundaryLen)=FALSE) DO p++ + IF fh>0 + IF asynclib<>NIL + WriteAsync(fh,buff+pos,p-pos) + ELSE + Write(fh,buff+pos,p-pos) + ENDIF + + t2:=fastSystemTime() + ->only call update maximum every 1 second + IF (Abs(t2-t))>=50 + IF asynclib<>NIL + filepos:=SeekAsync(fh,0,MODE_CURRENT) + ELSE + filepos:=Seek(fh,0,OFFSET_CURRENT) + ENDIF + IF (t0 + CopyMem(buff+readSize-boundaryLen,buff,boundaryLen) + readSize:=bufsize-boundaryLen + IF contentLength0 + IF asynclib<>NIL + CloseAsync(fh) + ELSE + Close(fh) + ENDIF + IF httpData.fileEnd<>NIL + fileEnd(httpData,fname) + ENDIF + ENDIF + + UNTIL morefiles=FALSE + Dispose(buff) +ENDPROC + + +EXPORT PROC doHttpd(node,httphost,httpport,httppath,aePutsPtr, readCharPtr, sCheckInputPtr, xprInfo:PTR TO xprData, httpFileStartPtr, httpFileEndPtr, httpFileProgressPtr, uploadMode) + DEF r,http_s,http_c,sb DEF temp[255]:STRING DEF httpData:PTR TO httpData DEF flg,rchar DEF request[255]:STRING DEF getCmd[255]:STRING - DEF spcPos,i - DEF fl:PTR TO stdlist - DEF fi:PTR TO flagFileItem - DEF fh,buff,l + DEF postCmd[255]:STRING + DEF boundary[255]:STRING + DEF spcPos + DEF fh,buff,l,t,t2,lastpos,pos,cps + DEF asynclib + DEF p,contentLength httpData:=NEW httpData httpData.rest:=0 @@ -397,9 +576,9 @@ EXPORT PROC doHttpd(node,httphost,httpport,httppath,aePutsPtr, readCharPtr, sChe httpData.aePuts:=aePutsPtr httpData.readChar:=readCharPtr httpData.sCheckInput:=sCheckInputPtr - httpData.fileStart:=ftpFileStartPtr - httpData.fileEnd:=ftpFileEndPtr - httpData.fileProgress:=ftpFileProgressPtr + httpData.fileStart:=httpFileStartPtr + httpData.fileEnd:=httpFileEndPtr + httpData.fileProgress:=httpFileProgressPtr httpData.workingPath:=String(255) httpData.hostName:=String(255) httpData.xprInfo:=xprInfo @@ -431,7 +610,7 @@ EXPORT PROC doHttpd(node,httphost,httpport,httppath,aePutsPtr, readCharPtr, sChe http_c:=accept(sb,http_s,NIL,NIL) IF(http_c< 0) IF errno(sb)<>35 - StringF(temp,'/XFTP: Error calling accept() errno=\d\b\n',errno(sb)) + StringF(temp,'/XHTTP: Error calling accept() errno=\d\b\n',errno(sb)) aePuts(httpData,temp) ENDIF ELSE @@ -441,55 +620,97 @@ EXPORT PROC doHttpd(node,httphost,httpport,httppath,aePutsPtr, readCharPtr, sChe aePuts(httpData,temp) StrCopy(getCmd,'') + StrCopy(postCmd,'') WHILE(readLine(sb,http_c, request, MAX_LINE-1) > 0) IF StrCmp(request,'GET ',4) THEN StrCopy(getCmd,request+4) + IF StrCmp(request,'POST ',5) THEN StrCopy(postCmd,request+5) + IF (InStr(request,'Content-Type:')>=0) AND (InStr(request,'multipart/form-data;')>=0) AND ((p:=InStr(request,'boundary='))>=0) + StrCopy(boundary,'\b\n--') + StrAdd(boundary,TrimStr(request+p+9)) + ENDIF + IF ((p:=InStr(request,'Content-Length:'))>=0) + contentLength:=Val(request+p+15) + ENDIF ENDWHILE + IF StrLen(getCmd)>0 IF (spcPos:=InStr(getCmd,' '))>=0 THEN SetStr(getCmd,spcPos) IF StrCmp(getCmd,'/',ALL) - writeLineEx(sb,http_c,'HTTP/1.1 200 OK\b\n') - writeLineEx(sb,http_c,'content-type: text/html; charset=UTF-8\b\n') - writeLineEx(sb,http_c,'\b\n') - writeLineEx(sb,http_c,'\b\n') - writeLineEx(sb,http_c,'\b\n') - writeLineEx(sb,http_c,'Ami-Express downloads\b\n') - writeLineEx(sb,http_c,'\b\n') - writeLineEx(sb,http_c,'\b\n') - StringF(temp,'

Ami-Express downloads - node \d

\b\n',node) - writeLineEx(sb,http_c,temp) - writeLineEx(sb,http_c,'
\b\n') - writeLineEx(sb,http_c,'
    \b\n') - fl:=xprInfo.fileList - FOR i:=0 TO fl.count()-1 - fi:=fl.item(i) - StringF(temp,'
  1. \s
  2. \b\n',FilePart(fi.fileName),FilePart(fi.fileName)) - writeLineEx(sb,http_c,temp) - ENDFOR - writeLineEx(sb,http_c,'
\b\n') - writeLineEx(sb,http_c,'
\b\n') - writeLineEx(sb,http_c,'\b\n') - writeLineEx(sb,http_c,'\b\n') + generatePage(sb,http_c,httppath,xprInfo,node,uploadMode) + ELSEIF (StrCmp(getCmd,'/',1)) StringF(temp,'\s\s',httppath,getCmd+1) - fh:=Open(temp,MODE_OLDFILE) + + asynclib:=OpenLibrary('asyncio.library',0) + asynciobase:=asynclib + + IF httpData.fileStart<>NIL + fileStart(httpData,temp,FileLength(temp)) + ENDIF + + IF asynclib<>NIL + fh:=OpenAsync(temp,MODE_READ,32768) + ELSE + fh:=Open(temp,MODE_OLDFILE) + ENDIF + IF fh>=0 writeLineEx(sb,http_c,'HTTP/1.1 200 OK\b\n') writeLineEx(sb,http_c,'content-type: binary/octet-stream\b\n') writeLineEx(sb,http_c,'\b\n') buff:=New(32768) + t:=fastSystemTime() + lastpos:=0 + cps:=0 + REPEAT - l:=Fread(fh,buff,1,32768) + IF asynclib<>NIL + l:=ReadAsync(fh,buff,32768) + ELSE + l:=Fread(fh,buff,1,32768) + ENDIF IF l>0 writeLine(sb,http_c,buff,l) + IF (httpData.fileProgress<>NIL) + t2:=fastSystemTime() + ->only call update maximum every 1 second + IF (Abs(t2-t))>=50 + IF asynclib<>NIL + pos:=SeekAsync(fh,0,MODE_CURRENT) + ELSE + pos:=Seek(fh,0,OFFSET_CURRENT) + ENDIF + IF (tNIL + CloseAsync(fh) + ELSE + Close(fh) + ENDIF + IF httpData.fileEnd<>NIL + fileEnd(httpData,temp) + ENDIF + ENDIF ENDIF ENDIF + + IF StrLen(postCmd)>0 + IF (spcPos:=InStr(postCmd,' '))>=0 THEN SetStr(postCmd,spcPos) + IF StrCmp(postCmd,'/',ALL) + extractFileData(sb,http_c,httpData,boundary,contentLength,asynclib) + generatePage(sb,http_c,httppath,xprInfo,node,uploadMode) + ENDIF + ENDIF r:=closeSocket(sb,http_c) ENDIF diff --git a/jsonParser.e b/jsonParser.e index 963fa7b..09f9521 100644 --- a/jsonParser.e +++ b/jsonParser.e @@ -108,7 +108,7 @@ ENDPROC * Fills next available token with JSON primitive. */ PROC jsmn_parse_primitive(parser:PTR TO jsmn_parser, js: PTR TO CHAR,len,tokens, num_tokens) - DEF token:PTR TO jsmntok_t, start,i,ch,found + DEF token:PTR TO jsmntok_t, start,ch,found start:=parser.pos diff --git a/makefile b/makefile index 9bd862e..6b988da 100644 --- a/makefile +++ b/makefile @@ -4,7 +4,7 @@ options=DEBUG IGNORECACHE compiler=EC expprogramname=AmiExpress acpprogramname=ACP -version=5.3.0-alpha +version=5.3.0-beta all: acp express5 jsonimport icon2cfg @@ -14,7 +14,7 @@ release: acp express5 jsonimport icon2cfg acp: acp.e acpversion.m axcommon.m jsonparser.m jsoncreate.m stringlist.m $(compiler) acp $(options) -express5: express.e expversion.m axcommon.m axconsts.m miscfuncs.m axobjects.m axenums.m stringlist.m errors.m mailssl.m ftpd.m httpd.m zmodem.m bcd.m +express5: express.e expversion.m axcommon.m axconsts.m miscfuncs.m axobjects.m axenums.m stringlist.m errors.m mailssl.m ftpd.m httpd.m zmodem.m tooltypes.m pwdhash.m bcd.m $(compiler) express $(options) copy express express5 delete express @@ -49,6 +49,12 @@ errors.m: errors.e mailssl.m: mailssl.e $(compiler) mailssl $(options) +tooltypes.m: tooltypes.e + $(compiler) tooltypes $(options) + +pwdhash.m: pwdhash.e + $(compiler) pwdhash $(options) + axcommon.m: axcommon.e stringlist.m $(compiler) axcommon $(options) @@ -81,5 +87,10 @@ ftpd.m: ftpd.e httpd.m: httpd.e axcommon.m stringlist.m $(compiler) httpd $(options) -clean : - delete expversion.e acpversion.e delete express verinfogen express5 acp jsonimport icon2cfg miscfuncs.m stringlist.m errors.m mailssl.m jsoncreate.m jsonparser.m axcommon.m ftpd.m httpd.m axconsts.m axobjects.m axenums.m zmodem.m bcd.m expversion.m acpversion.m \ No newline at end of file + +clean: + delete expversion.e acpversion.e delete express verinfogen express5 acp jsonimport icon2cfg miscfuncs.m stringlist.m errors.m mailssl.m jsoncreate.m jsonparser.m axcommon.m ftpd.m httpd.m axconsts.m axobjects.m axenums.m zmodem.m bcd.m expversion.m acpversion.m pwdhash.m tooltypes.m + + +.PHONY: expversion.e + \ No newline at end of file diff --git a/pwdhash.e b/pwdhash.e new file mode 100644 index 0000000..0ff684d --- /dev/null +++ b/pwdhash.e @@ -0,0 +1,89 @@ +-> password hash calculator + + OPT MODULE + +EXPORT PROC calcPasswordHash(pwd: PTR TO CHAR) + DEF hash + + MOVE.L pwd,A0 + BSR sub_486F0 + MOVE.L D0,hash + RETURN hash + +sub_486F0: + MOVEM.L D1-D7/A1-A6,-(A7) + MOVEA.L A0,A3 + MOVEQ #0,D0 + TST.B (A0) + BNE.W loc_48704 + MOVEM.L (A7)+,D1-D7/A1-A6 + RTS +-> --------------------------------------------------------------------------- + +loc_48704: + MOVEQ #0,D1 + +loc_48706: + MOVE.B (A0)+,D0 + TST.B D0 + BEQ.W loc_48712 + ADDQ.B #1,D1 + BRA.S loc_48706 +-> --------------------------------------------------------------------------- + +loc_48712: + MOVEA.L A3,A0 + MOVEA.L A0,A1 + MOVEA.L A0,A2 + LEA hashdata(PC),A1 + MOVE.L D1,D5 + + MOVEQ #0,D0 + MOVEQ #8,D2 + MOVEQ #$FFFFFFFF,D3 + MOVEQ #2,D4 + +loc_48726: + MOVEQ #0,D1 + MOVE.B (A0)+,D1 + EOR.B D0,D1 + AND.W D3,D1 + ASL.W D4,D1 + MOVE.L 0(A1,D1.L),D1 + LSR.L D2,D0 + EOR.L D1,D0 + SUBQ.L #1,D5 + BNE.S loc_48726 + SWAP D0 + NOT.W D0 + ROXL.L D0,D0 + NEG.L D0 + MOVEM.L (A7)+,D1-D7/A1-A6 + RTS +ENDPROC + +hashdata: + INT $0000,$0000,$7707,$3096,$EE0E,$612C,$9909,$51BA,$076D,$C419,$706A,$F48F,$E963,$A535,$9E64,$95A3,$0EDB,$8832,$79DC,$B8A4,$E0D5,$E91E, + $97D2,$D988,$09B6,$4C2B,$7EB1,$7CBD,$E7B8,$2D07,$90BF,$1D91,$1DB7,$1064,$6AB0,$20F2,$F3B9,$7148,$84BE,$41DE,$1ADA,$D47D,$6DDD,$E4EB, + $F4D4,$B551,$83D3,$85C7,$136C,$9856,$646B,$A8C0,$FD62,$F97A,$8A65,$C9EC,$1401,$5C4F,$6306,$6CD9,$FA0F,$3D63,$8D08,$0DF5,$3B6E,$20C8, + $4C69,$105E,$D560,$41E4,$A267,$7172,$3C03,$E4D1,$4B04,$D447,$D20D,$85FD,$A50A,$B56B,$35B5,$A8FA,$42B2,$986C,$DBBB,$C9D6,$ACBC,$F940, + $32D8,$6CE3,$45DF,$5C75,$DCD6,$0DCF,$ABD1,$3D59,$26D9,$30AC,$51DE,$003A,$C8D7,$5180,$BFD0,$6116,$21B4,$F4B5,$56B3,$C423,$CFBA,$9599, + $B8BD,$A50F,$2802,$B89E,$5F05,$8808,$C60C,$D9B2,$B10B,$E924,$2F6F,$7C87,$5868,$4C11,$C161,$1DAB,$B666,$2D3D,$76DC,$4190,$01DB,$7106, + $98D2,$20BC,$EFD5,$102A,$71B1,$8589,$06B6,$B51F,$9FBF,$E4A5,$E8B8,$D433,$7807,$C9A2,$0F00,$F934,$9609,$A88E,$E10E,$9818,$7F6A,$0DBB, + $086D,$3D2D,$9164,$6C97,$E663,$5C01,$6B6B,$51F4,$1C6C,$6162,$8565,$30D8,$F262,$004E,$6C06,$95ED,$1B01,$A57B,$8208,$F4C1,$F50F,$C457, + $65B0,$D9C6,$12B7,$E950,$8BBE,$B8EA,$FCB9,$887C,$62DD,$1DDF,$15DA,$2D49,$8CD3,$7CF3,$FBD4,$4C65,$4DB2,$6158,$3AB5,$51CE,$A3BC,$0074, + $D4BB,$30E2,$4ADF,$A541,$3DD8,$95D7,$A4D1,$C46D,$D3D6,$F4FB,$4369,$E96A,$346E,$D9FC,$AD67,$8846,$DA60,$B8D0,$4404,$2D73,$3303,$1DE5, + $AA0A,$4C5F,$DD0D,$7CC9,$5005,$713C,$2702,$41AA,$BE0B,$1010,$C90C,$2086,$5768,$B525,$206F,$85B3,$B966,$D409,$CE61,$E49F,$5EDE,$F90E, + $29D9,$C998,$B0D0,$9822,$C7D7,$A8B4,$59B3,$3D17,$2EB4,$0D81,$B7BD,$5C3B,$C0BA,$6CAD,$EDB8,$8320,$9ABF,$B3B6,$03B6,$E20C,$74B1,$D29A, + $EAD5,$4739,$9DD2,$77AF,$04DB,$2615,$73DC,$1683,$E363,$0B12,$9464,$3B84,$0D6D,$6A3E,$7A6A,$5AA8,$E40E,$CF0B,$9309,$FF9D,$0A00,$AE27, + $7D07,$9EB1,$F00F,$9344,$8708,$A3D2,$1E01,$F268,$6906,$C2FE,$F762,$575D,$8065,$67CB,$196C,$3671,$6E6B,$06E7,$FED4,$1B76,$89D3,$2BE0, + $10DA,$7A5A,$67DD,$4ACC,$F9B9,$DF6F,$8EBE,$EFF9,$17B7,$BE43,$60B0,$8ED5,$D6D6,$A3E8,$A1D1,$937E,$38D8,$C2C4,$4FDF,$F252,$D1BB,$67F1, + $A6BC,$5767,$3FB5,$06DD,$48B2,$364B,$D80D,$2BDA,$AF0A,$1B4C,$3603,$4AF6,$4104,$7A60,$DF60,$EFC3,$A867,$DF55,$316E,$8EEF,$4669,$BE79, + $CB61,$B38C,$BC66,$831A,$256F,$D2A0,$5268,$E236,$CC0C,$7795,$BB0B,$4703,$2202,$16B9,$5505,$262F,$C5BA,$3BBE,$B2BD,$0B28,$2BB4,$5A92, + $5CB3,$6A04,$C2D7,$FFA7,$B5D0,$CF31,$2CD9,$9E8B,$5BDE,$AE1D,$9B64,$C2B0,$EC63,$F226,$756A,$A39C,$026D,$930A,$9C09,$06A9,$EB0E,$363F, + $7207,$6785,$0500,$5713,$95BF,$4A82,$E2B8,$7A14,$7BB1,$2BAE,$0CB6,$1B38,$92D2,$8E9B,$E5D5,$BE0D,$7CDC,$EFB7,$0BDB,$DF21,$86D3,$D2D4, + $F1D4,$E242,$68DD,$B3F8,$1FDA,$836E,$81BE,$16CD,$F6B9,$265B,$6FB0,$77E1,$18B7,$4777,$8808,$5AE6,$FF0F,$6A70,$6606,$3BCA,$1101,$0B5C, + $8F65,$9EFF,$F862,$AE69,$616B,$FFD3,$166C,$CF45,$A00A,$E278,$D70D,$D2EE,$4E04,$8354,$3903,$B3C2,$A767,$2661,$D060,$16F7,$4969,$474D, + $3E6E,$77DB,$AED1,$6A4A,$D9D6,$5ADC,$40DF,$0B66,$37D8,$3BF0,$A9BC,$AE53,$DEBB,$9EC5,$47B2,$CF7F,$30B5,$FFE9,$BDBD,$F21C,$CABA,$C28A, + $53B3,$9330,$24B4,$A3A6,$BAD0,$3605,$CDD7,$0693,$54DE,$5729,$23D9,$67BF,$B366,$7A2E,$C461,$4AB8,$5D68,$1B02,$2A6F,$2B94,$B40B,$BE37, + $C30C,$8EA1,$5A05,$DF1B,$2D02,$EF8D,0 diff --git a/tooltypes.e b/tooltypes.e new file mode 100644 index 0000000..c05b278 --- /dev/null +++ b/tooltypes.e @@ -0,0 +1,377 @@ +/* tooltypes helper functions */ + + OPT MODULE + + MODULE 'workbench/workbench','icon','dos/dos' + MODULE '*axcommon','*axenums','*axobjects','*stringlist','*miscfuncs' + +->all of the below are globals shared with express.e +->must be changed in both places +EXPORT DEF cmds:PTR TO commands +EXPORT DEF confDirs: PTR TO stringlist +EXPORT DEF currentConf +EXPORT DEF currentConfDir:PTR TO CHAR +EXPORT DEF fCheckDir:PTR TO CHAR +EXPORT DEF xprLib: PTR TO stringlist +EXPORT DEF diskObjectCache:PTR TO stdlist +EXPORT DEF node +EXPORT DEF cacheTests +EXPORT DEF cacheHits +EXPORT DEF loggedOnUser: PTR TO user + +EXPORT PROC getNodeFile(toolType,tooltypeSelector,nodeFile) + DEF tempStr[255]:STRING + DEF tempStr2[255]:STRING + DEF i,p + + SELECT toolType + CASE TOOLTYPE_NODE + -> tooltypeSector is node number + StringF(nodeFile,'\sNode\d',cmds.bbsLoc,tooltypeSelector) + CASE TOOLTYPE_WINDOW + -> tooltypeSector is node number + StringF(nodeFile,'\sNode\d/WINDOW.DEF',cmds.bbsLoc,tooltypeSelector) + CASE TOOLTYPE_CONFCONFIG + -> tooltypeSector is not used + StringF(nodeFile,'\sConfconfig',cmds.bbsLoc) + CASE TOOLTYPE_BBSCONFIG + -> tooltypeSector is not used + StringF(nodeFile,'\sbbsConfig',cmds.bbsLoc) + CASE TOOLTYPE_NAMESNOTALLOWED + -> tooltypeSector is not used + StringF(nodeFile,'\sNamesNotAllowed',cmds.bbsLoc) + CASE TOOLTYPE_CONF + -> tooltypeSector is conf number + ->get conf location + StringF(tempStr,'LOCATION.\d',tooltypeSelector) + readToolType(TOOLTYPE_CONFCONFIG,'',tempStr,tempStr2) + IF tempStr2[StrLen(tempStr2)-1]="/" THEN SetStr(tempStr2,StrLen(tempStr2)-1) + StringF(nodeFile,'\s',tempStr2) + CASE TOOLTYPE_MSGBASE + -> tooltypeSector is conf number + ->get conf location + StrCopy(tempStr,confDirs.item(tooltypeSelector-1)) ->getConfLocation(tooltypeSelector,tempStr) + StringF(nodeFile,'\sMsgBases',tempStr) + CASE TOOLTYPE_BBSCMD + -> tooltypeSector is command name string + StringF(nodeFile,'\sCommands/BBSCmd/\s',cmds.bbsLoc,tooltypeSelector) + CASE TOOLTYPE_CONFCMD + -> tooltypeSector is command name string + StringF(nodeFile,'\sCommands/Conf\dCmd/\s',cmds.bbsLoc,currentConf,tooltypeSelector) + CASE TOOLTYPE_CONFCMD2 + -> tooltypeSector is command name string + StringF(nodeFile,'\s\s',currentConfDir,tooltypeSelector) + CASE TOOLTYPE_NODECMD + -> tooltypeSector is command name string + StringF(nodeFile,'\sCommands/Node\dCmd/\s',cmds.bbsLoc,node,tooltypeSelector) + CASE TOOLTYPE_CONFSYSCMD + -> tooltypeSector is command name string + StringF(nodeFile,'\sCommands/Conf\dSysCmd/\s',cmds.bbsLoc,currentConf,tooltypeSelector) + CASE TOOLTYPE_NODESYSCMD + -> tooltypeSector is command name string + StringF(nodeFile,'\sCommands/Node\dSysCmd/\s',cmds.bbsLoc,node,tooltypeSelector) + CASE TOOLTYPE_SYSCMD + -> tooltypeSector is command name string + StringF(nodeFile,'\sCommands/SYSCmd/\s',cmds.bbsLoc,tooltypeSelector) + CASE TOOLTYPE_DRIVES + -> tooltypeSector is not used + StringF(nodeFile,'\sDrives',cmds.bbsLoc) + CASE TOOLTYPE_COMPUTERLIST + -> tooltypeSector is not used + StringF(nodeFile,'\sComputerList',cmds.bbsLoc) + CASE TOOLTYPE_DEFAULT_ACCESS + -> tooltypeSector is not used + StringF(nodeFile,'\sAccess',cmds.bbsLoc) + CASE TOOLTYPE_USER_ACCESS + -> tooltypeSector is not used + getUserAccessFilename(nodeFile) + CASE TOOLTYPE_ACCESS + -> tooltypeSector is access level number + StringF(nodeFile,'\sAccess/ACS.\d',cmds.bbsLoc,tooltypeSelector) + CASE TOOLTYPE_AREA + -> tooltypeSector is access area name + StringF(nodeFile,'\sAccess/AREA.\s',cmds.bbsLoc,tooltypeSelector) + CASE TOOLTYPE_PRESET + -> tooltypeSector is preset level number + StringF(nodeFile,'\sAccess/PRESET.\d',cmds.bbsLoc,tooltypeSelector) + CASE TOOLTYPE_NODE_PRESET + -> tooltypeSector is access level number, note this also uses the current node + StringF(nodeFile,'\sNode\d/PRESET.\d',cmds.bbsLoc,node,tooltypeSelector) + CASE TOOLTYPE_FCHECK + -> tooltypeSector is file type + StringF(nodeFile,'\s/\s',fCheckDir,tooltypeSelector) + CASE TOOLTYPE_NODE_WINDOW + -> tooltypeSector is node number + StringF(nodeFile,'\sNode\d/WINDOW.DEF',cmds.bbsLoc,tooltypeSelector) + CASE TOOLTYPE_NODE_TIMES + -> tooltypeSector is node number + StringF(nodeFile,'\sNode\d/TIMES.DEF',cmds.bbsLoc,tooltypeSelector) + CASE TOOLTYPE_CONNECT + -> tooltypeSector is node number + StringF(nodeFile,'\sNode\d/Connect.Def',cmds.bbsLoc,tooltypeSelector) + CASE TOOLTYPE_XPRTYPES + -> tooltypeSector is not used + StringF(nodeFile,'\sProtocols/XprTypes',cmds.bbsLoc) + CASE TOOLTYPE_XFERLIB + -> tooltypeSector is xpr lib number + StringF(nodeFile,'\sProtocols/\s',cmds.bbsLoc,xprLib.item(tooltypeSelector)) + CASE TOOLTYPE_SCREENTYPES + -> tooltypeSector is not used + StringF(nodeFile,'\sScreenTypes',cmds.bbsLoc) + CASE TOOLTYPE_NRAMS + -> tooltypeSector is node, + StringF(tempStr,'\sNode\d/NRAMS',cmds.bbsLoc,tooltypeSelector) + IF findFirst(tempStr,tempStr2) + p:=-1 + FOR i:=0 TO StrLen(tempStr2)-1 + IF tempStr2[i]="." THEN p:=i + ENDFOR + IF (p>=0) + SetStr(tempStr2,p) + ENDIF + StringF(nodeFile,'\s/\s',tempStr,tempStr2) + ELSE + StrCopy(nodeFile,'') + ENDIF + CASE TOOLTYPE_ASCPACK + -> tooltypeSector is not used + StringF(nodeFile,'\sZoom/ASCPACK',cmds.bbsLoc) + CASE TOOLTYPE_QWKPACK + -> tooltypeSector is not used + StringF(nodeFile,'\sZoom/QWKPACK',cmds.bbsLoc) + CASE TOOLTYPE_QWKCONFIG + -> tooltypeSector is not used + StringF(nodeFile,'\sZoom/QWKCFG',cmds.bbsLoc) + CASE TOOLTYPE_LANGUAGES + -> tooltypeSector is not used + StringF(nodeFile,'\sLanguages',cmds.bbsLoc) + ENDSELECT +ENDPROC + +EXPORT PROC readToolType(toolType,tooltypeSelector,key,outValue) + DEF nodeFile[255]:STRING + DEF do: PTR TO diskobject + DEF tooltypes + DEF s: PTR TO CHAR + + s:=NIL + getNodeFile(toolType,tooltypeSelector,nodeFile) + + do:=getOrCreateCacheItem(nodeFile) + IF (do) + tooltypes:=do.tooltypes + IF (s:=FindToolType(tooltypes,key)) THEN StrCopy(outValue,s,ALL) + ENDIF + IF diskObjectCache=NIL THEN FreeDiskObject(do) +ENDPROC s<>NIL + +EXPORT PROC readToolTypeInt(toolType,tooltypeSelector,key) + DEF value[255]:STRING + IF readToolType(toolType,tooltypeSelector,key,value) + RETURN Val(value) + ENDIF +ENDPROC -1 + +EXPORT PROC checkToolType(toolType,tooltypeSelector,key,testValue) + DEF nodeFile[255]:STRING + DEF do: diskobject + DEF tooltypes + DEF s: PTR TO CHAR + DEF result=FALSE + + s:=NIL + + getNodeFile(toolType,tooltypeSelector,nodeFile) + + do:=getOrCreateCacheItem(nodeFile) + IF (do) + tooltypes:=do.tooltypes + IF(s:=FindToolType(tooltypes,key)) + IF (MatchToolValue(s,testValue)) THEN result:=TRUE + ENDIF + ENDIF + IF diskObjectCache=NIL THEN FreeDiskObject(do) +ENDPROC result + +EXPORT PROC checkToolTypeExists(toolType,tooltypeSelector,key) + DEF nodeFile[255]:STRING + DEF do: diskobject + DEF tooltypes + DEF s: PTR TO CHAR + DEF result=FALSE + + s:=NIL + + getNodeFile(toolType,tooltypeSelector,nodeFile) + + do:=getOrCreateCacheItem(nodeFile) + IF (do) + tooltypes:=do.tooltypes + IF(s:=FindToolType(tooltypes,key)) THEN result:=TRUE + ENDIF + IF diskObjectCache=NIL THEN FreeDiskObject(do) +ENDPROC result + +EXPORT PROC getOrCreateCacheItem(fileName:PTR TO CHAR) + DEF i,cnt,found=FALSE + DEF cacheObj: PTR TO diskObjectCacheItem + DEF do=NIL:PTR TO diskobject + DEF fn2[255]:STRING + DEF ownToolTypes + DEF toolTypes:PTR TO LONG + DEF fh,fileBuf,off,lineCount,len + + IF diskObjectCache<>NIL + cnt:=diskObjectCache.count() + + i:=0 + WHILE (iLRU algorithm, move most recently used to end of list + i++ + WHILE iNIL + fileBuf:=New(getFileSize(fn2)+1) ->allow an extra char in case file does not end in LF + + fh:=Open(fn2,MODE_OLDFILE) + IF fh<>0 + off:=0 + lineCount:=0 + WHILE(ReadStr(fh,fn2)<>-1) OR (StrLen(fn2)>0) + len:=0 + WHILE (fn2[len]<>0) AND (fn2[len]<>";") + len++ + ENDWHILE + + ->trim trailing space + WHILE (fn2[len-1]<=32) AND (len>0) + len-- + EXIT len=0 ->this is just here to prevent the fn2[len-1] causing a buffer underrun in the absence of short circuit evaluation + ENDWHILE + SetStr(fn2,len) + + AstrCopy(fileBuf+off,fn2,len+1) + lineCount++ + off:=off+len+1 + ENDWHILE + + toolTypes:=List(lineCount+1) + off:=0 + FOR i:=1 TO lineCount + listAdd2(toolTypes,fileBuf+off) + off:=off+StrLen(fileBuf+off)+1 + ENDFOR + ListAdd(toolTypes,[NIL]) + do.tooltypes:=toolTypes + ownToolTypes:=TRUE + Close(fh) + ELSE + Dispose(fileBuf) + FreeDiskObject(do) + do:=NIL + ENDIF + ENDIF + ENDIF + IF diskObjectCache<>NIL + cacheObj:=NEW cacheObj + cacheObj.fileName:=String(StrLen(fileName)) + cacheObj.ownsToolTypes:=ownToolTypes + StrCopy(cacheObj.fileName,fileName) + cacheObj.diskObject:=do + + IF diskObjectCache.count()<(diskObjectCache.maxSize()-1) + diskObjectCache.add(cacheObj) + ELSE + cacheObj:=diskObjectCache.item(0) + DisposeLink(cacheObj.fileName) + FreeDiskObject(cacheObj.diskObject) + diskObjectCache.remove(0) + diskObjectCache.add(cacheObj) + ENDIF + ENDIF + ENDIF +ENDPROC do + +EXPORT PROC clearDiskObjectCache() + DEF cacheObj: PTR TO diskObjectCacheItem + DEF i, do: PTR TO diskobject + DEF mem + + IF diskObjectCache=NIL THEN RETURN + FOR i:=0 TO diskObjectCache.count()-1 + IF (cacheObj:=diskObjectCache.item(i)) + IF cacheObj.ownsToolTypes + do:=cacheObj.diskObject + mem:=do.tooltypes[0] -> release the file buffer (first string pointer points to start of buffer) + Dispose(mem) + DisposeLink(do.tooltypes) ->our tooltypes is a list that needs to be freed + ENDIF + DisposeLink(cacheObj.fileName) + IF cacheObj.diskObject<>NIL + do:=cacheObj.diskObject + FreeDiskObject(do) + ENDIF + END cacheObj + ENDIF + ENDFOR + diskObjectCache.clear() + cacheTests:=0 + cacheHits:=0 +ENDPROC + +EXPORT PROC getUserAccessFilename(outFilename: PTR TO CHAR) + DEF tempStr[255]:STRING + + DEF i,c + + StrCopy(tempStr,loggedOnUser.name) + FOR i:=0 TO StrLen(tempStr)-1 + c:=tempStr[i] + SELECT c + CASE "%" + tempStr[i]:="_" + CASE "#" + tempStr[i]:="_" + CASE "?" + tempStr[i]:="_" + CASE "/" + tempStr[i]:="_" + CASE "(" + tempStr[i]:="_" + CASE ")" + tempStr[i]:="_" + ENDSELECT + ENDFOR + + StringF(outFilename,'\sACCESS/\s',cmds.bbsLoc,tempStr) +ENDPROC + diff --git a/zmodem.e b/zmodem.e index 3db199d..83a587c 100644 --- a/zmodem.e +++ b/zmodem.e @@ -92,13 +92,13 @@ PROC flength(file) FreeDosObject(DOS_FIB,fBlock) ENDPROC fsize -PROC getFreeDiskSpace(drive,n) -ENDPROC 300000000 +->todo proper disk space check +PROC getFreeDiskSpace() IS 300000000 EXPORT PROC getZmSystemTime() DEF currDate: datestamp DateStamp(currDate) -ENDPROC Mul(Mul(currDate.days,1440),60)+(currDate.minute*60)+(currDate.tick/50) +ENDPROC Mul(Mul(currDate.days,1440),60)+(currDate.minute*60)+(currDate.tick/50),Mod(currDate.tick,50) PROC getFileSize(zm,fp) DEF p @@ -428,7 +428,8 @@ EXPORT OBJECT zmodem_t files_remaining:LONG bytes_remaining:LONG transfer_start_pos:LONG - transfer_start_time:LONG + transfer_start_time1:LONG + transfer_start_time2:INT new_file:INT receive_32bit_data:INT use_crc16:INT @@ -485,14 +486,14 @@ PROC ucrc16(zm:PTR TO zmodem_t,ch,crc) n:=Eor(Shr(crc,8) AND $ff,ch) ENDPROC Eor(zm.crc16tbl[n],Shl(crc,8)) AND $ffff -PROC crc16(zm:PTR TO zmodem_t,data: PTR TO CHAR,len) +/*PROC crc16(zm:PTR TO zmodem_t,data: PTR TO CHAR,len) DEF crc=0 DEF l IF((len=0) AND (data<>NIL)) THEN len:=StrLen(data) FOR l:=0 TO len-1 crc:=ucrc16(zm,data[l],crc) ENDFOR -ENDPROC crc +ENDPROC crc*/ /*PROC ucrc32(ch,crc) DEF a,b @@ -517,7 +518,8 @@ PROC fcrc32(zm:PTR TO zmodem_t,fp, len) IF rl=1 crc:=ucrc32(zm,ch,crc) ENDIF - UNTIL rl=0 + len-- + UNTIL (rl=0) OR (len=0) ENDPROC Not(crc) @@ -573,7 +575,6 @@ PROC zmodem_data_waiting(zm: PTR TO zmodem_t,timeout) ENDPROC FALSE PROC chr(ch,output) - DEF str[25]:STRING SELECT ch CASE TIMEOUT @@ -752,9 +753,9 @@ PROC frame_desc(frame,output) StrCopy(output,str) ENDPROC -PROC frame_pos(zm: PTR TO zmodem_t,type) +/*PROC frame_pos(zm: PTR TO zmodem_t,type) IF (type=ZRPOS) OR (type=ZACK) OR (type=ZEOF) OR (type=ZDATA) THEN RETURN zm.rxd_header_pos -ENDPROC 0 +ENDPROC 0*/ /* * read bytes as long as rdchk indicates that @@ -784,8 +785,6 @@ ENDPROC */ /* Returns 0 on success */ EXPORT PROC zmodem_send_raw(zm: PTR TO zmodem_t,ch) - DEF result - DEF tempstr[255]:STRING zm.sendBuffer[zm.sendBufferPos]:=ch zm.sendBufferPos:=zm.sendBufferPos+1 @@ -838,7 +837,7 @@ ENDPROC zmodem_send_raw(zm,c) /**********************************************/ PROC zmodem_send_hex(zm:PTR TO zmodem_t,val) DEF xdigit[16]:STRING - DEF tempstr[255]:STRING + ->DEF tempstr[255]:STRING DEF result StrCopy(xdigit,'0123456789abcdef') @@ -866,8 +865,8 @@ PROC zmodem_send_hex_header(zm:PTR TO zmodem_t, p: PTR TO CHAR) DEF result; DEF type DEF crc; - DEF tempstr[255]:STRING - DEF tempstr2[255]:STRING + ->DEF tempstr[255]:STRING + ->DEF tempstr2[255]:STRING type:=p[] ->chr(type,tempstr) @@ -928,8 +927,8 @@ PROC zmodem_send_bin32_header(zm:PTR TO zmodem_t, p: PTR TO CHAR) DEF i DEF result DEF crc - DEF tempstr[255]:STRING - DEF tempstr2[255]:STRING + ->DEF tempstr[255]:STRING + ->DEF tempstr2[255]:STRING DEF pp ->chr(p[],tempstr) @@ -963,8 +962,8 @@ PROC zmodem_send_bin16_header(zm:PTR TO zmodem_t, p: PTR TO CHAR) DEF i DEF result DEF crc - DEF tempstr[255]:STRING - DEF tempstr2[255]:STRING + ->DEF tempstr[255]:STRING + ->DEF tempstr2[255]:STRING DEF tmp ->chr(p[],tempstr) @@ -1009,8 +1008,8 @@ PROC zmodem_send_data32(zm: PTR TO zmodem_t, subpkt_type, p: PTR TO CHAR, l) DEF result DEF crc DEF tmp - DEF tempstr[255]:STRING - DEF tempstr2[255]:STRING + ->DEF tempstr[255]:STRING + ->DEF tempstr2[255]:STRING ->chr(subpkt_type,tempstr) ->StringF(tempstr2,'send_data32: \s (\d bytes)', tempstr,l) @@ -1045,8 +1044,8 @@ PROC zmodem_send_data16(zm: PTR TO zmodem_t, subpkt_type,p: PTR TO CHAR, l) DEF result DEF crc - DEF tempstr[255]:STRING - DEF tempstr2[255]:STRING + ->DEF tempstr[255]:STRING + ->DEF tempstr2[255]:STRING DEF tmp ->chr(subpkt_type,tempstr) @@ -1099,7 +1098,7 @@ PROC zmodem_send_data_subpkt(zm: PTR TO zmodem_t, subpkt_type, p: PTR TO CHAR, l ENDPROC result PROC zmodem_send_data(zm: PTR TO zmodem_t, subpkt_type, p: PTR TO CHAR, l) - DEF tempstr[255]:STRING + ->DEF tempstr[255]:STRING IF(zm.frame_in_transit)=0 /* Start of frame, include ZDATA header */ ->StringF(tempstr,'send_data: start of frame, offset \d',zm.current_file_pos) @@ -1374,7 +1373,7 @@ PROC zmodem_recv_data16(zm: PTR TO zmodem_t, p:PTR TO CHAR, maxlen, l: PTR TO L DEF crc; DEF rxd_crc DEF tempstr[255]:STRING - DEF tempstr2[255]:STRING + ->DEF tempstr2[255]:STRING ->lprintf(zm,ZM_LOG_DEBUG,'recv_data16') @@ -1522,7 +1521,7 @@ PROC zmodem_recv_hex(zm: PTR TO zmodem_t) DEF n1 DEF n0 DEF ret - DEF tempstr[255]:STRING + ->DEF tempstr[255]:STRING n1:=zmodem_recv_nibble(zm) @@ -1785,7 +1784,7 @@ zmrhcont: CASE ZCOMMAND IF(zmodem_recv_subpacket(zm,/* ack? */TRUE))=FALSE THEN frame_type:=frame_type OR BADSUBPKT CASE ZFREECNT - zmodem_send_pos_header(zm, ZACK, getFreeDiskSpace('.',1), /* Hex? */ TRUE) + zmodem_send_pos_header(zm, ZACK, getFreeDiskSpace(), /* Hex? */ TRUE) ENDSELECT ->#if 0 /* def _DEBUG */ @@ -1797,8 +1796,8 @@ ENDPROC frame_type PROC zmodem_recv_header(zm: PTR TO zmodem_t) DEF ret - DEF tempstr[255]:STRING - DEF tempstr2[255]:STRING + ->DEF tempstr[255]:STRING + ->DEF tempstr2[255]:STRING ret:=zmodem_recv_header_raw(zm, FALSE) @@ -1823,8 +1822,8 @@ ENDPROC ret PROC zmodem_recv_header_and_check(zm: PTR TO zmodem_t) DEF type=ABORTED - DEF tempstr[255]:STRING - DEF tempstr2[255]:STRING + ->DEF tempstr[255]:STRING + ->DEF tempstr2[255]:STRING WHILE(is_connected(zm) AND (is_cancelled(zm)=FALSE)) type:=zmodem_recv_header_raw(zm,TRUE); @@ -1868,9 +1867,9 @@ PROC zmodem_recv_crc(zm: PTR TO zmodem_t, crc:PTR TO LONG) IF(crc<>NIL) THEN crc[]:=zm.crc_request ENDPROC TRUE -PROC zmodem_get_crc(zm: PTR TO zmodem_t,length, crc:PTR TO LONG) +/*PROC zmodem_get_crc(zm: PTR TO zmodem_t,length, crc:PTR TO LONG) IF(zmodem_request_crc(zm, length)) THEN RETURN zmodem_recv_crc(zm, crc) -ENDPROC FALSE +ENDPROC FALSE*/ PROC zmodem_parse_zrinit(zm: PTR TO zmodem_t) DEF tempstr[255]:STRING @@ -1938,7 +1937,7 @@ ENDPROC zmodem_send_hex_header(zm, zrinit_header) /* Returns ZFIN on success */ -PROC zmodem_get_zfin(zm: PTR TO zmodem_t) +/*PROC zmodem_get_zfin(zm: PTR TO zmodem_t) DEF result DEF type=ZCAN @@ -1967,7 +1966,7 @@ PROC zmodem_get_zfin(zm: PTR TO zmodem_t) zmodem_send_raw(zm,"O") zmodem_send_raw(zm,"O") ENDIF -ENDPROC type +ENDPROC type*/ PROC zmodem_handle_zrpos(zm: PTR TO zmodem_t, pos:PTR TO LONG) @@ -2011,8 +2010,6 @@ PROC zmodem_send_from(zm: PTR TO zmodem_t, fp, pos,sent: PTR TO LONG) DEF c DEF p - IF(sent<>NIL) THEN sent[]:=0 - IF doSeek(zm,fp,pos,OFFSET_BEGINING)=-1 StringF(tempstr,'ERROR \d seeking to file offset \d',IoErr(), pos) lprintf(zm,ZM_LOG_ERR,tempstr) @@ -2148,7 +2145,7 @@ PROC zmodem_send_from(zm: PTR TO zmodem_t, fp, pos,sent: PTR TO LONG) ENDPROC ZACK -EXPORT PROC zmodem_send_files(zm: PTR TO zmodem_t,start: PTR TO LONG, sent: PTR TO LONG) +EXPORT PROC zmodem_send_files(zm: PTR TO zmodem_t,sent: PTR TO LONG, timetaken:PTR TO LONG) DEF p,res,init=TRUE DEF fname[255]:STRING @@ -2156,7 +2153,7 @@ EXPORT PROC zmodem_send_files(zm: PTR TO zmodem_t,start: PTR TO LONG, sent: PTR IF p<>NIL IF p(zm,fname) REPEAT - res:=zmodem_send_file(zm, fname, init,{start}, {sent}) + res:=zmodem_send_file(zm, fname, init,sent, timetaken) IF res=FALSE THEN RETURN res init:=FALSE IF res @@ -2179,7 +2176,7 @@ ENDPROC TRUE * send a file; returns true when session is successful. (or file is skipped) */ -PROC zmodem_send_file(zm: PTR TO zmodem_t, fname: PTR TO CHAR, request_init,start: PTR TO LONG, sent: PTR TO LONG) +PROC zmodem_send_file(zm: PTR TO zmodem_t, fname: PTR TO CHAR, request_init,sent: PTR TO LONG, timetaken: PTR TO LONG) DEF pos=0 DEF sent_bytes @@ -2192,6 +2189,7 @@ PROC zmodem_send_file(zm: PTR TO zmodem_t, fname: PTR TO CHAR, request_init,star DEF tempstr[255]:STRING DEF tempstr2[255]:STRING DEF loop = TRUE + DEF t1,t2,t fp:=doOpen(zm,fname,MODE_OLDFILE) IF fp<=0 @@ -2212,10 +2210,6 @@ PROC zmodem_send_file(zm: PTR TO zmodem_t, fname: PTR TO CHAR, request_init,star IF(zm.max_block_size > RXSUBPACKETSIZE) THEN zm.max_block_size:= RXSUBPACKETSIZE - IF(sent<>NIL) THEN sent[]:=0 - - IF(start<>NIL) THEN start[]:=getZmSystemTime() - zm.file_skipped:=FALSE IF(zm.no_streaming) THEN lprintf(zm,ZM_LOG_WARNING,'Streaming disabled') @@ -2395,9 +2389,10 @@ zsendignore: ENDIF zm.transfer_start_pos:=pos; - zm.transfer_start_time:=getZmSystemTime() - - IF(start<>NIL) THEN start[]:=zm.transfer_start_time + + t1,t2:=getZmSystemTime() + zm.transfer_start_time1:=t1 + zm.transfer_start_time2:=t2 doSeek(zm,fp,0,OFFSET_BEGINNING) zm.errors:=0 @@ -2415,6 +2410,12 @@ zsendcont2: type:=zmodem_send_from(zm, fp, pos, {sent_bytes}) + t1,t2:=getZmSystemTime() + t:=Mul((t1-zm.transfer_start_time1),50)+t2-zm.transfer_start_time2 + + IF(sent<>NIL) THEN sent[]:=sent[]+sent_bytes + IF(timetaken<>NIL) THEN timetaken[]:=timetaken[]+t + IF(is_connected(zm))=FALSE doClose(zm,fp) RETURN FALSE @@ -2432,8 +2433,6 @@ zsendcont2: RETURN TRUE ENDIF - IF(sent<>NIL) THEN sent[]:=sent[]+sent_bytes - IF(type=ZRINIT) doClose(zm,fp) RETURN TRUE /* Success */ @@ -2472,7 +2471,7 @@ zsendcont2: doClose(zm,fp) ENDPROC FALSE -EXPORT PROC zmodem_recv_files(zm: PTR TO zmodem_t, download_dir:PTR TO CHAR,bytes_received: PTR TO LONG) +EXPORT PROC zmodem_recv_files(zm: PTR TO zmodem_t, download_dir:PTR TO CHAR,bytes_received: PTR TO LONG,timetaken:PTR TO LONG) DEF fpath[MAX_PATH]:STRING DEF fp DEF l @@ -2490,11 +2489,10 @@ EXPORT PROC zmodem_recv_files(zm: PTR TO zmodem_t, download_dir:PTR TO CHAR,byte DEF timeout DEF errors DEF tempstr[255]:STRING - DEF tempstr2[255]:STRING DEF brk=FALSE DEF p + DEF t1,t2 - IF(bytes_received<>NIL) THEN bytes_received[]:=0 zm.current_file_num:=1 WHILE(zmodem_recv_init(zm)=ZFILE) bytes:=zm.current_file_size; @@ -2592,6 +2590,10 @@ EXPORT PROC zmodem_recv_files(zm: PTR TO zmodem_t, download_dir:PTR TO CHAR,byte lprintf(zm,ZM_LOG_INFO,tempstr) ENDIF + t1,t2:=getZmSystemTime() + zm.transfer_start_time1:=t1 + zm.transfer_start_time2:=t2 + IF((fp:=doOpen(zm,fpath,MODE_READWRITE)))=NIL StringF(tempstr,'Error \d opening/creating/appending \s',IoErr(),fpath) lprintf(zm,ZM_LOG_ERR,tempstr) @@ -2614,6 +2616,11 @@ EXPORT PROC zmodem_recv_files(zm: PTR TO zmodem_t, download_dir:PTR TO CHAR,byte doClose(zm,fp) + t1,t2:=getZmSystemTime() + t:=Mul((t1-zm.transfer_start_time1),50)+t2-zm.transfer_start_time2 + IF t<=0 THEN t:=1 + IF timetaken<>NIL THEN timetaken[]:=timetaken[]+t + l:=flength(fpath); IF(errors AND (l=0)) /* aborted/failed download */ IF(DeleteFile(fpath)) /* don't save 0-byte file */ @@ -2629,9 +2636,18 @@ EXPORT PROC zmodem_recv_files(zm: PTR TO zmodem_t, download_dir:PTR TO CHAR,byte lprintf(zm,ZM_LOG_WARNING,tempstr) upload_failed(zm,fpath) ELSE - IF((t:=(getZmSystemTime()-zm.transfer_start_time)))<=0 THEN t:=1 b:=l-start_bytes - IF((cps:=Div(b,t)))=0 THEN cps:=1 + + IF t>0 + IF b>40000000 + cps:=Div(b,Div(t,50)) + ELSE + cps:=Div(Mul(b,50),t) + ENDIF + ELSE + cps:=b + ENDIF + IF cps=0 THEN cps:=1 StringF(tempstr,'Received \d bytes successfully (\d CPS)',b,cps) lprintf(zm,ZM_LOG_INFO,tempstr) files_received++ @@ -2789,7 +2805,6 @@ PROC zmodem_recv_file_data(zm: PTR TO zmodem_t, fp, offset) DEF brk=FALSE zm.transfer_start_pos:=offset - zm.transfer_start_time:=getZmSystemTime() IF(doSeek(zm,fp,offset,OFFSET_BEGINNING))<0 StringF(tempstr,'ERROR \d seeking to file offset \d',IoErr(), offset) @@ -2966,74 +2981,6 @@ EXPORT PROC zmodem_init(zm: PTR TO zmodem_t, cbdata: PTR TO CHAR, IF max_errors<>0 THEN zm.max_errors:=max_errors ELSE zm.max_errors:=9 - zm.crc16tbl:= [ -$0000, $1021, $2042, $3063, $4084, $50A5, $60C6, $70E7, -$8108, $9129, $A14A, $B16B, $C18C, $D1AD, $E1CE, $F1EF, -$1231, $0210, $3273, $2252, $52B5, $4294, $72F7, $62D6, -$9339, $8318, $B37B, $A35A, $D3BD, $C39C, $F3FF, $E3DE, -$2462, $3443, $0420, $1401, $64E6, $74C7, $44A4, $5485, -$A56A, $B54B, $8528, $9509, $E5EE, $F5CF, $C5AC, $D58D, -$3653, $2672, $1611, $0630, $76D7, $66F6, $5695, $46B4, -$B75B, $A77A, $9719, $8738, $F7DF, $E7FE, $D79D, $C7BC, -$48C4, $58E5, $6886, $78A7, $0840, $1861, $2802, $3823, -$C9CC, $D9ED, $E98E, $F9AF, $8948, $9969, $A90A, $B92B, -$5AF5, $4AD4, $7AB7, $6A96, $1A71, $0A50, $3A33, $2A12, -$DBFD, $CBDC, $FBBF, $EB9E, $9B79, $8B58, $BB3B, $AB1A, -$6CA6, $7C87, $4CE4, $5CC5, $2C22, $3C03, $0C60, $1C41, -$EDAE, $FD8F, $CDEC, $DDCD, $AD2A, $BD0B, $8D68, $9D49, -$7E97, $6EB6, $5ED5, $4EF4, $3E13, $2E32, $1E51, $0E70, -$FF9F, $EFBE, $DFDD, $CFFC, $BF1B, $AF3A, $9F59, $8F78, -$9188, $81A9, $B1CA, $A1EB, $D10C, $C12D, $F14E, $E16F, -$1080, $00A1, $30C2, $20E3, $5004, $4025, $7046, $6067, -$83B9, $9398, $A3FB, $B3DA, $C33D, $D31C, $E37F, $F35E, -$02B1, $1290, $22F3, $32D2, $4235, $5214, $6277, $7256, -$B5EA, $A5CB, $95A8, $8589, $F56E, $E54F, $D52C, $C50D, -$34E2, $24C3, $14A0, $0481, $7466, $6447, $5424, $4405, -$A7DB, $B7FA, $8799, $97B8, $E75F, $F77E, $C71D, $D73C, -$26D3, $36F2, $0691, $16B0, $6657, $7676, $4615, $5634, -$D94C, $C96D, $F90E, $E92F, $99C8, $89E9, $B98A, $A9AB, -$5844, $4865, $7806, $6827, $18C0, $08E1, $3882, $28A3, -$CB7D, $DB5C, $EB3F, $FB1E, $8BF9, $9BD8, $ABBB, $BB9A, -$4A75, $5A54, $6A37, $7A16, $0AF1, $1AD0, $2AB3, $3A92, -$FD2E, $ED0F, $DD6C, $CD4D, $BDAA, $AD8B, $9DE8, $8DC9, -$7C26, $6C07, $5C64, $4C45, $3CA2, $2C83, $1CE0, $0CC1, -$EF1F, $FF3E, $CF5D, $DF7C, $AF9B, $BFBA, $8FD9, $9FF8, -$6E17, $7E36, $4E55, $5E74, $2E93, $3EB2, $0ED1, $1EF0 -]:INT - - zm.crc32tbl:=[ -$00000000, $77073096, $ee0e612c, $990951ba, $076dc419, $706af48f, $e963a535, $9e6495a3, -$0edb8832, $79dcb8a4, $e0d5e91e, $97d2d988, $09b64c2b, $7eb17cbd, $e7b82d07, $90bf1d91, -$1db71064, $6ab020f2, $f3b97148, $84be41de, $1adad47d, $6ddde4eb, $f4d4b551, $83d385c7, -$136c9856, $646ba8c0, $fd62f97a, $8a65c9ec, $14015c4f, $63066cd9, $fa0f3d63, $8d080df5, -$3b6e20c8, $4c69105e, $d56041e4, $a2677172, $3c03e4d1, $4b04d447, $d20d85fd, $a50ab56b, -$35b5a8fa, $42b2986c, $dbbbc9d6, $acbcf940, $32d86ce3, $45df5c75, $dcd60dcf, $abd13d59, -$26d930ac, $51de003a, $c8d75180, $bfd06116, $21b4f4b5, $56b3c423, $cfba9599, $b8bda50f, -$2802b89e, $5f058808, $c60cd9b2, $b10be924, $2f6f7c87, $58684c11, $c1611dab, $b6662d3d, -$76dc4190, $01db7106, $98d220bc, $efd5102a, $71b18589, $06b6b51f, $9fbfe4a5, $e8b8d433, -$7807c9a2, $0f00f934, $9609a88e, $e10e9818, $7f6a0dbb, $086d3d2d, $91646c97, $e6635c01, -$6b6b51f4, $1c6c6162, $856530d8, $f262004e, $6c0695ed, $1b01a57b, $8208f4c1, $f50fc457, -$65b0d9c6, $12b7e950, $8bbeb8ea, $fcb9887c, $62dd1ddf, $15da2d49, $8cd37cf3, $fbd44c65, -$4db26158, $3ab551ce, $a3bc0074, $d4bb30e2, $4adfa541, $3dd895d7, $a4d1c46d, $d3d6f4fb, -$4369e96a, $346ed9fc, $ad678846, $da60b8d0, $44042d73, $33031de5, $aa0a4c5f, $dd0d7cc9, -$5005713c, $270241aa, $be0b1010, $c90c2086, $5768b525, $206f85b3, $b966d409, $ce61e49f, -$5edef90e, $29d9c998, $b0d09822, $c7d7a8b4, $59b33d17, $2eb40d81, $b7bd5c3b, $c0ba6cad, -$edb88320, $9abfb3b6, $03b6e20c, $74b1d29a, $ead54739, $9dd277af, $04db2615, $73dc1683, -$e3630b12, $94643b84, $0d6d6a3e, $7a6a5aa8, $e40ecf0b, $9309ff9d, $0a00ae27, $7d079eb1, -$f00f9344, $8708a3d2, $1e01f268, $6906c2fe, $f762575d, $806567cb, $196c3671, $6e6b06e7, -$fed41b76, $89d32be0, $10da7a5a, $67dd4acc, $f9b9df6f, $8ebeeff9, $17b7be43, $60b08ed5, -$d6d6a3e8, $a1d1937e, $38d8c2c4, $4fdff252, $d1bb67f1, $a6bc5767, $3fb506dd, $48b2364b, -$d80d2bda, $af0a1b4c, $36034af6, $41047a60, $df60efc3, $a867df55, $316e8eef, $4669be79, -$cb61b38c, $bc66831a, $256fd2a0, $5268e236, $cc0c7795, $bb0b4703, $220216b9, $5505262f, -$c5ba3bbe, $b2bd0b28, $2bb45a92, $5cb36a04, $c2d7ffa7, $b5d0cf31, $2cd99e8b, $5bdeae1d, -$9b64c2b0, $ec63f226, $756aa39c, $026d930a, $9c0906a9, $eb0e363f, $72076785, $05005713, -$95bf4a82, $e2b87a14, $7bb12bae, $0cb61b38, $92d28e9b, $e5d5be0d, $7cdcefb7, $0bdbdf21, -$86d3d2d4, $f1d4e242, $68ddb3f8, $1fda836e, $81be16cd, $f6b9265b, $6fb077e1, $18b74777, -$88085ae6, $ff0f6a70, $66063bca, $11010b5c, $8f659eff, $f862ae69, $616bffd3, $166ccf45, -$a00ae278, $d70dd2ee, $4e048354, $3903b3c2, $a7672661, $d06016f7, $4969474d, $3e6e77db, -$aed16a4a, $d9d65adc, $40df0b66, $37d83bf0, $a9bcae53, $debb9ec5, $47b2cf7f, $30b5ffe9, -$bdbdf21c, $cabac28a, $53b39330, $24b4a3a6, $bad03605, $cdd70693, $54de5729, $23d967bf, -$b3667a2e, $c4614ab8, $5d681b02, $2a6f2b94, $b40bbe37, $c30c8ea1, $5a05df1b, $2d02ef8d]:LONG zm.cbdata:=cbdata zm.zm_lputs:=lputs @@ -3060,6 +3007,9 @@ $b3667a2e, $c4614ab8, $5d681b02, $2a6f2b94, $b40bbe37, $c30c8ea1, $5a05df1b, $2d zm.sendBuffer:=New(zm.max_block_size+512) zm.sendBufferPos:=0 zm.sendBufferSize:=zm.max_block_size+512 + + zm.crc16tbl:={crc16tbl} + zm.crc32tbl:={crc32tbl} ENDPROC EXPORT PROC zmodem_cleanup(zm: PTR TO zmodem_t) @@ -3113,3 +3063,68 @@ PROC doWrite(zm:PTR TO zmodem_t,fhandle,buffer,length) ->lprintf(zm,ZM_LOG_WARNING,'zm_fwrite not set, defaulting to dos library FWrite') ENDPROC Fwrite(fhandle,buffer,1,length) +crc16tbl: INT $0000, $1021, $2042, $3063, $4084, $50A5, $60C6, $70E7, + $8108, $9129, $A14A, $B16B, $C18C, $D1AD, $E1CE, $F1EF, + $1231, $0210, $3273, $2252, $52B5, $4294, $72F7, $62D6, + $9339, $8318, $B37B, $A35A, $D3BD, $C39C, $F3FF, $E3DE, + $2462, $3443, $0420, $1401, $64E6, $74C7, $44A4, $5485, + $A56A, $B54B, $8528, $9509, $E5EE, $F5CF, $C5AC, $D58D, + $3653, $2672, $1611, $0630, $76D7, $66F6, $5695, $46B4, + $B75B, $A77A, $9719, $8738, $F7DF, $E7FE, $D79D, $C7BC, + $48C4, $58E5, $6886, $78A7, $0840, $1861, $2802, $3823, + $C9CC, $D9ED, $E98E, $F9AF, $8948, $9969, $A90A, $B92B, + $5AF5, $4AD4, $7AB7, $6A96, $1A71, $0A50, $3A33, $2A12, + $DBFD, $CBDC, $FBBF, $EB9E, $9B79, $8B58, $BB3B, $AB1A, + $6CA6, $7C87, $4CE4, $5CC5, $2C22, $3C03, $0C60, $1C41, + $EDAE, $FD8F, $CDEC, $DDCD, $AD2A, $BD0B, $8D68, $9D49, + $7E97, $6EB6, $5ED5, $4EF4, $3E13, $2E32, $1E51, $0E70, + $FF9F, $EFBE, $DFDD, $CFFC, $BF1B, $AF3A, $9F59, $8F78, + $9188, $81A9, $B1CA, $A1EB, $D10C, $C12D, $F14E, $E16F, + $1080, $00A1, $30C2, $20E3, $5004, $4025, $7046, $6067, + $83B9, $9398, $A3FB, $B3DA, $C33D, $D31C, $E37F, $F35E, + $02B1, $1290, $22F3, $32D2, $4235, $5214, $6277, $7256, + $B5EA, $A5CB, $95A8, $8589, $F56E, $E54F, $D52C, $C50D, + $34E2, $24C3, $14A0, $0481, $7466, $6447, $5424, $4405, + $A7DB, $B7FA, $8799, $97B8, $E75F, $F77E, $C71D, $D73C, + $26D3, $36F2, $0691, $16B0, $6657, $7676, $4615, $5634, + $D94C, $C96D, $F90E, $E92F, $99C8, $89E9, $B98A, $A9AB, + $5844, $4865, $7806, $6827, $18C0, $08E1, $3882, $28A3, + $CB7D, $DB5C, $EB3F, $FB1E, $8BF9, $9BD8, $ABBB, $BB9A, + $4A75, $5A54, $6A37, $7A16, $0AF1, $1AD0, $2AB3, $3A92, + $FD2E, $ED0F, $DD6C, $CD4D, $BDAA, $AD8B, $9DE8, $8DC9, + $7C26, $6C07, $5C64, $4C45, $3CA2, $2C83, $1CE0, $0CC1, + $EF1F, $FF3E, $CF5D, $DF7C, $AF9B, $BFBA, $8FD9, $9FF8, + $6E17, $7E36, $4E55, $5E74, $2E93, $3EB2, $0ED1, $1EF0 + +crc32tbl: LONG $00000000, $77073096, $ee0e612c, $990951ba, $076dc419, $706af48f, $e963a535, $9e6495a3, + $0edb8832, $79dcb8a4, $e0d5e91e, $97d2d988, $09b64c2b, $7eb17cbd, $e7b82d07, $90bf1d91, + $1db71064, $6ab020f2, $f3b97148, $84be41de, $1adad47d, $6ddde4eb, $f4d4b551, $83d385c7, + $136c9856, $646ba8c0, $fd62f97a, $8a65c9ec, $14015c4f, $63066cd9, $fa0f3d63, $8d080df5, + $3b6e20c8, $4c69105e, $d56041e4, $a2677172, $3c03e4d1, $4b04d447, $d20d85fd, $a50ab56b, + $35b5a8fa, $42b2986c, $dbbbc9d6, $acbcf940, $32d86ce3, $45df5c75, $dcd60dcf, $abd13d59, + $26d930ac, $51de003a, $c8d75180, $bfd06116, $21b4f4b5, $56b3c423, $cfba9599, $b8bda50f, + $2802b89e, $5f058808, $c60cd9b2, $b10be924, $2f6f7c87, $58684c11, $c1611dab, $b6662d3d, + $76dc4190, $01db7106, $98d220bc, $efd5102a, $71b18589, $06b6b51f, $9fbfe4a5, $e8b8d433, + $7807c9a2, $0f00f934, $9609a88e, $e10e9818, $7f6a0dbb, $086d3d2d, $91646c97, $e6635c01, + $6b6b51f4, $1c6c6162, $856530d8, $f262004e, $6c0695ed, $1b01a57b, $8208f4c1, $f50fc457, + $65b0d9c6, $12b7e950, $8bbeb8ea, $fcb9887c, $62dd1ddf, $15da2d49, $8cd37cf3, $fbd44c65, + $4db26158, $3ab551ce, $a3bc0074, $d4bb30e2, $4adfa541, $3dd895d7, $a4d1c46d, $d3d6f4fb, + $4369e96a, $346ed9fc, $ad678846, $da60b8d0, $44042d73, $33031de5, $aa0a4c5f, $dd0d7cc9, + $5005713c, $270241aa, $be0b1010, $c90c2086, $5768b525, $206f85b3, $b966d409, $ce61e49f, + $5edef90e, $29d9c998, $b0d09822, $c7d7a8b4, $59b33d17, $2eb40d81, $b7bd5c3b, $c0ba6cad, + $edb88320, $9abfb3b6, $03b6e20c, $74b1d29a, $ead54739, $9dd277af, $04db2615, $73dc1683, + $e3630b12, $94643b84, $0d6d6a3e, $7a6a5aa8, $e40ecf0b, $9309ff9d, $0a00ae27, $7d079eb1, + $f00f9344, $8708a3d2, $1e01f268, $6906c2fe, $f762575d, $806567cb, $196c3671, $6e6b06e7, + $fed41b76, $89d32be0, $10da7a5a, $67dd4acc, $f9b9df6f, $8ebeeff9, $17b7be43, $60b08ed5, + $d6d6a3e8, $a1d1937e, $38d8c2c4, $4fdff252, $d1bb67f1, $a6bc5767, $3fb506dd, $48b2364b, + $d80d2bda, $af0a1b4c, $36034af6, $41047a60, $df60efc3, $a867df55, $316e8eef, $4669be79, + $cb61b38c, $bc66831a, $256fd2a0, $5268e236, $cc0c7795, $bb0b4703, $220216b9, $5505262f, + $c5ba3bbe, $b2bd0b28, $2bb45a92, $5cb36a04, $c2d7ffa7, $b5d0cf31, $2cd99e8b, $5bdeae1d, + $9b64c2b0, $ec63f226, $756aa39c, $026d930a, $9c0906a9, $eb0e363f, $72076785, $05005713, + $95bf4a82, $e2b87a14, $7bb12bae, $0cb61b38, $92d28e9b, $e5d5be0d, $7cdcefb7, $0bdbdf21, + $86d3d2d4, $f1d4e242, $68ddb3f8, $1fda836e, $81be16cd, $f6b9265b, $6fb077e1, $18b74777, + $88085ae6, $ff0f6a70, $66063bca, $11010b5c, $8f659eff, $f862ae69, $616bffd3, $166ccf45, + $a00ae278, $d70dd2ee, $4e048354, $3903b3c2, $a7672661, $d06016f7, $4969474d, $3e6e77db, + $aed16a4a, $d9d65adc, $40df0b66, $37d83bf0, $a9bcae53, $debb9ec5, $47b2cf7f, $30b5ffe9, + $bdbdf21c, $cabac28a, $53b39330, $24b4a3a6, $bad03605, $cdd70693, $54de5729, $23d967bf, + $b3667a2e, $c4614ab8, $5d681b02, $2a6f2b94, $b40bbe37, $c30c8ea1, $5a05df1b, $2d02ef8d